diff --git a/COPYRIGHT b/COPYRIGHT index 46e2f093900..d980219c420 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -23,7 +23,6 @@ Licence of dependencies of third-party components used by Dolibarr (all compatib Component Version License GPL Compatible Usage ------------------------------------------------------------------------------------- PHP libraries: -ADOdb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package) EvalMath 1.0 BSD Yes Safe math expressions evaluation Escpos-php 2.2 MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers GeoIP2 0.2.0 Apache License 2.0 Yes Lib to make geoip convert diff --git a/ChangeLog b/ChangeLog index 031e740e008..9432bdea4d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,8 +26,88 @@ Following changes may create regressions for some external modules, but were nec * The signature of method getNomUrl() of class ProductFournisseur has been modified to match the signature of method Product * Trigger ORDER_SUPPLIER_DISPATCH is removed, use ORDER_SUPPLIER_RECEIVE and/or LINEORDER_SUPPLIER_DISPATCH instead. * All functions fetch_all() are deprecated for naming consitency, use fetchAll() instead +* Code standardization: $user->rights->propale is now $user->rights->propal everywhere. +* Deprecated method set_billed() on shipment and reception class has been removed. Use setBilled() instead. +***** ChangeLog for 16.0.1 compared to 16.0.0 ***** + +FIX: #16476 on massaction the pdf generation is not using the t… +FIX: #21416 Filter tag no-categorie in members +FIX: #21543 +FIX: #21799 inactive companies shall not be selectable for new proposals, orders and invoices +FIX: #21859 Don't show html balise on list for private/public note +FIX: #22164 +FIX: #22241 +FIX: #22263 Accountancy - Account number expected in place of a rowid on parent account on export +FIX: #22264 Accountancy - Translation on chart of accounts export +FIX: #22265 Accountancy - Account number expected in place of a rowid on export +FIX: #22334 +FIX: #22360 +FIX: #22379 creating events on supplier order +FIX: #22382 Error on length of supplier reference +FIX: #22386 IBAN not mandatory for International Export Countries +FIX: #22440 Lang Key "UserAccountNotDefined" is missing +FIX: #22482 +FIX: #22507 +FIX: Accountancy - Some manuals operations are displayed in subledger +FIX: API reception return error 500 +FIX: avoid override initial message ($this instead $object) +FIX: avoid some warnings (php8+) +FIX: Bad backtopage and CSRF on link for ticket message +FIX: bad closing select +FIX: broken feature, wrong fk_parent_line after cloning object +FIX: Column label +FIX: compatibility if javascript not actived +FIX: compatibility with Mysql <= 5.7 +FIX: contact deletion: execute trigger before really deleting +FIX: CronJob sendBackup +FIX: CSRF + lost value of constant after use save button +FIX: CSS +FIX: data integrity for llx_delivery table +FIX: default value for partnership status +FIX: deletion of the MO_CHILD link +FIX: Dictionary - Display error on cache_vatrates +FIX: Dolibarr#16476 version 2a +FIX: Duplicate creation of invoice when closing shipment linked to order +FIX: Duplicate in list when filtering on categories +FIX: extrafields with value '0' was '' +FIX: filters lost when sorting on productMargin and customerMargins +FIX: fk_expedition in $line can be usefull for triggers +FIX: Import in upgrade when using a socialnetwork field. +FIX: input hidden with fk_product of line on mo production can be usefull +FIX: inventory code must be different at each transation +FIX: inventory total columns +FIX: Issue #16476 on massaction the pdf generation is not using the thirdparty language settings +FIX: Linked object agenda card +FIX: missing check if category module is enabled +FIX: missing check if incoice as a payment (wrong status) +FIX: missing class "societe" when create another object with workflow +FIX: missing error message if image size too large +FIX: Missing reposition +FIX: missing the management of a constant in the Ticket config +FIX: Missing token in different URLs links +FIX: @ must be allowed into dol_eval to allow rules including external module string 'abc@def' +FIX: - php V8 get number doc saphir +FIX: - php V8 propal index last draft +FIX: Preview button position on documents list (case when the file is too long) +FIX: Project - on global view, missing display of ref customer +FIX: Protection against bad value into accurancy setup +FIX: reading of trackid in emailcollector (when on recipient suffix) +FIX: recruitment linked files +FIX: Remove use of code we should not have +FIX: Restore the option MAIN_OPTIMIZEFORTEXTBROWSER +FIX: Rich text is not diplayed +FIX: same thing in deleteline +FIX: Supplier Reference is lost when page breaks +FIX: support of array parameters in "add to bookmark" feature. +FIX: Test that web dir is correct in install +FIX: the shipment PDF was using the full size logo instead of small +FIX: Token Error : delete stock transfer +FIX: ToOfferALinkForOnlinePayment not translated +FIX: tooltip of technical tables added of a module +FIX: wrong result check when update expensereport line + ***** ChangeLog for 16.0.0 compared to 15.0.0 ***** @@ -236,6 +316,7 @@ Following changes may create regressions for some external modules, but were nec * Method fetch_all of DolResource has been renamed into fetchAll() to match naming conventions. * The hook 'upgrade' and 'doUpgrade2" has been renamed 'doUpgradeBefore' and 'doUpgradeAfterDB'. A new trigger 'doUpgradeAfterFiles' has been introduced. * The context hook 'suppliercard' when on the supplier tab of a thirdparty has been renamed into 'thirdpartysupplier' +* Because the module Resources highly linked to the Agenda module, the menu for Resources module has been moved into top menu Agenda. ***** ChangeLog for 15.0.3 compared to 15.0.2 ***** diff --git a/README-FR.md b/README-FR.md index a67bf204076..74be3f1754c 100644 --- a/README-FR.md +++ b/README-FR.md @@ -56,6 +56,10 @@ Vous pouvez aussi utiliser un serveur Web et une base de données prise en charg Pour mettre à jour Dolibarr depuis une vieille version vers celle ci: +- Faites une sauvegarde de votre instance [voir ce tutorial](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr) + +- Vérifiez que la nouvelle version est compatible avec la version PHP de votre serveur [voir PHP support](https://wiki.dolibarr.org/index.php/Releases). + - Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers fournis dans ce nouveau package. diff --git a/README.md b/README.md index c476f14a8cc..826955aef92 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ If you don't have time to install it yourself, you can try some commercial 'read Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate! - At first make a backup of your Dolibarr files & then [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr) -- Check that your installed PHP version is supported by the new version [see PHP support](./doc/phpmatrix.md). +- Check that your installed PHP version is supported by the new version [see PHP support](https://wiki.dolibarr.org/index.php/Releases). - Overwrite all old files from 'dolibarr' directory with files provided into the new version's package. - At first next access, Dolibarr will redirect you to the "install/" page to follow the upgrade process.  If an `install.lock` file exists to lock any other upgrade process, the application will ask you to remove the file manually (you should find the `install.lock` file in the directory used to store generated and uploaded documents, in most cases, it is the directory called "*documents*"). diff --git a/build/debian/control b/build/debian/control index 059325eecb9..b2890253b32 100755 --- a/build/debian/control +++ b/build/debian/control @@ -19,7 +19,6 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm | php-pear, php-mail-mime, # php-tcpdf, # libfpdf-tpl-php, php-fpdf, -# libphp-adodb, # libnusoap-php, # libphp-pclzip, # Required javascript libraries diff --git a/build/debian/copyright b/build/debian/copyright index 403763544a5..b99b8a65b5d 100644 --- a/build/debian/copyright +++ b/build/debian/copyright @@ -61,31 +61,6 @@ License: GPL-3+ ------------------------------------------------------------ -Files: htdocs/includes/adodbtime/* -Copyright: 2003-2005, John Lim - unknown, jackbbs -License: BSD-3-Clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - . - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - . - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - . - Neither the name of the John Lim nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. -Comment: - Those files are not shipped in the binary package since we use - the library as packaged in "libphp-adodb". - - ------------------------------------------------------------- - Files: htdocs/includes/ckeditor/* Copyright: 2003-2012 CKSource - Frederico Knabben License: GPL-2+ diff --git a/build/debian/dolibarr.postinst b/build/debian/dolibarr.postinst index 26a08a55826..6ba9123ede4 100644 --- a/build/debian/dolibarr.postinst +++ b/build/debian/dolibarr.postinst @@ -146,7 +146,6 @@ case "$1" in #else # File already exist. We add params not found. #echo Add new params to overwrite path to use shared libraries/fonts - #grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "" >> $config ##grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "" >> $config #grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "" >> $config #grep -q -c "dolibarr_lib_ODTPHP_PATHTOPCLZIP" $config || [ ! -d "/usr/share/php/libphp-pclzip" ] || echo "" >> $config diff --git a/build/debian/install.forced.php.install b/build/debian/install.forced.php.install index 1d10699f1d4..801b1b372af 100644 --- a/build/debian/install.forced.php.install +++ b/build/debian/install.forced.php.install @@ -31,7 +31,6 @@ $force_install_distrib='debian'; // - not removed from package (see rm in rules file), // - declared into dependencies (see Depends in control file) //$force_dolibarr_lib_TCPDF_PATH=''; -//$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$force_dolibarr_lib_GEOIP_PATH=''; //$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; //$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip'; diff --git a/build/debian/rules b/build/debian/rules index dab5d84fd11..b63fcffde93 100755 --- a/build/debian/rules +++ b/build/debian/rules @@ -89,7 +89,6 @@ override_dh_install: rm -fr build/zip # clean from all PHP embedded libraries (we use package dependencies instead) -# rm -fr htdocs/includes/adodbtime # rm -fr htdocs/includes/geoip # rm -fr htdocs/includes/nusoap # rm -fr htdocs/includes/odtphp/zip/pclzip diff --git a/build/makepack-dolibarrmodule.pl b/build/makepack-dolibarrmodule.pl index 4a9a217b570..8fbb28dc35f 100755 --- a/build/makepack-dolibarrmodule.pl +++ b/build/makepack-dolibarrmodule.pl @@ -293,6 +293,7 @@ foreach my $PROJECT (@PROJECTLIST) { } print "Clean $BUILDROOT\n"; $ret=`rm -fr $BUILDROOT/$PROJECTLC/.cache`; + $ret=`rm -fr $BUILDROOT/$PROJECTLC/.git`; $ret=`rm -fr $BUILDROOT/$PROJECTLC/.project`; $ret=`rm -fr $BUILDROOT/$PROJECTLC/.settings`; $ret=`rm -fr $BUILDROOT/$PROJECTLC/index.php`; diff --git a/build/rpm/dolibarr_fedora.spec b/build/rpm/dolibarr_fedora.spec index 1c6716408b7..c94863e8919 100755 --- a/build/rpm/dolibarr_fedora.spec +++ b/build/rpm/dolibarr_fedora.spec @@ -25,7 +25,7 @@ BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: Applications/Productivity -Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts +Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-nusoap, dejavu-sans-fonts Requires: mysql-server, mysql #BuildRequires: desktop-file-utils @@ -104,7 +104,6 @@ cui hai bisogno ed essere facile da usare. %{__cp} -pr htdocs $RPM_BUILD_ROOT%{_datadir}/%{name} %{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name} %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source -%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/adodbtime %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts @@ -274,7 +273,6 @@ if [ -s $config ] && grep -q "File generated by" $config then # File already exist. We add params not found. echo Add new params to overwrite path to use shared libraries/fonts - grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "" >> $config grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "" >> $config #grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "" >> $config grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "" >> $config diff --git a/build/rpm/dolibarr_generic.spec b/build/rpm/dolibarr_generic.spec index f6d81feaea4..8e71713146e 100755 --- a/build/rpm/dolibarr_generic.spec +++ b/build/rpm/dolibarr_generic.spec @@ -46,7 +46,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version} Group: Applications/Productivity -Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts, php-mbstring, php-xml +Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-nusoap, dejavu-sans-fonts, php-mbstring, php-xml Requires: mysql-server, mysql BuildRequires: desktop-file-utils %else @@ -58,7 +58,7 @@ Requires: mysql, mysql-client %if 0%{?suse_version} # Voir http://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros Group: Productivity/Office/Management -Requires: apache2, apache2-mod_php5, php5 >= 5.3.0, php5-gd, php5-ldap, php5-imap, php5-mysql, php5-openssl, dejavu +Requires: apache2, apache2-mod_php, php >= 5.3.0, php-gd, php-ldap, php-imap, php-mysql, php-openssl, dejavu Requires: mysql-community-server, mysql-community-server-client BuildRequires: update-desktop-files fdupes %else @@ -169,7 +169,6 @@ cui hai bisogno ed essere facile da usare. %{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name} %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version} -%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/adodbtime %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap %{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts %else @@ -425,7 +424,6 @@ if [ -s $config ] && grep -q "File generated by" $config then # File already exist. We add params not found. echo Add new params to overwrite path to use shared libraries/fonts - grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "" >> $config grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "" >> $config #grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "" >> $config grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "" >> $config diff --git a/build/rpm/dolibarr_mandriva.spec b/build/rpm/dolibarr_mandriva.spec index a371e3ab02f..5c8a8e39aae 100755 --- a/build/rpm/dolibarr_mandriva.spec +++ b/build/rpm/dolibarr_mandriva.spec @@ -271,7 +271,6 @@ if [ -s $config ] && grep -q "File generated by" $config then # File already exist. We add params not found. echo Add new params to overwrite path to use shared libraries/fonts - grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "" >> $config grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "" >> $config #grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "" >> $config grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "" >> $config diff --git a/build/rpm/dolibarr_opensuse.spec b/build/rpm/dolibarr_opensuse.spec index bd6834582ac..ea79a50af58 100755 --- a/build/rpm/dolibarr_opensuse.spec +++ b/build/rpm/dolibarr_opensuse.spec @@ -25,7 +25,7 @@ BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: Productivity/Office/Management -Requires: apache2, apache2-mod_php5, php5 >= 5.3.0, php5-gd, php5-ldap, php5-imap, php5-mysql, php5-openssl, dejavu +Requires: apache2, apache2-mod_php, php >= 5.3.0, php-gd, php-ldap, php-imap, php-mysql, php-openssl, dejavu Requires: mysql-community-server, mysql-community-server-client %if 0%{?suse_version} BuildRequires: update-desktop-files fdupes @@ -66,7 +66,6 @@ ed essere facile da usare. Programmo web, progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare. -%_datadir/dolibarr/htdocs/webhook #---- prep %prep @@ -282,7 +281,6 @@ if [ -s $config ] && grep -q "File generated by" $config then # File already exist. We add params not found. echo Add new params to overwrite path to use shared libraries/fonts - grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "" >> $config grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "" >> $config #grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "" >> $config grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "" >> $config diff --git a/build/rpm/install.forced.php.fedora b/build/rpm/install.forced.php.fedora index a8bc0d390c6..636514260cf 100644 --- a/build/rpm/install.forced.php.fedora +++ b/build/rpm/install.forced.php.fedora @@ -20,7 +20,6 @@ $force_install_lockinstall='444'; $force_install_distrib='rpmfedora'; // Value to overwrite path to use shared libraries/fonts instead of embedded one -$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; //$force_dolibarr_lib_GEOIP_PATH=''; $force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; diff --git a/build/rpm/install.forced.php.mandriva b/build/rpm/install.forced.php.mandriva index a254eebbf7b..5471d146391 100644 --- a/build/rpm/install.forced.php.mandriva +++ b/build/rpm/install.forced.php.mandriva @@ -20,7 +20,6 @@ $force_install_lockinstall='444'; $force_install_distrib='rpmmandriva'; // Value to overwrite path to use shared libraries/fonts instead of embedded one -$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; //$force_dolibarr_lib_GEOIP_PATH=''; $force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; diff --git a/build/rpm/install.forced.php.opensuse b/build/rpm/install.forced.php.opensuse index 24da4417121..ea50180caf4 100644 --- a/build/rpm/install.forced.php.opensuse +++ b/build/rpm/install.forced.php.opensuse @@ -20,7 +20,6 @@ $force_install_lockinstall='444'; $force_install_distrib='rpmopensuse'; // Value to overwrite path to use shared libraries/fonts instead of embedded one -//$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; //$force_dolibarr_lib_GEOIP_PATH=''; //$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; diff --git a/dev/examples/ldap/ldapsearch_sample1.txt b/dev/examples/ldap/ldapsearch_sample1.txt index a02ad632cd0..2a30f19ab22 100644 --- a/dev/examples/ldap/ldapsearch_sample1.txt +++ b/dev/examples/ldap/ldapsearch_sample1.txt @@ -1,28 +1,29 @@ # ldapsearch_sample1.txt # ldapsearch is into package ldap-utils on debian. # -# Use this sample to search into a ldap +# Use this samples to test a ldap_bind or to make a search into a ldap # # Anonymous access -# ldapsearch -h hostname -p 389 +# ldapsearch -h hostname -p 389 # # Login access (using a Bind DN) -# ldapsearch -h hostname -p 389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -# ldapsearch -d1 -H ldap://hostname:389 -x -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password +# Such access must succeed to use LDAP as login module. +# ldapsearch -h hostname -p 389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password +# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password +# ldapsearch -d1 -H ldap://hostname:389 -x -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password +# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password # # Login access in SSL (using a Bind DN) -# ldapsearch -H ldaps://hostnamme:636 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local +# ldapsearch -H ldaps://hostnamme:636 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local" # If it fails, you may try to use "hostname" that is real name of certificate. # You must also check that /etc/ldap/ldap.conf contains the line TLS_CACERT /etc/ssl/certs/ca-certificates.crt # What to search -# ldapsearch -h hostname -p 389 -x -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local" -# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "ou=people,dc=teclib,dc=infra" -# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "o=somecompany.com" "(objectclass=*)" +# ldapsearch -h hostname -p 389 -x -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local" +# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "ou=people,dc=teclib,dc=infra" +# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "o=somecompany.com" "(objectclass=*)" # # Example to test a ldap search: -# ldapsearch -h hostname -p 389 -x -z 5 -b 'OU=Collaborateurs,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -D 'CN=UserAdmin,OU=Informatique,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -w password +# ldapsearch -h hostname -p 389 -x -z 5 -b 'OU=Collaborateurs,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -D 'CN=UserAdmin,OU=Informatique,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -w password diff --git a/dev/resources/iso-normes/accountancy/accountancy_rules.txt b/dev/resources/iso-normes/accountancy/accountancy_rules.txt index a265bcf4f54..918d0f01d3c 100644 --- a/dev/resources/iso-normes/accountancy/accountancy_rules.txt +++ b/dev/resources/iso-normes/accountancy/accountancy_rules.txt @@ -12,3 +12,11 @@ Le client règle rapidement et on lui accorde un escompte de 3% (120 € * 3% = 411xxx 3,60 € TTC Et ça marche à l’inverse avec un fournisseur sauf que l’on est en 775000 au lieu de 665000 pour escompte obtenus. + + + + +Un compte comptable de Tiers vente = Acount Receivable +Un compte comptable de Tiers achat = Acount Payable + + \ No newline at end of file diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 752a9271e59..e286450f73b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -15,9 +15,10 @@ htdocs/install/doctemplates/websites htdocs/conf.php */nltechno* - */htdocs/includes source .git + htdocs/includes + htdocs/install/doctemplates/websites diff --git a/dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf b/dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf index 45b4a9b8084..2eedad18821 100644 --- a/dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf +++ b/dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf @@ -1,8 +1,7 @@ # Fail2Ban configuration file # -# Regexp to catch known spambots and software alike. Please verify -# that it is your intent to block IPs which were driven by -# above mentioned bots. +# Regexp to detect access on public pages so we can add mitigation on IP making too much +# access to your a Dolibarr instance. [Definition] @@ -11,7 +10,7 @@ # echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 --- Access to GET /public/clicktodial/cidlookup.php" >> /mypath/documents/dolibarr.log # # then -# fail2ban-client status web-dol-passforgotten +# fail2ban-client status web-dolibarr-limitpublic # # To test rule file on a existing log file # fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-limitpublic.conf diff --git a/dev/setup/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf b/dev/setup/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf index d5922909ba9..1e126c17693 100644 --- a/dev/setup/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf +++ b/dev/setup/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf @@ -1,8 +1,7 @@ # Fail2Ban configuration file # -# Regexp to catch known spambots and software alike. Please verify -# that it is your intent to block IPs which were driven by -# above mentioned bots. +# Regexp to detect try to check a couple login/password so we can add mitigation +# on IP making too much tries. [Definition] @@ -11,7 +10,7 @@ # echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 functions_dolibarr::check_user_password_abcd Authentication KO" >> /mypath/documents/dolibarr.log # # then -# fail2ban-client status web-dol-bruteforce +# fail2ban-client status web-dolibarr-rulesbruteforce # # To test rule file on a existing log file # fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf diff --git a/dev/setup/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf b/dev/setup/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf index edc2ca68092..8cc20dd4be4 100644 --- a/dev/setup/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf +++ b/dev/setup/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf @@ -1,8 +1,7 @@ # Fail2Ban configuration file # -# Regexp to catch known spambots and software alike. Please verify -# that it is your intent to block IPs which were driven by -# above mentioned bots. +# Regexp to detect access on passwordforgotten.php page so we can add mitigation on IP making too much +# access to this Dolibarr page. [Definition] @@ -11,7 +10,7 @@ # echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 --- Access to GET /passwordforgotten.php - action=buildnewpassword, massaction=" >> /mypath/documents/dolibarr.log # # then -# fail2ban-client status web-dol-passforgotten +# fail2ban-client status web-dolibarr-rulespassforgotten # # To test rule file on a existing log file # fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf diff --git a/dev/tools/github_authors_and_commits_peryear.sh b/dev/tools/github_authors_and_commits_peryear.sh index 7184d6c44ae..bdba2a2a6ed 100755 --- a/dev/tools/github_authors_and_commits_peryear.sh +++ b/dev/tools/github_authors_and_commits_peryear.sh @@ -1,5 +1,8 @@ #!/bin/sh - +# +# Count number of different contributors and number of commits for a given year. +# + if [ "x$1" = "x" ]; then echo "Usage: $0 YEAR" exit diff --git a/dev/tools/github_commits_perversion.sh b/dev/tools/github_commits_perversion.sh index bf76e68bc43..2f3020ff721 100755 --- a/dev/tools/github_commits_perversion.sh +++ b/dev/tools/github_commits_perversion.sh @@ -1,6 +1,10 @@ #/bin/bash -Releases=("3.8" "3.9" "4.0" "5.0" "6.0" " 7.0" "develop") -Dates=("2013-01-01", "2014-01-01", "2015-01-01", "2016-07-01", "2017-02-01", "2017-07-01", "2018-02-01", "2050-01-01") +# +# Count number of commits per user and per versions (using date for version detection) +# + +Releases=("16.0" "develop") +Dates=("2022-01-01" "2022-08-31" "2050-01-01") let "counter = 1" for i in "${Releases[@]}" diff --git a/dev/tools/github_lines_perusers.sh b/dev/tools/github_lines_perusers.sh new file mode 100755 index 00000000000..9a3fad09d62 --- /dev/null +++ b/dev/tools/github_lines_perusers.sh @@ -0,0 +1,16 @@ +#/bin/bash +# +# Count number of lines modified per user for a given branch +# + +if [ "x$2" = "x" ]; then + echo "Usage: $0 tagnamestart|START tagnameend|HEAD" + exit +fi + + +echo "git log $1..$2 --shortstat | grep ... | perl ... > /tmp/github_lines_perusers.tmp" +git log $1..$2 --shortstat | grep -e 'Author:' -e 'Date:' -e ' changed' -e ' insertion' -e ' deletion' | perl -n -e '/^(.*)$/; $line = $1; if ($line =~ /(changed|insertion|deletion)/) { $line =~ s/[^0-9\s]//g; my @arr=split /\s+/, $line; $tot=0; for (1..@arr) { $tot += $arr[$_]; }; print $tot."\n"; } else { print $line."\n"; };' > /tmp/github_lines_perusers.tmp + +cat /tmp/github_lines_perusers.tmp | awk 'BEGIN { FS="\n"; print "user and nb of lines"; lastuser=""; } { if ($1 ~ /Author:/) { lastuser=$1 }; if ($1 ~ /^[0-9]+$/) { aaa[lastuser]+=$1; } } END { for (var in aaa) print var," ",aaa[var]; } ' + diff --git a/dev/tools/optimize_images.sh b/dev/tools/optimize_images.sh index 89717063006..bfbe461b9d2 100755 --- a/dev/tools/optimize_images.sh +++ b/dev/tools/optimize_images.sh @@ -121,9 +121,11 @@ main() # Search of all jpg/jpeg/png in $INPUT # We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT - echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v $OUTPUT" + echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT" + #echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/'" IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT) - + #IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/') + if [ "$QUIET" == "0" ]; then echo --- Optimizing $INPUT --- echo diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 36b9f3a8b93..9eabd378e11 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -85,7 +85,7 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) { // Clean code // To manage zero or not at the end of the accounting account - if ($conf->global->ACCOUNTING_MANAGE_ZERO == 1) { + if (!empty($conf->global->ACCOUNTING_MANAGE_ZERO)) { $account_number = $account_number; } else { $account_number = clean_account($account_number); @@ -148,7 +148,7 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) { // Clean code // To manage zero or not at the end of the accounting account - if (isset($conf->global->ACCOUNTING_MANAGE_ZERO) && $conf->global->ACCOUNTING_MANAGE_ZERO == 1) { + if (!empty($conf->global->ACCOUNTING_MANAGE_ZERO)) { $account_number = $account_number; } else { $account_number = clean_account($account_number); @@ -426,11 +426,9 @@ if ($action == 'create') { print ''.$langs->trans('Modify').''; } - if ($user->hasRight('accounting', 'chartofaccount')) { - print 'id.'">'.$langs->trans('Delete').''; - } else { - print ''.$langs->trans('Delete').''; - } + // Delete + $permissiontodelete = $user->hasRight('accounting', 'chartofaccount'); + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); print ''; } diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 89ed7b538ba..38330a37e13 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -305,7 +305,7 @@ if ($action == 'create') { print ''.$langs->trans('Modify').''; - // print '' . $langs->trans('Delete') . ''; + //print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); print ''; } diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index 22d39dea7d0..8236b83eb3d 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -266,6 +266,9 @@ if (!$user->admin) { if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { print '
' . $langs->trans("ConstantIsOn", "FACTURE_DEPOSITS_ARE_JUST_PAYMENTS") . '
'; } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + print '
' . $langs->trans("ConstantIsOn", "FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS") . '
'; + } if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { print '
' . $langs->trans("ConstantIsOn", "ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY") . '
'; } diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 442a70600e5..e9836c4efbf 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -235,7 +235,7 @@ $param = ''; if (GETPOST('cancel', 'alpha')) { $action = 'list'; $massaction = ''; } -if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') { +if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') { $massaction = ''; } @@ -487,43 +487,60 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) { + $db->begin(); + + if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) { + $lettering = new Lettering($db); + $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true); + if ($nb_lettering < 0) { + setEventMessages('', $lettering->errors, 'errors'); + $error++; + } + } + $nbok = 0; - foreach ($toselect as $toselectid) { - $result = $object->fetch($toselectid); - if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) { - $result = $object->deleteMvtNum($object->piece_num); - if ($result > 0) { - $nbok++; - } else { + if (!$error) { + foreach ($toselect as $toselectid) { + $result = $object->fetch($toselectid); + if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) { + $result = $object->deleteMvtNum($object->piece_num); + if ($result > 0) { + $nbok++; + } else { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + break; + } + } elseif ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); $error++; break; } - } elseif ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - $error++; - break; } } - // Message for elements well deleted - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs'); - } elseif ($nbok > 0) { - setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs'); - } elseif (!$error) { - setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs'); - } - if (!$error) { + $db->commit(); + + // Message for elements well deleted + if ($nbok > 1) { + setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs'); + } elseif ($nbok > 0) { + setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs'); + } else { + setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs'); + } + header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : '')); exit; + } else { + $db->rollback(); } } // others mass actions if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) { - if ($massaction == 'lettering') { + if ($massaction == 'letteringauto') { $lettering = new Lettering($db); $nb_lettering = $lettering->bookkeepingLetteringAll($toselect); if ($nb_lettering < 0) { @@ -544,7 +561,17 @@ if (empty($reshook)) { header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); exit(); } - } elseif ($action == 'unlettering' && $confirm == "yes") { + } elseif ($massaction == 'letteringmanual') { + $lettering = new Lettering($db); + $result = $lettering->updateLettering($toselect); + if ($result < 0) { + setEventMessages('', $lettering->errors, 'errors'); + } else { + setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs'); + header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); + exit(); + } + } elseif ($action == 'unletteringauto' && $confirm == "yes") { $lettering = new Lettering($db); $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true); if ($nb_lettering < 0) { @@ -565,6 +592,16 @@ if (empty($reshook)) { header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); exit(); } + } elseif ($action == 'unletteringmanual' && $confirm == "yes") { + $lettering = new Lettering($db); + $nb_lettering = $lettering->deleteLettering($toselect); + if ($result < 0) { + setEventMessages('', $lettering->errors, 'errors'); + } else { + setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs'); + header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); + exit(); + } } } } @@ -846,16 +883,16 @@ if ($limit > 0 && $limit != $conf->liste_limit) { // List of mass actions available $arrayofmassactions = array(); -/* if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) { - $arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering'); - $arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering'); + $arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto'); + $arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto'); + $arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual'); + $arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual'); } -*/ if ($user->hasRight('accounting', 'mouvements', 'supprimer')) { $arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) { +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions); @@ -905,8 +942,10 @@ if (empty($reshook)) { print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1); -if ($massaction == 'preunlettering') { - print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1); +if ($massaction == 'preunletteringauto') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1); +} elseif ($massaction == 'preunletteringmanual') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1); } elseif ($massaction == 'predeletebookkeepingwriting') { print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1); } @@ -946,7 +985,7 @@ if (!empty($arrayfields['t.piece_num']['checked'])) { // Code journal if (!empty($arrayfields['t.code_journal']['checked'])) { print ''; - print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'small maxwidth150'); + print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'small maxwidth75'); print ''; } // Date document diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index 9eee84ecfe5..7ab6666d4c4 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -209,7 +209,7 @@ if (GETPOST('cancel', 'alpha')) { $action = 'list'; $massaction = ''; } -if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') { +if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') { $massaction = ''; } @@ -402,43 +402,60 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) { + $db->begin(); + + if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) { + $lettering = new Lettering($db); + $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true); + if ($nb_lettering < 0) { + setEventMessages('', $lettering->errors, 'errors'); + $error++; + } + } + $nbok = 0; - foreach ($toselect as $toselectid) { - $result = $object->fetch($toselectid); - if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) { - $result = $object->deleteMvtNum($object->piece_num); - if ($result > 0) { - $nbok++; - } else { + if (!$error) { + foreach ($toselect as $toselectid) { + $result = $object->fetch($toselectid); + if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) { + $result = $object->deleteMvtNum($object->piece_num); + if ($result > 0) { + $nbok++; + } else { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + break; + } + } elseif ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); $error++; break; } - } elseif ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - $error++; - break; } } - // Message for elements well deleted - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs'); - } elseif ($nbok > 0) { - setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs'); - } elseif (!$error) { - setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs'); - } - if (!$error) { + $db->commit(); + + // Message for elements well deleted + if ($nbok > 1) { + setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs'); + } elseif ($nbok > 0) { + setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs'); + } elseif (!$error) { + setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs'); + } + header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : '')); exit; + } else { + $db->rollback(); } } // others mass actions if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) { - if ($massaction == 'lettering') { + if ($massaction == 'letteringauto') { $lettering = new Lettering($db); $nb_lettering = $lettering->bookkeepingLetteringAll($toselect); if ($nb_lettering < 0) { @@ -459,7 +476,17 @@ if (empty($reshook)) { header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); exit(); } - } elseif ($action == 'unlettering' && $confirm == "yes") { + } elseif ($massaction == 'letteringmanual') { + $lettering = new Lettering($db); + $result = $lettering->updateLettering($toselect); + if ($result < 0) { + setEventMessages('', $lettering->errors, 'errors'); + } else { + setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs'); + header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); + exit(); + } + } elseif ($action == 'unletteringauto' && $confirm == "yes") { $lettering = new Lettering($db); $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true); if ($nb_lettering < 0) { @@ -480,6 +507,16 @@ if (empty($reshook)) { header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); exit(); } + } elseif ($action == 'unletteringmanual' && $confirm == "yes") { + $lettering = new Lettering($db); + $nb_lettering = $lettering->deleteLettering($toselect); + if ($result < 0) { + setEventMessages('', $lettering->errors, 'errors'); + } else { + setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs'); + header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param); + exit(); + } } } } @@ -580,13 +617,15 @@ print $formconfirm; // List of mass actions available $arrayofmassactions = array(); if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) { - $arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering'); - $arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering'); + $arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto'); + $arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto'); + $arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual'); + $arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual'); } if ($user->hasRight('accounting', 'mouvements', 'supprimer')) { $arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) { +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions); @@ -626,8 +665,10 @@ if ($limit > 0 && $limit != $conf->liste_limit) { print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1); -if ($massaction == 'preunlettering') { - print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1); +if ($massaction == 'preunletteringauto') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1); +} elseif ($massaction == 'preunletteringmanual') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1); } elseif ($massaction == 'predeletebookkeepingwriting') { print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1); } @@ -702,12 +743,12 @@ print ''; // Movement number if (!empty($arrayfields['t.piece_num']['checked'])) { - print ''; + print ''; } // Code journal if (!empty($arrayfields['t.code_journal']['checked'])) { print ''; - print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1); + print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'maxwidth75'); print ''; } // Date document diff --git a/htdocs/accountancy/class/accountingjournal.class.php b/htdocs/accountancy/class/accountingjournal.class.php index 3134dfa95ba..982d6849f6e 100644 --- a/htdocs/accountancy/class/accountingjournal.class.php +++ b/htdocs/accountancy/class/accountingjournal.class.php @@ -456,7 +456,7 @@ class AccountingJournal extends CommonObject $sql .= " SELECT DISTINCT fk_docdet"; $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; $sql .= " WHERE doc_type = 'asset'"; - $sql .= ")"; + $sql .= ") "; }*/ $sql .= "SELECT ad.fk_asset AS rowid, a.ref AS asset_ref, a.label AS asset_label, a.acquisition_value_ht AS asset_acquisition_value_ht"; diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index 405a630942e..857cd12115e 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -33,11 +33,52 @@ include_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; */ class Lettering extends BookKeeping { - /** - * @var BookKeeping[] Bookkeeping cached - */ - public static $bookkeeping_cached = array(); - + public static $doc_type_infos = array( + 'customer_invoice' => array( + 'payment_table' => 'paiement', + 'payment_table_fk_bank' => 'fk_bank', + 'doc_payment_table' => 'paiement_facture', + 'doc_payment_table_fk_payment' => 'fk_paiement', + 'doc_payment_table_fk_doc' => 'fk_facture', + 'linked_info' => array( + array( + 'table' => 'paiement_facture', + 'fk_doc' => 'fk_facture', + 'fk_link' => 'fk_paiement', + 'prefix' => 'p', + ), + array( + 'table' => 'societe_remise_except', + 'fk_doc' => 'fk_facture_source', + 'fk_link' => 'fk_facture', + 'prefix' => 'a', + 'is_fk_link_is_also_fk_doc' => true, + ), + ), + ), + 'supplier_invoice' => array( + 'payment_table' => 'paiementfourn', + 'payment_table_fk_bank' => 'fk_bank', + 'doc_payment_table' => 'paiementfourn_facturefourn', + 'doc_payment_table_fk_payment' => 'fk_paiementfourn', + 'doc_payment_table_fk_doc' => 'fk_facturefourn', + 'linked_info' => array( + array( + 'table' => 'paiementfourn_facturefourn', + 'fk_doc' => 'fk_facturefourn', + 'fk_link' => 'fk_paiementfourn', + 'prefix' => 'p', + ), + array( + 'table' => 'societe_remise_except', + 'fk_doc' => 'fk_invoice_supplier_source', + 'fk_link' => 'fk_invoice_supplier', + 'prefix' => 'a', + 'is_fk_link_is_also_fk_doc' => true, + ), + ), + ), + ); /** * letteringThirdparty @@ -250,26 +291,17 @@ class Lettering extends BookKeeping $lettre = 'AAA'; $sql = "SELECT DISTINCT ab2.lettering_code"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping As ab"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu2 ON bu2.url_id = bu.url_id"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.fk_doc = bu2.fk_bank"; - $sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")"; - $sql .= " AND ab.doc_type = 'bank'"; - $sql .= " AND ab2.doc_type = 'bank'"; - $sql .= " AND bu.type = 'company'"; - $sql .= " AND bu2.type = 'company'"; - $sql .= " AND ab.subledger_account != ''"; - $sql .= " AND ab2.subledger_account != ''"; - $sql .= " AND ab.lettering_code IS NULL"; - $sql .= " AND ab2.lettering_code != ''"; - $sql .= " ORDER BY ab2.lettering_code DESC"; - $sql .= " LIMIT 1 "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.subledger_account = ab.subledger_account"; + $sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")"; + $sql .= " AND ab2.lettering_code != ''"; + $sql .= " ORDER BY ab2.lettering_code DESC"; + $sql .= " LIMIT 1 "; $resqla = $this->db->query($sql); if ($resqla) { $obj = $this->db->fetch_object($resqla); - $lettre = (empty($obj->lettering_code) ? 'AAA' : $obj->lettering_code); + $lettre = (empty($obj->lettering_code) ? $lettre : $obj->lettering_code); if (!empty($obj->lettering_code)) { $lettre++; } @@ -301,7 +333,7 @@ class Lettering extends BookKeeping if (!$error) { $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET"; $sql .= " lettering_code='".$this->db->escape($lettre)."'"; - $sql .= " , date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false + $sql .= ", date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false $sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).") AND lettering_code IS NULL AND subledger_account != ''"; dol_syslog(get_class($this)."::update", LOG_DEBUG); @@ -336,7 +368,7 @@ class Lettering extends BookKeeping $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET"; $sql .= " lettering_code = NULL"; - $sql .= " , date_lettering = NULL"; + $sql .= ", date_lettering = NULL"; $sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).")"; $sql .= " AND subledger_account != ''"; @@ -374,16 +406,7 @@ class Lettering extends BookKeeping $errors = array(); $nb_lettering = 0; - $result = $this->bookkeepingLettering($bookkeeping_ids, 'customer_invoice', $unlettering); - if ($result < 0) { - $error++; - $errors = array_merge($errors, $this->errors); - $nb_lettering += abs($result) - 2; - } else { - $nb_lettering += $result; - } - - $result = $this->bookkeepingLettering($bookkeeping_ids, 'supplier_invoice', $unlettering); + $result = $this->bookkeepingLettering($bookkeeping_ids, $unlettering); if ($result < 0) { $error++; $errors = array_merge($errors, $this->errors); @@ -404,11 +427,10 @@ class Lettering extends BookKeeping * Lettering bookkeeping lines * * @param array $bookkeeping_ids Lettering specific list of bookkeeping id - * @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice') * @param bool $unlettering Do unlettering * @return int <0 if error (nb lettered = result -1), 0 if noting to lettering, >0 if OK (nb lettered) */ - public function bookkeepingLettering($bookkeeping_ids, $type = 'customer_invoice', $unlettering = false) + public function bookkeepingLettering($bookkeeping_ids, $unlettering = false) { global $langs; @@ -416,11 +438,14 @@ class Lettering extends BookKeeping // Clean parameters $bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array(); - $type = trim($type); $error = 0; $nb_lettering = 0; - $grouped_lines = $this->getLinkedLines($bookkeeping_ids, $type); + $grouped_lines = $this->getLinkedLines($bookkeeping_ids); + if (!is_array($grouped_lines)) { + return -2; + } + foreach ($grouped_lines as $lines) { $group_error = 0; $total = 0; @@ -478,52 +503,214 @@ class Lettering extends BookKeeping /** * Lettering bookkeeping lines * - * @param array $bookkeeping_ids Lettering specific list of bookkeeping id - * @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice') - * @return array|int <0 if error otherwise all linked lines by block + * @param array $bookkeeping_ids Lettering specific list of bookkeeping id + * @param bool $only_has_subledger_account Get only lines who have subledger account + * @return array|int <0 if error otherwise all linked lines by block */ - public function getLinkedLines($bookkeeping_ids, $type = 'customer_invoice') + public function getLinkedLines($bookkeeping_ids, $only_has_subledger_account = true) { global $conf, $langs; $this->errors = array(); // Clean parameters $bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array(); - $type = trim($type); - if ($type == 'customer_invoice') { - $doc_type = 'customer_invoice'; - $bank_url_type = 'payment'; - $payment_element = 'paiement_facture'; - $fk_payment_element = 'fk_paiement'; - $fk_element = 'fk_facture'; - $account_number = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER; - } elseif ($type == 'supplier_invoice') { - $doc_type = 'supplier_invoice'; - $bank_url_type = 'payment_supplier'; - $payment_element = 'paiementfourn_facturefourn'; - $fk_payment_element = 'fk_paiementfourn'; - $fk_element = 'fk_facturefourn'; - $account_number = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER; - } else { + // Get all bookkeeping lines + $sql = "SELECT DISTINCT ab.doc_type, ab.fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab"; + $sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")"; + $sql .= " AND ab.fk_doc > 0"; + if (!empty($bookkeeping_ids)) { + // Get all bookkeeping lines of piece number + $sql .= " AND EXISTS ("; + $sql .= " SELECT rowid"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS pn"; + $sql .= " WHERE pn.entity IN (" . getEntity('accountancy') . ")"; + $sql .= " AND pn.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")"; + $sql .= " AND pn.piece_num = ab.piece_num"; + $sql .= " )"; + } + if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''"; + + dol_syslog(__METHOD__ . " - Get all bookkeeping lines", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) { + $this->errors[] = "Error " . $this->db->lasterror(); + return -1; + } + + $bookkeeping_lines_by_type = array(); + while ($obj = $this->db->fetch_object($resql)) { + $bookkeeping_lines_by_type[$obj->doc_type][$obj->fk_doc] = $obj->fk_doc; + } + $this->db->free($resql); + + if (empty($bookkeeping_lines_by_type)) { + return array(); + } + + if (!empty($bookkeeping_lines_by_type['bank'])) { + $new_bookkeeping_lines_by_type = $this->getDocTypeAndFkDocFromBankLines($bookkeeping_lines_by_type['bank']); + if (!is_array($new_bookkeeping_lines_by_type)) { + return -1; + } + foreach ($new_bookkeeping_lines_by_type as $doc_type => $fk_docs) { + foreach ($fk_docs as $fk_doc) { + $bookkeeping_lines_by_type[$doc_type][$fk_doc] = $fk_doc; + } + } + } + + $grouped_lines = array(); + foreach (self::$doc_type_infos as $doc_type => $doc_type_info) { + if (!is_array($bookkeeping_lines_by_type[$doc_type])) { + continue; + } + + // Get all document ids grouped + $doc_grouped = $this->getLinkedDocumentByGroup($bookkeeping_lines_by_type[$doc_type], $doc_type); + if (!is_array($doc_grouped)) { + return -1; + } + + // Group all lines by document/piece number + foreach ($doc_grouped as $doc_ids) { + $bank_ids = $this->getBankLinesFromFkDocAndDocType($doc_ids, $doc_type); + if (!is_array($bank_ids)) { + return -1; + } + + // Get all bookkeeping lines linked + $sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.debit, ab.credit, ab.lettering_code"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab"; + $sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")"; + $sql .= " AND ("; + if (!empty($bank_ids)) { + $sql .= " EXISTS ("; + $sql .= " SELECT bpn.rowid"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS bpn"; + $sql .= " WHERE bpn.entity IN (" . getEntity('accountancy') . ")"; + $sql .= " AND bpn.doc_type = 'bank'"; + $sql .= " AND bpn.fk_doc IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")"; + $sql .= " AND bpn ON bpn.piece_num = ab.piece_num"; + $sql .= " ) OR "; + } + $sql .= " EXISTS ("; + $sql .= " SELECT dpn.rowid"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS dpn"; + $sql .= " WHERE dpn.entity IN (" . getEntity('accountancy') . ")"; + $sql .= " AND dpn.doc_type = '" . $this->db->escape($doc_type) . "'"; + $sql .= " AND dpn.fk_doc IN (" . $this->db->sanitize(implode(',', $doc_ids)) . ")"; + $sql .= " AND dpn.piece_num = ab.piece_num"; + $sql .= " )"; + $sql .= ")"; + if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''"; + + dol_syslog(__METHOD__ . " - Get all bookkeeping lines linked", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) { + $this->errors[] = "Error " . $this->db->lasterror(); + return -1; + } + + $group = array(); + while ($obj = $this->db->fetch_object($resql)) { + $group[$obj->rowid] = array( + 'id' => $obj->rowid, + 'piece_num' => $obj->piece_num, + 'debit' => $obj->debit, + 'credit' => $obj->credit, + 'lettering_code' => $obj->lettering_code, + ); + } + $this->db->free($resql); + + if (!empty($group)) $grouped_lines[] = $group; + } + } + + return $grouped_lines; + } + + /** + * Get all fk_doc by doc_type from list of bank ids + * + * @param array $bank_ids List of bank ids + * @return array|int <0 if error otherwise all fk_doc by doc_type + */ + public function getDocTypeAndFkDocFromBankLines($bank_ids) + { + dol_syslog(__METHOD__ . " - bank_ids=".json_encode($bank_ids), LOG_DEBUG); + + // Clean parameters + $bank_ids = is_array($bank_ids) ? $bank_ids : array(); + + if (empty($bank_ids)) { + return array(); + } + + $bookkeeping_lines_by_type = array(); + foreach (self::$doc_type_infos as $doc_type => $doc_type_info) { + // Get all fk_doc by doc_type from bank ids + $sql = "SELECT DISTINCT dp." . $doc_type_info['doc_payment_table_fk_doc'] . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid"; + $sql .= " WHERE p." . $doc_type_info['payment_table_fk_bank'] . " IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")"; + $sql .= " AND dp." . $doc_type_info['doc_payment_table_fk_doc'] . " > 0"; + + dol_syslog(__METHOD__ . " - Get all fk_doc by doc_type from list of bank ids for '" . $doc_type . "'", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) { + $this->errors[] = "Error " . $this->db->lasterror(); + return -1; + } + + while ($obj = $this->db->fetch_object($resql)) { + $bookkeeping_lines_by_type[$doc_type][$obj->fk_doc] = $obj->fk_doc; + } + $this->db->free($resql); + } + + return $bookkeeping_lines_by_type; + } + + /** + * Get all bank ids from list of document ids of a type + * + * @param array $document_ids List of document id + * @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...) + * @return array|int <0 if error otherwise all all bank ids from list of document ids of a type + */ + public function getBankLinesFromFkDocAndDocType($document_ids, $doc_type) + { + global $langs; + + dol_syslog(__METHOD__ . " - bank_ids=".json_encode($document_ids) . ", doc_type=$doc_type", LOG_DEBUG); + + // Clean parameters + $document_ids = is_array($document_ids) ? $document_ids : array(); + $doc_type = trim($doc_type); + + if (empty($document_ids)) { + return array(); + } + if (!is_array(self::$doc_type_infos[$doc_type])) { $langs->load('errors'); $this->errors[] = $langs->trans('ErrorBadParameters'); return -1; } - $payment_ids = array(); + $doc_type_info = self::$doc_type_infos[$doc_type]; + $bank_ids = array(); - // Get all payment id from bank lines - $sql = "SELECT DISTINCT bu.url_id AS payment_id"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc"; - $sql .= " WHERE ab.doc_type = 'bank'"; - // $sql .= " AND ab.subledger_account != ''"; - // $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'"; - $sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'"; - if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")"; + // Get all fk_doc by doc_type from bank ids + $sql = "SELECT DISTINCT p." . $doc_type_info['payment_table_fk_bank'] . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid"; + $sql .= " WHERE dp." . $doc_type_info['doc_payment_table_fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; + $sql .= " AND p." . $doc_type_info['payment_table_fk_bank'] . " > 0"; - dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG); + dol_syslog(__METHOD__ . " - Get all bank ids from list of document ids of a type '" . $doc_type . "'", LOG_DEBUG); $resql = $this->db->query($sql); if (!$resql) { $this->errors[] = "Error " . $this->db->lasterror(); @@ -531,218 +718,137 @@ class Lettering extends BookKeeping } while ($obj = $this->db->fetch_object($resql)) { - $payment_ids[$obj->payment_id] = $obj->payment_id; + $bank_ids[$obj->fk_doc] = $obj->fk_doc; } $this->db->free($resql); - // Get all payment id from payment lines - $sql = "SELECT DISTINCT pe.$fk_payment_element AS payment_id"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe ON pe.$fk_element = ab.fk_doc"; - $sql .= " WHERE ab.doc_type = '" . $this->db->escape($doc_type) . "'"; - // $sql .= " AND ab.subledger_account != ''"; - // $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'"; - $sql .= " AND pe.$fk_payment_element IS NOT NULL"; - if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")"; - - dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = "Error " . $this->db->lasterror(); - return -1; - } - - while ($obj = $this->db->fetch_object($resql)) { - $payment_ids[$obj->payment_id] = $obj->payment_id; - } - $this->db->free($resql); - - if (empty($payment_ids)) { - return array(); - } - - // Get all payments linked by group - $payment_by_group = $this->getLinkedPaymentByGroup($payment_ids, $type); - - $groups = array(); - foreach ($payment_by_group as $payment_list) { - $lines = array(); - - // Get bank lines - $sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit"; - $sql .= " FROM " . MAIN_DB_PREFIX . "bank_url AS bu"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = bu.fk_bank"; - $sql .= " WHERE bu.url_id IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")"; - $sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'"; - $sql .= " AND ab.doc_type = 'bank'"; - $sql .= " AND ab.subledger_account != ''"; - $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'"; - - dol_syslog(__METHOD__ . " - Get bank lines", LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = "Error " . $this->db->lasterror(); - return -1; - } - - while ($obj = $this->db->fetch_object($resql)) { - $lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit); - } - $this->db->free($resql); - - // Get payment lines - $sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit"; - $sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = pe.$fk_element"; - $sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")"; - $sql .= " AND ab.doc_type = '" . $this->db->escape($doc_type) . "'"; - $sql .= " AND ab.subledger_account != ''"; - $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'"; - - dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = "Error " . $this->db->lasterror(); - return -1; - } - - while ($obj = $this->db->fetch_object($resql)) { - $lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit); - } - $this->db->free($resql); - - if (!empty($lines)) { - $groups[] = $lines; - } - } - - return $groups; + return $bank_ids; } /** - * Linked payment by group + * Get all linked document ids by group and type * - * @param array $payment_ids list of payment id - * @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice') - * @return array|int <0 if error otherwise all linked lines by block + * @param array $document_ids List of document id + * @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...) + * @return array|int <0 if error otherwise all linked document ids by group and type [ [ 'doc_type' => [ doc_id, ... ], ... ], ... ] */ - public function getLinkedPaymentByGroup($payment_ids, $type) + public function getLinkedDocumentByGroup($document_ids, $doc_type) { global $langs; // Clean parameters - $payment_ids = is_array($payment_ids) ? $payment_ids : array(); - $type = trim($type); + $document_ids = is_array($document_ids) ? $document_ids : array(); + $doc_type = trim($doc_type); - if (empty($payment_ids)) { + if (empty($document_ids)) { return array(); } - - if ($type == 'customer_invoice') { - $payment_element = 'paiement_facture'; - $fk_payment_element = 'fk_paiement'; - $fk_element = 'fk_facture'; - } elseif ($type == 'supplier_invoice') { - $payment_element = 'paiementfourn_facturefourn'; - $fk_payment_element = 'fk_paiementfourn'; - $fk_element = 'fk_facturefourn'; - } else { + if (!is_array(self::$doc_type_infos[$doc_type])) { $langs->load('errors'); $this->errors[] = $langs->trans('ErrorBadParameters'); return -1; } - // Get payment lines - $sql = "SELECT DISTINCT pe2.$fk_payment_element, pe2.$fk_element"; - $sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe2 ON pe2.$fk_element = pe.$fk_element"; - $sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_ids)) . ")"; + $doc_type_info = self::$doc_type_infos[$doc_type]; - dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = "Error " . $this->db->lasterror(); - return -1; + // Get document lines + $current_document_ids = array(); + $link_by_element = array(); + $element_by_link = array(); + foreach ($doc_type_info['linked_info'] as $linked_info) { + $sql = "SELECT DISTINCT tl2." . $linked_info['fk_link'] . " AS fk_link, tl2." . $linked_info['fk_doc'] . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl2 ON tl2." . $linked_info['fk_link'] . " = tl." . $linked_info['fk_link']; + $sql .= " WHERE tl." . $linked_info['fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; + + dol_syslog(__METHOD__ . " - Get document lines", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) { + $this->errors[] = "Error " . $this->db->lasterror(); + return -1; + } + + $is_fk_link_is_also_fk_doc = !empty($linked_info['is_fk_link_is_also_fk_doc']); + while ($obj = $this->db->fetch_object($resql)) { + $current_document_ids[$obj->fk_doc] = $obj->fk_doc; + + $link_key = $linked_info['prefix'] . $obj->fk_link; + $element_by_link[$link_key][$obj->fk_doc] = $obj->fk_doc; + $link_by_element[$obj->fk_doc][$link_key] = $link_key; + if ($is_fk_link_is_also_fk_doc) { + $element_by_link[$link_key][$obj->fk_link] = $obj->fk_link; + $link_by_element[$obj->fk_link][$link_key] = $link_key; + } + } + $this->db->free($resql); } - $current_payment_ids = array(); - $payment_by_element = array(); - $element_by_payment = array(); - while ($obj = $this->db->fetch_object($resql)) { - $current_payment_ids[$obj->$fk_payment_element] = $obj->$fk_payment_element; - $element_by_payment[$obj->$fk_payment_element][$obj->$fk_element] = $obj->$fk_element; - $payment_by_element[$obj->$fk_element][$obj->$fk_payment_element] = $obj->$fk_payment_element; - } - $this->db->free($resql); - - if (count(array_diff($payment_ids, $current_payment_ids))) { - return $this->getLinkedPaymentByGroup($current_payment_ids, $type); + if (count(array_diff($document_ids, $current_document_ids))) { + return $this->getLinkedDocumentByGroup($current_document_ids, $doc_type); } - return $this->getGroupElements($payment_by_element, $element_by_payment); + return $this->getGroupElements($link_by_element, $element_by_link); } /** - * Get payment ids grouped by payment id and element id in common + * Get element ids grouped by link or element in common * - * @param array $payment_by_element List of payment ids by element id - * @param array $element_by_payment List of element ids by payment id - * @param int $element_id Element Id (used for recursive function) - * @param array $current_group Current group (used for recursive function) - * @return array List of payment ids grouped by payment id and element id in common + * @param array $link_by_element List of payment ids by link key + * @param array $element_by_link List of element ids by link key + * @param string $link_key Link key (used for recursive function) + * @param array $current_group Current group (used for recursive function) + * @return array List of element ids grouped by link or element in common */ - public function getGroupElements(&$payment_by_element, &$element_by_payment, $element_id = 0, &$current_group = array()) + public function getGroupElements(&$link_by_element, &$element_by_link, $link_key = '', &$current_group = array()) { - $grouped_payments = array(); - if ($element_id > 0 && !isset($payment_by_element[$element_id])) { - // Return if specific element id not found - return $grouped_payments; + $grouped_elements = array(); + if (!empty($link_key) && !isset($element_by_link[$link_key])) { + // Return if specific link key not found + return $grouped_elements; } - $save_payment_by_element = null; - $save_element_by_payment = null; - if ($element_id == 0) { + if (empty($link_key)) { // Save list when is the begin of recursive function - $save_payment_by_element = $payment_by_element; - $save_element_by_payment = $element_by_payment; + $save_link_by_element = $link_by_element; + $save_element_by_link = $element_by_link; } do { // Get current element id, get this payment id list and delete the entry - $current_element_id = $element_id > 0 ? $element_id : array_keys($payment_by_element)[0]; - $payment_ids = $payment_by_element[$current_element_id]; - unset($payment_by_element[$current_element_id]); + $current_link_key = !empty($link_key) ? $link_key : array_keys($element_by_link)[0]; + $element_ids = $element_by_link[$current_link_key]; + unset($element_by_link[$current_link_key]); - foreach ($payment_ids as $payment_id) { - // Continue if payment id in not found - if (!isset($element_by_payment[$payment_id])) continue; + foreach ($element_ids as $element_id) { + // Continue if element id in not found + if (!isset($link_by_element[$element_id])) continue; - // Set the payment in the current group - $current_group[$payment_id] = $payment_id; + // Set the element in the current group + $current_group[$element_id] = $element_id; - // Get current element ids, get this payment id list and delete the entry - $element_ids = $element_by_payment[$payment_id]; - unset($element_by_payment[$payment_id]); + // Get current link keys, get this element id list and delete the entry + $link_keys = $link_by_element[$element_id]; + unset($link_by_element[$element_id]); - // Set payment id on the current group for each element id of the payment - foreach ($element_ids as $id) { - $this->getGroupElements($payment_by_element, $element_by_payment, $id, $current_group); + // Set element id on the current group for each link key of the element + foreach ($link_keys as $key) { + $this->getGroupElements($link_by_element, $element_by_link, $key, $current_group); } } - if ($element_id == 0) { + if (empty($link_key)) { // Save current group and reset the current group when is the begin of recursive function - $grouped_payments[] = $current_group; + $grouped_elements[] = $current_group; $current_group = array(); } - } while (!empty($payment_by_element) && $element_id == 0); + } while (!empty($element_by_link) && empty($link_key)); - if ($element_id == 0) { + if (empty($link_key)) { // Restore list when is the begin of recursive function - $payment_by_element = $save_payment_by_element; - $element_by_payment = $save_element_by_payment; + $link_by_element = $save_link_by_element; + $element_by_link = $save_element_by_link; } - return $grouped_payments; + return $grouped_elements; } } diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 9dfd94d5729..4def8dfbef6 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -725,7 +725,7 @@ if ($result) { // Suggested accounting account print ''; - print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facture_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facture_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth150 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 7a02d0b4564..b90a8a2c573 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -503,7 +503,7 @@ if ($result) { // Suggested accounting account print ''; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; print ''; diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index d2b37c11a87..0f721a67db7 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -133,7 +133,7 @@ if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) { $sql .= " WHERE f.fk_statut > 0"; $sql .= " AND fd.fk_code_ventilation > 0"; $sql .= " AND f.entity IN (".getEntity('facture_fourn', 0).")"; // We don't share object for accountancy -if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")"; } else { $sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")"; @@ -379,7 +379,7 @@ if ($action == 'writebookkeeping') { if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) { require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php'; $lettering_static = new Lettering($db); - $nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'supplier_invoice'); + $nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id)); } } } @@ -764,7 +764,7 @@ if (empty($action) || $action == 'view') { $exportlink = ''; $builddate = dol_now(); $description = $langs->trans("DescJournalOnlyBindedVisible").'
'; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= $langs->trans("DepositsAreNotIncluded"); } else { $description .= $langs->trans("DepositsAreIncluded"); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 675c900680d..4894e7b660f 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -393,7 +393,7 @@ if ($action == 'writebookkeeping') { if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) { require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php'; $lettering_static = new Lettering($db); - $nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'customer_invoice'); + $nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id)); } } } diff --git a/htdocs/accountancy/journal/variousjournal.php b/htdocs/accountancy/journal/variousjournal.php index 8f6297e480a..13ccba0d762 100644 --- a/htdocs/accountancy/journal/variousjournal.php +++ b/htdocs/accountancy/journal/variousjournal.php @@ -202,6 +202,9 @@ if ($object->nature == 2 || $object->nature == 3) { } else { $description .= $langs->trans("DepositsAreIncluded"); } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); + } } $listofchoices = array('notyet' => $langs->trans("NotYetInGeneralLedger"), 'already' => $langs->trans("AlreadyInGeneralLedger")); diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index d14beb84cc2..3c4a9e7f46b 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -342,7 +342,7 @@ if (strlen(trim($search_country))) { if (strlen(trim($search_tvaintra))) { $sql .= natural_search("s.tva_intra", $search_tvaintra); } -if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")"; } else { $sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")"; @@ -749,7 +749,7 @@ if ($result) { // Suggested accounting account print ''; - print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth150 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/adherents/admin/member.php b/htdocs/adherents/admin/member.php index c94084358bd..d20bd784ced 100644 --- a/htdocs/adherents/admin/member.php +++ b/htdocs/adherents/admin/member.php @@ -100,7 +100,7 @@ if ($action == 'set_default') { } else { dol_print_error($db); } -} elseif ($action == 'updateall') { +} elseif ($action == 'updatemainoptions') { $db->begin(); $res1 = $res2 = $res3 = $res4 = $res5 = $res6 = $res7 = 0; $res1 = dolibarr_set_const($db, 'ADHERENT_LOGIN_NOT_REQUIRED', GETPOST('ADHERENT_LOGIN_NOT_REQUIRED', 'alpha') ? 0 : 1, 'chaine', 0, '', $conf->entity); @@ -123,6 +123,35 @@ if ($action == 'set_default') { setEventMessages('RecordModifiedSuccessfully', null, 'mesgs'); $db->commit(); } +} elseif ($action == 'updatememberscards') { + $db->begin(); + $res1 = $res2 = $res3 = $res4 = 0; + $res1 = dolibarr_set_const($db, 'ADHERENT_CARD_TYPE', GETPOST('ADHERENT_CARD_TYPE'), 'chaine', 0, '', $conf->entity); + $res2 = dolibarr_set_const($db, 'ADHERENT_CARD_HEADER_TEXT', GETPOST('ADHERENT_CARD_HEADER_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity); + $res3 = dolibarr_set_const($db, 'ADHERENT_CARD_TEXT', GETPOST('ADHERENT_CARD_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity); + $res3 = dolibarr_set_const($db, 'ADHERENT_CARD_TEXT_RIGHT', GETPOST('ADHERENT_CARD_TEXT_RIGHT', 'alpha'), 'chaine', 0, '', $conf->entity); + $res4 = dolibarr_set_const($db, 'ADHERENT_CARD_FOOTER_TEXT', GETPOST('ADHERENT_CARD_FOOTER_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity); + + if ($res1 < 0 || $res2 < 0 || $res3 < 0 || $res4 < 0) { + setEventMessages('ErrorFailedToSaveDate', null, 'errors'); + $db->rollback(); + } else { + setEventMessages('RecordModifiedSuccessfully', null, 'mesgs'); + $db->commit(); + } +} elseif ($action == 'updatememberstickets') { + $db->begin(); + $res1 = $res2 = 0; + $res1 = dolibarr_set_const($db, 'ADHERENT_ETIQUETTE_TYPE', GETPOST('ADHERENT_ETIQUETTE_TYPE'), 'chaine', 0, '', $conf->entity); + $res2 = dolibarr_set_const($db, 'ADHERENT_ETIQUETTE_TEXT', GETPOST('ADHERENT_ETIQUETTE_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity); + + if ($res1 < 0 || $res2 < 0) { + setEventMessages('ErrorFailedToSaveDate', null, 'errors'); + $db->rollback(); + } else { + setEventMessages('RecordModifiedSuccessfully', null, 'mesgs'); + $db->commit(); + } } // Action to update or add a constant @@ -130,6 +159,7 @@ if ($action == 'update' || $action == 'add') { $constname = GETPOST('constname', 'alpha'); $constvalue = (GETPOST('constvalue_'.$constname) ? GETPOST('constvalue_'.$constname) : GETPOST('constvalue')); + if (($constname == 'ADHERENT_CARD_TYPE' || $constname == 'ADHERENT_ETIQUETTE_TYPE' || $constname == 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS') && $constvalue == -1) { $constvalue = ''; } @@ -195,10 +225,10 @@ print dol_get_fiche_head($head, 'general', $langs->trans("Members"), -1, 'user') print '
'; print ''; -print ''; +print ''; -// Mains options +// Main options print load_fiche_titre($langs->trans("MemberMainOptions"), '', ''); @@ -294,6 +324,8 @@ print '
'; print '
'; +// Document templates for documents generated from member record + $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); // Defined model definition table @@ -431,24 +463,12 @@ print ''; -/* -TODO Use a global form instead of embeded form into table + +// Generation of cards for members + print '
'; print ''; -print ''; -*/ - -/* - * Edit info of model document - */ -$constantes = array( - 'ADHERENT_CARD_TYPE', - //'ADHERENT_CARD_BACKGROUND', - 'ADHERENT_CARD_HEADER_TEXT', - 'ADHERENT_CARD_TEXT', - 'ADHERENT_CARD_TEXT_RIGHT', - 'ADHERENT_CARD_FOOTER_TEXT' -); +print ''; print load_fiche_titre($langs->trans("MembersCards"), '', ''); @@ -457,15 +477,65 @@ $helptext .= '__DOL_MAIN_URL_ROOT__, __ID__, __FIRSTNAME__, __LASTNAME__, __FULL $helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, '; $helptext .= '__YEAR__, __MONTH__, __DAY__'; -form_constantes($constantes, 0, $helptext); +print '
'; +print ''; +print ''; +print ''; +print ''; +print "\n"; + +// Format of cards page +print '\n"; + +// Text printed on top of member cards +print '\n"; + +// Text printed on member cards (align on left) +print '\n"; + +// Text printed on member cards (align on right) +print '\n"; + +// Text printed on bottom of member cards +print '\n"; + +print '
'.$langs->trans("Description").''.$form->textwithpicto($langs->trans("Value"), $helptext, 1, 'help', '', 0, 2, 'idhelptext').'
'.$langs->trans("DescADHERENT_CARD_TYPE").''; + +require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; // List of possible labels (defined into $_Avery_Labels variable set into format_cards.lib.php) +$arrayoflabels = array(); +foreach (array_keys($_Avery_Labels) as $codecards) { + $arrayoflabels[$codecards] = $_Avery_Labels[$codecards]['name']; +} +print $form->selectarray('ADHERENT_CARD_TYPE', $arrayoflabels, getDolGlobalString('ADHERENT_CARD_TYPE') ? getDolGlobalString('ADHERENT_CARD_TYPE') : 'CARD', 1, 0, 0); + +print "
'.$langs->trans("DescADHERENT_CARD_HEADER_TEXT").''; +print ''; +print "
'.$langs->trans("DescADHERENT_CARD_TEXT").''; +print ''; +print "
'.$langs->trans("DescADHERENT_CARD_TEXT_RIGHT").''; +print ''; +print "
'.$langs->trans("DescADHERENT_CARD_FOOTER_TEXT").''; +print ''; +print "
'; +print '
'; + +print '
'; +print ''; +print '
'; + +print '
'; print '
'; +// Membership address sheet -/* - * Edit info of model document - */ -$constantes = array('ADHERENT_ETIQUETTE_TYPE', 'ADHERENT_ETIQUETTE_TEXT'); +print '
'; +print ''; +print ''; print load_fiche_titre($langs->trans("MembersTickets"), '', ''); @@ -474,9 +544,42 @@ $helptext .= '__DOL_MAIN_URL_ROOT__, __ID__, __FIRSTNAME__, __LASTNAME__, __FULL $helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, '; $helptext .= '__YEAR__, __MONTH__, __DAY__'; -form_constantes($constantes, 0, $helptext); +print '
'; +print ''; +print ''; +print ''; +print ''; +print "\n"; -//print ''; +// Format of labels page +print '\n"; + +// Text printed on member address sheets +print '\n"; + +print '
'.$langs->trans("Description").''.$form->textwithpicto($langs->trans("Value"), $helptext, 1, 'help', '', 0, 2, 'idhelptext').'
'.$langs->trans("DescADHERENT_ETIQUETTE_TYPE").''; + +require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; // List of possible labels (defined into $_Avery_Labels variable set into format_cards.lib.php) +$arrayoflabels = array(); +foreach (array_keys($_Avery_Labels) as $codecards) { + $arrayoflabels[$codecards] = $_Avery_Labels[$codecards]['name']; +} +print $form->selectarray('ADHERENT_ETIQUETTE_TYPE', $arrayoflabels, getDolGlobalString('ADHERENT_ETIQUETTE_TYPE') ? getDolGlobalString('ADHERENT_ETIQUETTE_TYPE') : 'CARD', 1, 0, 0); + +print "
'.$langs->trans("DescADHERENT_ETIQUETTE_TEXT").''; +print ''; +print "
'; +print '
'; + +print '
'; +print ''; +print '
'; + +print ''; + +print '
'; print "
"; diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php index 4b0eed154c0..14da758457f 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php @@ -133,7 +133,7 @@ if (empty($user->socid)) { } if ($user->rights->adherent->supprimer) { - echo ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$this->control->tpl['id'].'&action=delete&token='.newToken().'&canvas='.$canvas, 'delete', $user->rights->adherent->supprimer); } echo '
'; diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index e0f6b693eb7..35829b5dcbf 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -585,7 +585,10 @@ if (empty($reshook)) { $db->commit(); $rowid = $object->id; $id = $object->id; + + $backtopage = preg_replace('/__ID__/', $id, $backtopage); } else { + $error++; $db->rollback(); setEventMessages($object->error, $object->errors, 'errors'); } @@ -1041,8 +1044,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''.img_picto('', 'object_email').' '; // Website - print ''.$form->editfieldkey('Web', 'member_url', '', $object, 0).''; - print ''.img_picto('', 'globe').' '; + print ''.$form->editfieldkey('Web', 'member_url', GETPOST('member_url', 'alpha'), $object, 0).''; + print ''.img_picto('', 'globe').' '; // Address print ''.$langs->trans("Address").''; @@ -1725,7 +1728,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''.$langs->trans("Type").''.$adht->getNomUrl(1)."\n"; // Morphy - print ''.$langs->trans("MemberNature").''.$object->getmorphylib().''; + print ''.$langs->trans("MemberNature").''.$object->getmorphylib('', 1).''; print ''; // Company @@ -1894,7 +1897,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Send if (empty($user->socid)) { if (Adherent::STATUS_VALIDATED == $object->statut) { - print ''.$langs->trans('SendMail').''."\n"; + print ''.$langs->trans('SendMail').''."\n"; } } @@ -1914,7 +1917,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Modify if ($user->hasRight('adherent', 'creer')) { - print ''.$langs->trans("Modify").''."\n"; + print ''.$langs->trans("Modify").''."\n"; } else { print ''.$langs->trans("Modify").''."\n"; } @@ -1922,7 +1925,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Validate if (Adherent::STATUS_DRAFT == $object->statut) { if ($user->hasRight('adherent', 'creer')) { - print ''.$langs->trans("Validate").''."\n"; + print ''.$langs->trans("Validate").''."\n"; } else { print ''.$langs->trans("Validate").''."\n"; } @@ -1931,7 +1934,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Reactivate if (Adherent::STATUS_RESILIATED == $object->statut || Adherent::STATUS_EXCLUDED == $object->statut) { if ($user->hasRight('adherent', 'creer')) { - print ''.$langs->trans("Reenable")."\n"; + print ''.$langs->trans("Reenable")."\n"; } else { print ''.$langs->trans("Reenable").''."\n"; } @@ -1940,7 +1943,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Resiliate if (Adherent::STATUS_VALIDATED == $object->statut) { if ($user->rights->adherent->supprimer) { - print ''.$langs->trans("Resiliate")."\n"; + print ''.$langs->trans("Resiliate")."\n"; } else { print ''.$langs->trans("Resiliate").''."\n"; } @@ -1949,7 +1952,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Exclude if (Adherent::STATUS_VALIDATED == $object->statut) { if ($user->rights->adherent->supprimer) { - print ''.$langs->trans("Exclude")."\n"; + print ''.$langs->trans("Exclude")."\n"; } else { print ''.$langs->trans("Exclude").''."\n"; } @@ -1959,7 +1962,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (isModEnabled('societe') && !$object->socid) { if ($user->rights->societe->creer) { if (Adherent::STATUS_DRAFT != $object->statut) { - print ''.$langs->trans("CreateDolibarrThirdParty").''."\n"; + print ''.$langs->trans("CreateDolibarrThirdParty").''."\n"; } else { print ''.$langs->trans("CreateDolibarrThirdParty").''."\n"; } @@ -1972,7 +1975,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (!$user->socid && !$object->user_id) { if ($user->rights->user->user->creer) { if (Adherent::STATUS_DRAFT != $object->statut) { - print ''.$langs->trans("CreateDolibarrLogin").''."\n"; + print ''.$langs->trans("CreateDolibarrLogin").''."\n"; } else { print ''.$langs->trans("CreateDolibarrLogin").''."\n"; } @@ -1986,16 +1989,16 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $isinspip = $mailmanspip->is_in_spip($object); if ($isinspip == 1) { - print ''.$langs->trans("DeleteIntoSpip").''."\n"; + print ''.$langs->trans("DeleteIntoSpip").''."\n"; } if ($isinspip == 0) { - print ''.$langs->trans("AddIntoSpip").''."\n"; + print ''.$langs->trans("AddIntoSpip").''."\n"; } } // Delete if ($user->rights->adherent->supprimer) { - print ''.$langs->trans("Delete").''."\n"; + print ''.$langs->trans("Delete").''."\n"; } else { print ''.$langs->trans("Delete").''."\n"; } diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 0aa1af68afc..dd9d58eb7d3 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -520,21 +520,45 @@ class Adherent extends CommonObject * Return translated label by the nature of a adherent (physical or moral) * * @param string $morphy Nature of the adherent (physical or moral) + * @param int $addbadge Add badge (1=Full label, 2=First letter only) * @return string Label */ - public function getmorphylib($morphy = '') + public function getmorphylib($morphy = '', $addbadge = 0) { global $langs; + + // Clean var if (!$morphy) { $morphy = $this->morphy; } - if ($morphy == 'phy') { - return $langs->trans("Physical"); + + if ($addbadge) { + $s = ''; + if ($morphy == 'phy') { + if ($addbadge == 2) { + $labeltoshow = dol_substr($langs->trans("Physical"), 0, 1); + } else { + $labeltoshow = $langs->trans("Physical"); + } + $s .= ''.$labeltoshow.''; + } + if ($morphy == 'mor') { + if ($addbadge == 2) { + $labeltoshow = dol_substr($langs->trans("Moral"), 0, 1); + } else { + $labeltoshow = $langs->trans("Moral"); + } + $s .= ''.$labeltoshow.''; + } + } else { + if ($morphy == 'phy') { + $s = $langs->trans("Physical"); + } elseif ($morphy == 'mor') { + $s = $langs->trans("Moral"); + } } - if ($morphy == 'mor') { - return $langs->trans("Moral"); - } - return $morphy; + + return $s; } /** @@ -2352,8 +2376,8 @@ class Adherent extends CommonObject $statusType = 'status1'; $labelStatus = $langs->trans("MemberStatusActive"); $labelStatusShort = $langs->trans("MemberStatusActiveShort"); - } elseif ($date_end_subscription < dol_now()) { - $statusType = 'status3'; + } elseif ($date_end_subscription < dol_now()) { // expired + $statusType = 'status8'; $labelStatus = $langs->trans("MemberStatusActiveLate"); $labelStatusShort = $langs->trans("MemberStatusActiveLateShort"); } else { diff --git a/htdocs/adherents/class/api_members.class.php b/htdocs/adherents/class/api_members.class.php index 35ab65e9d82..8308c71fac0 100644 --- a/htdocs/adherents/class/api_members.class.php +++ b/htdocs/adherents/class/api_members.class.php @@ -480,11 +480,11 @@ class Members extends DolibarrApi /** * Add a subscription for a member * - * @param int $id ID of member - * @param int $start_date Start date {@from body} {@type timestamp} - * @param int $end_date End date {@from body} {@type timestamp} - * @param float $amount Amount (may be 0) {@from body} - * @param string $label Label {@from body} + * @param int $id ID of member + * @param string $start_date Start date {@from body} {@type timestamp} + * @param string $end_date End date {@from body} {@type timestamp} + * @param float $amount Amount (may be 0) {@from body} + * @param string $label Label {@from body} * @return int ID of subscription * * @url POST {id}/subscriptions diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 388d51be376..a5f9c26f192 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -87,7 +87,9 @@ print load_fiche_titre($langs->trans("MembersArea"), $resultboxes['selectboxlist $MembersValidated = array(); $MembersToValidate = array(); +$MembersWaitingSubscription = array(); $MembersUpToDate = array(); +$MembersExpired = array(); $MembersExcluded = array(); $MembersResiliated = array(); @@ -137,13 +139,36 @@ if ($resql) { $now = dol_now(); +// Members waiting subscription +$sql = "SELECT count(*) as somme , d.fk_adherent_type"; +$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; +$sql .= " WHERE d.entity IN (".getEntity('adherent').")"; +$sql .= " AND d.statut = 1"; // validated +$sql .= " AND (d.datefin IS NULL AND t.subscription = '1')"; +$sql .= " AND t.rowid = d.fk_adherent_type"; +$sql .= " GROUP BY d.fk_adherent_type"; + +dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $objp = $db->fetch_object($resql); + $MembersWaitingSubscription[$objp->fk_adherent_type] = $objp->somme; + $i++; + } + $db->free($resql); +} + // Members up to date list -// current rule: uptodate = the end date is in future whatever is type +// current rule: uptodate = the end date is in future or no subcription required // old rule: uptodate = if type does not need payment, that end date is null, if type need payment that end date is in future) $sql = "SELECT count(*) as somme , d.fk_adherent_type"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; $sql .= " WHERE d.entity IN (".getEntity('adherent').")"; -$sql .= " AND d.statut = 1 AND (d.datefin >= '".$db->idate($now)."' OR t.subscription = 0)"; +$sql .= " AND d.statut = 1"; // validated +$sql .= " AND (d.datefin >= '".$db->idate($now)."' OR t.subscription = '0')"; // end date in future $sql .= " AND t.rowid = d.fk_adherent_type"; $sql .= " GROUP BY d.fk_adherent_type"; @@ -160,6 +185,28 @@ if ($resql) { $db->free($resql); } +// Members expired list +$sql = "SELECT count(*) as somme , d.fk_adherent_type"; +$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; +$sql .= " WHERE d.entity IN (".getEntity('adherent').")"; +$sql .= " AND d.statut = 1"; // validated +$sql .= " AND (d.datefin < '".$db->idate($now)."' AND t.subscription = '1')"; +$sql .= " AND t.rowid = d.fk_adherent_type"; +$sql .= " GROUP BY d.fk_adherent_type"; + +dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $objp = $db->fetch_object($resql); + $MembersExpired[$objp->fk_adherent_type] = $objp->somme; + $i++; + } + $db->free($resql); +} + /* * Statistics */ @@ -172,8 +219,9 @@ if ($conf->use_javascript_ajax) { $boxgraph .=''; $SumToValidate = 0; - $SumValidated = 0; + $SumWaitingSubscription = 0; $SumUpToDate = 0; + $SumExpired = 0; $SumResiliated = 0; $SumExcluded = 0; @@ -182,23 +230,26 @@ if ($conf->use_javascript_ajax) { $i = 0; foreach ($AdherentType as $key => $adhtype) { $dataval['draft'][] = array($i, isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0); + $dataval['waitingsubscription'][] = array($i, isset($MembersWaitingSubscription[$key]) ? $MembersWaitingSubscription[$key] : 0); $dataval['uptodate'][] = array($i, isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0); - $dataval['notuptodate'][] = array($i, isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : 0); + $dataval['expired'][] = array($i, isset($MembersExpired[$key]) ? $MembersExpired[$key] : 0); $dataval['excluded'][] = array($i, isset($MembersExcluded[$key]) ? $MembersExcluded[$key] : 0); $dataval['resiliated'][] = array($i, isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0); $SumToValidate += isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0; - $SumValidated += isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : 0; + $SumWaitingSubscription += isset($MembersWaitingSubscription[$key]) ? $MembersWaitingSubscription[$key] : 0; $SumUpToDate += isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0; + $SumExpired += isset($MembersExpired[$key]) ? $MembersExpired[$key] : 0; $SumExcluded += isset($MembersExcluded[$key]) ? $MembersExcluded [$key] : 0; $SumResiliated += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0; $i++; } - $total = $SumToValidate + $SumValidated + $SumUpToDate + $SumExcluded + $SumResiliated; + $total = $SumToValidate + $SumWaitingSubscription + $SumUpToDate + $SumExpired + $SumExcluded + $SumResiliated; $dataseries = array(); $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusToValid"), round($SumToValidate)); // Draft, not yet validated + $dataseries[] = array($langs->transnoentitiesnoconv("WaitingSubscription"), round($SumWaitingSubscription)); $dataseries[] = array($langs->transnoentitiesnoconv("UpToDate"), round($SumUpToDate)); - $dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), round($SumValidated)); + $dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), round($SumExpired)); $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusExcluded"), round($SumExcluded)); $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusResiliated"), round($SumResiliated)); @@ -207,7 +258,7 @@ if ($conf->use_javascript_ajax) { include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); $dolgraph->SetData($dataseries); - $dolgraph->SetDataColor(array('-'.$badgeStatus0, $badgeStatus4, '-'.$badgeStatus1, '-'.$badgeStatus8, $badgeStatus6)); + $dolgraph->SetDataColor(array('-'.$badgeStatus0, $badgeStatus1, $badgeStatus4, $badgeStatus8, '-'.$badgeStatus8, $badgeStatus6)); $dolgraph->setShowLegend(2); $dolgraph->setShowPercent(1); $dolgraph->SetType(array('pie')); @@ -217,7 +268,7 @@ if ($conf->use_javascript_ajax) { $boxgraph .= ''; $boxgraph .= ''.$langs->trans("Total").''; - $boxgraph .= $SumToValidate + $SumValidated + $SumUpToDate + $SumExcluded + $SumResiliated; + $boxgraph .= $SumToValidate + $SumWaitingSubscription + $SumUpToDate + $SumExpired + $SumExcluded + $SumResiliated; $boxgraph .= ''; $boxgraph .= ''; $boxgraph .= ''; diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 4c80627d70e..4b3a5cdb82c 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -142,31 +142,31 @@ if ($db->type == 'pgsql') { unset($fieldstosearchall['d.rowid']); } $arrayfields = array( - 'd.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), - 'd.civility'=>array('label'=>$langs->trans("Civility"), 'checked'=>0), - 'd.lastname'=>array('label'=>$langs->trans("Lastname"), 'checked'=>1), - 'd.firstname'=>array('label'=>$langs->trans("Firstname"), 'checked'=>1), - 'd.gender'=>array('label'=>$langs->trans("Gender"), 'checked'=>0), - 'd.company'=>array('label'=>$langs->trans("Company"), 'checked'=>1), - 'd.login'=>array('label'=>$langs->trans("Login"), 'checked'=>1), - 'd.morphy'=>array('label'=>$langs->trans("MemberNature"), 'checked'=>1), - 't.libelle'=>array('label'=>$langs->trans("Type"), 'checked'=>1), - 'd.email'=>array('label'=>$langs->trans("Email"), 'checked'=>1), - 'd.address'=>array('label'=>$langs->trans("Address"), 'checked'=>0), - 'd.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>0), - 'd.town'=>array('label'=>$langs->trans("Town"), 'checked'=>0), - 'd.phone'=>array('label'=>$langs->trans("Phone"), 'checked'=>0), - 'd.phone_perso'=>array('label'=>$langs->trans("PhonePerso"), 'checked'=>0), - 'd.phone_mobile'=>array('label'=>$langs->trans("PhoneMobile"), 'checked'=>0), - 'state.nom'=>array('label'=>$langs->trans("State"), 'checked'=>0), - 'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0), - /*'d.note_public'=>array('label'=>$langs->trans("NotePublic"), 'checked'=>0), - 'd.note_private'=>array('label'=>$langs->trans("NotePrivate"), 'checked'=>0),*/ - 'd.datefin'=>array('label'=>$langs->trans("EndSubscription"), 'checked'=>1, 'position'=>500), - 'd.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), - 'd.birth'=>array('label'=>$langs->trans("Birthday"), 'checked'=>0, 'position'=>500), - 'd.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), - 'd.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), + 'd.ref'=>array('label'=>"Ref", 'checked'=>1), + 'd.civility'=>array('label'=>"Civility", 'checked'=>0), + 'd.lastname'=>array('label'=>"Lastname", 'checked'=>1), + 'd.firstname'=>array('label'=>"Firstname", 'checked'=>1), + 'd.gender'=>array('label'=>"Gender", 'checked'=>0), + 'd.company'=>array('label'=>"Company", 'checked'=>1), + 'd.login'=>array('label'=>"Login", 'checked'=>1), + 'd.morphy'=>array('label'=>"MemberNature", 'checked'=>1), + 't.libelle'=>array('label'=>"Type", 'checked'=>1), + 'd.email'=>array('label'=>"Email", 'checked'=>1), + 'd.address'=>array('label'=>"Address", 'checked'=>0), + 'd.zip'=>array('label'=>"Zip", 'checked'=>0), + 'd.town'=>array('label'=>"Town", 'checked'=>0), + 'd.phone'=>array('label'=>"Phone", 'checked'=>0), + 'd.phone_perso'=>array('label'=>"PhonePerso", 'checked'=>0), + 'd.phone_mobile'=>array('label'=>"PhoneMobile", 'checked'=>0), + 'state.nom'=>array('label'=>"State", 'checked'=>0), + 'country.code_iso'=>array('label'=>"Country", 'checked'=>0), + /*'d.note_public'=>array('label'=>"NotePublic", 'checked'=>0), + 'd.note_private'=>array('label'=>"NotePrivate", 'checked'=>0),*/ + 'd.datefin'=>array('label'=>"EndSubscription", 'checked'=>1, 'position'=>500), + 'd.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), + 'd.birth'=>array('label'=>"Birthday", 'checked'=>0, 'position'=>500), + 'd.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), + 'd.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), 'd.import_key'=>array('label'=>"ImportId", 'checked'=>0, 'position'=>1100), ); // Extra fields @@ -350,27 +350,43 @@ $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d"; if (!empty($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)"; } -if ((!empty($search_categ) && ($search_categ > 0 || $search_categ == -2)) || !empty($catid)) { - // We need this table joined to the select in order to filter by categ - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_member as cm ON d.rowid = cm.fk_member"; -} $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = d.country)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = d.state_id)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on (s.rowid = d.fk_soc)"; $sql .= ", ".MAIN_DB_PREFIX."adherent_type as t"; $sql .= " WHERE d.fk_adherent_type = t.rowid"; -if ($catid > 0) { - $sql .= " AND cm.fk_categorie = ".((int) $catid); + +if ($catid && empty($search_categ)) { + $search_categ = $catid; } -if ($catid == -2) { - $sql .= " AND cm.fk_categorie IS NULL"; -} -if ($search_categ > 0) { - $sql .= " AND cm.fk_categorie = ".((int) $search_categ); -} -if ($search_categ == -2) { - $sql .= " AND cm.fk_categorie IS NULL"; + +$searchCategoryContactList = $search_categ ? array($search_categ) : array(); +$searchCategoryContactOperator = 0; +// Search for tag/category ($searchCategoryContactList is an array of ID) +if (!empty($searchCategoryContactList)) { + $searchCategoryContactSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryContactList as $searchCategoryContact) { + if (intval($searchCategoryContact) == -2) { + $searchCategoryContactSqlList[] = "NOT EXISTS (SELECT ck.fk_categorie FROM ".MAIN_DB_PREFIX."categorie_member as ck WHERE d.rowid = ck.fk_member)"; + } elseif (intval($searchCategoryContact) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryContact); + } + } + if ($listofcategoryid) { + $searchCategoryContactSqlList[] = " EXISTS (SELECT ck.fk_categorie FROM ".MAIN_DB_PREFIX."categorie_member as ck WHERE d.rowid = ck.fk_member AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryContactOperator == 1) { + if (!empty($searchCategoryContactSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryContactSqlList).")"; + } + } else { + if (!empty($searchCategoryContactSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryContactSqlList).")"; + } + } } + $sql .= " AND d.entity IN (".getEntity('adherent').")"; if ($sall) { $sql .= natural_search(array_keys($fieldstosearchall), $sall); @@ -379,7 +395,10 @@ if ($search_type > 0) { $sql .= " AND t.rowid=".((int) $search_type); } if ($search_filter == 'withoutsubscription') { - $sql .= " AND (datefin IS NULL OR t.subscription = '0')"; + $sql .= " AND (datefin IS NULL)"; +} +if ($search_filter == 'waitingsubscription') { + $sql .= " AND (datefin IS NULL AND t.subscription = '1')"; } if ($search_filter == 'uptodate') { $sql .= " AND (datefin >= '".$db->idate($now)."' OR t.subscription = '0')"; @@ -391,7 +410,7 @@ if ($search_status != '') { // Peut valoir un nombre ou liste de nombre separes par virgules $sql .= " AND d.statut in (".$db->sanitize($db->escape($search_status)).")"; } -if ($search_morphy != '') { +if ($search_morphy != '' && $search_morphy != '-1') { $sql .= natural_search("d.morphy", $search_morphy); } if ($search_ref) { @@ -498,35 +517,6 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ $help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; llxHeader('', $title, $help_url); -if (GETPOSTISSET("search_status")) { - if ($search_status == '-1,1') { // TODO : check this test as -1 == Adherent::STATUS_DRAFT and -2 == Adherent::STATUS_EXLCUDED - $title = $langs->trans("MembersListQualified"); - } - if ($search_status == Adherent::STATUS_DRAFT) { - $title = $langs->trans("MembersListToValid"); - } - if ($search_status == Adherent::STATUS_VALIDATED && $filter == '') { - $title = $langs->trans("MenuMembersValidated"); - } - if ($search_status == Adherent::STATUS_VALIDATED && $filter == 'withoutsubscription') { - $title = $langs->trans("MembersWithSubscriptionToReceive"); - } - if ($search_status == Adherent::STATUS_VALIDATED && $filter == 'uptodate') { - $title = $langs->trans("MembersListUpToDate"); - } - if ($search_status == Adherent::STATUS_VALIDATED && $filter == 'outofdate') { - $title = $langs->trans("MembersListNotUpToDate"); - } - if ((string) $search_status == (string) Adherent::STATUS_RESILIATED) { // The cast to string is required to have test false when search_status is '' - $title = $langs->trans("MembersListResiliated"); - } - if ($search_status == Adherent::STATUS_EXCLUDED) { - $title = $langs->trans("MembersListExcluded"); - } -} elseif ($action == 'search') { - $title = $langs->trans("MembersListQualified"); -} - if ($search_type > 0) { $membertype = new AdherentType($db); $result = $membertype->fetch($search_type); @@ -670,7 +660,7 @@ $moreforfilter = ''; if (isModEnabled('categorie') && $user->rights->categorie->lire) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; - $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedlength"').$formother->select_categories(Categorie::TYPE_MEMBER, $search_categ, 'search_categ', 1); + $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedlength"').$formother->select_categories(Categorie::TYPE_MEMBER, $search_categ, 'search_categ', 1, $langs->trans("MembersCategoriesShort")); $moreforfilter .= '
'; } $parameters = array(); @@ -741,10 +731,11 @@ if (!empty($arrayfields['d.login']['checked'])) { print ''; print ''; } +// Nature if (!empty($arrayfields['d.morphy']['checked'])) { - print ''; + print ''; $arraymorphy = array('mor'=>$langs->trans("Moral"), 'phy'=>$langs->trans("Physical")); - print $form->selectarray('search_morphy', $arraymorphy, $search_morphy, 1); + print $form->selectarray('search_morphy', $arraymorphy, $search_morphy, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100'); print ''; } if (!empty($arrayfields['t.libelle']['checked'])) { @@ -805,7 +796,8 @@ if (!empty($arrayfields['d.email']['checked'])) { // End of subscription date if (!empty($arrayfields['d.datefin']['checked'])) { print ''; - $selectarray = array('-1'=>'', 'withoutsubscription'=>$langs->trans("WithoutSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); + //$selectarray = array('-1'=>'', 'withoutsubscription'=>$langs->trans("WithoutSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); + $selectarray = array('-1'=>'', 'waitingsubscription'=>$langs->trans("WaitingSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); print $form->selectarray('search_filter', $selectarray, $search_filter); print ''; } @@ -919,7 +911,7 @@ if (!empty($arrayfields['d.email']['checked'])) { print_liste_field_titre($arrayfields['d.email']['label'], $_SERVER["PHP_SELF"], 'd.email', '', $param, '', $sortfield, $sortorder); } if (!empty($arrayfields['d.datefin']['checked'])) { - print_liste_field_titre($arrayfields['d.datefin']['label'], $_SERVER["PHP_SELF"], 'd.datefin', '', $param, '', $sortfield, $sortorder, 'center '); + print_liste_field_titre($arrayfields['d.datefin']['label'], $_SERVER["PHP_SELF"], 'd.datefin,t.subscription', '', $param, '', $sortfield, $sortorder, 'center '); } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; @@ -938,7 +930,7 @@ if (!empty($arrayfields['d.tms']['checked'])) { print_liste_field_titre($arrayfields['d.tms']['label'], $_SERVER["PHP_SELF"], "d.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); } if (!empty($arrayfields['d.statut']['checked'])) { - print_liste_field_titre($arrayfields['d.statut']['label'], $_SERVER["PHP_SELF"], "d.statut", "", $param, 'class="right"', $sortfield, $sortorder); + print_liste_field_titre($arrayfields['d.statut']['label'], $_SERVER["PHP_SELF"], "d.statut,t.subscription,d.datefin", "", $param, 'class="right"', $sortfield, $sortorder); } if (!empty($arrayfields['d.import_key']['checked'])) { print_liste_field_titre($arrayfields['d.import_key']['label'], $_SERVER["PHP_SELF"], "d.import_key", "", $param, '', $sortfield, $sortorder, 'center '); @@ -955,6 +947,7 @@ while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); $datefin = $db->jdate($obj->datefin); + $memberstatic->id = $obj->rowid; $memberstatic->ref = $obj->ref; $memberstatic->civility_id = $obj->civility; @@ -970,6 +963,7 @@ while ($i < min($num, $limit)) { $memberstatic->morphy = $obj->morphy; $memberstatic->note_public = $obj->note_public; $memberstatic->note_private = $obj->note_private; + $memberstatic->need_subscription = $obj->subscription; if (!empty($obj->fk_soc)) { $memberstatic->fetch_thirdparty(); @@ -1070,14 +1064,7 @@ while ($i < min($num, $limit)) { // Nature (Moral/Physical) if (!empty($arrayfields['d.morphy']['checked'])) { print ''; - $s = ''; - if ($obj->morphy == 'phy') { - $s .= ''.dol_substr($langs->trans("Physical"), 0, 1).''; - } - if ($obj->morphy == 'mor') { - $s .= ''.dol_substr($langs->trans("Moral"), 0, 1).''; - } - print $s; + print $memberstatic->getmorphylib('', 2); print "\n"; if (!$i) { $totalarray['nbfield']++; @@ -1183,7 +1170,7 @@ while ($i < min($num, $limit)) { } } else { if (!empty($obj->subscription)) { - print $langs->trans("SubscriptionNotReceived"); + print ''.$langs->trans("SubscriptionNotReceived").''; if ($obj->statut > 0) { print " ".img_warning(); } diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index c26a9d13536..fcdb643a006 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -145,6 +145,7 @@ if ($action == 'add' && $user->rights->adherent->configurer) { $sql = "SELECT libelle FROM ".MAIN_DB_PREFIX."adherent_type WHERE libelle='".$db->escape($object->label)."'"; $sql .= " WHERE entity IN (".getEntity('member_type').")"; $result = $db->query($sql); + $num = null; if ($result) { $num = $db->num_rows($result); } @@ -720,7 +721,7 @@ if ($rowid > 0) { */ // Moral/Physique - print "".$adh->getmorphylib($objp->morphy)."\n"; + print "".$adh->getmorphylib($objp->morphy, 1)."\n"; // EMail print "".dol_print_email($objp->email, 0, 0, 1)."\n"; @@ -740,9 +741,9 @@ if ($rowid > 0) { } print ''; } else { - print ''; + print ''; if (!empty($objp->subscription)) { - print $langs->trans("SubscriptionNotReceived"); + print ''.$langs->trans("SubscriptionNotReceived").''; if ($objp->status > 0) { print " ".img_warning(); } @@ -758,7 +759,7 @@ if ($rowid > 0) { print ''.img_edit().''; } if ($user->rights->adherent->supprimer) { - print ''.img_picto($langs->trans("Resiliate"), 'disable.png').''; + print ''.img_picto($langs->trans("Resiliate"), 'disable.png').''; } print ""; @@ -845,7 +846,7 @@ if ($rowid > 0) { print ''.$langs->trans("Description").''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('comment', $object->note, '', 280, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%'); + $doleditor = new DolEditor('comment', $object->note_public, '', 220, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%'); $doleditor->Create(); print ""; diff --git a/htdocs/adherents/type_translation.php b/htdocs/adherents/type_translation.php index 5e1db1233b8..33c93704b80 100644 --- a/htdocs/adherents/type_translation.php +++ b/htdocs/adherents/type_translation.php @@ -226,7 +226,7 @@ if ($action == 'edit') { print ''; print ''; print ''; print ''; @@ -289,7 +289,7 @@ if ($action == 'create' && $user->rights->adherent->configurer) { print ''; print ''; print ''; diff --git a/htdocs/admin/bank_extrafields.php b/htdocs/admin/bank_extrafields.php index 3626eec4455..d01ac5a93e9 100644 --- a/htdocs/admin/bank_extrafields.php +++ b/htdocs/admin/bank_extrafields.php @@ -65,18 +65,21 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject = $langs->transnoentitiesnoconv("Bank"); +$help_url = ''; +$page_name = "BankSetupModule"; llxHeader('', $langs->trans("BankSetupModule"), $help_url); $linkback = ''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("BankSetupModule"), $linkback, 'title_setup'); +print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = bank_admin_prepare_head(null); -print dol_get_fiche_head($head, 'attributes', $langs->trans("BankSetupModule"), -1, 'account'); +print dol_get_fiche_head($head, 'attributes', $langs->trans($page_name), -1, 'account'); + +$textobject = $langs->transnoentitiesnoconv("Bank"); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/admin/bankline_extrafields.php b/htdocs/admin/bankline_extrafields.php index 06f1267343a..7e451275f8d 100644 --- a/htdocs/admin/bankline_extrafields.php +++ b/htdocs/admin/bankline_extrafields.php @@ -22,7 +22,7 @@ */ /** - * \file admin/bankline_extrafields.php + * \file htdocs/admin/bankline_extrafields.php * \ingroup bank * \brief Page to setup extra fields of bankline */ @@ -41,7 +41,7 @@ $form = new Form($db); // List of supported format $tmptype2label = ExtraFields::$type2label; -$type2label = []; +$type2label = array(); foreach ($tmptype2label as $key => $val) { $type2label[$key] = $langs->transnoentitiesnoconv($val); } @@ -80,6 +80,8 @@ $head = bank_admin_prepare_head(null); print dol_get_fiche_head($head, 'bankline_extrafields', $langs->trans($page_name), -1, 'account'); +$textobject = $langs->transnoentitiesnoconv("BankTransaction"); + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; print dol_get_fiche_end(); diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php index 075ece751ce..3be38cca113 100644 --- a/htdocs/admin/emailcollector_list.php +++ b/htdocs/admin/emailcollector_list.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; -dol_include_once('/emailcollector/class/emailcollector.class.php'); +require_once DOL_DOCUMENT_ROOT.'/emailcollector/class/emailcollector.class.php'; // Load translation files required by page $langs->loadLangs(array("admin", "other")); @@ -50,7 +50,7 @@ $mode = GETPOST('mode', 'aZ'); $id = GETPOST('id', 'int'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); diff --git a/htdocs/admin/eventorganization.php b/htdocs/admin/eventorganization.php index 40c86d79e13..cc9b8d7bca8 100644 --- a/htdocs/admin/eventorganization.php +++ b/htdocs/admin/eventorganization.php @@ -220,7 +220,7 @@ if ($action == 'edit') { foreach ($arrayofparameters as $constname => $val) { if ($val['enabled']==1) { $setupnotempty++; - print ''; + print ''; + print ''; + + print ''; } } diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php index dd4748a99f1..f43ddb281bd 100644 --- a/htdocs/admin/fckeditor.php +++ b/htdocs/admin/fckeditor.php @@ -51,7 +51,7 @@ $modules = array( 'NOTE_PUBLIC' => 'FCKeditorForNotePublic', 'NOTE_PRIVATE' => 'FCKeditorForNotePrivate', 'SOCIETE' => 'FCKeditorForCompany', - 'PRODUCTDESC' => 'FCKeditorForProduct', + //'PRODUCTDESC' => 'FCKeditorForProduct', 'DETAILS' => 'FCKeditorForProductDetails', 'USERSIGN' => 'FCKeditorForUserSignature', 'MAILING' => 'FCKeditorForMailing', @@ -93,7 +93,7 @@ foreach ($modules as $const => $desc) { if ($action == 'enable_'.strtolower($const)) { dolibarr_set_const($db, "FCKEDITOR_ENABLE_".$const, "1", 'chaine', 0, '', $conf->entity); // If fckeditor is active in the product/service description, it is activated in the forms - if ($const == 'PRODUCTDESC' && !empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if ($const == 'PRODUCTDESC' && getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { dolibarr_set_const($db, "FCKEDITOR_ENABLE_DETAILS", "1", 'chaine', 0, '', $conf->entity); } header("Location: ".$_SERVER["PHP_SELF"]); @@ -166,7 +166,12 @@ if (empty($conf->use_javascript_ajax)) { print ''."\n"; print ''; print ''; - print ''; + print ''; print ''; print ''; +// Allow online signing +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +// Allow external download +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + print '
'.$langs->trans('Label').'
'.$langs->trans('Description').''; - $doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_3, '90%'); $doleditor->Create(); print '
'.$langs->trans('Label').'
'.$langs->trans('Description').''; - $doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, ROWS_3, '90%'); $doleditor->Create(); print '
'; + print '
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); $tooltiphelp .= (($langs->trans($constname . 'Tooltip2') && $langs->trans($constname . 'Tooltip2') != $constname . 'Tooltip2') ? '

'."\n".$langs->trans($constname . 'Tooltip2') : ''); print ''.$form->textwithpicto($langs->trans($constname), $tooltiphelp, 1, 'info', '', 0, 3, 'tootips'.$constname).''; @@ -302,7 +302,8 @@ if ($action == 'edit') { foreach ($arrayofparameters as $constname => $val) { if ($val['enabled']==1) { $setupnotempty++; - print '
'; + print '
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); $tooltiphelp .= (($langs->trans($constname . 'Tooltip2') && $langs->trans($constname . 'Tooltip2') != $constname . 'Tooltip2') ? '

'."\n".$langs->trans($constname . 'Tooltip2') : ''); print $form->textwithpicto($langs->trans($constname), $tooltiphelp); @@ -320,12 +321,17 @@ if ($action == 'edit') { $formmail = new FormMail($db); $tmp = explode(':', $val['type']); - - $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); - if ($template < 0) { - setEventMessages(null, $formmail->errors, 'errors'); + $labelemailtemplate = getDolGlobalString($constname); + if ($labelemailtemplate && $labelemailtemplate != '-1') { + $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); + if (is_numeric($template) && $template < 0) { + setEventMessages($formmail->error, $formmail->errors, 'errors'); + } else { + if ($template->label != 'default') { + print $langs->trans($template->label); + } + } } - print $langs->trans($template->label); } } elseif (preg_match('/category:/', $val['type'])) { if (getDolGlobalString($constname)) { @@ -353,16 +359,21 @@ if ($action == 'edit') { } } elseif ($val['type'] == 'product') { $product = new Product($db); - $resprod = $product->fetch(getDolGlobalString($constname)); - if ($resprod > 0) { - print $product->getNomUrl(1); - } elseif ($resprod < 0) { - setEventMessages($product->error, $product->errors, "errors"); + $idproduct = getDolGlobalString($constname); + if ($idproduct > 0) { + $resprod = $product->fetch($idproduct); + if ($resprod > 0) { + print $product->getNomUrl(1); + } elseif ($resprod < 0) { + setEventMessages($product->error, $product->errors, "errors"); + } } } else { print getDolGlobalString($constname); } - print '
'.img_object("", $picto[$const]).''.$langs->trans($desc).''; + print $langs->trans($desc); + if ($const == 'DETAILS') { + print '
'.$langs->trans("FCKeditorForProductDetails2").''; + } + print '
'; $value = (isset($conf->global->$constante) ? $conf->global->$constante : 0); if ($value == 0) { @@ -185,6 +190,7 @@ if (empty($conf->use_javascript_ajax)) { print '
'."\n"; print ''; + print ''; // Skins show_skin(null, 1); @@ -219,7 +225,7 @@ if (empty($conf->use_javascript_ajax)) { print $conf->global->FCKEDITOR_TEST; print ''; } - print $form->buttonsSaveCancel("Save", ''); + print $form->buttonsSaveCancel("Save", '', null, 0, 'reposition'); print '
'; print '
'."\n"; diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php index 4e4438263c3..cf637d37329 100644 --- a/htdocs/admin/fichinter.php +++ b/htdocs/admin/fichinter.php @@ -208,6 +208,32 @@ if ($action == 'updateMask') { $error++; } + if (!$error) { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} elseif ($action == "set_FICHINTER_ALLOW_ONLINE_SIGN") { + $val = GETPOST('FICHINTER_ALLOW_ONLINE_SIGN', 'alpha'); + $res = dolibarr_set_const($db, "FICHINTER_ALLOW_ONLINE_SIGN", ($val == 'on' ? 1 : 0), 'bool', 0, '', $conf->entity); + + if (!($res > 0)) { + $error++; + } + + if (!$error) { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} elseif ($action == "set_FICHINTER_ALLOW_EXTERNAL_DOWNLOAD") { + $val = GETPOST('FICHINTER_ALLOW_EXTERNAL_DOWNLOAD', 'alpha'); + $res = dolibarr_set_const($db, "FICHINTER_ALLOW_EXTERNAL_DOWNLOAD", ($val == 'on' ? 1 : 0), 'bool', 0, '', $conf->entity); + + if (!($res > 0)) { + $error++; + } + if (!$error) { setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -594,6 +620,39 @@ print ''; print '
'; +print $langs->trans("AllowOnlineSign"); +print ''; +print ''; +print ''; +print ''; +print '
'; +print $langs->trans("AllowExternalDownload"); +print ''; +print ''; +print ''; +print ''; +print '
'; print ''; diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index ff24a708797..dfa0bccb06b 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -34,14 +34,15 @@ $langs->loadLangs(array("companies", "products", "admin", "mails", "other", "err $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); +$trackid = GETPOST('trackid'); + if (!$user->admin) { accessforbidden(); } $usersignature = $user->signature; -// For action = test or send, we ensure that content is not html, even for signature, because this we want a test with NO html. - -if ($action == 'test' || $action == 'send') { +// For action = test or send, we ensure that content is not html, even for signature, because for this we want a test with NO html. +if ($action == 'test' || ($action == 'send' && $trackid = 'test')) { $usersignature = dol_string_nohtmltag($usersignature, 2); } @@ -118,6 +119,11 @@ if ($action == 'update' && !$cancel) { } } +if ($action == 'disablephpmailwarning' && !$cancel) { + dolibarr_set_const($db, 'MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP', 1, 'chaine', 1, 0, $conf->entity); + + setEventMessages($langs->trans("WarningDisabled"), null, 'mesgs'); +} // Actions to send emails $id = 0; @@ -125,7 +131,7 @@ $actiontypecode = ''; // Not an event for agenda $triggersendname = ''; // Disable triggers $paramname = 'id'; $mode = 'emailfortest'; -$trackid = (($action == 'testhtml') ? "testhtml" : "test"); +$trackid = ($action == 'send' ? GETPOST('trackid', 'aZ09') : $action); $sendcontext = ''; include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; @@ -138,7 +144,6 @@ if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'testhtml') { - /* * View */ @@ -375,7 +380,7 @@ if ($action == 'edit') { // SuperAdministrator access only if ((empty($conf->global->MAIN_MODULE_MULTICOMPANY)) || ($user->admin && !$user->entity)) { - print $form->selectarray('MAIN_MAIL_SENDMODE', $listofmethods, $conf->global->MAIN_MAIL_SENDMODE); + print $form->selectarray('MAIN_MAIL_SENDMODE', $listofmethods, getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail')); } else { $text = $listofmethods[$conf->global->MAIN_MAIL_SENDMODE]; if (empty($text)) { @@ -383,13 +388,13 @@ if ($action == 'edit') { } $htmltext = $langs->trans("ContactSuperAdminForChange"); print $form->textwithpicto($text, $htmltext, 1, 'superadmin'); - print ''; + print ''; } print ''; // Host server print ''; - if (!$conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail') { + if (!$conf->use_javascript_ajax && $linuxlike && getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') { print ''; print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike"); print ''; @@ -423,7 +428,7 @@ if ($action == 'edit') { // Port print ''; - if (!$conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail') { + if (!$conf->use_javascript_ajax && $linuxlike && getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') { print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike"); print ''; print ''.$langs->trans("SeeLocalSendMailSetup").''; @@ -451,7 +456,7 @@ if ($action == 'edit') { print ''; // ID - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { $mainstmpid = (!empty($conf->global->MAIN_MAIL_SMTPS_ID) ? $conf->global->MAIN_MAIL_SMTPS_ID : ''); print ''.$langs->trans("MAIN_MAIL_SMTPS_ID").''; // SuperAdministrator access only @@ -467,7 +472,7 @@ if ($action == 'edit') { // OAUTH - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { print ''.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").''; if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) { print ' '; @@ -485,7 +490,7 @@ if ($action == 'edit') { } // PW - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { $mainsmtppw = (!empty($conf->global->MAIN_MAIL_SMTPS_PW) ? $conf->global->MAIN_MAIL_SMTPS_PW : ''); print ''; print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_PW"), $langs->trans("WithGMailYouCanCreateADedicatedPassword")); @@ -502,7 +507,7 @@ if ($action == 'edit') { } // OAUTH service provider - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { print ''.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").''; // SuperAdministrator access only @@ -521,7 +526,7 @@ if ($action == 'edit') { } // TLS print ''.$langs->trans("MAIN_MAIL_EMAIL_TLS").''; - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { if (function_exists('openssl_open')) { print $form->selectyesno('MAIN_MAIL_EMAIL_TLS', (!empty($conf->global->MAIN_MAIL_EMAIL_TLS) ? $conf->global->MAIN_MAIL_EMAIL_TLS : 0), 1); } else { @@ -534,7 +539,7 @@ if ($action == 'edit') { // STARTTLS print ''.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").''; - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { if (function_exists('openssl_open')) { print $form->selectyesno('MAIN_MAIL_EMAIL_STARTTLS', (!empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) ? $conf->global->MAIN_MAIL_EMAIL_STARTTLS : 0), 1); } else { @@ -547,7 +552,7 @@ if ($action == 'edit') { // SMTP_ALLOW_SELF_SIGNED print ''.$langs->trans("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").''; - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) { if (function_exists('openssl_open')) { print $form->selectyesno('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED', (!empty($conf->global->MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED) ? $conf->global->MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED : 0), 1); } else { @@ -560,7 +565,7 @@ if ($action == 'edit') { // DKIM print ''.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").''; - if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('swiftmailer')))) { + if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('swiftmailer')))) { if (function_exists('openssl_open')) { print $form->selectyesno('MAIN_MAIL_EMAIL_DKIM_ENABLED', (!empty($conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED) ? $conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED : 0), 1); } else { @@ -671,20 +676,21 @@ if ($action == 'edit') { // Method print ''.$langs->trans("MAIN_MAIL_SENDMODE").''; - $text = $listofmethods[$conf->global->MAIN_MAIL_SENDMODE]; + $text = $listofmethods[getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail')]; if (empty($text)) { $text = $langs->trans("Undefined").img_warning(); } print $text; - if ($conf->global->MAIN_MAIL_SENDMODE == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { - print $form->textwithpicto('', $langs->trans("WarningPHPMail").'
'.$langs->trans("WarningPHPMailA").'
'.$langs->trans("WarningPHPMailB").'
'.$langs->trans("WarningPHPMailC").'

'.$langs->trans("WarningPHPMailD"), 1, 'warning'); + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { + $textwarning = $langs->trans("WarningPHPMail").'
'.$langs->trans("WarningPHPMailA").'
'.$langs->trans("WarningPHPMailB").'
'.$langs->trans("WarningPHPMailC").'

'.$langs->trans("WarningPHPMailD"); + print $form->textwithpicto('', $textwarning, 1, 'warning'); } print ''; // Host server - if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE') == 'mail')) { + if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) { print ''.$langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike").''.$langs->trans("SeeLocalSendMailSetup").''; } else { print ''.$langs->trans("MAIN_MAIL_SMTP_SERVER", ini_get('SMTP') ?ini_get('SMTP') : $langs->transnoentities("Undefined")).''.(!empty($conf->global->MAIN_MAIL_SMTP_SERVER) ? $conf->global->MAIN_MAIL_SMTP_SERVER : '').''; @@ -692,31 +698,31 @@ if ($action == 'edit') { // Port - if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE') == 'mail')) { + if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) { print ''.$langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike").''.$langs->trans("SeeLocalSendMailSetup").''; } else { print ''.$langs->trans("MAIN_MAIL_SMTP_PORT", ini_get('smtp_port') ?ini_get('smtp_port') : $langs->transnoentities("Undefined")).''.(!empty($conf->global->MAIN_MAIL_SMTP_PORT) ? $conf->global->MAIN_MAIL_SMTP_PORT : '').''; } // SMTPS ID - if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE'), array('smtps', 'swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) { print ''.$langs->trans("MAIN_MAIL_SMTPS_ID").''.$conf->global->MAIN_MAIL_SMTPS_ID.''; } // AUTH method - if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE'), array('smtps', 'swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) { $authtype = getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE', 'LOGIN'); $text = ($authtype === "LOGIN") ? $langs->trans("UsePassword") : ($authtype === "XOAUTH2" ? $langs->trans("UseOauth") : '') ; print ''.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").''.$text.''; } // SMTPS PW - if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') != "XOAUTH2") { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') != "XOAUTH2") { print ''.$langs->trans("MAIN_MAIL_SMTPS_PW").''.preg_replace('/./', '*', $conf->global->MAIN_MAIL_SMTPS_PW).''; } // SMTPS oauth service - if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') === "XOAUTH2") { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') === "XOAUTH2") { $text = $oauthservices[$conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE]; if (empty($text)) { $text = $langs->trans("Undefined").img_warning(); @@ -726,7 +732,7 @@ if ($action == 'edit') { // TLS print ''.$langs->trans("MAIN_MAIL_EMAIL_TLS").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) { if (function_exists('openssl_open')) { print yn($conf->global->MAIN_MAIL_EMAIL_TLS); } else { @@ -739,7 +745,7 @@ if ($action == 'edit') { // STARTTLS print ''.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) { if (function_exists('openssl_open')) { print yn($conf->global->MAIN_MAIL_EMAIL_STARTTLS); } else { @@ -752,7 +758,7 @@ if ($action == 'edit') { // SMTP_ALLOW_SELF_SIGNED print ''.$langs->trans("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) { if (function_exists('openssl_open')) { print yn($conf->global->MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED); } else { @@ -767,7 +773,7 @@ if ($action == 'edit') { if ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer') { // DKIM print ''.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('swiftmailer'))) { + if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('swiftmailer'))) { if (function_exists('openssl_open')) { print yn(getDolGlobalInt('MAIN_MAIL_EMAIL_DKIM_ENABLED')); } else { @@ -797,8 +803,14 @@ if ($action == 'edit') { print ''; print ''; - if ($conf->global->MAIN_MAIL_SENDMODE == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { - print info_admin($langs->trans("WarningPHPMail").'
'.$langs->trans("WarningPHPMailA").'
'.$langs->trans("WarningPHPMailB").'
'.$langs->trans("WarningPHPMailC").'

'.$langs->trans("WarningPHPMailD"), 0, 0, 'warning'); + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { + $messagetoshow = $langs->trans("WarningPHPMail").'
'.$langs->trans("WarningPHPMailA").'
'.$langs->trans("WarningPHPMailB").'
'.$langs->trans("WarningPHPMailC").'

'.$langs->trans("WarningPHPMailD"); + $messagetoshow .= ' '.$langs->trans("WarningPHPMailDbis", '{s1}', '{s2}'); + $linktosetvar1 = ''; + $linktosetvar2 = ''; + $messagetoshow = str_replace('{s1}', $linktosetvar1, $messagetoshow); + $messagetoshow = str_replace('{s2}', $linktosetvar2, $messagetoshow); + print info_admin($messagetoshow, 0, 0, 'warning'); } print '
'; @@ -903,7 +915,7 @@ if ($action == 'edit') { print ''.$langs->trans("Modify").''; if (empty($conf->global->MAIN_DISABLE_ALL_MAILS)) { - if ($conf->global->MAIN_MAIL_SENDMODE != 'mail' || !$linuxlike) { + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') != 'mail' || !$linuxlike) { if (function_exists('fsockopen') && $port && $server) { print ''.$langs->trans("DoTestServerAvailability").''; } @@ -921,7 +933,7 @@ if ($action == 'edit') { print ''; - if ($conf->global->MAIN_MAIL_SENDMODE == 'mail' && empty($conf->global->MAIN_FIX_FOR_BUGGED_MTA)) { + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && empty($conf->global->MAIN_FIX_FOR_BUGGED_MTA)) { /* // Warning 1 if ($linuxlike) @@ -938,11 +950,11 @@ if ($action == 'edit') { if (!in_array($action, array('testconnect', 'test', 'testhtml'))) { $text = ''; - if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') { + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') { //$text .= $langs->trans("WarningPHPMail"); // To encourage to use SMTPS } - if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') { + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') { if (!empty($conf->global->MAIN_EXTERNAL_MAIL_SPF_STRING_TO_ADD)) { // List of string to add in SPF if the setup use the mail method. Example 'include:sendgrid.net include:spf.mydomain.com' $text .= ($text ? '

' : '').''.$langs->trans("WarningPHPMailSPF", $conf->global->MAIN_EXTERNAL_MAIL_SPF_STRING_TO_ADD); diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index 1b5f8353f12..5a4eac7bcca 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -1173,7 +1173,7 @@ if ($num) { $class .= ' tdoverflowmax100'; } if ($value == 'topic') { - $class .= 'tdoverflowmax200 small'; + $class .= ' tdoverflowmax200 small'; } if ($value == 'type_template') { $valuetoshow = isset($elementList[$valuetoshow]) ? $elementList[$valuetoshow] : $valuetoshow; diff --git a/htdocs/admin/oauth.php b/htdocs/admin/oauth.php index 014d3844368..6bf59508d11 100644 --- a/htdocs/admin/oauth.php +++ b/htdocs/admin/oauth.php @@ -282,10 +282,9 @@ if (count($listinsetup) > 0) { } print ''; + // Delete print ''; - $label = preg_replace('/_NAME$/', '', $keyforsupportedoauth2array); - print ''; print img_picto('', 'delete'); print ''; @@ -300,41 +299,53 @@ if (count($listinsetup) > 0) { print ''; print ''.$langs->trans("UseTheFollowingUrlAsRedirectURI").''; print ''; - print ''; + print ''; + print ''; + print ''; if ($keyforsupportedoauth2array == 'OAUTH_OTHER_NAME') { print ''; print ''.$langs->trans("URLOfServiceForAuthorization").''; print ''; - print ''; + print ''; + print ''; + print ''; } } else { print ''; print ''.$langs->trans("UseTheFollowingUrlAsRedirectURI").''; print ''.$langs->trans("FeatureNotYetSupported").''; - print ''; + print ''; + print ''; + print ''; } // Api Id print ''; print ''; print ''; - print ''; + print ''; + print ''; + print ''; // Api Secret print ''; print ''; print ''; - print ''; + print ''; + print ''; + print ''; - // TODO Move this into token generation + // TODO Move this into token generation ? if ($supported) { if ($keyforsupportedoauth2array == 'OAUTH_OTHER_NAME') { print ''; print ''.$langs->trans("Scopes").''; print ''; print ''; - print ''; + print ''; + print ''; + print ''; } else { $availablescopes = array_flip(explode(',', $supportedoauth2array[$keyforsupportedoauth2array]['availablescopes'])); $currentscopes = explode(',', getDolGlobalString($key[4])); @@ -354,13 +365,17 @@ if (count($listinsetup) > 0) { print ''; print ''; } - print ''; + print ''; + print ''; + print ''; } } else { print ''; print ''.$langs->trans("UseTheFollowingUrlAsRedirectURI").''; print ''.$langs->trans("FeatureNotYetSupported").''; - print ''; + print ''; + print ''; + print ''; } print ''."\n"; diff --git a/htdocs/admin/security_other.php b/htdocs/admin/security_other.php index bec69a7a6e4..d4c5a3e034a 100644 --- a/htdocs/admin/security_other.php +++ b/htdocs/admin/security_other.php @@ -193,7 +193,7 @@ print ''; print ''.$langs->trans("MaxNumberOfPostOnPublicPagesByIP").''; print ''; print ''; -print ' '.strtolower($langs->trans("Posts")); +print ''; print ''; print ''; diff --git a/htdocs/admin/stocktransfer.php b/htdocs/admin/stocktransfer.php index 099312ef491..3bcd00c1fe8 100644 --- a/htdocs/admin/stocktransfer.php +++ b/htdocs/admin/stocktransfer.php @@ -24,19 +24,7 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; } -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) $res = @include "../main.inc.php"; -if (!$res && file_exists("../../main.inc.php")) $res = @include "../../main.inc.php"; -if (!$res && file_exists("../../../main.inc.php")) $res = @include "../../../main.inc.php"; -if (!$res) die("Include of main fails"); +require '../main.inc.php'; global $langs, $user; @@ -56,6 +44,8 @@ $action = GETPOST('action', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); $value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scan_dir', 'alpha'); $arrayofparameters = array( 'STOCKTRANSFER_MYPARAM1'=>array('css'=>'minwidth200', 'enabled'=>1), @@ -70,9 +60,8 @@ $setupnotempty = 0; * Actions */ -if ((float) DOL_VERSION >= 6) { - include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; -} +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; + if ($action == 'updateMask') { $maskconststocktransfer = GETPOST('maskconststocktransfer', 'alpha'); @@ -131,7 +120,9 @@ if ($action == 'updateMask') { $ret = delDocumentModel($value, 'stocktransfer'); if ($ret > 0) { $constforval = strtoupper($tmpobjectkey).'_ADDON_PDF'; - if ($conf->global->$constforval == "$value") dolibarr_del_const($db, $constforval, $conf->entity); + if (getDolGlobalString($constforval) == "$value") { + dolibarr_del_const($db, $constforval, $conf->entity); + } } } elseif ($action == 'setdoc') { // Set default model $tmpobjectkey = 'StockTransfer'; @@ -294,7 +285,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { print ''; $constforvar = 'STOCKTRANSFER_'.strtoupper($myTmpObjectKey).'_ADDON'; - if ($conf->global->$constforvar == $file) { + if (getDolGlobalString($constforvar) == $file) { print img_picto($langs->trans("Activated"), 'switch_on'); } else { print ''; @@ -428,7 +419,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { // Default print ''; $constforvar = strtoupper($myTmpObjectKey).'_ADDON_PDF'; - if ($conf->global->$constforvar == $name) { + if (getDolGlobalString($constforvar) == $name) { print img_picto($langs->trans("Default"), 'on'); } else { print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; diff --git a/htdocs/admin/system/constall.php b/htdocs/admin/system/constall.php index 4acb8e0ff59..dcf41aacf25 100644 --- a/htdocs/admin/system/constall.php +++ b/htdocs/admin/system/constall.php @@ -73,7 +73,6 @@ $configfileparameters = array( '?dolibarr_main_auth_ldap_admin_pass', '?dolibarr_main_auth_ldap_debug', 'separator', - '?dolibarr_lib_ADODB_PATH', '?dolibarr_lib_FPDF_PATH', '?dolibarr_lib_TCPDF_PATH', '?dolibarr_lib_FPDI_PATH', @@ -122,7 +121,6 @@ $configfilelib = array( 'dolibarr_main_auth_ldap_admin_pass', 'dolibarr_main_auth_ldap_debug', 'separator', - 'dolibarr_lib_ADODB_PATH', 'dolibarr_lib_TCPDF_PATH', 'dolibarr_lib_FPDI_PATH', 'dolibarr_lib_NUSOAP_PATH', diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index 86c76ca1604..7fa1ef252cb 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -342,7 +342,6 @@ $configfileparameters = array( '?dolibarr_main_auth_ldap_admin_pass' => 'dolibarr_main_auth_ldap_admin_pass', '?dolibarr_main_auth_ldap_debug' => 'dolibarr_main_auth_ldap_debug', 'separator3' => '', - '?dolibarr_lib_ADODB_PATH' => 'dolibarr_lib_ADODB_PATH', '?dolibarr_lib_FPDF_PATH' => 'dolibarr_lib_FPDF_PATH', '?dolibarr_lib_TCPDF_PATH' => 'dolibarr_lib_TCPDF_PATH', '?dolibarr_lib_FPDI_PATH' => 'dolibarr_lib_FPDI_PATH', diff --git a/htdocs/admin/system/security.php b/htdocs/admin/system/security.php index b0ea7571a2d..1ea81cd5dd3 100644 --- a/htdocs/admin/system/security.php +++ b/htdocs/admin/system/security.php @@ -570,9 +570,10 @@ print 'For a higher security, we also recommend to implement limits and mitigati print ''; print '
'; -print 'Login process -> This can be done using a fail2ban rule (see example into dev/setup)'."
"; -print DOL_URL_ROOT.'/passwordforgotten.php (see example into dev/setup)'."
"; -print DOL_URL_ROOT.'/public/* (see example into dev/setup)'."
"; +$urlexamplebase = 'https://github.com/Dolibarr/dolibarr/blob/develop/dev/setup/fail2ban/filter.d/'; +print '- Login process (see fail2ban example on GitHub)
'; +print '- '.DOL_URL_ROOT.'/passwordforgotten.php (see fail2ban example on GitHub)
'; +print '- '.DOL_URL_ROOT.'/public/* (see fail2ban example on GitHub)
'; diff --git a/htdocs/admin/ticket_public.php b/htdocs/admin/ticket_public.php index 84186e4e226..05938e27d49 100644 --- a/htdocs/admin/ticket_public.php +++ b/htdocs/admin/ticket_public.php @@ -419,7 +419,7 @@ if (!empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) { print ''.$langs->trans("TicketPublicInterfaceTextHomeLabelAdmin").''; print ''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('TICKET_PUBLIC_TEXT_HOME', $public_text_home, '100%', 180, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_2, 70); + $doleditor = new DolEditor('TICKET_PUBLIC_TEXT_HOME', $public_text_home, '100%', 180, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_TICKET'), ROWS_2, 70); $doleditor->Create(); print ''; print ''; @@ -431,7 +431,7 @@ if (!empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) { print ''.$langs->trans("TicketPublicInterfaceTextHelpMessageLabelAdmin").''; print ''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('TICKET_PUBLIC_TEXT_HELP_MESSAGE', $public_text_help_message, '100%', 180, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_2, 70); + $doleditor = new DolEditor('TICKET_PUBLIC_TEXT_HELP_MESSAGE', $public_text_help_message, '100%', 180, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_TICKET'), ROWS_2, 70); $doleditor->Create(); print ''; print ''; diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index 779db36fb2f..d01efa0ea5b 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -212,10 +212,10 @@ function hideoptions(){ if (div.style.display === "none") { div.style.display = "block"; - lnk.innerText="'.$langs->trans("HideAdvancedoptions").'"; + lnk.innerText="'.dol_escape_js($langs->transnoentitiesnoconv("HideAdvancedoptions")).'"; } else { div.style.display = "none"; - lnk.innerText="'.$langs->trans("ShowAdvancedOptions").'..."; + lnk.innerText="'.dol_escape_js($langs->transnoentitiesnoconv("ShowAdvancedOptions")).'..."; } } '; diff --git a/htdocs/admin/tools/export.php b/htdocs/admin/tools/export.php index 8299e2198ee..8e7643ffc5d 100644 --- a/htdocs/admin/tools/export.php +++ b/htdocs/admin/tools/export.php @@ -35,7 +35,7 @@ $langs->load("admin"); $action = GETPOST('action', 'aZ09'); $what = GETPOST('what', 'alpha'); $export_type = GETPOST('export_type', 'alpha'); -$file = GETPOST('filename_template', 'alpha'); +$file = dol_sanitizeFileName(GETPOST('filename_template', 'alpha')); // Load variable for pagination $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; diff --git a/htdocs/admin/workflow.php b/htdocs/admin/workflow.php index 10f32eed97d..cf55c7b9127 100644 --- a/htdocs/admin/workflow.php +++ b/htdocs/admin/workflow.php @@ -79,7 +79,7 @@ $workflowcodes = array( 'picto'=>'ticket' ), - 'separator1'=>array('family'=>'separator', 'position'=>25, 'title'=>''), + 'separator1'=>array('family'=>'separator', 'position'=>25, 'title'=>'', 'enabled'=>((isModEnabled("propal") && isModEnabled('commande')) || (isModEnabled('commande') && isModEnabled('facture')) || (isModEnabled('ticket') && isModEnabled('ficheinter')))), // Automatic classification of proposal 'WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL'=>array( @@ -118,8 +118,6 @@ $workflowcodes = array( 'warning'=>'' ), // For this option, if module invoice is disabled, it does not exists, so "Classify billed" for order must be done manually from order card. - 'separator2'=>array('family'=>'separator', 'position'=>50), - // Automatic classification supplier proposal 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL'=>array( 'family'=>'classify_supplier_proposal', @@ -154,14 +152,6 @@ $workflowcodes = array( 'warning'=>'' ), - // Automatic classification reception - 'WORKFLOW_BILL_ON_RECEPTION'=>array( - 'family'=>'classify_reception', - 'position'=>80, - 'enabled'=>(isModEnabled("reception") && ((isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))), - 'picto'=>'reception' - ), - // Automatic classification shipping 'WORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE' => array( 'family' => 'classify_shipping', @@ -170,17 +160,27 @@ $workflowcodes = array( 'picto' => 'shipment' ), + // Automatic classification reception + 'WORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE'=>array( + 'family'=>'classify_reception', + 'position'=>95, + 'enabled'=>(isModEnabled("reception") && ((isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))), + 'picto'=>'reception' + ), + + 'separator2'=>array('family'=>'separator', 'position'=>400, 'enabled' => (isModEnabled('ticket') && isModEnabled('contract'))), + // Automatic link ticket -> contract 'WORKFLOW_TICKET_LINK_CONTRACT' => array( 'family' => 'link_ticket', - 'position' => 75, - 'enabled' => isModEnabled('ticket') && !empty($conf->contract->enabled), + 'position' => 500, + 'enabled' => (isModEnabled('ticket') && isModEnabled('contract')), 'picto' => 'ticket' ), 'WORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS' => array( 'family' => 'link_ticket', - 'position' => 76, - 'enabled' => isModEnabled('ticket') && !empty($conf->contract->enabled), + 'position' => 501, + 'enabled' => (isModEnabled('ticket') && isModEnabled('contract')), 'picto' => 'ticket' ), ); @@ -235,6 +235,7 @@ foreach ($workflowcodes as $key => $params) { continue; } + $reg = array(); if ($oldfamily != $params['family']) { if ($params['family'] == 'create') { $header = $langs->trans("AutomaticCreation"); @@ -269,7 +270,7 @@ foreach ($workflowcodes as $key => $params) { print ''; print ''.$header.''; - print ''.$langs->trans("Status").''; + print ''.$langs->trans("Status").''; print ''; $oldfamily = $params['family']; @@ -286,7 +287,7 @@ foreach ($workflowcodes as $key => $params) { print ''; - print ''; + print ''; if (!empty($conf->use_javascript_ajax)) { print ajax_constantonoff($key); diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index fa5e2ff1de8..e0acc8faac8 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -113,9 +113,8 @@ class DolibarrApi unset($object->pass); unset($object->pass_indatabase); - // Remove linkedObjects. We should already have linkedObjectsIds that avoid huge responses + // Remove linkedObjects. We should already have and keep only linkedObjectsIds that avoid huge responses unset($object->linkedObjects); - unset($object->linkedObjectsFullLoaded); //unset($object->lines[$i]->linked_objects); // This is the array to create linked object during create unset($object->fields); diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index 45f90101adc..5e00c2d2433 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -307,7 +307,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords++; }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); $nbtotalofrecords = $objforcount->nbtotalofrecords; diff --git a/htdocs/asset/model/list.php b/htdocs/asset/model/list.php index 1d85a982e5d..aa80b4e5426 100644 --- a/htdocs/asset/model/list.php +++ b/htdocs/asset/model/list.php @@ -307,7 +307,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords = $db->num_rows($result); */ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 09d2b2bcb9d..926797d1f07 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -704,7 +704,7 @@ if (empty($reshook)) { // Clone if ($permissiontoadd) { - print ''.$langs->trans("ToClone").''."\n"; + print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=bom', 'clone', $permissiontoadd); } // Close / Cancel @@ -726,11 +726,8 @@ if (empty($reshook)) { } */ - if ($permissiontodelete) { - print ''.$langs->trans('Delete').''."\n"; - } else { - print ''.$langs->trans('Delete').''."\n"; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print ''."\n"; } diff --git a/htdocs/bookmarks/bookmarks.lib.php b/htdocs/bookmarks/bookmarks.lib.php index 797bffa187a..d5258ba26f1 100644 --- a/htdocs/bookmarks/bookmarks.lib.php +++ b/htdocs/bookmarks/bookmarks.lib.php @@ -60,7 +60,7 @@ function printDropdownBookmarksList() if ($sortorder) { $tmpurl .= ($tmpurl ? '&' : '').'sortorder='.urlencode($sortorder); } - if (is_array($_POST)) { + if (!empty($_POST) && is_array($_POST)) { foreach ($_POST as $key => $val) { if ((preg_match('/^search_/', $key) || in_array($key, $authorized_var)) && $val != '' diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php index 7f04c6d1005..c94e464a762 100644 --- a/htdocs/categories/card.php +++ b/htdocs/categories/card.php @@ -247,7 +247,7 @@ if ($user->rights->categorie->creer) { // Description print ''.$langs->trans("Description").''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('description', $description, '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_5, '90%'); + $doleditor = new DolEditor('description', $description, '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_5, '90%'); $doleditor->Create(); print ''; diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index e6ed20acb3d..d9a7eb4b1c7 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -694,6 +694,7 @@ class Categorie extends CommonObject * @param CommonObject $obj Object to link to category * @param string $type Type of category ('product', ...). Use '' to take $obj->element. * @return int 1 : OK, -1 : erreur SQL, -2 : id not defined, -3 : Already linked + * @see del_type() */ public function add_type($obj, $type = '') { @@ -785,8 +786,8 @@ class Categorie extends CommonObject * * @param CommonObject $obj Object * @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member') - * * @return int 1 if OK, -1 if KO + * @see add_type() */ public function del_type($obj, $type) { @@ -1980,6 +1981,7 @@ class Categorie extends CommonObject * @param string $type The category type (e.g Categorie::TYPE_WAREHOUSE) * @param string $rowIdName The name of the row id inside the whole sql query (e.g. "e.rowid") * @return string A additional SQL JOIN query + * @deprecated search on some categories must be done using a WHERE EXISTS or NOT EXISTS and not a LEFT JOIN. @TODO Replace with getWhereQuery($type, $searchCategoryList) */ public static function getFilterJoinQuery($type, $rowIdName) { @@ -1997,6 +1999,7 @@ class Categorie extends CommonObject * @param string $rowIdName The name of the row id inside the whole sql query (e.g. "e.rowid") * @param Array $searchList A list with the selected categories * @return string A additional SQL SELECT query + * @deprecated search on some categories must be done using a WHERE EXISTS or NOT EXISTS and not a LEFT JOIN */ public static function getFilterSelectQuery($type, $rowIdName, $searchList) { diff --git a/htdocs/categories/traduction.php b/htdocs/categories/traduction.php index 8aecdde63ea..f0f40b4401b 100644 --- a/htdocs/categories/traduction.php +++ b/htdocs/categories/traduction.php @@ -267,7 +267,7 @@ if ($action == 'edit') { // Desc $desc = (GETPOST('desc-'.$key) ? GETPOST('desc-'.$key) : $object->multilangs[$key]['description']); print ''.$langs->trans('Description').''; - $doleditor = new DolEditor("desc-$key", $desc, '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor("desc-$key", $desc, '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_3, '90%'); $doleditor->Create(); print ''; @@ -327,7 +327,7 @@ if ($action == 'add' && ($user->rights->produit->creer || $user->rights->service print ''.$langs->trans('Label').''; print ''; print ''.$langs->trans('Description').''; - $doleditor = new DolEditor('desc', GETPOST('desc', 'restricthtml'), '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor('desc', GETPOST('desc', 'restricthtml'), '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_3, '90%'); $doleditor->Create(); print ''; diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 2c008202348..3aa6a16d3ef 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -75,6 +75,7 @@ $offsetunit = GETPOST('offsetunittype_duration', 'aZ09'); $remindertype = GETPOST('selectremindertype', 'aZ09'); $modelmail = GETPOST('actioncommsendmodel_mail', 'int'); $complete = GETPOST('complete', 'alpha'); // 'na' must be allowed +$private = GETPOST('private', 'alphanohtml'); if ($complete == 'na' || $complete == -2) { $complete = -1; } @@ -89,6 +90,14 @@ if ($fulldayevent) { $datep = dol_mktime($aphour, $apmin, 0, GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), 'tzuserrel'); $datef = dol_mktime($p2hour, $p2min, '59', GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuserrel'); } +$reg = array(); +if (GETPOST('datep')) { + if (GETPOST('datep') == 'now') { + $datep = dol_now(); + } elseif (preg_match('/^([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])$/', GETPOST("datep"), $reg)) { // Try to not use this. Use insteead '&datep=now' + $datep = dol_mktime(0, 0, 0, $reg[2], $reg[3], $reg[1], 'tzuser'); + } +} // Security check $socid = GETPOST('socid', 'int'); @@ -150,6 +159,8 @@ if ($user->socid && $socid) { $result = restrictedArea($user, 'societe', $socid); } +$usercancreate = $user->rights->agenda->allactions->create || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create); + /* * Actions @@ -695,7 +706,15 @@ if (empty($reshook) && $action == 'update') { $datef = dol_mktime($fulldayevent ? '23' : GETPOST("p2hour", 'int'), $fulldayevent ? '59' : GETPOST("p2min", 'int'), $fulldayevent ? '59' : GETPOST("apsec", 'int'), GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuser'); } - $object->type_id = dol_getIdFromCode($db, GETPOST("actioncode", 'aZ09'), 'c_actioncomm'); + if ($object->elementtype == 'ticket') { + if ($private) { + $object->type_code = 'TICKET_MSG_PRIVATE'; + } else { + $object->type_id = dol_getIdFromCode($db, 'AC_EMAIL', 'c_actioncomm'); + } + } else { + $object->type_id = dol_getIdFromCode($db, GETPOST("actioncode", 'aZ09'), 'c_actioncomm'); + } $object->label = GETPOST("label", "alphanohtml"); $object->datep = $datep; $object->datef = $datef; @@ -1059,7 +1078,6 @@ if (empty($reshook)) { } - /* * View */ @@ -1172,9 +1190,10 @@ if ($action == 'create') { // Type of event if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { print ''.$langs->trans("Type").''; - $default = (empty($conf->global->AGENDA_USE_EVENT_TYPE_DEFAULT) ? 'AC_RDV' : $conf->global->AGENDA_USE_EVENT_TYPE_DEFAULT); + $default = getDolGlobalString('AGENDA_USE_EVENT_TYPE_DEFAULT', 'AC_RDV'); print img_picto($langs->trans("ActionType"), 'square', 'class="fawidth30 inline-block" style="color: #ddd;"'); - print $formactions->select_type_actions(GETPOSTISSET("actioncode") ? GETPOST("actioncode", 'aZ09') : ($object->type_code ? $object->type_code : $default), "actioncode", "systemauto", 0, -1, 0, 1); // TODO Replace 0 with -2 in onlyautoornot + $selectedvalue = GETPOSTISSET("actioncode") ? GETPOST("actioncode", 'aZ09') : ($object->type_code ? $object->type_code : $default); + print $formactions->select_type_actions($selectedvalue, "actioncode", "systemauto", 0, -1, 0, 1); // TODO Replace 0 with -2 in onlyautoornot print ''; } @@ -1486,11 +1505,6 @@ if ($action == 'create') { } } - $reg = array(); - if (GETPOST("datep") && preg_match('/^([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])$/', GETPOST("datep"), $reg)) { - $object->datep = dol_mktime(0, 0, 0, $reg[2], $reg[3], $reg[1]); - } - // Priority if (!empty($conf->global->AGENDA_SUPPORT_PRIORITY_IN_EVENTS)) { print ''.$langs->trans("Priority").''; @@ -1694,7 +1708,7 @@ if ($id > 0) { if ($backtopage) { print ''; } - if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) { + if (empty($conf->global->AGENDA_USE_EVENT_TYPE) && $object->code != "TICKET_MSG_PRIVATE") { print ''; } @@ -1706,7 +1720,7 @@ if ($id > 0) { print ''.$langs->trans("Ref").''.$object->id.''; // Type of event - if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { + if (!empty($conf->global->AGENDA_USE_EVENT_TYPE) && $object->elementtype != "ticket") { print ''.$langs->trans("Type").''; if ($object->type_code != 'AC_OTH_AUTO') { print img_picto($langs->trans("ActionType"), 'square', 'class="fawidth30 inline-block" style="color: #ddd;"'); @@ -1719,6 +1733,9 @@ if ($id > 0) { print ''; } + // Private + if ($object->elementtype == 'ticket') print ''.$langs->trans("PrivateEventMessage").'code == 'TICKET_MSG_PRIVATE') ? ' checked' : '').'>'; + // Title print 'global->AGENDA_USE_EVENT_TYPE) ? ' class="fieldrequired titlefieldcreate"' : '').'>'.$langs->trans("Title").''; @@ -1865,7 +1882,7 @@ if ($id > 0) { // Location if (empty($conf->global->AGENDA_DISABLE_LOCATION)) { - print ''.$langs->trans("Location").''; + print ''.$langs->trans("Location").''; } // Status @@ -1997,7 +2014,7 @@ if ($id > 0) { print ''; // Reminders - if ($conf->global->AGENDA_REMINDER_EMAIL || $conf->global->AGENDA_REMINDER_BROWSER) { + if (getDolGlobalString('AGENDA_REMINDER_EMAIL') || getDolGlobalString('AGENDA_REMINDER_BROWSER')) { $filteruserid = $user->id; if ($user->rights->agenda->allactions->read) { $filteruserid = 0; @@ -2139,34 +2156,21 @@ if ($id > 0) { // Project if (isModEnabled('project')) { $langs->load("projects"); - //$morehtmlref.='
'.$langs->trans('Project') . ' '; - $morehtmlref .= $langs->trans('Project').' '; - if ($user->rights->agenda->allactions->create || - (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create)) { + //$morehtmlref .= '
'; + if ($usercancreate) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2184,13 +2188,16 @@ if ($id > 0) { print ''; // Type - if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { + if (!empty($conf->global->AGENDA_USE_EVENT_TYPE) && $object->elementtype != 'ticket') { print ''; } + // Private + if ($object->elementtype == 'ticket') print ''; + // Full day event print ''; diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 45dbbbf12c0..228ff397607 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1591,16 +1591,16 @@ class ActionComm extends CommonObject $tooltip = img_picto('', $this->picto).' '.$langs->trans('Action').''; if (!empty($this->ref)) { - $tooltip .= '
'.$langs->trans('Ref').': '.$this->ref; + $tooltip .= '
'.$langs->trans('Ref').': '.dol_escape_htmltag($this->ref); } if (!empty($label)) { - $tooltip .= '
'.$langs->trans('Title').': '.$label; + $tooltip .= '
'.$langs->trans('Title').': '.dol_escape_htmltag($label); } if (!empty($labeltype)) { - $tooltip .= '
'.$langs->trans('Type').': '.$labeltype; + $tooltip .= '
'.$langs->trans('Type').': '.dol_escape_htmltag($labeltype); } if (!empty($this->location)) { - $tooltip .= '
'.$langs->trans('Location').': '.$this->location; + $tooltip .= '
'.$langs->trans('Location').': '.dol_escape_htmltag($this->location); } if (isset($this->transparency)) { $tooltip .= '
'.$langs->trans('Busy').': '.yn($this->transparency); @@ -1609,7 +1609,7 @@ class ActionComm extends CommonObject $langs->load("mails"); $tooltip .= '
'; //$tooltip .= '
'.img_picto('', 'email').' '.$langs->trans("Email").''; - $tooltip .= '
'.$langs->trans('MailTopic').': '.$this->email_subject; + $tooltip .= '
'.$langs->trans('MailTopic').': '.dol_escape_htmltag($this->email_subject); $tooltip .= '
'.$langs->trans('MailFrom').': '.str_replace(array('<', '>'), array('&lt', '&gt'), $this->email_from); $tooltip .= '
'.$langs->trans('MailTo').': '.str_replace(array('<', '>'), array('&lt', '&gt'), $this->email_to); if (!empty($this->email_tocc)) { @@ -1697,7 +1697,7 @@ class ActionComm extends CommonObject if ($withpicto) { $result .= img_object(($notooltip ? '' : $langs->trans("ShowAction").': '.$label), ($overwritepicto ? $overwritepicto : 'action'), (($this->type_color && $overwritepicto) ? 'style="color: #'.$this->type_color.' !important;" ' : '').($notooltip ? 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'"' : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1); } - $result .= $labelshort; + $result .= dol_escape_htmltag($labelshort); $result .= $linkend; global $action; diff --git a/htdocs/comm/action/class/cactioncomm.class.php b/htdocs/comm/action/class/cactioncomm.class.php index 0942e1554a8..049b70737e8 100644 --- a/htdocs/comm/action/class/cactioncomm.class.php +++ b/htdocs/comm/action/class/cactioncomm.class.php @@ -204,7 +204,7 @@ class CActionComm if ($obj->module == 'order' && isModEnabled('commande') && empty($user->rights->commande->lire)) { $qualified = 1; } - if ($obj->module == 'propal' && isModEnabled("propal") && !empty($user->rights->propale->lire)) { + if ($obj->module == 'propal' && isModEnabled("propal") && !empty($user->rights->propal->lire)) { $qualified = 1; } if ($obj->module == 'invoice_supplier' && ((isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && !empty($user->rights->fournisseur->facture->lire)) || (isModEnabled('supplier_invoice') && !empty($user->rights->supplier_invoice->lire)))) { diff --git a/htdocs/comm/action/document.php b/htdocs/comm/action/document.php index 9a4a4e6a869..b02b2850346 100644 --- a/htdocs/comm/action/document.php +++ b/htdocs/comm/action/document.php @@ -89,7 +89,8 @@ if ($user->socid && $socid) { $result = restrictedArea($user, 'societe', $socid); } -$permissiontoadd = $user->rights->agenda->myactions->read; // Used by the include of actions_addupdatedelete.inc.php and actions_linkedfiles.inc.php +$usercancreate = $user->rights->agenda->allactions->create || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create); +$permissiontoadd = $usercancreate; /* @@ -162,17 +163,22 @@ if ($object->id > 0) { // Project if (isModEnabled('project')) { $langs->load("projects"); - //$morehtmlref.='
'.$langs->trans('Project') . ' '; - $morehtmlref .= $langs->trans('Project').': '; - if (!empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); - if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + //$morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify') { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - $morehtmlref .= ''; + if (!empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref .= $proj->getNomUrl(1); + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } + } } } $morehtmlref .= ''; diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index f46b0adc3cb..bfb5ca991b9 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1272,9 +1272,9 @@ if (count($listofextcals)) { $event->datef = $dateend + $usertime; if ($icalevent['SUMMARY']) { - $event->label = $icalevent['SUMMARY']; + $event->label = dol_string_nohtmltag($icalevent['SUMMARY']); } elseif ($icalevent['DESCRIPTION']) { - $event->label = dol_nl2br($icalevent['DESCRIPTION'], 1); + $event->label = dol_nl2br(dol_string_nohtmltag($icalevent['DESCRIPTION']), 1); } else { $event->label = $langs->trans("ExtSiteNoLabel"); } @@ -1985,7 +1985,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa // Show title $titletoshow = $daterange; - $titletoshow .= ($titletoshow ? ' ' : '').($event->label ? $event->label : $event->libelle); + $titletoshow .= ($titletoshow ? ' ' : '').dol_escape_htmltag($event->label ? $event->label : $event->libelle); if ($event->type_code != 'ICALEVENT') { $savlabel = $event->label ? $event->label : $event->libelle; diff --git a/htdocs/comm/action/info.php b/htdocs/comm/action/info.php index 807a8e6f412..749ca6a0c62 100644 --- a/htdocs/comm/action/info.php +++ b/htdocs/comm/action/info.php @@ -50,6 +50,8 @@ if ($user->socid && $socid) { $result = restrictedArea($user, 'societe', $socid); } +$usercancreate = $user->rights->agenda->allactions->create || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create); + /* * View @@ -89,17 +91,22 @@ $morehtmlref = '
'; // Project if (isModEnabled('project')) { $langs->load("projects"); - //$morehtmlref.='
'.$langs->trans('Project') . ' '; - $morehtmlref .= $langs->trans('Project').': '; - if (!empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); - if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + //$morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify') { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - $morehtmlref .= ''; + if (!empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref .= $proj->getNomUrl(1); + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } + } } } $morehtmlref .= '
'; diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index a5aca966530..4532e49b622 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -573,7 +573,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords++; }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); $nbtotalofrecords = $objforcount->nbtotalofrecords; diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index f6ae06b1f7f..4d59a75fb1b 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -1165,7 +1165,7 @@ if ($object->id > 0) { $late = ''; foreach ($contrat->lines as $line) { if ($contrat->statut == Contrat::STATUS_VALIDATED && $line->statut == ContratLigne::STATUS_OPEN) { - if (((!empty($line->date_fin_validite) ? $line->date_fin_validite : 0) + $conf->contrat->services->expires->warning_delay) < $now) { + if (((!empty($line->date_end) ? $line->date_end : 0) + $conf->contrat->services->expires->warning_delay) < $now) { $late = img_warning($langs->trans("Late")); } } diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 27f9b91a9d7..15f94043b1c 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -321,7 +321,7 @@ if (isModEnabled('supplier_proposal') && $user->rights->supplier_proposal->lire) /* - * Draft customer orders + * Draft sales orders */ if (isModEnabled('commande') && $user->rights->commande->lire) { diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 2372f24a929..72ec408524c 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -84,6 +84,8 @@ if (empty($user->rights->mailing->lire) || (empty($conf->global->EXTERNAL_USERS_ accessforbidden(); } +$upload_dir = $conf->mailing->dir_output."/".get_exdir($object->id, 2, 0, 1, $object, 'mailing'); + /* * Actions @@ -124,8 +126,6 @@ if (empty($reshook)) { setEventMessages($langs->trans("NotEnoughPermissions"), null, 'warnings'); $action = ''; } else { - $upload_dir = $conf->mailing->dir_output."/".get_exdir($object->id, 2, 0, 1, $object, 'mailing'); - if ($object->statut == 0) { dol_print_error('', 'ErrorMailIsNotValidated'); exit; @@ -318,7 +318,8 @@ if (empty($reshook)) { // Mail making $trackid = 'emailing-'.$obj->fk_mailing.'-'.$obj->rowid; - $mail = new CMailFile($newsubject, $sendto, $from, $newmessage, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $errorsto, $arr_css, $trackid, $moreinheader, 'emailing'); + $upload_dir_tmp = $upload_dir; + $mail = new CMailFile($newsubject, $sendto, $from, $newmessage, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $errorsto, $arr_css, $trackid, $moreinheader, 'emailing', '', $upload_dir_tmp); if ($mail->error) { $res = 0; @@ -478,7 +479,8 @@ if (empty($reshook)) { } $trackid = 'emailing-test'; - $mailfile = new CMailFile($tmpsujet, $object->sendto, $object->email_from, $tmpbody, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $object->email_errorsto, $arr_css, $trackid, '', 'emailing'); + $upload_dir_tmp = $upload_dir; + $mailfile = new CMailFile($tmpsujet, $object->sendto, $object->email_from, $tmpbody, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $object->email_errorsto, $arr_css, $trackid, '', 'emailing', '', $upload_dir_tmp); $result = $mailfile->sendfile(); if ($result) { @@ -729,8 +731,11 @@ if ($action == 'create') { print dol_get_fiche_head(); print '
'.$langs->trans("Type").''; print $object->getTypePicto(); print $langs->trans("Action".$object->type_code); print '
'.$langs->trans("PrivateEventMessage").''.yn(($object->code == 'TICKET_MSG_PRIVATE') ? 1 : 0, 3).'
'.$langs->trans("EventOnFullDay").''.yn($object->fulldayevent ? 1 : 0, 3).'
'; + print ''; + print ''; + print ''; // Other attributes @@ -742,7 +747,7 @@ if ($action == 'create') { } print '
'.$langs->trans("MailTitle").'
'.$langs->trans("MailFrom").'
'.$langs->trans("MailErrorsTo").'
'; - print '

'; + print '

'; print ''; print ''; @@ -887,16 +892,16 @@ if ($action == 'create') { // Description print ''; // From print ''; diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 1beefca8cf6..ed3cfce4163 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -544,7 +544,7 @@ if ($object->fetch($id) >= 0) { if ($allowaddtarget) { $morehtmlcenter = ''.$langs->trans("ToClearAllRecipientsClickHere").'id.'" class="button reposition smallpaddingimp">'.$langs->trans("TargetsReset").''; } - $morehtmlcenter .= '   id.'">'.$langs->trans("Download").''; + $morehtmlcenter .= '   id.'">'.img_picto('', 'download', 'class="pictofixedwidth"').$langs->trans("Download").''; $massactionbutton = ''; diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 76cc9b23f27..648fc6e18c4 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2297,39 +2297,28 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherProposals").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').''; + $morehtmlref .= '
'; if ($usercancreate) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ': '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2343,7 +2332,7 @@ if ($action == 'create') { print '
'; print '
'; - print '
'.$langs->trans("MailTopic").'
'; - print $form->editfieldkey("MailTitle", 'title', $object->title, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldkey("MailTitle", 'title', $object->title, $object, $user->hasRight('mailing', 'creer'), 'string'); print ''; - print $form->editfieldval("MailTitle", 'title', $object->title, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldval("MailTitle", 'title', $object->title, $object, $user->hasRight('mailing', 'creer'), 'string'); print '
'; - print $form->editfieldkey("MailFrom", 'email_from', $object->email_from, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldkey("MailFrom", 'email_from', $object->email_from, $object, $user->hasRight('mailing', 'creer') && $object->statut < 3, 'string'); print ''; - print $form->editfieldval("MailFrom", 'email_from', $object->email_from, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldval("MailFrom", 'email_from', $object->email_from, $object, $user->hasRight('mailing', 'creer') && $object->statut < 3, 'string'); $email = CMailFile::getValidAddress($object->email_from, 2); if ($email && !isValidEmail($email)) { $langs->load("errors"); @@ -910,9 +915,9 @@ if ($action == 'create') { // Errors to print '
'; - print $form->editfieldkey("MailErrorsTo", 'email_errorsto', $object->email_errorsto, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldkey("MailErrorsTo", 'email_errorsto', $object->email_errorsto, $object, $user->hasRight('mailing', 'creer') && $object->statut < 3, 'string'); print ''; - print $form->editfieldval("MailErrorsTo", 'email_errorsto', $object->email_errorsto, $object, $user->rights->mailing->creer && $object->statut < 3, 'string'); + print $form->editfieldval("MailErrorsTo", 'email_errorsto', $object->email_errorsto, $object, $user->hasRight('mailing', 'creer') && $object->statut < 3, 'string'); $email = CMailFile::getValidAddress($object->email_errorsto, 2); if ($email && !isValidEmail($email)) { $langs->load("errors"); @@ -977,11 +982,11 @@ if ($action == 'create') { if (GETPOST('cancel', 'alpha') || $confirm == 'no' || $action == '' || in_array($action, array('settodraft', 'valid', 'delete', 'sendall', 'clone', 'test'))) { print "\n\n
\n"; - if (($object->statut == 1) && ($user->rights->mailing->valider || $object->user_validation == $user->id)) { + if (($object->statut == 1) && ($user->hasRight('mailing', 'valider') || $object->user_validation == $user->id)) { print ''.$langs->trans("SetToDraft").''; } - if (($object->statut == 0 || $object->statut == 1 || $object->statut == 2) && $user->rights->mailing->creer) { + if (($object->statut == 0 || $object->statut == 1 || $object->statut == 2) && $user->hasRight('mailing', 'creer')) { if (isModEnabled('fckeditor') && !empty($conf->global->FCKEDITOR_ENABLE_MAILING)) { print ''.$langs->trans("EditWithEditor").''; } else { @@ -1011,7 +1016,7 @@ if ($action == 'create') { } } - if (($object->statut == 1 || $object->statut == 2) && $object->nbemail > 0 && $user->rights->mailing->valider) { + if (($object->statut == 1 || $object->statut == 2) && $object->nbemail > 0 && $user->hasRight('mailing', 'valider')) { if ($conf->global->MAILING_LIMIT_SENDBYWEB < 0) { print ''.$langs->trans("SendMailing").''; } elseif (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !$user->rights->mailing->mailing_advance->send) { @@ -1021,11 +1026,11 @@ if ($action == 'create') { } } - if ($user->rights->mailing->creer) { + if ($user->hasRight('mailing', 'creer')) { print ''.$langs->trans("ToClone").''; } - if (($object->statut == 2 || $object->statut == 3) && $user->rights->mailing->valider) { + if (($object->statut == 2 || $object->statut == 3) && $user->hasRight('mailing', 'valider')) { if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !$user->rights->mailing->mailing_advance->send) { print ''.$langs->trans("ResetMailing").''; } else { @@ -1033,7 +1038,7 @@ if ($action == 'create') { } } - if (($object->statut <= 1 && $user->rights->mailing->creer) || $user->rights->mailing->supprimer) { + if (($object->statut <= 1 && $user->hasRight('mailing', 'creer')) || $user->hasRight('mailing', 'supprimer')) { if ($object->statut > 0 && (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !$user->rights->mailing->mailing_advance->delete)) { print ''.$langs->trans("DeleteMailing").''; } else { @@ -1262,8 +1267,9 @@ if ($action == 'create') { $out .= '
'; } } else { - $out .= ''.$langs->trans("NoAttachedFiles").'
'; + //$out .= ''.$langs->trans("NoAttachedFiles").'
'; } + // Add link to add file $maxfilesizearray = getMaxFileSizeArray(); $maxmin = $maxfilesizearray['maxmin']; @@ -1272,7 +1278,7 @@ if ($action == 'create') { } $out .= ''; $out .= ' '; - $out .= ''; + $out .= ''; print $out; print '
'; + print '
'; // Link for thirdparty discounts if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { @@ -2403,7 +2392,7 @@ if ($action == 'create') { // Date end proposal print ''; print ''; } else { @@ -675,6 +675,28 @@ if ($result) { if ($user->rights->banque->consolidate) { print ''; } else { print ''; diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 5f223450ab7..1f4fc60397e 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -59,9 +59,7 @@ $search_number = GETPOST('search_number', 'alpha'); $search_status = GETPOST('search_status') ?GETPOST('search_status', 'alpha') : 'opened'; // 'all' or ''='opened' $optioncss = GETPOST('optioncss', 'alpha'); -if (isModEnabled('categorie')) { - $search_category_list = GETPOST("search_category_".Categorie::TYPE_ACCOUNT."_list", "array"); -} +$search_category_list = GETPOST("search_category_".Categorie::TYPE_ACCOUNT."_list", "array"); $socid = 0; // Security check @@ -162,6 +160,7 @@ if (empty($reshook)) { $search_label = ''; $search_number = ''; $search_status = ''; + $search_category_list = array(); } // Mass actions @@ -191,17 +190,12 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { } // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= " FROM ".MAIN_DB_PREFIX."bank_account as b"; if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (b.rowid = ef.fk_object)"; } - -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterJoinQuery(Categorie::TYPE_ACCOUNT, "b.rowid"); -} - $sql .= " WHERE b.entity IN (".getEntity('bank_account').")"; if ($search_status == 'opened') { $sql .= " AND clos = 0"; @@ -209,11 +203,6 @@ if ($search_status == 'opened') { if ($search_status == 'closed') { $sql .= " AND clos = 1"; } - -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterSelectQuery(Categorie::TYPE_ACCOUNT, "b.rowid", $search_category_list); -} - if ($search_ref != '') { $sql .= natural_search('b.ref', $search_ref); } @@ -223,11 +212,37 @@ if ($search_label != '') { if ($search_number != '') { $sql .= natural_search('b.number', $search_number); } +// Search for tag/category ($searchCategoryBankList is an array of ID) +$searchCategoryBankList = $search_category_list; +$searchCategoryBankOperator = 0; +if (!empty($searchCategoryBankList)) { + $searchCategoryBankSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryBankList as $searchCategoryBank) { + if (intval($searchCategoryBank) == -2) { + $searchCategoryBankSqlList[] = "NOT EXISTS (SELECT ck.fk_account FROM ".MAIN_DB_PREFIX."categorie_account as ck WHERE b.rowid = ck.fk_account)"; + } elseif (intval($searchCategoryBank) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryBank); + } + } + if ($listofcategoryid) { + $searchCategoryBankSqlList[] = " EXISTS (SELECT ck.fk_account FROM ".MAIN_DB_PREFIX."categorie_account as ck WHERE b.rowid = ck.fk_account AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryBankOperator == 1) { + if (!empty($searchCategoryBankSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryBankSqlList).")"; + } + } else { + if (!empty($searchCategoryBankSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryBankSqlList).")"; + } + } +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= $db->order($sortfield, $sortorder); @@ -293,7 +308,7 @@ if ($optioncss != '') { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // Add $param from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $param .= $hookmanager->resPrint; // List of mass actions available @@ -351,7 +366,7 @@ if (isModEnabled('categorie') && $user->rights->categorie->lire) { // Bank accounts $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -423,7 +438,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields); -$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['b.datec']['checked'])) { @@ -487,7 +502,7 @@ if (!empty($arrayfields['toreconcile']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); -$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['b.datec']['checked'])) { print_liste_field_titre($arrayfields['b.datec']['label'], $_SERVER["PHP_SELF"], "b.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); @@ -637,7 +652,7 @@ foreach ($accounts as $key => $type) { print ''.$langs->trans("ConciliationDisabled").''; } else { $result = $objecttmp->load_board($user, $objecttmp->id); - if ($result < 0) { + if (is_numeric($result) && $result < 0) { setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); } else { print ''; @@ -669,7 +684,7 @@ foreach ($accounts as $key => $type) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $objecttmp); // Note that $action and $objecttmpect may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $objecttmp, $action); // Note that $action and $objecttmpect may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['b.datec']['checked'])) { diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 0b044f8f806..79f338cef85 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -410,7 +410,7 @@ if ($action == 'create') { // Amount print ''; // Bank diff --git a/htdocs/compta/deplacement/card.php b/htdocs/compta/deplacement/card.php index f8e5f3ba03b..e7929a12697 100644 --- a/htdocs/compta/deplacement/card.php +++ b/htdocs/compta/deplacement/card.php @@ -492,11 +492,8 @@ if ($action == 'create') { } } - if ($user->rights->deplacement->supprimer) { - print ''.$langs->trans('Delete').''; - } else { - print ''.$langs->trans('Delete').''; - } + $permissiontodelete = $user->rights->deplacement->supprimer; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); print ''; } diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index 33b85f707e9..2a15c74c948 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -1677,10 +1677,8 @@ if ($action == 'create') { } } - //if ($object->statut == Facture::STATUS_DRAFT && $user->rights->facture->supprimer) - if ($user->rights->facture->supprimer) { - print ''; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $user->rights->facture->supprimer); print ''; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index b5e756ebb19..10cf7b624fc 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4363,39 +4363,28 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; + $morehtmlref .= '
'; if ($usercancreate) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -5667,7 +5656,7 @@ if ($action == 'create') { && $usercancreate && !$objectidnext && $object->is_last_in_cycle() - && $conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE + && getDolGlobalInt('INVOICE_USE_SITUATION_CREDIT_NOTE') ) { if ($usercanunvalidate) { print ''.$langs->trans("CreateCreditNote").''; @@ -5719,33 +5708,32 @@ if ($action == 'create') { $isErasable = $object->is_erasable(); $params = array( 'attr' => array( - 'title' => '', 'class' => 'classfortooltip' ) ); if ($usercandelete || ($usercancreate && $isErasable == 1)) { // isErasable = 1 means draft with temporary ref (draft can always be deleted with no need of permissions) $enableDelete = false; $deleteHref = '#'; + $htmltooltip = ''; if ($isErasable == -4) { - $params['attr']['title'] = $langs->trans('DisabledBecausePayments'); + $htmltooltip = $langs->trans('DisabledBecausePayments'); } elseif ($isErasable == -3) { - $params['attr']['title'] = $langs->trans('DisabledBecauseNotLastSituationInvoice'); + $htmltooltip = $langs->trans('DisabledBecauseNotLastSituationInvoice'); } elseif ($isErasable == -2) { - $params['attr']['title'] = $langs->trans('DisabledBecauseNotLastInvoice'); + $htmltooltip = $langs->trans('DisabledBecauseNotLastInvoice'); } elseif ($isErasable == -1) { - $params['attr']['title'] = $langs->trans('DisabledBecauseDispatchedInBookkeeping'); + $htmltooltip = $langs->trans('DisabledBecauseDispatchedInBookkeeping'); } elseif ($isErasable <= 0) { // Any other cases - $params['attr']['title'] = $langs->trans('DisabledBecauseNotErasable'); + $htmltooltip = $langs->trans('DisabledBecauseNotErasable'); } elseif ($objectidnext) { - $params['attr']['title'] = $langs->trans('DisabledBecauseReplacedInvoice'); + $htmltooltip = $langs->trans('DisabledBecauseReplacedInvoice'); } else { $deleteHref = $_SERVER["PHP_SELF"].'?facid='.$object->id.'&action=delete&token='.newToken(); $enableDelete = true; } - print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $deleteHref, '', $enableDelete, $params); + print dolGetButtonAction($htmltooltip, $langs->trans('Delete'), 'delete', $deleteHref, '', $enableDelete, $params); } else { - $params['attr']['title'] = $langs->trans('NotAllowed'); - print dolGetButtonAction($langs->trans('Delete'), '', 'delete', '#', '', false, $params); + print dolGetButtonAction($langs->trans('Delete'), $langs->trans('Delete'), 'delete', '#', '', false); } } print ''; diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php index 51c094d898e..4c1392e28eb 100644 --- a/htdocs/compta/facture/class/api_invoices.class.php +++ b/htdocs/compta/facture/class/api_invoices.class.php @@ -1452,7 +1452,6 @@ class Invoices extends DolibarrApi $multicurrency_amounts[$id] = $newvalue; } - // Creation of payment line $paymentobj = new Paiement($this->db); $paymentobj->datepaye = $datepaye; diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index da72411528d..532140481ab 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -1272,6 +1272,8 @@ class FactureRec extends CommonInvoice $tmparray = dol_getdate($now); $today = dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray['year']); // Today is last second of current day + $this->output = null; + dol_syslog("createRecurringInvoices restrictioninvoiceid=".$restrictioninvoiceid." forcevalidation=".$forcevalidation); $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'facture_rec'; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 67d5568e438..183ee457c32 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3611,7 +3611,7 @@ class Facture extends CommonInvoice global $mysoc, $conf, $langs; - dol_syslog(get_class($this)."::addline id=$this->id,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type, fk_unit=$fk_unit", LOG_DEBUG); + dol_syslog(get_class($this)."::addline id=$this->id, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product, remise_percent=$remise_percent, date_start=$date_start, date_end=$date_end, ventil=$ventil, info_bits=$info_bits, fk_remise_except=$fk_remise_except, price_base_type=$price_base_type, pu_ttc=$pu_ttc, type=$type, fk_unit=$fk_unit, desc=".dol_trunc($desc, 25), LOG_DEBUG); if ($this->statut == self::STATUS_DRAFT) { include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'; @@ -5526,12 +5526,20 @@ class Facture extends CommonInvoice $sendContent = make_substitutions($content, $substitutionarray, $outputlangs, 1); // Recipient - $to = ''; + $to = array(); $res = $tmpinvoice->fetch_thirdparty(); $recipient = $tmpinvoice->thirdparty; if ($res > 0) { - if (!empty($recipient->email)) { - $to = $recipient->email; + $tmparraycontact = $tmpinvoice->liste_contact(-1, 'external', 0, 'BILLING'); + if (is_array($tmparraycontact) && count($tmparraycontact) > 0) { + foreach ($tmparraycontact as $data_email) { + if (!empty($data_email['email'])) { + $to[] = $tmpinvoice->thirdparty->contact_get_property($data_email['id'], 'email'); + } + } + } + if (empty($to) && !empty($recipient->email)) { + $to[] = $recipient->email; } else { $errormesg = "Failed to send remind to thirdparty id=".$tmpinvoice->socid.". No email defined for user."; $error++; @@ -5548,9 +5556,11 @@ class Facture extends CommonInvoice $error++; } - if (!$error && $to) { + if (!$error && !empty($to)) { $this->db->begin(); + $to = implode(',', $to); + // Errors Recipient $errors_to = $conf->global->MAIN_MAIL_ERRORS_TO; @@ -5802,6 +5812,11 @@ class FactureLigne extends CommonInvoiceLine if ($result) { $objp = $this->db->fetch_object($result); + if (!$objp) { + $this->error = 'InvoiceLine with id '. $rowid .' not found sql='.$sql; + return 0; + } + $this->rowid = $objp->rowid; $this->id = $objp->rowid; $this->fk_facture = $objp->fk_facture; diff --git a/htdocs/compta/facture/class/facturestats.class.php b/htdocs/compta/facture/class/facturestats.class.php index 522fe9aa2e2..5637fd740a0 100644 --- a/htdocs/compta/facture/class/facturestats.class.php +++ b/htdocs/compta/facture/class/facturestats.class.php @@ -97,10 +97,19 @@ class FactureStats extends Stats if ($this->userid > 0) { $this->where .= ' AND f.fk_user_author = '.((int) $this->userid); } - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $this->where .= " AND f.type IN (0,1,2,5)"; - } else { - $this->where .= " AND f.type IN (0,1,2,3,5)"; + if ($mode == 'customer') { + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $this->where .= " AND f.type IN (0,1,2,5)"; + } else { + $this->where .= " AND f.type IN (0,1,2,3,5)"; + } + } + if ($mode == 'supplier') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $this->where .= " AND f.type IN (0,1,2,5)"; + } else { + $this->where .= " AND f.type IN (0,1,2,3,5)"; + } } if ($typentid) { @@ -109,9 +118,7 @@ class FactureStats extends Stats } if ($categid) { - $this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_societe as cs ON cs.fk_soc = f.fk_soc'; - $this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as c ON c.rowid = cs.fk_categorie'; - $this->where .= ' AND c.rowid = '.((int) $categid); + $this->where .= ' AND EXISTS (SELECT rowid FROM '.MAIN_DB_PREFIX.'categorie_societe as cats WHERE cats.fk_soc = f.fk_soc AND cats.fk_categorie = '.((int) $categid).')'; } } diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 62705ffd876..b367301911d 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -58,6 +58,8 @@ if ($id > 0 || !empty($ref)) { $result = restrictedArea($user, 'facture', $object->id); +$usercancreate = $user->hasRight("facture", "creer"); + /* * Add a new contact @@ -136,37 +138,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index ee3700fd67e..5cec55e2439 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -81,6 +81,8 @@ if ($user->socid) { } $result = restrictedArea($user, 'facture', $object->id, ''); +$usercancreate = $user->hasRight("facture", "creer"); + /* * Actions @@ -140,37 +142,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php index 0d70f095d31..1ea28b295c3 100644 --- a/htdocs/compta/facture/info.php +++ b/htdocs/compta/facture/info.php @@ -59,6 +59,8 @@ $isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); +$usercancreate = $user->hasRight("facture", "creer"); + /* * View @@ -96,37 +98,25 @@ $morehtmlref = '
'; $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty -$morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); +$morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 1d6dbd9f03b..b5b9687686b 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -73,15 +73,15 @@ $massaction = GETPOST('massaction', 'alpha'); $show_files = GETPOST('show_files', 'int'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); +$optioncss = GETPOST('optioncss', 'alpha'); $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'invoicelist'; if ($contextpage == 'poslist') { - $_GET['optioncss'] = 'print'; + $optioncss = 'print'; } $lineid = GETPOST('lineid', 'int'); $userid = GETPOST('userid', 'int'); -$search_product_category = GETPOST('search_product_category', 'int'); $search_ref = GETPOST('sf_ref') ?GETPOST('sf_ref', 'alpha') : GETPOST('search_ref', 'alpha'); $search_refcustomer = GETPOST('search_refcustomer', 'alpha'); $search_type = GETPOST('search_type', 'int'); @@ -89,6 +89,7 @@ $search_project_ref = GETPOST('search_project_ref', 'alpha'); $search_project = GETPOST('search_project', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); $search_company_alias = GETPOST('search_company_alias', 'alpha'); +$search_parent_name = trim(GETPOST('search_parent_name', 'alphanohtml')); $search_montant_ht = GETPOST('search_montant_ht', 'alpha'); $search_montant_vat = GETPOST('search_montant_vat', 'alpha'); $search_montant_localtax1 = GETPOST('search_montant_localtax1', 'alpha'); @@ -137,10 +138,10 @@ $search_datelimit_endyear = GETPOST('search_datelimit_endyear', 'int'); $search_datelimit_start = dol_mktime(0, 0, 0, $search_datelimit_startmonth, $search_datelimit_startday, $search_datelimit_startyear); $search_datelimit_end = dol_mktime(23, 59, 59, $search_datelimit_endmonth, $search_datelimit_endday, $search_datelimit_endyear); $search_categ_cus = GETPOST("search_categ_cus", 'int'); +$search_product_category = GETPOST('search_product_category', 'int'); $search_fac_rec_source_title = GETPOST("search_fac_rec_source_title", 'alpha'); $search_btn = GETPOST('button_search', 'alpha'); $search_remove_btn = GETPOST('button_removefilter', 'alpha'); -$optioncss = GETPOST('optioncss', 'alpha'); $option = GETPOST('search_option'); if ($option == 'late') { @@ -220,6 +221,7 @@ $arrayfields = array( 'p.title'=>array('label'=>"ProjectLabel", 'checked'=>0, 'enabled'=>(!isModEnabled('project') ? 0 : 1), 'position'=>41), 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1, 'position'=>50), 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>1, 'position'=>51), + 's2.nom'=>array('label'=>'ParentCompany', 'position'=>32, 'checked'=>0), 's.town'=>array('label'=>"Town", 'checked'=>-1, 'position'=>55), 's.zip'=>array('label'=>"Zip", 'checked'=>1, 'position'=>60), 'state.nom'=>array('label'=>"StateShort", 'checked'=>0, 'position'=>65), @@ -251,8 +253,8 @@ $arrayfields = array( 'total_mark_rate' => array('label' => 'MarkRate', 'checked' => 0, 'position' => 303, 'enabled' => (!isModEnabled('margin') || empty($user->rights->margins->liretous) || empty($conf->global->DISPLAY_MARK_RATES) ? 0 : 1)), 'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>502), - 'f.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES))), - 'f.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES))), + 'f.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))), + 'f.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))), 'f.fk_fac_rec_source'=>array('label'=>'GeneratedFromTemplate', 'checked'=>0, 'position'=>520, 'enabled'=>'1'), 'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), ); @@ -317,6 +319,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', $search_project = ''; $search_company = ''; $search_company_alias = ''; + $search_parent_name = ''; $search_montant_ht = ''; $search_montant_vat = ''; $search_montant_localtax1 = ''; @@ -336,7 +339,6 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', $search_town = ''; $search_zip = ""; $search_state = ""; - $search_type = ''; $search_country = ''; $search_type_thirdparty = ''; $search_date_startday = ''; @@ -553,6 +555,8 @@ $bankaccountstatic = new Account($db); $facturestatic = new Facture($db); $formcompany = new FormCompany($db); $companystatic = new Societe($db); +$companyparent = new Societe($db); +$company_url_list = array(); $sql = 'SELECT'; if ($sall || $search_product_category > 0 || $search_user > 0) { @@ -567,6 +571,8 @@ $sql .= ' f.paye as paye, f.fk_statut, f.close_code,'; $sql .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; $sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; $sql .= ' s.rowid as socid, s.nom as name, s.name_alias as alias, s.email, s.phone, s.fax, s.address, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; +$sql .= " s.parent as fk_parent,"; +$sql .= " s2.nom as name2,"; $sql .= ' typent.code as typent_code,'; $sql .= ' state.code_departement as state_code, state.nom as state_name,'; $sql .= ' country.code as country_code,'; @@ -581,9 +587,6 @@ if (!$sall) { $sql .= ', SUM(pf.amount) as dynamount_payed, SUM(pf.multicurrency_amount) as multicurrency_dynamount_payed'; } */ -if ($search_categ_cus && $search_categ_cus != -1) { - $sql .= ", cc.fk_categorie, cc.fk_soc"; -} // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { @@ -592,16 +595,13 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { } // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; +$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s2 ON s2.rowid = s.parent"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; -if (!empty($search_categ_cus) && $search_categ_cus != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cc ON s.rowid = cc.fk_soc"; // We'll need this table joined to the select in order to filter by categ -} - $sql .= ', '.MAIN_DB_PREFIX.'facture as f'; if ($sortfield == "f.datef") { $sql .= $db->hintindex('idx_facture_datef'); @@ -619,10 +619,6 @@ if (!$sall) { if ($sall || $search_product_category > 0) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facturedet as pd ON f.rowid=pd.fk_facture'; } -if ($search_product_category > 0) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=pd.fk_product'; -} - if (!empty($search_fac_rec_source_title)) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_rec as facrec ON f.fk_fac_rec_source=facrec.rowid'; } @@ -646,9 +642,6 @@ $sql .= ' AND f.entity IN ('.getEntity('invoice').')'; if (empty($user->rights->societe->client->voir) && !$socid) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } -if ($search_product_category > 0) { - $sql .= " AND cp.fk_categorie = ".((int) $search_product_category); -} if ($socid > 0) { $sql .= ' AND s.rowid = '.((int) $socid); } @@ -680,6 +673,9 @@ if ($search_company) { if ($search_company_alias) { $sql .= natural_search('s.name_alias', $search_company_alias); } +if ($search_parent_name) { + $sql .= natural_search('s2.nom', $search_parent_name); +} if ($search_town) { $sql .= natural_search('s.town', $search_town); } @@ -746,12 +742,6 @@ if ($search_multicurrency_montant_ttc != '') { if ($search_login) { $sql .= natural_search(array('u.login', 'u.firstname', 'u.lastname'), $search_login); } -if ($search_categ_cus > 0) { - $sql .= " AND cc.fk_categorie = ".((int) $search_categ_cus); -} -if ($search_categ_cus == -2) { - $sql .= " AND cc.fk_categorie IS NULL"; -} if ($search_status != '-1' && $search_status != '') { if (is_numeric($search_status) && $search_status >= 0) { if ($search_status == '0') { @@ -813,11 +803,63 @@ if ($search_user > 0) { if (!empty($search_fac_rec_source_title)) { $sql .= natural_search('facrec.titre', $search_fac_rec_source_title); } +// Search for tag/category ($searchCategoryProductList is an array of ID) +$searchCategoryProductList = $search_product_category ? array($search_product_category) : array(); +$searchCategoryProductOperator = 0; +if (!empty($searchCategoryProductList)) { + $searchCategoryProductSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryProductList as $searchCategoryProduct) { + if (intval($searchCategoryProduct) == -2) { + $searchCategoryProductSqlList[] = "NOT EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product)"; + } elseif (intval($searchCategoryProduct) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProduct); + } + } + if ($listofcategoryid) { + $searchCategoryProductSqlList[] = " EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryProductOperator == 1) { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + } + } else { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; + } + } +} +$searchCategoryCustomerList = $search_categ_cus ? array($search_categ_cus) : array();; +$searchCategoryCustomerOperator = 0; +// Search for tag/category ($searchCategoryCustomerList is an array of ID) +if (!empty($searchCategoryCustomerList)) { + $searchCategoryCustomerSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryCustomerList as $searchCategoryCustomer) { + if (intval($searchCategoryCustomer) == -2) { + $searchCategoryCustomerSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategoryCustomer) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryCustomer); + } + } + if ($listofcategoryid) { + $searchCategoryCustomerSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryCustomerOperator == 1) { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryCustomerSqlList).")"; + } + } else { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryCustomerSqlList).")"; + } + } +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; // We disable this. It create a bug when searching with sall and sorting on status. Also it create performance troubles. @@ -869,9 +911,9 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { */ /* The fast and low memory method to get and count full list converts the sql into a sql count */ if ($sall || $search_product_category > 0 || $search_user > 0) { - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(DISTINCT f.rowid) as nbtotalofrecords FROM', $sql); } else { - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(f.rowid) as nbtotalofrecords FROM', $sql); $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid/', '', $sqlforcount); } $sqlforcount = preg_replace('/GROUP BY.*$/', '', $sqlforcount); @@ -1008,10 +1050,13 @@ if ($resql) { $param .= '&search_type='.urlencode($search_type); } if ($search_company) { - $param .= '&search_societe='.urlencode($search_company); + $param .= '&search_company='.urlencode($search_company); } if ($search_company_alias) { - $param .= '&search_societe_alias='.urlencode($search_company_alias); + $param .= '&search_company_alias='.urlencode($search_company_alias); + } + if ($search_parent_name != '') { + $param .= '&search_parent_name='.urlencode($search_parent_name); } if ($search_town) { $param .= '&search_town='.urlencode($search_town); @@ -1022,6 +1067,9 @@ if ($resql) { if ($search_country) { $param .= "&search_country=".urlencode($search_country); } + if ($search_type_thirdparty != '') { + $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); + } if ($search_sale > 0) { $param .= '&search_sale='.urlencode($search_sale); } @@ -1099,7 +1147,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // Add $param from hooks $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $param .= $hookmanager->resPrint; $arrayofmassactions = array( @@ -1217,7 +1265,7 @@ if ($resql) { $moreforfilter .= '
'; } $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -1337,6 +1385,12 @@ if ($resql) { if (!empty($arrayfields['s.name_alias']['checked'])) { print ''; } + // Parent company + if (!empty($arrayfields['s2.nom']['checked'])) { + print ''; + } // Town if (!empty($arrayfields['s.town']['checked'])) { print ''; @@ -1366,13 +1420,13 @@ if ($resql) { // Payment mode if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { print ''; } // Payment terms if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { print ''; } // Module source @@ -1498,7 +1552,7 @@ if ($resql) { // Fields from hook $parameters = array('arrayfields'=>$arrayfields); - $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['f.datec']['checked'])) { @@ -1586,6 +1640,9 @@ if ($resql) { if (!empty($arrayfields['s.name_alias']['checked'])) { print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER['PHP_SELF'], 's.name_alias', '', $param, '', $sortfield, $sortorder); } + if (!empty($arrayfields['s2.nom']['checked'])) { + print_liste_field_titre($arrayfields['s2.nom']['label'], $_SERVER['PHP_SELF'], 's2.nom', '', $param, '', $sortfield, $sortorder); + } if (!empty($arrayfields['s.town']['checked'])) { print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); } @@ -1680,7 +1737,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); - $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['f.datec']['checked'])) { print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER["PHP_SELF"], "f.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); @@ -1715,6 +1772,7 @@ if ($resql) { if ($num > 0) { $i = 0; + $typenArray = $formcompany->typent_array(1); $totalarray = array(); $totalarray['nbfield'] = 0; $totalarray['val'] = array(); @@ -1735,7 +1793,6 @@ if ($resql) { $total_margin = 0; $savnbfield = $totalarray['nbfield']; - $totalarray = array(); $totalarray['nbfield'] = 0; $imaxinloop = ($limit ? min($num, $limit) : $num); while ($i < $imaxinloop) { @@ -1989,6 +2046,26 @@ if ($resql) { $totalarray['nbfield']++; } } + // Parent company + if (!empty($arrayfields['s2.nom']['checked'])) { + print '"; + if (!$i) { + $totalarray['nbfield']++; + } + } // Town if (!empty($arrayfields['s.town']['checked'])) { print ''; if (!$i) { $totalarray['nbfield']++; @@ -2061,8 +2139,9 @@ if ($resql) { // Payment terms if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print ''; if (!$i) { $totalarray['nbfield']++; @@ -2358,7 +2437,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['f.datec']['checked'])) { @@ -2471,7 +2550,7 @@ if ($resql) { $db->free($resql); $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'; - print ''; print ''; print ''; } // Town @@ -1621,7 +1621,7 @@ if ($resql) { // Fields from hook $parameters = array('arrayfields'=>$arrayfields); - $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -1727,7 +1727,7 @@ if ($resql) { print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], 's.name_alias', '', $param, '', $sortfield, $sortorder); } if (!empty($arrayfields['s2.nom']['checked'])) { - print_liste_field_titre($arrayfields['s2.nom']['label'], $_SERVER['PHP_SELF'], 's2.nom', '', $param, '', $sortfield, $sortorder, 'center '); + print_liste_field_titre($arrayfields['s2.nom']['label'], $_SERVER['PHP_SELF'], 's2.nom', '', $param, '', $sortfield, $sortorder); } if (!empty($arrayfields['s.town']['checked'])) { print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); @@ -1826,7 +1826,7 @@ if ($resql) { 'sortorder' => $sortorder, 'totalarray' => &$totalarray, ); - $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['c.datec']['checked'])) { print_liste_field_titre($arrayfields['c.datec']['label'], $_SERVER["PHP_SELF"], "c.date_creation", "", $param, '', $sortfield, $sortorder, 'center nowrap '); @@ -2032,7 +2032,7 @@ if ($resql) { // Parent company if (!empty($arrayfields['s2.nom']['checked'])) { - print '
'; + print ''; if ($action != 'editecheance' && $usercancreate && $caneditfield) { @@ -2933,10 +2922,7 @@ if ($action == 'create') { } // Delete - if ($usercandelete) { - print ''.$langs->trans('Delete').''; - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $usercandelete); } } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index f9fd5d8ac7e..d9b7147fefa 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1102,6 +1102,7 @@ class Propal extends CommonObject $sql .= ", fk_mode_reglement"; $sql .= ", fk_account"; $sql .= ", ref_client"; + $sql .= ", ref_ext"; $sql .= ", date_livraison"; $sql .= ", fk_shipping_method"; $sql .= ", fk_warehouse"; @@ -1136,6 +1137,7 @@ class Propal extends CommonObject $sql .= ", ".($this->mode_reglement_id > 0 ? ((int) $this->mode_reglement_id) : 'NULL'); $sql .= ", ".($this->fk_account > 0 ? ((int) $this->fk_account) : 'NULL'); $sql .= ", '".$this->db->escape($this->ref_client)."'"; + $sql .= ", '".$this->db->escape($this->ref_ext)."'"; $sql .= ", ".(empty($delivery_date) ? "NULL" : "'".$this->db->idate($delivery_date)."'"); $sql .= ", ".($this->shipping_method_id > 0 ? $this->shipping_method_id : 'NULL'); $sql .= ", ".($this->warehouse_id > 0 ? $this->warehouse_id : 'NULL'); @@ -1520,7 +1522,7 @@ class Propal extends CommonObject $sql .= ", p.datep as dp"; $sql .= ", p.fin_validite as dfv"; $sql .= ", p.date_livraison as delivery_date"; - $sql .= ", p.model_pdf, p.last_main_doc, p.ref_client, p.extraparams"; + $sql .= ", p.model_pdf, p.last_main_doc, p.ref_client, ref_ext, p.extraparams"; $sql .= ", p.note_private, p.note_public"; $sql .= ", p.fk_projet as fk_project, p.fk_statut"; $sql .= ", p.fk_user_author, p.fk_user_valid, p.fk_user_cloture"; @@ -1572,6 +1574,7 @@ class Propal extends CommonObject $this->ref = $obj->ref; $this->ref_client = $obj->ref_client; + $this->ref_ext = $obj->ref_ext; $this->remise = $obj->remise; $this->remise_percent = $obj->remise_percent; $this->remise_absolue = $obj->remise_absolue; @@ -2107,11 +2110,11 @@ class Propal extends CommonObject * Define end validity date * * @param User $user Object user that modify - * @param int $date_fin_validite End of validity date + * @param int $date_end_validity End of validity date * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int <0 if KO, >0 if OK */ - public function set_echeance($user, $date_fin_validite, $notrigger = 0) + public function set_echeance($user, $date_end_validity, $notrigger = 0) { // phpcs:enable if (!empty($user->rights->propal->creer)) { @@ -2119,8 +2122,8 @@ class Propal extends CommonObject $this->db->begin(); - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_fin_validite != '' ? "'".$this->db->idate($date_fin_validite)."'" : 'null'); - $sql .= " WHERE rowid = ".((int) $this->id)." AND fk_statut = ".self::STATUS_DRAFT; + $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_end_validity != '' ? "'".$this->db->idate($date_end_validity)."'" : 'null'); + $sql .= " WHERE rowid = ".((int) $this->id)." AND fk_statut = ".((int) self::STATUS_DRAFT); dol_syslog(__METHOD__, LOG_DEBUG); $resql = $this->db->query($sql); @@ -2132,7 +2135,7 @@ class Propal extends CommonObject if (!$error) { $this->oldcopy = clone $this; - $this->fin_validite = $date_fin_validite; + $this->fin_validite = $date_end_validity; } if (!$notrigger && empty($error)) { diff --git a/htdocs/comm/propal/class/propalestats.class.php b/htdocs/comm/propal/class/propalestats.class.php index 1e688457623..81d49bb87ad 100644 --- a/htdocs/comm/propal/class/propalestats.class.php +++ b/htdocs/comm/propal/class/propalestats.class.php @@ -109,9 +109,7 @@ class PropaleStats extends Stats } if ($categid) { - $this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_societe as cs ON cs.fk_soc = p.fk_soc'; - $this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as c ON c.rowid = cs.fk_categorie'; - $this->where .= ' AND c.rowid = '.((int) $categid); + $this->where .= ' AND EXISTS (SELECT rowid FROM '.MAIN_DB_PREFIX.'categorie_societe as cats WHERE cats.fk_soc = p.fk_soc AND cats.fk_categorie = '.((int) $categid).')'; } } diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index 97fceb99f9e..42f3f34f8d4 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -69,12 +69,14 @@ if (!empty($user->socid)) { } restrictedArea($user, 'propal', $object->id); +$usercancreate = $user->hasRight("propal", "creer"); + /* * Add a new contact */ -if ($action == 'addcontact' && $user->rights->propale->creer) { +if ($action == 'addcontact' && $user->rights->propal->creer) { if ($object->id > 0) { $contactid = (GETPOST('userid', 'int') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); @@ -92,12 +94,12 @@ if ($action == 'addcontact' && $user->rights->propale->creer) { setEventMessages($object->error, $object->errors, 'errors'); } } -} elseif ($action == 'swapstatut' && $user->rights->propale->creer) { +} elseif ($action == 'swapstatut' && $user->rights->propal->creer) { // Toggle the status of a contact if ($object->id > 0) { $result = $object->swapContactStatus(GETPOST('ligne', 'int')); } -} elseif ($action == 'deletecontact' && $user->rights->propale->creer) { +} elseif ($action == 'deletecontact' && $user->rights->propal->creer) { // Deletes a contact $result = $object->delete_contact($lineid); @@ -137,37 +139,25 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->propal->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index f58ed518517..f1d1d7ef644 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -81,7 +81,7 @@ if (!$sortfield) { $object = new Propal($db); $object->fetch($id, $ref); -$permissiontoadd = $user->rights->propale->creer; +$permissiontoadd = $user->rights->propal->creer; // Security check if (!empty($user->socid)) { @@ -90,6 +90,8 @@ if (!empty($user->socid)) { } restrictedArea($user, 'propal', $object->id); +$usercancreate = $user->hasRight("propal", "creer"); + /* * Actions @@ -135,37 +137,25 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->propal->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php index edb8e48405e..4a6d9ec63ed 100644 --- a/htdocs/comm/propal/index.php +++ b/htdocs/comm/propal/index.php @@ -227,7 +227,7 @@ if ($resql) { /* * Open (validated) proposals */ -if (isModEnabled("propal") && $user->rights->propale->lire) { +if (isModEnabled("propal") && $user->rights->propal->lire) { $sql = "SELECT s.nom as socname, s.rowid as socid, s.canvas, s.client, s.email, s.code_compta"; $sql .= ", p.rowid as propalid, p.entity, p.total_ttc, p.total_ht, p.ref, p.fk_statut, p.datep as dp, p.fin_validite as dfv"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php index 933791bbec2..986601a91bc 100644 --- a/htdocs/comm/propal/info.php +++ b/htdocs/comm/propal/info.php @@ -53,6 +53,8 @@ if (!empty($user->socid)) { } restrictedArea($user, 'propal', $object->id); +$usercancreate = $user->hasRight("propal", "creer"); + /* * View @@ -82,37 +84,25 @@ $morehtmlref = '
'; $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty -$morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); +$morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->propal->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index a5d85633bee..0d560d741ce 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -244,8 +244,8 @@ $arrayfields = array( 'p.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), 'p.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), 'p.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), - 'p.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES))), - 'p.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES))), + 'p.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))), + 'p.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))), 'p.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), ); @@ -578,7 +578,7 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { } // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql = preg_replace('/, $/', '', $sql); $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; @@ -755,12 +755,12 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; // Add HAVING from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= empty($hookmanager->resPrint) ? "" : " HAVING 1=1 ".$hookmanager->resPrint; $sql .= $db->order($sortfield, $sortorder); @@ -987,7 +987,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // Add $param from hooks $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $param .= $hookmanager->resPrint; // List of mass actions available @@ -1104,7 +1104,7 @@ if ($resql) { $moreforfilter .= '
'; } $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -1362,7 +1362,7 @@ if ($resql) { // Fields from hook $parameters = array('arrayfields'=>$arrayfields); - $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['p.datec']['checked'])) { @@ -1543,7 +1543,7 @@ if ($resql) { 'totalarray' => &$totalarray, ); - $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['p.datec']['checked'])) { print_liste_field_titre($arrayfields['p.datec']['label'], $_SERVER["PHP_SELF"], "p.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); @@ -2140,7 +2140,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['p.datec']['checked'])) { @@ -2232,7 +2232,7 @@ if ($resql) { $db->free($resql); $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'; print $langs->trans('DateEndPropal'); print '
'."\n"; diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index d2e453eac9e..fe4895ad2f8 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -59,12 +59,14 @@ $hookmanager->initHooks(array('propalnote')); restrictedArea($user, 'propal', $object->id, 'propal'); +$usercancreate = $user->hasRight("propal", "creer"); + /* * Actions */ -$permissionnote = $user->rights->propale->creer; // Used by the include of actions_setnotes.inc.php +$permissionnote = $user->rights->propal->creer; // Used by the include of actions_setnotes.inc.php $reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -107,37 +109,25 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->propal->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php index af5247fb10f..9e2e485c92a 100644 --- a/htdocs/comm/propal/stats/index.php +++ b/htdocs/comm/propal/stats/index.php @@ -60,7 +60,7 @@ $endyear = $year; // Load translation files required by the page $langs->loadLangs(array('orders', 'companies', 'other', 'suppliers', 'supplier_proposal')); -if ($mode == 'customer' && !$user->rights->propale->lire) { +if ($mode == 'customer' && !$user->rights->propal->lire) { accessforbidden(); } if ($mode == 'supplier' && !$user->rights->supplier_proposal->lire) { diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index 613f06a6feb..37c0f8d5e58 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -62,7 +62,7 @@ foreach ($linkedObjectBlock as $key => $objectlink) { print '
'.$objectlink->ref_client.''.dol_print_date($objectlink->date, 'day').''; - if ($user->rights->propale->lire) { + if ($user->rights->propal->lire) { $total = $total + $objectlink->total_ht; echo price($objectlink->total_ht); } diff --git a/htdocs/comm/prospect/index.php b/htdocs/comm/prospect/index.php index 83c30743c77..19bde7072ad 100644 --- a/htdocs/comm/prospect/index.php +++ b/htdocs/comm/prospect/index.php @@ -119,7 +119,7 @@ if ($resql) { /* * Liste des propal brouillons */ -if (isModEnabled("propal") && $user->rights->propale->lire) { +if (isModEnabled("propal") && $user->rights->propal->lire) { $sql = "SELECT p.rowid, p.ref, p.price, s.nom as sname"; $sql .= " FROM ".MAIN_DB_PREFIX."propal as p"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; @@ -177,7 +177,7 @@ if (isModEnabled('agenda')) { /* * Dernieres propales ouvertes */ -if (isModEnabled("propal") && $user->rights->propale->lire) { +if (isModEnabled("propal") && $user->rights->propal->lire) { $sql = "SELECT s.nom as name, s.rowid as socid, s.client, s.canvas,"; $sql .= " p.rowid as propalid, p.total_ttc, p.ref, p.datep as dp, c.label as statut, c.id as statutid"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index b28af96527e..fe8c630fc10 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -53,6 +53,9 @@ if ($user->socid > 0) { } $result = restrictedArea($user, 'societe', $id, '&societe', '', 'fk_soc', 'rowid', 0); +$permissiontocreate = ($user->rights->societe->creer || $user->rights->facture->creer); + + /* * Actions @@ -63,7 +66,7 @@ if (GETPOST('cancel', 'alpha') && !empty($backtopage)) { exit; } -if ($action == 'confirm_split' && GETPOST("confirm", "alpha") == 'yes' && ($user->rights->societe->creer || $user->rights->facture->creer)) { +if ($action == 'confirm_split' && GETPOST("confirm", "alpha") == 'yes' && $permissiontocreate) { //if ($user->rights->societe->creer) //if ($user->rights->facture->creer) @@ -154,16 +157,17 @@ if ($action == 'confirm_split' && GETPOST("confirm", "alpha") == 'yes' && ($user } } -if ($action == 'setremise' && ($user->rights->societe->creer || $user->rights->facture->creer)) { +if ($action == 'setremise' && $permissiontocreate) { //if ($user->rights->societe->creer) //if ($user->rights->facture->creer) - $amount_ht = price2num(GETPOST('amount_ht', 'alpha')); + $amount = price2num(GETPOST('amount', 'alpha'), '', 2); $desc = GETPOST('desc', 'alpha'); $tva_tx = GETPOST('tva_tx', 'alpha'); $discount_type = GETPOSTISSET('discount_type') ? GETPOST('discount_type', 'alpha') : 0; + $price_base_type = GETPOST('price_base_type', 'alpha'); - if ($amount_ht > 0) { + if ($amount > 0) { $error = 0; if (empty($desc)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ReasonDiscount")), null, 'errors'); @@ -173,14 +177,14 @@ if ($action == 'setremise' && ($user->rights->societe->creer || $user->rights->f if (!$error) { $soc = new Societe($db); $soc->fetch($id); - $discountid = $soc->set_remise_except($amount_ht, $user, $desc, $tva_tx, $discount_type); + $discountid = $soc->set_remise_except($amount, $user, $desc, $tva_tx, $discount_type, $price_base_type); if ($discountid > 0) { if (!empty($backtopage)) { - header("Location: ".$backtopage.'&discountid='.$discountid); + header("Location: ".$backtopage.'&discountid='.((int) $discountid)); exit; } else { - header("Location: remx.php?id=".$id); + header("Location: remx.php?id=".((int) $id)); exit; } } else { @@ -193,7 +197,7 @@ if ($action == 'setremise' && ($user->rights->societe->creer || $user->rights->f } } -if (GETPOST('action', 'aZ09') == 'confirm_remove' && GETPOST("confirm") == 'yes' && ($user->rights->societe->creer || $user->rights->facture->creer)) { +if (GETPOST('action', 'aZ09') == 'confirm_remove' && GETPOST("confirm") == 'yes' && $permissiontocreate) { //if ($user->rights->societe->creer) //if ($user->rights->facture->creer) @@ -231,9 +235,8 @@ if ($socid > 0) { $isCustomer = $object->client == 1 || $object->client == 3; $isSupplier = $object->fournisseur == 1; - /* - * Display tabs - */ + // Display tabs + $head = societe_prepare_head($object); print '
'; @@ -262,6 +265,7 @@ if ($socid > 0) { } + print '
'; print ''; if ($isCustomer) { // Calcul avoirs client en cours @@ -324,9 +328,10 @@ if ($socid > 0) { } print '
'; - print '
'; + print ''; // close fichecenter + print dol_get_fiche_end(); @@ -346,6 +351,8 @@ if ($socid > 0) { print dol_get_fiche_head(); + + print '
'; print ''; if ($isCustomer && $isSupplier) { print ''; @@ -353,9 +360,19 @@ if ($socid > 0) { print '   '; print ''; } - print ''; - print ''; + print ''; + + // Price base (HT / TTC) + print ''; + print ''; + + // VAT print ''; print ''; print "
'.$langs->trans('DiscountType').'
'.$langs->trans("AmountHT").''; + + // Amount + print '
'.$langs->trans("Amount").''; print ' '.$langs->trans("Currency".$conf->currency).'
'.$langs->trans("PriceBase").''; + print $form->selectPriceBaseType(GETPOST("price_base_type"), "price_base_type"); + print '
'.$langs->trans("VAT").''; print $form->load_tva('tva_tx', GETPOSTISSET('tva_tx') ? GETPOST('tva_tx', 'alpha') : 0, $mysoc, $object, 0, 0, '', 0, 1); @@ -364,6 +381,7 @@ if ($socid > 0) { print '
"; + print '
'; print dol_get_fiche_end(); } diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 9428f76dd8e..786fb1a2ad2 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -32,7 +32,7 @@ /** * \file htdocs/commande/card.php * \ingroup commande - * \brief Page to show customer order + * \brief Page to show sales order */ // Load Dolibarr environment @@ -2326,39 +2326,28 @@ if ($action == 'create' && $usercancreate) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$soc->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$soc->getNomUrl(1, 'customer'); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherOrders").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; + $morehtmlref .= '
'; if ($usercancreate) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1, 0, 'maxwidth500'); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2899,7 +2888,7 @@ if ($action == 'create' && $usercancreate) { // Delete order if ($usercandelete) { if ($numshipping == 0) { - print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&id='.$object->id, ''); + print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&id='.$object->id, ''); } else { print dolGetButtonAction($langs->trans('ShippingExist'), $langs->trans('Delete'), 'default', $_SERVER['PHP_SELF']. '#', '', false); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index aa7a7f11a55..d3fbe41312c 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3395,7 +3395,7 @@ class Commande extends CommonOrder } /** - * Delete the customer order + * Delete the sales order * * @param User $user User object * @param int $notrigger 1=Does not execute triggers, 0= execute triggers @@ -4062,7 +4062,7 @@ class Commande extends CommonOrder } /** - * Is the customer order delayed? + * Is the sales order delayed? * * @return bool true if late, false if not */ @@ -4200,6 +4200,12 @@ class OrderLine extends CommonOrderLine $result = $this->db->query($sql); if ($result) { $objp = $this->db->fetch_object($result); + + if (!$objp) { + $this->error = 'OrderLine with id '. $rowid .' not found sql='.$sql; + return 0; + } + $this->rowid = $objp->rowid; $this->id = $objp->rowid; $this->fk_commande = $objp->fk_commande; diff --git a/htdocs/commande/class/commandestats.class.php b/htdocs/commande/class/commandestats.class.php index d02d56175ff..5f13cf780f4 100644 --- a/htdocs/commande/class/commandestats.class.php +++ b/htdocs/commande/class/commandestats.class.php @@ -109,9 +109,7 @@ class CommandeStats extends Stats } if ($categid) { - $this->join .= ' LEFT JOIN '.$this->categ_link.' as cats ON cats.fk_soc = c.fk_soc'; - $this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as cat ON cat.rowid = cats.fk_categorie'; - $this->where .= ' AND cat.rowid = '.((int) $categid); + $this->where .= ' AND EXISTS (SELECT rowid FROM '.$this->categ_link.' as cats WHERE cats.fk_soc = c.fk_soc AND cats.fk_categorie = '.((int) $categid).')'; } } diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index c353287962e..04c16e68aa0 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -47,8 +47,11 @@ if ($user->socid) { } $result = restrictedArea($user, 'commande', $id, ''); +$usercancreate = $user->hasRight("commande", "creer"); + $object = new Commande($db); + /* * Ajout d'un nouveau contact */ @@ -130,37 +133,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->commande->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index c341ae59b4e..0c35c3489f7 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -73,7 +73,8 @@ if (!$sortfield) { $object = new Commande($db); -$permissiontoadd = $user->rights->commande->creer; +$usercancreate = $user->hasRight("commande", "creer"); +$permissiontoadd = $usercancreate; // Security check if ($user->socid) { @@ -129,37 +130,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->commande->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index 9ee103911f7..9b653b90e65 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -22,7 +22,7 @@ /** * \file htdocs/commande/index.php * \ingroup commande - * \brief Home page of customer order module + * \brief Home page of sales order module */ diff --git a/htdocs/commande/info.php b/htdocs/commande/info.php index 4442af6a679..0acc5b793aa 100644 --- a/htdocs/commande/info.php +++ b/htdocs/commande/info.php @@ -50,6 +50,8 @@ if ($user->socid) { } $result = restrictedArea($user, 'commande', $comid, ''); +$usercancreate = $user->hasRight("commande", "creer"); + $object = new Commande($db); if (!$object->fetch($id, $ref) > 0) { dol_print_error($db); @@ -82,37 +84,25 @@ $morehtmlref = '
'; $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty -$morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); +$morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->commande->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 208889ba1a2..455420ce90a 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -208,8 +208,8 @@ $arrayfields = array( 'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>120), 'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>125), 'c.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>130), - 'c.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES)), 'position'=>135), - 'c.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES)), 'position'=>140), + 'c.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES')), 'position'=>135), + 'c.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'position'=>140), 'shippable'=>array('label'=>"Shippable", 'checked'=>1,'enabled'=>(isModEnabled("expedition")), 'position'=>990), 'c.facture'=>array('label'=>"Billed", 'checked'=>1, 'enabled'=>(empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)), 'position'=>995), 'c.import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>999), @@ -823,7 +823,7 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s2 ON s2.rowid = s.parent"; @@ -857,7 +857,7 @@ if ($search_user > 0) { // Add table from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= ' WHERE c.fk_soc = s.rowid'; @@ -1012,12 +1012,12 @@ if ($search_fk_input_reason > 0) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; // Add HAVING from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= empty($hookmanager->resPrint) ? "" : " HAVING 1=1 ".$hookmanager->resPrint; $sql .= $db->order($sortfield, $sortorder); @@ -1224,7 +1224,7 @@ if ($resql) { // Add $param from hooks $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $param .= $hookmanager->resPrint; // List of mass actions available @@ -1393,7 +1393,7 @@ if ($resql) { $moreforfilter .= '
'; } $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -1466,8 +1466,8 @@ if ($resql) { } // Parent company if (!empty($arrayfields['s2.nom']['checked'])) { - print '
'; - print ''; + print ''; + print ''; print ''; + print ''; if ($obj->fk_parent > 0) { if (!isset($company_url_list[$obj->fk_parent])) { $companyparent = new Societe($db); @@ -2372,7 +2372,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -2446,7 +2446,7 @@ if ($resql) { // Get local and virtual stock and store it into cache if (empty($productstat_cache[$generic_commande->lines[$lig]->fk_product])) { - $generic_product->load_stock('nobatch'); // ->load_virtual_stock() is already included into load_stock() + $generic_product->load_stock('nobatch,warehouseopen'); // ->load_virtual_stock() is already included into load_stock() $productstat_cache[$generic_commande->lines[$lig]->fk_product]['stock_reel'] = $generic_product->stock_reel; $productstat_cachevirtual[$generic_commande->lines[$lig]->fk_product]['stock_reel'] = $generic_product->stock_theorique; } else { @@ -2595,7 +2595,7 @@ if ($resql) { $db->free($resql); $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'."\n"; diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 452e58076c7..e84dd5ad6e1 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -52,6 +52,10 @@ $hookmanager->initHooks(array('ordernote')); $result = restrictedArea($user, 'commande', $id, ''); +$usercancreate = $user->hasRight("commande", "creer"); + +$permissionnote = $user->rights->commande->creer; // Used by the include of actions_setnotes.inc.php + $object = new Commande($db); if (!$object->fetch($id, $ref) > 0) { @@ -59,8 +63,6 @@ if (!$object->fetch($id, $ref) > 0) { exit; } -$permissionnote = $user->rights->commande->creer; // Used by the include of actions_setnotes.inc.php - /* * Actions @@ -101,37 +103,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->commande->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/compta/bank/class/api_bankaccounts.class.php b/htdocs/compta/bank/class/api_bankaccounts.class.php index 8e38d1ffe78..c9886a176f0 100644 --- a/htdocs/compta/bank/class/api_bankaccounts.class.php +++ b/htdocs/compta/bank/class/api_bankaccounts.class.php @@ -471,7 +471,7 @@ class BankAccounts extends DolibarrApi * Add a line to an account * * @param int $id ID of account - * @param int $date Payment date (timestamp) {@from body} {@type timestamp} + * @param string $date Payment date (timestamp) {@from body} {@type timestamp} * @param string $type Payment mode (TYP,VIR,PRE,LIQ,VAD,CB,CHQ...) {@from body} * @param string $label Label {@from body} * @param float $amount Amount (may be 0) {@from body} @@ -480,7 +480,7 @@ class BankAccounts extends DolibarrApi * @param string $cheque_writer Name of cheque writer {@from body} * @param string $cheque_bank Bank of cheque writer {@from body} * @param string $accountancycode Accountancy code {@from body} - * @param int $datev Payment date value (timestamp) {@from body} {@type timestamp} + * @param string $datev Payment date value (timestamp) {@from body} {@type timestamp} * @param string $num_releve Bank statement numero {@from body} * @return int ID of line * diff --git a/htdocs/compta/bank/line.php b/htdocs/compta/bank/line.php index 49edf3c3a1a..cb10a7310c6 100644 --- a/htdocs/compta/bank/line.php +++ b/htdocs/compta/bank/line.php @@ -657,13 +657,13 @@ if ($result) { if ($user->rights->banque->consolidate) { print '
'; if ($objp->rappro) { - print 'rappro ? ' disabled' : '').'>'; - print ''; + print 'rappro ? ' disabled' : '').'>'; + print ''; } else { - print 'rappro ? ' disabled' : '').'>'; + print 'rappro ? ' disabled' : '').'>'; } if ($objp->num_releve) { - print '   ('.$langs->trans("AccountStatement").' '.$objp->num_releve.')'; + print '   ('.$langs->trans("AccountStatement").' '.$objp->num_releve.')'; } print ''; print 'rappro ? ' checked="checked"' : '')).'">'; + + print ' + + '; + print ''.yn($objp->rappro).'
'; print $form->editfieldkey('Amount', 'amount', '', $object, 0, 'string', '', 1).''; - print ''; + print ''; print '
'; + print ''; + print ''; - print $form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 1, 1, 10, 1, '', 1); + print $form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 1, 1, 0, 1, 'minwidth100 maxwidth100', 1); print ''; - print $form->getSelectConditionsPaiements($search_paymentterms, 'search_paymentterms', -1, 1, 1); + print $form->getSelectConditionsPaiements($search_paymentterms, 'search_paymentterms', -1, 1, 1, 'minwidth100 maxwidth100'); print ''; + if ($obj->fk_parent > 0) { + if (!isset($company_url_list[$obj->fk_parent])) { + $companyparent = new Societe($db); + $res = $companyparent->fetch($obj->fk_parent); + if ($res > 0) { + $company_url_list[$obj->fk_parent] = $companyparent->getNomUrl(1); + } + } + if (isset($company_url_list[$obj->fk_parent])) { + print $company_url_list[$obj->fk_parent]; + } + } + print "'; @@ -2051,8 +2128,9 @@ if ($resql) { // Payment mode if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print ''; - $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1); + $s = $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1, 0, '', 1); + print ''; + print $s; print ''; - $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none'); + $s = $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none', 0, '', -1, -1, 1); + print ''; + print $s; print '
'."\n"; diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index 451ccbab8c4..af08c6163e2 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -59,6 +59,8 @@ $hookmanager->initHooks(array('invoicenote')); $result = restrictedArea($user, 'facture', $id, ''); +$usercancreate = $user->hasRight("facture", "creer"); + /* * Actions @@ -118,37 +120,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index c36b205b8fb..d475e83c55b 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -114,11 +114,7 @@ if (empty($reshook)) { } $paymentservice = GETPOST('paymentservice'); - if (preg_match('/stripesepa/', $paymentservice)) { - $result = $object->demande_prelevement_stripe($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype); - } else { - $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype); - } + $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype); if ($result > 0) { $db->commit(); @@ -142,6 +138,14 @@ if (empty($reshook)) { } } + // Payment with Direct Debit Stripe + if ($action == 'sepastripepayment' && $usercancreate) { + $result = $object->makeStripeSepaRequest($user, GETPOST('did', 'int'), 'direct-debit', 'facture'); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } + } + // payments conditions if ($action == 'setconditions' && $usercancreate) { $object->fetch($id); @@ -260,7 +264,7 @@ if ($object->id > 0) { $resteapayeraffiche = $resteapayer; if ($type == 'bank-transfer') { - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { // Never use this + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { // Not recommended $filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice } else { @@ -273,7 +277,7 @@ if ($object->id > 0) { $absolute_discount = price2num($absolute_discount, 'MT'); $absolute_creditnote = price2num($absolute_creditnote, 'MT'); } else { - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { // Not recommended $filterabsolutediscount = "fk_facture_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_facture_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice } else { @@ -345,7 +349,7 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); } // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); if ($type == 'bank-transfer') { if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; @@ -359,33 +363,20 @@ if ($object->id > 0) { if (isModEnabled('project')) { $langs->load("projects"); $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($usercancreate) { + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -871,7 +862,8 @@ if ($object->id > 0) { print ''; if (!empty($conf->global->STRIPE_SEPA_DIRECT_DEBIT)) { - print 'rowid.'&id='.$object->id.'&type='.urlencode($type).'">'.img_picto('', 'stripe', 'class="pictofixedwidth"').$langs->trans("SendToStripe").''; + $langs->load("stripe"); + print 'rowid.'&id='.$object->id.'&type='.urlencode($type).'">'.img_picto('', 'stripe', 'class="pictofixedwidth"').$langs->trans("RequestDirectDebitWithStripe").''; } print ''; diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index 2c7c5d42156..28eee624db2 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -95,7 +95,7 @@ $periodlink = ''; $exportlink = ''; $builddate = dol_now(); $description = $langs->trans("DescPurchasesJournal").'
'; -if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= $langs->trans("DepositsAreNotIncluded"); } else { $description .= $langs->trans("DepositsAreIncluded"); @@ -119,7 +119,7 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = fd.fk_product"; $sql .= " JOIN ".MAIN_DB_PREFIX."facture_fourn as f ON f.rowid = fd.fk_facture_fourn"; $sql .= " JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc"; $sql .= " WHERE f.fk_statut > 0 AND f.entity IN (".getEntity('invoice').")"; -if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (0,1,2)"; } else { $sql .= " AND f.type IN (0,1,2,3)"; diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 0dfb0ab3c6d..9e03f156848 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -194,6 +194,9 @@ if ($conf->global->TAX_MODE_SELL_SERVICE == 'payment') $description.='
'.$lan if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description.='
'.$langs->trans("DepositsAreNotIncluded"); } +if (! empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description.='
'.$langs->trans("SupplierDepositsAreNotIncluded"); +} */ if (!empty($conf->global->MAIN_MODULE_ACCOUNTING)) { $description .= $langs->trans("ThisIsAnEstimatedValue"); diff --git a/htdocs/compta/paiement/card.php b/htdocs/compta/paiement/card.php index 89ee368b7d5..58a27c94974 100644 --- a/htdocs/compta/paiement/card.php +++ b/htdocs/compta/paiement/card.php @@ -520,13 +520,7 @@ if (!empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { } if ($user->socid == 0 && $action == '') { - if ($user->rights->facture->paiement) { - if (!$disable_delete) { - print ''.$langs->trans('Delete').''; - } else { - print ''.$langs->trans('Delete').''; - } - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $user->rights->facture->paiement && !$disable_delete); } print ''; diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index 7b3eaceab3a..f28ebf2ebcf 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -82,6 +82,7 @@ $usercanread = $user->rights->banque->cheque; $usercancreate = $user->rights->banque->cheque; $usercandelete = $user->rights->banque->cheque; +$permissiontodelete = $user->rights->banque->cheque; /* @@ -750,7 +751,7 @@ if ($user->socid == 0 && !empty($object->id) && $object->statut == 0 && $user->r } if ($user->socid == 0 && !empty($object->id) && $user->rights->banque->cheque) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print ''; diff --git a/htdocs/compta/payment_sc/card.php b/htdocs/compta/payment_sc/card.php index 1d93075bc5b..39bac75ba0c 100644 --- a/htdocs/compta/payment_sc/card.php +++ b/htdocs/compta/payment_sc/card.php @@ -253,9 +253,9 @@ if (!empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) if ($action == '') { if ($user->rights->tax->charges->supprimer) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("CantRemovePaymentWithOneInvoicePaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } } diff --git a/htdocs/compta/payment_vat/card.php b/htdocs/compta/payment_vat/card.php index 8beeaa1f229..6089f9dbcb5 100644 --- a/htdocs/compta/payment_vat/card.php +++ b/htdocs/compta/payment_vat/card.php @@ -308,9 +308,9 @@ if (!empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) if ($action == '') { if ($user->rights->tax->charges->supprimer) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("CantRemovePaymentVATPaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } } diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index c03a2eea6b5..8be48493d08 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -285,7 +285,7 @@ if ($id > 0 || $ref) { print ''.$langs->trans("TransMetod").''; print $form->selectarray("methode", $object->methodes_trans); print ''; - print '
'; + print ''; print '
'; print ''; print '
'; diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index f6b31386215..8aaf8010dd2 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -353,7 +353,8 @@ class BonPrelevement extends CommonObject if ($this->fetched == 1) { if ($date < $this->date_trans) { - $this->error = 'DateOfMovementLowerThanDateOfFileTransmission'; + $langs->load("errors"); + $this->error = $langs->trans('ErrorDateOfMovementLowerThanDateOfFileTransmission'); dol_syslog("bon-prelevment::set_infocredit 1027 ".$this->error); return -1027; } diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index cd2106e50a4..908d0ae4ac2 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -189,6 +189,9 @@ if ($modecompta == "CREANCES-DETTES") { } else { $description .= $langs->trans("DepositsAreIncluded"); } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); + } $builddate = dol_now(); //$exportlink=$langs->trans("NotYetAvailable"); } elseif ($modecompta == "RECETTES-DEPENSES") { @@ -637,7 +640,7 @@ if ($modecompta == 'BOOKKEEPING') { $sql .= ", ".MAIN_DB_PREFIX."facture_fourn as f"; $sql .= " WHERE f.fk_soc = s.rowid"; $sql .= " AND f.fk_statut IN (1,2)"; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (0,1,2)"; } else { $sql .= " AND f.type IN (0,1,2,3)"; @@ -1341,7 +1344,7 @@ if ($modecompta == 'BOOKKEEPING') { $sql = "SELECT date_format(f.datef,'%Y-%m') as dm, sum(f.total_tva) as amount"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f"; $sql .= " WHERE f.fk_statut IN (1,2)"; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (0,1,2)"; } else { $sql .= " AND f.type IN (0,1,2,3)"; diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index 5b2ca11be54..4012994be58 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -165,6 +165,9 @@ if ($modecompta == 'CREANCES-DETTES') { } else { $description .= "
".$langs->trans("DepositsAreIncluded"); } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); + } $builddate = dol_now(); //$exportlink=$langs->trans("NotYetAvailable"); } elseif ($modecompta == "RECETTES-DEPENSES") { @@ -330,7 +333,7 @@ if (isModEnabled('facture') && ($modecompta == 'CREANCES-DETTES' || $modecompta $sql = "SELECT sum(f.total_ht) as amount_ht, sum(f.total_ttc) as amount_ttc, date_format(f.datef,'%Y-%m') as dm"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f"; $sql .= " WHERE f.fk_statut IN (1,2)"; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (0,1,2)"; } else { $sql .= " AND f.type IN (0,1,2,3)"; @@ -438,7 +441,7 @@ if (isModEnabled('tax') && ($modecompta == 'CREANCES-DETTES' || $modecompta == " $sql = "SELECT sum(f.total_tva) as amount, date_format(f.datef,'%Y-%m') as dm"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f"; $sql .= " WHERE f.fk_statut IN (1,2)"; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND f.type IN (0,1,2)"; } else { $sql .= " AND f.type IN (0,1,2,3)"; diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php index 9a5a8325448..15c369b7a52 100644 --- a/htdocs/compta/resultat/result.php +++ b/htdocs/compta/resultat/result.php @@ -205,6 +205,9 @@ if ($modecompta == "CREANCES-DETTES") { } else { $description .= $langs->trans("DepositsAreIncluded"); } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); + } $builddate = dol_now(); //$exportlink=$langs->trans("NotYetAvailable"); } elseif ($modecompta == "RECETTES-DEPENSES") { @@ -231,8 +234,6 @@ if ($modecompta == "CREANCES-DETTES") { $exportlink = ''; $description = $langs->trans("RulesResultBookkeepingPersonalized"); $description .= ' ('.$langs->trans("SeePageForSetup", DOL_URL_ROOT.'/accountancy/admin/categories_list.php?search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', $langs->transnoentitiesnoconv("Accountancy").' / '.$langs->transnoentitiesnoconv("Setup").' / '.$langs->transnoentitiesnoconv("AccountingCategory")).')'; - //if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded"); - //else $description.= $langs->trans("DepositsAreIncluded"); $builddate = dol_now(); } diff --git a/htdocs/compta/sociales/note.php b/htdocs/compta/sociales/note.php index c65b731109d..0f85b6ddf06 100644 --- a/htdocs/compta/sociales/note.php +++ b/htdocs/compta/sociales/note.php @@ -102,7 +102,7 @@ if ($id > 0 || !empty($ref)) { $proj->fetch($object->fk_project); $morehtmlref .= ' : '.$proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.dol_escape_htmltag($proj->title); + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } } else { $morehtmlref .= ''; diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index f19c37fb84a..fb8ad4de1a5 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -225,7 +225,9 @@ if ($conf->global->TAX_MODE_SELL_SERVICE == 'payment') { if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= '
'.$langs->trans("DepositsAreNotIncluded"); } - +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); +} // Customers invoices $elementcust = $langs->trans("CustomersInvoices"); $productcust = $langs->trans("ProductOrService"); @@ -256,6 +258,9 @@ if ($modecompta == "CREANCES-DETTES") { } else { $description .= $langs->trans("DepositsAreIncluded"); } + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); + } $builddate = dol_now(); } elseif ($modecompta == "RECETTES-DEPENSES") { @@ -406,7 +411,7 @@ if ($modecompta == 'CREANCES-DETTES') { $sql2 .= " WHERE ff.datef >= '".$db->idate($date_start)."'"; $sql2 .= " AND ff.datef <= '".$db->idate($date_end)."'"; $sql .= " AND ff.fk_statut in (1,2)"; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql .= " AND ff.type IN (0,1,2,5)"; } else { $sql .= " AND ff.type IN (0,1,2,3,5)"; diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php index 80a0a47538d..dc0fa94030c 100644 --- a/htdocs/compta/stats/cabyprodserv.php +++ b/htdocs/compta/stats/cabyprodserv.php @@ -247,7 +247,6 @@ if ($modecompta == "CREANCES-DETTES") { } else { $description .= $langs->trans("DepositsAreIncluded"); } - $builddate = dol_now(); } elseif ($modecompta == "RECETTES-DEPENSES") { $name = $langs->trans("TurnoverCollected").', '.$langs->trans("ByProductsAndServices"); diff --git a/htdocs/compta/tva/clients.php b/htdocs/compta/tva/clients.php index aa639804ba0..d0ed3032684 100644 --- a/htdocs/compta/tva/clients.php +++ b/htdocs/compta/tva/clients.php @@ -154,6 +154,9 @@ if ($conf->global->TAX_MODE_SELL_SERVICE == 'payment') { if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= '
'.$langs->trans("DepositsAreNotIncluded"); } +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); +} if (!empty($conf->global->MAIN_MODULE_ACCOUNTING)) { $description .= '
'.$langs->trans("ThisIsAnEstimatedValue"); } diff --git a/htdocs/compta/tva/index.php b/htdocs/compta/tva/index.php index 16b24361160..f0efe305d8c 100644 --- a/htdocs/compta/tva/index.php +++ b/htdocs/compta/tva/index.php @@ -211,6 +211,9 @@ if ($conf->global->TAX_MODE_SELL_SERVICE == 'payment') { if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= '
'.$langs->trans("DepositsAreNotIncluded"); } +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); +} if (!empty($conf->global->MAIN_MODULE_ACCOUNTING)) { $description .= '
'.$langs->trans("ThisIsAnEstimatedValue"); } diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index 18b3c9c6b86..997c90e083c 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -164,6 +164,9 @@ if ($conf->global->TAX_MODE_SELL_SERVICE == 'payment') { if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= '
'.$langs->trans("DepositsAreNotIncluded"); } +if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $description .= $langs->trans("SupplierDepositsAreNotIncluded"); +} if (!empty($conf->global->MAIN_MODULE_ACCOUNTING)) { $description .= '
'.$langs->trans("ThisIsAnEstimatedValue"); } diff --git a/htdocs/conf/conf.php.example b/htdocs/conf/conf.php.example index 05c29459ee2..1cc028ff137 100644 --- a/htdocs/conf/conf.php.example +++ b/htdocs/conf/conf.php.example @@ -409,7 +409,6 @@ $dolibarr_cron_allow_cli='0'; //################################# // Value to overwrite path to use shared libraries instead of embedded one -//$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$dolibarr_lib_TCPDF_PATH='/usr/share/php/tcpdf'; //$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; //$dolibarr_lib_FPDF_PATH='/usr/share/php/fpdf'; diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 11aebc8fc29..8e9c6f2a321 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -1473,39 +1473,38 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Categories if (isModEnabled('categorie') && !empty($user->rights->categorie->lire)) { print ''.$langs->trans("Categories").''; - print ''; + print ''; print $form->showCategories($object->id, Categorie::TYPE_CONTACT, 1); print ''; } if (!empty($object->socid)) { print ''.$langs->trans("ContactByDefaultFor").''; - print ''; + print ''; print $formcompany->showRoles("roles", $object, 'view', $object->roles); print ''; } // Other attributes - $cols = 3; $parameters = array('socid'=>$socid); include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; $object->load_ref_elements(); if (isModEnabled("propal")) { - print ''.$langs->trans("ContactForProposals").''; + print ''.$langs->trans("ContactForProposals").''; print $object->ref_propal ? $object->ref_propal : $langs->trans("NoContactForAnyProposal"); print ''; } if (isModEnabled('commande') || isModEnabled("expedition")) { - print ''; + print ''; if (isModEnabled("expedition")) { print $langs->trans("ContactForOrdersOrShipments"); } else { print $langs->trans("ContactForOrders"); } - print ''; + print ''; $none = $langs->trans("NoContactForAnyOrder"); if (isModEnabled("expedition")) { $none = $langs->trans("NoContactForAnyOrderOrShipments"); @@ -1515,18 +1514,18 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } if (isModEnabled('contrat')) { - print ''.$langs->trans("ContactForContracts").''; + print ''.$langs->trans("ContactForContracts").''; print $object->ref_contrat ? $object->ref_contrat : $langs->trans("NoContactForAnyContract"); print ''; } if (isModEnabled('facture')) { - print ''.$langs->trans("ContactForInvoices").''; + print ''.$langs->trans("ContactForInvoices").''; print $object->ref_facturation ? $object->ref_facturation : $langs->trans("NoContactForAnyInvoice"); print ''; } - print ''.$langs->trans("DolibarrLogin").''; + print ''.$langs->trans("DolibarrLogin").''; if ($object->user_id) { $dolibarr_user = new User($db); $result = $dolibarr_user->fetch($object->user_id); @@ -1579,7 +1578,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Delete if ($user->rights->societe->contact->supprimer) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().($backtopage ? '&backtopage='.urlencode($backtopage) : ''), 'delete', $user->rights->societe->contact->supprimer); } } diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index fcab597d43a..bbd5bf005d2 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -520,7 +520,7 @@ if ($sql_select) { } $text .= ' - '.(!empty($objp->label) ? $objp->label : $label); - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($objp->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($objp->description)); } if (($objp->info_bits & 2) == 2) { @@ -571,7 +571,7 @@ if ($sql_select) { echo get_date_range($objp->date_start, $objp->date_end); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($objp->description) && $objp->description != $objp->product_label) ? '
'.dol_htmlentitiesbr($objp->description) : ''; } } else { @@ -608,7 +608,7 @@ if ($sql_select) { // Show range $prodreftxt .= get_date_range($objp->date_start, $objp->date_end); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { $prodreftxt .= (!empty($objp->description) && $objp->description!=$objp->product_label)?'
'.dol_htmlentitiesbr($objp->description):''; } diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index d165a0a4cc1..e8396a4299c 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -399,15 +399,6 @@ if (isset($extrafields->attributes[$object->table_element]['label']) && is_array $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as co ON co.rowid = p.fk_pays"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = p.fk_soc"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_stcommcontact as st ON st.id = p.fk_stcommcontact"; -if (!empty($search_categ) && $search_categ != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_contact as cc ON p.rowid = cc.fk_socpeople"; // We need this table joined to the select in order to filter by categ -} -if (!empty($search_categ_thirdparty) && $search_categ_thirdparty != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc"; // We need this table joined to the select in order to filter by categ -} -if (!empty($search_categ_supplier) && $search_categ_supplier != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_fournisseur as cs2 ON s.rowid = cs2.fk_soc"; // We need this table joined to the select in order to filter by categ -} if (empty($user->rights->societe->client->voir) && !$socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; } @@ -437,23 +428,83 @@ if ($search_priv != '0' && $search_priv != '1') { } } -if ($search_categ > 0) { - $sql .= " AND cc.fk_categorie = ".((int) $search_categ); +$searchCategoryContactList = $search_categ ? array($search_categ) : array(); +$searchCategoryContactOperator = 0; +// Search for tag/category ($searchCategoryContactList is an array of ID) +if (!empty($searchCategoryContactList)) { + $searchCategoryContactSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryContactList as $searchCategoryContact) { + if (intval($searchCategoryContact) == -2) { + $searchCategoryContactSqlList[] = "NOT EXISTS (SELECT ck.fk_socpeople FROM ".MAIN_DB_PREFIX."categorie_contact as ck WHERE s.rowid = ck.fk_socpeople)"; + } elseif (intval($searchCategoryContact) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryContact); + } + } + if ($listofcategoryid) { + $searchCategoryContactSqlList[] = " EXISTS (SELECT ck.fk_socpeople FROM ".MAIN_DB_PREFIX."categorie_contact as ck WHERE s.rowid = ck.fk_socpeople AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryContactOperator == 1) { + if (!empty($searchCategoryContactSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryContactSqlList).")"; + } + } else { + if (!empty($searchCategoryContactSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryContactSqlList).")"; + } + } } -if ($search_categ == -2) { - $sql .= " AND cc.fk_categorie IS NULL"; +$searchCategoryCustomerList = $search_categ_thirdparty ? array($search_categ_thirdparty) : array(); +$searchCategoryCustomerOperator = 0; +// Search for tag/category ($searchCategoryCustomerList is an array of ID) +if (!empty($searchCategoryCustomerList)) { + $searchCategoryCustomerSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryCustomerList as $searchCategoryCustomer) { + if (intval($searchCategoryCustomer) == -2) { + $searchCategoryCustomerSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategoryCustomer) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryCustomer); + } + } + if ($listofcategoryid) { + $searchCategoryCustomerSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryCustomerOperator == 1) { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryCustomerSqlList).")"; + } + } else { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryCustomerSqlList).")"; + } + } } -if ($search_categ_thirdparty > 0) { - $sql .= " AND cs.fk_categorie = ".((int) $search_categ_thirdparty); -} -if ($search_categ_thirdparty == -2) { - $sql .= " AND cs.fk_categorie IS NULL"; -} -if ($search_categ_supplier > 0) { - $sql .= " AND cs2.fk_categorie = ".((int) $search_categ_supplier); -} -if ($search_categ_supplier == -2) { - $sql .= " AND cs2.fk_categorie IS NULL"; +$searchCategorySupplierList = $search_categ_supplier ? array($search_categ_supplier) : array(); +$searchCategorySupplierOperator = 0; +// Search for tag/category ($searchCategorySupplierList is an array of ID) +if (!empty($searchCategorySupplierList)) { + $searchCategorySupplierSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategorySupplierList as $searchCategorySupplier) { + if (intval($searchCategorySupplier) == -2) { + $searchCategorySupplierSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategorySupplier) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategorySupplier); + } + } + if ($listofcategoryid) { + $searchCategorySupplierSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategorySupplierOperator == 1) { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategorySupplierSqlList).")"; + } + } else { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategorySupplierSqlList).")"; + } + } } if ($sall) { @@ -502,7 +553,15 @@ if (strlen($search_fax)) { if (isModEnabled('socialnetworks')) { foreach ($socialnetworks as $key => $value) { if ($value['active'] && strlen($search_[$key])) { - $sql .= " AND p.socialnetworks LIKE '%\"".$key."\":\"".$search_[$key]."%'"; + $searchkeyinjsonformat = preg_replace('/"$/', '', preg_replace('/^"/', '', json_encode($search_[$key]))); + if (in_array($db->type, array('mysql', 'mysqli'))) { + $sql .= " AND p.socialnetworks REGEXP '\"".$db->escapeforlike($db->escape($key))."\":\"[^\"]*".$db->escapeforlike($db->escape($searchkeyinjsonformat))."'"; + } elseif ($db->type == 'pgsql') { + $sql .= " AND p.socialnetworks ~ '\"".$db->escapeforlike($db->escape($key))."\":\"[^\"]*".$db->escapeforlike($db->escape($searchkeyinjsonformat))."'"; + } else { + // Works with all database but not reliable because search only for social network code starting with earched value + $sql .= " AND p.socialnetworks LIKE '%\"".$db->escapeforlike($db->escape($key))."\":\"".$db->escapeforlike($db->escape($searchkeyinjsonformat))."%'"; + } } } } @@ -557,6 +616,7 @@ if ($view == "recent") { } else { $sql .= $db->order($sortfield, $sortorder); } +//print $sql; // Count total nb of records $nbtotalofrecords = ''; @@ -1222,7 +1282,7 @@ while ($i < min($num, $limit)) { if (isModEnabled('socialnetworks')) { foreach ($socialnetworks as $key => $value) { if ($value['active'] && !empty($arrayfields['p.'.$key]['checked'])) { - print ''.dol_print_socialnetworks($arraysocialnetworks[$key], $obj->rowid, $obj->socid, $key, $socialnetworks).''; + print ''.(empty($arraysocialnetworks[$key]) ? '' : dol_print_socialnetworks($arraysocialnetworks[$key], $obj->rowid, $obj->socid, $key, $socialnetworks)).''; if (!$i) { $totalarray['nbfield']++; } diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php index d46f2cb24a7..3a3c5440b30 100644 --- a/htdocs/contrat/agenda.php +++ b/htdocs/contrat/agenda.php @@ -76,6 +76,8 @@ if (!$sortorder) { // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('agendacontract', 'globalcard')); +$permissiontoadd = $user->rights->contrat->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php + /* * Actions @@ -166,40 +168,28 @@ if ($id > 0) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherContracts").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->contrat->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 93d33565143..b691524ad92 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -97,7 +97,9 @@ $extralabelslines = $extrafields->fetch_name_optionals_label($object->table_elem $permissionnote = $user->rights->contrat->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink = $user->rights->contrat->creer; // Used by the include of actions_dellink.inc.php - +$permissiontodelete = ($user->rights->contrat->creer && $object->statut == $object::STATUS_DRAFT) || $user->rights->contrat->supprimer; +$permissiontoadd = $user->rights->contrat->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php +$permissiontoedit = $permissiontoadd; $error = 0; @@ -138,6 +140,8 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once + include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php'; // Must be include, not include_once + if ($action == 'confirm_active' && $confirm == 'yes' && $user->rights->contrat->activer) { $result = $object->active_line($user, GETPOST('ligne', 'int'), GETPOST('date'), GETPOST('dateend'), GETPOST('comment')); @@ -350,7 +354,8 @@ if (empty($reshook)) { $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $array_options, - $lines[$i]->fk_unit + $lines[$i]->fk_unit, + $num+1 ); if ($result < 0) { @@ -402,6 +407,8 @@ if (empty($reshook)) { $price_ttc = ''; $price_ttc_devise = ''; + $rang = count($object->lines) + 1; + if (GETPOST('price_ht') !== '') { $price_ht = price2num(GETPOST('price_ht'), 'MU', 2); } @@ -609,7 +616,8 @@ if (empty($reshook)) { $fk_fournprice, $pa_ht, $array_options, - $fk_unit + $fk_unit, + $rang ); } @@ -686,16 +694,18 @@ if (empty($reshook)) { $error++; } $objectline->fetch_optionals(); + + $objectline->oldcopy = dol_clone($objectline); } $db->begin(); if (!$error) { if ($date_start_real_update == '') { - $date_start_real_update = $objectline->date_ouverture; + $date_start_real_update = $objectline->date_start_real; } if ($date_end_real_update == '') { - $date_end_real_update = $objectline->date_cloture; + $date_end_real_update = $objectline->date_end_real; } $vat_rate = GETPOST('eltva_tx'); @@ -739,13 +749,14 @@ if (empty($reshook)) { $objectline->vat_src_code = $vat_src_code; $objectline->localtax1_tx = is_numeric($localtax1_tx) ? $localtax1_tx : 0; $objectline->localtax2_tx = is_numeric($localtax2_tx) ? $localtax2_tx : 0; - $objectline->date_ouverture_prevue = $date_start_update; - $objectline->date_ouverture = $date_start_real_update; - $objectline->date_fin_validite = $date_end_update; - $objectline->date_cloture = $date_end_real_update; + $objectline->date_start = $date_start_update; + $objectline->date_start_real = $date_start_real_update; + $objectline->date_end = $date_end_update; + $objectline->date_end_real = $date_end_real_update; $objectline->fk_user_cloture = $user->id; $objectline->fk_fournprice = $fk_fournprice; $objectline->pa_ht = $pa_ht; + $objectline->rang = $objectline->rang; if ($fk_unit > 0) { $objectline->fk_unit = GETPOST('unit'); @@ -968,7 +979,6 @@ if (empty($reshook)) { // Actions to build doc $upload_dir = $conf->contrat->multidir_output[$object->entity]; - $permissiontoadd = $user->rights->contrat->creer; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; // Actions to send emails @@ -1363,39 +1373,28 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherContracts").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->contrat->creer) { + $morehtmlref .= '
'; + if ($permissiontoadd) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -1482,7 +1481,9 @@ if ($action == 'create') { // Title line for service $cursorline = 1; - print '
'; + + + print '
'; while ($cursorline <= $nbofservices) { print '
'; print '
'; @@ -1497,11 +1498,12 @@ if ($action == 'create') { $sql = "SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.price_ht, cd.qty,"; $sql .= " cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,"; - $sql .= " cd.date_ouverture_prevue as date_debut, cd.date_ouverture as date_debut_reelle,"; - $sql .= " cd.date_fin_validite as date_fin, cd.date_cloture as date_fin_reelle,"; + $sql .= " cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,"; + $sql .= " cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,"; $sql .= " cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,"; $sql .= " cd.fk_unit,"; $sql .= " p.rowid as pid, p.ref as pref, p.label as plabel, p.fk_product_type as ptype, p.entity as pentity, p.tosell, p.tobuy, p.tobatch"; + $sql .= " ,cd.rang"; $sql .= " FROM ".MAIN_DB_PREFIX."contratdet as cd"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid"; $sql .= " WHERE cd.rowid = ".((int) $object->lines[$cursorline - 1]->id); @@ -1510,6 +1512,8 @@ if ($action == 'create') { if ($result) { $total = 0; + $objp = $db->fetch_object($result); + print ''; print ''.$langs->trans("ServiceNb", $cursorline).''; print ''.$langs->trans("VAT").''; @@ -1525,10 +1529,28 @@ if ($action == 'create') { if (isModEnabled('margin') && !empty($conf->global->MARGIN_SHOW_ON_CONTRACT)) { print ''.$langs->trans("BuyingPrice").''; } - print ' '; + // + + if ($nbofservices > 1 && $conf->browser->layout != 'phone' && !empty($user->rights->contrat->creer)) { + print ''; + if ($cursorline > 1) { + print 'rowid.'">'; + echo img_up('default', 0, 'imgupforline'); + print ''; + } + if ($cursorline < $nbofservices) { + print 'rowid.'">'; + echo img_down('default', 0, 'imgdownforline'); + print ''; + } + print ''; + } else { + print ' '; + } + print "\n"; - $objp = $db->fetch_object($result); + // Line in view mode if ($action != 'editline' || GETPOST('rowid') != $objp->rowid) { @@ -1557,7 +1579,7 @@ if ($action == 'create') { $description = $objp->description; // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { $text .= (!empty($objp->description) && $objp->description != $objp->plabel) ? '
'.dol_htmlentitiesbr($objp->description) : ''; $description = ''; // Already added into main visible desc } @@ -1633,10 +1655,10 @@ if ($action == 'create') { // Date planned print $langs->trans("DateStartPlanned").': '; - if ($objp->date_debut) { - print dol_print_date($db->jdate($objp->date_debut), 'day'); + if ($objp->date_start) { + print dol_print_date($db->jdate($objp->date_start), 'day'); // Warning si date prevu passee et pas en service - if ($objp->statut == 0 && $db->jdate($objp->date_debut) < ($now - $conf->contrat->services->inactifs->warning_delay)) { + if ($objp->statut == 0 && $db->jdate($objp->date_start) < ($now - $conf->contrat->services->inactifs->warning_delay)) { $warning_delay = $conf->contrat->services->inactifs->warning_delay / 3600 / 24; $textlate = $langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($warning_delay) >= 0 ? '+' : '').ceil($warning_delay).' '.$langs->trans("days"); print " ".img_warning($textlate); @@ -1646,9 +1668,9 @@ if ($action == 'create') { } print '  -  '; print $langs->trans("DateEndPlanned").': '; - if ($objp->date_fin) { - print dol_print_date($db->jdate($objp->date_fin), 'day'); - if ($objp->statut == 4 && $db->jdate($objp->date_fin) < ($now - $conf->contrat->services->expires->warning_delay)) { + if ($objp->date_end) { + print dol_print_date($db->jdate($objp->date_end), 'day'); + if ($objp->statut == 4 && $db->jdate($objp->date_end) < ($now - $conf->contrat->services->expires->warning_delay)) { $warning_delay = $conf->contrat->services->expires->warning_delay / 3600 / 24; $textlate = $langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($warning_delay) >= 0 ? '+' : '').ceil($warning_delay).' '.$langs->trans("days"); print " ".img_warning($textlate); @@ -1760,9 +1782,9 @@ if ($action == 'create') { print ''; print ''; print $langs->trans("DateStartPlanned").' '; - print $form->selectDate($db->jdate($objp->date_debut), "date_start_update", $usehm, $usehm, ($db->jdate($objp->date_debut) > 0 ? 0 : 1), "update"); + print $form->selectDate($db->jdate($objp->date_start), "date_start_update", $usehm, $usehm, ($db->jdate($objp->date_start) > 0 ? 0 : 1), "update"); print '   '.$langs->trans("DateEndPlanned").' '; - print $form->selectDate($db->jdate($objp->date_fin), "date_end_update", $usehm, $usehm, ($db->jdate($objp->date_fin) > 0 ? 0 : 1), "update"); + print $form->selectDate($db->jdate($objp->date_end), "date_end_update", $usehm, $usehm, ($db->jdate($objp->date_end) > 0 ? 0 : 1), "update"); print ''; print ''; @@ -1882,26 +1904,26 @@ if ($action == 'create') { print ''; // Si pas encore active - if (!$objp->date_debut_reelle) { + if (!$objp->date_start_real) { print $langs->trans("DateStartReal").': '; - if ($objp->date_debut_reelle) { - print dol_print_date($db->jdate($objp->date_debut_reelle), 'day'); + if ($objp->date_start_real) { + print dol_print_date($db->jdate($objp->date_start_real), 'day'); } else { print $langs->trans("ContractStatusNotRunning"); } } // Si active et en cours - if ($objp->date_debut_reelle && !$objp->date_fin_reelle) { + if ($objp->date_start_real && !$objp->date_end_real) { print $langs->trans("DateStartReal").': '; - print dol_print_date($db->jdate($objp->date_debut_reelle), 'day'); + print dol_print_date($db->jdate($objp->date_start_real), 'day'); } // Si desactive - if ($objp->date_debut_reelle && $objp->date_fin_reelle) { + if ($objp->date_start_real && $objp->date_end_real) { print $langs->trans("DateStartReal").': '; - print dol_print_date($db->jdate($objp->date_debut_reelle), 'day'); + print dol_print_date($db->jdate($objp->date_start_real), 'day'); print '  -  '; print $langs->trans("DateEndReal").': '; - print dol_print_date($db->jdate($objp->date_fin_reelle), 'day'); + print dol_print_date($db->jdate($objp->date_end_real), 'day'); } if (!empty($objp->comment)) { print "  -  ".$objp->comment; @@ -1922,14 +1944,14 @@ if ($action == 'create') { print ''; // Definie date debut et fin par defaut - $dateactstart = $objp->date_debut; + $dateactstart = $objp->date_start; if (GETPOST('remonth')) { $dateactstart = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); } elseif (!$dateactstart) { $dateactstart = time(); } - $dateactend = $objp->date_fin; + $dateactend = $objp->date_end; if (GETPOST('endmonth')) { $dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); } elseif (!$dateactend) { @@ -1978,14 +2000,14 @@ if ($action == 'create') { print '
'; // Definie date debut et fin par defaut - $dateactstart = $objp->date_debut_reelle; + $dateactstart = $objp->date_start_real; if (GETPOST('remonth')) { $dateactstart = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); } elseif (!$dateactstart) { $dateactstart = time(); } - $dateactend = $objp->date_fin_reelle; + $dateactend = $objp->date_end_real; if (GETPOST('endmonth')) { $dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); } elseif (!$dateactend) { @@ -2004,7 +2026,7 @@ if ($action == 'create') { if ($objp->statut >= 4) { if ($objp->statut == 4) { print $langs->trans("DateEndReal").' '; - print $form->selectDate($dateactend, "end", $usehm, $usehm, ($objp->date_fin_reelle > 0 ? 0 : 1), "closeline", 1, 1); + print $form->selectDate($dateactend, "end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1), "closeline", 1, 1); } } print ''; @@ -2172,15 +2194,8 @@ if ($action == 'create') { print dolGetButtonAction($langs->trans('ToClone'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&token='.newToken(), '', true, $params); } - // On peut supprimer entite si - // - Droit de creer + mode brouillon (erreur creation) - // - Droit de supprimer - if (($user->rights->contrat->creer && $object->statut == $object::STATUS_DRAFT) || $user->rights->contrat->supprimer) { - print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', true, $params); - } else { - $params['attr']['title'] = $langs->trans("NotAllowed"); - print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', false, $params); - } + // Delete + print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', $permissiontodelete, $params); } print ""; diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php index ea228550cae..f38fa4758d9 100644 --- a/htdocs/contrat/class/api_contracts.class.php +++ b/htdocs/contrat/class/api_contracts.class.php @@ -290,8 +290,8 @@ class Contracts extends DolibarrApi $request_data->localtax2_tx, $request_data->fk_product, $request_data->remise_percent, - $request_data->date_start, // date_start = date planned start, date ouverture = date_start_real - $request_data->date_end, // date_end = date planned end, date_cloture = date_end_real + $request_data->date_start, + $request_data->date_end, $request_data->price_base_type ? $request_data->price_base_type : 'HT', $request_data->subprice_excl_tax, $request_data->info_bits, @@ -345,13 +345,13 @@ class Contracts extends DolibarrApi $request_data->subprice, $request_data->qty, $request_data->remise_percent, - $request_data->date_ouveture_prevue, - $request_data->date_fin_validite, + $request_data->date_start, + $request_data->date_end, $request_data->tva_tx, $request_data->localtax1_tx, $request_data->localtax2_tx, - $request_data->date_ouverture, - $request_data->date_cloture, + $request_data->date_start_real, + $request_data->date_end_real, $request_data->price_base_type ? $request_data->price_base_type : 'HT', $request_data->info_bits, $request_data->fk_fourn_price, @@ -662,14 +662,10 @@ class Contracts extends DolibarrApi unset($object->address); - unset($object->date_ouverture_prevue); - unset($object->date_ouverture); - unset($object->date_fin_validite); - unset($object->date_cloture); - unset($object->date_debut_prevue); - unset($object->date_debut_reel); - unset($object->date_fin_prevue); - unset($object->date_fin_reel); + unset($object->date_start); + unset($object->date_start_real); + unset($object->date_end); + unset($object->date_end_real); unset($object->civility_id); return $object; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 2a8d1b815a7..7d43da46b37 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -788,19 +788,22 @@ class Contrat extends CommonObject $sql .= " d.total_localtax2,"; $sql .= " d.total_ttc,"; $sql .= " d.info_bits, d.fk_product,"; - $sql .= " d.date_ouverture_prevue, d.date_ouverture,"; - $sql .= " d.date_fin_validite, d.date_cloture,"; + $sql .= " d.date_ouverture_prevue as date_start,"; + $sql .= " d.date_ouverture as date_start_real,"; + $sql .= " d.date_fin_validite as date_end,"; + $sql .= " d.date_cloture as date_end_real,"; $sql .= " d.fk_user_author,"; $sql .= " d.fk_user_ouverture,"; $sql .= " d.fk_user_cloture,"; $sql .= " d.fk_unit,"; - $sql .= " d.product_type as type"; + $sql .= " d.product_type as type,"; + $sql .= " d.rang"; $sql .= " FROM ".MAIN_DB_PREFIX."contratdet as d LEFT JOIN ".MAIN_DB_PREFIX."product as p ON d.fk_product = p.rowid"; $sql .= " WHERE d.fk_contrat = ".((int) $this->id); if ($only_services == 1) { $sql .= " AND d.product_type = 1"; } - $sql .= " ORDER by d.rowid ASC"; + $sql .= " ORDER by d.rang ASC"; dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG); $result = $this->db->query($sql); @@ -855,19 +858,21 @@ class Contrat extends CommonObject $line->description = $objp->description; - $line->date_start = $this->db->jdate($objp->date_ouverture_prevue); - $line->date_start_real = $this->db->jdate($objp->date_ouverture); - $line->date_end = $this->db->jdate($objp->date_fin_validite); - $line->date_end_real = $this->db->jdate($objp->date_cloture); + $line->date_start = $this->db->jdate($objp->date_start); + $line->date_start_real = $this->db->jdate($objp->date_start_real); + $line->date_end = $this->db->jdate($objp->date_end); + $line->date_end_real = $this->db->jdate($objp->date_end_real); // For backward compatibility - $line->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue); - $line->date_ouverture = $this->db->jdate($objp->date_ouverture); - $line->date_fin_validite = $this->db->jdate($objp->date_fin_validite); - $line->date_cloture = $this->db->jdate($objp->date_cloture); - $line->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue); - $line->date_debut_reel = $this->db->jdate($objp->date_ouverture); - $line->date_fin_prevue = $this->db->jdate($objp->date_fin_validite); - $line->date_fin_reel = $this->db->jdate($objp->date_cloture); + //$line->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue); + //$line->date_ouverture = $this->db->jdate($objp->date_ouverture); + //$line->date_fin_validite = $this->db->jdate($objp->date_fin_validite); + //$line->date_cloture = $this->db->jdate($objp->date_cloture); + //$line->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue); + //$line->date_debut_reel = $this->db->jdate($objp->date_ouverture); + //$line->date_fin_prevue = $this->db->jdate($objp->date_fin_validite); + //$line->date_fin_reel = $this->db->jdate($objp->date_cloture); + + $line->rang = $objp->rang; // Retrieve all extrafields for contract line // fetch optionals attributes and labels @@ -892,10 +897,10 @@ class Contrat extends CommonObject if ($line->statut == ContratLigne::STATUS_INITIAL) { $this->nbofserviceswait++; } - if ($line->statut == ContratLigne::STATUS_OPEN && (empty($line->date_fin_prevue) || $line->date_fin_prevue >= $now)) { + if ($line->statut == ContratLigne::STATUS_OPEN && (empty($line->date_end) || $line->date_end >= $now)) { $this->nbofservicesopened++; } - if ($line->statut == ContratLigne::STATUS_OPEN && (!empty($line->date_fin_prevue) && $line->date_fin_prevue < $now)) { + if ($line->statut == ContratLigne::STATUS_OPEN && (!empty($line->date_end) && $line->date_end < $now)) { $this->nbofservicesexpired++; } if ($line->statut == ContratLigne::STATUS_CLOSED) { @@ -1492,6 +1497,9 @@ class Contrat extends CommonObject if (empty($remise_percent)) { $remise_percent = 0; } + if (empty($rang)) { + $rang = 0; + } if ($date_start && $date_end && $date_start > $date_end) { $langs->load("errors"); @@ -1555,6 +1563,7 @@ class Contrat extends CommonObject $sql .= ",date_fin_validite"; } $sql .= ", fk_unit"; + $sql .= ", rang"; $sql .= ") VALUES ("; $sql .= $this->id.", '', '".$this->db->escape($desc)."',"; $sql .= ($fk_product > 0 ? $fk_product : "null").","; @@ -1587,6 +1596,7 @@ class Contrat extends CommonObject $sql .= ",'".$this->db->idate($date_end)."'"; } $sql .= ", ".($fk_unit ? "'".$this->db->escape($fk_unit)."'" : "null"); + $sql .= ", ".(!empty($rang) ? (int) $rang : "0"); $sql .= ")"; $resql = $this->db->query($sql); @@ -1644,17 +1654,18 @@ class Contrat extends CommonObject * @param float $tvatx Taux TVA * @param float $localtax1tx Local tax 1 rate * @param float $localtax2tx Local tax 2 rate - * @param int|string $date_debut_reel Date de debut reelle - * @param int|string $date_fin_reel Date de fin reelle + * @param int|string $date_start_real Date de debut reelle + * @param int|string $date_end_real Date de fin reelle * @param string $price_base_type HT or TTC * @param int $info_bits Bits of type of lines * @param int $fk_fournprice Fourn price id * @param int $pa_ht Buying price HT * @param array $array_options extrafields array * @param string $fk_unit Code of the unit to use. Null to use the default one + * @param string $rang Position * @return int < 0 si erreur, > 0 si ok */ - public function updateline($rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $tvatx, $localtax1tx = 0.0, $localtax2tx = 0.0, $date_debut_reel = '', $date_fin_reel = '', $price_base_type = 'HT', $info_bits = 0, $fk_fournprice = null, $pa_ht = 0, $array_options = 0, $fk_unit = null) + public function updateline($rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $tvatx, $localtax1tx = 0.0, $localtax2tx = 0.0, $date_start_real = '', $date_end_real = '', $price_base_type = 'HT', $info_bits = 0, $fk_fournprice = null, $pa_ht = 0, $array_options = 0, $fk_unit = null, $rang = 0) { global $user, $conf, $langs, $mysoc; @@ -1672,6 +1683,9 @@ class Contrat extends CommonObject if (empty($fk_fournprice)) { $fk_fournprice = 0; } + if (empty($rang)) { + $rang = 0; + } $subprice = $price; $remise = 0; @@ -1688,7 +1702,7 @@ class Contrat extends CommonObject return -1; } - dol_syslog(get_class($this)."::updateline $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $date_debut_reel, $date_fin_reel, $tvatx, $localtax1tx, $localtax2tx, $price_base_type, $info_bits"); + dol_syslog(get_class($this)."::updateline $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $date_start_real, $date_end_real, $tvatx, $localtax1tx, $localtax2tx, $price_base_type, $info_bits, $rang"); $this->db->begin(); @@ -1707,8 +1721,8 @@ class Contrat extends CommonObject $total_localtax1 = $tabprice[9]; $total_localtax2 = $tabprice[10]; - $localtax1_type = $localtaxes_type[0]; - $localtax2_type = $localtaxes_type[2]; + $localtax1_type = (empty($localtaxes_type[0]) ? '' : $localtaxes_type[0]); + $localtax2_type = (empty($localtaxes_type[2]) ? '' : $localtaxes_type[2]); // TODO A virer // Anciens indicateurs: $price, $remise (a ne plus utiliser) @@ -1741,8 +1755,8 @@ class Contrat extends CommonObject $sql .= ",tva_tx = ".((float) price2num($tvatx)); $sql .= ",localtax1_tx = ".((float) price2num($localtax1tx)); $sql .= ",localtax2_tx = ".((float) price2num($localtax2tx)); - $sql .= ",localtax1_type='".$this->db->escape($localtax1_type); - $sql .= ",localtax2_type='".$this->db->escape($localtax2_type); + $sql .= ",localtax1_type='".$this->db->escape($localtax1_type)."'"; + $sql .= ",localtax2_type='".$this->db->escape($localtax2_type)."'"; $sql .= ", total_ht = ".((float) price2num($total_ht)); $sql .= ", total_tva = ".((float) price2num($total_tva)); $sql .= ", total_localtax1 = ".((float) price2num($total_localtax1)); @@ -1760,17 +1774,18 @@ class Contrat extends CommonObject } else { $sql .= ",date_fin_validite = null"; } - if ($date_debut_reel > 0) { - $sql .= ",date_ouverture = '".$this->db->idate($date_debut_reel)."'"; + if ($date_start_real > 0) { + $sql .= ",date_ouverture = '".$this->db->idate($date_start_real)."'"; } else { $sql .= ",date_ouverture = null"; } - if ($date_fin_reel > 0) { - $sql .= ",date_cloture = '".$this->db->idate($date_fin_reel)."'"; + if ($date_end_real > 0) { + $sql .= ",date_cloture = '".$this->db->idate($date_end_real)."'"; } else { $sql .= ",date_cloture = null"; } $sql .= ", fk_unit = ".($fk_unit > 0 ? ((int) $fk_unit) : "null"); + $sql .= ", rang = ".(!empty($rang) ? ((int) $rang) : "0"); $sql .= " WHERE rowid = ".((int) $rowid); dol_syslog(get_class($this)."::updateline", LOG_DEBUG); @@ -2426,18 +2441,15 @@ class Contrat extends CommonObject * @param int $hidedetails Hide details of lines * @param int $hidedesc Hide description * @param int $hideref Hide ref - * @param null|array $moreparams Array to provide more information - * @return int 0 if KO, 1 if OK + * @param null|array $moreparams Array to provide more information + * @return int < 0 if KO, 0 = no doc generated, > 0 if OK */ public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams = null) { global $conf, $langs; - $langs->load("contracts"); - $outputlangs->load("products"); - if (!dol_strlen($modele)) { - $modele = 'strato'; + $modele = ''; // No doc template/generation by default if (!empty($this->model_pdf)) { $modele = $this->model_pdf; @@ -2448,9 +2460,15 @@ class Contrat extends CommonObject } } - $modelpath = "core/modules/contract/doc/"; + if (empty($modele)) { + return 0; + } else { + $langs->load("contracts"); + $outputlangs->load("products"); - return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams); + $modelpath = "core/modules/contract/doc/"; + return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams); + } } /** @@ -2565,7 +2583,7 @@ class Contrat extends CommonObject if (!$error) { foreach ($this->lines as $line) { - $result = $clonedObj->addline($line->description, $line->subprice, $line->qty, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->fk_product, $line->remise_percent, $line->date_ouverture, $line->date_cloture, 'HT', 0, $line->info_bits, $line->fk_fournprice, $line->pa_ht, $line->array_options, $line->fk_unit); + $result = $clonedObj->addline($line->description, $line->subprice, $line->qty, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->fk_product, $line->remise_percent, $line->date_ouverture, $line->date_cloture, 'HT', 0, $line->info_bits, $line->fk_fournprice, $line->pa_ht, $line->array_options, $line->fk_unit, $line->rang); if ($result < 0) { $error++; $this->error = $clonedObj->error; @@ -2790,7 +2808,8 @@ class ContratLigne extends CommonObjectLine public $table_element = 'contratdet'; /** - * @var string Name to use for 'features' parameter to check module permissions with restrictedArea() + * @var string Name to use for 'features' parameter to check module permissions user->rights->feature with restrictedArea(). + * Undefined means same value than $element. Can be use to force a check on another element for example for class of line, we mention here the parent element. */ public $element_for_permission = 'contrat'; @@ -2850,19 +2869,19 @@ class ContratLigne extends CommonObjectLine /** * @deprecated Use date_start */ - public $date_ouverture_prevue; // date start planned + //public $date_ouverture_prevue; // date start planned /** * @deprecated Use date_start_real */ - public $date_ouverture; // date start real + //public $date_ouverture; // date start real /** * @deprecated Use date_end */ - public $date_fin_validite; // date end planned + //public $date_fin_validite; // date end planned /** * @deprecated Use date_end_real */ - public $date_cloture; // date end real + //public $date_cloture; // date end real public $tva_tx; public $vat_src_code; @@ -2923,6 +2942,12 @@ class ContratLigne extends CommonObjectLine public $commentaire; + /** + * @var int line rank + */ + public $rang = 0; + + const STATUS_INITIAL = 0; const STATUS_OPEN = 4; const STATUS_CLOSED = 5; @@ -2952,7 +2977,8 @@ class ContratLigne extends CommonObjectLine //'extraparams' =>array('type'=>'varchar(255)', 'label'=>'Extraparams', 'enabled'=>1, 'visible'=>-1, 'position'=>125), 'fk_user_ouverture' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserStartingService', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>135), 'fk_user_cloture' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserClosingService', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>135), - 'statut' =>array('type'=>'smallint(6)', 'label'=>'Statut', 'enabled'=>1, 'visible'=>-1, 'position'=>500, 'arrayofkeyval'=>array(0=>'Draft', 4=>'Open', 5=>'Closed')) + 'statut' =>array('type'=>'smallint(6)', 'label'=>'Statut', 'enabled'=>1, 'visible'=>-1, 'position'=>500, 'arrayofkeyval'=>array(0=>'Draft', 4=>'Open', 5=>'Closed')), + 'rang' =>array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>500, 'default' =>0) ); // END MODULEBUILDER PROPERTIES @@ -2976,7 +3002,7 @@ class ContratLigne extends CommonObjectLine */ public function getLibStatut($mode) { - return $this->LibStatut($this->statut, $mode, ((!empty($this->date_fin_validite)) ? ($this->date_fin_validite < dol_now() ? 1 : 0) : -1)); + return $this->LibStatut($this->statut, $mode, ((!empty($this->date_end)) ? ($this->date_end < dol_now() ? 1 : 0) : -1)); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps @@ -3091,10 +3117,10 @@ class ContratLigne extends CommonObjectLine $sql .= " p.fk_product_type as product_type,"; $sql .= " t.description,"; $sql .= " t.date_commande,"; - $sql .= " t.date_ouverture_prevue as date_ouverture_prevue,"; - $sql .= " t.date_ouverture as date_ouverture,"; - $sql .= " t.date_fin_validite as date_fin_validite,"; - $sql .= " t.date_cloture as date_cloture,"; + $sql .= " t.date_ouverture_prevue as date_start,"; + $sql .= " t.date_ouverture as date_start_real,"; + $sql .= " t.date_fin_validite as date_end,"; + $sql .= " t.date_cloture as date_end_real,"; $sql .= " t.tva_tx,"; $sql .= " t.vat_src_code,"; $sql .= " t.localtax1_tx,"; @@ -3119,7 +3145,8 @@ class ContratLigne extends CommonObjectLine $sql .= " t.fk_user_ouverture,"; $sql .= " t.fk_user_cloture,"; $sql .= " t.commentaire,"; - $sql .= " t.fk_unit"; + $sql .= " t.fk_unit,"; + $sql .= " t.rang"; $sql .= " FROM ".MAIN_DB_PREFIX."contratdet as t LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = t.fk_product"; if ($id) { $sql .= " WHERE t.rowid = ".((int) $id); @@ -3149,15 +3176,15 @@ class ContratLigne extends CommonObjectLine $this->description = $obj->description; $this->date_commande = $this->db->jdate($obj->date_commande); - $this->date_start = $this->db->jdate($obj->date_ouverture_prevue); - $this->date_start_real = $this->db->jdate($obj->date_ouverture); - $this->date_end = $this->db->jdate($obj->date_fin_validite); - $this->date_end_real = $this->db->jdate($obj->date_cloture); + $this->date_start = $this->db->jdate($obj->date_start); + $this->date_start_real = $this->db->jdate($obj->date_start_real); + $this->date_end = $this->db->jdate($obj->date_end); + $this->date_end_real = $this->db->jdate($obj->date_end_real); // For backward compatibility - $this->date_ouverture_prevue = $this->db->jdate($obj->date_ouverture_prevue); - $this->date_ouverture = $this->db->jdate($obj->date_ouverture); - $this->date_fin_validite = $this->db->jdate($obj->date_fin_validite); - $this->date_cloture = $this->db->jdate($obj->date_cloture); + //$this->date_ouverture_prevue = $this->db->jdate($obj->date_ouverture_prevue); + //$this->date_ouverture = $this->db->jdate($obj->date_ouverture); + //$this->date_fin_validite = $this->db->jdate($obj->date_fin_validite); + //$this->date_cloture = $this->db->jdate($obj->date_cloture); $this->tva_tx = $obj->tva_tx; $this->vat_src_code = $obj->vat_src_code; @@ -3186,6 +3213,8 @@ class ContratLigne extends CommonObjectLine $this->pa_ht = $marginInfos[0]; $this->fk_unit = $obj->fk_unit; + $this->rang = $obj->rang; + $this->fetch_optionals(); } @@ -3237,6 +3266,7 @@ class ContratLigne extends CommonObjectLine $this->fk_user_ouverture = (int) $this->fk_user_ouverture; $this->fk_user_cloture = (int) $this->fk_user_cloture; $this->commentaire = trim($this->commentaire); + $this->rang = (int) $this->rang; //if (empty($this->subprice)) $this->subprice = 0; if (empty($this->price_ht)) { $this->price_ht = 0; @@ -3261,16 +3291,16 @@ class ContratLigne extends CommonObjectLine } // For backward compatibility if (empty($this->date_start)) { - $this->date_start = $this->date_ouverture_prevue; + $this->date_start = $this->date_start; } if (empty($this->date_start_real)) { - $this->date_start = $this->date_ouverture; + $this->date_start_real = $this->date_start_real; } if (empty($this->date_end)) { - $this->date_start = $this->date_fin_validite; + $this->date_end = $this->date_end; } if (empty($this->date_end_real)) { - $this->date_start = $this->date_cloture; + $this->date_end_real = $this->date_end_real; } @@ -3312,40 +3342,41 @@ class ContratLigne extends CommonObjectLine // Update request $sql = "UPDATE ".MAIN_DB_PREFIX."contratdet SET"; - $sql .= " fk_contrat=".((int) $this->fk_contrat).","; - $sql .= " fk_product=".($this->fk_product ? "'".$this->db->escape($this->fk_product)."'" : 'null').","; - $sql .= " statut=".((int) $this->statut).","; - $sql .= " label='".$this->db->escape($this->label)."',"; - $sql .= " description='".$this->db->escape($this->description)."',"; - $sql .= " date_commande=".($this->date_commande != '' ? "'".$this->db->idate($this->date_commande)."'" : "null").","; - $sql .= " date_ouverture_prevue=".($this->date_ouverture_prevue != '' ? "'".$this->db->idate($this->date_ouverture_prevue)."'" : "null").","; - $sql .= " date_ouverture=".($this->date_ouverture != '' ? "'".$this->db->idate($this->date_ouverture)."'" : "null").","; - $sql .= " date_fin_validite=".($this->date_fin_validite != '' ? "'".$this->db->idate($this->date_fin_validite)."'" : "null").","; - $sql .= " date_cloture=".($this->date_cloture != '' ? "'".$this->db->idate($this->date_cloture)."'" : "null").","; - $sql .= " vat_src_code='".$this->db->escape($this->vat_src_code)."',"; - $sql .= " tva_tx=".price2num($this->tva_tx).","; - $sql .= " localtax1_tx=".price2num($this->localtax1_tx).","; - $sql .= " localtax2_tx=".price2num($this->localtax2_tx).","; - $sql .= " qty=".price2num($this->qty).","; - $sql .= " remise_percent=".price2num($this->remise_percent).","; - $sql .= " remise=".($this->remise ?price2num($this->remise) : "null").","; - $sql .= " fk_remise_except=".($this->fk_remise_except > 0 ? $this->fk_remise_except : "null").","; - $sql .= " subprice=".($this->subprice != '' ? $this->subprice : "null").","; - $sql .= " price_ht=".($this->price_ht != '' ? $this->price_ht : "null").","; - $sql .= " total_ht=".$this->total_ht.","; - $sql .= " total_tva=".$this->total_tva.","; - $sql .= " total_localtax1=".$this->total_localtax1.","; - $sql .= " total_localtax2=".$this->total_localtax2.","; - $sql .= " total_ttc=".$this->total_ttc.","; - $sql .= " fk_product_fournisseur_price=".(!empty($this->fk_fournprice) ? $this->fk_fournprice : "NULL").","; - $sql .= " buy_price_ht='".price2num($this->pa_ht)."',"; - $sql .= " info_bits='".$this->db->escape($this->info_bits)."',"; - $sql .= " fk_user_author=".($this->fk_user_author >= 0 ? $this->fk_user_author : "NULL").","; - $sql .= " fk_user_ouverture=".($this->fk_user_ouverture > 0 ? $this->fk_user_ouverture : "NULL").","; - $sql .= " fk_user_cloture=".($this->fk_user_cloture > 0 ? $this->fk_user_cloture : "NULL").","; - $sql .= " commentaire='".$this->db->escape($this->commentaire)."',"; - $sql .= " fk_unit=".(!$this->fk_unit ? 'NULL' : $this->fk_unit); - $sql .= " WHERE rowid=".((int) $this->id); + $sql .= " fk_contrat = ".((int) $this->fk_contrat).","; + $sql .= " fk_product = ".($this->fk_product ? ((int) $this->fk_product) : 'null').","; + $sql .= " statut = ".((int) $this->statut).","; + $sql .= " label = '".$this->db->escape($this->label)."',"; + $sql .= " description = '".$this->db->escape($this->description)."',"; + $sql .= " date_commande = ".($this->date_commande != '' ? "'".$this->db->idate($this->date_commande)."'" : "null").","; + $sql .= " date_ouverture_prevue = ".($this->date_start != '' ? "'".$this->db->idate($this->date_start)."'" : "null").","; + $sql .= " date_ouverture = ".($this->date_start_real != '' ? "'".$this->db->idate($this->date_start_real)."'" : "null").","; + $sql .= " date_fin_validite = ".($this->date_end != '' ? "'".$this->db->idate($this->date_end)."'" : "null").","; + $sql .= " date_cloture = ".($this->date_end_real != '' ? "'".$this->db->idate($this->date_end_real)."'" : "null").","; + $sql .= " vat_src_code = '".$this->db->escape($this->vat_src_code)."',"; + $sql .= " tva_tx = ".price2num($this->tva_tx).","; + $sql .= " localtax1_tx = ".price2num($this->localtax1_tx).","; + $sql .= " localtax2_tx = ".price2num($this->localtax2_tx).","; + $sql .= " qty = ".price2num($this->qty).","; + $sql .= " remise_percent = ".price2num($this->remise_percent).","; + $sql .= " remise = ".($this->remise ?price2num($this->remise) : "null").","; + $sql .= " fk_remise_except = ".($this->fk_remise_except > 0 ? $this->fk_remise_except : "null").","; + $sql .= " subprice = ".($this->subprice != '' ? $this->subprice : "null").","; + $sql .= " price_ht = ".($this->price_ht != '' ? $this->price_ht : "null").","; + $sql .= " total_ht = ".$this->total_ht.","; + $sql .= " total_tva = ".$this->total_tva.","; + $sql .= " total_localtax1 = ".$this->total_localtax1.","; + $sql .= " total_localtax2 = ".$this->total_localtax2.","; + $sql .= " total_ttc = ".$this->total_ttc.","; + $sql .= " fk_product_fournisseur_price = ".(!empty($this->fk_fournprice) ? $this->fk_fournprice : "NULL").","; + $sql .= " buy_price_ht = '".price2num($this->pa_ht)."',"; + $sql .= " info_bits = '".$this->db->escape($this->info_bits)."',"; + $sql .= " fk_user_author = ".($this->fk_user_author >= 0 ? $this->fk_user_author : "NULL").","; + $sql .= " fk_user_ouverture = ".($this->fk_user_ouverture > 0 ? $this->fk_user_ouverture : "NULL").","; + $sql .= " fk_user_cloture = ".($this->fk_user_cloture > 0 ? $this->fk_user_cloture : "NULL").","; + $sql .= " commentaire = '".$this->db->escape($this->commentaire)."',"; + $sql .= " fk_unit = ".(!$this->fk_unit ? 'NULL' : $this->fk_unit).","; + $sql .= " rang = ".(empty($this->rang) ? '0' : (int) $this->rang); + $sql .= " WHERE rowid = ".((int) $this->id); dol_syslog(get_class($this)."::update", LOG_DEBUG); $resql = $this->db->query($sql); @@ -3361,13 +3392,13 @@ class ContratLigne extends CommonObjectLine } } - // If we change a planned date (start or end), sync dates for all services + // If we change a planned date (start or end) of one contract line, sync dates for all other services too if (!$error && !empty($conf->global->CONTRACT_SYNC_PLANNED_DATE_OF_SERVICES)) { dol_syslog(get_class($this)."::update CONTRACT_SYNC_PLANNED_DATE_OF_SERVICES is on so we update date for all lines", LOG_DEBUG); - if ($this->date_ouverture_prevue != $this->oldcopy->date_ouverture_prevue) { + if ($this->date_start != $this->oldcopy->date_start) { $sql = 'UPDATE '.MAIN_DB_PREFIX.'contratdet SET'; - $sql .= " date_ouverture_prevue = ".($this->date_ouverture_prevue != '' ? "'".$this->db->idate($this->date_ouverture_prevue)."'" : "null"); + $sql .= " date_ouverture_prevue = ".($this->date_start != '' ? "'".$this->db->idate($this->date_start)."'" : "null"); $sql .= " WHERE fk_contrat = ".((int) $this->fk_contrat); $resql = $this->db->query($sql); @@ -3376,9 +3407,9 @@ class ContratLigne extends CommonObjectLine $this->error = "Error ".$this->db->lasterror(); } } - if ($this->date_fin_validite != $this->oldcopy->date_fin_validite) { + if ($this->date_end != $this->oldcopy->date_end) { $sql = 'UPDATE '.MAIN_DB_PREFIX.'contratdet SET'; - $sql .= " date_fin_validite = ".($this->date_fin_validite != '' ? "'".$this->db->idate($this->date_fin_validite)."'" : "null"); + $sql .= " date_fin_validite = ".($this->date_end != '' ? "'".$this->db->idate($this->date_end)."'" : "null"); $sql .= " WHERE fk_contrat = ".((int) $this->fk_contrat); $resql = $this->db->query($sql); @@ -3463,11 +3494,12 @@ class ContratLigne extends CommonObjectLine $sql .= " localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, remise_percent, subprice,"; $sql .= " total_ht, total_tva, total_localtax1, total_localtax2, total_ttc,"; $sql .= " info_bits,"; + $sql .= " rang,"; $sql .= " price_ht, remise, fk_product_fournisseur_price, buy_price_ht"; - if ($this->date_ouverture_prevue > 0) { + if ($this->date_start > 0) { $sql .= ",date_ouverture_prevue"; } - if ($this->date_fin_validite > 0) { + if ($this->date_end > 0) { $sql .= ",date_fin_validite"; } $sql .= ") VALUES ($this->fk_contrat, '', '".$this->db->escape($this->description)."',"; @@ -3482,6 +3514,7 @@ class ContratLigne extends CommonObjectLine $sql .= " ".price2num($this->remise_percent).",".price2num($this->subprice).","; $sql .= " ".price2num($this->total_ht).",".price2num($this->total_tva).",".price2num($this->total_localtax1).",".price2num($this->total_localtax2).",".price2num($this->total_ttc).","; $sql .= " '".$this->db->escape($this->info_bits)."',"; + $sql .= " ".(empty($this->rang) ? '0' : (int) $this->rang).","; $sql .= " ".price2num($this->price_ht).",".price2num($this->remise).","; if ($this->fk_fournprice > 0) { $sql .= ' '.((int) $this->fk_fournprice).','; @@ -3493,11 +3526,11 @@ class ContratLigne extends CommonObjectLine } else { $sql .= ' null'; } - if ($this->date_ouverture > 0) { - $sql .= ",'".$this->db->idate($this->date_ouverture)."'"; + if ($this->date_start > 0) { + $sql .= ",'".$this->db->idate($this->date_start)."'"; } - if ($this->date_cloture > 0) { - $sql .= ",'".$this->db->idate($this->date_cloture)."'"; + if ($this->date_end > 0) { + $sql .= ",'".$this->db->idate($this->date_end)."'"; } $sql .= ")"; @@ -3554,12 +3587,19 @@ class ContratLigne extends CommonObjectLine $this->db->begin(); - $sql = "UPDATE ".MAIN_DB_PREFIX."contratdet SET statut = ".ContratLigne::STATUS_OPEN.","; - $sql .= " date_ouverture = ".(dol_strlen($date) != 0 ? "'".$this->db->idate($date)."'" : "null").","; + $this->statut = ContratLigne::STATUS_OPEN; + $this->date_start = $date; + $this->date_end = $date_end; + $this->fk_user_ouverture = $user->id; + $this->date_end_real = null; + $this->commentaire = $comment; + + $sql = "UPDATE ".MAIN_DB_PREFIX."contratdet SET statut = ".$this->statut.","; + $sql .= " date_ouverture = ".(dol_strlen($this->date_start_real) != 0 ? "'".$this->db->idate($this->date_start_real)."'" : "null").","; if ($date_end >= 0) { - $sql .= " date_fin_validite = ".(dol_strlen($date_end) != 0 ? "'".$this->db->idate($date_end)."'" : "null").","; + $sql .= " date_fin_validite = ".(dol_strlen($this->date_end) != 0 ? "'".$this->db->idate($this->date_end)."'" : "null").","; } - $sql .= " fk_user_ouverture = ".((int) $user->id).","; + $sql .= " fk_user_ouverture = ".((int) $this->fk_user_ouverture).","; $sql .= " date_cloture = null,"; $sql .= " commentaire = '".$this->db->escape($comment)."'"; $sql .= " WHERE rowid = ".((int) $this->id)." AND (statut = ".ContratLigne::STATUS_INITIAL." OR statut = ".ContratLigne::STATUS_CLOSED.")"; @@ -3575,13 +3615,6 @@ class ContratLigne extends CommonObjectLine // End call triggers if (!$error) { - $this->statut = ContratLigne::STATUS_OPEN; - $this->date_ouverture = $date; - $this->date_fin_validite = $date_end; - $this->fk_user_ouverture = $user->id; - $this->date_cloture = null; - $this->commentaire = $comment; - $this->db->commit(); return 1; } else { @@ -3600,18 +3633,18 @@ class ContratLigne extends CommonObjectLine * Close a contract line * * @param User $user Objet User who close contract - * @param int $date_end Date end + * @param int $date_end_real Date end * @param string $comment A comment typed by user * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers * @return int <0 if KO, >0 if OK */ - public function close_line($user, $date_end, $comment = '', $notrigger = 0) + public function close_line($user, $date_end_real, $comment = '', $notrigger = 0) { // phpcs:enable global $langs, $conf; // Update object - $this->date_cloture = $date_end; + $this->date_cloture = $date_end_real; $this->fk_user_cloture = $user->id; $this->commentaire = $comment; @@ -3622,7 +3655,7 @@ class ContratLigne extends CommonObjectLine $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."contratdet SET statut = ".((int) ContratLigne::STATUS_CLOSED).","; - $sql .= " date_cloture = '".$this->db->idate($date_end)."',"; + $sql .= " date_cloture = '".$this->db->idate($date_end_real)."',"; $sql .= " fk_user_cloture = ".((int) $user->id).","; $sql .= " commentaire = '".$this->db->escape($comment)."'"; $sql .= " WHERE rowid = ".((int) $this->id)." AND statut = ".((int) ContratLigne::STATUS_OPEN); diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php index 8ceefe2f168..e5557c28a5b 100644 --- a/htdocs/contrat/contact.php +++ b/htdocs/contrat/contact.php @@ -54,6 +54,8 @@ $object = new Contrat($db); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('contractcard', 'globalcard')); +$permissiontoadd = $user->rights->contrat->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php + /* * Actions @@ -153,37 +155,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->contrat->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/contrat/document.php b/htdocs/contrat/document.php index 19248769ef8..652738f10b5 100644 --- a/htdocs/contrat/document.php +++ b/htdocs/contrat/document.php @@ -139,40 +139,28 @@ if ($object->id) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherContracts").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->contrat->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 8c24c4e65ee..c1b97e65e98 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -251,7 +251,7 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { } // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; @@ -329,7 +329,7 @@ if ($search_user > 0) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= " GROUP BY c.rowid, c.ref, c.datec, c.tms, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public, c.entity,"; $sql .= ' s.rowid, s.nom, s.name_alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client, s.status, s.logo,'; @@ -347,7 +347,7 @@ $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $obj $sql .= $hookmanager->resPrint; // Add HAVING from hooks $parameters = array('search_dfyear' => $search_dfyear, 'search_op2df'=>$search_op2df); -$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { if ($search_dfyear > 0 && $search_op2df) { if ($search_op2df == '<=') { @@ -376,7 +376,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { } } } else { - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'contratdet as cd ON c.rowid = cd.fk_contrat/', '', $sqlforcount); $sqlforcount = preg_replace('/LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=cd.fk_product/', '', $sqlforcount); $sqlforcount = preg_replace('/AND cp.fk_categorie = '.((int) $search_product_category).'/', '', $sqlforcount); @@ -582,7 +582,7 @@ if (isModEnabled('categorie') && $user->rights->categorie->lire && ($user->right } $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -674,7 +674,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields); -$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['c.datec']['checked'])) { @@ -748,7 +748,7 @@ if (!empty($arrayfields['c.date_contrat']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); -$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['c.datec']['checked'])) { print_liste_field_titre($arrayfields['c.datec']['label'], $_SERVER["PHP_SELF"], "c.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); @@ -943,7 +943,7 @@ while ($i < min($num, $limit)) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation if (!empty($arrayfields['c.datec']['checked'])) { @@ -1011,7 +1011,7 @@ if ($num == 0) { $db->free($resql); $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); -$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'; diff --git a/htdocs/contrat/note.php b/htdocs/contrat/note.php index 391b10718ce..f17cc11f748 100644 --- a/htdocs/contrat/note.php +++ b/htdocs/contrat/note.php @@ -54,6 +54,7 @@ $result = restrictedArea($user, 'contrat', $id); $object = new Contrat($db); $object->fetch($id, $ref); +$permissiontoadd = $user->rights->contrat->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php $permissionnote = $user->rights->contrat->creer; // Used by the include of actions_setnotes.inc.php @@ -110,37 +111,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); // Thirdparty - $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
'.$langs->trans('Project').' '; - if ($user->rights->contrat->creer) { + $morehtmlref .= '
'; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
'; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
'; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index f11058312d1..4e2cd2873b6 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -79,7 +79,7 @@ if (GETPOST('sendit', 'alpha') && !empty($conf->global->MAIN_UPLOAD_DOC) && !emp } $allowoverwrite = (GETPOST('overwritefile', 'int') ? 1 : 0); - if (!empty($upload_dirold) && !empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (!empty($upload_dirold) && getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $result = dol_add_file_process($upload_dirold, $allowoverwrite, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs, $object); } elseif (!empty($upload_dir)) { $result = dol_add_file_process($upload_dir, $allowoverwrite, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs, $object); @@ -160,7 +160,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes' && !empty($permissionto } if (is_object($object) && $object->id > 0) { - if ($backtopage) { + if (!empty($backtopage)) { header('Location: '.$backtopage); exit; } else { diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index de586e80e9f..49cc6fa873c 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -41,6 +41,9 @@ if (empty($objectclass) || empty($uploaddir)) { dol_print_error(null, 'include of actions_massactions.inc.php is done but var $objectclass or $uploaddir was not defined'); exit; } +if (empty($massaction)) { + $massaction = ''; +} // For backward compatibility if (!empty($permtoread) && empty($permissiontoread)) { @@ -53,14 +56,13 @@ if (!empty($permtodelete) && empty($permissiontodelete)) { $permissiontodelete = $permtodelete; } - // Mass actions. Controls on number of lines checked. $maxformassaction = (empty($conf->global->MAIN_LIMIT_FOR_MASS_ACTIONS) ? 1000 : $conf->global->MAIN_LIMIT_FOR_MASS_ACTIONS); -if (!empty($massaction) && is_array($toselect) && count($toselect) < 1) { +if ($massaction && is_array($toselect) && count($toselect) < 1) { $error++; setEventMessages($langs->trans("NoRecordSelected"), null, "warnings"); } -if (!$error && is_array($toselect) && count($toselect) > $maxformassaction) { +if (!$error && isset($toselect) && is_array($toselect) && count($toselect) > $maxformassaction) { setEventMessages($langs->trans('TooManyRecordForMassAction', $maxformassaction), null, 'errors'); $error++; } @@ -1238,6 +1240,45 @@ if (!$error && ($action == 'affecttag' && $confirm == 'yes') && $permissiontoadd } } +if (!$error && ($action == 'setsupervisor' && $confirm == 'yes') && $permissiontoadd) { + $db->begin(); + $supervisortoset=GETPOST('supervisortoset'); + if (!empty($supervisortoset)) { + foreach ($toselect as $toselectid) { + $result = $object->fetch($toselectid); + //var_dump($contcats);exit; + if ($result > 0) { + $object->fk_user = $supervisortoset; + $res = $object->update($user); + if ($res > 0) { + $nbok++; + } else { + setEventMessages($object->error, $object->errors, 'errors'); + } + } else { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + break; + } + } + } else { + setEventMessage('UserNotFound', 'errors'); + $error++; + } + + if (!$error) { + if ($nbok > 1) { + setEventMessages($langs->trans("RecordsModified", $nbok), null); + } else { + setEventMessages($langs->trans("RecordsModified", $nbok), null); + } + $db->commit(); + $toselect=array(); + } else { + $db->rollback(); + } +} + if (!$error && ($massaction == 'enable' || ($action == 'enable' && $confirm == 'yes')) && $permissiontoadd) { $db->begin(); @@ -1564,7 +1605,7 @@ if (!$error && ($massaction == 'increaseholiday' || ($action == 'increaseholiday } } -$parameters['toselect'] = $toselect; +$parameters['toselect'] = (empty($toselect) ? array() : $toselect); $parameters['uploaddir'] = $uploaddir; $parameters['massaction'] = $massaction; $parameters['diroutputmassaction'] = isset($diroutputmassaction) ? $diroutputmassaction : null; diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php index 3749b403469..772d2b7ed5d 100644 --- a/htdocs/core/actions_sendmails.inc.php +++ b/htdocs/core/actions_sendmails.inc.php @@ -108,6 +108,10 @@ if (($action == 'send' || $action == 'relance') && !GETPOST('addfile') && !GETPO $trackid = GETPOST('trackid', 'aZ09'); } + // Set tmp user directory (used to convert images embedded as img src=data:image) + $vardir = $conf->user->dir_output."/".$user->id; + $upload_dir_tmp = $vardir.'/temp'; // TODO Add $keytoavoidconflict in upload_dir path + $subject = ''; //$actionmsg = ''; $actionmsg2 = ''; @@ -359,7 +363,7 @@ if (($action == 'send' || $action == 'relance') && !GETPOST('addfile') && !GETPO if (empty($sendcontext)) { $sendcontext = 'standard'; } - $mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1, '', '', $trackid, '', $sendcontext); + $mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1, '', '', $trackid, '', $sendcontext, '', $upload_dir_tmp); if (!empty($mailfile->error) || !empty($mailfile->errors)) { setEventMessages($mailfile->error, $mailfile->errors, 'errors'); diff --git a/htdocs/core/ajax/ajaxdirtree.php b/htdocs/core/ajax/ajaxdirtree.php index 7daa715bbb9..c8b42bbf0e8 100644 --- a/htdocs/core/ajax/ajaxdirtree.php +++ b/htdocs/core/ajax/ajaxdirtree.php @@ -275,9 +275,14 @@ if (empty($conf->use_javascript_ajax) || !empty($conf->global->MAIN_ECM_DISABLE_ print '
'; // Nb of docs - print ''; } + // Note private + if (!empty($arrayfields['t.note_private']['checked'])) { + print ''; + } + // Role if (!empty($arrayfields['sc.role']['checked'])) { print ''; // Customer proposals - if (isModEnabled("propal") && $user->rights->propale->lire) { + if (isModEnabled("propal") && $user->rights->propal->lire) { $nblines++; $ret = $product->load_stats_propale($socid); if ($ret < 0) { @@ -430,7 +448,7 @@ function show_stats_for_company($product, $socid) print ''; print ''; } - // Customer orders + // Sales orders if (isModEnabled('commande') && $user->rights->commande->lire) { $nblines++; $ret = $product->load_stats_commande($socid); diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index a7cd6520abb..d427f87189a 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -311,7 +311,7 @@ function project_prepare_head(Project $project, $moreparam = '') $h++; } - $head[$h][0] = DOL_URL_ROOT.'/projet/info.php?id='.$project->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/messaging.php?id='.$project->id; $head[$h][1] = $langs->trans("Events"); if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) { $head[$h][1] .= '/'; diff --git a/htdocs/core/lib/sendings.lib.php b/htdocs/core/lib/sendings.lib.php index ffc455ab5f1..6d9598a04ae 100644 --- a/htdocs/core/lib/sendings.lib.php +++ b/htdocs/core/lib/sendings.lib.php @@ -180,7 +180,7 @@ function delivery_prepare_head($object) require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($object->ref); + $upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($tmpobject->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks = Link::count($db, $tmpobject->element, $tmpobject->id); $head[$h][0] = DOL_URL_ROOT.'/expedition/document.php?id='.$tmpobject->id; @@ -341,14 +341,14 @@ function show_list_sending_receive($origin, $origin_id, $filter = '') $product_static->status_batch = $objp->product_tobatch; $text = $product_static->getNomUrl(1); $text .= ' - '.$label; - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($objp->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($objp->description)); print $form->textwithtooltip($text, $description, 3, '', '', $i); // Show range print_date_range($objp->date_start, $objp->date_end); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($objp->description) && $objp->description != $objp->product) ? '
'.dol_htmlentitiesbr($objp->description) : ''; } diff --git a/htdocs/core/lib/signature.lib.php b/htdocs/core/lib/signature.lib.php index 070cbe0801f..9cc8f1f03a9 100644 --- a/htdocs/core/lib/signature.lib.php +++ b/htdocs/core/lib/signature.lib.php @@ -131,6 +131,21 @@ function getOnlineSignatureUrl($mode, $type, $ref = '', $localorexternal = 1) } else { $out .= '&securekey='.dol_hash($securekeyseed.$type.$ref.(!isModEnabled('multicompany') ? '' : $object->entity), '0'); } + } elseif ($type == 'fichinter') { + $securekeyseed = isset($conf->global->FICHINTER_ONLINE_SIGNATURE_SECURITY_TOKEN) ? $conf->global->FICHINTER_ONLINE_SIGNATURE_SECURITY_TOKEN : ''; + $out = $urltouse.'/public/onlinesign/newonlinesign.php?source=fichinter&ref='.($mode ? '' : ''); + if ($mode == 1) { + $out .= 'fichinter_ref'; + } + if ($mode == 0) { + $out .= urlencode($ref); + } + $out .= ($mode ? '' : ''); + if ($mode == 1) { + $out .= "hash('".$securekeyseed."' + '".$type."' + fichinter_ref)"; + } else { + $out .= '&securekey='.dol_hash($securekeyseed.$type.$ref.(!isModEnabled('multicompany') ? '' : $object->entity), '0'); + } } // For multicompany diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index a0602dfd74e..29ced3591a1 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -174,10 +174,18 @@ function tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $di $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } $sql .= " AND f.rowid = d.".$fk_facture; $sql .= " AND s.rowid = f.fk_soc"; @@ -222,10 +230,18 @@ function tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $di $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } $sql .= " AND f.rowid = d.".$fk_facture; $sql .= " AND s.rowid = f.fk_soc"; @@ -359,10 +375,18 @@ function tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $di $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } $sql .= " AND f.rowid = d.".$fk_facture; $sql .= " AND s.rowid = f.fk_soc"; @@ -407,10 +431,18 @@ function tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $di $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } $sql .= " AND f.rowid = d.".$fk_facture; $sql .= " AND s.rowid = f.fk_soc"; @@ -730,10 +762,18 @@ function tax_by_rate($type, $db, $y, $q, $date_start, $date_end, $modetax, $dire $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } if ($y && $m) { $sql .= " AND f.datef >= '".$db->idate(dol_get_first_day($y, $m, false))."'"; @@ -776,10 +816,18 @@ function tax_by_rate($type, $db, $y, $q, $date_start, $date_end, $modetax, $dire $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } if ($y && $m) { $sql .= " AND pa.datep >= '".$db->idate(dol_get_first_day($y, $m, false))."'"; @@ -915,10 +963,18 @@ function tax_by_rate($type, $db, $y, $q, $date_start, $date_end, $modetax, $dire $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } if ($y && $m) { $sql .= " AND f.datef >= '".$db->idate(dol_get_first_day($y, $m, false))."'"; @@ -961,10 +1017,18 @@ function tax_by_rate($type, $db, $y, $q, $date_start, $date_end, $modetax, $dire $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; $sql .= " WHERE f.entity IN (".getEntity($invoicetable).")"; $sql .= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (0,1,2,5)"; + if ($direction == 'buy') { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } else { - $sql .= " AND f.type IN (0,1,2,3,5)"; + if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (0,1,2,5)"; + } else { + $sql .= " AND f.type IN (0,1,2,3,5)"; + } } if ($y && $m) { $sql .= " AND pa.datep >= '".$db->idate(dol_get_first_day($y, $m, false))."'"; diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 9223c1c4dd8..5d0d691228e 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -268,719 +268,3 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ print '
'; } - - - -/** - * Show html area with actions for ticket messaging. - * Note: Global parameter $param must be defined. - * - * @param Conf $conf Object conf - * @param Translate $langs Object langs - * @param DoliDB $db Object db - * @param mixed $filterobj Filter on object Adherent|Societe|Project|Product|CommandeFournisseur|Dolresource|Ticket|... to list events linked to an object - * @param Contact $objcon Filter on object contact to filter events on a contact - * @param int $noprint Return string but does not output it - * @param string $actioncode Filter on actioncode - * @param string $donetodo Filter on event 'done' or 'todo' or ''=nofilter (all). - * @param array $filters Filter on other fields - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @return string|void Return html part or void if noprint is 1 - */ -function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $noprint = 0, $actioncode = '', $donetodo = 'done', $filters = array(), $sortfield = 'a.datep,a.id', $sortorder = 'DESC') -{ - global $user, $conf; - global $form; - - global $param, $massactionbutton; - - dol_include_once('/comm/action/class/actioncomm.class.php'); - - // Check parameters - if (!is_object($filterobj) && !is_object($objcon)) { - dol_print_error('', 'BadParameter'); - } - - $histo = array(); - $numaction = 0; - $now = dol_now(); - - $sortfield_list = explode(',', $sortfield); - $sortfield_label_list = array('a.id' => 'id', 'a.datep' => 'dp', 'a.percent' => 'percent'); - $sortfield_new_list = array(); - foreach ($sortfield_list as $sortfield_value) { - $sortfield_new_list[] = $sortfield_label_list[trim($sortfield_value)]; - } - $sortfield_new = implode(',', $sortfield_new_list); - - if (isModEnabled('agenda')) { - // Search histo on actioncomm - if (is_object($objcon) && $objcon->id > 0) { - $sql = "SELECT DISTINCT a.id, a.label as label,"; - } else { - $sql = "SELECT a.id, a.label as label,"; - } - $sql .= " a.datep as dp,"; - $sql .= " a.note as message,"; - $sql .= " a.datep2 as dp2,"; - $sql .= " a.percent as percent, 'action' as type,"; - $sql .= " a.fk_element, a.elementtype,"; - $sql .= " a.fk_contact,"; - $sql .= " c.code as acode, c.libelle as alabel, c.picto as apicto,"; - $sql .= " u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; - if (is_object($filterobj) && get_class($filterobj) == 'Societe') { - $sql .= ", sp.lastname, sp.firstname"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { - $sql .= ", m.lastname, m.firstname"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { - $sql .= ", o.ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { - $sql .= ", o.ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { - $sql .= ", o.ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { - $sql .= ", o.ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { - $sql .= ", o.ref"; - } - $sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; - - $force_filter_contact = false; - if (is_object($objcon) && $objcon->id > 0) { - $force_filter_contact = true; - $sql .= " INNER JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; - $sql .= " AND r.element_type = '".$db->escape($objcon->table_element)."' AND r.fk_element = ".((int) $objcon->id); - } - - if (is_object($filterobj) && get_class($filterobj) == 'Societe') { - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON a.fk_contact = sp.rowid"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Dolresource') { - $sql .= " INNER JOIN ".MAIN_DB_PREFIX."element_resources as er"; - $sql .= " ON er.resource_type = 'dolresource'"; - $sql .= " AND er.element_id = a.id"; - $sql .= " AND er.resource_id = ".((int) $filterobj->id); - } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { - $sql .= ", ".MAIN_DB_PREFIX."adherent as m"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { - $sql .= ", ".MAIN_DB_PREFIX."commande_fournisseur as o"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { - $sql .= ", ".MAIN_DB_PREFIX."product as o"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { - $sql .= ", ".MAIN_DB_PREFIX."ticket as o"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { - $sql .= ", ".MAIN_DB_PREFIX."bom_bom as o"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { - $sql .= ", ".MAIN_DB_PREFIX."contrat as o"; - } - - $sql .= " WHERE a.entity IN (".getEntity('agenda').")"; - if ($force_filter_contact === false) { - if (is_object($filterobj) && in_array(get_class($filterobj), array('Societe', 'Client', 'Fournisseur')) && $filterobj->id) { - $sql .= " AND a.fk_soc = ".((int) $filterobj->id); - } elseif (is_object($filterobj) && get_class($filterobj) == 'Project' && $filterobj->id) { - $sql .= " AND a.fk_project = ".((int) $filterobj->id); - } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { - $sql .= " AND a.fk_element = m.rowid AND a.elementtype = 'member'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { - $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { - $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'product'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { - $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'ticket'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { - $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'bom'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { - $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'contract'"; - if ($filterobj->id) { - $sql .= " AND a.fk_element = ".((int) $filterobj->id); - } - } - } - - // Condition on actioncode - if (!empty($actioncode)) { - if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) { - if ($actioncode == 'AC_NON_AUTO') { - $sql .= " AND c.type != 'systemauto'"; - } elseif ($actioncode == 'AC_ALL_AUTO') { - $sql .= " AND c.type = 'systemauto'"; - } else { - if ($actioncode == 'AC_OTH') { - $sql .= " AND c.type != 'systemauto'"; - } elseif ($actioncode == 'AC_OTH_AUTO') { - $sql .= " AND c.type = 'systemauto'"; - } - } - } else { - if ($actioncode == 'AC_NON_AUTO') { - $sql .= " AND c.type != 'systemauto'"; - } elseif ($actioncode == 'AC_ALL_AUTO') { - $sql .= " AND c.type = 'systemauto'"; - } else { - $sql .= " AND c.code = '".$db->escape($actioncode)."'"; - } - } - } - if ($donetodo == 'todo') { - $sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; - } elseif ($donetodo == 'done') { - $sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; - } - if (is_array($filters) && $filters['search_agenda_label']) { - $sql .= natural_search('a.label', $filters['search_agenda_label']); - } - } - - // Add also event from emailings. TODO This should be replaced by an automatic event ? May be it's too much for very large emailing. - if (isModEnabled('mailing') && !empty($objcon->email) - && (empty($actioncode) || $actioncode == 'AC_OTH_AUTO' || $actioncode == 'AC_EMAILING')) { - $langs->load("mails"); - - $sql2 = "SELECT m.rowid as id, m.titre as label, mc.date_envoi as dp, mc.date_envoi as dp2, '100' as percent, 'mailing' as type"; - $sql2 .= ", null as fk_element, '' as elementtype, null as contact_id"; - $sql2 .= ", 'AC_EMAILING' as acode, '' as alabel, '' as apicto"; - $sql2 .= ", u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; // User that valid action - if (is_object($filterobj) && get_class($filterobj) == 'Societe') { - $sql2 .= ", '' as lastname, '' as firstname"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { - $sql2 .= ", '' as lastname, '' as firstname"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { - $sql2 .= ", '' as ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { - $sql2 .= ", '' as ref"; - } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { - $sql2 .= ", '' as ref"; - } - $sql2 .= " FROM ".MAIN_DB_PREFIX."mailing as m, ".MAIN_DB_PREFIX."mailing_cibles as mc, ".MAIN_DB_PREFIX."user as u"; - $sql2 .= " WHERE mc.email = '".$db->escape($objcon->email)."'"; // Search is done on email. - $sql2 .= " AND mc.statut = 1"; - $sql2 .= " AND u.rowid = m.fk_user_valid"; - $sql2 .= " AND mc.fk_mailing=m.rowid"; - } - - if (!empty($sql) && !empty($sql2)) { - $sql = $sql." UNION ".$sql2; - } elseif (empty($sql) && !empty($sql2)) { - $sql = $sql2; - } - - // TODO Add limit in nb of results - if ($sql) { // May not be defined if module Agenda is not enabled and mailing module disabled too - $sql .= $db->order($sortfield_new, $sortorder); - - dol_syslog("ticket.lib::show_ticket_messaging", LOG_DEBUG); - $resql = $db->query($sql); - if ($resql) { - $i = 0; - $num = $db->num_rows($resql); - - while ($i < $num) { - $obj = $db->fetch_object($resql); - - if ($obj->type == 'action') { - $contactaction = new ActionComm($db); - $contactaction->id = $obj->id; - $result = $contactaction->fetchResources(); - if ($result < 0) { - dol_print_error($db); - setEventMessage("ticket.lib::show_ticket_messaging Error fetch ressource", 'errors'); - } - - //if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; - //elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; - $tododone = ''; - if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && $obj->datep > $now)) { - $tododone = 'todo'; - } - - $histo[$numaction] = array( - 'type'=>$obj->type, - 'tododone'=>$tododone, - 'id'=>$obj->id, - 'datestart'=>$db->jdate($obj->dp), - 'dateend'=>$db->jdate($obj->dp2), - 'note'=>$obj->label, - 'message'=>$obj->message, - 'percent'=>$obj->percent, - - 'userid'=>$obj->user_id, - 'login'=>$obj->user_login, - 'userfirstname'=>$obj->user_firstname, - 'userlastname'=>$obj->user_lastname, - 'userphoto'=>$obj->user_photo, - - 'contact_id'=>$obj->fk_contact, - 'socpeopleassigned' => $contactaction->socpeopleassigned, - 'lastname'=>$obj->lastname, - 'firstname'=>$obj->firstname, - 'fk_element'=>$obj->fk_element, - 'elementtype'=>$obj->elementtype, - // Type of event - 'acode'=>$obj->acode, - 'alabel'=>$obj->alabel, - 'libelle'=>$obj->alabel, // deprecated - 'apicto'=>$obj->apicto - ); - } else { - $histo[$numaction] = array( - 'type'=>$obj->type, - 'tododone'=>'done', - 'id'=>$obj->id, - 'datestart'=>$db->jdate($obj->dp), - 'dateend'=>$db->jdate($obj->dp2), - 'note'=>$obj->label, - 'message'=>$obj->message, - 'percent'=>$obj->percent, - 'acode'=>$obj->acode, - - 'userid'=>$obj->user_id, - 'login'=>$obj->user_login, - 'userfirstname'=>$obj->user_firstname, - 'userlastname'=>$obj->user_lastname, - 'userphoto'=>$obj->user_photo - ); - } - - $numaction++; - $i++; - } - } else { - dol_print_error($db); - } - } - - // Set $out to sow events - $out = ''; - - if (!isModEnabled('agenda')) { - $langs->loadLangs(array("admin", "errors")); - $out = info_admin($langs->trans("WarningModuleXDisabledSoYouMayMissEventHere", $langs->transnoentitiesnoconv("Module2400Name")), 0, 0, 'warning'); - } - - if (isModEnabled('agenda') || (isModEnabled('mailing') && !empty($objcon->email))) { - $delay_warning = $conf->global->MAIN_DELAY_ACTIONS_TODO * 24 * 60 * 60; - - require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; - include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; - require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; - - $formactions = new FormActions($db); - - $actionstatic = new ActionComm($db); - $userstatic = new User($db); - $contactstatic = new Contact($db); - $userGetNomUrlCache = array(); - - $out .= '
'; - $out .= '
'; - $out .= ''; - - if ($objcon && get_class($objcon) == 'Contact' && - (is_null($filterobj) || get_class($filterobj) == 'Societe')) { - $out .= ''; - } else { - $out .= ''; - } - if ($filterobj && get_class($filterobj) == 'Societe') { - $out .= ''; - } - - $out .= "\n"; - - $out .= '
'; - $out .= '
'; + print ''; + + print ''; + print ''; + + print ''; print ''; // Info + print ''; print '';*/ // Nb of docs + print ''; print ''; + + print ''; print ''; // Edit link + print ''; print ''; print ''; print ''; diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index 99003f00276..6342e08a34e 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -165,9 +165,10 @@ class FormActions * @param int $max Max number of record * @param string $moreparambacktopage More param for the backtopage * @param string $morehtmlcenter More html text on center of title line + * @param int $assignedtouser Assign event by default to this user id (will be ignored if not enough permissions) * @return int <0 if KO, >=0 if OK */ - public function showactions($object, $typeelement, $socid = 0, $forceshowtitle = 0, $morecss = 'listactions', $max = 0, $moreparambacktopage = '', $morehtmlcenter = '') + public function showactions($object, $typeelement, $socid = 0, $forceshowtitle = 0, $morecss = 'listactions', $max = 0, $moreparambacktopage = '', $morehtmlcenter = '', $assignedtouser = 0) { global $langs, $conf, $user; @@ -225,9 +226,21 @@ class FormActions $taskid = $object->id; } + $usercanaddaction = 0; + if (empty($assignedtouser) || $assignedtouser == $user->id) { + $usercanaddaction = $user->hasRight('agenda', 'myactions', 'create'); + $assignedtouser = 0; + } else { + $usercanaddaction = $user->hasRight('agenda', 'allactions', 'create'); + } + $newcardbutton = ''; - if (isModEnabled('agenda') && !empty($user->rights->agenda->myactions->create)) { - $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&token='.newToken().'&datep='.urlencode(dol_print_date(dol_now(), 'dayhourlog', 'tzuser')).'&origin='.urlencode($typeelement).'&originid='.((int) $object->id).((!empty($object->socid) && $object->socid > 0) ? '&socid='.((int) $object->socid) : ((!empty($socid) && $socid > 0) ? '&socid='.((int) $socid) : '')).($projectid > 0 ? '&projectid='.((int) $projectid) : '').($taskid > 0 ? '&taskid='.((int) $taskid) : '').'&backtopage='.urlencode($urlbacktopage); + if (isModEnabled('agenda') && $usercanaddaction) { + $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&token='.newToken().'&datep='.urlencode(dol_print_date(dol_now(), 'dayhourlog', 'tzuser')); + $url .= '&origin='.urlencode($typeelement).'&originid='.((int) $object->id).((!empty($object->socid) && $object->socid > 0) ? '&socid='.((int) $object->socid) : ((!empty($socid) && $socid > 0) ? '&socid='.((int) $socid) : '')); + $url .= ($projectid > 0 ? '&projectid='.((int) $projectid) : '').($taskid > 0 ? '&taskid='.((int) $taskid) : ''); + $url .= ($assignedtouser > 0 ? '&assignedtouser='.$assignedtouser : ''); + $url .= '&backtopage='.urlencode($urlbacktopage); $newcardbutton .= dolGetButtonTitle($langs->trans("AddEvent"), '', 'fa fa-plus-circle', $url); } diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index a0067925334..1b684fdc236 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -837,18 +837,27 @@ class FormFile } // Show file name with link to download + $imgpreview = $this->showPreview($file, $modulepart, $relativepath, 0, $param);; + $out .= ''; // Show file size @@ -879,7 +888,7 @@ class FormFile $fulllink = $urlwithroot.'/document.php'.($paramlink ? '?'.$paramlink : ''); - $out .= img_picto($langs->trans("FileSharedViaALink"), 'globe').' '; + $out .= ''.img_picto($langs->trans("FileSharedViaALink"), 'globe').' '; $out .= ''; $out .= ajax_autoselect('downloadlink'.$file['rowid']); } else { @@ -1146,7 +1155,7 @@ class FormFile } } // For backward compatiblity, we detect file stored into an old path - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO) && $filearray[0]['level1name'] == 'photos') { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO') && $filearray[0]['level1name'] == 'photos') { $relativepath = preg_replace('/^.*\/produit\//', '', $filearray[0]['path']).'/'; } @@ -1407,7 +1416,7 @@ class FormFile $fulllink = $urlwithroot.'/document.php'.($paramlink ? '?'.$paramlink : ''); - print img_picto($langs->trans("FileSharedViaALink"), 'globe').' '; + print ''.img_picto($langs->trans("FileSharedViaALink"), 'globe').' '; print ''; } else { //print ''.$langs->trans("FileNotShared").''; diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 5d8fd8f25b2..41cf2482f9a 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -1193,7 +1193,7 @@ class FormMail extends Form $out .= "\n"; } else { $out = '\n"; } return $out; @@ -1284,7 +1284,7 @@ class FormMail extends Form * @param int $id Id of template to get, or -1 for first found with position 0, or 0 for first found whatever is position (priority order depends on lang provided or not) or -2 for exact match with label (no answer if not found) * @param int $active 1=Only active template, 0=Only disabled, -1=All * @param string $label Label of template to get - * @return ModelMail|integer One instance of ModelMail or -1 if error + * @return ModelMail|integer One instance of ModelMail or < 0 if error */ public function getEMailTemplate($dbs, $type_template, $user, $outputlangs, $id = 0, $active = 1, $label = '') { @@ -1395,8 +1395,6 @@ class FormMail extends Form $defaultmessage = $outputlangs->transnoentities("PredefinedMailContentSendFichInter"); } elseif ($type_template == 'actioncomm_send') { $defaultmessage = $outputlangs->transnoentities("PredefinedMailContentSendActionComm"); - } elseif ($type_template == 'thirdparty') { - $defaultmessage = $outputlangs->transnoentities("PredefinedMailContentThirdparty"); } elseif (!empty($type_template)) { $defaultmessage = $outputlangs->transnoentities("PredefinedMailContentGeneric"); } diff --git a/htdocs/core/class/html.formmargin.class.php b/htdocs/core/class/html.formmargin.class.php index 38ec91ff143..513d964014a 100644 --- a/htdocs/core/class/html.formmargin.class.php +++ b/htdocs/core/class/html.formmargin.class.php @@ -100,7 +100,7 @@ class FormMargin $pv = $line->total_ht; $pa_ht = ($pv < 0 ? -$line->pa_ht : $line->pa_ht); // We choosed to have line->pa_ht always positive in database, so we guess the correct sign if (($object->element == 'facture' && $object->type == $object::TYPE_SITUATION) - || ($object->element == 'facture' && $object->type == $object::TYPE_CREDIT_NOTE && $conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE && $object->situation_counter > 0)) { + || ($object->element == 'facture' && $object->type == $object::TYPE_CREDIT_NOTE && getDolGlobalInt('INVOICE_USE_SITUATION_CREDIT_NOTE') && $object->situation_counter > 0)) { $pa = $line->qty * $pa_ht * ($line->situation_percent / 100); } else { $pa = $line->qty * $pa_ht; @@ -108,7 +108,7 @@ class FormMargin // calcul des marges if (isset($line->fk_remise_except) && isset($conf->global->MARGIN_METHODE_FOR_DISCOUNT)) { // remise - if ($conf->global->MARGIN_METHODE_FOR_DISCOUNT == '1') { // remise globale considérée comme produit + if (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '1') { // remise globale considérée comme produit $marginInfos['pa_products'] += $pa; $marginInfos['pv_products'] += $pv; $marginInfos['pa_total'] += $pa; @@ -120,7 +120,7 @@ class FormMargin //} //else $marginInfos['margin_on_products'] += $pv - $pa; - } elseif ($conf->global->MARGIN_METHODE_FOR_DISCOUNT == '2') { // remise globale considérée comme service + } elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '2') { // remise globale considérée comme service $marginInfos['pa_services'] += $pa; $marginInfos['pv_services'] += $pv; $marginInfos['pa_total'] += $pa; @@ -130,7 +130,7 @@ class FormMargin // $marginInfos['margin_on_services'] += -1 * (abs($pv) - $pa); //else $marginInfos['margin_on_services'] += $pv - $pa; - } elseif ($conf->global->MARGIN_METHODE_FOR_DISCOUNT == '3') { // remise globale prise en compte uniqt sur total + } elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '3') { // remise globale prise en compte uniqt sur total $marginInfos['pa_total'] += $pa; $marginInfos['pv_total'] += $pv; } diff --git a/htdocs/core/class/html.formsetup.class.php b/htdocs/core/class/html.formsetup.class.php index aef01514eba..c57ee0c5106 100644 --- a/htdocs/core/class/html.formsetup.class.php +++ b/htdocs/core/class/html.formsetup.class.php @@ -1079,7 +1079,7 @@ class FormSetupItem $tmp = explode(':', $this->type); $template = $formmail->getEMailTemplate($this->db, $tmp[1], $user, $this->langs, $this->fieldValue); - if ($template<0) { + if (is_numeric($template) && $template < 0) { $this->setErrors($formmail->errors); } $out.= $this->langs->trans($template->label); diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 12b70731896..0e5e6ff9e7c 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -670,23 +670,25 @@ class FormTicket /** * Return html list of tickets type * - * @param string $selected Id du type pre-selectionne - * @param string $htmlname Nom de la zone select - * @param string $filtertype To filter on field type in llx_c_ticket_type (array('code'=>xx,'label'=>zz)) - * @param int $format 0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code - * @param int $empty 1=peut etre vide, 0 sinon - * @param int $noadmininfo 0=Add admin info, 1=Disable admin info - * @param int $maxlength Max length of label - * @param string $morecss More CSS + * @param string|array $selected Id of preselected field or array of Ids + * @param string $htmlname Nom de la zone select + * @param string $filtertype To filter on field type in llx_c_ticket_type (array('code'=>xx,'label'=>zz)) + * @param int $format 0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code + * @param int $empty 1=peut etre vide, 0 sinon + * @param int $noadmininfo 0=Add admin info, 1=Disable admin info + * @param int $maxlength Max length of label + * @param string $morecss More CSS + * @param int $multiselect Is multiselect ? * @return void */ - public function selectTypesTickets($selected = '', $htmlname = 'tickettype', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0, $morecss = '') + public function selectTypesTickets($selected = '', $htmlname = 'tickettype', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0, $morecss = '', $multiselect = 0) { global $langs, $user; + $selected = is_array($selected) ? $selected : (!empty($selected) ? array($selected) : array()); $ticketstat = new Ticket($this->db); - dol_syslog(get_class($this)."::select_types_tickets ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG); + dol_syslog(get_class($this) . "::select_types_tickets " . implode(';', $selected) . ", " . $htmlname . ", " . $filtertype . ", " . $format . ", " . $multiselect, LOG_DEBUG); $filterarray = array(); @@ -696,7 +698,7 @@ class FormTicket $ticketstat->loadCacheTypesTickets(); - print ''; if ($empty) { print ''; } @@ -730,9 +732,9 @@ class FormTicket } // If text is selected, we compare with code, otherwise with id - if (preg_match('/[a-z]/i', $selected) && $selected == $arraytypes['code']) { + if (in_array($arraytypes['code'], $selected)) { print ' selected="selected"'; - } elseif ($selected == $id) { + } elseif (in_array($id, $selected)) { print ' selected="selected"'; } elseif ($arraytypes['use_default'] == "1" && !$selected && !$empty) { print ' selected="selected"'; @@ -1406,6 +1408,12 @@ class FormTicket $ticketstat = new Ticket($this->db); $res = $ticketstat->fetch('', '', $this->track_id); + print ''; + // Private message (not visible by customer/external user) if (!$user->socid) { print ''; } - print ''; - // Zone to select its email template if (count($modelmail_array) > 0) { print ''; @@ -1608,7 +1610,7 @@ class FormTicket print '
'; print $val['cachenbofdoc']; print ''; if ($nbofsubdir && $nboffilesinsubdir) { print '+'.$nboffilesinsubdir.' '; @@ -285,6 +290,7 @@ if (empty($conf->use_javascript_ajax) || !empty($conf->global->MAIN_ECM_DISABLE_ print ''; $userstatic->id = $val['fk_user_c']; $userstatic->lastname = $val['login_c']; @@ -412,15 +418,17 @@ function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, if (preg_match('/^'.preg_quote($val['fullrelativename'].'/', '/').'/', $preopened)) { $collapsedorexpanded = 'expanded'; } - print '
  • '; // collapsed is opposite if expanded + print '
  • '; // collapsed is opposite if expanded - print "'; // Disabled, this break the javascrip component + print '"; print dol_escape_htmltag($file); - print ""; + print ''; + //print ''; print '
    '; @@ -431,9 +439,12 @@ function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, print '
  • '; print (isset($val['cachenbofdoc']) && $val['cachenbofdoc'] >= 0) ? $val['cachenbofdoc'] : ' '; print ''; if ($nbofsubdir > 0 && $nboffilesinsubdir > 0) { print '+'.$nboffilesinsubdir.' '; @@ -441,6 +452,7 @@ function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, print ''; print ''; $userstatic->id = isset($val['fk_user_c']) ? $val['fk_user_c'] : 0; $userstatic->lastname = isset($val['login_c']) ? $val['login_c'] : 0; diff --git a/htdocs/core/ajax/constantonoff.php b/htdocs/core/ajax/constantonoff.php index a38b353519f..3a8ffda3ae6 100644 --- a/htdocs/core/ajax/constantonoff.php +++ b/htdocs/core/ajax/constantonoff.php @@ -50,7 +50,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; $action = GETPOST('action', 'aZ09'); // set or del $name = GETPOST('name', 'alpha'); $entity = GETPOST('entity', 'int'); -$value = ((GETPOST('value', 'int') || GETPOST('value', 'int') == '0') ? GETPOST('value', 'int') : 1); +$value = (GETPOST('value', 'aZ09') != '' ? GETPOST('value', 'aZ09') : 1); /* diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index 7866b972db1..c71fed19f6d 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -314,6 +314,93 @@ if ($action == "importSignature") { // We should just create an image file with the signature. } } + } elseif ($mode == 'fichinter') { + require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; + $object = new Fichinter($db); + $object->fetch(0, $ref); + + $upload_dir = !empty($conf->ficheinter->multidir_output[$object->entity])?$conf->ficheinter->multidir_output[$object->entity]:$conf->ficheinter->dir_output; + $upload_dir .= '/'.dol_sanitizeFileName($object->ref).'/'; + $date = dol_print_date(dol_now(), "%Y%m%d%H%M%S"); + $filename = "signatures/".$date."_signature.png"; + if (!is_dir($upload_dir."signatures/")) { + if (!dol_mkdir($upload_dir."signatures/")) { + $response ="Error mkdir. Failed to create dir ".$upload_dir."signatures/"; + $error++; + } + } + + if (!$error) { + $return = file_put_contents($upload_dir.$filename, $data); + if ($return == false) { + $error++; + $response = 'Error file_put_content: failed to create signature file.'; + } + } + + if (!$error) { + // Defined modele of doc + $last_main_doc_file = $object->last_main_doc; + $directdownloadlink = $object->getLastMainDocLink('fichinter'); // url to download the $object->last_main_doc + if (preg_match('/\.pdf/i', $last_main_doc_file)) { + // TODO Use the $last_main_doc_file to defined the $newpdffilename and $sourcefile + $newpdffilename = $upload_dir.$ref."_signed-".$date.".pdf"; + $sourcefile = $upload_dir.$ref.".pdf"; + + if (dol_is_file($sourcefile)) { + // We build the new PDF + $pdf = pdf_getInstance(); + if (class_exists('TCPDF')) { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($langs)); + + if (getDolGlobalString('MAIN_DISABLE_PDF_COMPRESSION')) { + $pdf->SetCompression(false); + } + + + //$pdf->Open(); + $pagecount = $pdf->setSourceFile($sourcefile); // original PDF + $s = array(); // Array with size of each page. Exemple array(w'=>210, 'h'=>297); + for ($i=1; $i<($pagecount+1); $i++) { + try { + $tppl = $pdf->importPage($i); + $s = $pdf->getTemplatesize($tppl); + $pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L'); + $pdf->useTemplate($tppl); + } catch (Exception $e) { + dol_syslog("Error when manipulating some PDF by onlineSign: ".$e->getMessage(), LOG_ERR); + $response = $e->getMessage(); + $error++; + } + } + + // A signature image file is 720 x 180 (ratio 1/4) but we use only the size into PDF + // TODO Get position of box from PDF template + $xforimgstart = 105; + $yforimgstart = (empty($s['h']) ? 250 : $s['h'] - 57); + $wforimg = $s['w']/1 - ($xforimgstart + 16); + $pdf->Image($upload_dir.$filename, $xforimgstart, $yforimgstart, $wforimg, round($wforimg / 4)); + //$pdf->Close(); + $pdf->Output($newpdffilename, "F"); + + // Index the new file and update the last_main_doc property of object. + $object->indexFile($newpdffilename, 1); + } + if (!$error) { + $response = "success"; + } + } elseif (preg_match('/\.odt/i', $last_main_doc_file)) { + // Adding signature on .ODT not yet supported + // TODO + } else { + // Document format not supported to insert online signature. + // We should just create an image file with the signature. + } + } } } else { $error++; diff --git a/htdocs/core/ajax/row.php b/htdocs/core/ajax/row.php index 3aa429ee89e..0254a7502f8 100644 --- a/htdocs/core/ajax/row.php +++ b/htdocs/core/ajax/row.php @@ -114,6 +114,8 @@ if (GETPOST('roworder', 'alpha', 3) && GETPOST('table_element_line', 'aZ09', 3) $perm = 1; } elseif ($table_element_line == 'projet_task' && $fk_element == 'fk_projet' && $user->rights->projet->creer) { $perm = 1; + } elseif ($table_element_line == 'contratdet' && $fk_element == 'fk_contrat' && $user->hasRight('contrat', 'creer')) { + $perm = 1; } else { $tmparray = explode('_', $table_element_line); $tmpmodule = $tmparray[0]; $tmpobject = preg_replace('/line$/', '', $tmparray[1]); @@ -152,7 +154,7 @@ if (GETPOST('roworder', 'alpha', 3) && GETPOST('table_element_line', 'aZ09', 3) // Reorder line to have position of children lines sharing same counter than parent lines // This should be useless because there is no need to have children sharing same counter than parent, but well, it's cleaner into database. - if (in_array($fk_element, array('fk_facture', 'fk_propal', 'fk_commande'))) { + if (in_array($fk_element, array('fk_facture', 'fk_propal', 'fk_commande','fk_contrat'))) { $result = $row->line_order(true); } } else { diff --git a/htdocs/core/ajax/selectsearchbox.php b/htdocs/core/ajax/selectsearchbox.php index 19f7523fd21..f2e44577260 100644 --- a/htdocs/core/ajax/selectsearchbox.php +++ b/htdocs/core/ajax/selectsearchbox.php @@ -21,12 +21,9 @@ * \brief This script returns content of possible search */ - // This script is called with a POST method or as an include. if (!isset($usedbyinclude) || empty($usedbyinclude)) { - top_httphead('application/json'); - if (!defined('NOTOKENRENEWAL')) { define('NOTOKENRENEWAL', 1); // Disables token renewal } @@ -45,6 +42,9 @@ if (!isset($usedbyinclude) || empty($usedbyinclude)) { } $res = @include '../../main.inc.php'; + + top_httphead('application/json'); + if ($res == 'ERROR_NOT_LOGGED') { $langs->load("other"); $arrayresult['jumptologin'] = array('img'=>'object_generic', 'label'=>$langs->trans("JumpToLogin"), 'text'=>' '.$langs->trans("JumpToLogin"), 'url'=>DOL_URL_ROOT.'/index.php'); @@ -90,7 +90,6 @@ if (((isModEnabled('product') && $user->hasRight('product', 'read')) || (isModEn if (isModEnabled('mrp') && $user->hasRight('mrp', 'read') && empty($conf->global->MAIN_SEARCHFORM_MRP_DISABLED)) { $arrayresult['searchintomo'] = array('position'=>35, 'shortcut'=>'', 'img'=>'object_mrp', 'label'=>$langs->trans("SearchIntoMO", $search_boxvalue), 'text'=>img_picto('', 'object_mrp', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoMO", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/mrp/mo_list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : '')); } - if (isModEnabled('project') && empty($conf->global->MAIN_SEARCHFORM_PROJECT_DISABLED) && $user->hasRight('projet', 'lire')) { $arrayresult['searchintoprojects'] = array('position'=>40, 'shortcut'=>'Q', 'img'=>'object_project', 'label'=>$langs->trans("SearchIntoProjects", $search_boxvalue), 'text'=>img_picto('', 'object_project', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoProjects", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/projet/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : '')); } diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index fb0a60b567f..56fa8172bcb 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -102,7 +102,7 @@ class box_activity extends ModeleBoxes // list the summary of the propals - if (isModEnabled("propal") && $user->rights->propale->lire) { + if (isModEnabled("propal") && $user->rights->propal->lire) { include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $propalstatic = new Propal($this->db); diff --git a/htdocs/core/boxes/box_birthdays_members.php b/htdocs/core/boxes/box_birthdays_members.php index 6138664db2d..df8e51f348f 100644 --- a/htdocs/core/boxes/box_birthdays_members.php +++ b/htdocs/core/boxes/box_birthdays_members.php @@ -104,7 +104,6 @@ class box_birthdays_members extends ModeleBoxes $memberstatic->id = $objp->rowid; $memberstatic->firstname = $objp->firstname; $memberstatic->lastname = $objp->lastname; - $memberstatic->email = $objp->email; $dateb = $this->db->jdate($objp->birth); $age = date('Y', dol_now()) - date('Y', $dateb); diff --git a/htdocs/core/boxes/box_graph_product_distribution.php b/htdocs/core/boxes/box_graph_product_distribution.php index 6b8177e5ed4..3ef8a3daddf 100644 --- a/htdocs/core/boxes/box_graph_product_distribution.php +++ b/htdocs/core/boxes/box_graph_product_distribution.php @@ -62,7 +62,7 @@ class box_graph_product_distribution extends ModeleBoxes $this->hidden = !( (isModEnabled('facture') && !empty($user->rights->facture->lire)) || (isModEnabled('commande') && !empty($user->rights->commande->lire)) - || (isModEnabled('propal') && !empty($user->rights->propale->lire)) + || (isModEnabled('propal') && !empty($user->rights->propal->lire)) ); } @@ -110,7 +110,7 @@ class box_graph_product_distribution extends ModeleBoxes if (!isModEnabled('facture') || empty($user->rights->facture->lire)) { $showinvoicenb = 0; } - if (isModEnabled('propal') || empty($user->rights->propale->lire)) { + if (isModEnabled('propal') || empty($user->rights->propal->lire)) { $showpropalnb = 0; } if (!isModEnabled('commande') || empty($user->rights->commande->lire)) { @@ -152,7 +152,7 @@ class box_graph_product_distribution extends ModeleBoxes $WIDTH = ($nbofgraph >= 2 || !empty($conf->dol_optimize_smallscreen)) ? '300' : '320'; $HEIGHT = '150'; // Height require to have 5+1 entries into legend visible. - if (isModEnabled("propal") && !empty($user->rights->propale->lire)) { + if (isModEnabled("propal") && !empty($user->rights->propal->lire)) { // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showpropalnb) { $langs->load("propal"); @@ -365,7 +365,7 @@ class box_graph_product_distribution extends ModeleBoxes $stringtoshow .= ''; $stringtoshow .= ''; $stringtoshow .= ''; - if (isModEnabled("propal") || !empty($user->rights->propale->lire)) { + if (isModEnabled("propal") || !empty($user->rights->propal->lire)) { $stringtoshow .= ' '.$langs->trans("ForProposals"); $stringtoshow .= ' '; } diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 13f3a29ec16..ff62473c969 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -56,7 +56,7 @@ class box_graph_propales_permonth extends ModeleBoxes $this->db = $db; - $this->hidden = empty($user->rights->propale->lire); + $this->hidden = empty($user->rights->propal->lire); } /** @@ -105,7 +105,7 @@ class box_graph_propales_permonth extends ModeleBoxes $prefix .= 'private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user } - if ($user->rights->propale->lire) { + if ($user->rights->propal->lire) { $param_year = 'DOLUSERCOOKIE_box_'.$this->boxcode.'_year'; $param_shownb = 'DOLUSERCOOKIE_box_'.$this->boxcode.'_shownb'; $param_showtot = 'DOLUSERCOOKIE_box_'.$this->boxcode.'_showtot'; diff --git a/htdocs/core/boxes/box_propales.php b/htdocs/core/boxes/box_propales.php index 7114fdb5399..1a3344eedfe 100644 --- a/htdocs/core/boxes/box_propales.php +++ b/htdocs/core/boxes/box_propales.php @@ -83,7 +83,7 @@ class box_propales extends ModeleBoxes $this->info_box_head = array('text' => $langs->trans("BoxTitleLast".(!empty($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) ? "" : "Modified")."Propals", $max)); - if ($user->rights->propale->lire) { + if ($user->rights->propal->lire) { $sql = "SELECT s.rowid as socid, s.nom as name, s.name_alias"; $sql .= ", s.code_client, s.code_compta, s.client"; $sql .= ", s.logo, s.email, s.entity"; diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index 9ec279fe2d0..3d1e640f34b 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -169,12 +169,6 @@ class box_services_contracts extends ModeleBoxes } $description = $objp->description; - // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { - //$text .= (!empty($objp->description) && $objp->description!=$objp->product_label)?'
    '.dol_htmlentitiesbr($objp->description):''; - $description = ''; // Already added into main visible desc - } - $s = $form->textwithtooltip($text, $description, 3, '', '', '', 0, (!empty($objp->fk_parent_line) ?img_picto('', 'rightarrow') : '')); } else { $s = img_object($langs->trans("ShowProductOrService"), ($objp->product_type ? 'service' : 'product')).' '.dol_htmlentitiesbr($objp->description); diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index 769f74da1a1..1a29c8e1389 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -495,7 +495,7 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" box } // We set info of modules - $widget[$j]['picto'] = $objMod->picto ? img_object('', $objMod->picto) : img_object('', 'generic'); + $widget[$j]['picto'] = (empty($objMod->picto) ? (empty($objMod->boximg) ? img_object('', 'generic') : $objMod->boximg) : img_object('', $objMod->picto)); $widget[$j]['file'] = $files[$key]; $widget[$j]['fullpath'] = $fullpath[$key]; $widget[$j]['relpath'] = $relpath[$key]; diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index b3ff0aae930..e21a288e53e 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -120,6 +120,10 @@ class CMailFile * @var array filenames list (List of attached file name in message) */ public $mimefilename_list = array(); + /** + * @var array filenames cid + */ + public $cid_list = array(); // Image public $html; @@ -159,8 +163,9 @@ class CMailFile * @param string $moreinheader More in header. $moreinheader must contains the "\r\n" (TODO not supported for other MAIL_SEND_MODE different than 'mail' and 'smtps' for the moment) * @param string $sendcontext 'standard', 'emailing', ... (used to define which sending mode and parameters to use) * @param string $replyto Reply-to email (will be set to same value than From by default if not provided) + * @param string $upload_dir_tmp Temporary directory (used to convert images embedded as img src=data:image) */ - public function __construct($subject, $to, $from, $msg, $filename_list = array(), $mimetype_list = array(), $mimefilename_list = array(), $addr_cc = "", $addr_bcc = "", $deliveryreceipt = 0, $msgishtml = 0, $errors_to = '', $css = '', $trackid = '', $moreinheader = '', $sendcontext = 'standard', $replyto = '') + public function __construct($subject, $to, $from, $msg, $filename_list = array(), $mimetype_list = array(), $mimefilename_list = array(), $addr_cc = "", $addr_bcc = "", $deliveryreceipt = 0, $msgishtml = 0, $errors_to = '', $css = '', $trackid = '', $moreinheader = '', $sendcontext = 'standard', $replyto = '', $upload_dir_tmp = '') { global $conf, $dolibarr_main_data_root, $user; @@ -171,6 +176,8 @@ class CMailFile } } + $cid_list = array(); + $this->sendcontext = $sendcontext; // Define this->sendmode ('mail', 'smtps', 'siwftmailer', ...) according to $sendcontext ('standard', 'emailing', 'ticket') @@ -205,7 +212,7 @@ class CMailFile // On defini alternative_boundary $this->alternative_boundary = 'mul_'.dol_hash(uniqid("dolibarr3"), 3); // Force md5 hash (does not contains special chars) - dol_syslog("CMailFile::CMailfile: sendmode=".$this->sendmode." charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, replyto=$replyto trackid=$trackid sendcontext=$sendcontext", LOG_DEBUG); + dol_syslog("CMailFile::CMailfile: sendmode=".$this->sendmode." charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, replyto=$replyto trackid=$trackid sendcontext=$sendcontext upload_dir_tmp=$upload_dir_tmp", LOG_DEBUG); dol_syslog("CMailFile::CMailfile: subject=".$subject.", deliveryreceipt=".$deliveryreceipt.", msgishtml=".$msgishtml, LOG_DEBUG); if (empty($subject)) { @@ -248,26 +255,41 @@ class CMailFile $findimg = 0; if (!empty($conf->global->MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS)) { + // Search into the body for ]*>/", " ", $strContent); - $strContentAltText = html_entity_decode(strip_tags($strContentAltText)); + // TODO We could replace with [Filename.ext] like Gmail do. + $strContentAltText = html_entity_decode(strip_tags($strContentAltText)); // Remove any HTML tags $strContentAltText = trim(wordwrap($strContentAltText, 75, empty($conf->global->MAIN_FIX_FOR_BUGGED_MTA) ? "\r\n" : "\n")); // Check if html header already in message, if not complete the message @@ -1447,9 +1470,10 @@ class CMailFile * @param array $filename_list Tableau * @param array $mimetype_list Tableau * @param array $mimefilename_list Tableau - * @return string Chaine fichiers encodes + * @param array $cidlist Array of CID if file must be completed with CID code + * @return string String with files encoded */ - public function write_files($filename_list, $mimetype_list, $mimefilename_list) + private function write_files($filename_list, $mimetype_list, $mimefilename_list, $cidlist) { // phpcs:enable $out = ''; @@ -1472,6 +1496,10 @@ class CMailFile $out .= "Content-Type: ".$mimetype_list[$i]."; name=\"".$filename_list[$i]."\"".$this->eol; $out .= "Content-Transfer-Encoding: base64".$this->eol; $out .= "Content-Description: ".$filename_list[$i].$this->eol; + if (!empty($cidlist) && is_array($cidlist) && $cidlist[$i]) { + $out .= "X-Attachment-Id: ".$cidlist[$i].$this->eol; + $out .= "Content-ID: <".$cidlist[$i].'>'.$this->eol; + } $out .= $this->eol; $out .= $encoded; $out .= $this->eol; @@ -1628,41 +1656,46 @@ class CMailFile /** * Seearch images into html message and init array this->images_encoded if found * - * @param string $images_dir Location of physical images files + * @param string $images_dir Location of physical images files. For example $dolibarr_main_data_root.'/medias' * @return int >0 if OK, <0 if KO */ - public function findHtmlImages($images_dir) + private function findHtmlImages($images_dir) { - // Build the list of image extensions + // Build the array of image extensions $extensions = array_keys($this->image_types); + // We search (into mail body this->html), if we find some strings like "... file=xxx.img" + // For example when: + // $matches = array(); preg_match_all('/(?:"|\')([^"\']+\.('.implode('|', $extensions).'))(?:"|\')/Ui', $this->html, $matches); // If "xxx.ext" or 'xxx.ext' found if (!empty($matches)) { $i = 0; + // We are interested in $matches[1] only (the second set of parenthesis into regex) foreach ($matches[1] as $full) { + $regs = array(); if (preg_match('/file=([A-Za-z0-9_\-\/]+[\.]?[A-Za-z0-9]+)?$/i', $full, $regs)) { // If xxx is 'file=aaa' $img = $regs[1]; if (file_exists($images_dir.'/'.$img)) { // Image path in src $src = preg_quote($full, '/'); - // Image full path $this->html_images[$i]["fullpath"] = $images_dir.'/'.$img; - // Image name $this->html_images[$i]["name"] = $img; - // Content type - if (preg_match('/^.+\.(\w{3,4})$/', $img, $reg)) { - $ext = strtolower($reg[1]); + $regext = array(); + if (preg_match('/^.+\.(\w{3,4})$/', $img, $regext)) { + $ext = strtolower($regext[1]); $this->html_images[$i]["content_type"] = $this->image_types[$ext]; } - // cid $this->html_images[$i]["cid"] = dol_hash(uniqid(time()), 3); // Force md5 hash (does not contains special chars) + // type + $this->html_images[$i]["type"] = 'cidfromurl'; + $this->html = preg_replace("/src=\"$src\"|src='$src'/i", "src=\"cid:".$this->html_images[$i]["cid"]."\"", $this->html); } $i++; @@ -1682,6 +1715,7 @@ class CMailFile // Read image file if ($image = file_get_contents($fullpath)) { // On garde que le nom de l'image + $regs = array(); preg_match('/([A-Za-z0-9_-]+[\.]?[A-Za-z0-9]+)?$/i', $img["name"], $regs); $imgName = $regs[1]; @@ -1706,6 +1740,85 @@ class CMailFile } } + /** + * Seearch images with data:image format into html message + * + * @param string $images_dir Location of where to store physicaly images files. For example $dolibarr_main_data_root.'/medias' + * @return int >0 if OK, <0 if KO + */ + private function findHtmlImagesIsSrcData($images_dir) + { + global $conf; + + // Build the array of image extensions + $extensions = array_keys($this->image_types); + + if ($images_dir && !dol_is_dir($images_dir)) { + dol_mkdir($images_dir, DOL_DATA_ROOT); + } + + // Uncomment this for debug + /* + global $dolibarr_main_data_root; + $outputfile = $dolibarr_main_data_root."/dolibarr_mail.log"; + $fp = fopen($outputfile, "w+"); + fwrite($fp, $this->html); + fclose($fp); + */ + + // We search (into mail body this->html), if we find some strings like "... file=xxx.img" + // For example when: + // + $matches = array(); + preg_match_all('/src="data:image\/('.implode('|', $extensions).');base64,([^"]+)"/Ui', $this->html, $matches); // If "xxx.ext" or 'xxx.ext' found + + if (!empty($matches) && !empty($matches[1])) { + if (empty($images_dir)) { + // No temp directory provided, so we are not able to support convertion of data:image into physical images. + $this->error = 'NoTempDirProvidedInCMailConstructorSoCantConvertDataImgOnDisk'; + return -1; + } + + $i = 0; + foreach ($matches[1] as $key => $ext) { + // We save the image to send in disk + $filecontent = $matches[2][$key]; + $cid = dol_hash($this->html, 'md5'); + $destfiletmp = $images_dir.'/'.$cid.'.'.$ext; + + $fhandle = @fopen($destfiletmp, 'w'); + if ($fhandle) { + $nbofbyteswrote = fwrite($fhandle, base64_decode($filecontent)); + fclose($fhandle); + @chmod($destfiletmp, octdec($conf->global->MAIN_UMASK)); + } else { + $this->errors[] = "Failed to open file '".$destfiletmp."' for write"; + return -1; + } + + if (file_exists($destfiletmp)) { + // Image full path + $this->html_images[$i]["fullpath"] = $destfiletmp; + // Image name + $this->html_images[$i]["name"] = basename($destfiletmp); + // Content type + $this->html_images[$i]["content_type"] = $this->image_types[strtolower($ext)]; + // cid + $this->html_images[$i]["cid"] = $cid; + // type + $this->html_images[$i]["type"] = 'cidfromdata'; + + $this->html = str_replace('src="data:image/'.$ext.';base64,'.$filecontent.'"', 'src="cid:'.$this->html_images[$i]["cid"].'"', $this->html); + } + $i++; + } + + return 1; + } else { + return 0; + } + } + /** * Return a formatted address string for SMTP protocol * diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index d0b64fdca77..82012400f68 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -950,7 +950,7 @@ abstract class CommonDocGenerator } } - if (array_key_exists('option_'.$key, $object->array_options)) { + if (array_key_exists('options_'.$key, $object->array_options)) { $array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key => $object->array_options['options_'.$key])); } else { $array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key => '')); diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index 41dec1e8fb7..2d63347c029 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -175,7 +175,7 @@ abstract class CommonInvoice extends CommonObject /** * Return amount (with tax) of all deposits invoices used by invoice. * Should always be empty, except if option FACTURE_DEPOSITS_ARE_JUST_PAYMENTS is on for sale invoices (not recommended), - * of FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS is on for purchase invoices (not recommended). + * of FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS is on for purchase invoices (not recommended). * * @param int $multicurrency Return multicurrency_amount instead of amount * @return float <0 and set ->error if KO, Sum of deposits amount otherwise @@ -183,7 +183,7 @@ abstract class CommonInvoice extends CommonObject public function getSumDepositsUsed($multicurrency = 0) { /*if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') { - // FACTURE_DEPOSITS_ARE_JUST_PAYMENTS was never supported for purchase invoice, so we can return 0 with no need of SQL for this case. + // FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS was never supported for purchase invoice, so we can return 0 with no need of SQL for this case. return 0.0; }*/ @@ -379,7 +379,7 @@ abstract class CommonInvoice extends CommonObject $sql = "SELECT rc.amount_ttc as amount, rc.multicurrency_amount_ttc as multicurrency_amount, rc.datec as date, f.ref as ref, rc.description as type"; $sql .= ' FROM '.$this->db->prefix().'societe_remise_except as rc, '.$this->db->prefix().'facture_fourn as f'; $sql .= ' WHERE rc.fk_invoice_supplier_source=f.rowid AND rc.fk_invoice_supplier = '.((int) $this->id); - $sql .= ' AND (f.type = 2 OR f.type = 0 OR f.type = 3)'; // Find discount coming from credit note or excess received or deposits (payments from deposits are always null except if FACTURE_DEPOSITS_ARE_JUST_PAYMENTS is set) + $sql .= ' AND (f.type = 2 OR f.type = 0 OR f.type = 3)'; // Find discount coming from credit note or excess received or deposits (payments from deposits are always null except if FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS is set) } if ($sql) { @@ -848,20 +848,18 @@ abstract class CommonInvoice extends CommonObject } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Create a withdrawal request for a direct debit order or a credit transfer order. * Use the remain to pay excluding all existing open direct debit requests. * * @param User $fuser User asking the direct debit transfer - * @param float $amount Amount we request direct debit for + * @param int $did ID of payment request * @param string $type 'direct-debit' or 'bank-transfer' * @param string $sourcetype Source ('facture' or 'supplier_invoice') * @return int <0 if KO, >0 if OK */ - public function demande_prelevement_stripe($fuser, $amount = 0, $type = 'direct-debit', $sourcetype = 'facture') + public function makeStripeSepaRequest($fuser, $did = 0, $type = 'direct-debit', $sourcetype = 'facture') { - // phpcs:enable global $conf, $mysoc, $user, $langs; if (empty($conf->global->STRIPE_SEPA_DIRECT_DEBIT)) { @@ -871,753 +869,755 @@ abstract class CommonInvoice extends CommonObject $error = 0; - dol_syslog(get_class($this)."::demande_prelevement_stripe 0", LOG_DEBUG); + dol_syslog(get_class($this)."::makeStripeSepaRequest 0", LOG_DEBUG); if ($this->statut > self::STATUS_DRAFT && $this->paye == 0) { require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php'; $bac = new CompanyBankAccount($this->db); - $bac->fetch(0, $this->socid); + $result = $bac->fetch(0, $this->socid, 1, 'ban'); + if ($result <= 0 || empty($bac->id)) { + $this->error = $langs->trans("ThirdpartyHasNoDefaultBanAccount"); + $this->errors[] = $this->error; + dol_syslog(get_class($this)."::makeStripeSepaRequest ".$this->error); + return -1; + } - $sql = "SELECT count(*)"; + $sql = "SELECT rowid, date_demande, amount, fk_facture, fk_facture_fourn"; $sql .= " FROM ".$this->db->prefix()."prelevement_facture_demande"; - $sql .= " WHERE fk_facture = ".((int) $this->id); - $sql .= " AND ext_payment_id IS NULL"; // To exclude record done for some online payments - $sql .= " AND traite = 0"; + $sql .= " WHERE rowid = ".((int) $did); - dol_syslog(get_class($this)."::demande_prelevement_stripe 1", LOG_DEBUG); + dol_syslog(get_class($this)."::makeStripeSepaRequest 1", LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - $row = $this->db->fetch_row($resql); + $obj = $this->db->fetch_object($resql); + if (!$obj) { + dol_print_error($this->db, 'CantFindRequestWithId'); + return -2; + } - if ($row[0] == 0) { - $now = dol_now(); + // + $amount = $obj->amount; - $totalpaye = $this->getSommePaiement(); - $totalcreditnotes = $this->getSumCreditNotesUsed(); - $totaldeposits = $this->getSumDepositsUsed(); - //print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits; + $now = dol_now(); - // We can also use bcadd to avoid pb with floating points - // For example print 239.2 - 229.3 - 9.9; does not return 0. - //$resteapayer=bcadd($this->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT); - //$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT); - if (empty($amount)) { - $amount = price2num($this->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits, 'MT'); + $totalpaye = $this->getSommePaiement(); + $totalcreditnotes = $this->getSumCreditNotesUsed(); + $totaldeposits = $this->getSumDepositsUsed(); + //print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits; + + // We can also use bcadd to avoid pb with floating points + // For example print 239.2 - 229.3 - 9.9; does not return 0. + //$resteapayer=bcadd($this->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT); + //$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT); + $amounttocheck = price2num($this->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits, 'MT'); + + // TODO We can compare $amount and $amounttocheck + + if (is_numeric($amount) && $amount != 0) { + require_once DOL_DOCUMENT_ROOT.'/societe/class/companypaymentmode.class.php'; + $companypaymentmode = new CompanyPaymentMode($this->db); + $companypaymentmode->fetch($bac->id); + + // Start code for Stripe + $service = 'StripeTest'; + $servicestatus = 0; + if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) { + $service = 'StripeLive'; + $servicestatus = 1; } - if (is_numeric($amount) && $amount != 0) { - require_once DOL_DOCUMENT_ROOT.'/societe/class/companypaymentmode.class.php'; - $companypaymentmode = new CompanyPaymentMode($this->db); - $companypaymentmode->fetch($bac->id); + dol_syslog("makeStripeSepaRequest amount = ".$amount." service=" . $service . " servicestatus=" . $servicestatus . " thirdparty_id=" . $this->socid . " companypaymentmode=" . $companypaymentmode->id); - dol_syslog(get_class($this)."::demande_prelevement_stripe amount=$amount, companypaymentmode = " . $companypaymentmode->id, LOG_DEBUG); + $this->stripechargedone = 0; + $this->stripechargeerror = 0; + $now = dol_now(); - //Start code from sellyoursaas - $service = 'StripeTest'; - $servicestatus = 0; - if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) { - $service = 'StripeLive'; - $servicestatus = 1; - } + $currency = $conf->currency; - $langs->load("agenda"); - dol_syslog("doTakePaymentStripeForThirdparty service=" . $service . " servicestatus=" . $servicestatus . " thirdparty_id=" . $this->socid . " companypaymentmode=" . $companypaymentmode->id . " noemailtocustomeriferror=" . $noemailtocustomeriferror . " nocancelifpaymenterror=" . $nocancelifpaymenterror . " calledinmyaccountcontext=" . $calledinmyaccountcontext); + global $stripearrayofkeysbyenv; + global $savstripearrayofkeysbyenv; - $this->stripechargedone = 0; - $this->stripechargeerror = 0; - $now = dol_now(); + $errorforinvoice = 0; // We reset the $errorforinvoice at each invoice loop - $currency = $conf->currency; + $this->fetch_thirdparty(); - global $stripearrayofkeysbyenv; - global $savstripearrayofkeysbyenv; + dol_syslog("--- Process invoice thirdparty_id=" . $this->id . ", thirdparty_name=" . $this->thirdparty->name . " id=" . $this->id . ", ref=" . $this->ref . ", datef=" . dol_print_date($this->date, 'dayhourlog'), LOG_DEBUG); - $errorforinvoice = 0; // We reset the $errorforinvoice at each invoice loop + $alreadypayed = $this->getSommePaiement(); + $amount_credit_notes_included = $this->getSumCreditNotesUsed(); + $amounttopay = $this->total_ttc - $alreadypayed - $amount_credit_notes_included; - $this->fetch_thirdparty(); + // Correct the amount according to unit of currency + // See https://support.stripe.com/questions/which-zero-decimal-currencies-does-stripe-support + $arrayzerounitcurrency = ['BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF']; + $amountstripe = $amounttopay; + if (!in_array($currency, $arrayzerounitcurrency)) { + $amountstripe = $amountstripe * 100; + } - dol_syslog("--- Process invoice thirdparty_id=" . $this->id . ", thirdparty_name=" . $this->thirdparty->name . " id=" . $this->id . ", ref=" . $this->ref . ", datef=" . dol_print_date($this->date, 'dayhourlog'), LOG_DEBUG); + if ($amountstripe > 0) { + try { + //var_dump($companypaymentmode); + dol_syslog("We will try to pay with companypaymentmodeid=" . $companypaymentmode->id . " stripe_card_ref=" . $companypaymentmode->stripe_card_ref . " mode=" . $companypaymentmode->status, LOG_DEBUG); - $alreadypayed = $this->getSommePaiement(); - $amount_credit_notes_included = $this->getSumCreditNotesUsed(); - $amounttopay = $this->total_ttc - $alreadypayed - $amount_credit_notes_included; + $thirdparty = new Societe($this->db); + $resultthirdparty = $thirdparty->fetch($this->socid); - // Correct the amount according to unit of currency - // See https://support.stripe.com/questions/which-zero-decimal-currencies-does-stripe-support - $arrayzerounitcurrency = ['BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF']; - $amountstripe = $amounttopay; - if (!in_array($currency, $arrayzerounitcurrency)) { - $amountstripe = $amountstripe * 100; - } + include_once DOL_DOCUMENT_ROOT . '/stripe/class/stripe.class.php'; // This include the include of htdocs/stripe/config.php + // So it inits or erases the $stripearrayofkeysbyenv + $stripe = new Stripe($this->db); - if ($amountstripe > 0) { - try { - //var_dump($companypaymentmode); - dol_syslog("We will try to pay with companypaymentmodeid=" . $companypaymentmode->id . " stripe_card_ref=" . $companypaymentmode->stripe_card_ref . " mode=" . $companypaymentmode->status, LOG_DEBUG); + if (empty($savstripearrayofkeysbyenv)) { + $savstripearrayofkeysbyenv = $stripearrayofkeysbyenv; + } + dol_syslog("makeStripeSepaRequest Current Stripe environment is " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']); + dol_syslog("makeStripeSepaRequest Current Saved Stripe environment is " . $savstripearrayofkeysbyenv[$servicestatus]['publishable_key']); - $thirdparty = new Societe($this->db); - $resultthirdparty = $thirdparty->fetch($this->socid); + $foundalternativestripeaccount = ''; - include_once DOL_DOCUMENT_ROOT . '/stripe/class/stripe.class.php'; // This include the include of htdocs/stripe/config.php - // So it inits or erases the $stripearrayofkeysbyenv - $stripe = new Stripe($this->db); + // Force stripe to another value (by default this value is empty) + if (!empty($thirdparty->array_options['options_stripeaccount'])) { + dol_syslog("makeStripeSepaRequest The thirdparty id=" . $thirdparty->id . " has a dedicated Stripe Account, so we switch to it."); - if (empty($savstripearrayofkeysbyenv)) { - $savstripearrayofkeysbyenv = $stripearrayofkeysbyenv; - } - dol_syslog("Current Stripe environment is " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']); - dol_syslog("Current Saved Stripe environment is " . $savstripearrayofkeysbyenv[$servicestatus]['publishable_key']); + $tmparray = explode('@', $thirdparty->array_options['options_stripeaccount']); + if (!empty($tmparray[1])) { + $tmparray2 = explode(':', $tmparray[1]); + if (!empty($tmparray2[3])) { + $stripearrayofkeysbyenv = [ + 0 => [ + "publishable_key" => $tmparray2[0], + "secret_key" => $tmparray2[1] + ], + 1 => [ + "publishable_key" => $tmparray2[2], + "secret_key" => $tmparray2[3] + ] + ]; - $foundalternativestripeaccount = ''; - - // Force stripe to another value (by default this value is empty) - if (!empty($thirdparty->array_options['options_stripeaccount'])) { - dol_syslog("The thirdparty id=" . $thirdparty->id . " has a dedicated Stripe Account, so we switch to it."); - - $tmparray = explode('@', $thirdparty->array_options['options_stripeaccount']); - if (!empty($tmparray[1])) { - $tmparray2 = explode(':', $tmparray[1]); - if (!empty($tmparray2[3])) { - $stripearrayofkeysbyenv = [ - 0 => [ - "publishable_key" => $tmparray2[0], - "secret_key" => $tmparray2[1] - ], - 1 => [ - "publishable_key" => $tmparray2[2], - "secret_key" => $tmparray2[3] - ] - ]; - - $stripearrayofkeys = $stripearrayofkeysbyenv[$servicestatus]; - \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); - - $foundalternativestripeaccount = $tmparray[0]; // Store the customer id - - dol_syslog("We use now customer=" . $foundalternativestripeaccount . " publishable_key=" . $stripearrayofkeys['publishable_key'], LOG_DEBUG); - } - } - - if (!$foundalternativestripeaccount) { - $stripearrayofkeysbyenv = $savstripearrayofkeysbyenv; - - $stripearrayofkeys = $savstripearrayofkeysbyenv[$servicestatus]; + $stripearrayofkeys = $stripearrayofkeysbyenv[$servicestatus]; \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); - dol_syslog("We found a bad value for Stripe Account for thirdparty id=" . $thirdparty->id . ", so we ignore it and keep using the global one, so " . $stripearrayofkeys['publishable_key'], LOG_WARNING); + + $foundalternativestripeaccount = $tmparray[0]; // Store the customer id + + dol_syslog("We use now customer=" . $foundalternativestripeaccount . " publishable_key=" . $stripearrayofkeys['publishable_key'], LOG_DEBUG); } - } else { + } + + if (!$foundalternativestripeaccount) { $stripearrayofkeysbyenv = $savstripearrayofkeysbyenv; $stripearrayofkeys = $savstripearrayofkeysbyenv[$servicestatus]; \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); - dol_syslog("The thirdparty id=" . $thirdparty->id . " has no dedicated Stripe Account, so we use global one, so " . json_encode($stripearrayofkeys), LOG_DEBUG); + dol_syslog("We found a bad value for Stripe Account for thirdparty id=" . $thirdparty->id . ", so we ignore it and keep using the global one, so " . $stripearrayofkeys['publishable_key'], LOG_WARNING); } + } else { + $stripearrayofkeysbyenv = $savstripearrayofkeysbyenv; + + $stripearrayofkeys = $savstripearrayofkeysbyenv[$servicestatus]; + \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); + dol_syslog("The thirdparty id=" . $thirdparty->id . " has no dedicated Stripe Account, so we use global one, so " . json_encode($stripearrayofkeys), LOG_DEBUG); + } - dol_syslog("get stripe account", LOG_DEBUG); - $stripeacc = $stripe->getStripeAccount($service, $this->socid); // Get Stripe OAuth connect account if it exists (no network access here) - dol_syslog("get stripe account return " . json_encode($stripeacc), LOG_DEBUG); + dol_syslog("makeStripeSepaRequest get stripe account", LOG_DEBUG); + $stripeacc = $stripe->getStripeAccount($service, $this->socid); // Get Stripe OAuth connect account if it exists (no network access here) + dol_syslog("makeStripeSepaRequest get stripe account return " . json_encode($stripeacc), LOG_DEBUG); - if ($foundalternativestripeaccount) { - if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage - $customer = \Stripe\Customer::retrieve(['id' => "$foundalternativestripeaccount", 'expand[]' => 'sources']); - } else { - $customer = \Stripe\Customer::retrieve(['id' => "$foundalternativestripeaccount", 'expand[]' => 'sources'], ["stripe_account" => $stripeacc]); - } + if ($foundalternativestripeaccount) { + if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage + $customer = \Stripe\Customer::retrieve(['id' => "$foundalternativestripeaccount", 'expand[]' => 'sources']); } else { - $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 0); - if (empty($customer) && !empty($stripe->error)) { - $this->errors[] = $stripe->error; - } - /*if (!empty($customer) && empty($customer->sources)) { - $customer = null; - $this->errors[] = '\Stripe\Customer::retrieve did not returned the sources'; - }*/ + $customer = \Stripe\Customer::retrieve(['id' => "$foundalternativestripeaccount", 'expand[]' => 'sources'], ["stripe_account" => $stripeacc]); + } + } else { + $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 0); + if (empty($customer) && !empty($stripe->error)) { + $this->errors[] = $stripe->error; + } + /*if (!empty($customer) && empty($customer->sources)) { + $customer = null; + $this->errors[] = '\Stripe\Customer::retrieve did not returned the sources'; + }*/ + } + + // $nbhoursbetweentries = (empty($conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES) ? 49 : $conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES); // Must have more that 48 hours + 1 between each try (so 1 try every 3 daily batch) + // $nbdaysbeforeendoftries = (empty($conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES) ? 35 : $conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES); + $labeltouse = ''; + $postactionmessages = []; + + if ($resultthirdparty > 0 && !empty($customer)) { + if (!$error && !empty($this->array_options['options_delayautopayment']) && $this->array_options['options_delayautopayment'] > $now && empty($calledinmyaccountcontext)) { + $errmsg = 'Payment try was canceled (invoice qualified by the automatic payment was delayed after the ' . dol_print_date($this->array_options['options_delayautopayment'], 'day') . ')'; + dol_syslog($errmsg, LOG_DEBUG); + + $error++; + $errorforinvoice++; + $this->errors[] = $errmsg; } - // $nbhoursbetweentries = (empty($conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES) ? 49 : $conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES); // Must have more that 48 hours + 1 between each try (so 1 try every 3 daily batch) - // $nbdaysbeforeendoftries = (empty($conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES) ? 35 : $conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES); - $labeltouse = ''; - $postactionmessages = []; - - if ($resultthirdparty > 0 && !empty($customer)) { - if (!$error && !empty($this->array_options['options_delayautopayment']) && $this->array_options['options_delayautopayment'] > $now && empty($calledinmyaccountcontext)) { - $errmsg = 'Payment try was canceled (invoice qualified by the automatic payment was delayed after the ' . dol_print_date($this->array_options['options_delayautopayment'], 'day') . ')'; - dol_syslog($errmsg, LOG_DEBUG); - - $error++; - $errorforinvoice++; - $this->errors[] = $errmsg; + if (!$error) { // Payment was not canceled + //erics card or sepa ? + $sepaMode = false; + if ($companypaymentmode->type == 'ban') { + $sepaMode = true; + $stripecard = $stripe->sepaStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0); + } else { + $stripecard = $stripe->cardStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0); } - if (!$error) { // Payment was not canceled - //erics card or sepa ? - $sepaMode = false; - if ($companypaymentmode->type == 'ban') { - $sepaMode = true; - $stripecard = $stripe->sepaStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0); - } else { - $stripecard = $stripe->cardStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0); - } + if ($stripecard) { // Can be card_... (old mode) or pm_... (new mode) + $FULLTAG = 'INV=' . $this->id . '-CUS=' . $thirdparty->id; + $description = 'Stripe payment from doTakePaymentStripeForThirdparty: ' . $FULLTAG . ' ref=' . $this->ref; - if ($stripecard) { // Can be card_... (old mode) or pm_... (new mode) - $FULLTAG = 'INV=' . $this->id . '-CUS=' . $thirdparty->id; - $description = 'Stripe payment from doTakePaymentStripeForThirdparty: ' . $FULLTAG . ' ref=' . $this->ref; + $stripefailurecode = ''; + $stripefailuremessage = ''; + $stripefailuredeclinecode = ''; - $stripefailurecode = ''; - $stripefailuremessage = ''; - $stripefailuredeclinecode = ''; + if (preg_match('/^card_/', $stripecard->id)) { // Using old method + dol_syslog("* Create charge on card " . $stripecard->id . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); - if (preg_match('/^card_/', $stripecard->id)) { // Using old method - dol_syslog("* Create charge on card " . $stripecard->id . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); + $ipaddress = getUserRemoteIP(); - $ipaddress = getUserRemoteIP(); + $charge = null; // Force reset of $charge, so, if already set from a previous fetch, it will be empty even if there is an exception at next step + try { + $charge = \Stripe\Charge::create([ + 'amount' => price2num($amountstripe, 'MU'), + 'currency' => $currency, + 'capture' => true, // Charge immediatly + 'description' => $description, + 'metadata' => ["FULLTAG" => $FULLTAG, 'Recipient' => $mysoc->name, 'dol_version' => DOL_VERSION, 'dol_entity' => $conf->entity, 'ipaddress' => $ipaddress], + 'customer' => $customer->id, + //'customer' => 'bidon_to_force_error', // To use to force a stripe error + 'source' => $stripecard, + 'statement_descriptor' => dol_trunc('INV=' . $this->id, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) + ]); + } catch (\Stripe\Error\Card $e) { + // Since it's a decline, Stripe_CardError will be caught + $body = $e->getJsonBody(); + $err = $body['error']; - $charge = null; // Force reset of $charge, so, if already set from a previous fetch, it will be empty even if there is an exception at next step - try { - $charge = \Stripe\Charge::create([ - 'amount' => price2num($amountstripe, 'MU'), - 'currency' => $currency, - 'capture' => true, // Charge immediatly - 'description' => $description, - 'metadata' => ["FULLTAG" => $FULLTAG, 'Recipient' => $mysoc->name, 'dol_version' => DOL_VERSION, 'dol_entity' => $conf->entity, 'ipaddress' => $ipaddress], - 'customer' => $customer->id, - //'customer' => 'bidon_to_force_error', // To use to force a stripe error - 'source' => $stripecard, - 'statement_descriptor' => dol_trunc('INV=' . $this->id, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - ]); - } catch (\Stripe\Error\Card $e) { - // Since it's a decline, Stripe_CardError will be caught - $body = $e->getJsonBody(); - $err = $body['error']; - - $stripefailurecode = $err['code']; - $stripefailuremessage = $err['message']; - $stripefailuredeclinecode = $err['decline_code']; - } catch (Exception $e) { - $stripefailurecode = 'UnknownChargeError'; - $stripefailuremessage = $e->getMessage(); - } - } else { // Using new SCA method - if ($sepaMode) { - dol_syslog("* Create payment on SEPA " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); - } else { - dol_syslog("* Create payment on card " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); - } - - // Create payment intent and charge payment (confirmnow = true) - $paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $invoice, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1); - - $charge = new stdClass(); - //erics add processing sepa is like success ? - if ($paymentintent->status === 'succeeded' || $paymentintent->status === 'processing') { - $charge->status = 'ok'; - $charge->id = $paymentintent->id; - $charge->customer = $customer->id; - } elseif ($paymentintent->status === 'requires_action') { - //paymentintent->status may be => 'requires_action' (no error in such a case) - dol_syslog(var_export($paymentintent, true), LOG_DEBUG); - - $charge->status = 'failed'; - $charge->customer = $customer->id; - $charge->failure_code = $stripe->code; - $charge->failure_message = $stripe->error; - $charge->failure_declinecode = $stripe->declinecode; - $stripefailurecode = $stripe->code; - $stripefailuremessage = 'Action required. Contact the support at ';// . $conf->global->SELLYOURSAAS_MAIN_EMAIL; - $stripefailuredeclinecode = $stripe->declinecode; - } else { - dol_syslog(var_export($paymentintent, true), LOG_DEBUG); - - $charge->status = 'failed'; - $charge->customer = $customer->id; - $charge->failure_code = $stripe->code; - $charge->failure_message = $stripe->error; - $charge->failure_declinecode = $stripe->declinecode; - $stripefailurecode = $stripe->code; - $stripefailuremessage = $stripe->error; - $stripefailuredeclinecode = $stripe->declinecode; - } - - //var_dump("stripefailurecode=".$stripefailurecode." stripefailuremessage=".$stripefailuremessage." stripefailuredeclinecode=".$stripefailuredeclinecode); - //exit; + $stripefailurecode = $err['code']; + $stripefailuremessage = $err['message']; + $stripefailuredeclinecode = $err['decline_code']; + } catch (Exception $e) { + $stripefailurecode = 'UnknownChargeError'; + $stripefailuremessage = $e->getMessage(); + } + } else { // Using new SCA method + if ($sepaMode) { + dol_syslog("* Create payment on SEPA " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); + } else { + dol_syslog("* Create payment on card " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG); } - // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) - if (empty($charge) || $charge->status == 'failed') { - dol_syslog('Failed to charge card or payment mode ' . $stripecard->id . ' stripefailurecode=' . $stripefailurecode . ' stripefailuremessage=' . $stripefailuremessage . ' stripefailuredeclinecode=' . $stripefailuredeclinecode, LOG_WARNING); + // Create payment intent and charge payment (confirmnow = true) + $paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $invoice, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1); - // Save a stripe payment was in error - $this->stripechargeerror++; + $charge = new stdClass(); + //erics add processing sepa is like success ? + if ($paymentintent->status === 'succeeded' || $paymentintent->status === 'processing') { + $charge->status = 'ok'; + $charge->id = $paymentintent->id; + $charge->customer = $customer->id; + } elseif ($paymentintent->status === 'requires_action') { + //paymentintent->status may be => 'requires_action' (no error in such a case) + dol_syslog(var_export($paymentintent, true), LOG_DEBUG); + $charge->status = 'failed'; + $charge->customer = $customer->id; + $charge->failure_code = $stripe->code; + $charge->failure_message = $stripe->error; + $charge->failure_declinecode = $stripe->declinecode; + $stripefailurecode = $stripe->code; + $stripefailuremessage = 'Action required. Contact the support at ';// . $conf->global->SELLYOURSAAS_MAIN_EMAIL; + $stripefailuredeclinecode = $stripe->declinecode; + } else { + dol_syslog(var_export($paymentintent, true), LOG_DEBUG); + + $charge->status = 'failed'; + $charge->customer = $customer->id; + $charge->failure_code = $stripe->code; + $charge->failure_message = $stripe->error; + $charge->failure_declinecode = $stripe->declinecode; + $stripefailurecode = $stripe->code; + $stripefailuremessage = $stripe->error; + $stripefailuredeclinecode = $stripe->declinecode; + } + + //var_dump("stripefailurecode=".$stripefailurecode." stripefailuremessage=".$stripefailuremessage." stripefailuredeclinecode=".$stripefailuredeclinecode); + //exit; + } + + // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) + if (empty($charge) || $charge->status == 'failed') { + dol_syslog('Failed to charge card or payment mode ' . $stripecard->id . ' stripefailurecode=' . $stripefailurecode . ' stripefailuremessage=' . $stripefailuremessage . ' stripefailuredeclinecode=' . $stripefailuredeclinecode, LOG_WARNING); + + // Save a stripe payment was in error + $this->stripechargeerror++; + + $error++; + $errorforinvoice++; + $errmsg = $langs->trans("FailedToChargeCard"); + if (!empty($charge)) { + if ($stripefailuredeclinecode == 'authentication_required') { + $errauthenticationmessage = $langs->trans("ErrSCAAuthentication"); + $errmsg = $errauthenticationmessage; + } elseif (in_array($stripefailuredeclinecode, ['insufficient_funds', 'generic_decline'])) { + $errmsg .= ': ' . $charge->failure_code; + $errmsg .= ($charge->failure_message ? ' - ' : '') . ' ' . $charge->failure_message; + if (empty($stripefailurecode)) { + $stripefailurecode = $charge->failure_code; + } + if (empty($stripefailuremessage)) { + $stripefailuremessage = $charge->failure_message; + } + } else { + $errmsg .= ': failure_code=' . $charge->failure_code; + $errmsg .= ($charge->failure_message ? ' - ' : '') . ' failure_message=' . $charge->failure_message; + if (empty($stripefailurecode)) { + $stripefailurecode = $charge->failure_code; + } + if (empty($stripefailuremessage)) { + $stripefailuremessage = $charge->failure_message; + } + } + } else { + $errmsg .= ': ' . $stripefailurecode . ' - ' . $stripefailuremessage; + $errmsg .= ($stripefailuredeclinecode ? ' - ' . $stripefailuredeclinecode : ''); + } + + $description = 'Stripe payment ERROR from doTakePaymentStripeForThirdparty: ' . $FULLTAG; + $postactionmessages[] = $errmsg . ' (' . $stripearrayofkeys['publishable_key'] . ')'; + $this->errors[] = $errmsg; + } else { + dol_syslog('Successfuly charge card ' . $stripecard->id); + + $postactionmessages[] = 'Success to charge card (' . $charge->id . ' with ' . $stripearrayofkeys['publishable_key'] . ')'; + + // Save a stripe payment was done in realy life so later we will be able to force a commit on recorded payments + // even if in batch mode (method doTakePaymentStripe), we will always make all action in one transaction with a forced commit. + $this->stripechargedone++; + + // Default description used for label of event. Will be overwrite by another value later. + $description = 'Stripe payment OK (' . $charge->id . ') from doTakePaymentStripeForThirdparty: ' . $FULLTAG; + + $db = $this->db; + + $ipaddress = getUserRemoteIP(); + + $TRANSACTIONID = $charge->id; + $currency = $conf->currency; + $paymentmethod = 'stripe'; + $emetteur_name = $charge->customer; + + // Same code than into paymentok.php... + + $paymentTypeId = 0; + if ($paymentmethod == 'paybox') { + $paymentTypeId = $conf->global->PAYBOX_PAYMENT_MODE_FOR_PAYMENTS; + } + if ($paymentmethod == 'paypal') { + $paymentTypeId = $conf->global->PAYPAL_PAYMENT_MODE_FOR_PAYMENTS; + } + if ($paymentmethod == 'stripe') { + $paymentTypeId = $conf->global->STRIPE_PAYMENT_MODE_FOR_PAYMENTS; + } + if (empty($paymentTypeId)) { + //erics + if ($sepaMode) { + $paymentType = 'PRE'; + } else { + $paymentType = $_SESSION["paymentType"]; + if (empty($paymentType)) { + $paymentType = 'CB'; + } + } + $paymentTypeId = dol_getIdFromCode($this->db, $paymentType, 'c_paiement', 'code', 'id', 1); + } + + $currencyCodeType = $currency; + + $ispostactionok = 1; + + // Creation of payment line + include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; + $paiement = new Paiement($this->db); + $paiement->datepaye = $now; + $paiement->date = $now; + if ($currencyCodeType == $conf->currency) { + $paiement->amounts = [$this->id => $amounttopay]; // Array with all payments dispatching with invoice id + } else { + $paiement->multicurrency_amounts = [$this->id => $amounttopay]; // Array with all payments dispatching + + $postactionmessages[] = 'Payment was done in a different currency than currency expected of company'; + $ispostactionok = -1; + // Not yet supported, so error $error++; $errorforinvoice++; - $errmsg = $langs->trans("FailedToChargeCard"); - if (!empty($charge)) { - if ($stripefailuredeclinecode == 'authentication_required') { - $errauthenticationmessage = $langs->trans("ErrSCAAuthentication"); - $errmsg = $errauthenticationmessage; - } elseif (in_array($stripefailuredeclinecode, ['insufficient_funds', 'generic_decline'])) { - $errmsg .= ': ' . $charge->failure_code; - $errmsg .= ($charge->failure_message ? ' - ' : '') . ' ' . $charge->failure_message; - if (empty($stripefailurecode)) { - $stripefailurecode = $charge->failure_code; - } - if (empty($stripefailuremessage)) { - $stripefailuremessage = $charge->failure_message; - } - } else { - $errmsg .= ': failure_code=' . $charge->failure_code; - $errmsg .= ($charge->failure_message ? ' - ' : '') . ' failure_message=' . $charge->failure_message; - if (empty($stripefailurecode)) { - $stripefailurecode = $charge->failure_code; - } - if (empty($stripefailuremessage)) { - $stripefailuremessage = $charge->failure_message; - } - } - } else { - $errmsg .= ': ' . $stripefailurecode . ' - ' . $stripefailuremessage; - $errmsg .= ($stripefailuredeclinecode ? ' - ' . $stripefailuredeclinecode : ''); - } + } + $paiement->paiementid = $paymentTypeId; + $paiement->num_paiement = ''; + $paiement->num_payment = ''; + // Add a comment with keyword 'SellYourSaas' in text. Used by trigger. + $paiement->note_public = 'StripeSepa payment ' . dol_print_date($now, 'standard') . ' using ' . $paymentmethod . ($ipaddress ? ' from ip ' . $ipaddress : '') . ' - Transaction ID = ' . $TRANSACTIONID; + $paiement->note_private = 'StripeSepa payment ' . dol_print_date($now, 'standard') . ' using ' . $paymentmethod . ($ipaddress ? ' from ip ' . $ipaddress : '') . ' - Transaction ID = ' . $TRANSACTIONID; + $paiement->ext_payment_id = $charge->id . ':' . $customer->id . '@' . $stripearrayofkeys['publishable_key']; + $paiement->ext_payment_site = 'stripe'; - $description = 'Stripe payment ERROR from doTakePaymentStripeForThirdparty: ' . $FULLTAG; - $postactionmessages[] = $errmsg . ' (' . $stripearrayofkeys['publishable_key'] . ')'; - $this->errors[] = $errmsg; - } else { - dol_syslog('Successfuly charge card ' . $stripecard->id); + if (!$errorforinvoice) { + dol_syslog('* Record payment for invoice id ' . $this->id . '. It includes closing of invoice and regenerating document'); - $postactionmessages[] = 'Success to charge card (' . $charge->id . ' with ' . $stripearrayofkeys['publishable_key'] . ')'; - - // Save a stripe payment was done in realy life so later we will be able to force a commit on recorded payments - // even if in batch mode (method doTakePaymentStripe), we will always make all action in one transaction with a forced commit. - $this->stripechargedone++; - - // Default description used for label of event. Will be overwrite by another value later. - $description = 'Stripe payment OK (' . $charge->id . ') from doTakePaymentStripeForThirdparty: ' . $FULLTAG; - - $db = $this->db; - - $ipaddress = getUserRemoteIP(); - - $TRANSACTIONID = $charge->id; - $currency = $conf->currency; - $paymentmethod = 'stripe'; - $emetteur_name = $charge->customer; - - // Same code than into paymentok.php... - - $paymentTypeId = 0; - if ($paymentmethod == 'paybox') { - $paymentTypeId = $conf->global->PAYBOX_PAYMENT_MODE_FOR_PAYMENTS; - } - if ($paymentmethod == 'paypal') { - $paymentTypeId = $conf->global->PAYPAL_PAYMENT_MODE_FOR_PAYMENTS; - } - if ($paymentmethod == 'stripe') { - $paymentTypeId = $conf->global->STRIPE_PAYMENT_MODE_FOR_PAYMENTS; - } - if (empty($paymentTypeId)) { - //erics - if ($sepaMode) { - $paymentType = 'PRE'; - } else { - $paymentType = $_SESSION["paymentType"]; - if (empty($paymentType)) { - $paymentType = 'CB'; - } - } - $paymentTypeId = dol_getIdFromCode($this->db, $paymentType, 'c_paiement', 'code', 'id', 1); - } - - $currencyCodeType = $currency; - - $ispostactionok = 1; - - // Creation of payment line - include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; - $paiement = new Paiement($this->db); - $paiement->datepaye = $now; - $paiement->date = $now; - if ($currencyCodeType == $conf->currency) { - $paiement->amounts = [$this->id => $amounttopay]; // Array with all payments dispatching with invoice id - } else { - $paiement->multicurrency_amounts = [$this->id => $amounttopay]; // Array with all payments dispatching - - $postactionmessages[] = 'Payment was done in a different currency than currency expected of company'; + // This include closing invoices to 'paid' (and trigger including unsuspending) and regenerating document + $paiement_id = $paiement->create($user, 1); + if ($paiement_id < 0) { + $postactionmessages[] = $paiement->error . ($paiement->error ? ' ' : '') . join("
    \n", $paiement->errors); $ispostactionok = -1; - // Not yet supported, so error $error++; $errorforinvoice++; + } else { + $postactionmessages[] = 'Payment created'; } - $paiement->paiementid = $paymentTypeId; - $paiement->num_paiement = ''; - $paiement->num_payment = ''; - // Add a comment with keyword 'SellYourSaas' in text. Used by trigger. - $paiement->note_public = 'StripeSepa payment ' . dol_print_date($now, 'standard') . ' using ' . $paymentmethod . ($ipaddress ? ' from ip ' . $ipaddress : '') . ' - Transaction ID = ' . $TRANSACTIONID; - $paiement->note_private = 'StripeSepa payment ' . dol_print_date($now, 'standard') . ' using ' . $paymentmethod . ($ipaddress ? ' from ip ' . $ipaddress : '') . ' - Transaction ID = ' . $TRANSACTIONID; - $paiement->ext_payment_id = $charge->id . ':' . $customer->id . '@' . $stripearrayofkeys['publishable_key']; - $paiement->ext_payment_site = 'stripe'; - if (!$errorforinvoice) { - dol_syslog('* Record payment for invoice id ' . $this->id . '. It includes closing of invoice and regenerating document'); + dol_syslog("The payment has been created for invoice id " . $this->id); + } - // This include closing invoices to 'paid' (and trigger including unsuspending) and regenerating document - $paiement_id = $paiement->create($user, 1); - if ($paiement_id < 0) { + if (!$errorforinvoice && isModEnabled('banque')) { + dol_syslog('* Add payment to bank'); + + $bankaccountid = 0; + if ($paymentmethod == 'paybox') { + $bankaccountid = $conf->global->PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS; + } + if ($paymentmethod == 'paypal') { + $bankaccountid = $conf->global->PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS; + } + if ($paymentmethod == 'stripe') { + $bankaccountid = $conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS; + } + + if ($bankaccountid > 0) { + $label = '(CustomerInvoicePayment)'; + if ($this->type == Facture::TYPE_CREDIT_NOTE) { + $label = '(CustomerInvoicePaymentBack)'; + } // Refund of a credit note + $result = $paiement->addPaymentToBank($user, 'payment', $label, $bankaccountid, $emetteur_name, ''); + if ($result < 0) { $postactionmessages[] = $paiement->error . ($paiement->error ? ' ' : '') . join("
    \n", $paiement->errors); $ispostactionok = -1; $error++; $errorforinvoice++; } else { - $postactionmessages[] = 'Payment created'; + $postactionmessages[] = 'Bank transaction of payment created (by doTakePaymentStripeForThirdparty)'; } - - dol_syslog("The payment has been created for invoice id " . $this->id); - } - - if (!$errorforinvoice && isModEnabled('banque')) { - dol_syslog('* Add payment to bank'); - - $bankaccountid = 0; - if ($paymentmethod == 'paybox') { - $bankaccountid = $conf->global->PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS; - } - if ($paymentmethod == 'paypal') { - $bankaccountid = $conf->global->PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS; - } - if ($paymentmethod == 'stripe') { - $bankaccountid = $conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS; - } - - if ($bankaccountid > 0) { - $label = '(CustomerInvoicePayment)'; - if ($this->type == Facture::TYPE_CREDIT_NOTE) { - $label = '(CustomerInvoicePaymentBack)'; - } // Refund of a credit note - $result = $paiement->addPaymentToBank($user, 'payment', $label, $bankaccountid, $emetteur_name, ''); - if ($result < 0) { - $postactionmessages[] = $paiement->error . ($paiement->error ? ' ' : '') . join("
    \n", $paiement->errors); - $ispostactionok = -1; - $error++; - $errorforinvoice++; - } else { - $postactionmessages[] = 'Bank transaction of payment created (by doTakePaymentStripeForThirdparty)'; - } - } else { - $postactionmessages[] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. No way to record the payment.'; - $ispostactionok = -1; - $error++; - $errorforinvoice++; - } - } - - if ($ispostactionok < 1) { - $description = 'Stripe payment OK (' . $charge->id . ' - ' . $amounttopay . ' ' . $conf->currency . ') but post action KO from doTakePaymentStripeForThirdparty: ' . $FULLTAG; } else { - $description = 'Stripe payment+post action OK (' . $charge->id . ' - ' . $amounttopay . ' ' . $conf->currency . ') from doTakePaymentStripeForThirdparty: ' . $FULLTAG; + $postactionmessages[] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. No way to record the payment.'; + $ispostactionok = -1; + $error++; + $errorforinvoice++; } } - $object = $invoice; - - // Send emails - $labeltouse = 'InvoicePaymentSuccess'; - $sendemailtocustomer = 1; - - if (empty($charge) || $charge->status == 'failed') { - $labeltouse = 'InvoicePaymentFailure'; - if ($noemailtocustomeriferror) { - $sendemailtocustomer = 0; - } // $noemailtocustomeriferror is set when error already reported on myaccount screen - } - - // Track an event - if (empty($charge) || $charge->status == 'failed') { - $actioncode = 'PAYMENT_STRIPE_KO'; - $extraparams = $stripefailurecode; - $extraparams .= (($extraparams && $stripefailuremessage) ? ' - ' : '') . $stripefailuremessage; - $extraparams .= (($extraparams && $stripefailuredeclinecode) ? ' - ' : '') . $stripefailuredeclinecode; + if ($ispostactionok < 1) { + $description = 'Stripe payment OK (' . $charge->id . ' - ' . $amounttopay . ' ' . $conf->currency . ') but post action KO from doTakePaymentStripeForThirdparty: ' . $FULLTAG; } else { - $actioncode = 'PAYMENT_STRIPE_OK'; - $extraparams = ''; + $description = 'Stripe payment+post action OK (' . $charge->id . ' - ' . $amounttopay . ' ' . $conf->currency . ') from doTakePaymentStripeForThirdparty: ' . $FULLTAG; } - } else { - $error++; - $errorforinvoice++; - dol_syslog("No card or payment method found for this stripe customer " . $customer->id, LOG_WARNING); - $this->errors[] = 'Failed to get card | payment method for stripe customer = ' . $customer->id; - - $labeltouse = 'InvoicePaymentFailure'; - $sendemailtocustomer = 1; - if ($noemailtocustomeriferror) { - $sendemailtocustomer = 0; - } // $noemailtocustomeriferror is set when error already reported on myaccount screen - - $description = 'Failed to find or use the payment mode - no credit card defined for the customer account'; - $stripefailurecode = 'BADPAYMENTMODE'; - $stripefailuremessage = 'Failed to find or use the payment mode - no credit card defined for the customer account'; - $postactionmessages[] = $description . ' (' . $stripearrayofkeys['publishable_key'] . ')'; - - $object = $invoice; - - $actioncode = 'PAYMENT_STRIPE_KO'; - $extraparams = ''; } - } else { - // If error because payment was canceled for a logical reason, we do nothing (no email and no event added) - $labeltouse = ''; - $sendemailtocustomer = 0; - - $description = ''; - $stripefailurecode = ''; - $stripefailuremessage = ''; $object = $invoice; - $actioncode = ''; + // Send emails + $labeltouse = 'InvoicePaymentSuccess'; + $sendemailtocustomer = 1; + + if (empty($charge) || $charge->status == 'failed') { + $labeltouse = 'InvoicePaymentFailure'; + if ($noemailtocustomeriferror) { + $sendemailtocustomer = 0; + } // $noemailtocustomeriferror is set when error already reported on myaccount screen + } + + // Track an event + if (empty($charge) || $charge->status == 'failed') { + $actioncode = 'PAYMENT_STRIPE_KO'; + $extraparams = $stripefailurecode; + $extraparams .= (($extraparams && $stripefailuremessage) ? ' - ' : '') . $stripefailuremessage; + $extraparams .= (($extraparams && $stripefailuredeclinecode) ? ' - ' : '') . $stripefailuredeclinecode; + } else { + $actioncode = 'PAYMENT_STRIPE_OK'; + $extraparams = ''; + } + } else { + $error++; + $errorforinvoice++; + dol_syslog("No card or payment method found for this stripe customer " . $customer->id, LOG_WARNING); + $this->errors[] = 'Failed to get card | payment method for stripe customer = ' . $customer->id; + + $labeltouse = 'InvoicePaymentFailure'; + $sendemailtocustomer = 1; + if ($noemailtocustomeriferror) { + $sendemailtocustomer = 0; + } // $noemailtocustomeriferror is set when error already reported on myaccount screen + + $description = 'Failed to find or use the payment mode - no credit card defined for the customer account'; + $stripefailurecode = 'BADPAYMENTMODE'; + $stripefailuremessage = 'Failed to find or use the payment mode - no credit card defined for the customer account'; + $postactionmessages[] = $description . ' (' . $stripearrayofkeys['publishable_key'] . ')'; + + $object = $invoice; + + $actioncode = 'PAYMENT_STRIPE_KO'; $extraparams = ''; } - } else { // Else of the if ($resultthirdparty > 0 && ! empty($customer)) { - if ($resultthirdparty <= 0) { - dol_syslog('SellYourSaasUtils Failed to load customer for thirdparty_id = ' . $thirdparty->id, LOG_WARNING); - $this->errors[] = 'Failed to load customer for thirdparty_id = ' . $thirdparty->id; - } else { // $customer stripe not found - dol_syslog('SellYourSaasUtils Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'], LOG_WARNING); - $this->errors[] = 'Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']; - } - $error++; - $errorforinvoice++; + } else { + // If error because payment was canceled for a logical reason, we do nothing (no email and no event added) + $labeltouse = ''; + $sendemailtocustomer = 0; - $labeltouse = 'InvoicePaymentFailure'; - $sendemailtocustomer = 1; - if ($noemailtocustomeriferror) { - $sendemailtocustomer = 0; - } // $noemailtocustomeriferror is set when error already reported on myaccount screen - - $description = 'Failed to find or use your payment mode (no payment mode for this customer id)'; - $stripefailurecode = 'BADPAYMENTMODE'; - $stripefailuremessage = 'Failed to find or use your payment mode (no payment mode for this customer id)'; - $postactionmessages = []; + $description = ''; + $stripefailurecode = ''; + $stripefailuremessage = ''; $object = $invoice; - $actioncode = 'PAYMENT_STRIPE_KO'; + $actioncode = ''; $extraparams = ''; } - - // Send email + create action after - if ($sendemailtocustomer && $labeltouse) { - dol_syslog("* Send email with result of payment - " . $labeltouse); - - // Set output language - $outputlangs = new Translate('', $conf); - $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); - $outputlangs->loadLangs(["main", "members", "bills"]); - - // Get email content from templae - $arraydefaultmessage = null; - - include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; - $formmail = new FormMail($this->db); - - if (!empty($labeltouse)) { - $arraydefaultmessage = $formmail->getEMailTemplate($this->db, 'facture_send', $user, $outputlangs, 0, 1, $labeltouse); - } - - if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { - $subject = $arraydefaultmessage->topic; - $msg = $arraydefaultmessage->content; - } - - $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); - - //$substitutionarray['__SELLYOURSAAS_PAYMENT_ERROR_DESC__'] = $stripefailurecode . ' ' . $stripefailuremessage; - - complete_substitutions_array($substitutionarray, $outputlangs, $object); - - // Set the property ->ref_customer with ref_customer of contract so __REF_CLIENT__ will be replaced in email content - // Search contract linked to invoice - $foundcontract = null; - $this->fetchObjectLinked(); - if (is_array($this->linkedObjects['contrat']) && count($this->linkedObjects['contrat']) > 0) { - //dol_sort_array($object->linkedObjects['facture'], 'date'); - foreach ($this->linkedObjects['contrat'] as $idcontract => $contract) { - $substitutionarray['__CONTRACT_REF__'] = $contract->ref_customer; - $substitutionarray['__REFCLIENT__'] = $contract->ref_customer; // For backward compatibility - $substitutionarray['__REF_CLIENT__'] = $contract->ref_customer; - $foundcontract = $contract; - break; - } - } - - dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__=' . $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__']); - - //erics - erreur de réécriture de l'url de téléchargement direct de la facture ... le lien de base est le bon - //on cherche donc d'ou vien le pb ... - //$urlforsellyoursaasaccount = getRootUrlForAccount($foundcontract); - // if ($urlforsellyoursaasaccount) { - // $tmpforurl = preg_replace('/.*document.php/', '', $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__']); - // if ($tmpforurl) { - // dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__ cas 1, urlforsellyoursaasaccount=' . $urlforsellyoursaasaccount); - // // $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = $urlforsellyoursaasaccount . '/source/document.php' . $tmpforurl; - // } else { - // dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__ cas 2, urlforsellyoursaasaccount=' . $urlforsellyoursaasaccount); - // // $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = $urlforsellyoursaasaccount; - // } - // } - - $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); - $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs); - - // Attach a file ? - $file = ''; - $listofpaths = []; - $listofnames = []; - $listofmimes = []; - if (is_object($invoice)) { - $invoicediroutput = $conf->facture->dir_output; - //erics - choix du PDF a joindre aux mails - $fileparams = dol_most_recent_file($invoicediroutput . '/' . $this->ref, preg_quote($this->ref, '/') . '[^\-]+*.pdf'); - $file = $fileparams['fullname']; - //$file = $invoicediroutput . '/' . $this->ref . '/' . $this->ref . '.pdf'; - // $file = ''; // Disable attachment of invoice in emails - - if ($file) { - $listofpaths = [$file]; - $listofnames = [basename($file)]; - $listofmimes = [dol_mimetype($file)]; - } - } - $from = "";//$conf->global->SELLYOURSAAS_NOREPLY_EMAIL; - - $trackid = 'inv' . $this->id; - $moreinheader = 'X-Dolibarr-Info: doTakeStripePaymentForThirdParty' . "\r\n"; - - // Send email (substitutionarray must be done just before this) - include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php'; - $mailfile = new CMailFile($subjecttosend, $this->thirdparty->email, $from, $texttosend, $listofpaths, $listofmimes, $listofnames, '', '', 0, -1, '', '', $trackid, $moreinheader); - if ($mailfile->sendfile()) { - $result = 1; - } else { - $this->error = $langs->trans("ErrorFailedToSendMail", $from, $this->thirdparty->email) . '. ' . $mailfile->error; - $result = -1; - } - - if ($result < 0) { - $errmsg = $this->error; - $postactionmessages[] = $errmsg; - $ispostactionok = -1; - } else { - if ($file) { - $postactionmessages[] = 'Email sent to thirdparty (to ' . $this->thirdparty->email . ' with invoice document attached: ' . $file . ', language = ' . $outputlangs->defaultlang . ')'; - } else { - $postactionmessages[] = 'Email sent to thirdparty (to ' . $this->thirdparty->email . ' without any attached document, language = ' . $outputlangs->defaultlang . ')'; - } - } + } else { // Else of the if ($resultthirdparty > 0 && ! empty($customer)) { + if ($resultthirdparty <= 0) { + dol_syslog('SellYourSaasUtils Failed to load customer for thirdparty_id = ' . $thirdparty->id, LOG_WARNING); + $this->errors[] = 'Failed to load customer for thirdparty_id = ' . $thirdparty->id; + } else { // $customer stripe not found + dol_syslog('SellYourSaasUtils Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'], LOG_WARNING); + $this->errors[] = 'Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']; } - - if ($description) { - dol_syslog("* Record event for payment result - " . $description); - require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; - - // Insert record of payment (success or error) - $actioncomm = new ActionComm($this->db); - - $actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...) - $actioncomm->code = 'AC_' . $actioncode; - $actioncomm->label = $description; - $actioncomm->note_private = join(",\n", $postactionmessages); - $actioncomm->fk_project = $this->fk_project; - $actioncomm->datep = $now; - $actioncomm->datef = $now; - $actioncomm->percentage = -1; // Not applicable - $actioncomm->socid = $thirdparty->id; - $actioncomm->contactid = 0; - $actioncomm->authorid = $user->id; // User saving action - $actioncomm->userownerid = $user->id; // Owner of action - // Fields when action is a real email (content is already into note) - /*$actioncomm->email_msgid = $object->email_msgid; - $actioncomm->email_from = $object->email_from; - $actioncomm->email_sender= $object->email_sender; - $actioncomm->email_to = $object->email_to; - $actioncomm->email_tocc = $object->email_tocc; - $actioncomm->email_tobcc = $object->email_tobcc; - $actioncomm->email_subject = $object->email_subject; - $actioncomm->errors_to = $object->errors_to;*/ - $actioncomm->fk_element = $this->id; - $actioncomm->elementtype = $this->element; - $actioncomm->extraparams = dol_trunc($extraparams, 250); - - $actioncomm->create($user); - } - - $this->description = $description; - $this->postactionmessages = $postactionmessages; - } catch (Exception $e) { $error++; $errorforinvoice++; - dol_syslog('Error ' . $e->getMessage(), LOG_ERR); - $this->errors[] = 'Error ' . $e->getMessage(); + + $labeltouse = 'InvoicePaymentFailure'; + $sendemailtocustomer = 1; + if ($noemailtocustomeriferror) { + $sendemailtocustomer = 0; + } // $noemailtocustomeriferror is set when error already reported on myaccount screen + + $description = 'Failed to find or use your payment mode (no payment mode for this customer id)'; + $stripefailurecode = 'BADPAYMENTMODE'; + $stripefailuremessage = 'Failed to find or use your payment mode (no payment mode for this customer id)'; + $postactionmessages = []; + + $object = $invoice; + + $actioncode = 'PAYMENT_STRIPE_KO'; + $extraparams = ''; } - } else { // If remain to pay is null + + // Send email + create action after + if ($sendemailtocustomer && $labeltouse) { + dol_syslog("* Send email with result of payment - " . $labeltouse); + + // Set output language + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); + $outputlangs->loadLangs(["main", "members", "bills"]); + + // Get email content from templae + $arraydefaultmessage = null; + + include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; + $formmail = new FormMail($this->db); + + if (!empty($labeltouse)) { + $arraydefaultmessage = $formmail->getEMailTemplate($this->db, 'facture_send', $user, $outputlangs, 0, 1, $labeltouse); + } + + if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { + $subject = $arraydefaultmessage->topic; + $msg = $arraydefaultmessage->content; + } + + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + + //$substitutionarray['__SELLYOURSAAS_PAYMENT_ERROR_DESC__'] = $stripefailurecode . ' ' . $stripefailuremessage; + + complete_substitutions_array($substitutionarray, $outputlangs, $object); + + // Set the property ->ref_customer with ref_customer of contract so __REF_CLIENT__ will be replaced in email content + // Search contract linked to invoice + $foundcontract = null; + $this->fetchObjectLinked(); + if (is_array($this->linkedObjects['contrat']) && count($this->linkedObjects['contrat']) > 0) { + //dol_sort_array($object->linkedObjects['facture'], 'date'); + foreach ($this->linkedObjects['contrat'] as $idcontract => $contract) { + $substitutionarray['__CONTRACT_REF__'] = $contract->ref_customer; + $substitutionarray['__REFCLIENT__'] = $contract->ref_customer; // For backward compatibility + $substitutionarray['__REF_CLIENT__'] = $contract->ref_customer; + $foundcontract = $contract; + break; + } + } + + dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__=' . $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__']); + + //erics - erreur de réécriture de l'url de téléchargement direct de la facture ... le lien de base est le bon + //on cherche donc d'ou vien le pb ... + //$urlforsellyoursaasaccount = getRootUrlForAccount($foundcontract); + // if ($urlforsellyoursaasaccount) { + // $tmpforurl = preg_replace('/.*document.php/', '', $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__']); + // if ($tmpforurl) { + // dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__ cas 1, urlforsellyoursaasaccount=' . $urlforsellyoursaasaccount); + // // $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = $urlforsellyoursaasaccount . '/source/document.php' . $tmpforurl; + // } else { + // dol_syslog('__DIRECTDOWNLOAD_URL_INVOICE__ cas 2, urlforsellyoursaasaccount=' . $urlforsellyoursaasaccount); + // // $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = $urlforsellyoursaasaccount; + // } + // } + + $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); + $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs); + + // Attach a file ? + $file = ''; + $listofpaths = []; + $listofnames = []; + $listofmimes = []; + if (is_object($invoice)) { + $invoicediroutput = $conf->facture->dir_output; + //erics - choix du PDF a joindre aux mails + $fileparams = dol_most_recent_file($invoicediroutput . '/' . $this->ref, preg_quote($this->ref, '/') . '[^\-]+*.pdf'); + $file = $fileparams['fullname']; + //$file = $invoicediroutput . '/' . $this->ref . '/' . $this->ref . '.pdf'; + // $file = ''; // Disable attachment of invoice in emails + + if ($file) { + $listofpaths = [$file]; + $listofnames = [basename($file)]; + $listofmimes = [dol_mimetype($file)]; + } + } + $from = "";//$conf->global->SELLYOURSAAS_NOREPLY_EMAIL; + + $trackid = 'inv' . $this->id; + $moreinheader = 'X-Dolibarr-Info: makeStripeSepaRequest' . "\r\n"; + + // Send email (substitutionarray must be done just before this) + include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php'; + $mailfile = new CMailFile($subjecttosend, $this->thirdparty->email, $from, $texttosend, $listofpaths, $listofmimes, $listofnames, '', '', 0, -1, '', '', $trackid, $moreinheader); + if ($mailfile->sendfile()) { + $result = 1; + } else { + $this->error = $langs->trans("ErrorFailedToSendMail", $from, $this->thirdparty->email) . '. ' . $mailfile->error; + $result = -1; + } + + if ($result < 0) { + $errmsg = $this->error; + $postactionmessages[] = $errmsg; + $ispostactionok = -1; + } else { + if ($file) { + $postactionmessages[] = 'Email sent to thirdparty (to ' . $this->thirdparty->email . ' with invoice document attached: ' . $file . ', language = ' . $outputlangs->defaultlang . ')'; + } else { + $postactionmessages[] = 'Email sent to thirdparty (to ' . $this->thirdparty->email . ' without any attached document, language = ' . $outputlangs->defaultlang . ')'; + } + } + } + + if ($description) { + dol_syslog("* Record event for payment result - " . $description); + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; + + // Insert record of payment (success or error) + $actioncomm = new ActionComm($this->db); + + $actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...) + $actioncomm->code = 'AC_' . $actioncode; + $actioncomm->label = $description; + $actioncomm->note_private = join(",\n", $postactionmessages); + $actioncomm->fk_project = $this->fk_project; + $actioncomm->datep = $now; + $actioncomm->datef = $now; + $actioncomm->percentage = -1; // Not applicable + $actioncomm->socid = $thirdparty->id; + $actioncomm->contactid = 0; + $actioncomm->authorid = $user->id; // User saving action + $actioncomm->userownerid = $user->id; // Owner of action + // Fields when action is a real email (content is already into note) + /*$actioncomm->email_msgid = $object->email_msgid; + $actioncomm->email_from = $object->email_from; + $actioncomm->email_sender= $object->email_sender; + $actioncomm->email_to = $object->email_to; + $actioncomm->email_tocc = $object->email_tocc; + $actioncomm->email_tobcc = $object->email_tobcc; + $actioncomm->email_subject = $object->email_subject; + $actioncomm->errors_to = $object->errors_to;*/ + $actioncomm->fk_element = $this->id; + $actioncomm->elementtype = $this->element; + $actioncomm->extraparams = dol_trunc($extraparams, 250); + + $actioncomm->create($user); + } + + $this->description = $description; + $this->postactionmessages = $postactionmessages; + } catch (Exception $e) { $error++; $errorforinvoice++; - dol_syslog("Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?", LOG_WARNING); - $this->errors[] = "Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?"; + dol_syslog('Error ' . $e->getMessage(), LOG_ERR); + $this->errors[] = 'Error ' . $e->getMessage(); } + } else { // If remain to pay is null + $error++; + $errorforinvoice++; + dol_syslog("Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?", LOG_WARNING); + $this->errors[] = "Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?"; + } - $sql = "INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande("; - $sql .= "fk_facture, "; - $sql .= " amount, date_demande, fk_user_demande, ext_payment_id, ext_payment_site, sourcetype, entity)"; - $sql .= " VALUES (".$this->id; - $sql .= ",".((float) price2num($amount)); - $sql .= ",'".$this->db->idate($now)."'"; - $sql .= ",".((int) $fuser->id); - $sql .= ",'".$this->db->escape($stripe_id)."'"; - $sql .= ",'".$this->db->escape($stripe_uri)."'"; - $sql .= ",'".$this->db->escape($sourcetype)."'"; - $sql .= ",".$conf->entity; - $sql .= ")"; + $sql = "INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande("; + $sql .= "fk_facture, "; + $sql .= " amount, date_demande, fk_user_demande, ext_payment_id, ext_payment_site, sourcetype, entity)"; + $sql .= " VALUES (".$this->id; + $sql .= ",".((float) price2num($amount)); + $sql .= ",'".$this->db->idate($now)."'"; + $sql .= ",".((int) $fuser->id); + $sql .= ",'".$this->db->escape($stripe_id)."'"; + $sql .= ",'".$this->db->escape($stripe_uri)."'"; + $sql .= ",'".$this->db->escape($sourcetype)."'"; + $sql .= ",".$conf->entity; + $sql .= ")"; - dol_syslog(get_class($this)."::demande_prelevement_stripe", LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->error = $this->db->lasterror(); - dol_syslog(get_class($this).'::demande_prelevement_stripe Erreur'); - $error++; - } - } else { - $this->error = 'WithdrawRequestErrorNilAmount'; - dol_syslog(get_class($this).'::demande_prelevement_stripe WithdrawRequestErrorNilAmount'); + dol_syslog(get_class($this)."::makeStripeSepaRequest", LOG_DEBUG); + $resql = $this->db->query($sql); + if (!$resql) { + $this->error = $this->db->lasterror(); + dol_syslog(get_class($this).'::makeStripeSepaRequest Erreur'); $error++; } - - if (!$error) { - // Force payment mode of invoice to withdraw - $payment_mode_id = dol_getIdFromCode($this->db, ($type == 'bank-transfer' ? 'VIR' : 'PRE'), 'c_paiement', 'code', 'id', 1); - if ($payment_mode_id > 0) { - $result = $this->setPaymentMethods($payment_mode_id); - } - } - - if ($error) { - return -1; - } - return 1; } else { - $this->error = "A request already exists"; - dol_syslog(get_class($this).'::demande_prelevement_stripe Impossible de creer une demande, demande deja en cours'); - return 0; + $this->error = 'WithdrawRequestErrorNilAmount'; + dol_syslog(get_class($this).'::makeStripeSepaRequest WithdrawRequestErrorNilAmount'); + $error++; } + + if (!$error) { + // Force payment mode of invoice to withdraw + $payment_mode_id = dol_getIdFromCode($this->db, ($type == 'bank-transfer' ? 'VIR' : 'PRE'), 'c_paiement', 'code', 'id', 1); + if ($payment_mode_id > 0) { + $result = $this->setPaymentMethods($payment_mode_id); + } + } + + if ($error) { + return -1; + } + return 1; } else { $this->error = $this->db->error(); - dol_syslog(get_class($this).'::demande_prelevement_stripe Erreur -2'); + dol_syslog(get_class($this).'::makeStripeSepaRequest Erreur -2'); return -2; } } else { $this->error = "Status of invoice does not allow this"; - dol_syslog(get_class($this)."::demande_prelevement_stripe ".$this->error." $this->statut, $this->paye, $this->mode_reglement_id"); + dol_syslog(get_class($this)."::makeStripeSepaRequest ".$this->error." $this->statut, $this->paye, $this->mode_reglement_id"); return -3; } } diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 2a2ca025cba..9bdd4a2b323 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -78,7 +78,7 @@ abstract class CommonObject /** * @var array To store error results of ->validateField() */ - public $validateFieldsErrors = array(); + private $validateFieldsErrors = array(); /** * @var string ID to identify managed object @@ -86,7 +86,8 @@ abstract class CommonObject public $element; /** - * @var string Name to use for 'features' parameter to check module permissions with restrictedArea(). Undefined means same value than $element. + * @var string Name to use for 'features' parameter to check module permissions user->rights->feature with restrictedArea(). + * Undefined means same value than $element. Can be use to force a check on another element for example for class of line, we mention here the parent element. */ public $element_for_permission; @@ -136,9 +137,9 @@ abstract class CommonObject public $linkedObjects; /** - * @var boolean Array of boolean with object id as key and value as true if linkedObjects full loaded. Loaded by ->fetchObjectLinked. Important for pdf generation time reduction. + * @var boolean[] Array of boolean with object id as key and value as true if linkedObjects full loaded for object id. Loaded by ->fetchObjectLinked. Important for pdf generation time reduction. */ - public $linkedObjectsFullLoaded = array(); + private $linkedObjectsFullLoaded = array(); /** * @var CommonObject To store a cloned copy of object before to edit it and keep track of old properties @@ -3757,25 +3758,7 @@ abstract class CommonObject $fieldlocaltax2 = 'localtax2'; $fieldttc = 'total_ttc'; // Specific code for backward compatibility with old field names - if ($this->element == 'facture' || $this->element == 'facturerec') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier' || $this->element == 'invoice_supplier_rec') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'propal') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'expensereport') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'supplier_proposal') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'commande') { - $fieldtva = 'total_tva'; - } - if ($this->element == 'order_supplier') { + if (in_array($this->element, array('propal', 'commande', 'facture', 'facturerec', 'supplier_proposal', 'order_supplier', 'facture_fourn', 'invoice_supplier', 'invoice_supplier_rec', 'expensereport'))) { $fieldtva = 'total_tva'; } @@ -4345,12 +4328,12 @@ abstract class CommonObject } /** - * Set status of an object + * Set status of an object. * * @param int $status Status to set * @param int $elementId Id of element to force (use this->id by default if null) * @param string $elementType Type of element to force (use this->table_element by default) - * @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it not recommended and is deprecated. + * @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it is not recommended and is deprecated. * @param string $fieldstatus Name of status field in this->table_element * @return int <0 if KO, >0 if OK */ @@ -4400,41 +4383,49 @@ abstract class CommonObject if ($status == 1 && in_array($elementTable, array('inventory'))) { $sql .= ", date_validation = '".$this->db->idate(dol_now())."'"; } - $sql .= " WHERE rowid=".((int) $elementId); + $sql .= " WHERE rowid = ".((int) $elementId); + $sql .= " AND ".$fieldstatus." <> ".((int) $status); // We avoid update if status already correct dol_syslog(get_class($this)."::setStatut", LOG_DEBUG); - if ($this->db->query($sql)) { + $resql = $this->db->query($sql); + if ($resql) { $error = 0; - // Try autoset of trigkey - if (empty($trigkey)) { - if ($this->element == 'supplier_proposal' && $status == 2) { - $trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class - } - if ($this->element == 'supplier_proposal' && $status == 3) { - $trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class - } - if ($this->element == 'supplier_proposal' && $status == 4) { - $trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class - } - if ($this->element == 'fichinter' && $status == 3) { - $trigkey = 'FICHINTER_CLASSIFY_DONE'; - } - if ($this->element == 'fichinter' && $status == 2) { - $trigkey = 'FICHINTER_CLASSIFY_BILLED'; - } - if ($this->element == 'fichinter' && $status == 1) { - $trigkey = 'FICHINTER_CLASSIFY_UNBILLED'; - } - } + $nb_rows_affected = $this->db->affected_rows($resql); // should be 1 or 0 if status was already correct - if ($trigkey) { - // Call trigger - $result = $this->call_trigger($trigkey, $user); - if ($result < 0) { - $error++; + if ($nb_rows_affected > 0) { + if (empty($trigkey)) { + // Try to guess trigkey (for backward compatibility, now we should have trigkey defined into the call of setStatus) + if ($this->element == 'supplier_proposal' && $status == 2) { + $trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class + } + if ($this->element == 'supplier_proposal' && $status == 3) { + $trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class + } + if ($this->element == 'supplier_proposal' && $status == 4) { + $trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class + } + if ($this->element == 'fichinter' && $status == 3) { + $trigkey = 'FICHINTER_CLASSIFY_DONE'; + } + if ($this->element == 'fichinter' && $status == 2) { + $trigkey = 'FICHINTER_CLASSIFY_BILLED'; + } + if ($this->element == 'fichinter' && $status == 1) { + $trigkey = 'FICHINTER_CLASSIFY_UNBILLED'; + } } - // End call triggers + + if ($trigkey) { + // Call trigger + $result = $this->call_trigger($trigkey, $user); + if ($result < 0) { + $error++; + } + // End call triggers + } + } else { + // The status was probably already good. We do nothing more, no triggers. } if (!$error) { @@ -4909,15 +4900,18 @@ abstract class CommonObject // Note: This is deprecated. If you need to overwrite the tpl file, use instead the hook. $dirtpls = array_merge($conf->modules_parts['tpl'], array($defaulttpldir)); foreach ($dirtpls as $module => $reldir) { + $res = 0; if (!empty($module)) { $tpl = dol_buildpath($reldir.'/objectline_title.tpl.php'); } else { $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_title.tpl.php'; } - if (empty($conf->file->strict_mode)) { - $res = @include $tpl; - } else { - $res = include $tpl; // for debug + if (file_exists($tpl)) { + if (empty($conf->file->strict_mode)) { + $res = @include $tpl; + } else { + $res = include $tpl; // for debug + } } if ($res) { break; @@ -5022,7 +5016,7 @@ abstract class CommonObject } $text .= ' - '.(!empty($line->label) ? $line->label : $label); - $description .= (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : (!empty($line->description) ? dol_htmlentitiesbr($line->description) : '')); // Description is what to show on popup. We shown nothing if already into desc. + $description .= (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : (!empty($line->description) ? dol_htmlentitiesbr($line->description) : '')); // Description is what to show on popup. We shown nothing if already into desc. } $line->pu_ttc = price2num((!empty($line->subprice) ? $line->subprice : 0) * (1 + ((!empty($line->tva_tx) ? $line->tva_tx : 0) / 100)), 'MU'); @@ -5032,16 +5026,18 @@ abstract class CommonObject // Note: This is deprecated. If you need to overwrite the tpl file, use instead the hook printObjectLine and printObjectSubLine. $dirtpls = array_merge($conf->modules_parts['tpl'], array($defaulttpldir)); foreach ($dirtpls as $module => $reldir) { + $res = 0; if (!empty($module)) { $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); } else { $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_view.tpl.php'; } - - if (empty($conf->file->strict_mode)) { - $res = @include $tpl; - } else { - $res = include $tpl; // for debug + if (file_exists($tpl)) { + if (empty($conf->file->strict_mode)) { + $res = @include $tpl; + } else { + $res = include $tpl; // for debug + } } if ($res) { break; @@ -5616,6 +5612,9 @@ abstract class CommonObject if ($this->element == 'contrat' && !empty($conf->global->CONTRACT_ALLOW_EXTERNAL_DOWNLOAD)) { $setsharekey = true; } + if ($this->element == 'fichinter' && !empty($conf->global->FICHINTER_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } if ($this->element == 'supplier_proposal' && !empty($conf->global->SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) { $setsharekey = true; } @@ -6059,14 +6058,15 @@ abstract class CommonObject //var_dump('key '.$key.' '.$value.' type='.$extrafields->attributes[$this->table_element]['type'][$key].' '.$this->array_options["options_".$key]); } } + } - // If field is a computed field, value must become result of compute - foreach ($tab as $key => $value) { - if (!empty($extrafields->attributes[$this->table_element]) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) { - //var_dump($conf->disable_compute); - if (empty($conf->disable_compute)) { - $this->array_options["options_".$key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, ''); - } + // If field is a computed field, value must become result of compute (regardless of whether a row exists + // in the element's extrafields table) + foreach ($extrafields->attributes[$this->table_element]['label'] as $key => $val) { + if (!empty($extrafields->attributes[$this->table_element]) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) { + //var_dump($conf->disable_compute); + if (empty($conf->disable_compute)) { + $this->array_options["options_".$key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, ''); } } } @@ -7835,7 +7835,7 @@ abstract class CommonObject * get field error message * * @param string $fieldKey Key of attribute - * @return string + * @return string Error message of validation ('' if no error) */ public function getFieldError($fieldKey) { @@ -8575,7 +8575,7 @@ abstract class CommonObject // For backward compatibility if ($modulepart == 'product') { - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $dir = $sdir.'/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/"; $pdir = '/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/"; } @@ -8597,7 +8597,7 @@ abstract class CommonObject $filearray = dol_dir_list($dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1); - /*if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs + /*if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) // For backward compatiblity, we scan also old dirs { $filearrayold=dol_dir_list($dirold,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); $filearray=array_merge($filearray, $filearrayold); diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 234f8d80e0c..42927d398aa 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -347,7 +347,7 @@ class Conf $db->free($resql); } - // Include other local consts.php files and fetch their values to the corresponding database constants. + // Include other local file xxx/zzz_consts.php to overwrite some variables if (!empty($this->global->LOCAL_CONSTS_FILES)) { $filesList = explode(":", $this->global->LOCAL_CONSTS_FILES); foreach ($filesList as $file) { @@ -675,6 +675,9 @@ class Conf } $this->product->limit_size = $this->global->PRODUIT_LIMIT_SIZE; + // Set PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE, may be modified later according to browser + $this->global->PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE = (isset($this->global->PRODUIT_DESC_IN_FORM) ? $this->global->PRODUIT_DESC_IN_FORM : 0); + // conf->theme et $this->css if (empty($this->global->MAIN_THEME)) { $this->global->MAIN_THEME = "eldy"; diff --git a/htdocs/core/class/discount.class.php b/htdocs/core/class/discount.class.php index dff1383a629..052d5ae7e1c 100644 --- a/htdocs/core/class/discount.class.php +++ b/htdocs/core/class/discount.class.php @@ -559,7 +559,7 @@ class DiscountAbsolute /** * Return amount (with tax) of all deposits invoices used by invoice as a payment. - * Should always be empty, except if option FACTURE_DEPOSITS_ARE_JUST_PAYMENTS is on (not recommended). + * Should always be empty, except if option FACTURE_DEPOSITS_ARE_JUST_PAYMENTS or FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS is on (not recommended). * * @param CommonInvoice $invoice Object invoice (customer of supplier) * @param int $multicurrency 1=Return multicurrency_amount instead of amount. TODO Add a mode multicurrency = -1 to return array with amount + multicurrency amount diff --git a/htdocs/core/class/doleditor.class.php b/htdocs/core/class/doleditor.class.php index 007210c8888..53a20d6dadd 100644 --- a/htdocs/core/class/doleditor.class.php +++ b/htdocs/core/class/doleditor.class.php @@ -60,7 +60,7 @@ class DolEditor * 'In' = each window has its own toolbar * 'Out:name' = share toolbar into the div called 'name' * @param boolean $toolbarstartexpanded Bar is visible or not at start - * @param int $uselocalbrowser Enabled to add links to local object with local browser. If false, only external images can be added in content. + * @param boolean $uselocalbrowser Enabled to add links to local object with local browser. If false, only external images can be added in content. * @param boolean|string $okforextendededitor True=Allow usage of extended editor tool if qualified (like ckeditor). If 'textarea', force use of simple textarea. If 'ace', force use of Ace. * Warning: If you use 'ace', don't forget to also include ace.js in page header. Also, the button "save" must have class="buttonforacesave". * @param int $rows Size of rows for textarea tool @@ -163,7 +163,7 @@ class DolEditor $skin = 'moono-lisa'; // default with ckeditor 4.6 : moono-lisa } - $pluginstodisable = 'elementspath,save,flash,div,specialchar'; + $pluginstodisable = 'elementspath,save,flash,div,specialchar,anchor'; if (!empty($conf->dol_optimize_smallscreen)) { $pluginstodisable .= ',scayt,wsc,find,undo'; } @@ -198,7 +198,7 @@ class DolEditor htmlEncodeOutput:'.$htmlencode_force.', allowedContent:'.($disallowAnyContent ? 'false' : 'true').', /* Advanced Content Filter (ACF) is own when allowedContent is false */ extraAllowedContent: \'a[target];div{float,display}\', /* Add the style float and display into div to default other allowed tags */ - disallowedContent: '.($disallowAnyContent ? '\'\'' : '\'\'').', /* Tags that are not allowed */ + disallowedContent: '.($disallowAnyContent ? '\'\'' : '\'\'').', /* Tags that are not allowed */ fullPage: '.($fullpage ? 'true' : 'false').', /* if true, the html, header and body tags are kept */ toolbar: \''.$this->toolbarname.'\', toolbarStartupExpanded: '.($this->toolbarstartexpanded ? 'true' : 'false').', diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index e1859d61653..0a1f5f16d6d 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -165,7 +165,7 @@ class Form $ret .= '
    '; } if ($htmlname && GETPOST('action', 'aZ09') != 'edit'.$htmlname && $perm) { - $ret .= 'id.$moreparam.'">'.img_edit($langs->trans('Edit'), ($notabletag ? 0 : 1)).''; + $ret .= 'id.$moreparam.'">'.img_edit($langs->trans('Edit'), ($notabletag ? 0 : 1)).''; } if (!empty($notabletag) && $notabletag == 1) { $ret .= ' : '; @@ -626,11 +626,11 @@ class Form $extrastyle = ''; if ($direction < 0) { $extracss = ($extracss ? $extracss.' ' : '').($notabs != 3 ? 'inline-block' : ''); - $extrastyle = 'padding: 0px; padding-left: 3px !important;'; + $extrastyle = 'padding: 0px; padding-left: 3px;'; } if ($direction > 0) { $extracss = ($extracss ? $extracss.' ' : '').($notabs != 3 ? 'inline-block' : ''); - $extrastyle = 'padding: 0px; padding-right: 3px !important;'; + $extrastyle = 'padding: 0px; padding-right: 3px;'; } $classfortooltip = 'classfortooltip'; @@ -673,7 +673,7 @@ class Form if ($direction < 0) { $s .= '<'.$tag.$paramfortooltipimg; if ($tag == 'td') { - $s .= ' class=valigntop" width="14"'; + $s .= ' class="valigntop" width="14"'; } $s .= '>'.$textfordialog.$img.''; } @@ -3173,6 +3173,8 @@ class Form 'type'=>$outtype, 'price_ht'=>price2num($outprice_ht), 'price_ttc'=>price2num($outprice_ttc), + 'price_ht_locale'=>price(price2num($outprice_ht)), + 'price_ttc_locale'=>price(price2num($outprice_ttc)), 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'default_vat_code'=>$outdefault_vat_code, @@ -3274,9 +3276,9 @@ class Form $sql .= " pfp.supplier_reputation"; // if we use supplier description of the products if (!empty($conf->global->PRODUIT_FOURN_TEXTS)) { - $sql .= " ,pfp.desc_fourn as description"; + $sql .= ", pfp.desc_fourn as description"; } else { - $sql .= " ,p.description"; + $sql .= ", p.description"; } // Units if (!empty($conf->global->PRODUCT_USE_UNITS)) { @@ -3558,7 +3560,13 @@ class Form $optstart .= ' disabled'; } if (!empty($objp->idprodfournprice) && $objp->idprodfournprice > 0) { - $optstart .= ' data-product-id="'.$objp->rowid.'" data-price-id="'.$objp->idprodfournprice.'" data-qty="'.$objp->quantity.'" data-up="'.$objp->unitprice.'" data-discount="'.$outdiscount.'" data-tvatx="'.$objp->tva_tx.'"'; + $opt .= ' data-product-id="'.dol_escape_htmltag($objp->rowid).'"'; + $opt .= ' data-price-id="'.dol_escape_htmltag($objp->idprodfournprice).'"'; + $opt .= ' data-qty="'.dol_escape_htmltag($objp->quantity).'"'; + $opt .= ' data-up="'.dol_escape_htmltag($objp->unitprice).'"'; + $opt .= ' data-up-locale="'.dol_escape_htmltag(price($objp->unitprice)).'"'; + $opt .= ' data-discount="'.dol_escape_htmltag($outdiscount).'"'; + $opt .= ' data-tvatx="'.dol_escape_htmltag($objp->tva_tx).'"'; } $optstart .= ' data-description="'.dol_escape_htmltag($objp->description, 0, 1).'"'; @@ -3594,8 +3602,27 @@ class Form // "key" value of json key array is used by jQuery automatically as selected value. Example: 'type' = product or service, 'price_ht' = unit price without tax // "label" value of json key array is used by jQuery automatically as text for combo box $out .= $optstart . ' data-html="'.dol_escape_htmltag($optlabel).'">' . $optlabel . "\n";; - array_push($outarray, $outarrayentry); - + array_push( + $outarray, + array('key'=>$outkey, + 'value'=>$outref, + 'label'=>$outval, + 'qty'=>$outqty, + 'price_qty_ht'=>price2num($objp->fprice, 'MU'), // Keep higher resolution for price for the min qty + 'price_unit_ht'=>price2num($objp->unitprice, 'MU'), // This is used to fill the Unit Price + 'price_ht'=>price2num($objp->unitprice, 'MU'), // This is used to fill the Unit Price (for compatibility) + 'price_qty_ht_locale'=>price($objp->fprice), + 'price_unit_ht_locale'=>price($objp->unitprice), + 'tva_tx'=>$objp->tva_tx, + 'default_vat_code'=>$objp->default_vat_code, + 'discount'=>$outdiscount, + 'type'=>$outtype, + 'duration_value'=>$outdurationvalue, + 'duration_unit'=>$outdurationunit, + 'disabled'=>(empty($objp->idprodfournprice) ? true : false), + 'description'=>$objp->description + ) + ); // Exemple of var_dump $outarray // array(1) {[0]=>array(6) {[key"]=>string(1) "2" ["value"]=>string(3) "ppp" // ["label"]=>string(76) "ppp (fff2) - ppp - 20,00 Euros/1unité (20,00 Euros/unité)" @@ -5357,9 +5384,10 @@ class Form * @param int $maxlength Max length * @param int $forcefocus Force focus on field (works with javascript only) * @param int $nooutput No print is done. String is returned. + * @param string $textifnoproject Text to show if no project * @return string Return html content */ - public function form_project($page, $socid, $selected = '', $htmlname = 'projectid', $discard_closed = 0, $maxlength = 20, $forcefocus = 0, $nooutput = 0) + public function form_project($page, $socid, $selected = '', $htmlname = 'projectid', $discard_closed = 0, $maxlength = 20, $forcefocus = 0, $nooutput = 0, $textifnoproject = '') { // phpcs:enable global $langs; @@ -5373,7 +5401,6 @@ class Form $langs->load("project"); if ($htmlname != "none") { - $out .= "\n"; $out .= '
    '; $out .= ''; $out .= ''; @@ -5385,9 +5412,9 @@ class Form if ($selected) { $projet = new Project($this->db); $projet->fetch($selected); - $out .= $projet->getNomUrl(1, '', 1); + $out .= $projet->getNomUrl(0, '', 1); } else { - $out .= " "; + $out .= ''.$textifnoproject.''; } $out .= ''; } @@ -5412,22 +5439,26 @@ class Form * @param string $deposit_percent < 0 : deposit_percent input makes no sense (for example, in list filters) * 0 : use default deposit percentage from entry * > 0 : force deposit percentage (for example, from company object) + * @param int $nooutput No print is done. String is returned. * @return void */ - public function form_conditions_reglement($page, $selected = '', $htmlname = 'cond_reglement_id', $addempty = 0, $type = '', $filtertype = -1, $deposit_percent = -1) + public function form_conditions_reglement($page, $selected = '', $htmlname = 'cond_reglement_id', $addempty = 0, $type = '', $filtertype = -1, $deposit_percent = -1, $nooutput = 0) { // phpcs:enable global $langs; + + $out = ''; + if ($htmlname != "none") { - print ''; - print ''; - print ''; + $out .= ''; + $out .= ''; + $out .= ''; if ($type) { - print ''; + $out .= ''; } - print $this->getSelectConditionsPaiements($selected, $htmlname, $filtertype, $addempty, 0, '', $deposit_percent); - print ''; - print '
    '; + $out .= $this->getSelectConditionsPaiements($selected, $htmlname, $filtertype, $addempty, 0, '', $deposit_percent); + $out .= ''; + $out .= ''; } else { if ($selected) { $this->load_cache_conditions_paiements(); @@ -5438,15 +5469,21 @@ class Form $label = str_replace('__DEPOSIT_PERCENT__', $deposit_percent > 0 ? $deposit_percent : $this->cache_conditions_paiements[$selected]['deposit_percent'], $label); } - print $label; + $out .= $label; } else { $langs->load('errors'); - print $langs->trans('ErrorNotInDictionaryPaymentConditions'); + $out .= $langs->trans('ErrorNotInDictionaryPaymentConditions'); } } else { - print " "; + $out .= ' '; } } + + if (empty($nooutput)) { + print $out; + return ''; + } + return $out; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps @@ -5612,30 +5649,39 @@ class Form * @param int $active Active or not, -1 = all * @param int $addempty 1=Add empty entry * @param string $type Type ('direct-debit' or 'bank-transfer') + * @param int $nooutput 1=Return string, no output * @return void */ - public function form_modes_reglement($page, $selected = '', $htmlname = 'mode_reglement_id', $filtertype = '', $active = 1, $addempty = 0, $type = '') + public function form_modes_reglement($page, $selected = '', $htmlname = 'mode_reglement_id', $filtertype = '', $active = 1, $addempty = 0, $type = '', $nooutput = 0) { // phpcs:enable global $langs; + + $out = ''; if ($htmlname != "none") { - print '
    '; - print ''; - print ''; + $out .= ''; + $out .= ''; + $out .= ''; if ($type) { - print ''; + $out .= ''; } - print $this->select_types_paiements($selected, $htmlname, $filtertype, 0, $addempty, 0, 0, $active, '', 1); - print ''; - print '
    '; + $out .= $this->select_types_paiements($selected, $htmlname, $filtertype, 0, $addempty, 0, 0, $active, '', 1); + $out .= ''; + $out .= ''; } else { if ($selected) { $this->load_cache_types_paiements(); - print $this->cache_types_paiements[$selected]['label']; + $out .= $this->cache_types_paiements[$selected]['label']; } else { - print " "; + $out .= " "; } } + + if ($nooutput) { + return $out; + } else { + print $out; + } } /** @@ -5759,7 +5805,7 @@ class Form print ''; print '
    '; if (!empty($discount_type)) { - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { if (!$filter || $filter == "fk_invoice_supplier_source IS NULL") { $translationKey = 'HasAbsoluteDiscountFromSupplier'; // If we want deposit to be substracted to payments only and not to total of final invoice } else { @@ -5880,19 +5926,20 @@ class Form /** * Output html select to select thirdparty * - * @param string $page Page - * @param string $selected Id preselected - * @param string $htmlname Name of HTML select - * @param string $filter Optional filters criteras. Do not use a filter coming from input of users. - * @param int $showempty Add an empty field - * @param int $showtype Show third party type in combolist (customer, prospect or supplier) - * @param int $forcecombo Force to use combo box - * @param array $events Event options. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled'))) - * @param int $nooutput No print output. Return it only. - * @param array $excludeids Exclude IDs from the select combo + * @param string $page Page + * @param string $selected Id preselected + * @param string $htmlname Name of HTML select + * @param string $filter Optional filters criteras. Do not use a filter coming from input of users. + * @param int $showempty Add an empty field + * @param int $showtype Show third party type in combolist (customer, prospect or supplier) + * @param int $forcecombo Force to use combo box + * @param array $events Event options. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled'))) + * @param int $nooutput No print output. Return it only. + * @param array $excludeids Exclude IDs from the select combo + * @param string $textifnothirdparty Text to show if no thirdparty * @return void|string */ - public function form_thirdparty($page, $selected = '', $htmlname = 'socid', $filter = '', $showempty = 0, $showtype = 0, $forcecombo = 0, $events = array(), $nooutput = 0, $excludeids = array()) + public function form_thirdparty($page, $selected = '', $htmlname = 'socid', $filter = '', $showempty = 0, $showtype = 0, $forcecombo = 0, $events = array(), $nooutput = 0, $excludeids = array(), $textifnothirdparty = '') { // phpcs:enable global $langs; @@ -5910,9 +5957,9 @@ class Form require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; $soc = new Societe($this->db); $soc->fetch($selected); - $out .= $soc->getNomUrl($langs); + $out .= $soc->getNomUrl(0, ''); } else { - $out .= " "; + $out .= ''.$textifnothirdparty.''; } } @@ -6252,7 +6299,7 @@ class Form } if (!$options_only) { - $return .= ''; } $selectedfound = false; @@ -6299,6 +6346,7 @@ class Form if (!$options_only) { $return .= ''; + //$return .= ajax_combobox($htmlname); // This break for the moment dynamic autoselection of a value when selecting a product in object lines } } else { $return .= $this->error; @@ -8215,6 +8263,7 @@ class Form if(! data.id) return null;'; if ($callurlonselect) { + // We forge the url with 'sall=' $outdelayed .= ' var urlBase = data.url; @@ -8878,7 +8927,7 @@ class Form $form = new Form($this->db); print $form->textwithpicto('', $langs->trans("InformationOnLinkToContract")).' '; } - print ''.price($objp->total_ht).''; + print ''.(isset($objp->total_ht) ? price($objp->total_ht) : '').''; print '
    '.$objp->name.'
    '; - $out .= 'trans("File").': '.$file["name"]); $out .= dol_trunc($file["name"], 150); - $out .= ''."\n"; - $out .= $this->showPreview($file, $modulepart, $relativepath, 0, $param); + $out .= ''; + $out .= ''."\n"; + $out .= $imgpreview; $out .= '
    '.$langs->trans("MailErrorsTo").''; - $out .= ''; + $out .= ''; $out .= "
    '; + $checkbox_selected = (GETPOST('send_email') == "1" ? ' checked' : ($conf->global->TICKETS_MESSAGE_FORCE_MAIL?'checked':'')); + print ' '; + print ''; + print '
    '; @@ -1416,12 +1424,6 @@ class FormTicket print '
    '; - $checkbox_selected = (GETPOST('send_email') == "1" ? ' checked' : ($conf->global->TICKETS_MESSAGE_FORCE_MAIL?'checked':'')); - print ' '; - print ''; - print '
    '; print '

    '; - print ''; + print ''; if ($this->withcancel) { print "     "; print ''; diff --git a/htdocs/core/class/html.formwebsite.class.php b/htdocs/core/class/html.formwebsite.class.php index c6a6826251f..ed4b56be831 100644 --- a/htdocs/core/class/html.formwebsite.class.php +++ b/htdocs/core/class/html.formwebsite.class.php @@ -231,6 +231,8 @@ class FormWebsite */ public function selectContainer($website, $htmlname = 'pageid', $pageid = 0, $showempty = 0, $action = '', $morecss = 'minwidth200', $excludeids = null) { + global $conf, $langs; + $this->num = 0; $atleastonepage = (is_array($website->lines) && count($website->lines) > 0); @@ -239,13 +241,18 @@ class FormWebsite if ($atleastonepage && $action != 'editsource') { $out .= ''; + $out .= '
    '; + if ($obj->note_private) { + print dol_string_nohtmltag($obj->note_private); + } + print ''; diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 9aaf0771d44..03223a7b65a 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -169,7 +169,7 @@ function dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforend } else { $date->add($interval); } - //Change the behavior of PHP over data-interval when the result of this function is Feb 29 (non-leap years), 30 or Feb 31 (php returns March 1, 2 or 3 respectively) + //Change the behavior of PHP over data-interval when the result of this function is Feb 29 (non-leap years), 30 or Feb 31 (so php returns March 1, 2 or 3 respectively) if ($ruleforendofmonth == 1 && $duration_unit == 'm') { $timeyear = dol_print_date($time, '%Y'); $timemonth = dol_print_date($time, '%m'); diff --git a/htdocs/core/lib/fichinter.lib.php b/htdocs/core/lib/fichinter.lib.php index eaa1f85d142..87c9ce4a3fc 100644 --- a/htdocs/core/lib/fichinter.lib.php +++ b/htdocs/core/lib/fichinter.lib.php @@ -139,7 +139,11 @@ function fichinter_prepare_head($object) */ function fichinter_admin_prepare_head() { - global $langs, $conf, $user; + global $langs, $conf, $user, $db; + + $extrafields = new ExtraFields($db); + $extrafields->fetch_name_optionals_label('fichinter'); + $extrafields->fetch_name_optionals_label('fichinterdet'); $h = 0; $head = array(); @@ -159,19 +163,25 @@ function fichinter_admin_prepare_head() $head[$h][0] = DOL_URL_ROOT.'/fichinter/admin/fichinter_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields"); + $nbExtrafields = $extrafields->attributes['fichinter']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributes'; $h++; $head[$h][0] = DOL_URL_ROOT.'/fichinter/admin/fichinterdet_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsLines"); + $nbExtrafields = $extrafields->attributes['fichinterdet']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributesdet'; $h++; - - complete_head_from_modules($conf, $langs, null, $head, $h, 'fichinter_admin', 'remove'); - return $head; + return $head; } /** diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 3be3c4c24f7..c3eede90efd 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -319,7 +319,7 @@ function completeFileArrayWithDatabaseInfo(&$filearray, $relativedir) // TODO Remove this when PRODUCT_USE_OLD_PATH_FOR_PHOTO will be removed global $modulepart; - if ($modulepart == 'produit' && !empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if ($modulepart == 'produit' && getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { global $object; if (!empty($object->id)) { if (isModEnabled("product")) { @@ -1372,7 +1372,7 @@ function dol_delete_dir($dir, $nophperrors = 0) // Security: // We refuse transversal using .. and pipes into filenames. if (preg_match('/\.\./', $dir) || preg_match('/[<>|]/', $dir)) { - dol_syslog("Refused to delete dir ".$dir, LOG_WARNING); + dol_syslog("Refused to delete dir ".$dir.' (contains invalid char sequence)', LOG_WARNING); return false; } @@ -2033,6 +2033,7 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = '' * @param string $mode 'gz' or 'bz' or 'zip' * @param string $errorstring Error string * @return int <0 if KO, >0 if OK + * @see dol_uncompress(), dol_compress_dir() */ function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring = null) { @@ -2159,6 +2160,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring * @param string $inputfile File to uncompress * @param string $outputdir Target dir name * @return array array('error'=>'Error code') or array() if no error + * @see dol_compress_file(), dol_compress_dir() */ function dol_uncompress($inputfile, $outputdir) { @@ -2282,10 +2284,14 @@ function dol_uncompress($inputfile, $outputdir) * @param string $mode 'zip' * @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//' * @param string $rootdirinzip Add a root dir level in zip file + * @param string $newmask Mask for new file (0 by default means $conf->global->MAIN_UMASK). Example: '0666' * @return int <0 if KO, >0 if OK + * @see dol_uncompress(), dol_compress_file() */ -function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '', $rootdirinzip = '') +function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '', $rootdirinzip = '', $newmask = 0) { + global $conf; + $foundhandler = 0; dol_syslog("Try to zip dir ".$inputdir." into ".$outputfile." mode=".$mode); @@ -2315,6 +2321,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = } else*/ //if (class_exists('ZipArchive') && !empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS)) + if (class_exists('ZipArchive')) { $foundhandler = 1; @@ -2359,6 +2366,16 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = // Zip archive will be created only after closing object $zip->close(); + if (empty($newmask) && !empty($conf->global->MAIN_UMASK)) { + $newmask = $conf->global->MAIN_UMASK; + } + if (empty($newmask)) { // This should no happen + dol_syslog("Warning: dol_copy called with empty value for newmask and no default value defined", LOG_WARNING); + $newmask = '0664'; + } + + @chmod($outputfile, octdec($newmask)); + return 1; } } @@ -2374,7 +2391,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = $langs->load("errors"); dol_syslog("Failed to open file ".$outputfile, LOG_ERR); dol_syslog($e->getMessage(), LOG_ERR); - $errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile); + $errormsg = $langs->trans("ErrorFailedToBuildArchive", $outputfile).' - '.$e->getMessage(); return -1; } } @@ -2522,7 +2539,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file = $conf->facture->multidir_output[$entity].'/'.$original_file; } elseif ($modulepart == 'apercupropal' && !empty($conf->propal->multidir_output[$entity])) { // Wrapping pour les apercu propal - if ($fuser->rights->propale->{$lire}) { + if ($fuser->rights->propal->{$lire}) { $accessallowed = 1; } $original_file = $conf->propal->multidir_output[$entity].'/'.$original_file; @@ -2594,7 +2611,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file = $conf->expensereport->dir_output.'/'.$original_file; } elseif ($modulepart == 'propalstats' && !empty($conf->propal->multidir_temp[$entity])) { // Wrapping pour les images des stats propales - if ($fuser->rights->propale->{$lire}) { + if ($fuser->rights->propal->{$lire}) { $accessallowed = 1; } $original_file = $conf->propal->multidir_temp[$entity].'/'.$original_file; @@ -2815,7 +2832,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, //$sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."fichinter WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } elseif (($modulepart == 'propal' || $modulepart == 'propale') && !empty($conf->propal->multidir_output[$entity])) { // Wrapping pour les propales - if ($fuser->rights->propale->{$lire} || preg_match('/^specimen/i', $original_file)) { + if ($fuser->rights->propal->{$lire} || preg_match('/^specimen/i', $original_file)) { $accessallowed = 1; } $original_file = $conf->propal->multidir_output[$entity].'/'.$original_file; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 409bf47d715..46a61e60a61 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1,7 +1,7 @@ * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2004-2022 Laurent Destailleur * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Christophe Combelles @@ -18,6 +18,7 @@ * Copyright (C) 2020 Open-Dsi * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2022 Anthony Berton + * Copyright (C) 2022 Ferran Marcet * * 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 @@ -966,10 +967,15 @@ function sanitizeVal($out = '', $check = 'alphanohtml', $filter = null, $options break; case 'custom': - if (empty($filter)) { - return 'BadFourthParameterForGETPOST'; + if (!empty($out)) { + if (empty($filter)) { + return 'BadParameterForGETPOST - Param 3 of sanitizeVal()'; + } + /*if (empty($options)) { + return 'BadParameterForGETPOST - Param 4 of sanitizeVal()'; + }*/ + $out = filter_var($out, $filter, $options); } - $out = filter_var($out, $filter, $options); break; } @@ -1154,26 +1160,26 @@ function dol_buildpath($path, $type = 0, $returnemptyifnotfound = 0) /** * Create a clone of instance of object (new instance with same value for properties) - * With native = 0: Property that are reference are also new object (full isolation clone). This means $this->db of new object is not valid. + * With native = 0: Property that are reference are also new object (full isolation clone). This means $this->db of new object may not be valid. * With native = 1: Use PHP clone. Property that are reference are same pointer. This means $this->db of new object is still valid but point to same this->db than original object. * * @param object $object Object to clone - * @param int $native 0=Full isolation method, 1=Native PHP method + * @param int $native 0=Full isolation method, 1=Native PHP method, 2=Full isolation method+destroy non scalar or array properties (recommended) * @return object Clone object * @see https://php.net/manual/language.oop5.cloning.php */ function dol_clone($object, $native = 0) { - if (empty($native)) { + if ($native == 0) { $tmpsavdb = null; if (isset($object->db) && isset($object->db->db) && is_object($object->db->db) && get_class($object->db->db) == 'PgSql\Connection') { $tmpsavdb = $object->db; - unset($object->db); // Such property can not be serialized when PgSql/Connection + unset($object->db); // Such property can not be serialized with pgsl (when object->db->db = 'PgSql\Connection') } $myclone = unserialize(serialize($object)); // serialize then unserialize is hack to be sure to have a new object for all fields - if ($tmpsavdb) { + if (!empty($tmpsavdb)) { $object->db = $tmpsavdb; } } else { @@ -1227,6 +1233,7 @@ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) $tmp = dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); $tmp = preg_replace('/\-\-+/', '_', $tmp); $tmp = preg_replace('/\s+\-([^\s])/', ' _$1', $tmp); + $tmp = preg_replace('/\s+\-$/', '', $tmp); $tmp = str_replace('..', '', $tmp); return $tmp; } @@ -1251,6 +1258,7 @@ function dol_sanitizePathName($str, $newstr = '_', $unaccent = 1) $tmp = dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); $tmp = preg_replace('/\-\-+/', '_', $tmp); $tmp = preg_replace('/\s+\-([^\s])/', ' _$1', $tmp); + $tmp = preg_replace('/\s+\-$/', '', $tmp); $tmp = str_replace('..', '', $tmp); return $tmp; } @@ -1812,7 +1820,7 @@ function dol_fiche_head($links = array(), $active = '0', $title = '', $notab = 0 * @param array $links Array of tabs. Note that label into $links[$i][1] must be already HTML escaped. * @param string $active Active tab name * @param string $title Title - * @param int $notab -1 or 0=Add tab header, 1=no tab header (if you set this to 1, using print dol_get_fiche_end() to close tab is not required), -2=Add tab header with no seaparation under tab (to start a tab just after) + * @param int $notab -1 or 0=Add tab header, 1=no tab header (if you set this to 1, using print dol_get_fiche_end() to close tab is not required), -2=Add tab header with no seaparation under tab (to start a tab just after), -3=-2+'noborderbottom' * @param string $picto Add a picto on tab title * @param int $pictoisfullpath If 1, image path is a full path. If you set this to 1, you can use url returned by dol_buildpath('/mymodyle/img/myimg.png',1) for $picto. * @param string $morehtmlright Add more html content on right of tabs title @@ -1986,8 +1994,8 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab $out .= "\n"; } - if (!$notab || $notab == -1 || $notab == -2) { - $out .= "\n".'
    '."\n"; + if (!$notab || $notab == -1 || $notab == -2 || $notab == -3) { + $out .= "\n".'
    '."\n"; } $parameters = array('tabname' => $active, 'out' => $out); @@ -2294,13 +2302,13 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi // Add alias for thirdparty if (!empty($object->name_alias)) { - $morehtmlref .= '
    '.$object->name_alias.'
    '; + $morehtmlref .= '
    '.$object->name_alias.'
    '; } // Add label if (in_array($object->element, array('product', 'bank_account', 'project_task'))) { if (!empty($object->label)) { - $morehtmlref .= '
    '.$object->label.'
    '; + $morehtmlref .= '
    '.$object->label.'
    '; } } @@ -2315,7 +2323,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi } if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && ($conf->global->MAIN_SHOW_TECHNICAL_ID == '1' || preg_match('/'.preg_quote($object->element, '/').'/i', $conf->global->MAIN_SHOW_TECHNICAL_ID)) && !empty($object->id)) { $morehtmlref .= '
    '; - $morehtmlref .= '
    '; + $morehtmlref .= '
    '; $morehtmlref .= $langs->trans("TechnicalID").': '.$object->id; $morehtmlref .= '
    '; } @@ -2535,8 +2543,8 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = if ($tzoutput == 'tzserver') { $to_gmt = false; $offsettzstring = @date_default_timezone_get(); // Example 'Europe/Berlin' or 'Indian/Reunion' - $offsettz = 0; // Timezone offset with server timezone, so 0 - $offsetdst = 0; // Dst offset with server timezone, so 0 + $offsettz = 0; // Timezone offset with server timezone (because to_gmt is false), so 0 + $offsetdst = 0; // Dst offset with server timezone (because to_gmt is false), so 0 } elseif ($tzoutput == 'tzuser' || $tzoutput == 'tzuserrel') { $to_gmt = true; $offsettzstring = (empty($_SESSION['dol_tz_string']) ? 'UTC' : $_SESSION['dol_tz_string']); // Example 'Europe/Berlin' or 'Indian/Reunion' @@ -2546,8 +2554,8 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = $user_dt = new DateTime(); $user_dt->setTimezone($user_date_tz); $user_dt->setTimestamp($tzoutput == 'tzuser' ? dol_now() : (int) $time); - $offsettz = $user_dt->getOffset(); - } else { // old method (The 'tzuser' was processed like the 'tzuserrel') + $offsettz = $user_dt->getOffset(); // should include dst ? + } else { // with old method (The 'tzuser' was processed like the 'tzuserrel') $offsettz = (empty($_SESSION['dol_tz']) ? 0 : $_SESSION['dol_tz']) * 60 * 60; // Will not be used anymore $offsetdst = (empty($_SESSION['dol_dst']) ? 0 : $_SESSION['dol_dst']) * 60 * 60; // Will not be used anymore } @@ -2628,6 +2636,11 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = $format = str_replace('%A', '__A__', $format); } + $useadodb = getDolGlobalInt('MAIN_USE_LEGACY_ADODB_FOR_DATE', 0); + //$useadodb = 1; // To switch to adodb + if (!empty($useadodb)) { + include_once DOL_DOCUMENT_ROOT.'/includes/adodbtime/adodb-time.inc.php'; + } // Analyze date $reg = array(); @@ -2647,23 +2660,76 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = $ssec = (!empty($reg[6]) ? $reg[6] : ''); $time = dol_mktime($shour, $smin, $ssec, $smonth, $sday, $syear, true); - $ret = adodb_strftime($format, $time + $offsettz + $offsetdst, $to_gmt); + if (empty($useadodb)) { + if ($to_gmt) { + $tzo = new DateTimeZone('UTC'); // when to_gmt is true, base for offsettz and offsetdst (so timetouse) is UTC + } else { + $tzo = new DateTimeZone(date_default_timezone_get()); // when to_gmt is false, base for offsettz and offsetdst (so timetouse) is PHP server + } + $dtts = new DateTime(); + $dtts->setTimestamp($time); + $dtts->setTimezone($tzo); + $newformat = str_replace( + array('%Y', '%y', '%m', '%d', '%H', '%I', '%M', '%S', '%p', 'T', 'Z', '__a__', '__A__', '__b__', '__B__'), + array('Y', 'y', 'm', 'd', 'H', 'h', 'i', 's', 'A', '__£__', '__$__', '__{__', '__}__', '__[__', '__]__'), + $format); + $ret = $dtts->format($newformat); + $ret = str_replace( + array('__£__', '__$__', '__{__', '__}__', '__[__', '__]__'), + array('T', 'Z', '__a__', '__A__', '__b__', '__B__'), + $ret); + } else { + $ret = adodb_strftime($format, $time + $offsettz + $offsetdst, $to_gmt); + } } else { // Date is a timestamps if ($time < 100000000000) { // Protection against bad date values - $timetouse = $time + $offsettz + $offsetdst; // TODO Replace this with function Date PHP. We also should not use anymore offsettz and offsetdst but only offsettzstring. + $timetouse = $time + $offsettz + $offsetdst; // TODO We could be able to disable use of offsettz and offsetdst to use only offsettzstring. - $ret = adodb_strftime($format, $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + if (empty($useadodb)) { + if ($to_gmt) { + $tzo = new DateTimeZone('UTC'); // when to_gmt is true, base for offsettz and offsetdst (so timetouse) is UTC + } else { + $tzo = new DateTimeZone(date_default_timezone_get()); // when to_gmt is false, base for offsettz and offsetdst (so timetouse) is PHP server + } + $dtts = new DateTime(); + $dtts->setTimestamp($timetouse); + $dtts->setTimezone($tzo); + $newformat = str_replace( + array('%Y', '%y', '%m', '%d', '%H', '%I', '%M', '%S', '%p', 'T', 'Z', '__a__', '__A__', '__b__', '__B__'), + array('Y', 'y', 'm', 'd', 'H', 'h', 'i', 's', 'A', '__£__', '__$__', '__{__', '__}__', '__[__', '__]__'), + $format); + $ret = $dtts->format($newformat); + $ret = str_replace( + array('__£__', '__$__', '__{__', '__}__', '__[__', '__]__'), + array('T', 'Z', '__a__', '__A__', '__b__', '__B__'), + $ret); + } else { + $ret = adodb_strftime($format, $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + } + //var_dump($ret);exit; } else { $ret = 'Bad value '.$time.' for date'; } } if (preg_match('/__b__/i', $format)) { - $timetouse = $time + $offsettz + $offsetdst; // TODO Replace this with function Date PHP. We also should not use anymore offsettz and offsetdst but only offsettzstring. + $timetouse = $time + $offsettz + $offsetdst; // TODO We could be able to disable use of offsettz and offsetdst to use only offsettzstring. - // Here ret is string in PHP setup language (strftime was used). Now we convert to $outputlangs. - $month = adodb_strftime('%m', $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + if (empty($useadodb)) { + if ($to_gmt) { + $tzo = new DateTimeZone('UTC'); // when to_gmt is true, base for offsettz and offsetdst (so timetouse) is UTC + } else { + $tzo = new DateTimeZone(date_default_timezone_get()); // when to_gmt is false, base for offsettz and offsetdst (so timetouse) is PHP server + } + $dtts = new DateTime(); + $dtts->setTimestamp($timetouse); + $dtts->setTimezone($tzo); + $month = $dtts->format("m"); + } else { + // After this ret is string in PHP setup language (strftime was used). Now we convert to $outputlangs. + $month = adodb_strftime('%m', $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + } $month = sprintf("%02d", $month); // $month may be return with format '06' on some installation and '6' on other, so we force it to '06'. if ($encodetooutput) { $monthtext = $outputlangs->transnoentities('Month'.$month); @@ -2682,8 +2748,21 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = //print "time=$time offsettz=$offsettz offsetdst=$offsetdst offsettzstring=$offsettzstring"; $timetouse = $time + $offsettz + $offsetdst; // TODO Replace this with function Date PHP. We also should not use anymore offsettz and offsetdst but only offsettzstring. - $w = adodb_strftime('%w', $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + if (empty($useadodb)) { + if ($to_gmt) { + $tzo = new DateTimeZone('UTC'); + } else { + $tzo = new DateTimeZone(date_default_timezone_get()); + } + $dtts = new DateTime(); + $dtts->setTimestamp($timetouse); + $dtts->setTimezone($tzo); + $w = $dtts->format("w"); + } else { + $w = adodb_strftime('%w', $timetouse, $to_gmt); // If to_gmt = false then adodb_strftime use TZ of server + } $dayweek = $outputlangs->transnoentitiesnoconv('Day'.$w); + $ret = str_replace('__A__', $dayweek, $ret); $ret = str_replace('__a__', dol_substr($dayweek, 0, 3), $ret); } @@ -2714,7 +2793,6 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs = */ function dol_getdate($timestamp, $fast = false, $forcetimezone = '') { - //$datetimeobj = new DateTime('@'.$timestamp); $datetimeobj = new DateTime(); $datetimeobj->setTimestamp($timestamp); // Use local PHP server timezone if ($forcetimezone) { @@ -3189,7 +3267,7 @@ function dol_print_phone($phone, $countrycode = '', $cid = 0, $socid = 0, $addli global $conf, $user, $langs, $mysoc, $hookmanager; // Clean phone parameter - $phone = preg_replace("/[\s.-]/", "", trim($phone)); + $phone = is_null($phone) ? '' : preg_replace("/[\s.-]/", "", trim($phone)); if (empty($phone)) { return ''; } @@ -3761,6 +3839,10 @@ function isValidPhone($phone) */ function dol_strlen($string, $stringencoding = 'UTF-8') { + if (is_null($string)) { + return 0; + } + if (function_exists('mb_strlen')) { return mb_strlen($string, $stringencoding); } else { @@ -3987,7 +4069,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'salary', 'shipment', 'state', 'supplier_invoice', 'supplier_invoicea', 'supplier_invoicer', 'supplier_invoiced', 'technic', 'ticket', 'error', 'warning', - 'recent', 'reception', 'recruitmentcandidature', 'recruitmentjobposition', 'resource', 'recurring','rss', + 'recent', 'reception', 'recruitmentcandidature', 'recruitmentjobposition', 'replacement', 'resource', 'recurring','rss', 'shapes', 'square', 'stop-circle', 'supplier', 'supplier_proposal', 'supplier_order', 'supplier_invoice', 'timespent', 'title_setup', 'title_accountancy', 'title_bank', 'title_hrm', 'title_agenda', 'uncheck', 'user-cog', 'user-injured', 'user-md', 'vat', 'website', 'workstation', 'webhook', 'world', 'private', @@ -4033,7 +4115,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'partnership'=>'handshake', 'payment'=>'money-check-alt', 'payment_vat'=>'money-check-alt', 'phoning'=>'phone', 'phoning_mobile'=>'mobile-alt', 'phoning_fax'=>'fax', 'previous'=>'arrow-alt-circle-left', 'printer'=>'print', 'product'=>'cube', 'puce'=>'angle-right', 'recent' => 'question', 'reception'=>'dolly', 'recruitmentjobposition'=>'id-card-alt', 'recruitmentcandidature'=>'id-badge', 'resize'=>'crop', 'supplier_order'=>'dol-order_supplier', 'supplier_proposal'=>'file-signature', - 'refresh'=>'redo', 'region'=>'map-marked', 'resource'=>'laptop-house', 'recurring'=>'history', + 'refresh'=>'redo', 'region'=>'map-marked', 'replacement'=>'exchange-alt', 'resource'=>'laptop-house', 'recurring'=>'history', 'service'=>'concierge-bell', 'state'=>'map-marked-alt', 'security'=>'key', 'salary'=>'wallet', 'shipment'=>'dolly', 'stock'=>'box-open', 'stats' => 'chart-bar', 'split'=>'code-branch', 'stripe'=>'stripe-s', 'supplier'=>'building', 'technic'=>'cogs', @@ -5686,6 +5768,11 @@ function price2num($amount, $rounding = '', $option = 0) { global $langs, $conf; + // Clean parameters + if (is_null($amount)) { + $amount = ''; + } + // Round PHP function does not allow number like '1,234.56' nor '1.234,56' nor '1 234,56' // Numbers must be '1234.56' // Decimal delimiter for PHP and database SQL requests must be '.' @@ -6581,7 +6668,7 @@ function get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart = ' $path = ''; $arrayforoldpath = array('cheque', 'category', 'holiday', 'supplier_invoice', 'invoice_supplier', 'mailing', 'supplier_payment'); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $arrayforoldpath[] = 'product'; } if (!empty($level) && in_array($modulepart, $arrayforoldpath)) { @@ -6717,6 +6804,10 @@ function picto_required() */ function dol_string_nohtmltag($stringtoclean, $removelinefeed = 1, $pagecodeto = 'UTF-8', $strip_tags = 0, $removedoublespaces = 1) { + if (is_null($stringtoclean)) { + return ''; + } + if ($removelinefeed == 2) { $stringtoclean = preg_replace('/]*>(\n|\r)+/ims', '
    ', $stringtoclean); } @@ -7019,6 +7110,10 @@ function dol_nl2br($stringtoencode, $nl2brmode = 0, $forxml = false) */ function dol_htmlentitiesbr($stringtoencode, $nl2brmode = 0, $pagecodefrom = 'UTF-8', $removelasteolbr = 1) { + if (is_null($stringtoencode)) { + return ''; + } + $newstring = $stringtoencode; if (dol_textishtml($stringtoencode)) { // Check if text is already HTML or not $newstring = preg_replace('//i', '
    ', $newstring); // Replace "
    " by "
    ". It's same and avoid pb with FPDF. @@ -7213,6 +7308,10 @@ function dol_nboflines_bis($text, $maxlinesize = 0, $charset = 'UTF-8') */ function dol_textishtml($msg, $option = 0) { + if (is_null($msg)) { + return false; + } + if ($option == 1) { if (preg_match('/projet) ? $object->projet->ref : ''); $substitutionarray['__PROJECT_NAME__'] = (is_object($object->projet) ? $object->projet->title : ''); } + if (is_object($object) && $object->element == 'project') { + $substitutionarray['__PROJECT_NAME__'] = $object->title; + } if (is_object($object) && $object->element == 'shipping') { $substitutionarray['__SHIPPINGTRACKNUM__'] = $object->tracking_number; @@ -7685,6 +7787,9 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null, if (is_object($object) && $object->element == 'contrat') { $typeforonlinepayment = 'contract'; } + if (is_object($object) && $object->element == 'fichinter') { + $typeforonlinepayment = 'ficheinter'; + } $url = getOnlinePaymentUrl(0, $typeforonlinepayment, $substitutionarray['__REF__']); $paymenturl = $url; } @@ -7717,6 +7822,11 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null, } else { $substitutionarray['__DIRECTDOWNLOAD_URL_CONTRACT__'] = ''; } + if (!empty($conf->global->FICHINTER_ALLOW_EXTERNAL_DOWNLOAD) && is_object($object) && $object->element == 'fichinter') { + $substitutionarray['__DIRECTDOWNLOAD_URL_FICHINTER__'] = $object->getLastMainDocLink($object->element); + } else { + $substitutionarray['__DIRECTDOWNLOAD_URL_FICHINTER__'] = ''; + } if (!empty($conf->global->SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD) && is_object($object) && $object->element == 'supplier_proposal') { $substitutionarray['__DIRECTDOWNLOAD_URL_SUPPLIER_PROPOSAL__'] = $object->getLastMainDocLink($object->element); } else { @@ -7735,6 +7845,9 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null, if (is_object($object) && $object->element == 'contrat') { $substitutionarray['__URL_CONTRACT__'] = DOL_MAIN_URL_ROOT."/contrat/card.php?id=".$object->id; } + if (is_object($object) && $object->element == 'fichinter') { + $substitutionarray['__URL_FICHINTER__'] = DOL_MAIN_URL_ROOT."/fichinter/card.php?id=".$object->id; + } if (is_object($object) && $object->element == 'supplier_proposal') { $substitutionarray['__URL_SUPPLIER_PROPOSAL__'] = DOL_MAIN_URL_ROOT."/supplier_proposal/card.php?id=".$object->id; } @@ -8053,7 +8166,7 @@ function print_date_range($date_start, $date_end, $format = '', $outputlangs = ' * * @param int $date_start Start date * @param int $date_end End date - * @param string $format Output format + * @param string $format Output date format ('day', 'dayhour', ...) * @param Translate $outputlangs Output language * @param integer $withparenthesis 1=Add parenthesis, 0=no parenthesis * @return string String @@ -8618,8 +8731,6 @@ function verifCond($strToEvaluate) //print $strToEvaluate."
    \n"; $rights = true; if (isset($strToEvaluate) && $strToEvaluate !== '') { - //$str = 'if(!('.$strToEvaluate.')) $rights = false;'; - //dol_eval($str, 0, 1, '2'); // The dol_eval must contains all the global $xxx used into a condition //var_dump($strToEvaluate); $rep = dol_eval($strToEvaluate, 1, 1, '1'); // The dol_eval must contains all the global $xxx for all variables $xxx found into the string condition $rights = $rep && (!is_string($rep) || strpos($rep, 'Bad string syntax to evaluate') === false); @@ -8635,7 +8746,7 @@ function verifCond($strToEvaluate) * @param string $s String to evaluate * @param int $returnvalue 0=No return (used to execute eval($a=something)). 1=Value of eval is returned (used to eval($something)). * @param int $hideerrors 1=Hide errors - * @param string $onlysimplestring 0=Accept all chars, 1=Accept only simple string with char 'a-z0-9\s^$_+-.*\/>&|=!?():"\',/';', 2=Accept also ';[]' + * @param string $onlysimplestring '0' (used for computed property of extrafields)=Accept all chars, '1' (most common use)=Accept only simple string with char 'a-z0-9\s^$_+-.*>&|=!?():"\',/@';', '2' (not used)=Accept also ';[]' * @return mixed Nothing or return result of eval */ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1') @@ -8653,8 +8764,8 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1' // Test on dangerous char (used for RCE), we allow only characters to make PHP variable testing if ($onlysimplestring == '1') { // We must accept: '1 && getDolGlobalInt("doesnotexist1") && $conf->global->MAIN_FEATURES_LEVEL' - // We must accept: '$conf->barcode->enabled && preg_match(\'/^(AAA|BBB)/\',$leftmenu)' - // We must accept: '$user->rights->cabinetmed->read && $object->canvas=="patient@cabinetmed"' + // We must accept: '$conf->barcode->enabled || preg_match(\'/^AAA/\',$leftmenu)' + // We must accept: '$user->rights->cabinetmed->read && !$object->canvas=="patient@cabinetmed"' if (preg_match('/[^a-z0-9\s'.preg_quote('^$_+-.*>&|=!?():"\',/@', '/').']/i', $s)) { if ($returnvalue) { return 'Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s; @@ -8662,7 +8773,8 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1' dol_syslog('Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s); return ''; } - // TODO We can exclude all () that is not '($db)' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match(' + // TODO + // We can exclude all parenthesis ( that are not '($db' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match(' and 'isModEnabled(' // ... } } elseif ($onlysimplestring == '2') { @@ -9043,10 +9155,10 @@ function getLanguageCodeFromCountryCode($countrycode) * @param string $type Value for object where objectvalue can be * 'thirdparty' to add a tab in third party view * 'intervention' to add a tab in intervention view - * 'supplier_order' to add a tab in supplier order view - * 'supplier_invoice' to add a tab in supplier invoice view - * 'invoice' to add a tab in customer invoice view - * 'order' to add a tab in customer order view + * 'supplier_order' to add a tab in purchase order view + * 'supplier_invoice' to add a tab in purchase invoice view + * 'invoice' to add a tab in sales invoice view + * 'order' to add a tab in sales order view * 'contract' to add a tabl in contract view * 'product' to add a tab in product view * 'propal' to add a tab in propal view @@ -10471,7 +10583,7 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st * @param array $params = [ // Various params for future : recommended rather than adding more function arguments * 'attr' => [ // to add or override button attributes * 'xxxxx' => '', // your xxxxx attribute you want - * 'class' => '', // to add more css class to the button class attribute + * 'class' => 'reposition', // to add more css class to the button class attribute * 'classOverride' => '' // to replace class attribute of the button * ], * 'confirm' => [ @@ -10518,7 +10630,7 @@ function dolGetButtonAction($label, $text = '', $actionType = 'default', $url = if (empty($userRight)) { $attr['class'] = 'butActionRefused'; $attr['href'] = ''; - $attr['title'] = $langs->trans('NotEnoughPermissions'); + $attr['title'] = (($label && $text && $label != $text) ? $label : $langs->trans('NotEnoughPermissions')); } if (!empty($id)) { @@ -10574,7 +10686,7 @@ function dolGetButtonAction($label, $text = '', $actionType = 'default', $url = $TCompiledAttr = array(); foreach ($attr as $key => $value) { - $TCompiledAttr[] = $key.'="'.$value.'"'; + $TCompiledAttr[] = $key.'= "'.$value.'"'; } $compiledAttributes = empty($TCompiledAttr) ? '' : implode(' ', $TCompiledAttr); @@ -11260,3 +11372,721 @@ function dolForgeCriteriaCallback($matches) return $db->escape($operand).' '.$db->escape($operator)." ".$tmpescaped; } + + + +/** + * Get timeline icon + * @param ActionComm $actionstatic actioncomm + * @param array $histo histo + * @param int $key key + * @return string + */ +function getTimelineIcon($actionstatic, &$histo, $key) +{ + global $conf, $langs; + $out = ''."\n"; + $iconClass = 'fa fa-comments'; + $img_picto = ''; + $colorClass = ''; + $pictoTitle = ''; + + if ($histo[$key]['percent'] == -1) { + $colorClass = 'timeline-icon-not-applicble'; + $pictoTitle = $langs->trans('StatusNotApplicable'); + } elseif ($histo[$key]['percent'] == 0) { + $colorClass = 'timeline-icon-todo'; + $pictoTitle = $langs->trans('StatusActionToDo').' (0%)'; + } elseif ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100) { + $colorClass = 'timeline-icon-in-progress'; + $pictoTitle = $langs->trans('StatusActionInProcess').' ('.$histo[$key]['percent'].'%)'; + } elseif ($histo[$key]['percent'] >= 100) { + $colorClass = 'timeline-icon-done'; + $pictoTitle = $langs->trans('StatusActionDone').' (100%)'; + } + + if ($actionstatic->code == 'AC_TICKET_CREATE') { + $iconClass = 'fa fa-ticket'; + } elseif ($actionstatic->code == 'AC_TICKET_MODIFY') { + $iconClass = 'fa fa-pencilxxx'; + } elseif ($actionstatic->code == 'TICKET_MSG') { + $iconClass = 'fa fa-comments'; + } elseif ($actionstatic->code == 'TICKET_MSG_PRIVATE') { + $iconClass = 'fa fa-mask'; + } elseif (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { + if ($actionstatic->type_picto) { + $img_picto = img_picto('', $actionstatic->type_picto); + } else { + if ($actionstatic->type_code == 'AC_RDV') { + $iconClass = 'fa fa-handshake'; + } elseif ($actionstatic->type_code == 'AC_TEL') { + $iconClass = 'fa fa-phone'; + } elseif ($actionstatic->type_code == 'AC_FAX') { + $iconClass = 'fa fa-fax'; + } elseif ($actionstatic->type_code == 'AC_EMAIL') { + $iconClass = 'fa fa-envelope'; + } elseif ($actionstatic->type_code == 'AC_INT') { + $iconClass = 'fa fa-shipping-fast'; + } elseif ($actionstatic->type_code == 'AC_OTH_AUTO') { + $iconClass = 'fa fa-robot'; + } elseif (!preg_match('/_AUTO/', $actionstatic->type_code)) { + $iconClass = 'fa fa-robot'; + } + } + } + + $out .= ''.$img_picto.''."\n"; + return $out; +} + +/** + * getActionCommEcmList + * + * @param ActionComm $object Object ActionComm + * @return array Array of documents in index table + */ +function getActionCommEcmList($object) +{ + global $conf, $db; + + $documents = array(); + + $sql = 'SELECT ecm.rowid as id, ecm.src_object_type, ecm.src_object_id, ecm.filepath, ecm.filename'; + $sql .= ' FROM '.MAIN_DB_PREFIX.'ecm_files ecm'; + $sql .= " WHERE ecm.filepath = 'agenda/".((int) $object->id)."'"; + //$sql.= " ecm.src_object_type = '".$db->escape($object->element)."' AND ecm.src_object_id = ".((int) $object->id); // Old version didn't add object_type during upload + $sql .= ' ORDER BY ecm.position ASC'; + + $resql = $db->query($sql); + if ($resql) { + if ($db->num_rows($resql)) { + while ($obj = $db->fetch_object($resql)) { + $documents[$obj->id] = $obj; + } + } + } + + return $documents; +} + + + +/** + * Show html area with actions in messaging format. + * Note: Global parameter $param must be defined. + * + * @param Conf $conf Object conf + * @param Translate $langs Object langs + * @param DoliDB $db Object db + * @param mixed $filterobj Filter on object Adherent|Societe|Project|Product|CommandeFournisseur|Dolresource|Ticket|... to list events linked to an object + * @param Contact $objcon Filter on object contact to filter events on a contact + * @param int $noprint Return string but does not output it + * @param string $actioncode Filter on actioncode + * @param string $donetodo Filter on event 'done' or 'todo' or ''=nofilter (all). + * @param array $filters Filter on other fields + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @return string|void Return html part or void if noprint is 1 + */ +function show_actions_messaging($conf, $langs, $db, $filterobj, $objcon = '', $noprint = 0, $actioncode = '', $donetodo = 'done', $filters = array(), $sortfield = 'a.datep,a.id', $sortorder = 'DESC') +{ + global $user, $conf; + global $form; + + global $param, $massactionbutton; + + dol_include_once('/comm/action/class/actioncomm.class.php'); + + // Check parameters + if (!is_object($filterobj) && !is_object($objcon)) { + dol_print_error('', 'BadParameter'); + } + + $histo = array(); + $numaction = 0; + $now = dol_now(); + + $sortfield_list = explode(',', $sortfield); + $sortfield_label_list = array('a.id' => 'id', 'a.datep' => 'dp', 'a.percent' => 'percent'); + $sortfield_new_list = array(); + foreach ($sortfield_list as $sortfield_value) { + $sortfield_new_list[] = $sortfield_label_list[trim($sortfield_value)]; + } + $sortfield_new = implode(',', $sortfield_new_list); + + if (isModEnabled('agenda')) { + // Search histo on actioncomm + if (is_object($objcon) && $objcon->id > 0) { + $sql = "SELECT DISTINCT a.id, a.label as label,"; + } else { + $sql = "SELECT a.id, a.label as label,"; + } + $sql .= " a.datep as dp,"; + $sql .= " a.note as message,"; + $sql .= " a.datep2 as dp2,"; + $sql .= " a.percent as percent, 'action' as type,"; + $sql .= " a.fk_element, a.elementtype,"; + $sql .= " a.fk_contact,"; + $sql .= " c.code as acode, c.libelle as alabel, c.picto as apicto,"; + $sql .= " u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; + if (is_object($filterobj) && get_class($filterobj) == 'Societe') { + $sql .= ", sp.lastname, sp.firstname"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { + $sql .= ", m.lastname, m.firstname"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { + $sql .= ", o.ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { + $sql .= ", o.ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { + $sql .= ", o.ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { + $sql .= ", o.ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { + $sql .= ", o.ref"; + } + $sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; + + $force_filter_contact = false; + if (is_object($objcon) && $objcon->id > 0) { + $force_filter_contact = true; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; + $sql .= " AND r.element_type = '".$db->escape($objcon->table_element)."' AND r.fk_element = ".((int) $objcon->id); + } + + if (is_object($filterobj) && get_class($filterobj) == 'Societe') { + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON a.fk_contact = sp.rowid"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Dolresource') { + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."element_resources as er"; + $sql .= " ON er.resource_type = 'dolresource'"; + $sql .= " AND er.element_id = a.id"; + $sql .= " AND er.resource_id = ".((int) $filterobj->id); + } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { + $sql .= ", ".MAIN_DB_PREFIX."adherent as m"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { + $sql .= ", ".MAIN_DB_PREFIX."commande_fournisseur as o"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { + $sql .= ", ".MAIN_DB_PREFIX."product as o"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { + $sql .= ", ".MAIN_DB_PREFIX."ticket as o"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { + $sql .= ", ".MAIN_DB_PREFIX."bom_bom as o"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { + $sql .= ", ".MAIN_DB_PREFIX."contrat as o"; + } + + $sql .= " WHERE a.entity IN (".getEntity('agenda').")"; + if ($force_filter_contact === false) { + if (is_object($filterobj) && in_array(get_class($filterobj), array('Societe', 'Client', 'Fournisseur')) && $filterobj->id) { + $sql .= " AND a.fk_soc = ".((int) $filterobj->id); + } elseif (is_object($filterobj) && get_class($filterobj) == 'Project' && $filterobj->id) { + $sql .= " AND a.fk_project = ".((int) $filterobj->id); + } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { + $sql .= " AND a.fk_element = m.rowid AND a.elementtype = 'member'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { + $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { + $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'product'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { + $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'ticket'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') { + $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'bom'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') { + $sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'contract'"; + if ($filterobj->id) { + $sql .= " AND a.fk_element = ".((int) $filterobj->id); + } + } + } + + // Condition on actioncode + if (!empty($actioncode)) { + if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) { + if ($actioncode == 'AC_NON_AUTO') { + $sql .= " AND c.type != 'systemauto'"; + } elseif ($actioncode == 'AC_ALL_AUTO') { + $sql .= " AND c.type = 'systemauto'"; + } else { + if ($actioncode == 'AC_OTH') { + $sql .= " AND c.type != 'systemauto'"; + } elseif ($actioncode == 'AC_OTH_AUTO') { + $sql .= " AND c.type = 'systemauto'"; + } + } + } else { + if ($actioncode == 'AC_NON_AUTO') { + $sql .= " AND c.type != 'systemauto'"; + } elseif ($actioncode == 'AC_ALL_AUTO') { + $sql .= " AND c.type = 'systemauto'"; + } else { + $sql .= " AND c.code = '".$db->escape($actioncode)."'"; + } + } + } + if ($donetodo == 'todo') { + $sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; + } elseif ($donetodo == 'done') { + $sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; + } + if (is_array($filters) && $filters['search_agenda_label']) { + $sql .= natural_search('a.label', $filters['search_agenda_label']); + } + } + + // Add also event from emailings. TODO This should be replaced by an automatic event ? May be it's too much for very large emailing. + if (isModEnabled('mailing') && !empty($objcon->email) + && (empty($actioncode) || $actioncode == 'AC_OTH_AUTO' || $actioncode == 'AC_EMAILING')) { + $langs->load("mails"); + + $sql2 = "SELECT m.rowid as id, m.titre as label, mc.date_envoi as dp, mc.date_envoi as dp2, '100' as percent, 'mailing' as type"; + $sql2 .= ", null as fk_element, '' as elementtype, null as contact_id"; + $sql2 .= ", 'AC_EMAILING' as acode, '' as alabel, '' as apicto"; + $sql2 .= ", u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; // User that valid action + if (is_object($filterobj) && get_class($filterobj) == 'Societe') { + $sql2 .= ", '' as lastname, '' as firstname"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') { + $sql2 .= ", '' as lastname, '' as firstname"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { + $sql2 .= ", '' as ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Product') { + $sql2 .= ", '' as ref"; + } elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') { + $sql2 .= ", '' as ref"; + } + $sql2 .= " FROM ".MAIN_DB_PREFIX."mailing as m, ".MAIN_DB_PREFIX."mailing_cibles as mc, ".MAIN_DB_PREFIX."user as u"; + $sql2 .= " WHERE mc.email = '".$db->escape($objcon->email)."'"; // Search is done on email. + $sql2 .= " AND mc.statut = 1"; + $sql2 .= " AND u.rowid = m.fk_user_valid"; + $sql2 .= " AND mc.fk_mailing=m.rowid"; + } + + if (!empty($sql) && !empty($sql2)) { + $sql = $sql." UNION ".$sql2; + } elseif (empty($sql) && !empty($sql2)) { + $sql = $sql2; + } + + // TODO Add limit in nb of results + if ($sql) { // May not be defined if module Agenda is not enabled and mailing module disabled too + $sql .= $db->order($sortfield_new, $sortorder); + + dol_syslog("function.lib::show_actions_messaging", LOG_DEBUG); + $resql = $db->query($sql); + if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ($i < $num) { + $obj = $db->fetch_object($resql); + + if ($obj->type == 'action') { + $contactaction = new ActionComm($db); + $contactaction->id = $obj->id; + $result = $contactaction->fetchResources(); + if ($result < 0) { + dol_print_error($db); + setEventMessage("actions.lib::show_actions_messaging Error fetch ressource", 'errors'); + } + + //if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; + //elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; + $tododone = ''; + if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && $obj->datep > $now)) { + $tododone = 'todo'; + } + + $histo[$numaction] = array( + 'type'=>$obj->type, + 'tododone'=>$tododone, + 'id'=>$obj->id, + 'datestart'=>$db->jdate($obj->dp), + 'dateend'=>$db->jdate($obj->dp2), + 'note'=>$obj->label, + 'message'=>$obj->message, + 'percent'=>$obj->percent, + + 'userid'=>$obj->user_id, + 'login'=>$obj->user_login, + 'userfirstname'=>$obj->user_firstname, + 'userlastname'=>$obj->user_lastname, + 'userphoto'=>$obj->user_photo, + + 'contact_id'=>$obj->fk_contact, + 'socpeopleassigned' => $contactaction->socpeopleassigned, + 'lastname'=>$obj->lastname, + 'firstname'=>$obj->firstname, + 'fk_element'=>$obj->fk_element, + 'elementtype'=>$obj->elementtype, + // Type of event + 'acode'=>$obj->acode, + 'alabel'=>$obj->alabel, + 'libelle'=>$obj->alabel, // deprecated + 'apicto'=>$obj->apicto + ); + } else { + $histo[$numaction] = array( + 'type'=>$obj->type, + 'tododone'=>'done', + 'id'=>$obj->id, + 'datestart'=>$db->jdate($obj->dp), + 'dateend'=>$db->jdate($obj->dp2), + 'note'=>$obj->label, + 'message'=>$obj->message, + 'percent'=>$obj->percent, + 'acode'=>$obj->acode, + + 'userid'=>$obj->user_id, + 'login'=>$obj->user_login, + 'userfirstname'=>$obj->user_firstname, + 'userlastname'=>$obj->user_lastname, + 'userphoto'=>$obj->user_photo + ); + } + + $numaction++; + $i++; + } + } else { + dol_print_error($db); + } + } + + // Set $out to show events + $out = ''; + + if (!isModEnabled('agenda')) { + $langs->loadLangs(array("admin", "errors")); + $out = info_admin($langs->trans("WarningModuleXDisabledSoYouMayMissEventHere", $langs->transnoentitiesnoconv("Module2400Name")), 0, 0, 'warning'); + } + + if (isModEnabled('agenda') || (isModEnabled('mailing') && !empty($objcon->email))) { + $delay_warning = $conf->global->MAIN_DELAY_ACTIONS_TODO * 24 * 60 * 60; + + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; + require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; + + $formactions = new FormActions($db); + + $actionstatic = new ActionComm($db); + $userstatic = new User($db); + $contactstatic = new Contact($db); + $userGetNomUrlCache = array(); + + $out .= '
    '; + $out .= '
    '; + $out .= ''; + + if ($objcon && get_class($objcon) == 'Contact' && + (is_null($filterobj) || get_class($filterobj) == 'Societe')) { + $out .= ''; + } else { + $out .= ''; + } + if ($filterobj && get_class($filterobj) == 'Societe') { + $out .= ''; + } + + $out .= "\n"; + + $out .= '
    '; + $out .= ''; + + $out .= ''; + + $out .= getTitleFieldOfList('Date', 0, $_SERVER["PHP_SELF"], 'a.datep', '', $param, '', $sortfield, $sortorder, '')."\n"; + + $out .= ''; + if ($donetodo) { + $out .= ''; + } + $out .= ''; + $out .= ''; + + $out .= ''; + $out .= ''; + + + $out .= '
    '.$langs->trans("Search").' : '; + $out .= ''; + //$out .= img_picto($langs->trans("Type"), 'type'); + $out .= $formactions->select_type_actions($actioncode, "actioncode", '', empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : -1, 0, 0, 1, 'minwidth200imp'); + $out .= ''; + $out .= ''; + $out .= ''; + $searchpicto = $form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0, 'checkforselect', 1); + $out .= $searchpicto; + $out .= '
    '; + + $out .= ''; + $out .= '
    '; + + $out .= "\n"; + + $out .= '\n"; + + if (empty($histo)) { + $out .= ''.$langs->trans("NoRecordFound").''; + } + } + + if ($noprint) { + return $out; + } else { + print $out; + } +} diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 18ebc363768..bd02d7cca53 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -2,7 +2,7 @@ /* Copyright (C) 2005-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2013 Florian Henry - * Copyright (C) 2015 Juanjo Menent + * Copyright (C) 2015 Juanjo Menent * Copyright (C) 2017 Charlie Benke * Copyright (C) 2017 ATM-CONSULTING * @@ -71,6 +71,8 @@ function facture_prepare_head($object) } else { dol_print_error($db); } + $langs->load("banks"); + $head[$h][0] = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.urlencode($object->id); $head[$h][1] = $langs->trans('StandingOrders'); if ($nbStandingOrders > 0) { @@ -135,7 +137,13 @@ function facture_prepare_head($object) */ function invoice_admin_prepare_head() { - global $langs, $conf, $user; + global $langs, $conf, $user, $db; + + $extrafields = new ExtraFields($db); + $extrafields->fetch_name_optionals_label('facture'); + $extrafields->fetch_name_optionals_label('facturedet'); + $extrafields->fetch_name_optionals_label('facture_rec'); + $extrafields->fetch_name_optionals_label('facturedet_rec'); $h = 0; $head = array(); @@ -158,25 +166,41 @@ function invoice_admin_prepare_head() $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facture_cust_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsCustomerInvoices"); + $nbExtrafields = $extrafields->attributes['facture']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributes'; $h++; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_cust_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsLines"); + $nbExtrafields = $extrafields->attributes['facturedet']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributeslines'; $h++; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facture_rec_cust_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsCustomerInvoicesRec"); + $nbExtrafields = $extrafields->attributes['facture_rec']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributesrec'; $h++; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_rec_cust_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsLinesRec"); + $nbExtrafields = $extrafields->attributes['facturedet_rec']['count']; + if ($nbExtrafields > 0) { + $head[$h][1] .= ''.$nbExtrafields.''; + } $head[$h][2] = 'attributeslinesrec'; $h++; - if ($conf->global->INVOICE_USE_SITUATION) { // Warning, implementation is seriously bugged and a new one not compatible is expected to become stable + if (!empty($conf->global->INVOICE_USE_SITUATION)) { // Warning, implementation is seriously bugged and a new one not compatible is expected to become stable $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; $head[$h][1] = $langs->trans("InvoiceSituation"); $head[$h][2] = 'situation'; diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php index 5c77f8ab821..a106bf62369 100644 --- a/htdocs/core/lib/order.lib.php +++ b/htdocs/core/lib/order.lib.php @@ -189,7 +189,7 @@ function order_admin_prepare_head() /** - * Return a HTML table that contains a pie chart of customer orders + * Return a HTML table that contains a pie chart of sales orders * * @param int $socid (Optional) Show only results from the customer with this id * @return string A HTML table that contains a pie chart of customer invoices diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 87291071162..7795f927c19 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -76,7 +76,7 @@ function product_prepare_head($object) // Multilangs if (getDolGlobalInt('MAIN_MULTILANGS')) { $head[$h][0] = DOL_URL_ROOT."/product/traduction.php?id=".$object->id; - $head[$h][1] = $langs->trans("Translation"); + $head[$h][1] = $langs->trans("Translations"); $head[$h][2] = 'translation'; $h++; } @@ -183,7 +183,7 @@ function product_prepare_head($object) $upload_dir = $conf->service->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); } $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { if (isModEnabled("product") && ($object->type == Product::TYPE_PRODUCT)) { $upload_dir = $conf->product->multidir_output[$object->entity].'/'.get_exdir($object->id, 2, 0, 0, $object, 'product').$object->id.'/photos'; } @@ -253,6 +253,24 @@ function productlot_prepare_head($object) $head[$h][2] = 'documents'; $h++; + // Notes + if (empty($conf->global->MAIN_DISABLE_NOTES_TAB)) { + $nbNote = 0; + if (!empty($object->note_private)) { + $nbNote++; + } + if (!empty($object->note_public)) { + $nbNote++; + } + $head[$h][0] = DOL_URL_ROOT .'/product/stock/productlot_note.php?id=' . $object->id; + $head[$h][1] = $langs->trans('Notes'); + if ($nbNote > 0) { + $head[$h][1] .= '' . $nbNote . ''; + } + $head[$h][2] = 'note'; + $h++; + } + // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab @@ -393,7 +411,7 @@ function show_stats_for_company($product, $socid) print '
    '; - - $out .= ''; - - $out .= getTitleFieldOfList('Date', 0, $_SERVER["PHP_SELF"], 'a.datep', '', $param, '', $sortfield, $sortorder, '')."\n"; - - $out .= ''; - if ($donetodo) { - $out .= ''; - } - $out .= ''; - $out .= ''; - - $out .= ''; - $out .= ''; - - - $out .= '
    '.$langs->trans("Search").' : '; - $out .= ''; - //$out .= img_picto($langs->trans("Type"), 'type'); - $out .= $formactions->select_type_actions($actioncode, "actioncode", '', empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : -1, 0, 0, 1, 'minwidth200imp'); - $out .= ''; - $out .= ''; - $out .= ''; - $searchpicto = $form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0, 'checkforselect', 1); - $out .= $searchpicto; - $out .= '
    '; - - $out .= ''; - $out .= '
    '; - - $out .= "\n"; - - $out .= '\n"; - - if (empty($histo)) { - $out .= ''.$langs->trans("NoRecordFound").''; - } - } - - if ($noprint) { - return $out; - } else { - print $out; - } -} - -/** - * Get timeline icon - * @param ActionComm $actionstatic actioncomm - * @param array $histo histo - * @param int $key key - * @return string - */ -function getTicketTimelineIcon($actionstatic, &$histo, $key) -{ - global $conf, $langs; - $out = ''."\n"; - $iconClass = 'fa fa-comments'; - $img_picto = ''; - $colorClass = ''; - $pictoTitle = ''; - - if ($histo[$key]['percent'] == -1) { - $colorClass = 'timeline-icon-not-applicble'; - $pictoTitle = $langs->trans('StatusNotApplicable'); - } elseif ($histo[$key]['percent'] == 0) { - $colorClass = 'timeline-icon-todo'; - $pictoTitle = $langs->trans('StatusActionToDo').' (0%)'; - } elseif ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100) { - $colorClass = 'timeline-icon-in-progress'; - $pictoTitle = $langs->trans('StatusActionInProcess').' ('.$histo[$key]['percent'].'%)'; - } elseif ($histo[$key]['percent'] >= 100) { - $colorClass = 'timeline-icon-done'; - $pictoTitle = $langs->trans('StatusActionDone').' (100%)'; - } - - if ($actionstatic->code == 'AC_TICKET_CREATE') { - $iconClass = 'fa fa-ticket'; - } elseif ($actionstatic->code == 'AC_TICKET_MODIFY') { - $iconClass = 'fa fa-pencilxxx'; - } elseif ($actionstatic->code == 'TICKET_MSG') { - $iconClass = 'fa fa-comments'; - } elseif ($actionstatic->code == 'TICKET_MSG_PRIVATE') { - $iconClass = 'fa fa-mask'; - } elseif (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { - if ($actionstatic->type_picto) { - $img_picto = img_picto('', $actionstatic->type_picto); - } else { - if ($actionstatic->type_code == 'AC_RDV') { - $iconClass = 'fa fa-handshake'; - } elseif ($actionstatic->type_code == 'AC_TEL') { - $iconClass = 'fa fa-phone'; - } elseif ($actionstatic->type_code == 'AC_FAX') { - $iconClass = 'fa fa-fax'; - } elseif ($actionstatic->type_code == 'AC_EMAIL') { - $iconClass = 'fa fa-envelope'; - } elseif ($actionstatic->type_code == 'AC_INT') { - $iconClass = 'fa fa-shipping-fast'; - } elseif ($actionstatic->type_code == 'AC_OTH_AUTO') { - $iconClass = 'fa fa-robot'; - } elseif (!preg_match('/_AUTO/', $actionstatic->type_code)) { - $iconClass = 'fa fa-robot'; - } - } - } - - $out .= ''.$img_picto.''."\n"; - return $out; -} - -/** - * getTicketActionCommEcmList - * - * @param ActionComm $object Object ActionComm - * @return array Array of documents in index table - */ -function getTicketActionCommEcmList($object) -{ - global $conf, $db; - - $documents = array(); - - $sql = 'SELECT ecm.rowid as id, ecm.src_object_type, ecm.src_object_id, ecm.filepath, ecm.filename'; - $sql .= ' FROM '.MAIN_DB_PREFIX.'ecm_files ecm'; - $sql .= " WHERE ecm.filepath = 'agenda/".((int) $object->id)."'"; - //$sql.= " ecm.src_object_type = '".$db->escape($object->element)."' AND ecm.src_object_id = ".((int) $object->id); // Old version didn't add object_type during upload - $sql .= ' ORDER BY ecm.position ASC'; - - $resql = $db->query($sql); - if ($resql) { - if ($db->num_rows($resql)) { - while ($obj = $db->fetch_object($resql)) { - $documents[$obj->id] = $obj; - } - } - } - - return $documents; -} diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 868a5af0d51..273e7285273 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -157,7 +157,10 @@ function user_prepare_head(User $object) if (empty($user->socid)) { // Notes $nbNote = 0; - if (!empty($object->note)) { + if (!empty($object->note_public)) { + $nbNote++; + } + if (!empty($object->note_private)) { $nbNote++; } $head[$h][0] = DOL_URL_ROOT.'/user/note.php?id='.$object->id; diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 74e6bc4d9e8..0b836399f43 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -563,7 +563,7 @@ function dolSaveLicense($file, $content) */ function showWebsiteTemplates(Website $website) { - global $conf, $langs, $db, $form; + global $conf, $langs, $db, $form, $user; $dirthemes = array('/doctemplates/websites'); if (!empty($conf->modules_parts['websitetemplates'])) { // Using this feature slow down application @@ -582,17 +582,21 @@ function showWebsiteTemplates(Website $website) // Title print ''; print $form->textwithpicto($langs->trans("Templates"), $langs->trans("ThemeDir").' : '.join(", ", $dirthemes)); + print ' '; + print ''; + print img_picto('', 'refresh'); + print ''; print ''; print ''; $url = 'https://www.dolistore.com/43-web-site-templates'; print ''; - print $langs->trans('DownloadMoreSkins'); + print img_picto('', 'globe', 'class="pictofixedwidth"').$langs->trans('DownloadMoreSkins'); print ''; print ''; print ''; - print '"; } @@ -421,11 +443,20 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; print '
    '; + print ''; } - print ' - global->PRODUCT_USE_UNITS)) { @@ -432,11 +435,12 @@ if ($nolinesbefore) { } $coldisplay++; ?> - + + situation_cycle_ref) && $this->situation_cycle_ref) { $coldisplay++; - print ''; + print ''; $coldisplay++; print ''; } @@ -454,11 +458,11 @@ if ($nolinesbefore) { global->DISPLAY_MARGIN_RATES)) { - echo ''; + echo ''; $coldisplay++; } if (!empty($conf->global->DISPLAY_MARK_RATES)) { - echo ''; + echo ''; $coldisplay++; } } @@ -496,7 +500,6 @@ if ((isModEnabled("service") || ($object->element == 'contrat')) && $dateSelecto } } - if (!empty($object->element) && $object->element == 'contrat') { print $langs->trans("DateStartPlanned").' '; print $form->selectDate($date_start, "date_start", $usehm, $usehm, 1, "addproduct"); @@ -519,8 +522,8 @@ if ((isModEnabled("service") || ($object->element == 'contrat')) && $dateSelecto ?> function prefill_service_dates() { - $('#date_start').val("").trigger('change'); - $('#date_end').val("").trigger('change'); + $('#date_start').val("").trigger('change'); + $('#date_end').val("").trigger('change'); return false; // Prevent default link behaviour (which is go to href URL) } @@ -712,7 +715,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { /* When changing predefined product, we reload list of supplier prices required for margin combo */ $("#idprod, #idprodfournprice").change(function() { - console.log("Call method change() after change on #idprod or #idprodfournprice (senderissupplier=). this.val = "+$(this).val()); + console.log("objectline_create.tpl Call method change() after change on #idprod or #idprodfournprice (senderissupplier=). this.val = "+$(this).val()); setforpredef(); // TODO Keep vat combo visible and set it to first entry into list that match result of get_default_tva jQuery('#trlinefordates').show(); @@ -725,7 +728,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { if ((jQuery('#idprod').val() > 0 || jQuery('#idprodfournprice').val()) && ! isNaN(pbq) && pbq > 0) { - console.log("We are in a price per qty context, we do not call ajax/product, init of fields is done few lines later"); + console.log("objectline_create.tpl We are in a price per qty context, we do not call ajax/product, init of fields is done few lines later"); } else { global->PRODUIT_CUSTOMER_PRICES_BY_QTY) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) { ?> if (isNaN(pbq)) { console.log("We use experimental option PRODUIT_CUSTOMER_PRICES_BY_QTY or PRODUIT_CUSTOMER_PRICES_BY_QTY but we could not get the id of pbq from product combo list, so load of price may be 0 if product has differet prices"); } @@ -733,9 +736,9 @@ if (!empty($usemargins) && $user->rights->margins->creer) { // Get the HT price for the product and display it console.log("Load unit price without tax and set it into #price_ht for product id="+$(this).val()+" socid=socid; ?>"); $.post('/product/ajax/products.php?action=fetch', - { 'id': $(this).val(), 'socid': socid; ?> }, + { 'id': $(this).val(), 'socid': socid; ?>, 'token': '' }, function(data) { - console.log("Load unit price end, we got value ht="+data.price_ht+" ttc="+data.price_ttc+" pricebasetype="+data.pricebasetype); + console.log("objectline_create.tpl Load unit price end, we got value ht="+data.price_ht+" ttc="+data.price_ttc+" pricebasetype="+data.pricebasetype); $('#date_start').removeAttr('type'); $('#date_end').removeAttr('type'); @@ -757,8 +760,10 @@ if (!empty($usemargins) && $user->rights->margins->creer) { } if ( == 1 && data.pricebasetype == 'TTC') { + console.log("objectline_create.tpl set content of price_ttc"); jQuery("#price_ttc").val(data.price_ttc); } else { + console.log("objectline_create.tpl set content of price_ht"); jQuery("#price_ht").val(data.price_ht); } rights->margins->creer) { var proddesc = data.desc; - console.log("Load desciption into text area : "+proddesc); + console.log("objectline_create.tpl Load desciption into text area : "+proddesc); global->FCKEDITOR_ENABLE_DETAILS)) { ?> if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined") @@ -790,7 +795,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { global->PRODUCT_LOAD_EXTRAFIELD_INTO_OBJECTLINES)) { ?> jQuery.each(data.array_options, function( key, value ) { - jQuery('div[class$="det'+key.replace('options_','_extras_')+'"] > #'+key).val(value); + jQuery('div[class*="det'+key.replace('options_','_extras_')+'"] > #'+key).val(value); }); @@ -834,7 +839,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { print 'costprice'; } } ?>'; - console.log("we will set the field for margin. defaultbuyprice="+defaultbuyprice); + console.log("objectline_create.tpl we will set the field for margin. defaultbuyprice="+defaultbuyprice); var i = 0; $(data).each(function() { @@ -871,7 +876,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { } options += ''; }); - options += ''; + options += ''; console.log("finally selected defaultkey="+defaultkey+" defaultprice for buying price="+defaultprice); @@ -945,11 +950,16 @@ if (!empty($usemargins) && $user->rights->margins->creer) { - //Deal with supplier - if (jQuery('#idprodfournprice').val() >0) + // Deal with supplier + if (jQuery('#idprodfournprice').val() > 0) { + console.log("objectline_create.tpl #idprodfournprice is > 0, so we set some properties into page"); + var up = parseFloat($('option:selected', this).attr('data-up')); // When select is done from HTML select - if (isNaN(up)) { up = parseFloat(jQuery('#idprodfournprice').attr('data-up'));} // When select is done from HTML input with autocomplete + if (isNaN(up)) { up = parseFloat(jQuery('#idprodfournprice').attr('data-up'));} // When select is done from HTML input with ajax autocomplete + + var up_locale = $('option:selected', this).attr('data-up-locale'); // When select is done from HTML select + if (typeof up_locale === 'undefined') { up_locale = jQuery('#idprodfournprice').attr('data-up-locale');} // When select is done from HTML input with ajax autocomplete var qty = parseFloat($('option:selected', this).attr('data-qty')); if (isNaN(qty)) { qty = parseFloat(jQuery('#idprodfournprice').attr('data-qty'));} @@ -958,11 +968,15 @@ if (!empty($usemargins) && $user->rights->margins->creer) { if (isNaN(discount)) { discount = parseFloat(jQuery('#idprodfournprice').attr('data-discount'));} var tva_tx = parseFloat($('option:selected', this).attr('data-tvatx')); // When select is done from HTML select - if (isNaN(tva_tx)) { tva_tx = parseFloat(jQuery('#idprodfournprice').attr('data-tvatx'));} // When select is done from HTML input with autocomplete + if (isNaN(tva_tx)) { tva_tx = parseFloat(jQuery('#idprodfournprice').attr('data-tvatx'));} // When select is done from HTML input with ajax autocomplete - console.log("We find supplier price :"+up+" qty: "+qty+" tva_tx="+tva_tx+" discount: "+discount+" for product "+jQuery('#idprodfournprice').val()); + console.log("objectline_create.tpl We find supplier price : up = "+up+", up_locale = "+up_locale+", qty = "+qty+", tva_tx = "+tva_tx+", discount = "+discount+" for product "+jQuery('#idprodfournprice').val()); - jQuery("#price_ht").val(up); + if (typeof up_locale === 'undefined') { + jQuery("#price_ht").val(up); + } else { + jQuery("#price_ht").val(up_locale); + } /* $('#tva_tx option').removeAttr('selected').filter('[value='+tva_tx+']').prop('selected', true); */ $('#tva_tx option').val(tva_tx); @@ -970,8 +984,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { if (jQuery("#qty").val() < qty) { jQuery("#qty").val(qty); } - if (jQuery("#remise_percent").val() < discount) - { + if (jQuery("#remise_percent").val() < discount) { jQuery("#remise_percent").val(discount); } @@ -1038,7 +1051,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { /* Function to set fields from choice */ function setforfree() { - console.log("Call setforfree. We show most fields"); + console.log("objectline_create.tpl::setforfree. We show most fields"); jQuery("#idprodfournprice").val('0'); // Set cursor on not selected product jQuery("#prod_entry_mode_free").prop('checked',true).change(); jQuery("#prod_entry_mode_predef").prop('checked',false).change(); @@ -1049,7 +1062,7 @@ if (!empty($usemargins) && $user->rights->margins->creer) { } function setforpredef() { - console.log("Call setforpredef. We hide some fields and show dates"); + console.log("objectline_create.tpl::setforpredef We hide some fields, show dates"); jQuery("#select_type").val(-1); jQuery("#prod_entry_mode_free").prop('checked',false).change(); jQuery("#prod_entry_mode_predef").prop('checked',true).change(); diff --git a/htdocs/core/tpl/objectline_edit.tpl.php b/htdocs/core/tpl/objectline_edit.tpl.php index c8188c82bb8..8c786e7a041 100644 --- a/htdocs/core/tpl/objectline_edit.tpl.php +++ b/htdocs/core/tpl/objectline_edit.tpl.php @@ -198,11 +198,15 @@ $coldisplay++; ?> fk_fournprice.'">'; } + // VAT Rate $coldisplay++; if (!$situationinvoicelinewithparent) { - print ''; + print ''; } else { print ''; } @@ -266,24 +270,29 @@ $coldisplay++; ?> + situation_cycle_ref) { $coldisplay++; print ''; $coldisplay++; print ''; } + if (!empty($usemargins)) { if (!empty($user->rights->margins->creer)) { $coldisplay++; @@ -303,9 +312,9 @@ $coldisplay++; $margin_rate = (GETPOSTISSET("np_marginRate") ? GETPOST("np_marginRate", "alpha", 2) : (($line->pa_ht == 0) ? '' : price($line->marge_tx))); // if credit note, dont allow to modify margin if ($line->subprice < 0) { - echo ''; + echo ''; } else { - echo ''; + echo ''; } $coldisplay++; } @@ -313,9 +322,9 @@ $coldisplay++; $mark_rate = (GETPOSTISSET("np_markRate") ? GETPOST("np_markRate", 'alpha', 2) : price($line->marque_tx)); // if credit note, dont allow to modify margin if ($line->subprice < 0) { - echo ''; + echo ''; } else { - echo ''; + echo ''; } $coldisplay++; } diff --git a/htdocs/core/tpl/objectline_title.tpl.php b/htdocs/core/tpl/objectline_title.tpl.php index 6d8238cd885..7fe63613ea1 100644 --- a/htdocs/core/tpl/objectline_title.tpl.php +++ b/htdocs/core/tpl/objectline_title.tpl.php @@ -49,19 +49,19 @@ print ''; // Adds a line numbering column if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { - print ''; + print ''; } // Description -print ''; +print ''; // Supplier ref if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier' || $this->element == 'invoice_supplier' || $this->element == 'invoice_supplier_rec') { - print ''; + print ''; } // VAT -print ''; // Price HT -print ''; +print ''; // Multicurrency if (isModEnabled("multicurrency") && $this->multicurrency_code != $conf->currency) { - print ''; + print ''; } if ($inputalsopricewithtax) { - print ''; + print ''; } // Qty -print ''; +print ''; // Unit if (!empty($conf->global->PRODUCT_USE_UNITS)) { - print ''; + print ''; } // Reduction short -print ''; // Fields for situation invoice if (isset($this->situation_cycle_ref) && $this->situation_cycle_ref) { - print ''; - print ''; + print ''; + print ''; } // Purchase price if ($usemargins && isModEnabled('margin') && empty($user->socid)) { if (!empty($user->rights->margins->creer)) { if ($conf->global->MARGIN_TYPE == "1") { - print ''; + print ''; } else { - print ''; + print ''; } } if (!empty($conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) { - print ''; + print ''; } if (!empty($conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) { - print ''; + print ''; } } // Total HT -print ''; +print ''; // Multicurrency if (isModEnabled("multicurrency") && $this->multicurrency_code != $conf->currency) { - print ''; + print ''; } if ($outputalsopricetotalwithtax) { - print ''; + print ''; } if (isModEnabled('asset') && $object->element == 'invoice_supplier') { - print ''; + print ''; } -print ''; // No width to allow autodim +print ''; // No width to allow autodim -print ''; +print ''; -print ''; +print ''; if ($action == 'selectlines') { - print ''; } print "\n"; diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php index 11104f61798..03e98e1147d 100644 --- a/htdocs/core/tpl/objectline_view.tpl.php +++ b/htdocs/core/tpl/objectline_view.tpl.php @@ -213,7 +213,7 @@ if (($line->info_bits & 2) == 2) { } // Add description in form - if ($line->fk_product > 0 && !empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if ($line->fk_product > 0 && getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { if ($line->element == 'facturedetrec') { print (!empty($line->description) && $line->description != $line->product_label) ? (($line->date_start_fill || $line->date_end_fill) ? '' : '
    ').'
    '.dol_htmlentitiesbr($line->description) : ''; } elseif ($line->element == 'invoice_supplier_det_rec') { diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index 119a0122cb6..abaadfc85a8 100644 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -181,14 +181,23 @@ class InterfaceWorkflowManager extends DolibarrTriggers } if (isModEnabled("expedition") && !empty($conf->workflow->enabled) && !empty($conf->global->WORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE)) { - /** @var Facture $object */ $object->fetchObjectLinked('', 'shipping', $object->id, $object->element); - if (!empty($object->linkedObjects)) { - /** @var Expedition $shipment */ - $shipment = array_shift($object->linkedObjects['shipping']); - - $ret = $shipment->setClosed(); + $totalonlinkedelements = 0; + foreach ($object->linkedObjects['shipping'] as $element) { + if ($element->statut == Expedition::STATUS_VALIDATED) { + $totalonlinkedelements += $element->total_ht; + } + } + dol_syslog("Amount of linked shipment = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht), LOG_DEBUG); + if ($totalonlinkedelements == $object->total_ht) { + foreach ($object->linkedObjects['shipping'] as $element) { + $ret = $element->setClosed(); + if ($ret < 0) { + return $ret; + } + } + } } } @@ -244,8 +253,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers } } - // Then set reception to "Billed" if WORKFLOW_BILL_ON_RECEPTION is set - if (isModEnabled("reception") && !empty($conf->global->WORKFLOW_BILL_ON_RECEPTION)) { + // Then set reception to "Billed" if WORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE is set + if (isModEnabled("reception") && !empty($conf->workflow->enabled) && !empty($conf->global->WORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE)) { $object->fetchObjectLinked('', 'reception', $object->id, $object->element); if (!empty($object->linkedObjects)) { $totalonlinkedelements = 0; diff --git a/htdocs/core/triggers/interface_95_modZapier_ZapierTriggers.class.php b/htdocs/core/triggers/interface_95_modZapier_ZapierTriggers.class.php index ccd7a607d3a..7c16599f039 100644 --- a/htdocs/core/triggers/interface_95_modZapier_ZapierTriggers.class.php +++ b/htdocs/core/triggers/interface_95_modZapier_ZapierTriggers.class.php @@ -203,7 +203,7 @@ class InterfaceZapierTriggers extends DolibarrTriggers // case 'MYECMDIR_CREATE': // case 'MYECMDIR_MODIFY': - // Customer orders + // Sales orders case 'ORDER_CREATE': $resql = $this->db->query($sql); while ($resql && $obj = $this->db->fetch_array($resql)) { diff --git a/htdocs/cron/card.php b/htdocs/cron/card.php index 87a054c699f..5de627a9a9a 100644 --- a/htdocs/cron/card.php +++ b/htdocs/cron/card.php @@ -473,6 +473,16 @@ if (($action == "create") || ($action == "edit")) { } $input .= ""; print $input; + + $input = " unitfrequency == "2678400") { + $input .= ' checked />'; + } else { + $input .= ' />'; + } + $input .= ""; + print $input; + print ""; print ""; @@ -664,6 +674,9 @@ if (($action == "create") || ($action == "edit")) { if ($object->unitfrequency == "604800") { print $langs->trans('CronEach')." ".($object->frequency)." ".$langs->trans('Weeks'); } + if ($object->unitfrequency == "2678400") { + print $langs->trans('CronEach')." ".($object->frequency)." ".$langs->trans('Month'); + } print ""; print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; + // Location event + print ''; + // Other attributes $cols = 2; $objectconf = $object; diff --git a/htdocs/eventorganization/conferenceorboothattendee_card.php b/htdocs/eventorganization/conferenceorboothattendee_card.php index 20d7e588bf3..9bab2a7f49d 100644 --- a/htdocs/eventorganization/conferenceorboothattendee_card.php +++ b/htdocs/eventorganization/conferenceorboothattendee_card.php @@ -234,7 +234,7 @@ if (!empty($withproject)) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; diff --git a/htdocs/eventorganization/conferenceorboothattendee_list.php b/htdocs/eventorganization/conferenceorboothattendee_list.php index 167a79959f5..1bc9c12d4f6 100644 --- a/htdocs/eventorganization/conferenceorboothattendee_list.php +++ b/htdocs/eventorganization/conferenceorboothattendee_list.php @@ -413,7 +413,7 @@ if ($projectstatic->id > 0 || $confOrBooth > 0) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -474,8 +474,15 @@ if ($projectstatic->id > 0 || $confOrBooth > 0) { } print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; + // Location event + print ''; + // Other attributes $cols = 2; $objectconf = $object; diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 17173088eed..ab8c4a28cbc 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -224,6 +224,8 @@ if (empty($reshook)) { $object->size_units = GETPOST('size_units', 'int'); $object->weight_units = GETPOST('weight_units', 'int'); + $product = new Product($db); + // We will loop on each line of the original document to complete the shipping object with various info and quantity to deliver $classname = ucfirst($object->origin); $objectsrc = new $classname($db); @@ -259,7 +261,17 @@ if (empty($reshook)) { $stockLocation = "ent1".$i."_0"; $qty = "qtyl".$i; - if (isModEnabled('productbatch') && $objectsrc->lines[$i]->product_tobatch) { // If product need a batch number + $is_batch_or_serial=0; + if (!empty($objectsrc->lines[$i]->fk_product)) { + $resultFetch = $product->fetch($objectsrc->lines[$i]->fk_product, '', '', '', 1, 1, 1); + if ($resultFetch < 0) { + setEventMessages($product->error, $product->errors, 'errors'); + } + $is_batch_or_serial = $product->status_batch; + } + + // If product need a batch or serial number + if (isModEnabled('productbatch') && $objectsrc->lines[$i]->product_tobatch) { if (GETPOSTISSET($batch)) { //shipment line with batch-enable product $qty .= '_'.$j; @@ -274,6 +286,12 @@ if (empty($reshook)) { //var_dump($sub_qty[$j]['q']); //var_dump($sub_qty[$j]['id_batch']); + //var_dump($qty);var_dump($batch);var_dump($sub_qty[$j]['q']);var_dump($sub_qty[$j]['id_batch']); + if ($is_batch_or_serial==2 && $sub_qty[$j]['q']>1) { + setEventMessages($langs->trans("TooManyQtyForSerialNumber", $product->ref, ''), null, 'errors'); + $totalqty=0; + break 2; + } $j++; $batch = "batchl".$i."_".$j; $qty = "qtyl".$i.'_'.$j; @@ -328,7 +346,6 @@ if (empty($reshook)) { } //var_dump($batch_line[2]); - if ($totalqty > 0 && !$error) { // There is at least one thing to ship and no error for ($i = 0; $i < $num; $i++) { $qty = "qtyl".$i; @@ -1143,7 +1160,7 @@ if ($action == 'create') { $product_static->status_buy = $line->product_tobuy; $product_static->status_batch = $line->product_tobatch; - $showdescinproductdesc = (getDolGlobalString('PRODUIT_DESC_IN_FORM') == 2 ? 1 : 0); + $showdescinproductdesc = getDolGlobalString('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE'); $text = $product_static->getNomUrl(1); $text .= ' - '.(!empty($line->label) ? $line->label : $line->product_label); @@ -1742,39 +1759,25 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->expedition->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->expedition->creer, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on shipment, so we will use the project or source object instead - // TODO Add project on shipment - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2202,10 +2205,10 @@ if ($action == 'create') { $text = $product_static->getNomUrl(1); $text .= ' - '.$label; - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($lines[$i]->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($lines[$i]->description)); print $form->textwithtooltip($text, $description, 3, '', '', $i); print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : '', !empty($lines[$i]->date_end) ? $lines[$i]->date_end : ''); - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($lines[$i]->description) && $lines[$i]->description != $lines[$i]->product) ? '
    '.dol_htmlentitiesbr($lines[$i]->description) : ''; } print "\n"; diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 6e42357a545..be2df31c137 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -2073,8 +2073,9 @@ class Expedition extends CommonObject } } if ($shipments_match_order) { - dol_syslog("Qty for the ".count($order->lines)." lines of order have same value for shipments with status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order'); - $order->cloture($user); + dol_syslog("Qty for the ".count($order->lines)." lines of the origin order is same than qty for lines in the shipment we close (shipments_match_order is true), with new status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order'); + // We close the order + $order->cloture($user); // Note this may also create an invoice if module workflow ask it } } @@ -2202,21 +2203,6 @@ class Expedition extends CommonObject return $error; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** - * Classify the shipping as invoiced (used when WORKFLOW_BILL_ON_SHIPMENT is on) - * - * @deprecated - * @see setBilled() - * @return int <0 if ko, >0 if ok - */ - public function set_billed() - { - // phpcs:enable - dol_syslog(get_class($this)."::set_billed is deprecated, use setBilled instead", LOG_NOTICE); - return $this->setBilled(); - } - /** * Classify the shipping as invoiced (used when WORKFLOW_BILL_ON_SHIPMENT is on) * diff --git a/htdocs/expedition/contact.php b/htdocs/expedition/contact.php index 4c540adcd9e..48822121fa3 100644 --- a/htdocs/expedition/contact.php +++ b/htdocs/expedition/contact.php @@ -148,39 +148,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", '', $object->ref_customer, $object, $user->rights->expedition->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", '', $object->ref_customer, $object, $user->rights->expedition->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on shipment, so we will use the project or source object instead - // TODO Add project on shipment - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/expedition/document.php b/htdocs/expedition/document.php index 71e325677e6..517c1cea8d2 100644 --- a/htdocs/expedition/document.php +++ b/htdocs/expedition/document.php @@ -66,8 +66,26 @@ if (!$sortfield) { $object = new Expedition($db); -if ($object->fetch($id, $ref)) { +if ($id > 0 || !empty($ref)) { + $object->fetch($id, $ref); $object->fetch_thirdparty(); + + if (!empty($object->origin)) { + $typeobject = $object->origin; + $origin = $object->origin; + $object->fetch_origin(); + } + + // Linked documents + if ($typeobject == 'commande' && $object->$typeobject->id && isModEnabled('commande')) { + $objectsrc = new Commande($db); + $objectsrc->fetch($object->$typeobject->id); + } + if ($typeobject == 'propal' && $object->$typeobject->id && isModEnabled("propal")) { + $objectsrc = new Propal($db); + $objectsrc->fetch($object->$typeobject->id); + } + $upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($object->ref); } @@ -118,43 +136,29 @@ if ($id > 0 || !empty($ref)) { $morehtmlref = '
    '; // Ref customer - $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); - $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); + $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', 0, 1); + $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on shipment, so we will use the project or source object instead - // TODO Add project on shipment - $morehtmlref .= ' : '; if (!empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index e697c0be6c3..81e0adb15aa 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -526,7 +526,7 @@ $param .= $hookmanager->resPrint; $arrayofmassactions = array( 'builddoc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), - 'classifyclose'=>$langs->trans("Close"), + 'classifyclose' => img_picto('', 'stop-circle', 'class="pictofixedwidth"').$langs->trans("Close"), 'presend' => img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); if (in_array($massaction, array('presend'))) { diff --git a/htdocs/expedition/note.php b/htdocs/expedition/note.php index d23bb0298ea..4401af0b20c 100644 --- a/htdocs/expedition/note.php +++ b/htdocs/expedition/note.php @@ -109,39 +109,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefCustomer", '', $object->ref_customer, $object, $user->rights->expedition->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefCustomer", '', $object->ref_customer, $object, $user->rights->expedition->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on shipment, so we will use the project or source object instead - // TODO Add project on shipment - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index 769642d305a..9394269a03a 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -283,39 +283,28 @@ if ($id > 0 || !empty($ref)) { $morehtmlref = '
    '; // Ref customer - $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', 0, 1); - $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', null, null, '', 1); + $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', 0, 1); + $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$soc->getNomUrl(1); + $morehtmlref .= '
    '.$soc->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->commande->creer) { + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - if (!empty($object->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $proj->fetch($objectsrc->fk_project); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -733,7 +722,7 @@ if ($id > 0 || !empty($ref)) { $text = $product_static->getNomUrl(1); $text .= ' - '.$label; - $description = ($conf->global->PRODUIT_DESC_IN_FORM ? '' : dol_htmlentitiesbr($objp->description)).'
    '; + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($objp->description)).'
    '; $description .= $product_static->show_photos('product', $conf->product->multidir_output[$product_static->entity], 1, 1, 0, 0, 0, 80); print $form->textwithtooltip($text, $description, 3, '', '', $i); @@ -741,7 +730,7 @@ if ($id > 0 || !empty($ref)) { print_date_range($db->jdate($objp->date_start), $db->jdate($objp->date_end)); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print ($objp->description && $objp->description != $objp->product_label) ? '
    '.dol_htmlentitiesbr($objp->description) : ''; } diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index bb4f41861ec..4bb9bf378ee 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1694,44 +1694,6 @@ if ($action == 'create') { $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
    '; - /* - // Ref customer - $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', null, null, '', 1); - // Thirdparty - $morehtmlref.='
    '.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1); - // Project - if (isModEnabled('project')) - { - $langs->load("projects"); - $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->commande->creer) - { - if ($action != 'classify') - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
    '; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } - } else { - if (!empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref.=''; - $morehtmlref.=$proj->ref; - $morehtmlref.=''; - } else { - $morehtmlref.=''; - } - } - }*/ $morehtmlref .= '
    '; dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/expensereport/payment/card.php b/htdocs/expensereport/payment/card.php index 316dccd91d8..db6c21e202f 100644 --- a/htdocs/expensereport/payment/card.php +++ b/htdocs/expensereport/payment/card.php @@ -238,12 +238,13 @@ if ($resql) { */ print '
    '; +// Delete if ($action == '') { if ($user->rights->expensereport->supprimer) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($title_button, $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } } diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php index 883ba7ea11e..cf0383dd08c 100644 --- a/htdocs/exports/class/export.class.php +++ b/htdocs/exports/class/export.class.php @@ -700,7 +700,7 @@ class Export // Export of compute field does not work. $obj contains $obj->alias_field and formula may contains $obj->field // Also the formula may contains objects of class that are not loaded. $computestring = $this->array_export_special[$indice][$key]; - //$tmp = dol_eval($computestring, 1, 0); + //$tmp = dol_eval($computestring, 1, 0, '1'); //$obj->$alias = $tmp; $this->error = "ERROPNOTSUPPORTED. Operation ".$computestring." not supported. Export of 'computed' extrafields is not yet supported, please remove field."; diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index 6c07ec6837d..2f82b16e1ad 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -741,11 +741,9 @@ if ($action == 'create') { print $langs->trans("AddIntervention").'
    '; } - if ($user->rights->ficheinter->supprimer) { - print ''; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $user->rights->ficheinter->supprimer); + print '
    '; } else { print $langs->trans("ErrorRecordNotFound"); diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 8b3868bf195..89205de02d5 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -104,6 +104,7 @@ $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $permissionnote = $user->rights->ficheinter->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink = $user->rights->ficheinter->creer; // Used by the include of actions_dellink.inc.php +$permissiontodelete = (($object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer) || $user->rights->ficheinter->supprimer); /* @@ -1158,7 +1159,7 @@ if ($action == 'create') { $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', 0, 1); $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'customer'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'customer'); // Project if (isModEnabled('project')) { $langs->load("projects"); @@ -1688,10 +1689,7 @@ if ($action == 'create') { } // Delete - if (($object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer) || $user->rights->ficheinter->supprimer) { - print ''; - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } } } @@ -1715,6 +1713,19 @@ if ($action == 'create') { $linktoelem = $form->showLinkToObjectBlock($object, null, array('fichinter')); $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); + // Show direct download link + if ($object->statut != Fichinter::STATUS_DRAFT && !empty($conf->global->FICHINTER_ALLOW_EXTERNAL_DOWNLOAD)) { + print '
    '."\n"; + print showDirectDownloadLink($object).'
    '; + } + + // Show online signature link + if ($object->statut != Fichinter::STATUS_DRAFT && !empty($conf->global->FICHINTER_ALLOW_ONLINE_SIGN)) { + print '
    '; + require_once DOL_DOCUMENT_ROOT.'/core/lib/signature.lib.php'; + + print showOnlineSignatureUrl('fichinter', $object->ref).'
    '; + } print '
    '; diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 7a5f3bc73ad..e36598d04bc 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -442,7 +442,7 @@ class Fichinter extends CommonObject $sql .= " f.datec, f.dateo, f.datee, f.datet, f.fk_user_author,"; $sql .= " f.date_valid as datev,"; $sql .= " f.tms as datem,"; - $sql .= " f.duree, f.fk_projet as fk_project, f.note_public, f.note_private, f.model_pdf, f.extraparams, fk_contrat, f.entity as entity"; + $sql .= " f.duree, f.fk_projet as fk_project, f.note_public, f.note_private, f.model_pdf, f.last_main_doc, f.extraparams, fk_contrat, f.entity as entity"; $sql .= " FROM ".MAIN_DB_PREFIX."fichinter as f"; if ($ref) { $sql .= " WHERE f.entity IN (".getEntity('intervention').")"; @@ -482,6 +482,8 @@ class Fichinter extends CommonObject $this->extraparams = (array) json_decode($obj->extraparams, true); + $this->last_main_doc = $obj->last_main_doc; + if ($this->statut == 0) { $this->brouillon = 1; } diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 731442695d2..174196a23a5 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -126,8 +126,8 @@ $arrayfields = array( 'f.description'=>array('label'=>'Description', 'checked'=>1), 'f.datec'=>array('label'=>'DateCreation', 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>'DateModificationShort', 'checked'=>0, 'position'=>500), - 'f.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES))), - 'f.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES))), + 'f.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))), + 'f.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))), 'f.fk_statut'=>array('label'=>'Status', 'checked'=>1, 'position'=>1000), 'fd.description'=>array('label'=>"DescriptionOfLine", 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS) ? 1 : 0), 'fd.date'=>array('label'=>'DateOfLine', 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS) ? 1 : 0), @@ -328,7 +328,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $resql = $db->query($sql); $nbtotalofrecords = $db->num_rows($resql); /* The fast and low memory method to get and count full list converts the sql into a sql count */ - /*$sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + /*$sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index ccd85e47810..54c7885e080 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -311,9 +311,6 @@ define('MAIN_DB_PREFIX', $dolibarr_main_db_prefix); * To use other version than embeded libraries, define here constant to path. Use '' to use include class path autodetect. */ // Path to root libraries -if (!defined('ADODB_PATH')) { - define('ADODB_PATH', (!isset($dolibarr_lib_ADODB_PATH)) ?DOL_DOCUMENT_ROOT.'/includes/adodbtime/' : (empty($dolibarr_lib_ADODB_PATH) ? '' : $dolibarr_lib_ADODB_PATH.'/')); -} if (!defined('TCPDF_PATH')) { define('TCPDF_PATH', (empty($dolibarr_lib_TCPDF_PATH)) ?DOL_DOCUMENT_ROOT.'/includes/tecnickcom/tcpdf/' : $dolibarr_lib_TCPDF_PATH.'/'); } @@ -354,10 +351,6 @@ if (!defined('DOL_DEFAULT_TTF_BOLD')) { * Include functions */ -if (!defined('ADODB_DATE_VERSION')) { - include_once ADODB_PATH.'adodb-time.inc.php'; -} - // If password is encoded, we decode it. Note: When page is called for install, $dolibarr_main_db_pass may not be defined yet. if ((!empty($dolibarr_main_db_pass) && preg_match('/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) { if (!empty($dolibarr_main_db_pass) && preg_match('/crypted:/i', $dolibarr_main_db_pass)) { diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 770276e96b8..3e58ceddfce 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1398,7 +1398,7 @@ class CommandeFournisseur extends CommonOrder $sql .= ", '".$this->db->escape($this->ref_supplier)."'"; $sql .= ", '".$this->db->escape($this->note_private)."'"; $sql .= ", '".$this->db->escape($this->note_public)."'"; - $sql .= ", ".((int) $conf->entity); + $sql .= ", ".setEntity($this); $sql .= ", ".((int) $this->socid); $sql .= ", ".($this->fk_project > 0 ? ((int) $this->fk_project) : "null"); $sql .= ", '".$this->db->idate($date)."'"; @@ -1832,7 +1832,7 @@ class CommandeFournisseur extends CommonOrder // If we want a dedicated supplier price, we must provide $fk_prod_fourn_price. $result = $prod->get_buyprice($fk_prod_fourn_price, $qty, $fk_product, 'none', (isset($this->fk_soc) ? $this->fk_soc : $this->socid)); // Search on couple $fk_prod_fourn_price/$qty first, then on triplet $qty/$fk_product/$ref_supplier/$this->fk_soc - // If supplier order created from customer order, we take best supplier price + // If supplier order created from sales order, we take best supplier price // If $pu (defined previously from pu_ht or pu_ttc) is not defined at all, we also take the best supplier price if ($result > 0 && ($origin == 'commande' || $pu === '')) { $pu = $prod->fourn_pu; // Unit price supplier price set by get_buyprice @@ -2608,11 +2608,11 @@ class CommandeFournisseur extends CommonOrder } /** - * Update a supplier order from a customer order + * Update a supplier order from a sales order * * @param User $user User that create - * @param int $idc Id of supplier order to update - * @param int $comclientid Id of customer order to use as template + * @param int $idc Id of purchase order to update + * @param int $comclientid Id of sale order to use as template * @return int <0 if KO, >0 if OK */ public function updateFromCommandeClient($user, $idc, $comclientid) @@ -3187,26 +3187,28 @@ class CommandeFournisseur extends CommonOrder * @param int $hidedesc Hide description * @param int $hideref Hide ref * @param null|array $moreparams Array to provide more information - * @return int 0 if KO, 1 if OK + * @return int < 0 if KO, 0 = no doc generated, > 0 if OK */ public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams = null) { global $conf, $langs; - $langs->load("suppliers"); - $outputlangs->load("products"); - if (!dol_strlen($modele)) { - $modele = ''; - if ($this->model_pdf) { + $modele = ''; // No doc template/generation by default + + if (!empty($this->model_pdf)) { $modele = $this->model_pdf; } elseif (!empty($conf->global->COMMANDE_SUPPLIER_ADDON_PDF)) { $modele = $conf->global->COMMANDE_SUPPLIER_ADDON_PDF; } } + if (empty($modele)) { return 0; } else { + $langs->load("suppliers"); + $outputlangs->load("products"); + $modelpath = "core/modules/supplier_order/doc/"; return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams); } diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 16bc43474d8..ec923f91118 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -419,7 +419,11 @@ class ProductFournisseur extends Product $productfournisseurprice->array_options[$key] = $value; } $res = $productfournisseurprice->update($user); - if ($res < 0) $error++; + if ($res < 0) { + $this->error = $productfournisseurprice->error; + $this->errors = $productfournisseurprice->errors; + $error++; + } } } } @@ -506,6 +510,7 @@ class ProductFournisseur extends Product if ($resql) { $this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX."product_fournisseur_price"); } else { + $this->error = $this->db->lasterror(); $error++; } @@ -518,7 +523,11 @@ class ProductFournisseur extends Product $productfournisseurprice->array_options[$key] = $value; } $res = $productfournisseurprice->update($user); - if ($res < 0) $error++; + if ($res < 0) { + $this->error = $productfournisseurprice->error; + $this->errors = $productfournisseurprice->errors; + $error++; + } } } } diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 834ef4031c0..5dbe81ca4a4 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2033,9 +2033,8 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $usercancreate, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $usercancreate, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty'); + $morehtmlref .= '
    '; if (!empty($conf->global->MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER) && !empty($usercancreate) && $action == 'edit_thirdparty') { - $morehtmlref .= ' : '; $morehtmlref .= '
    '; $morehtmlref .= ''; $morehtmlref .= ''; @@ -2047,7 +2046,7 @@ if ($action == 'create') { if (!empty($conf->global->MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER) && $object->statut == CommandeFournisseur::STATUS_DRAFT) { $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty')).''; } - $morehtmlref .= ' : '.$object->thirdparty->getNomUrl(1, 'supplier'); + $morehtmlref .= $object->thirdparty->getNomUrl(1, 'supplier'); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherOrders").')'; } @@ -2056,32 +2055,21 @@ if ($action == 'create') { // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($usercancreate) { + $morehtmlref .= '
    '; + if ($permissiontoadd) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify' && $caneditproject) { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, 'projectid', 0, 0, 1, 1, 1, 0, 0, '', 1, 0, 'maxwidth500'); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2121,7 +2109,7 @@ if ($action == 'create') { print ''; // Relative and absolute discounts - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice } else { diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index 92859d2eb1f..3ca1eca77bf 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -50,9 +50,12 @@ $hookmanager->initHooks(array('ordersuppliercardcontact')); $object = new CommandeFournisseur($db); +$usercancreate = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); +$permissiontoadd = $usercancreate; // Used by the include of actions_addupdatedelete.inc.php + /* - * Add a new contact + * Actions */ if ($action == 'addcontact' && ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer)) { @@ -100,6 +103,7 @@ if ($action == 'addcontact' && ($user->rights->fournisseur->commande->creer || $ /* * View */ + $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); @@ -134,37 +138,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { - if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $caneditproject) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 1a8834941c9..41c15dabb68 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -100,6 +100,9 @@ if (!isModEnabled('stock')) { accessforbidden(); } +$usercancreate = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); +$permissiontoadd = $usercancreate; // Used by the include of actions_addupdatedelete.inc.php + /* * Actions @@ -541,37 +544,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { - if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $caneditproject) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php index 0eba3dbc601..b3dfb8b9ece 100644 --- a/htdocs/fourn/commande/document.php +++ b/htdocs/fourn/commande/document.php @@ -130,37 +130,25 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { - if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $caneditproject) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php index 698fead1a43..fc3918a32f3 100644 --- a/htdocs/fourn/commande/info.php +++ b/htdocs/fourn/commande/info.php @@ -84,6 +84,8 @@ if (empty($user->rights->fournisseur->commande->lire)) { // Init Hooks $hookmanager->initHooks(array('ordersuppliercardinfo')); +$usercancreate = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); +$permissiontoadd = $usercancreate; // Used by the include of actions_addupdatedelete.inc.php /* @@ -141,37 +143,25 @@ $morehtmlref = '
    '; $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty -$morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); +$morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { - if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $caneditproject) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 82e36af6943..e0434378573 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -196,8 +196,8 @@ $arrayfields = array( 'country.code_iso'=>array('label'=>"Country", 'enabled'=>1, 'position'=>49), 'typent.code'=>array('label'=>"ThirdPartyType", 'enabled'=>$checkedtypetiers, 'position'=>50), 'u.login'=>array('label'=>"AuthorRequest", 'enabled'=>1, 'position'=>51), - 'cf.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES)), 'position'=>100), - 'cf.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES)), 'position'=>110), + 'cf.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES')), 'position'=>100), + 'cf.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'position'=>110), ); foreach ($object->fields as $key => $val) { // If $val['visible']==0, then we never show the field @@ -527,7 +527,7 @@ if (empty($reshook)) { } } - $cmd->classifyBilled($user); // TODO Move this in workflow like done for customer orders + $cmd->classifyBilled($user); // TODO Move this in workflow like done for sales orders if (!empty($createbills_onebythird) && empty($TFactThird[$cmd->socid])) { $TFactThird[$cmd->socid] = $objecttmp; diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index 167c506b651..33648dd9817 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -56,6 +56,8 @@ $object->fetch($id, $ref); // Permissions $permissionnote = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); // Used by the include of actions_setnotes.inc.php +$usercancreate = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); +$permissiontoadd = $usercancreate; // Used by the include of actions_addupdatedelete.inc.php /* @@ -110,37 +112,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { - if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $caneditproject) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/facture/card-rec.php b/htdocs/fourn/facture/card-rec.php index 71ba4f6928a..ead5a5f8ea8 100644 --- a/htdocs/fourn/facture/card-rec.php +++ b/htdocs/fourn/facture/card-rec.php @@ -1621,10 +1621,8 @@ if ($action == 'create') { } } - //if ($object->statut == Facture::STATUS_DRAFT && ($user->rights->fournisseur->facture->supprimer || $user->rights->supplier_invoice->supprimer)) - if (($user->rights->fournisseur->facture->supprimer || $user->rights->supplier_invoice->supprimer)) { - print ''; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=ask_deleteinvoice&token='.newToken(), 'delete', ($user->rights->fournisseur->facture->supprimer || $user->rights->supplier_invoice->supprimer)); print '
    '; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 31cec906b0f..1738dd69868 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -2641,7 +2641,7 @@ if ($action == 'create') { } $resteapayeraffiche = $resteapayer; - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { // Never use this + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { // Never use this $filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice } else { @@ -2873,39 +2873,28 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $usercancreate, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $usercancreate, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'supplier'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'supplier'); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($usercancreate) { + $morehtmlref .= '
    '; + if ($permissiontoadd) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -2919,7 +2908,7 @@ if ($action == 'create') { print '
    '; print '
    '; - print '
    '; if (count($dirthemes)) { $i = 0; @@ -603,11 +607,10 @@ function showWebsiteTemplates(Website $website) $handle = opendir($dirtheme); if (is_resource($handle)) { while (($subdir = readdir($handle)) !== false) { - if (is_file($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.' - && substr($subdir, 0, 3) <> 'CVS' && preg_match('/\.zip$/i', $subdir)) { - $subdirwithoutzip = preg_replace('/\.zip$/i', '', $subdir); + if (is_file($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.' && substr($subdir, 0, 3) <> 'CVS' && preg_match('/\.zip$/i', $subdir)) { + $subdirwithoutzip = preg_replace('/\.zip$/i', '', $subdir); - // Disable not stable themes (dir ends with _exp or _dev) + // Disable not stable themes (dir ends with _exp or _dev) if ($conf->global->MAIN_FEATURES_LEVEL < 2 && preg_match('/_dev$/i', $subdir)) { continue; } @@ -615,38 +618,44 @@ function showWebsiteTemplates(Website $website) continue; } - print '
    '; + print '
    '; - $file = $dirtheme."/".$subdirwithoutzip.".jpg"; - $url = DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; + $templatedir = $dirtheme."/".$subdir; + $file = $dirtheme."/".$subdirwithoutzip.".jpg"; + $url = DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; if (!file_exists($file)) { $url = DOL_URL_ROOT.'/public/theme/common/nophoto.png'; } - $originalfile = basename($file); - $entity = $conf->entity; - $modulepart = 'doctemplateswebsite'; - $cache = ''; - $title = $file; + $originalfile = basename($file); + $entity = $conf->entity; + $modulepart = 'doctemplateswebsite'; + $cache = ''; + $title = $file; - $ret = ''; - $urladvanced = getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity); + $ret = ''; + $urladvanced = getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity); if (!empty($urladvanced)) { $ret .= ''; } else { - $ret .= ''; + $ret .= ''; } - print $ret; - print ''.$title.''; - print ''; + print $ret; + print ''.$title.''; + print ''; - print '
    '; - print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')'; - print '
    ref).'&templateuserfile='.urlencode($subdir).'" class="button">'.$langs->trans("Load").''; - print '
    '; + print '
    '; + print $subdir; + print '
    '; + print ''.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).' - '.dol_print_date(dol_filemtime($templatedir), 'dayhour', 'tzuserrel').''; + if ($user->hasRight('website', 'delete')) { + print ' ref).'&templateuserfile='.urlencode($subdir).'">'.img_picto('', 'delete').''; + } + print '
    ref).'&templateuserfile='.urlencode($subdir).'" class="button">'.$langs->trans("Load").''; + print '
    '; - $i++; + $i++; } } } diff --git a/htdocs/core/login/functions_ldap.php b/htdocs/core/login/functions_ldap.php index cd4ed16eae6..faf0024d801 100644 --- a/htdocs/core/login/functions_ldap.php +++ b/htdocs/core/login/functions_ldap.php @@ -77,7 +77,7 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) $ldapdn = $dolibarr_main_auth_ldap_dn; $ldapadminlogin = $dolibarr_main_auth_ldap_admin_login; $ldapadminpass = $dolibarr_main_auth_ldap_admin_pass; - $ldapdebug = (empty($dolibarr_main_auth_ldap_debug) || $dolibarr_main_auth_ldap_debug == "false" ? false : true); + $ldapdebug = ((empty($dolibarr_main_auth_ldap_debug) || $dolibarr_main_auth_ldap_debug == "false") ? false : true); if ($ldapdebug) { print "DEBUG: Logging LDAP steps
    \n"; @@ -94,9 +94,9 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) if ($ldapdebug) { dol_syslog("functions_ldap::check_user_password_ldap Server:".join(',', $ldap->server).", Port:".$ldap->serverPort.", Protocol:".$ldap->ldapProtocolVersion.", Type:".$ldap->serverType); - dol_syslog("functions_ldap::check_user_password_ldap uid/samacountname=".$ldapuserattr.", dn=".$ldapdn.", Admin:".$ldap->searchUser.", Pass:".$ldap->searchPassword); + dol_syslog("functions_ldap::check_user_password_ldap uid/samaccountname=".$ldapuserattr.", dn=".$ldapdn.", Admin:".$ldap->searchUser.", Pass:".dol_trunc($ldap->searchPassword, 3)); print "DEBUG: Server:".join(',', $ldap->server).", Port:".$ldap->serverPort.", Protocol:".$ldap->ldapProtocolVersion.", Type:".$ldap->serverType."
    \n"; - print "DEBUG: uid/samacountname=".$ldapuserattr.", dn=".$ldapdn.", Admin:".$ldap->searchUser.", Pass:".$ldap->searchPassword."
    \n"; + print "DEBUG: uid/samaccountname=".$ldapuserattr.", dn=".$ldapdn.", Admin:".$ldap->searchUser.", Pass:".dol_trunc($ldap->searchPassword, 3)."
    \n"; } $resultFetchLdapUser = 0; diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index 8dc3f1b1374..10c50ca99ee 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -157,15 +157,15 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->reception->enabled && $leftmenu=="receptions"', __HANDLER__, 'left', 1353__+MAX_llx_menu__, 'commercial', '', 1350__+MAX_llx_menu__, '/reception/stats/index.php?mainmenu=commercial&leftmenu=receptions', 'Statistics', 1, 'receptions', '$user->rights->reception->lire', '', 2, 2, __ENTITY__); -- Commercial - Proposals -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1100__+MAX_llx_menu__, 'commercial', 'propals', 5__+MAX_llx_menu__, '/comm/propal/index.php?mainmenu=commercial&leftmenu=propals', 'Proposals', 0, 'propal', '$user->rights->propale->lire', '', 2, 4, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1101__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/card.php?mainmenu=commercial&action=create&leftmenu=propals', 'NewPropal', 1, 'propal', '$user->rights->propale->creer', '', 2, 0, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1102__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals', 'List', 1, 'propal', '$user->rights->propale->lire', '', 2, 1, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1103__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=0', 'PropalsDraft', 1, 'propal', '$user->rights->propale->lire', '', 2, 2, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1104__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=1', 'PropalsOpened', 1, 'propal', '$user->rights->propale->lire', '', 2, 3, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1105__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=2', 'PropalStatusSigned', 1, 'propal', '$user->rights->propale->lire', '', 2, 4, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1106__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=3', 'PropalStatusNotSigned', 1, 'propal', '$user->rights->propale->lire', '', 2, 5, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1107__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=4', 'PropalStatusBilled', 1, 'propal', '$user->rights->propale->lire', '', 2, 6, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1110__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/stats/index.php?mainmenu=commercial&leftmenu=propals', 'Statistics', 1, 'propal', '$user->rights->propale->lire', '', 2, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1100__+MAX_llx_menu__, 'commercial', 'propals', 5__+MAX_llx_menu__, '/comm/propal/index.php?mainmenu=commercial&leftmenu=propals', 'Proposals', 0, 'propal', '$user->rights->propal->lire', '', 2, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1101__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/card.php?mainmenu=commercial&action=create&leftmenu=propals', 'NewPropal', 1, 'propal', '$user->rights->propal->creer', '', 2, 0, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1102__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals', 'List', 1, 'propal', '$user->rights->propal->lire', '', 2, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1103__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=0', 'PropalsDraft', 1, 'propal', '$user->rights->propal->lire', '', 2, 2, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1104__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=1', 'PropalsOpened', 1, 'propal', '$user->rights->propal->lire', '', 2, 3, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1105__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=2', 'PropalStatusSigned', 1, 'propal', '$user->rights->propal->lire', '', 2, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1106__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=3', 'PropalStatusNotSigned', 1, 'propal', '$user->rights->propal->lire', '', 2, 5, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled && $leftmenu=="propals"', __HANDLER__, 'left', 1107__+MAX_llx_menu__, 'commercial', '', 1102__+MAX_llx_menu__, '/comm/propal/list.php?mainmenu=commercial&leftmenu=propals&search_status=4', 'PropalStatusBilled', 1, 'propal', '$user->rights->propal->lire', '', 2, 6, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->propal->enabled', __HANDLER__, 'left', 1110__+MAX_llx_menu__, 'commercial', '', 1100__+MAX_llx_menu__, '/comm/propal/stats/index.php?mainmenu=commercial&leftmenu=propals', 'Statistics', 1, 'propal', '$user->rights->propal->lire', '', 2, 4, __ENTITY__); -- Commercial - Customer's orders insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->commande->enabled', __HANDLER__, 'left', 1200__+MAX_llx_menu__, 'commercial', 'orders', 5__+MAX_llx_menu__, '/commande/index.php?mainmenu=commercial&leftmenu=orders', 'CustomersOrders', 0, 'orders', '$user->rights->commande->lire', '', 2, 5, __ENTITY__); @@ -450,7 +450,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4202__+MAX_llx_menu__, 'members', '', 4200__+MAX_llx_menu__, '/adherents/list.php', 'List', 1, 'members', '$user->rights->adherent->lire', '', 2, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4203__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=-1', 'MenuMembersToValidate', 2, 'members', '$user->rights->adherent->lire', '', 2, 2, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4204__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=1', 'MenuMembersValidated', 2, 'members', '$user->rights->adherent->lire', '', 2, 3, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4205__+MAX_llx_menu__, 'members', '', 4204__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=1&filter=withoutsubscription', 'WithoutSubscription', 2, 'members', '$user->rights->adherent->lire', '', 2, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4205__+MAX_llx_menu__, 'members', '', 4204__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=1&filter=waitingsubscription', 'WaitingSubscription', 2, 'members', '$user->rights->adherent->lire', '', 2, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4206__+MAX_llx_menu__, 'members', '', 4204__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=1&filter=outofdate', 'UpToDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4207__+MAX_llx_menu__, 'members', '', 4204__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=1&filter=uptodate', 'OutOfDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 5, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->adherent->enabled', __HANDLER__, 'left', 4208__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/list.php?mainmenu=members&leftmenu=members&statut=0', 'MenuMembersResiliated', 2, 'members', '$user->rights->adherent->lire', '', 2, 6, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 7fccf290d1a..4a6636942c4 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1115,7 +1115,7 @@ function get_left_menu_home($mainmenu, &$newmenu, $usemenuhider = 1, $leftmenu = $newmenu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1); $warnpicto = ''; - if (!empty($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { + if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && empty($conf->global->MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP)) { $langs->load("errors"); $warnpicto = img_warning($langs->trans("WarningPHPMailD")); } @@ -2405,7 +2405,7 @@ function get_left_menu_members($mainmenu, &$newmenu, $usemenuhider = 1, $leftmen $newmenu->add("/adherents/list.php?leftmenu=members", $langs->trans("List"), 1, $user->hasRight('adherent', 'read')); $newmenu->add("/adherents/list.php?leftmenu=members&statut=-1", $langs->trans("MenuMembersToValidate"), 2, $user->hasRight('adherent', 'read')); $newmenu->add("/adherents/list.php?leftmenu=members&statut=1", $langs->trans("MenuMembersValidated"), 2, $user->hasRight('adherent', 'read')); - $newmenu->add("/adherents/list.php?leftmenu=members&statut=1&filter=withoutsubscription", $langs->trans("WithoutSubscription"), 3, $user->hasRight('adherent', 'read')); + $newmenu->add("/adherents/list.php?leftmenu=members&statut=1&filter=waitingsubscription", $langs->trans("WaitingSubscription"), 3, $user->hasRight('adherent', 'read')); $newmenu->add("/adherents/list.php?leftmenu=members&statut=1&filter=uptodate", $langs->trans("UpToDate"), 3, $user->hasRight('adherent', 'read')); $newmenu->add("/adherents/list.php?leftmenu=members&statut=1&filter=outofdate", $langs->trans("OutOfDate"), 3, $user->hasRight('adherent', 'read')); $newmenu->add("/adherents/list.php?leftmenu=members&statut=0", $langs->trans("MenuMembersResiliated"), 2, $user->hasRight('adherent', 'read')); diff --git a/htdocs/core/modules/asset/doc/pdf_standard_asset.modules.php b/htdocs/core/modules/asset/doc/pdf_standard_asset.modules.php index 3853b7ae6e2..4b7c2bb0104 100644 --- a/htdocs/core/modules/asset/doc/pdf_standard_asset.modules.php +++ b/htdocs/core/modules/asset/doc/pdf_standard_asset.modules.php @@ -241,7 +241,7 @@ class pdf_standard_asset extends ModelePDFAsset if (empty($object->lines[$i]->fk_product)) continue; //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { diff --git a/htdocs/core/modules/asset/mod_asset_standard.php b/htdocs/core/modules/asset/mod_asset_standard.php index af28c0f9c5b..2e3ee3938e1 100644 --- a/htdocs/core/modules/asset/mod_asset_standard.php +++ b/htdocs/core/modules/asset/mod_asset_standard.php @@ -26,7 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/asset/modules_asset.php'; /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Asset */ class mod_asset_standard extends ModeleNumRefAsset { diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index f5a9fb75976..db2d0f2ed7f 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -25,7 +25,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/bom/modules_bom.php'; /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for BOM */ class mod_bom_standard extends ModeleNumRefboms { diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 50071b029e0..e0dff278f96 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -871,7 +871,7 @@ class pdf_einstein extends ModelePDFCommandes // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if ($object->fk_account > 0 || $object->fk_bank > 0 || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if ($object->fk_bank > 0) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 1397d46eac9..131e159196b 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -253,7 +253,7 @@ class pdf_eratosthene extends ModelePDFCommandes $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { @@ -1088,7 +1088,7 @@ class pdf_eratosthene extends ModelePDFCommandes // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if ($object->fk_account > 0 || $object->fk_bank > 0 || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if ($object->fk_bank > 0) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index 8c9ef0385eb..71a41d0b3c4 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -20,12 +20,12 @@ /** * \file htdocs/core/modules/commande/mod_commande_marbre.php * \ingroup commande - * \brief File of class to manage customer order numbering rules Marbre + * \brief File of class to manage Sales Order numbering rules Marbre */ require_once DOL_DOCUMENT_ROOT.'/core/modules/commande/modules_commande.php'; /** - * Class to manage customer order numbering rules Marbre + * Class to manage Sales Order numbering rules Marbre */ class mod_commande_marbre extends ModeleNumRefCommandes { diff --git a/htdocs/core/modules/commande/mod_commande_saphir.php b/htdocs/core/modules/commande/mod_commande_saphir.php index ad2b109f2d1..07dcfdced9e 100644 --- a/htdocs/core/modules/commande/mod_commande_saphir.php +++ b/htdocs/core/modules/commande/mod_commande_saphir.php @@ -23,14 +23,14 @@ /** * \file htdocs/core/modules/commande/mod_commande_saphir.php * \ingroup commande - * \brief Fichier contenant la classe du modele de numerotation de reference de commande Saphir + * \brief File of class to manage Sales Order numbering rules Saphir */ require_once DOL_DOCUMENT_ROOT.'/core/modules/commande/modules_commande.php'; /** - * Class to manage customer order numbering rules Saphir + * Class to manage Sales Order numbering rules Saphir */ class mod_commande_saphir extends ModeleNumRefCommandes { diff --git a/htdocs/core/modules/delivery/doc/pdf_storm.modules.php b/htdocs/core/modules/delivery/doc/pdf_storm.modules.php index 735b247f73a..bd47360d85d 100644 --- a/htdocs/core/modules/delivery/doc/pdf_storm.modules.php +++ b/htdocs/core/modules/delivery/doc/pdf_storm.modules.php @@ -238,7 +238,7 @@ class pdf_storm extends ModelePDFDeliveryOrder $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 67de0bd12ac..ee99d38ae2b 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -210,7 +210,7 @@ class pdf_espadon extends ModelePdfExpedition $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index 983380b277d..9321e1ecf00 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -235,7 +235,7 @@ class pdf_rouget extends ModelePdfExpedition $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 4ce7b3b3aa5..3d7da995e6f 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1134,10 +1134,10 @@ class pdf_crabe extends ModelePDFFactures // Check a payment mode is defined if (empty($object->mode_reglement_code) && empty($conf->global->FACTURE_CHQ_NUMBER) - && empty($conf->global->FACTURE_RIB_NUMBER)) { + && !getDolGlobalInt('FACTURE_RIB_NUMBER')) { $this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"); } elseif (($object->mode_reglement_code == 'CHQ' && empty($conf->global->FACTURE_CHQ_NUMBER) && empty($object->fk_account) && empty($object->fk_bank)) - || ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))) { + || ($object->mode_reglement_code == 'VIR' && !getDolGlobalInt('FACTURE_RIB_NUMBER') && empty($object->fk_account) && empty($object->fk_bank))) { // Avoid having any valid PDF with setup that is not complete $outputlangs->load("errors"); @@ -1247,7 +1247,7 @@ class pdf_crabe extends ModelePDFFactures // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if ($object->fk_account > 0 || $object->fk_bank > 0 || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if ($object->fk_bank > 0) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 2e5854b8534..da278cb45ac 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -285,7 +285,7 @@ class pdf_sponge extends ModelePDFFactures $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { @@ -1242,10 +1242,10 @@ class pdf_sponge extends ModelePDFFactures // Check a payment mode is defined if (empty($object->mode_reglement_code) && empty($conf->global->FACTURE_CHQ_NUMBER) - && empty($conf->global->FACTURE_RIB_NUMBER)) { + && !getDolGlobalInt('FACTURE_RIB_NUMBER')) { $this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"); } elseif (($object->mode_reglement_code == 'CHQ' && empty($conf->global->FACTURE_CHQ_NUMBER) && empty($object->fk_account) && empty($object->fk_bank)) - || ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))) { + || ($object->mode_reglement_code == 'VIR' && !getDolGlobalInt('FACTURE_RIB_NUMBER') && empty($object->fk_account) && empty($object->fk_bank))) { // Avoid having any valid PDF with setup that is not complete $outputlangs->load("errors"); @@ -1358,7 +1358,7 @@ class pdf_sponge extends ModelePDFFactures // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if ($object->fk_account > 0 || $object->fk_bank > 0 || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if ($object->fk_bank > 0) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/hrm/mod_evaluation_standard.php b/htdocs/core/modules/hrm/mod_evaluation_standard.php index 4c5bb083870..b6b517b8fb9 100644 --- a/htdocs/core/modules/hrm/mod_evaluation_standard.php +++ b/htdocs/core/modules/hrm/mod_evaluation_standard.php @@ -26,7 +26,7 @@ dol_include_once('/core/modules/hrm/modules_evaluation.php'); /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for HR evaluation */ class mod_evaluation_standard extends ModeleNumRefEvaluation { diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 594ab96d955..09f93a436ea 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -458,17 +458,27 @@ class ImportCsv extends ModeleImports $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. } - call_user_func_array(array($classinstance, $method), $param_array); + $result = call_user_func_array(array($classinstance, $method), $param_array); + + // If duplicate record found + if (!($classinstance->id != '') && $result == -2) { + $this->errors[$error]['lib'] = $langs->trans('ErrorMultipleRecordFoundFromRef', $newval); + $this->errors[$error]['type'] = 'FOREIGNKEY'; + $errorforthistable++; + $error++; + } + // If not found, try the fetch from label if (!($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule'] == 'fetchidfromcodeorlabel') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); } $this->cacheconvert[$file.'_'.$class.'_'.$method.'_'][$newval] = $classinstance->id; + //print 'We have made a '.$class.'->'.$method.' to get id from code '.$newval.'. '; if ($classinstance->id != '') { // id may be 0, it is a found value $newval = $classinstance->id; - } else { + } elseif (! $error) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', num2Alpha($key - 1), $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); } elseif (!empty($objimport->array_import_convertvalue[0][$val]['element'])) { @@ -729,9 +739,13 @@ class ImportCsv extends ModeleImports if (isModEnabled("socialnetworks") && strpos($fieldname, "socialnetworks") !== false) { if (!in_array("socialnetworks", $listfields)) { $listfields[] = "socialnetworks"; + $socialkey = array_search("socialnetworks", $listfields); // Return position of 'socialnetworks' key in array + $listvalues[$socialkey] = ''; } + //var_dump($newval); var_dump($arrayrecord[($key - 1)]['type']); if (!empty($newval) && $arrayrecord[($key - 1)]['type'] > 0) { - $socialkey = array_search("socialnetworks", $listfields); + $socialkey = array_search("socialnetworks", $listfields); // Return position of 'socialnetworks' key in array + //var_dump('sk='.$socialkey); // socialkey=19 $socialnetwork = explode("_", $fieldname)[1]; if (empty($listvalues[$socialkey]) || $listvalues[$socialkey] == "null") { $json = new stdClass(); @@ -833,7 +847,6 @@ class ImportCsv extends ModeleImports if (empty($lastinsertid)) { // No insert done yet for a parent table $sqlSelect = "SELECT ".$fname." FROM ".$tablename; - $data = array_combine($listfields, $listvalues); $where = array(); // filters to forge SQL request $filters = array(); // filters to forge output error message diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 3637ce105c1..ecf7d8b4a77 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -502,17 +502,28 @@ class ImportXlsx extends ModeleImports }*/ $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. } - call_user_func_array(array($classinstance, $method), $param_array); + + $result = call_user_func_array(array($classinstance, $method), $param_array); + + // If duplicate record found + if (!($classinstance->id != '') && $result == -2) { + $this->errors[$error]['lib'] = $langs->trans('ErrorMultipleRecordFoundFromRef', $newval); + $this->errors[$error]['type'] = 'FOREIGNKEY'; + $errorforthistable++; + $error++; + } + // If not found, try the fetch from label if (!($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule'] == 'fetchidfromcodeorlabel') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); } $this->cacheconvert[$file . '_' . $class . '_' . $method . '_'][$newval] = $classinstance->id; + //print 'We have made a '.$class.'->'.$method.' to get id from code '.$newval.'. '; if ($classinstance->id != '') { // id may be 0, it is a found value $newval = $classinstance->id; - } else { + } elseif (! $error) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); } elseif (!empty($objimport->array_import_convertvalue[0][$val]['element'])) { @@ -770,12 +781,14 @@ class ImportXlsx extends ModeleImports } // Define $listfields and $listvalues to build SQL request - if ($conf->socialnetworks->enabled && strpos($fieldname, "socialnetworks") !== false) { + if (isModEnabled("socialnetworks") && strpos($fieldname, "socialnetworks") !== false) { if (!in_array("socialnetworks", $listfields)) { $listfields[] = "socialnetworks"; + $socialkey = array_search("socialnetworks", $listfields); // Return position of 'socialnetworks' key in array. Example socialkey=19 + $listvalues[$socialkey] = ''; } if (!empty($newval) && $arrayrecord[($key)]['type'] > 0) { - $socialkey = array_search("socialnetworks", $listfields); + $socialkey = array_search("socialnetworks", $listfields); // Return position of 'socialnetworks' key in array. Example socialkey=19 $socialnetwork = explode("_", $fieldname)[1]; if (empty($listvalues[$socialkey]) || $listvalues[$socialkey] == "null") { $json = new stdClass(); @@ -797,7 +810,7 @@ class ImportXlsx extends ModeleImports } elseif (empty($newval) && $arrayrecord[($key)]['type'] == 0) { $listvalues[] = "''"; } else { - $listvalues[] = "'" . $this->db->escape($newval) . "'"; + $listvalues[] = "'".$this->db->escape($newval)."'"; } } } @@ -810,7 +823,7 @@ class ImportXlsx extends ModeleImports if (!empty($listfields) && is_array($objimport->array_import_fieldshidden[0])) { // Loop on each hidden fields to add them into listfields/listvalues foreach ($objimport->array_import_fieldshidden[0] as $key => $val) { - if (!preg_match('/^' . preg_quote($alias, '/') . '\./', $key)) { + if (!preg_match('/^'.preg_quote($alias, '/').'\./', $key)) { continue; // Not a field of current table } if ($val == 'user->id') { @@ -876,17 +889,17 @@ class ImportXlsx extends ModeleImports if (!empty($updatekeys)) { // We do SELECT to get the rowid, if we already have the rowid, it's to be used below for related tables (extrafields) - $where = array(); - if (empty($lastinsertid)) { // No insert done yet for a parent table $sqlSelect = "SELECT ".$fname." FROM " . $tablename; $data = array_combine($listfields, $listvalues); - $filters = array(); + + $where = array(); // filters to forge SQL request + $filters = array(); // filters to forge output error message foreach ($updatekeys as $key) { $col = $objimport->array_import_updatekeys[0][$key]; $key = preg_replace('/^.*\./i', '', $key); - if ($conf->socialnetworks->enabled && strpos($key, "socialnetworks") !== false) { + if (isModEnabled("socialnetworks") && strpos($key, "socialnetworks") !== false) { $tmp = explode("_", $key); $key = $tmp[0]; $socialnetwork = $tmp[1]; diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php index 979782e61a5..9083b643900 100644 --- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php +++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php @@ -108,7 +108,7 @@ class mailing_thirdparties_services_expired extends MailingTargets $now = dol_now(); // La requete doit retourner: id, email, name - $sql = "SELECT s.rowid as id, s.email, s.nom as name, cd.rowid as cdid, cd.date_ouverture, cd.date_fin_validite, cd.fk_contrat"; + $sql = "SELECT s.rowid as id, s.email, s.nom as name, cd.rowid as cdid, cd.date_ouverture as date_start_real, cd.date_fin_validite as date_end, cd.fk_contrat"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c"; $sql .= ", ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."product as p"; $sql .= " WHERE s.entity IN (".getEntity('societe').")"; @@ -135,8 +135,8 @@ class mailing_thirdparties_services_expired extends MailingTargets 'lastname' => $obj->name, // For thirdparties, lastname must be name 'firstname' => '', // For thirdparties, firstname is '' 'other' => - ('DateStart='.dol_print_date($this->db->jdate($obj->date_ouverture), 'day')).';'. - ('DateEnd='.dol_print_date($this->db->jdate($obj->date_fin_validite), 'day')).';'. + ('DateStart='.dol_print_date($this->db->jdate($obj->date_start_real), 'day')).';'. // date start real + ('DateEnd='.dol_print_date($this->db->jdate($obj->date_end), 'day')).';'. // date end planned ('Contract='.$obj->fk_contrat).';'. ('ContactLine='.$obj->cdid), 'source_url' => $this->url($obj->id), diff --git a/htdocs/core/modules/modApi.class.php b/htdocs/core/modules/modApi.class.php index 48420a264d3..5eaae25a67c 100644 --- a/htdocs/core/modules/modApi.class.php +++ b/htdocs/core/modules/modApi.class.php @@ -107,7 +107,7 @@ class modApi extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modAsset.class.php b/htdocs/core/modules/modAsset.class.php index fbe6134c797..a0fb405887e 100644 --- a/htdocs/core/modules/modAsset.class.php +++ b/htdocs/core/modules/modAsset.class.php @@ -137,7 +137,7 @@ class modAsset extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index d39affa4d78..6f2cc7ac4b2 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -156,7 +156,7 @@ class modBom extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modCommande.class.php b/htdocs/core/modules/modCommande.class.php index 6a88c14271b..f0486b5cb58 100644 --- a/htdocs/core/modules/modCommande.class.php +++ b/htdocs/core/modules/modCommande.class.php @@ -34,11 +34,10 @@ include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php'; /** - * Class to describe module customer orders + * Class to describe module Sales Orders */ class modCommande extends DolibarrModules { - /** * Constructor. Define names, constants, directories, boxes, permissions * diff --git a/htdocs/core/modules/modDataPolicy.class.php b/htdocs/core/modules/modDataPolicy.class.php index 2768e7d1d7a..93f3e6f4024 100644 --- a/htdocs/core/modules/modDataPolicy.class.php +++ b/htdocs/core/modules/modDataPolicy.class.php @@ -162,7 +162,7 @@ class modDataPolicy extends DolibarrModules { // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modDav.class.php b/htdocs/core/modules/modDav.class.php index aeea231fd1e..356f043cea0 100644 --- a/htdocs/core/modules/modDav.class.php +++ b/htdocs/core/modules/modDav.class.php @@ -131,7 +131,7 @@ class modDav extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modEmailCollector.class.php b/htdocs/core/modules/modEmailCollector.class.php index 03c668910ce..514fe1be667 100644 --- a/htdocs/core/modules/modEmailCollector.class.php +++ b/htdocs/core/modules/modEmailCollector.class.php @@ -131,7 +131,7 @@ class modEmailCollector extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modEventOrganization.class.php b/htdocs/core/modules/modEventOrganization.class.php index 6708eb4192a..437fa691713 100644 --- a/htdocs/core/modules/modEventOrganization.class.php +++ b/htdocs/core/modules/modEventOrganization.class.php @@ -169,7 +169,7 @@ class modEventOrganization extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view @@ -327,7 +327,7 @@ class modEventOrganization extends DolibarrModules */ public function init($options = '') { - global $conf, $langs; + global $conf, $langs, $user; // Permissions $this->remove($options); @@ -370,6 +370,28 @@ class modEventOrganization extends DolibarrModules $init = $this->_init($sql, $options); + + // Insert some vars + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; + $formmail = new FormMail($this->db); + + $template = $formmail->getEMailTemplate($this->db, 'conferenceorbooth', $user, $langs, 0, 1, '(EventOrganizationEmailAskConf)'); + if ($template->id > 0) { + dolibarr_set_const($this->db, 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF', $template->id, 'chaine', 0, '', $conf->entity); + } + $template = $formmail->getEMailTemplate($this->db, 'conferenceorbooth', $user, $langs, 0, 1, '(EventOrganizationEmailAskBooth)'); + if ($template->id > 0) { + dolibarr_set_const($this->db, 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH', $template->id, 'chaine', 0, '', $conf->entity); + } + $template = $formmail->getEMailTemplate($this->db, 'conferenceorbooth', $user, $langs, 0, 1, '(EventOrganizationEmailBoothPayment)'); + if ($template->id > 0) { + dolibarr_set_const($this->db, 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH', $template->id, 'chaine', 0, '', $conf->entity); + } + $template = $formmail->getEMailTemplate($this->db, 'conferenceorbooth', $user, $langs, 0, 1, '(EventOrganizationEmailRegistrationPayment)'); + if ($template->id > 0) { + dolibarr_set_const($this->db, 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT', $template->id, 'chaine', 0, '', $conf->entity); + } + return $init; } diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index 339e02cf393..85072c90cee 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2021 Alexandre Spangaro + * Copyright (C) 2022 Frédéric France * * 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 @@ -238,7 +239,7 @@ class modFacture extends DolibarrModules $this->import_fields_array[$r] = array( 'f.ref' => 'InvoiceRef*', 'f.ref_ext' => 'ExternalRef', - 'f.ref_client' => 'CutomerRef', + 'f.ref_client' => 'CustomerRef', 'f.type' => 'Type*', 'f.fk_soc' => 'Customer*', 'f.datec' => 'InvoiceDateCreation', @@ -350,7 +351,7 @@ class modFacture extends DolibarrModules ) ); - //Import Supplier Invoice Lines + // Import Invoice Lines $r++; $this->import_code[$r] = $this->rights_class.'_'.$r; $this->import_label[$r] = "InvoiceLine"; // Translation key diff --git a/htdocs/core/modules/modFckeditor.class.php b/htdocs/core/modules/modFckeditor.class.php index 8c30d8a0a51..fa3a66c37cc 100644 --- a/htdocs/core/modules/modFckeditor.class.php +++ b/htdocs/core/modules/modFckeditor.class.php @@ -70,10 +70,9 @@ class modFckeditor extends DolibarrModules // Constants $this->const = array(); $this->const[0] = array("FCKEDITOR_ENABLE_SOCIETE", "yesno", "1", "WYSIWIG for the fields descriptions of elements (except products/services)"); - $this->const[1] = array("FCKEDITOR_ENABLE_PRODUCTDESC", "yesno", "1", "WYSIWIG for the fields description of products/services"); - $this->const[2] = array("FCKEDITOR_ENABLE_MAILING", "yesno", "1", "WYSIWIG for mass emailings"); - $this->const[3] = array("FCKEDITOR_ENABLE_DETAILS", "yesno", "1", "WYSIWIG for products details lines for all entities"); - $this->const[4] = array("FCKEDITOR_ENABLE_USERSIGN", "yesno", "1", "WYSIWIG for user signature"); + $this->const[2] = array("FCKEDITOR_ENABLE_DETAILS", "yesno", "1", "WYSIWIG for products details lines for all entities"); + $this->const[3] = array("FCKEDITOR_ENABLE_USERSIGN", "yesno", "1", "WYSIWIG for user signature"); + $this->const[4] = array("FCKEDITOR_ENABLE_MAILING", "yesno", "1", "WYSIWIG for mass emailings"); $this->const[5] = array("FCKEDITOR_ENABLE_MAIL", "yesno", "1", "WYSIWIG for products details lines for all entities"); $this->const[6] = array("FCKEDITOR_SKIN", "string", "moono-lisa", "Skin by default for fckeditor"); diff --git a/htdocs/core/modules/modHRM.class.php b/htdocs/core/modules/modHRM.class.php index 0da5663d452..09ff03cae9b 100644 --- a/htdocs/core/modules/modHRM.class.php +++ b/htdocs/core/modules/modHRM.class.php @@ -141,7 +141,7 @@ class modHRM extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modKnowledgeManagement.class.php b/htdocs/core/modules/modKnowledgeManagement.class.php index 634f36406a2..b331c56a917 100644 --- a/htdocs/core/modules/modKnowledgeManagement.class.php +++ b/htdocs/core/modules/modKnowledgeManagement.class.php @@ -184,7 +184,7 @@ class modKnowledgeManagement extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php index f93ce224662..fb836c8393b 100644 --- a/htdocs/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -168,7 +168,7 @@ class modMrp extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modMultiCurrency.class.php b/htdocs/core/modules/modMultiCurrency.class.php index 54297d5e77c..f08c9a4b021 100644 --- a/htdocs/core/modules/modMultiCurrency.class.php +++ b/htdocs/core/modules/modMultiCurrency.class.php @@ -113,7 +113,7 @@ class modMultiCurrency extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modPartnership.class.php b/htdocs/core/modules/modPartnership.class.php index ccd67542830..8e8421540c7 100644 --- a/htdocs/core/modules/modPartnership.class.php +++ b/htdocs/core/modules/modPartnership.class.php @@ -199,7 +199,7 @@ class modPartnership extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modRecruitment.class.php b/htdocs/core/modules/modRecruitment.class.php index f1fe6f2072c..8b2db1a115a 100644 --- a/htdocs/core/modules/modRecruitment.class.php +++ b/htdocs/core/modules/modRecruitment.class.php @@ -177,7 +177,7 @@ class modRecruitment extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php index ab73c8828b4..59dc7878161 100644 --- a/htdocs/core/modules/modResource.class.php +++ b/htdocs/core/modules/modResource.class.php @@ -120,7 +120,7 @@ class modResource extends DolibarrModules // 'order_supplier' to add a tab in supplier order view // 'invoice_supplier' to add a tab in supplier invoice view // 'invoice' to add a tab in customer invoice view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'product' to add a tab in product view // 'stock' to add a tab in stock view // 'propal' to add a tab in propal view diff --git a/htdocs/core/modules/modStockTransfer.class.php b/htdocs/core/modules/modStockTransfer.class.php index a90b28be5aa..6c8f068adf6 100644 --- a/htdocs/core/modules/modStockTransfer.class.php +++ b/htdocs/core/modules/modStockTransfer.class.php @@ -51,7 +51,7 @@ class modStockTransfer extends DolibarrModules $this->rights_class = 'stocktransfer'; // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...' // It is used to group modules by family in module setup page - $this->family = "other"; + $this->family = "products"; // Module position in the family on 2 digits ('01', '10', '20', ...) $this->module_position = '90'; // Gives the possibility for the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this) @@ -125,7 +125,6 @@ class modStockTransfer extends DolibarrModules $this->conflictwith = array(); // List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...) $this->langfiles = array("stocktransfer@stocktransfer"); $this->phpmin = array(7, 0); // Minimum version of PHP required by module - $this->need_dolibarr_version = array(11, -3); // Minimum version of Dolibarr required by module $this->warnings_activation = array(); // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...) $this->warnings_activation_ext = array(); // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...) //$this->automatic_activation = array('FR'=>'StockTransferWasAutomaticallyActivatedBecauseOfYourCountryChoice'); @@ -138,12 +137,6 @@ class modStockTransfer extends DolibarrModules // ); $this->const = array(); - // Some keys to add into the overwriting translation tables - /*$this->overwrite_translation = array( - 'en_US:ParentCompany'=>'Parent company or reseller', - 'fr_FR:ParentCompany'=>'Maison mère ou revendeur' - )*/ - if (!isset($conf->stocktransfer) || !isset($conf->stocktransfer->enabled)) { $conf->stocktransfer = new stdClass(); $conf->stocktransfer->enabled = 0; @@ -166,7 +159,7 @@ class modStockTransfer extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view @@ -435,15 +428,6 @@ class modStockTransfer extends DolibarrModules $result = $this->_load_tables('/install/mysql/tables/', 'stocktransfer'); if ($result < 0) return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default') - // Create extrafields during init - //include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; - //$extrafields = new ExtraFields($this->db); - //$result1=$extrafields->addExtraField('stocktransfer_myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'stocktransfer@stocktransfer', '$conf->stocktransfer->enabled'); - //$result2=$extrafields->addExtraField('stocktransfer_myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'stocktransfer@stocktransfer', '$conf->stocktransfer->enabled'); - //$result3=$extrafields->addExtraField('stocktransfer_myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'stocktransfer@stocktransfer', '$conf->stocktransfer->enabled'); - //$result4=$extrafields->addExtraField('stocktransfer_myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'stocktransfer@stocktransfer', '$conf->stocktransfer->enabled'); - //$result5=$extrafields->addExtraField('stocktransfer_myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'stocktransfer@stocktransfer', '$conf->stocktransfer->enabled'); - // Permissions $this->remove($options); diff --git a/htdocs/core/modules/modTakePos.class.php b/htdocs/core/modules/modTakePos.class.php index 8096629c9a4..b06bf0fe8b0 100644 --- a/htdocs/core/modules/modTakePos.class.php +++ b/htdocs/core/modules/modTakePos.class.php @@ -142,7 +142,7 @@ class modTakePos extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modWebhook.class.php b/htdocs/core/modules/modWebhook.class.php index b1aaea23929..225f09659c2 100644 --- a/htdocs/core/modules/modWebhook.class.php +++ b/htdocs/core/modules/modWebhook.class.php @@ -183,7 +183,7 @@ class modWebhook extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index bf229791ff3..6c87d1d799e 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -203,6 +203,7 @@ class modWebsite extends DolibarrModules dol_mkdir($destroot); + // Copy templates in zip format (old) $docs = dol_dir_list($srcroot, 'files', 0, 'website_.*(\.zip|\.jpg)$'); foreach ($docs as $cursorfile) { $src = $srcroot.'/'.$cursorfile['name']; @@ -217,6 +218,24 @@ class modWebsite extends DolibarrModules } } + // Copy templates in dir format (recommended) + $docs = dol_dir_list($srcroot, 'directories', 0, 'website_.*$'); + + foreach ($docs as $cursorfile) { + $src = $srcroot.'/'.$cursorfile['name']; + $dest = $destroot.'/'.$cursorfile['name']; + + // Compress it + global $errormsg; + $errormsg = ''; + $result = dol_compress_dir($src, $dest.'.zip', 'zip'); + if ($result < 0) { + $error++; + $this->error = ($errormsg ? $errormsg : $langs->trans('ErrorFailToCreateZip', $dest)); + $this->errors[] = ($errormsg ? $errormsg : $langs->trans('ErrorFailToCreateZip', $dest)); + } + } + if ($error) { return 0; } diff --git a/htdocs/core/modules/modWorkflow.class.php b/htdocs/core/modules/modWorkflow.class.php index cc7e478e379..58da4876d32 100644 --- a/htdocs/core/modules/modWorkflow.class.php +++ b/htdocs/core/modules/modWorkflow.class.php @@ -93,7 +93,6 @@ class modWorkflow extends DolibarrModules 6=>array('WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION', 0, 'current', 0), 7=>array('WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED', 0, 'current', 0), 8=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0), - 9=>array('WORKFLOW_BILL_ON_RECEPTION', 'chaine', '1', 'WORKFLOW_BILL_ON_RECEPTION', 0, 'current', 0), 10=>array('WORKFLOW_TICKET_LINK_CONTRACT', 'chaine', '0', 'Automatically link a ticket to available contracts', 0, 'current', 0), 11=>array('WORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS', 'chaine', '0', 'Search among parent companies contracts when automatically linking a ticket to available contracts', 0, 'current', 0), 11=>array('WORKFLOW_TICKET_CREATE_INTERVENTION', 'chaine', '1', 'WORKFLOW_TICKET_CREATE_INTERVENTION', 0, 'current', 0) diff --git a/htdocs/core/modules/modWorkstation.class.php b/htdocs/core/modules/modWorkstation.class.php index 51094439df0..a8be0f23226 100644 --- a/htdocs/core/modules/modWorkstation.class.php +++ b/htdocs/core/modules/modWorkstation.class.php @@ -166,7 +166,7 @@ class modWorkstation extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/modZapier.class.php b/htdocs/core/modules/modZapier.class.php index 6d05aa7b283..b14419e0982 100644 --- a/htdocs/core/modules/modZapier.class.php +++ b/htdocs/core/modules/modZapier.class.php @@ -172,7 +172,7 @@ class modZapier extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sales order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php index ee4e17ae19e..8b1261f35f0 100644 --- a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php +++ b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php @@ -943,7 +943,7 @@ class doc_generic_project_odt extends ModelePDFProjects 'title' => "ListProposalsAssociatedProject", 'class' => 'Propal', 'table' => 'propal', - 'test' => $conf->propal->enabled && $user->rights->propale->lire + 'test' => $conf->propal->enabled && $user->rights->propal->lire ), 'order' => array( 'title' => "ListOrdersAssociatedProject", diff --git a/htdocs/core/modules/project/doc/pdf_beluga.modules.php b/htdocs/core/modules/project/doc/pdf_beluga.modules.php index c60f2c4bb66..9947bb49b0b 100644 --- a/htdocs/core/modules/project/doc/pdf_beluga.modules.php +++ b/htdocs/core/modules/project/doc/pdf_beluga.modules.php @@ -374,7 +374,7 @@ class pdf_beluga extends ModelePDFProjects 'class'=>'Propal', 'table'=>'propal', 'datefieldname'=>'datep', - 'test'=>$conf->propal->enabled && $user->rights->propale->lire, + 'test'=>$conf->propal->enabled && $user->rights->propal->lire, 'lang'=>'propal'), 'order'=>array( 'name'=>"CustomersOrders", diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 3113468bf2e..231d8c1ddff 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -262,7 +262,7 @@ class pdf_azur extends ModelePDFPropales $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { @@ -814,7 +814,7 @@ class pdf_azur extends ModelePDFPropales if (count($filetomerge->lines) > 0) { foreach ($filetomerge->lines as $linefile) { if (!empty($linefile->id) && !empty($linefile->file_name)) { - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { if (isModEnabled("product")) { $filetomerge_dir = $conf->product->multidir_output[$entity_product_file].'/'.get_exdir($product->id, 2, 0, 0, $product, 'product').$product->id."/photos"; } elseif (isModEnabled("service")) { @@ -1053,7 +1053,7 @@ class pdf_azur extends ModelePDFPropales // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if (!empty($object->fk_account) || !empty($object->fk_bank) || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if (!empty($object->fk_account) || !empty($object->fk_bank) || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = (empty($object->fk_account) ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if (!empty($object->fk_bank)) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 8698f370d31..9bffe9009fb 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -249,7 +249,7 @@ class pdf_cyan extends ModelePDFPropales $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { @@ -939,7 +939,7 @@ class pdf_cyan extends ModelePDFPropales if (count($filetomerge->lines) > 0) { foreach ($filetomerge->lines as $linefile) { if (!empty($linefile->id) && !empty($linefile->file_name)) { - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { if (isModEnabled("product")) { $filetomerge_dir = $conf->product->multidir_output[$entity_product_file].'/'.get_exdir($product->id, 2, 0, 0, $product, 'product').$product->id."/photos"; } elseif (isModEnabled("service")) { @@ -1172,7 +1172,7 @@ class pdf_cyan extends ModelePDFPropales // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if ($object->fk_account > 0 || $object->fk_bank > 0 || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if ($object->fk_bank > 0) { $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank diff --git a/htdocs/core/modules/propale/mod_propale_marbre.php b/htdocs/core/modules/propale/mod_propale_marbre.php index 28d66dfc40a..54dd0096b2e 100644 --- a/htdocs/core/modules/propale/mod_propale_marbre.php +++ b/htdocs/core/modules/propale/mod_propale_marbre.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/propale/modules_propale.php'; /** - * Class to manage customer order numbering rules Marbre + * Class to manage business proposition rules Marbre */ class mod_propale_marbre extends ModeleNumRefPropales { diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index 6e970f198be..cc24bda817d 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -152,7 +152,7 @@ class pdf_squille extends ModelePdfReception $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/societe/mod_codeclient_monkey.php b/htdocs/core/modules/societe/mod_codeclient_monkey.php index a7ae44323a1..19a5309a374 100644 --- a/htdocs/core/modules/societe/mod_codeclient_monkey.php +++ b/htdocs/core/modules/societe/mod_codeclient_monkey.php @@ -151,7 +151,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode } $date = dol_now(); - $yymm = strftime("%y%m", $date); + $yymm = dol_print_date($date, "%y%m", 'tzuserrel'); if ($max >= (pow(10, 5) - 1)) { $num = $max + 1; // If counter > 99999, we do not format on 5 chars, we take number as it is diff --git a/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php b/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php index 593966f4f80..70222be674e 100644 --- a/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php +++ b/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php @@ -219,7 +219,7 @@ class pdf_eagle extends ModelePdfStockTransfer $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php b/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php index 925813a1036..ef73d526ed6 100644 --- a/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php +++ b/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php @@ -227,7 +227,7 @@ class pdf_eagle_proforma extends ModelePDFCommandes $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { @@ -978,7 +978,7 @@ class pdf_eagle_proforma extends ModelePDFCommandes // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if (!empty($object->fk_account) || !empty($object->fk_bank) || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if (!empty($object->fk_account) || !empty($object->fk_bank) || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = (empty($object->fk_account) ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account); if (!empty($object->fk_bank)) $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank $account = new Account($this->db); diff --git a/htdocs/core/modules/stocktransfer/mod_stocktransfer_standard.php b/htdocs/core/modules/stocktransfer/mod_stocktransfer_standard.php index 6a6c7c556e6..fc647d3135c 100644 --- a/htdocs/core/modules/stocktransfer/mod_stocktransfer_standard.php +++ b/htdocs/core/modules/stocktransfer/mod_stocktransfer_standard.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/modules/stocktransfer/modules_stocktrans /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Stock */ class mod_stocktransfer_standard extends ModeleNumRefStockTransfer { diff --git a/htdocs/core/modules/supplier_order/doc/pdf_cornas.modules.php b/htdocs/core/modules/supplier_order/doc/pdf_cornas.modules.php index 78ea731bb42..5e4b75a183e 100644 --- a/htdocs/core/modules/supplier_order/doc/pdf_cornas.modules.php +++ b/htdocs/core/modules/supplier_order/doc/pdf_cornas.modules.php @@ -230,7 +230,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/supplier_order/doc/pdf_muscadet.modules.php b/htdocs/core/modules/supplier_order/doc/pdf_muscadet.modules.php index 32295bdd562..8863aeffe47 100644 --- a/htdocs/core/modules/supplier_order/doc/pdf_muscadet.modules.php +++ b/htdocs/core/modules/supplier_order/doc/pdf_muscadet.modules.php @@ -245,7 +245,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php index afa8ee7d285..fe439ea0790 100644 --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php @@ -241,7 +241,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $objphoto = new Product($this->db); $objphoto->fetch($object->lines[$i]->fk_product); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/"; $dir = $conf->product->dir_output.'/'.$pdir; } else { @@ -872,7 +872,7 @@ class pdf_aurore extends ModelePDFSupplierProposal // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') { - if (!empty($object->fk_bank) || !empty($conf->global->FACTURE_RIB_NUMBER)) { + if (!empty($object->fk_bank) || getDolGlobalInt('FACTURE_RIB_NUMBER')) { $bankid = (empty($object->fk_bank) ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_bank); $account = new Account($this->db); $account->fetch($bankid); diff --git a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php index 2e618b3ece3..cb4f76fa727 100644 --- a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php +++ b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/supplier_proposal/modules_supplier /** - * Class to manage customer order numbering rules Marbre + * Class to manage the Marbre numbering rule for Request for quotation */ class mod_supplier_proposal_marbre extends ModeleNumRefSupplierProposal { diff --git a/htdocs/core/modules/syslog/mod_syslog_file.php b/htdocs/core/modules/syslog/mod_syslog_file.php index e99e16ef649..265741f35c6 100644 --- a/htdocs/core/modules/syslog/mod_syslog_file.php +++ b/htdocs/core/modules/syslog/mod_syslog_file.php @@ -113,11 +113,15 @@ class mod_syslog_file extends LogHandler implements LogHandlerInterface } if (!empty($conf->global->SYSLOG_FILE_ONEPERSESSION)) { - if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 1) { // file depend on session key name (Note that session name is same for all users and is not a per user value) - $suffixinfilename .= '_'.session_name(); - } - if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 2) { // file depend on session value sor per user - $suffixinfilename .= '_'.session_name().'_'.$_SERVER["REMOTE_ADDR"]; + if (is_numeric($conf->global->SYSLOG_FILE_ONEPERSESSION)) { + if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 1) { // file depend on instance session key name (Note that session name is same for the instance so for all users and is not a per user value) + $suffixinfilename .= '_'.session_name(); + } + if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 2) { // file depend on instance session key name + ip so nearly per user + $suffixinfilename .= '_'.session_name().'_'.$_SERVER["REMOTE_ADDR"]; + } + } else { + $suffixinfilename .= '_'.$conf->global->SYSLOG_FILE_ONEPERSESSION; } } diff --git a/htdocs/core/modules/workstation/mod_workstation_standard.php b/htdocs/core/modules/workstation/mod_workstation_standard.php index 7bef21a8599..758783316e4 100644 --- a/htdocs/core/modules/workstation/mod_workstation_standard.php +++ b/htdocs/core/modules/workstation/mod_workstation_standard.php @@ -26,7 +26,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/modules/workstation/modules_workstation.php'; /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Workstation */ class mod_workstation_standard extends ModeleNumRefWorkstation { diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php index be91d7b28a5..24fddc2fda4 100644 --- a/htdocs/core/tpl/commonfields_add.tpl.php +++ b/htdocs/core/tpl/commonfields_add.tpl.php @@ -35,7 +35,7 @@ if (empty($conf) || !is_object($conf)) { $object->fields = dol_sort_array($object->fields, 'position'); foreach ($object->fields as $key => $val) { - // Discard if extrafield is a hidden field on form + // Discard if field is a hidden field on form if (abs($val['visible']) != 1 && abs($val['visible']) != 3) { continue; } diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 5f463e44846..9d9bd226fd6 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -41,7 +41,7 @@ $module = $object->element; // Special cases if ($module == 'propal') { - $permission = $user->rights->propale->creer; + $permission = $user->rights->propal->creer; } elseif ($module == 'fichinter') { $permission = $user->rights->ficheinter->creer; } elseif ($module == 'order_supplier') { diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php index 67d41199594..267ca6803c9 100644 --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php @@ -23,7 +23,7 @@ if (!empty($extrafieldsobjectkey) && !empty($extrafields->attributes[$extrafield $tmpkey = 'options_'.$key; - if (in_array($extrafields->attributes[$extrafieldsobjectkey]['type'][$key], array('date', 'datetime', 'timestamp')) && !is_numeric($obj->$tmpkey)) { + if (in_array($extrafields->attributes[$extrafieldsobjectkey]['type'][$key], array('date', 'datetime', 'timestamp')) && isset($obj->$tmpkey) && !is_numeric($obj->$tmpkey)) { $datenotinstring = $obj->$tmpkey; if (!is_numeric($obj->$tmpkey)) { // For backward compatibility $datenotinstring = $db->jdate($datenotinstring); diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index 2c4b2f5dea8..83bb06a8abb 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -269,7 +269,7 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) { // Show the link to "Root" if ($showroot) { - print '
    '; + print '
    '; // Show filemanager tree (will be filled by a call of ajax /ecm/tpl/enablefiletreeajax.tpl.php, later, that executes ajaxdirtree.php) print '
    '; diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 656b5b263aa..f09d7defeb1 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -78,6 +78,24 @@ if ($massaction == 'preaffecttag' && isModEnabled('category')) { } } +if ($massaction == 'presetsupervisor') { + $formquestion = array(); + + $valuefield = '
    '; + $valuefield .= img_picto('', 'user').' '; + $valuefield .= $form->select_dolusers('', 'supervisortoset', 1, $arrayofselected, 0, '', 0, $object->entity, 0, 0, '', 0, '', 'widthcentpercentminusx maxwidth300'); + $valuefield .= '
    '; + + $formquestion[] = array( + 'type' => 'other', + 'name' => 'supervisortoset', + 'label' => $langs->trans("Supervisor"), + 'value' => $valuefield + ); + + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmSetSupervisor"), $langs->trans("ConfirmSetSupervisorQuestion", count($toselect)), "setsupervisor", $formquestion, 1, 0, 200, 500, 1); +} + if ($massaction == 'presend') { $langs->load("mails"); @@ -285,7 +303,7 @@ if ($massaction == 'preapproveleave') { // Allow Pre-Mass-Action hook (eg for confirmation dialog) $parameters = array( - 'toselect' => $toselect, + 'toselect' => isset($toselect) ? $toselect : array(), 'uploaddir' => isset($uploaddir) ? $uploaddir : null ); diff --git a/htdocs/core/tpl/notes.tpl.php b/htdocs/core/tpl/notes.tpl.php index dfa9b0e4591..a81c95251f4 100644 --- a/htdocs/core/tpl/notes.tpl.php +++ b/htdocs/core/tpl/notes.tpl.php @@ -60,7 +60,7 @@ if (!empty($conf->global->MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES)) { // Special cases if ($module == 'propal') { - $permission = $user->rights->propale->creer; + $permission = $user->rights->propal->creer; } elseif ($module == 'supplier_proposal') { $permission = $user->rights->supplier_proposal->creer; } elseif ($module == 'fichinter') { @@ -96,11 +96,6 @@ if ($module == 'propal') { } //else dol_print_error('','Bad value '.$module.' for param module'); -if (isModEnabled('fckeditor') && !empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) { - $typeofdata = 'ckeditor:dolibarr_notes:100%:200::1:12:95%:0'; // Rem: This var is for all notes, not only thirdparties note. -} else { - $typeofdata = 'textarea:12:95%'; -} if (isModEnabled('fckeditor') && !empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC)) { $typeofdatapub = 'ckeditor:dolibarr_notes:100%:200::1:12:95%:0'; // Rem: This var is for all notes, not only thirdparties note. } else { diff --git a/htdocs/core/tpl/object_discounts.tpl.php b/htdocs/core/tpl/object_discounts.tpl.php index 4373f09fdb7..0770233c782 100644 --- a/htdocs/core/tpl/object_discounts.tpl.php +++ b/htdocs/core/tpl/object_discounts.tpl.php @@ -54,7 +54,7 @@ if ($fixedDiscount > 0) { print $langs->trans($translationKey, $fixedDiscount).'.'; } else { $translationKey = (!empty($discount_type)) ? 'HasNoRelativeDiscountFromSupplier' : 'CompanyHasNoRelativeDiscount'; - print ''.$langs->trans($translationKey).'.'; + print ''.$langs->trans($translationKey).'.'; } if ($isNewObject) { print ' ('.$addrelativediscount.')'; @@ -115,7 +115,7 @@ if ($absolute_creditnote > 0) { if ($absolute_discount <= 0 && $absolute_creditnote <= 0) { $translationKey = !empty($discount_type) ? 'HasNoAbsoluteDiscountFromSupplier' : 'CompanyHasNoAbsoluteDiscount'; - print '
    '.$langs->trans($translationKey).'.'; + print '
    '.$langs->trans($translationKey).'.'; if ($isInvoice && $object->statut == $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_CREDIT_NOTE && $object->type != $objclassname::TYPE_DEPOSIT) { print ' ('.$addabsolutediscount.')'; diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index bc48c28140e..381683cf62c 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -292,7 +292,9 @@ if ($nolinesbefore) { $alsoproductwithnosupplierprice = 0; } else { $ajaxoptions = array( - 'update' => array('remise_percent' => 'discount', 'price_ht' => 'price_ht') // html id tags that will be edited with each ajax json response key + // Disabled: This is useless because setting discount and price_ht after a selection is already managed + // by ths page itself with a .change on the combolist '#idprodfournprice' + //'update' => array('remise_percent' => 'discount', 'price_ht' => 'price_ht') // html id tags that will be edited with each ajax json response key ); $alsoproductwithnosupplierprice = 1; } @@ -411,13 +413,14 @@ if ($nolinesbefore) { $coldisplay++; ?>
    - "> + "> "> + + "> ">%">% %% %%%% '.$form->load_tva('tva_tx', GETPOSTISSET('tva_tx') ? GETPOST('tva_tx', 'alpha') : ($line->tva_tx.($line->vat_src_code ? (' ('.$line->vat_src_code.')') : '')), $seller, $buyer, 0, $line->info_bits, $line->product_type, false, 1).''; + print $form->load_tva('tva_tx', GETPOSTISSET('tva_tx') ? GETPOST('tva_tx', 'alpha') : ($line->tva_tx.($line->vat_src_code ? (' ('.$line->vat_src_code.')') : '')), $seller, $buyer, 0, $line->info_bits, $line->product_type, false, 1); + print '% - info_bits & 2) != 2) { - print '%'; + print '>%'; } else { ?>   %'.$margin_rate.'%'.$margin_rate.'%%%'.$mark_rate.'%'.$mark_rate.'%%%
      '.$langs->trans('Description').''.$langs->trans('Description').''.$langs->trans("SupplierRef").''.$langs->trans("SupplierRef").''; +print ''; if (!empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) || !empty($conf->global->FACTURE_LOCAL_TAX2_OPTION)) { print $langs->trans('Taxes'); } else { @@ -82,30 +82,30 @@ if (in_array($object->element, array('propal', 'commande', 'facture', 'supplier_ print ''; } } -print ''; +print ''.$langs->trans('PriceUHT').''.$langs->trans('PriceUHT').''.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).''.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).''.$langs->trans('PriceUTTC').''.$langs->trans('PriceUTTC').''.$langs->trans('Qty').''.$langs->trans('Qty').''.$langs->trans('Unit').''.$langs->trans('Unit').''; +print ''; print $langs->trans('ReductionShort'); if (in_array($object->element, array('propal', 'commande', 'facture')) && $object->status == $object::STATUS_DRAFT) { @@ -122,59 +122,59 @@ if (in_array($object->element, array('propal', 'commande', 'facture')) && $objec print ''; } } -print ''; +print ''.$langs->trans('Progress').''.$form->textwithpicto($langs->trans('TotalHT100Short'), $langs->trans('UnitPriceXQtyLessDiscount')).''.$langs->trans('Progress').''.$form->textwithpicto($langs->trans('TotalHT100Short'), $langs->trans('UnitPriceXQtyLessDiscount')).''.$langs->trans('BuyingPrice').''.$langs->trans('BuyingPrice').''.$langs->trans('CostPrice').''.$langs->trans('CostPrice').''.$langs->trans('MarginRate').''.$langs->trans('MarginRate').''.$langs->trans('MarkRate').''.$langs->trans('MarkRate').''.$langs->trans('TotalHTShort').''.$langs->trans('TotalHTShort').''.$langs->trans('TotalHTShortCurrency', $this->multicurrency_code).''.$langs->trans('TotalHTShortCurrency', $this->multicurrency_code).''.$langs->trans('TotalTTCShort').''.$langs->trans('TotalTTCShort').''; + print ''; print ''; print ''; - print ''; + print '
    "; print "
    '; diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index db48c0e7fce..8f4b32ae502 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2007-2022 Laurent Destailleur * Copyright (C) 2013 Florian Henry * * This program is free software; you can redistribute it and/or modify @@ -23,6 +23,7 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php"; +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; /** @@ -1408,21 +1409,30 @@ class Cronjob extends CommonObject if (empty($this->datenextrun)) { if (empty($this->datestart)) { - $this->datenextrun = $now + ($this->frequency * $this->unitfrequency); + if ($this->unitfrequency == 2678400) { + $this->datenextrun = dol_time_plus_duree($now, $this->frequency, 'm'); + } else { + $this->datenextrun = $now + ($this->frequency * $this->unitfrequency); + } } else { - $this->datenextrun = $this->datestart + ($this->frequency * $this->unitfrequency); + if ($this->unitfrequency == 2678400) { + $this->datenextrun = dol_time_plus_duree($this->datestart, $this->frequency, 'm'); + } else { + $this->datenextrun = $this->datestart + ($this->frequency * $this->unitfrequency); + } } } if ($this->datenextrun < $now && $this->frequency > 0 && $this->unitfrequency > 0) { // Loop until date is after future while ($this->datenextrun < $now) { - $this->datenextrun += ($this->frequency * $this->unitfrequency); - - // TODO For exact frequency (every month, every year, ...), use instead a dol_time_plus_duree($time, $duration_value, $duration_unit) + if ($this->unitfrequency == 2678400) { + $this->datenextrun = dol_time_plus_duree($this->datenextrun, $this->frequency, 'm'); + } else { + $this->datenextrun += ($this->frequency * $this->unitfrequency); + } } } else { - //$this->datenextrun=$this->datenextrun + ($this->frequency * $this->unitfrequency); dol_syslog(get_class($this)."::reprogram_jobs datenextrun is already in future, we do not change it"); } diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index 44152f0c68b..fb76767bf1e 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -451,8 +451,8 @@ class DataPolicyCron $this->db->begin(); foreach ($arrayofparameters as $key => $params) { - if ($conf->global->$key != '' && is_numeric($conf->global->$key) && (int) $conf->global->$key > 0) { - $sql = sprintf($params['sql'], (int) $conf->entity, (int) $conf->global->$key, (int) $conf->global->$key); + if (getDolGlobalInt($key) > 0) { + $sql = sprintf($params['sql'], (int) $conf->entity, (int) getDolGlobalInt($key), (int) getDolGlobalInt($key)); $resql = $this->db->query($sql); diff --git a/htdocs/delivery/card.php b/htdocs/delivery/card.php index 86dcc2a43fc..b98b75015ab 100644 --- a/htdocs/delivery/card.php +++ b/htdocs/delivery/card.php @@ -328,45 +328,33 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldval("RefCustomer", '', $expedition->ref_customer, $expedition, $user->rights->expedition->creer, 'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? ':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE : ''), '', null, null, '', 1); $morehtmlref .= '
    '.$langs->trans("RefDeliveryReceipt").' : '.$object->ref; // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$expedition->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$expedition->thirdparty->getNomUrl(1); // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment + $morehtmlref .= '
    '; + if (0) { // Do not change on shipment + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $expedition->id, $expedition->socid, $expedition->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($expedition->socid, $expedition->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$expedition->id, $expedition->socid, $expedition->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - $morehtmlref .= ' : '; if (!empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } $morehtmlref .= ''; - $morehtmlright = $langs->trans("StatusReceipt").' : '.$object->getLibStatut(6).'

    '; + $morehtmlstatus = $langs->trans("StatusReceipt").' : '.$object->getLibStatut(6).'

    '; - dol_banner_tab($expedition, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($expedition, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
    '; @@ -577,11 +565,11 @@ if ($action == 'create') { } $text .= ' '.$object->lines[$i]->product_ref.''; $text .= ' - '.$label; - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($object->lines[$i]->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($object->lines[$i]->description)); //print $description; print $form->textwithtooltip($text, $description, 3, '', '', $i); print_date_range($object->lines[$i]->date_start, $object->lines[$i]->date_end); - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($object->lines[$i]->description) && $object->lines[$i]->description != $object->lines[$i]->product_label) ? '
    '.dol_htmlentitiesbr($object->lines[$i]->description) : ''; } } else { diff --git a/htdocs/don/payment/card.php b/htdocs/don/payment/card.php index f5507e5e6c7..19f40bc984e 100644 --- a/htdocs/don/payment/card.php +++ b/htdocs/don/payment/card.php @@ -214,9 +214,9 @@ print '
    '; if (empty($action)) { if ($user->rights->don->supprimer) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("CantRemovePaymentWithOneInvoicePaid"), $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', 1); } } } diff --git a/htdocs/ecm/dir_add_card.php b/htdocs/ecm/dir_add_card.php index 01a1cfb63a9..3f20188db56 100644 --- a/htdocs/ecm/dir_add_card.php +++ b/htdocs/ecm/dir_add_card.php @@ -283,11 +283,10 @@ if (empty($action) || $action == 'delete_section') { // Actions buttons print '
    '; - if ($user->rights->ecm->setup) { - print ''.$langs->trans('Delete').''; - } else { - print ''.$langs->trans('Delete').''; - } + + // Delete + print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), '', $user->rights->ecm->setup); + print '
    '; } diff --git a/htdocs/ecm/dir_card.php b/htdocs/ecm/dir_card.php index c36cebfc80c..adfd405790f 100644 --- a/htdocs/ecm/dir_card.php +++ b/htdocs/ecm/dir_card.php @@ -464,31 +464,19 @@ if ($action != 'edit' && $action != 'delete' && $action != 'deletefile') { print ''.$langs->trans('ECMAddSection').''; } - //if (count($filearrayall) == 0) - //{ - if ($permtoadd) { - print ''.$langs->trans('Delete').''; - } else { - print ''.$langs->trans('Delete').''; - } - /*} - else - { - if (count($filearray) > 0) - print ''.$langs->trans('Delete').''; - else - print ''.$langs->trans('Delete').''; - }*/ + print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().($module ? '&module='.urlencode($module) : '').'§ion='.urlencode($section).($backtopage ? '&backtopage='.urlencode($backtopage) : ''), '', $permtoadd); + print '
    '; } + // Confirm remove file if ($action == 'deletefile') { print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.urlencode(GETPOST("section", 'alpha')).'&urlfile='.urlencode(GETPOST("urlfile")).($backtopage ? '&backtopage='.urlencode($backtopage) : ''), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile'); } -// Confirm remove file -if ($action == 'delete_dir') { +// Confirm remove dir +if ($action == 'delete' || $action == 'delete_dir') { $relativepathwithoutslash = preg_replace('/[\/]$/', '', $relativepath); //Form to close proposal (signed or not) diff --git a/htdocs/ecm/file_card.php b/htdocs/ecm/file_card.php index 1b572e44eb8..8202335fbc3 100644 --- a/htdocs/ecm/file_card.php +++ b/htdocs/ecm/file_card.php @@ -424,16 +424,9 @@ if ($action != 'edit') { if ($user->rights->ecm->setup) { print ''.$langs->trans('Edit').''; } - /* - if ($user->rights->ecm->setup) - { - print ''.$langs->trans('Delete').''; - } - else - { - print ''.$langs->trans('Delete').''; - } - */ + + //print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $user->rights->ecm->setup); + print '
    '; } diff --git a/htdocs/ecm/index_auto.php b/htdocs/ecm/index_auto.php index 9d9ff5a463f..625e69e626e 100644 --- a/htdocs/ecm/index_auto.php +++ b/htdocs/ecm/index_auto.php @@ -476,6 +476,7 @@ if (empty($action) || $action == 'file_manager' || preg_match('/refresh/i', $act $htmltooltip .= ''.$langs->trans("Description").': '.$val['desc']; print $form->textwithpicto('', $htmltooltip, 1, 'info'); print ''; + print ''; $nbofentries++; diff --git a/htdocs/ecm/tpl/enablefiletreeajax.tpl.php b/htdocs/ecm/tpl/enablefiletreeajax.tpl.php index 1f5e52e4577..a7e601bf053 100644 --- a/htdocs/ecm/tpl/enablefiletreeajax.tpl.php +++ b/htdocs/ecm/tpl/enablefiletreeajax.tpl.php @@ -24,6 +24,7 @@ if (empty($conf) || !is_object($conf)) { print "Error, template enablefiletreeajax.tpl.php can't be called as URL"; exit; } +// Must have set $module, $nameforformuserfile, $preopened ?> @@ -57,7 +58,7 @@ $(document).ready(function() { multiFolder: false }, // Called if we click on a file (not a dir) function(file) { - console.log("We click on a file"); + console.log("We click on a file "+file); $("#mesg").hide(); loadandshowpreview(file,0); }, @@ -65,7 +66,7 @@ $(document).ready(function() { function(elem) { id=elem.attr('id').substr(12); // We get id that is 'fmdirlia_id_xxx' (id we want is xxx) rel=elem.attr('rel') - console.log("We click on a dir, we call the ajaxdirtree.php with modulepart=, param="); + console.log("We click on a dir id="+id+", we call the ajaxdirtree.php with modulepart=, param="); console.log("We also save id and dir name into _section_id|dir (vars into form to attach new file in filemanager.tpl.php) with id="+id+" and rel="+rel); jQuery("#_section_dir").val(rel); jQuery("#_section_id").val(id); diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index f5da262e0c1..8d72666ad53 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -28,12 +28,12 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php'; require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT .'/comm/propal/class/propal.class.php'; // Customer Proposal -require_once DOL_DOCUMENT_ROOT .'/commande/class/commande.class.php'; // Customer Order +require_once DOL_DOCUMENT_ROOT .'/commande/class/commande.class.php'; // Sale Order require_once DOL_DOCUMENT_ROOT .'/compta/facture/class/facture.class.php'; // Customer Invoice require_once DOL_DOCUMENT_ROOT .'/contact/class/contact.class.php'; // Contact / Address require_once DOL_DOCUMENT_ROOT .'/expedition/class/expedition.class.php'; // Shipping / Delivery -require_once DOL_DOCUMENT_ROOT .'/fourn/class/fournisseur.commande.class.php'; // Supplier Order -require_once DOL_DOCUMENT_ROOT .'/fourn/class/fournisseur.facture.class.php'; // Supplier Invoice +require_once DOL_DOCUMENT_ROOT .'/fourn/class/fournisseur.commande.class.php'; // Purchase Order +require_once DOL_DOCUMENT_ROOT .'/fourn/class/fournisseur.facture.class.php'; // Purchase Invoice require_once DOL_DOCUMENT_ROOT .'/projet/class/project.class.php'; // Project require_once DOL_DOCUMENT_ROOT .'/reception/class/reception.class.php'; // Reception require_once DOL_DOCUMENT_ROOT .'/recruitment/class/recruitmentcandidature.class.php'; // Recruiting @@ -1766,7 +1766,7 @@ class EmailCollector extends CommonObject if ($reg[1] == 'pro') { // Customer Proposal $objectemail = new Propal($this->db); } - if ($reg[1] == 'ord') { // Customer Order + if ($reg[1] == 'ord') { // Sale Order $objectemail = new Commande($this->db); } if ($reg[1] == 'shi') { // Shipment diff --git a/htdocs/eventorganization/class/conferenceorboothattendee.class.php b/htdocs/eventorganization/class/conferenceorboothattendee.class.php index 222a0c78946..909758ca3f2 100644 --- a/htdocs/eventorganization/class/conferenceorboothattendee.class.php +++ b/htdocs/eventorganization/class/conferenceorboothattendee.class.php @@ -103,12 +103,13 @@ class ConferenceOrBoothAttendee extends CommonObject public $fields = array( 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>2, 'index'=>1, 'comment'=>"Reference of object"), - 'fk_actioncomm' => array('type'=>'integer:ActionComm:comm/action/class/actioncomm.class.php:1', 'label'=>'ConferenceOrBooth', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>0, 'index'=>1, 'picto'=>'agenda'), + 'fk_actioncomm' => array('type'=>'integer:ActionComm:comm/action/class/actioncomm.class.php:1', 'label'=>'ConferenceOrBooth', 'enabled'=>'1', 'position'=>15, 'notnull'=>0, 'visible'=>0, 'index'=>1, 'picto'=>'agenda'), 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>"isModEnabled('project')", 'position'=>20, 'notnull'=>1, 'visible'=>0, 'index'=>1, 'picto'=>'project', 'css'=>'tdoverflowmax150 maxwidth500'), 'email' => array('type'=>'mail', 'label'=>'EmailAttendee', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'autofocusoncreate'=>1, 'searchall'=>1), 'firstname' => array('type'=>'varchar(100)', 'label'=>'Firstname', 'enabled'=>'1', 'position'=>31, 'notnull'=>0, 'visible'=>1, 'index'=>1, 'searchall'=>1), 'lastname' => array('type'=>'varchar(100)', 'label'=>'Lastname', 'enabled'=>'1', 'position'=>32, 'notnull'=>0, 'visible'=>1, 'index'=>1, 'searchall'=>1), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:status = 1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'$conf->societe->enabled', 'position'=>40, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'help'=>"OrganizationEventLinkToThirdParty", 'picto'=>'company', 'css'=>'tdoverflowmax150 maxwidth500'), + 'email_company' => array('type'=>'mail', 'label'=>'EmailCompany', 'enabled'=>'1', 'position'=>41, 'notnull'=>0, 'visible'=>-2, 'searchall'=>1), 'date_subscription' => array('type'=>'datetime', 'label'=>'DateOfRegistration', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1, 'showoncombobox'=>'1',), 'fk_invoice' => array('type'=>'integer:Facture:compta/facture/class/facture.class.php', 'label'=>'Invoice', 'enabled'=>'$conf->facture->enabled', 'position'=>57, 'notnull'=>0, 'visible'=>-1, 'index'=>0, 'picto'=>'bill', 'css'=>'tdoverflowmax150 maxwidth500'), 'amount' => array('type'=>'price', 'label'=>'AmountPaid', 'enabled'=>'1', 'position'=>57, 'notnull'=>0, 'visible'=>1, 'default'=>'null', 'isameasure'=>'1', 'help'=>"AmountOfSubscriptionPaid",), @@ -125,11 +126,13 @@ class ConferenceOrBoothAttendee extends CommonObject ); public $rowid; public $ref; - public $fk_soc; public $fk_actioncomm; + public $fk_project; public $email; public $firstname; public $lastname; + public $fk_soc; + public $email_company; public $date_subscription; public $fk_invoice; public $amount; diff --git a/htdocs/eventorganization/conferenceorbooth_card.php b/htdocs/eventorganization/conferenceorbooth_card.php index 46e41dec78e..b6932c2cf09 100644 --- a/htdocs/eventorganization/conferenceorbooth_card.php +++ b/htdocs/eventorganization/conferenceorbooth_card.php @@ -203,7 +203,7 @@ if (!empty($withproject)) { $morehtmlref .= $projectstatic->title; // Thirdparty if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; diff --git a/htdocs/eventorganization/conferenceorbooth_contact.php b/htdocs/eventorganization/conferenceorbooth_contact.php index 2c304bd8562..7810114aec1 100644 --- a/htdocs/eventorganization/conferenceorbooth_contact.php +++ b/htdocs/eventorganization/conferenceorbooth_contact.php @@ -187,7 +187,7 @@ if (!empty($withproject)) { $morehtmlref .= $projectstatic->title; // Thirdparty if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; diff --git a/htdocs/eventorganization/conferenceorbooth_document.php b/htdocs/eventorganization/conferenceorbooth_document.php index 56b34f68b03..78f74ded42d 100644 --- a/htdocs/eventorganization/conferenceorbooth_document.php +++ b/htdocs/eventorganization/conferenceorbooth_document.php @@ -160,7 +160,7 @@ if (!empty($withproject)) { $morehtmlref .= $projectstatic->title; // Thirdparty if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; diff --git a/htdocs/eventorganization/conferenceorbooth_list.php b/htdocs/eventorganization/conferenceorbooth_list.php index 520435c9cdc..f69d86c62e7 100644 --- a/htdocs/eventorganization/conferenceorbooth_list.php +++ b/htdocs/eventorganization/conferenceorbooth_list.php @@ -287,7 +287,7 @@ if ($projectid > 0) { $morehtmlref .= $project->title; // Thirdparty if (isset($project->thirdparty->id) && $project->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$project->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$project->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -348,8 +348,15 @@ if ($projectid > 0) { } print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($project->budget_amount, '')) { + print ''.price($project->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").' ('.$langs->trans("Project").')'; $start = dol_print_date($project->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($project->date_end, 'day'); @@ -360,13 +367,23 @@ if ($projectid > 0) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($project->budget_amount, '')) { - print price($project->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + // Date start - end of event + print '
    '.$langs->trans("Dates").' ('.$langs->trans("Event").')'; + $start = dol_print_date($project->date_start_event, 'day'); + print ($start ? $start : '?'); + $end = dol_print_date($project->date_end_event, 'day'); + print ' - '; + print ($end ? $end : '?'); + if ($object->hasDelay()) { + print img_warning("Late"); } print '
    '.$langs->trans("Location").''; + print $project->location; + print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print ''.price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").' ('.$langs->trans("Project").')'; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -486,13 +493,23 @@ if ($projectstatic->id > 0 || $confOrBooth > 0) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + // Date start - end of event + print '
    '.$langs->trans("Dates").' ('.$langs->trans("Event").')'; + $start = dol_print_date($projectstatic->date_start_event, 'day'); + print ($start ? $start : '?'); + $end = dol_print_date($projectstatic->date_end_event, 'day'); + print ' - '; + print ($end ? $end : '?'); + if ($projectstatic->hasDelay()) { + print img_warning("Late"); } print '
    '.$langs->trans("Location").''; + print $projectstatic->location; + print '
    '; + print '
    '; // Type print ''; print ''; - $form_permission = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate && ($object->getSommePaiement() <= 0); - $form_permission2 = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate; + //$form_permission = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate && ($object->getSommePaiement() <= 0); + $form_permission = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate; // Date print '\n"; } } + +/** + * Migrate Rank into contract line + * + * @return void + */ +function migrate_contractdet_rank() +{ + + global $db, $langs; + + $error = 0; + $resultstring = ''; + + $db->begin(); + print ''; + + if (!$resultstring) { + print '\n"; + } +} diff --git a/htdocs/knowledgemanagement/class/knowledgerecord.class.php b/htdocs/knowledgemanagement/class/knowledgerecord.class.php index c20fa91c621..fee18df2478 100644 --- a/htdocs/knowledgemanagement/class/knowledgerecord.class.php +++ b/htdocs/knowledgemanagement/class/knowledgerecord.class.php @@ -105,7 +105,6 @@ class KnowledgeRecord extends CommonObject 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>20, 'index'=>1), 'question' => array('type'=>'text', 'label'=>'Question', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'csslist'=>'tdoverflowmax300', 'copytoclipboard'=>1, 'tdcss'=>'titlefieldcreate nowraponall'), 'lang' => array('type'=>'varchar(6)', 'label'=>'Language', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>1, 'tdcss'=>'titlefieldcreate nowraponall', "csslist"=>"tdoverflowmax100"), - 'answer' => array('type'=>'html', 'label'=>'Solution', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>3, 'csslist'=>'tdoverflowmax300', 'copytoclipboard'=>1, 'tdcss'=>'titlefieldcreate nowraponall'), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>2,), 'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,), @@ -115,7 +114,8 @@ class KnowledgeRecord extends CommonObject 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), //'url' => array('type'=>'varchar(255)', 'label'=>'URL', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>-1, 'csslist'=>'tdoverflow200', 'help'=>'UrlForInfoPage'), - 'fk_c_ticket_category' => array('type'=>'integer:CTicketCategory:ticket/class/cticketcategory.class.php:0:(t.active:=:1):pos', 'label'=>'SuggestedForTicketsInGroup', 'enabled'=>'$conf->ticket->enabled', 'position'=>512, 'notnull'=>0, 'visible'=>-1, 'help'=>'YouCanLinkArticleToATicketCategory', 'csslist'=>'minwidth200 tdoverflowmax250'), + 'fk_c_ticket_category' => array('type'=>'integer:CTicketCategory:ticket/class/cticketcategory.class.php:0:(t.active:=:1):pos', 'label'=>'SuggestedForTicketsInGroup', 'enabled'=>'isModEnabled("ticket")', 'position'=>520, 'notnull'=>0, 'visible'=>-1, 'help'=>'YouCanLinkArticleToATicketCategory', 'csslist'=>'minwidth200 tdoverflowmax250'), + 'answer' => array('type'=>'html', 'label'=>'Solution', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>3, 'csslist'=>'tdoverflowmax300', 'copytoclipboard'=>1, 'tdcss'=>'titlefieldcreate nowraponall'), 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>5, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '9'=>'Obsolete'),), ); public $rowid; diff --git a/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php b/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php index ba5a3c3b391..1e5f69aaa93 100644 --- a/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php +++ b/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php @@ -26,7 +26,7 @@ dol_include_once('/knowledgemanagement/core/modules/knowledgemanagement/modules_ /** - * Class to manage customer order numbering rules standard + * Class to manage the knowledgerecord numbering rules standard */ class mod_knowledgerecord_standard extends ModeleNumRefKnowledgeRecord { diff --git a/htdocs/knowledgemanagement/knowledgerecord_card.php b/htdocs/knowledgemanagement/knowledgerecord_card.php index 18f36c192c2..c28bc9e1c9c 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_card.php +++ b/htdocs/knowledgemanagement/knowledgerecord_card.php @@ -118,7 +118,7 @@ if (empty($reshook)) { $triggermodname = 'KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_MODIFY'; // Name of trigger action code to execute when we modify record - // Upadate / add for lang + // Update / add for lang if (($action == 'update' || $action == 'add') && !empty($permissiontoadd)) { $object->lang = (GETPOSTISSET('langkm') ? GETPOST('langkm', 'aZ09') : $object->lang); } @@ -182,12 +182,14 @@ if ($action == 'create') { print ''; } - print dol_get_fiche_head(array(), ''); + print dol_get_fiche_head(array(), '', '', -3); print '
    '.$langs->trans('Type').''; @@ -3002,8 +2991,8 @@ if ($action == 'create') { print ''.$form->editfieldval("Label", 'label', $object->label, $object, $usercancreate).'
    '; @@ -3015,11 +3004,11 @@ if ($action == 'create') { // Default terms of the settlement $langs->load('bills'); print '
    '; - print '
    '; + print ''; + print ''; } print '
    '; print $langs->trans('PaymentConditions'); print ''; if ($action != 'editconditions' && $form_permission) { - print 'id.'">'.img_edit($langs->trans('SetConditions'), 1).'id.'">'.img_edit($langs->trans('SetConditions'), 1).'
    '; print '
    '; @@ -3033,9 +3022,9 @@ if ($action == 'create') { // Due date print '
    '; - print $form->editfieldkey("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission2, 'datepicker'); + print $form->editfieldkey("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission, 'datepicker'); print ''; - print $form->editfieldval("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission2, 'datepicker'); + print $form->editfieldval("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission, 'datepicker'); if ($action != 'editdate_lim_reglement' && $object->hasDelay()) { print img_warning($langs->trans('Late')); } @@ -3044,10 +3033,10 @@ if ($action == 'create') { // Mode of payment $langs->load('bills'); print '
    '; - print ''; print ''; // Note -print ''; +print ''; //print ''; // No width to allow autodim diff --git a/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php b/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php index 60bb56ff173..81e3f9f2155 100644 --- a/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php +++ b/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php @@ -43,7 +43,7 @@ $value_private .= "\n"; /* // Special cases if ($module == 'propal') { -$permission = $user->rights->propale->creer; +$permission = $user->rights->propal->creer; } elseif ($module == 'supplier_proposal') { $permission = $user->rights->supplier_proposal->creer; } elseif ($module == 'fichinter') { diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php index f1bddce44e4..8e00473bca2 100644 --- a/htdocs/hrm/establishment/card.php +++ b/htdocs/hrm/establishment/card.php @@ -420,8 +420,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea * Action bar */ print '
    '; + + // Modify print ''.$langs->trans('Modify').''; - print ''.$langs->trans('Delete').''; + + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); + print '
    '; } diff --git a/htdocs/hrm/evaluation_agenda.php b/htdocs/hrm/evaluation_agenda.php index a6c6c2a9406..732b91d756f 100644 --- a/htdocs/hrm/evaluation_agenda.php +++ b/htdocs/hrm/evaluation_agenda.php @@ -158,7 +158,7 @@ if ($object->id > 0) { $morehtmlref .= '
    '.$langs->trans('Employee').' : '.$u_position->getNomUrl(1); $job = new Job($db); $job->fetch($object->fk_job); - $morehtmlref .= '
    '.$langs->trans('Job').' : '.$job->getNomUrl(1); + $morehtmlref .= '
    '.$langs->trans('JobPosition').' : '.$job->getNomUrl(1); $morehtmlref .= ''; diff --git a/htdocs/hrm/evaluation_card.php b/htdocs/hrm/evaluation_card.php index 9f9b937a467..08854e2d88e 100644 --- a/htdocs/hrm/evaluation_card.php +++ b/htdocs/hrm/evaluation_card.php @@ -94,7 +94,9 @@ $upload_dir = $conf->hrm->multidir_output[isset($object->entity) ? $object->enti //if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); //restrictedArea($user, $object->element, $object->id, $object->table_element, '', 'fk_soc', 'rowid', $isdraft); -if (empty($conf->hrm->enabled)) accessforbidden(); +if (!isModEnabled("hrm")) { + accessforbidden(); +} if (!$permissiontoread || ($action === 'create' && !$permissiontoadd)) accessforbidden(); @@ -283,11 +285,7 @@ if ($action == 'create') { print dol_get_fiche_end(); - print '
    '; - print ''; - print '  '; - print ''; // Cancel for create does not post form if we don't know the backtopage - print '
    '; + print $form->buttonsSaveCancel("Create", "Cancel"); print ''; } @@ -321,9 +319,7 @@ if (($id || $ref) && $action == 'edit') { print dol_get_fiche_end(); - print '
    '; - print '   '; - print '
    '; + print $form->buttonsSaveCancel(); print ''; } @@ -381,8 +377,10 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } - // Confirmation of action xxxx + // Confirmation of action xxxx (You can use it for xxx = 'close', xxx = 'reopen', ...) if ($action == 'xxx') { + $text = $langs->trans('ConfirmActionMyObject', $object->ref); + $formquestion = array(); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220); @@ -412,7 +410,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $morehtmlref .= '
    '.$langs->trans('Employee').' : '.$u_position->getNomUrl(1); $job = new Job($db); $job->fetch($object->fk_job); - $morehtmlref .= '
    '.$langs->trans('Job').' : '.$job->getNomUrl(1); + $morehtmlref .= '
    '.$langs->trans('JobPosition').' : '.$job->getNomUrl(1); $morehtmlref .= ''; @@ -446,11 +444,16 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea * Lines */ - if (!empty($object->table_element_line)) { - if ($object->status == Evaluation::STATUS_DRAFT) { - $result = $object->getLinesArray(); + if (!empty($object->table_element_line) && $object->status == Evaluation::STATUS_DRAFT) { + // Show object lines + $result = $object->getLinesArray(); + if ($result < 0) { + dol_print_error($db, $object->error, $object->errors); + } - print ' + print '
    '; + + print ' @@ -458,46 +461,44 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea '; - if (!empty($conf->use_javascript_ajax) && $object->status == 0) { - include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'; - } - - print '
    '; - /*if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { - print '
    '; + print ''; - if ($action != 'editmode' && $form_permission2) { + if ($action != 'editmode' && $form_permission) { print ''; } print '
    '; print $langs->trans('PaymentMode'); print 'id.'">'.img_edit($langs->trans('SetMode'), 1).'
    '; @@ -3154,7 +3143,7 @@ if ($action == 'create') { if (isModEnabled('intracommreport')) { $langs->loadLangs(array("intracommreport")); print '
    '; - print ''; +} + +$db->free($resql); + +$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print "
    '; + print ''; if ($action != 'editmode' && ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer)) { @@ -3300,7 +3289,7 @@ if ($action == 'create') { $i = 0; print '
    '; - print '
    '; print $langs->trans('IntracommReportTransportMode'); print '
    '; + print '
    '; print ''; print ''; print ''; @@ -3326,12 +3315,13 @@ if ($action == 'create') { $paymentstatic->type_label = $objp->payment_type; print ''; - print ''; print ''; - print ''; if (isModEnabled("banque")) { $bankaccountstatic->id = $objp->baid; @@ -3783,21 +3773,26 @@ if ($action == 'create') { // Delete $isErasable = $object->is_erasable(); - if ($action != 'confirm_edit' && ($user->rights->fournisseur->facture->supprimer || ($usercancreate && $isErasable == 1))) { // isErasable = 1 means draft with temporary ref (draft can always be deleted with no need of permissions) - //var_dump($isErasable); + if ($action != 'confirm_edit' && ($usercandelete || ($usercancreate && $isErasable == 1))) { // isErasable = 1 means draft with temporary ref (draft can always be deleted with no need of permissions) + $enableDelete = false; + $htmltooltip = ''; + $params = (empty($conf->use_javascript_ajax) ? array() : array('attr' => array('class' => 'reposition'))); + //var_dump($isErasable); var_dump($params); if ($isErasable == -4) { - print ''.$langs->trans('Delete').''; + $htmltooltip = $langs->trans("DisabledBecausePayments"); } elseif ($isErasable == -3) { // Should never happen with supplier invoice - print ''.$langs->trans('Delete').''; + $htmltooltip = $langs->trans("DisabledBecauseNotLastSituationInvoice"); } elseif ($isErasable == -2) { // Should never happen with supplier invoice - print ''.$langs->trans('Delete').''; + $htmltooltip = $langs->trans("DisabledBecauseNotLastInvoice"); } elseif ($isErasable == -1) { - print ''.$langs->trans('Delete').''; + $htmltooltip = $langs->trans("DisabledBecauseDispatchedInBookkeeping"); } elseif ($isErasable <= 0) { // Any other cases - print ''.$langs->trans('Delete').''; + $htmltooltip = $langs->trans("DisabledBecauseNotErasable"); } else { - print ''.$langs->trans('Delete').''; + $enableDelete = true; + $htmltooltip = ''; } + print dolGetButtonAction($htmltooltip, $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), $object->id, $enableDelete, $params); } print ''; diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index f9f7a754b8f..542b37db092 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -51,6 +51,9 @@ $hookmanager->initHooks(array('invoicesuppliercardcontact')); $object = new FactureFournisseur($db); +$usercancreate = ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer); +$permissiontoadd = $usercancreate; + /* * Ajout d'un nouveau contact @@ -133,40 +136,28 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index fa08b721370..03012acbcaf 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -112,40 +112,28 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index a4322c2448e..9223d47b791 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -49,6 +49,9 @@ $hookmanager->initHooks(array('invoicesuppliercardinfo')); $object = new FactureFournisseur($db); +$usercancreate = ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer); +$permissiontoadd = $usercancreate; + /* * View @@ -75,40 +78,28 @@ $morehtmlref = '
    '; $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty -$morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); +$morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->facture->creer) { + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 6e006704a83..1d7149cdb10 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -72,7 +72,6 @@ $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search $search_label = GETPOST("search_label", "alpha"); $search_amount_no_tax = GETPOST("search_amount_no_tax", "alpha"); $search_amount_all_tax = GETPOST("search_amount_all_tax", "alpha"); -$search_product_category = GETPOST('search_product_category', 'int'); $search_ref = GETPOST('sf_ref') ?GETPOST('sf_ref', 'alpha') : GETPOST('search_ref', 'alpha'); $search_refsupplier = GETPOST('search_refsupplier', 'alpha'); $search_type = GETPOST('search_type', 'int'); @@ -116,10 +115,10 @@ $search_datelimit_endmonth = GETPOST('search_datelimit_endmonth', 'int'); $search_datelimit_endyear = GETPOST('search_datelimit_endyear', 'int'); $search_datelimit_start = dol_mktime(0, 0, 0, $search_datelimit_startmonth, $search_datelimit_startday, $search_datelimit_startyear); $search_datelimit_end = dol_mktime(23, 59, 59, $search_datelimit_endmonth, $search_datelimit_endday, $search_datelimit_endyear); -$toselect = GETPOST('toselect', 'array'); $search_btn = GETPOST('button_search', 'alpha'); $search_remove_btn = GETPOST('button_removefilter', 'alpha'); $search_categ_sup = trim(GETPOST("search_categ_sup", 'int')); +$search_product_category = GETPOST('search_product_category', 'int'); $option = GETPOST('search_option'); if ($option == 'late') { @@ -162,9 +161,9 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen $fieldstosearchall = array( 'f.ref'=>'Ref', 'f.ref_supplier'=>'RefSupplier', - 'pd.description'=>'Description', - 's.nom'=>"ThirdParty", 'f.note_public'=>'NotePublic', + 's.nom'=>"ThirdParty", + 'pd.description'=>'Description', ); if (empty($user->socid)) { $fieldstosearchall["f.note_private"] = "NotePrivate"; @@ -296,10 +295,10 @@ if (empty($reshook)) { $search_datelimit_end = ''; $toselect = array(); $search_array_options = array(); + $search_categ_sup = 0; $filter = ''; $option = ''; $socid = ""; - $search_categ_sup = 0; } // Mass actions @@ -421,9 +420,6 @@ $sql .= " state.code_departement as state_code, state.nom as state_name,"; $sql .= " country.code as country_code,"; $sql .= " p.rowid as project_id, p.ref as project_ref, p.title as project_label,"; $sql .= ' u.login, u.lastname, u.firstname, u.email as user_email, u.statut as user_statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender'; -if ($search_categ_sup && $search_categ_sup != '-1') { - $sql .= ", cs.fk_categorie, cs.fk_soc"; -} // We need dynamount_payed to be able to sort on status (value is surely wrong because we can count several lines several times due to other left join or link with contacts. But what we need is just 0 or > 0) // TODO Better solution to be able to sort on already payed or remain to pay is to store amount_payed in a denormalized field. if (!$search_all) { @@ -437,16 +433,12 @@ if (!empty($extrafields->attributes[$object->table_element]['label'])) { } // Add fields from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; -if (!empty($search_categ_sup) && $search_categ_supplier != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_fournisseur as cs ON s.rowid = cs.fk_soc"; -} - $sql .= ', '.MAIN_DB_PREFIX.'facture_fourn as f'; if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (f.rowid = ef.fk_object)"; @@ -457,9 +449,6 @@ if (!$search_all) { if ($search_all || $search_product_category > 0) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn_det as pd ON f.rowid=pd.fk_facture_fourn'; } -if ($search_product_category > 0) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=pd.fk_product'; -} $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user AS u ON f.fk_user_author = u.rowid'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = f.fk_projet"; // We'll need this table joined to the select in order to filter by sale @@ -479,9 +468,6 @@ $sql .= ' AND f.entity IN ('.getEntity('facture_fourn').')'; if (empty($user->rights->societe->client->voir) && !$socid) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } -if ($search_product_category > 0) { - $sql .= " AND cp.fk_categorie = ".((int) $search_product_category); -} if ($socid > 0) { $sql .= ' AND s.rowid = '.((int) $socid); } @@ -598,11 +584,57 @@ if ($option == 'late') { if ($search_label) { $sql .= natural_search('f.libelle', $search_label); } -if ($search_categ_sup > 0) { - $sql .= " AND cs.fk_categorie = ".((int) $search_categ_sup); +$searchCategorySupplierList = $search_categ_sup ? array($search_categ_sup) : array(); +$searchCategorySupplierOperator = 0; +// Search for tag/category ($searchCategorySupplierList is an array of ID) +if (!empty($searchCategorySupplierList)) { + $searchCategorySupplierSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategorySupplierList as $searchCategorySupplier) { + if (intval($searchCategorySupplier) == -2) { + $searchCategorySupplierSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategorySupplier) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategorySupplier); + } + } + if ($listofcategoryid) { + $searchCategorySupplierSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategorySupplierOperator == 1) { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategorySupplierSqlList).")"; + } + } else { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategorySupplierSqlList).")"; + } + } } -if ($search_categ_sup == -2) { - $sql .= " AND cs.fk_categorie IS NULL"; +// Search for tag/category ($searchCategoryProductList is an array of ID) +$searchCategoryProductList = $search_product_category ? array($search_product_category) : array(); +$searchCategorySupplierOperator = 0; +if (!empty($searchCategoryProductList)) { + $searchCategoryProductSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryProductList as $searchCategoryProduct) { + if (intval($searchCategoryProduct) == -2) { + $searchCategoryProductSqlList[] = "NOT EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product)"; + } elseif (intval($searchCategoryProduct) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProduct); + } + } + if ($listofcategoryid) { + $searchCategoryProductSqlList[] = " EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryProductOperator == 1) { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + } + } else { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; + } + } } if ($search_status != '' && $search_status >= 0) { $sql .= " AND f.fk_statut = ".((int) $search_status); @@ -624,7 +656,7 @@ if ($search_user > 0) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if (!$search_all) { @@ -640,9 +672,6 @@ if (!$search_all) { $sql .= ' country.code,'; $sql .= " p.rowid, p.ref, p.title,"; $sql .= " u.login, u.lastname, u.firstname, u.email, u.statut, u.entity, u.photo, u.office_phone, u.office_fax, u.user_mobile, u.job, u.gender"; - if ($search_categ_sup && $search_categ_sup != '-1') { - $sql .= ", cs.fk_categorie, cs.fk_soc"; - } if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { //prevent error with sql_mode=only_full_group_by @@ -651,7 +680,7 @@ if (!$search_all) { } // Add GroupBy from hooks $parameters = array('all' => $search_all, 'fieldstosearchall' => $fieldstosearchall); - $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook + $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; } else { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); @@ -659,7 +688,7 @@ if (!$search_all) { // Add HAVING from hooks $parameters = array(); -$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= empty($hookmanager->resPrint) ? "" : " HAVING 1=1 ".$hookmanager->resPrint; $sql .= $db->order($sortfield, $sortorder); @@ -678,1105 +707,1116 @@ $sql .= $db->plimit($limit + 1, $offset); //print $sql; $resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); +if (!$resql) { + dol_print_error($db); +} - $arrayofselected = is_array($toselect) ? $toselect : array(); +$num = $db->num_rows($resql); - if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) { - $obj = $db->fetch_object($resql); - $id = $obj->facid; +$arrayofselected = is_array($toselect) ? $toselect : array(); - header("Location: ".DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$id); - exit; - } +if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) { + $obj = $db->fetch_object($resql); + $id = $obj->facid; - llxHeader('', $langs->trans("SuppliersInvoices"), 'EN:Suppliers_Invoices|FR:FactureFournisseur|ES:Facturas_de_proveedores'); + header("Location: ".DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$id); + exit; +} - if ($socid) { - $soc = new Societe($db); - $soc->fetch($socid); - if (empty($search_company)) { - $search_company = $soc->name; - $search_company_alias = $soc->name_alias; - } - } +llxHeader('', $langs->trans("SuppliersInvoices"), 'EN:Suppliers_Invoices|FR:FactureFournisseur|ES:Facturas_de_proveedores'); - $param = '&socid='.$socid; - if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { - $param .= '&contextpage='.urlencode($contextpage); - } - if ($limit > 0 && $limit != $conf->liste_limit) { - $param .= '&limit='.urlencode($limit); - } - if ($search_all) { - $param .= '&search_all='.urlencode($search_all); - } - if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); - } - if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); - } - if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); - } - if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); - } - if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); - } - if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); - } - if ($search_datelimit_startday) { - $param .= '&search_datelimit_startday='.urlencode($search_datelimit_startday); - } - if ($search_datelimit_startmonth) { - $param .= '&search_datelimit_startmonth='.urlencode($search_datelimit_startmonth); - } - if ($search_datelimit_startyear) { - $param .= '&search_datelimit_startyear='.urlencode($search_datelimit_startyear); - } - if ($search_datelimit_endday) { - $param .= '&search_datelimit_endday='.urlencode($search_datelimit_endday); - } - if ($search_datelimit_endmonth) { - $param .= '&search_datelimit_endmonth='.urlencode($search_datelimit_endmonth); - } - if ($search_datelimit_endyear) { - $param .= '&search_datelimit_endyear='.urlencode($search_datelimit_endyear); - } - if ($search_ref) { - $param .= '&search_ref='.urlencode($search_ref); - } - if ($search_refsupplier) { - $param .= '&search_refsupplier='.urlencode($search_refsupplier); - } - if ($search_type != '') { - $param .= '&search_type='.urlencode($search_type); - } - if ($search_label) { - $param .= '&search_label='.urlencode($search_label); - } - if ($search_company) { - $param .= '&search_company='.urlencode($search_company); - } - if ($search_company_alias) { - $param .= '&search_company_alias='.urlencode($search_company_alias); - } - if ($search_login) { - $param .= '&search_login='.urlencode($search_login); - } - if ($search_montant_ht != '') { - $param .= '&search_montant_ht='.urlencode($search_montant_ht); - } - if ($search_montant_vat != '') { - $param .= '&search_montant_vat='.urlencode($search_montant_vat); - } - if ($search_montant_localtax1 != '') { - $param .= '&search_montant_localtax1='.urlencode($search_montant_localtax1); - } - if ($search_montant_localtax2 != '') { - $param .= '&search_montant_localtax2='.urlencode($search_montant_localtax2); - } - if ($search_montant_ttc != '') { - $param .= '&search_montant_ttc='.urlencode($search_montant_ttc); - } - if ($search_multicurrency_code != '') { - $param .= '&search_multicurrency_code='.urlencode($search_multicurrency_code); - } - if ($search_multicurrency_tx != '') { - $param .= '&search_multicurrency_tx='.urlencode($search_multicurrency_tx); - } - if ($search_multicurrency_montant_ht != '') { - $param .= '&search_multicurrency_montant_ht='.urlencode($search_multicurrency_montant_ht); - } - if ($search_multicurrency_montant_vat != '') { - $param .= '&search_multicurrency_montant_vat='.urlencode($search_multicurrency_montant_vat); - } - if ($search_multicurrency_montant_ttc != '') { - $param .= '&search_multicurrency_montant_ttc='.urlencode($search_multicurrency_montant_ttc); - } - if ($search_amount_no_tax) { - $param .= '&search_amount_no_tax='.urlencode($search_amount_no_tax); - } - if ($search_amount_all_tax) { - $param .= '&search_amount_all_tax='.urlencode($search_amount_all_tax); - } - if ($search_status >= 0) { - $param .= "&search_status=".urlencode($search_status); - } - if ($show_files) { - $param .= '&show_files='.urlencode($show_files); - } - if ($option) { - $param .= "&search_option=".urlencode($option); - } - if ($optioncss != '') { - $param .= '&optioncss='.urlencode($optioncss); - } - if ($search_categ_sup > 0) { - $param .= '&search_categ_sup='.urlencode($search_categ_sup); - } - if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) { - $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); +if ($socid) { + $soc = new Societe($db); + $soc->fetch($socid); + if (empty($search_company)) { + $search_company = $soc->name; + $search_company_alias = $soc->name_alias; } +} - // Add $param from extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; - // Add $param from hooks - $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook - $param .= $hookmanager->resPrint; +$param = '&socid='.$socid; +if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { + $param .= '&contextpage='.urlencode($contextpage); +} +if ($limit > 0 && $limit != $conf->liste_limit) { + $param .= '&limit='.urlencode($limit); +} +if ($search_all) { + $param .= '&search_all='.urlencode($search_all); +} +if ($search_date_startday) { + $param .= '&search_date_startday='.urlencode($search_date_startday); +} +if ($search_date_startmonth) { + $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); +} +if ($search_date_startyear) { + $param .= '&search_date_startyear='.urlencode($search_date_startyear); +} +if ($search_date_endday) { + $param .= '&search_date_endday='.urlencode($search_date_endday); +} +if ($search_date_endmonth) { + $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); +} +if ($search_date_endyear) { + $param .= '&search_date_endyear='.urlencode($search_date_endyear); +} +if ($search_datelimit_startday) { + $param .= '&search_datelimit_startday='.urlencode($search_datelimit_startday); +} +if ($search_datelimit_startmonth) { + $param .= '&search_datelimit_startmonth='.urlencode($search_datelimit_startmonth); +} +if ($search_datelimit_startyear) { + $param .= '&search_datelimit_startyear='.urlencode($search_datelimit_startyear); +} +if ($search_datelimit_endday) { + $param .= '&search_datelimit_endday='.urlencode($search_datelimit_endday); +} +if ($search_datelimit_endmonth) { + $param .= '&search_datelimit_endmonth='.urlencode($search_datelimit_endmonth); +} +if ($search_datelimit_endyear) { + $param .= '&search_datelimit_endyear='.urlencode($search_datelimit_endyear); +} +if ($search_ref) { + $param .= '&search_ref='.urlencode($search_ref); +} +if ($search_refsupplier) { + $param .= '&search_refsupplier='.urlencode($search_refsupplier); +} +if ($search_type != '') { + $param .= '&search_type='.urlencode($search_type); +} +if ($search_label) { + $param .= '&search_label='.urlencode($search_label); +} +if ($search_company) { + $param .= '&search_company='.urlencode($search_company); +} +if ($search_company_alias) { + $param .= '&search_company_alias='.urlencode($search_company_alias); +} +if ($search_login) { + $param .= '&search_login='.urlencode($search_login); +} +if ($search_montant_ht != '') { + $param .= '&search_montant_ht='.urlencode($search_montant_ht); +} +if ($search_montant_vat != '') { + $param .= '&search_montant_vat='.urlencode($search_montant_vat); +} +if ($search_montant_localtax1 != '') { + $param .= '&search_montant_localtax1='.urlencode($search_montant_localtax1); +} +if ($search_montant_localtax2 != '') { + $param .= '&search_montant_localtax2='.urlencode($search_montant_localtax2); +} +if ($search_montant_ttc != '') { + $param .= '&search_montant_ttc='.urlencode($search_montant_ttc); +} +if ($search_multicurrency_code != '') { + $param .= '&search_multicurrency_code='.urlencode($search_multicurrency_code); +} +if ($search_multicurrency_tx != '') { + $param .= '&search_multicurrency_tx='.urlencode($search_multicurrency_tx); +} +if ($search_multicurrency_montant_ht != '') { + $param .= '&search_multicurrency_montant_ht='.urlencode($search_multicurrency_montant_ht); +} +if ($search_multicurrency_montant_vat != '') { + $param .= '&search_multicurrency_montant_vat='.urlencode($search_multicurrency_montant_vat); +} +if ($search_multicurrency_montant_ttc != '') { + $param .= '&search_multicurrency_montant_ttc='.urlencode($search_multicurrency_montant_ttc); +} +if ($search_amount_no_tax) { + $param .= '&search_amount_no_tax='.urlencode($search_amount_no_tax); +} +if ($search_amount_all_tax) { + $param .= '&search_amount_all_tax='.urlencode($search_amount_all_tax); +} +if ($search_status >= 0) { + $param .= "&search_status=".urlencode($search_status); +} +if ($show_files) { + $param .= '&show_files='.urlencode($show_files); +} +if ($option) { + $param .= "&search_option=".urlencode($option); +} +if ($optioncss != '') { + $param .= '&optioncss='.urlencode($optioncss); +} +if ($search_categ_sup > 0) { + $param .= '&search_categ_sup='.urlencode($search_categ_sup); +} +if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) { + $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); +} - // List of mass actions available - $arrayofmassactions = array( - 'validate'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"), - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), - //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), - //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), - ); +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; +// Add $param from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +$param .= $hookmanager->resPrint; - if (isModEnabled('paymentbybanktransfer') && !empty($user->rights->paymentbybanktransfer->create)) { - $langs->load('withdrawals'); - $arrayofmassactions['banktransfertrequest'] = img_picto('', 'payment', 'class="pictofixedwidth"').$langs->trans("MakeBankTransferOrder"); - } - if ($user->rights->fournisseur->facture->supprimer) { - $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); - } - if (in_array($massaction, array('presend', 'predelete'))) { - $arrayofmassactions = array(); - } - $massactionbutton = $form->selectMassAction('', $arrayofmassactions); +// List of mass actions available +$arrayofmassactions = array( + 'validate'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"), + 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), + //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), +); - $url = DOL_URL_ROOT.'/fourn/facture/card.php?action=create'; - if (!empty($socid)) { - $url .= '&socid='.urlencode($socid); - } - $newcardbutton = dolGetButtonTitle($langs->trans('NewBill'), '', 'fa fa-plus-circle', $url, '', ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer)); +if (isModEnabled('paymentbybanktransfer') && !empty($user->rights->paymentbybanktransfer->create)) { + $langs->load('withdrawals'); + $arrayofmassactions['banktransfertrequest'] = img_picto('', 'payment', 'class="pictofixedwidth"').$langs->trans("MakeBankTransferOrder"); +} +if ($user->rights->fournisseur->facture->supprimer) { + $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); +} +if (in_array($massaction, array('presend', 'predelete'))) { + $arrayofmassactions = array(); +} +$massactionbutton = $form->selectMassAction('', $arrayofmassactions); - $i = 0; - print '
    '."\n"; - if ($optioncss != '') { - print ''; - } - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; +$url = DOL_URL_ROOT.'/fourn/facture/card.php?action=create'; +if (!empty($socid)) { + $url .= '&socid='.urlencode($socid); +} +$newcardbutton = dolGetButtonTitle($langs->trans('NewBill'), '', 'fa fa-plus-circle', $url, '', ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer)); - print_barre_liste($langs->trans("BillsSuppliers").($socid ? ' '.$soc->name : ''), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'supplier_invoice', 0, $newcardbutton, '', $limit, 0, 0, 1); +$i = 0; +print ''."\n"; +if ($optioncss != '') { + print ''; +} +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; - $topicmail = "SendBillRef"; - $modelmail = "invoice_supplier_send"; - $objecttmp = new FactureFournisseur($db); - $trackid = 'sinv'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; +print_barre_liste($langs->trans("BillsSuppliers").($socid ? ' '.$soc->name : ''), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'supplier_invoice', 0, $newcardbutton, '', $limit, 0, 0, 1); - if ($search_all) { - foreach ($fieldstosearchall as $key => $val) { - $fieldstosearchall[$key] = $langs->trans($val); - } - print '
    '.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'
    '; - } +$topicmail = "SendBillRef"; +$modelmail = "invoice_supplier_send"; +$objecttmp = new FactureFournisseur($db); +$trackid = 'sinv'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; - // If the user can view prospects other than his' - $moreforfilter = ''; - if ($user->rights->user->user->lire) { - $langs->load("commercial"); - $moreforfilter .= '
    '; - $tmptitle = $langs->trans('ThirdPartiesOfSaleRepresentative'); - $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, $tmptitle, 'maxwidth200'); - $moreforfilter .= '
    '; - } - // If the user can view prospects other than his' - if ($user->rights->user->user->lire) { - $moreforfilter .= '
    '; - $tmptitle = $langs->trans('LinkedToSpecificUsers'); - $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$form->select_dolusers($search_user, 'search_user', $tmptitle, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth200'); - $moreforfilter .= '
    '; - } - // If the user can view prospects other than his' - if (isModEnabled('categorie') && $user->rights->categorie->lire && ($user->rights->produit->lire || $user->rights->service->lire)) { - include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; - $moreforfilter .= '
    '; - $tmptitle = $langs->trans('IncludingProductWithTag'); - $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1); - $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$form->selectarray('search_product_category', $cate_arbo, $search_product_category, $tmptitle, 0, 0, '', 0, 0, 0, 0, 'maxwidth300 widthcentpercentminusx', 1); - $moreforfilter .= '
    '; +if ($search_all) { + foreach ($fieldstosearchall as $key => $val) { + $fieldstosearchall[$key] = $langs->trans($val); } + print '
    '.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'
    '; +} - if (isModEnabled('categorie')) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; - $moreforfilter .= '
    '; - $tmptitle = $langs->trans('SuppliersCategoriesShort'); - $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('supplier', $search_categ_sup, 'search_categ_sup', 1, $tmptitle); - $moreforfilter .= '
    '; - } - $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook - if (empty($reshook)) { - $moreforfilter .= $hookmanager->resPrint; - } else { - $moreforfilter = $hookmanager->resPrint; - } +// If the user can view prospects other than his' +$moreforfilter = ''; +if ($user->rights->user->user->lire) { + $langs->load("commercial"); + $moreforfilter .= '
    '; + $tmptitle = $langs->trans('ThirdPartiesOfSaleRepresentative'); + $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, $tmptitle, 'maxwidth200'); + $moreforfilter .= '
    '; +} +// If the user can view prospects other than his' +if ($user->rights->user->user->lire) { + $moreforfilter .= '
    '; + $tmptitle = $langs->trans('LinkedToSpecificUsers'); + $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$form->select_dolusers($search_user, 'search_user', $tmptitle, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth200'); + $moreforfilter .= '
    '; +} +// If the user can view prospects other than his' +if (isModEnabled('categorie') && $user->rights->categorie->lire && ($user->rights->produit->lire || $user->rights->service->lire)) { + include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $moreforfilter .= '
    '; + $tmptitle = $langs->trans('IncludingProductWithTag'); + $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1); + $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$form->selectarray('search_product_category', $cate_arbo, $search_product_category, $tmptitle, 0, 0, '', 0, 0, 0, 0, 'maxwidth300 widthcentpercentminusx', 1); + $moreforfilter .= '
    '; +} - if ($moreforfilter) { - print '
    '; - print $moreforfilter; - print '
    '; - } +if (isModEnabled('categorie')) { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $moreforfilter .= '
    '; + $tmptitle = $langs->trans('SuppliersCategoriesShort'); + $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('supplier', $search_categ_sup, 'search_categ_sup', 1, $tmptitle); + $moreforfilter .= '
    '; +} +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +if (empty($reshook)) { + $moreforfilter .= $hookmanager->resPrint; +} else { + $moreforfilter = $hookmanager->resPrint; +} - $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields - if ($massactionbutton) { - $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); - } +if ($moreforfilter) { + print '
    '; + print $moreforfilter; + print '
    '; +} - print '
    '; - print '
    '.($object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("PaymentsBack") : $langs->trans('Payments')).''.$langs->trans('Date').'
    '; + print ''; print $paymentstatic->getNomUrl(1); print ''.dol_print_date($db->jdate($objp->dp), 'day').''; - print $form->form_modes_reglement(null, $objp->paiement_type, 'none').' '.$objp->num_payment; + $s = $form->form_modes_reglement(null, $objp->paiement_type, 'none', '', 1, 0, '', 1).' '.$objp->num_payment; + print ''; + print $s; print '
    '."\n"; +$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +if ($massactionbutton) { + $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); +} - // Line for filters - print ''; - // Ref - if (!empty($arrayfields['f.ref']['checked'])) { - print ''; - } - // Ref supplier - if (!empty($arrayfields['f.ref_supplier']['checked'])) { - print ''; - } - // Type - if (!empty($arrayfields['f.type']['checked'])) { - print ''; - } - // Label - if (!empty($arrayfields['f.label']['checked'])) { - print ''; - } - // Date invoice - if (!empty($arrayfields['f.datef']['checked'])) { - print ''; - } - // Date due - if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { - print ''; - } - // Project - if (!empty($arrayfields['p.ref']['checked'])) { - print ''; - } - // Thirpdarty - if (!empty($arrayfields['s.nom']['checked'])) { - print ''; - } - // Alias - if (!empty($arrayfields['s.name_alias']['checked'])) { - print ''; - } - // Town - if (!empty($arrayfields['s.town']['checked'])) { - print ''; - } - // Zip - if (!empty($arrayfields['s.zip']['checked'])) { - print ''; - } - // State - if (!empty($arrayfields['state.nom']['checked'])) { - print ''; - } - // Country - if (!empty($arrayfields['country.code_iso']['checked'])) { - print ''; - } - // Company type - if (!empty($arrayfields['typent.code']['checked'])) { - print ''; - } - // Condition of payment - if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print ''; - } - // Payment mode - if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print ''; - } - if (!empty($arrayfields['f.total_ht']['checked'])) { - // Amount without tax - print ''; - } - if (!empty($arrayfields['f.total_vat']['checked'])) { - // Amount vat - print ''; - } - if (!empty($arrayfields['f.total_localtax1']['checked'])) { - // Amount tax 1 - print ''; - } - if (!empty($arrayfields['f.total_localtax2']['checked'])) { - // Amount tax 2 - print ''; - } - if (!empty($arrayfields['f.total_ttc']['checked'])) { - // Amount inc tac - print ''; - } - if (!empty($arrayfields['u.login']['checked'])) { - // Author - print ''; - } - if (!empty($arrayfields['dynamount_payed']['checked'])) { - print ''; - } - if (!empty($arrayfields['rtp']['checked'])) { - print ''; - } - if (!empty($arrayfields['f.multicurrency_code']['checked'])) { - // Currency - print ''; - } - if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { - // Currency rate - print ''; - } - if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { - print ''; - } - if (!empty($arrayfields['multicurrency_rtp']['checked'])) { - print ''; - } - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; +print '
    '; +print '
    '; - print ''; - print ''; - print ''; - print ''; - $listtype = array( - FactureFournisseur::TYPE_STANDARD=>$langs->trans("InvoiceStandard"), - FactureFournisseur::TYPE_REPLACEMENT=>$langs->trans("InvoiceReplacement"), - FactureFournisseur::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"), - FactureFournisseur::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"), - ); - /* - if (!empty($conf->global->INVOICE_USE_SITUATION)) - { - $listtype[Facture::TYPE_SITUATION] = $langs->trans("InvoiceSituation"); - } - */ - //$listtype[Facture::TYPE_PROFORMA]=$langs->trans("InvoiceProForma"); // A proformat invoice is not an invoice but must be an order. - print $form->selectarray('search_type', $listtype, $search_type, 1, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100'); - print ''; - print ''; - print ''; - print '
    '; - print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
    '; - print '
    '; - print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); - print '
    '; - print '
    '; - print '
    '; - /* - print $langs->trans('From').' '; - print $form->selectDate($search_datelimit_start ? $search_datelimit_start : -1, 'search_datelimit_start', 0, 0, 1); - print '
    '; - print '
    '; - print $langs->trans('to').' ';*/ - print $form->selectDate($search_datelimit_end ? $search_datelimit_end : -1, 'search_datelimit_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("Before")); - print '
    '.$langs->trans("Alert"); - print '
    '; - print '
    0 ? " disabled" : "").'>'; - print ''; - print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100'); - print ''; - print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1); - print ''; - print $form->getSelectConditionsPaiements($search_paymentcond, 'search_paymentcond', -1, 1, 1, 'maxwidth100'); - print ''; - print $form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 1, 1, 20, 1, 'maxwidth100', 1); - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print $form->selectMultiCurrency($search_multicurrency_code, 'search_multicurrency_code', 1); - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print '
    '."\n"; - // Fields from hook - $parameters = array('arrayfields'=>$arrayfields); - $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - // Date creation - if (!empty($arrayfields['f.datec']['checked'])) { - print ''; - } - // Date modification - if (!empty($arrayfields['f.tms']['checked'])) { - print ''; - } - // Status - if (!empty($arrayfields['f.fk_statut']['checked'])) { - print ''; - } - // Action column - print ''; +// Ref +if (!empty($arrayfields['f.ref']['checked'])) { + print ''; +} +// Ref supplier +if (!empty($arrayfields['f.ref_supplier']['checked'])) { + print ''; +} +// Type +if (!empty($arrayfields['f.type']['checked'])) { + print ''; +} +// Label +if (!empty($arrayfields['f.label']['checked'])) { + print ''; +} +// Date invoice +if (!empty($arrayfields['f.datef']['checked'])) { + print ''; +} +// Date due +if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { + print ''; +} +// Project +if (!empty($arrayfields['p.ref']['checked'])) { + print ''; +} +// Thirpdarty +if (!empty($arrayfields['s.nom']['checked'])) { + print ''; +} +// Alias +if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; +} +// Town +if (!empty($arrayfields['s.town']['checked'])) { + print ''; +} +// Zip +if (!empty($arrayfields['s.zip']['checked'])) { + print ''; +} +// State +if (!empty($arrayfields['state.nom']['checked'])) { + print ''; +} +// Country +if (!empty($arrayfields['country.code_iso']['checked'])) { + print ''; +} +// Company type +if (!empty($arrayfields['typent.code']['checked'])) { + print ''; +} +// Condition of payment +if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { + print ''; +} +// Payment mode +if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { + print ''; +} +if (!empty($arrayfields['f.total_ht']['checked'])) { + // Amount without tax + print ''; +} +if (!empty($arrayfields['f.total_vat']['checked'])) { + // Amount vat + print ''; +} +if (!empty($arrayfields['f.total_localtax1']['checked'])) { + // Amount tax 1 + print ''; +} +if (!empty($arrayfields['f.total_localtax2']['checked'])) { + // Amount tax 2 + print ''; +} +if (!empty($arrayfields['f.total_ttc']['checked'])) { + // Amount inc tac + print ''; +} +if (!empty($arrayfields['u.login']['checked'])) { + // Author + print ''; +} +if (!empty($arrayfields['dynamount_payed']['checked'])) { + print ''; +} +if (!empty($arrayfields['rtp']['checked'])) { + print ''; +} +if (!empty($arrayfields['f.multicurrency_code']['checked'])) { + // Currency + print ''; +} +if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { + // Currency rate + print ''; +} +if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { + print ''; +} +if (!empty($arrayfields['multicurrency_rtp']['checked'])) { + print ''; +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; - print "\n"; +// Fields from hook +$parameters = array('arrayfields'=>$arrayfields); +$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Date creation +if (!empty($arrayfields['f.datec']['checked'])) { + print ''; +} +// Date modification +if (!empty($arrayfields['f.tms']['checked'])) { + print ''; +} +// Status +if (!empty($arrayfields['f.fk_statut']['checked'])) { + print ''; +} +// Action column +print ''; - print ''; - if (!empty($arrayfields['f.ref']['checked'])) { - print_liste_field_titre($arrayfields['f.ref']['label'], $_SERVER['PHP_SELF'], 'f.ref,f.rowid', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.ref_supplier']['checked'])) { - print_liste_field_titre($arrayfields['f.ref_supplier']['label'], $_SERVER["PHP_SELF"], 'f.ref_supplier', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.type']['checked'])) { - print_liste_field_titre($arrayfields['f.type']['label'], $_SERVER["PHP_SELF"], 'f.type', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.label']['checked'])) { - print_liste_field_titre($arrayfields['f.label']['label'], $_SERVER['PHP_SELF'], "f.libelle,f.rowid", '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.datef']['checked'])) { - print_liste_field_titre($arrayfields['f.datef']['label'], $_SERVER['PHP_SELF'], 'f.datef,f.rowid', '', $param, '', $sortfield, $sortorder, 'center '); - } - if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { - print_liste_field_titre($arrayfields['f.date_lim_reglement']['label'], $_SERVER['PHP_SELF'], "f.date_lim_reglement", '', $param, '', $sortfield, $sortorder, 'center '); - } - if (!empty($arrayfields['p.ref']['checked'])) { - print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER['PHP_SELF'], "p.ref", '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['s.nom']['checked'])) { - print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER['PHP_SELF'], 's.nom', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['s.name_alias']['checked'])) { - print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER['PHP_SELF'], 's.name_alias', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['s.town']['checked'])) { - print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['s.zip']['checked'])) { - print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder, 'center '); - } - if (!empty($arrayfields['state.nom']['checked'])) { - print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.name_alias", "", $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['state.name_alias']['checked'])) { - print_liste_field_titre($arrayfields['state.name_alias']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['country.code_iso']['checked'])) { - print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center '); - } - if (!empty($arrayfields['typent.code']['checked'])) { - print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, '', $sortfield, $sortorder, 'center '); - } - if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_cond_reglement", "", $param, "", $sortfield, $sortorder); - } - if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_mode_reglement", "", $param, "", $sortfield, $sortorder); - } - if (!empty($arrayfields['f.total_ht']['checked'])) { - print_liste_field_titre($arrayfields['f.total_ht']['label'], $_SERVER['PHP_SELF'], 'f.total_ht', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['f.total_vat']['checked'])) { - print_liste_field_titre($arrayfields['f.total_vat']['label'], $_SERVER['PHP_SELF'], 'f.total_tva', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['f.total_localtax1']['checked'])) { - print_liste_field_titre($arrayfields['f.total_localtax1']['label'], $_SERVER['PHP_SELF'], 'f.localtax1', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['f.total_localtax2']['checked'])) { - print_liste_field_titre($arrayfields['f.total_localtax2']['label'], $_SERVER['PHP_SELF'], 'f.localtax2', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['f.total_ttc']['checked'])) { - print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['u.login']['checked'])) { - print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); - } - if (!empty($arrayfields['dynamount_payed']['checked'])) { - print_liste_field_titre($arrayfields['dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['rtp']['checked'])) { - print_liste_field_titre($arrayfields['rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - } - if (!empty($arrayfields['f.multicurrency_code']['checked'])) { - print_liste_field_titre($arrayfields['f.multicurrency_code']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { - print_liste_field_titre($arrayfields['f.multicurrency_tx']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_tx', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { - print_liste_field_titre($arrayfields['f.multicurrency_total_ht']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_ht', '', $param, 'class="right"', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { - print_liste_field_titre($arrayfields['f.multicurrency_total_vat']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_tva', '', $param, 'class="right"', $sortfield, $sortorder); - } - if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { - print_liste_field_titre($arrayfields['f.multicurrency_total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_ttc', '', $param, 'class="right"', $sortfield, $sortorder); - } - if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { - print_liste_field_titre($arrayfields['multicurrency_dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); - } - if (!empty($arrayfields['multicurrency_rtp']['checked'])) { - print_liste_field_titre($arrayfields['multicurrency_rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); - } - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; - // Hook fields - $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); - $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - if (!empty($arrayfields['f.datec']['checked'])) { - print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER["PHP_SELF"], "f.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); - } - if (!empty($arrayfields['f.tms']['checked'])) { - print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER["PHP_SELF"], "f.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap '); - } - if (!empty($arrayfields['f.fk_statut']['checked'])) { - print_liste_field_titre($arrayfields['f.fk_statut']['label'], $_SERVER["PHP_SELF"], "fk_statut,paye,type", "", $param, '', $sortfield, $sortorder, 'right '); - } - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); - print "\n"; +print "\n"; - $facturestatic = new FactureFournisseur($db); - $supplierstatic = new Fournisseur($db); - $projectstatic = new Project($db); - $userstatic = new User($db); +print ''; +if (!empty($arrayfields['f.ref']['checked'])) { + print_liste_field_titre($arrayfields['f.ref']['label'], $_SERVER['PHP_SELF'], 'f.ref,f.rowid', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.ref_supplier']['checked'])) { + print_liste_field_titre($arrayfields['f.ref_supplier']['label'], $_SERVER["PHP_SELF"], 'f.ref_supplier', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.type']['checked'])) { + print_liste_field_titre($arrayfields['f.type']['label'], $_SERVER["PHP_SELF"], 'f.type', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.label']['checked'])) { + print_liste_field_titre($arrayfields['f.label']['label'], $_SERVER['PHP_SELF'], "f.libelle,f.rowid", '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.datef']['checked'])) { + print_liste_field_titre($arrayfields['f.datef']['label'], $_SERVER['PHP_SELF'], 'f.datef,f.rowid', '', $param, '', $sortfield, $sortorder, 'center '); +} +if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { + print_liste_field_titre($arrayfields['f.date_lim_reglement']['label'], $_SERVER['PHP_SELF'], "f.date_lim_reglement", '', $param, '', $sortfield, $sortorder, 'center '); +} +if (!empty($arrayfields['p.ref']['checked'])) { + print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER['PHP_SELF'], "p.ref", '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['s.nom']['checked'])) { + print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER['PHP_SELF'], 's.nom', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER['PHP_SELF'], 's.name_alias', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['s.town']['checked'])) { + print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['s.zip']['checked'])) { + print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder, 'center '); +} +if (!empty($arrayfields['state.nom']['checked'])) { + print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.name_alias", "", $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['state.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['state.name_alias']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['country.code_iso']['checked'])) { + print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center '); +} +if (!empty($arrayfields['typent.code']['checked'])) { + print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, '', $sortfield, $sortorder, 'center '); +} +if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { + print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_cond_reglement", "", $param, "", $sortfield, $sortorder); +} +if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { + print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_mode_reglement", "", $param, "", $sortfield, $sortorder); +} +if (!empty($arrayfields['f.total_ht']['checked'])) { + print_liste_field_titre($arrayfields['f.total_ht']['label'], $_SERVER['PHP_SELF'], 'f.total_ht', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['f.total_vat']['checked'])) { + print_liste_field_titre($arrayfields['f.total_vat']['label'], $_SERVER['PHP_SELF'], 'f.total_tva', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['f.total_localtax1']['checked'])) { + print_liste_field_titre($arrayfields['f.total_localtax1']['label'], $_SERVER['PHP_SELF'], 'f.localtax1', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['f.total_localtax2']['checked'])) { + print_liste_field_titre($arrayfields['f.total_localtax2']['label'], $_SERVER['PHP_SELF'], 'f.localtax2', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['f.total_ttc']['checked'])) { + print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['u.login']['checked'])) { + print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); +} +if (!empty($arrayfields['dynamount_payed']['checked'])) { + print_liste_field_titre($arrayfields['dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['rtp']['checked'])) { + print_liste_field_titre($arrayfields['rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); +} +if (!empty($arrayfields['f.multicurrency_code']['checked'])) { + print_liste_field_titre($arrayfields['f.multicurrency_code']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_code', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { + print_liste_field_titre($arrayfields['f.multicurrency_tx']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_tx', '', $param, '', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { + print_liste_field_titre($arrayfields['f.multicurrency_total_ht']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_ht', '', $param, 'class="right"', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { + print_liste_field_titre($arrayfields['f.multicurrency_total_vat']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_tva', '', $param, 'class="right"', $sortfield, $sortorder); +} +if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { + print_liste_field_titre($arrayfields['f.multicurrency_total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.multicurrency_total_ttc', '', $param, 'class="right"', $sortfield, $sortorder); +} +if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { + print_liste_field_titre($arrayfields['multicurrency_dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); +} +if (!empty($arrayfields['multicurrency_rtp']['checked'])) { + print_liste_field_titre($arrayfields['multicurrency_rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +if (!empty($arrayfields['f.datec']['checked'])) { + print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER["PHP_SELF"], "f.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); +} +if (!empty($arrayfields['f.tms']['checked'])) { + print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER["PHP_SELF"], "f.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap '); +} +if (!empty($arrayfields['f.fk_statut']['checked'])) { + print_liste_field_titre($arrayfields['f.fk_statut']['label'], $_SERVER["PHP_SELF"], "fk_statut,paye,type", "", $param, '', $sortfield, $sortorder, 'right '); +} +print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); +print "\n"; - if ($num > 0) { - $i = 0; - $totalarray = array(); - $totalarray['nbfield']=0; - $totalarray['val'] = array(); - $totalarray['val']['f.total_ht']=0; - $totalarray['val']['f.total_vat']=0; - $totalarray['val']['f.total_localtax1']=0; - $totalarray['val']['f.total_localtax1']=0; - $totalarray['val']['f.total_ttc']=0; +$facturestatic = new FactureFournisseur($db); +$supplierstatic = new Fournisseur($db); +$projectstatic = new Project($db); +$userstatic = new User($db); - while ($i < min($num, $limit)) { - $obj = $db->fetch_object($resql); +if ($num > 0) { + $i = 0; + $totalarray = array(); + $totalarray['nbfield']=0; + $totalarray['val'] = array(); + $totalarray['val']['f.total_ht']=0; + $totalarray['val']['f.total_vat']=0; + $totalarray['val']['f.total_localtax1']=0; + $totalarray['val']['f.total_localtax1']=0; + $totalarray['val']['f.total_ttc']=0; - $datelimit = $db->jdate($obj->datelimite); - $facturestatic->id = $obj->facid; - $facturestatic->ref = $obj->ref; - $facturestatic->type = $obj->type; - $facturestatic->ref_supplier = $obj->ref_supplier; - $facturestatic->date_echeance = $db->jdate($obj->datelimite); - $facturestatic->statut = $obj->fk_statut; - $facturestatic->note_public = $obj->note_public; - $facturestatic->note_private = $obj->note_private; - $facturestatic->multicurrency_code = $obj->multicurrency_code; - $facturestatic->multicurrency_tx = $obj->multicurrency_tx; - $facturestatic->multicurrency_total_ht = $obj->multicurrency_total_ht; - $facturestatic->multicurrency_total_tva = $obj->multicurrency_total_vat; - $facturestatic->multicurrency_total_ttc = $obj->multicurrency_total_ttc; + while ($i < min($num, $limit)) { + $obj = $db->fetch_object($resql); - $thirdparty->id = $obj->socid; - $thirdparty->name = $obj->name; - $thirdparty->name_alias = $obj->alias; - $thirdparty->client = $obj->client; - $thirdparty->fournisseur = $obj->fournisseur; - $thirdparty->code_client = $obj->code_client; - $thirdparty->code_compta_client = $obj->code_compta_client; - $thirdparty->code_fournisseur = $obj->code_fournisseur; - $thirdparty->code_compta_fournisseur = $obj->code_compta_fournisseur; - $thirdparty->email = $obj->email; - $thirdparty->country_code = $obj->country_code; + $datelimit = $db->jdate($obj->datelimite); + $facturestatic->id = $obj->facid; + $facturestatic->ref = $obj->ref; + $facturestatic->type = $obj->type; + $facturestatic->ref_supplier = $obj->ref_supplier; + $facturestatic->date_echeance = $db->jdate($obj->datelimite); + $facturestatic->statut = $obj->fk_statut; + $facturestatic->note_public = $obj->note_public; + $facturestatic->note_private = $obj->note_private; + $facturestatic->multicurrency_code = $obj->multicurrency_code; + $facturestatic->multicurrency_tx = $obj->multicurrency_tx; + $facturestatic->multicurrency_total_ht = $obj->multicurrency_total_ht; + $facturestatic->multicurrency_total_tva = $obj->multicurrency_total_vat; + $facturestatic->multicurrency_total_ttc = $obj->multicurrency_total_ttc; - $paiement = $facturestatic->getSommePaiement(); - $totalcreditnotes = $facturestatic->getSumCreditNotesUsed(); - $totaldeposits = $facturestatic->getSumDepositsUsed(); - $totalpay = $paiement + $totalcreditnotes + $totaldeposits; - $remaintopay = $obj->total_ttc - $totalpay; - $multicurrency_paiement = $facturestatic->getSommePaiement(1); - $multicurrency_totalcreditnotes = $facturestatic->getSumCreditNotesUsed(1); - $multicurrency_totaldeposits = $facturestatic->getSumDepositsUsed(1); - $multicurrency_totalpay = $multicurrency_paiement + $multicurrency_totalcreditnotes + $multicurrency_totaldeposits; - $multicurrency_remaintopay = price2num($facturestatic->multicurrency_total_ttc - $multicurrency_totalpay); + $thirdparty->id = $obj->socid; + $thirdparty->name = $obj->name; + $thirdparty->name_alias = $obj->alias; + $thirdparty->client = $obj->client; + $thirdparty->fournisseur = $obj->fournisseur; + $thirdparty->code_client = $obj->code_client; + $thirdparty->code_compta_client = $obj->code_compta_client; + $thirdparty->code_fournisseur = $obj->code_fournisseur; + $thirdparty->code_compta_fournisseur = $obj->code_compta_fournisseur; + $thirdparty->email = $obj->email; + $thirdparty->country_code = $obj->country_code; - $facturestatic->alreadypaid = ($paiement ? $paiement : 0); - $facturestatic->paye = $obj->paye; - $facturestatic->statut = $obj->fk_statut; - $facturestatic->type = $obj->type; + $paiement = $facturestatic->getSommePaiement(); + $totalcreditnotes = $facturestatic->getSumCreditNotesUsed(); + $totaldeposits = $facturestatic->getSumDepositsUsed(); + $totalpay = $paiement + $totalcreditnotes + $totaldeposits; + $remaintopay = $obj->total_ttc - $totalpay; + $multicurrency_paiement = $facturestatic->getSommePaiement(1); + $multicurrency_totalcreditnotes = $facturestatic->getSumCreditNotesUsed(1); + $multicurrency_totaldeposits = $facturestatic->getSumDepositsUsed(1); + $multicurrency_totalpay = $multicurrency_paiement + $multicurrency_totalcreditnotes + $multicurrency_totaldeposits; + $multicurrency_remaintopay = price2num($facturestatic->multicurrency_total_ttc - $multicurrency_totalpay); + + $facturestatic->alreadypaid = ($paiement ? $paiement : 0); + $facturestatic->paye = $obj->paye; + $facturestatic->statut = $obj->fk_statut; + $facturestatic->type = $obj->type; - //If invoice has been converted and the conversion has been used, we dont have remain to pay on invoice - if ($facturestatic->type == FactureFournisseur::TYPE_CREDIT_NOTE) { - if ($facturestatic->isCreditNoteUsed()) { - $remaintopay = -$facturestatic->getSumFromThisCreditNotesNotUsed(); - } + //If invoice has been converted and the conversion has been used, we dont have remain to pay on invoice + if ($facturestatic->type == FactureFournisseur::TYPE_CREDIT_NOTE) { + if ($facturestatic->isCreditNoteUsed()) { + $remaintopay = -$facturestatic->getSumFromThisCreditNotesNotUsed(); } + } - print ''; - if (!empty($arrayfields['f.ref']['checked'])) { - print ''; + if (!empty($arrayfields['f.ref']['checked'])) { + print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + print "\n"; + if (!$i) { + $totalarray['nbfield']++; } + } - // Supplier ref - if (!empty($arrayfields['f.ref_supplier']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + // Supplier ref + if (!empty($arrayfields['f.ref_supplier']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } + } - // Type - if (!empty($arrayfields['f.type']['checked'])) { - print '"; - if (!$i) { - $totalarray['nbfield']++; - } + // Type + if (!empty($arrayfields['f.type']['checked'])) { + print '"; + if (!$i) { + $totalarray['nbfield']++; } + } - // Label - if (!empty($arrayfields['f.label']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + // Label + if (!empty($arrayfields['f.label']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } + } - // Date - if (!empty($arrayfields['f.datef']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + // Date + if (!empty($arrayfields['f.datef']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } + } - // Date limit - if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Project - if (!empty($arrayfields['p.ref']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Third party - if (!empty($arrayfields['s.nom']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Alias - if (!empty($arrayfields['s.name_alias']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Town - if (!empty($arrayfields['s.town']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Zip - if (!empty($arrayfields['s.zip']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // State - if (!empty($arrayfields['state.nom']['checked'])) { - print "\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Country - if (!empty($arrayfields['country.code_iso']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Type ent - if (!empty($arrayfields['typent.code']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Payment condition - if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Payment mode - if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Amount HT - if (!empty($arrayfields['f.total_ht']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ht'; - } - $totalarray['val']['f.total_ht'] += $obj->total_ht; - } - // Amount VAT - if (!empty($arrayfields['f.total_vat']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'f.total_vat'; - } - $totalarray['val']['f.total_vat'] += $obj->total_vat; - } - // Amount LocalTax1 - if (!empty($arrayfields['f.total_localtax1']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'f.total_localtax1'; - } - $totalarray['val']['f.total_localtax1'] += $obj->total_localtax1; - } - // Amount LocalTax2 - if (!empty($arrayfields['f.total_localtax2']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'f.total_localtax2'; - } - $totalarray['val']['f.total_localtax2'] += $obj->total_localtax2; - } - // Amount TTC - if (!empty($arrayfields['f.total_ttc']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ttc'; - } - $totalarray['val']['f.total_ttc'] += $obj->total_ttc; - } - - $userstatic->id = $obj->fk_user_author; - $userstatic->login = $obj->login; - $userstatic->lastname = $obj->lastname; - $userstatic->firstname = $obj->firstname; - $userstatic->email = $obj->user_email; - $userstatic->statut = $obj->user_statut; - $userstatic->entity = $obj->entity; - $userstatic->photo = $obj->photo; - $userstatic->office_phone = $obj->office_phone; - $userstatic->office_fax = $obj->office_fax; - $userstatic->user_mobile = $obj->user_mobile; - $userstatic->job = $obj->job; - $userstatic->gender = $obj->gender; - - // Author - if (!empty($arrayfields['u.login']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - - if (!empty($arrayfields['dynamount_payed']['checked'])) { - print ''; // TODO Use a denormalized field - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'totalam'; - } - $totalarray['val']['totalam'] += $totalpay; - } - - if (!empty($arrayfields['rtp']['checked'])) { - print ''; // TODO Use a denormalized field - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'rtp'; - } - $totalarray['val']['rtp'] += $remaintopay; - } - - // Currency - if (!empty($arrayfields['f.multicurrency_code']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Currency rate - if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Amount HT - if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Amount VAT - if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Amount TTC - if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { - print ''; // TODO Use a denormalized field - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Pending amount - if (!empty($arrayfields['multicurrency_rtp']['checked'])) { - print ''; // TODO Use a denormalized field - if (!$i) { - $totalarray['nbfield']++; - } - } - - - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; - // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - // Date creation - if (!empty($arrayfields['f.datec']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Date modification - if (!empty($arrayfields['f.tms']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Status - if (!empty($arrayfields['f.fk_statut']['checked'])) { - print '"; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Action column - print ''; if (!$i) { $totalarray['nbfield']++; } - - print "\n"; - - $i++; } - // Show total line - include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // Project + if (!empty($arrayfields['p.ref']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Third party + if (!empty($arrayfields['s.nom']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Town + if (!empty($arrayfields['s.town']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Zip + if (!empty($arrayfields['s.zip']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // State + if (!empty($arrayfields['state.nom']['checked'])) { + print "\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Country + if (!empty($arrayfields['country.code_iso']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Type ent + if (!empty($arrayfields['typent.code']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Payment condition + if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Payment mode + if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Amount HT + if (!empty($arrayfields['f.total_ht']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ht'; + } + $totalarray['val']['f.total_ht'] += $obj->total_ht; + } + // Amount VAT + if (!empty($arrayfields['f.total_vat']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'f.total_vat'; + } + $totalarray['val']['f.total_vat'] += $obj->total_vat; + } + // Amount LocalTax1 + if (!empty($arrayfields['f.total_localtax1']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'f.total_localtax1'; + } + $totalarray['val']['f.total_localtax1'] += $obj->total_localtax1; + } + // Amount LocalTax2 + if (!empty($arrayfields['f.total_localtax2']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'f.total_localtax2'; + } + $totalarray['val']['f.total_localtax2'] += $obj->total_localtax2; + } + // Amount TTC + if (!empty($arrayfields['f.total_ttc']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ttc'; + } + $totalarray['val']['f.total_ttc'] += $obj->total_ttc; + } + + $userstatic->id = $obj->fk_user_author; + $userstatic->login = $obj->login; + $userstatic->lastname = $obj->lastname; + $userstatic->firstname = $obj->firstname; + $userstatic->email = $obj->user_email; + $userstatic->statut = $obj->user_statut; + $userstatic->entity = $obj->entity; + $userstatic->photo = $obj->photo; + $userstatic->office_phone = $obj->office_phone; + $userstatic->office_fax = $obj->office_fax; + $userstatic->user_mobile = $obj->user_mobile; + $userstatic->job = $obj->job; + $userstatic->gender = $obj->gender; + + // Author + if (!empty($arrayfields['u.login']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + + if (!empty($arrayfields['dynamount_payed']['checked'])) { + print ''; // TODO Use a denormalized field + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'totalam'; + } + $totalarray['val']['totalam'] += $totalpay; + } + + if (!empty($arrayfields['rtp']['checked'])) { + print ''; // TODO Use a denormalized field + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'rtp'; + } + $totalarray['val']['rtp'] += $remaintopay; + } + + // Currency + if (!empty($arrayfields['f.multicurrency_code']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Currency rate + if (!empty($arrayfields['f.multicurrency_tx']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Amount HT + if (!empty($arrayfields['f.multicurrency_total_ht']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Amount VAT + if (!empty($arrayfields['f.multicurrency_total_vat']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Amount TTC + if (!empty($arrayfields['f.multicurrency_total_ttc']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + if (!empty($arrayfields['multicurrency_dynamount_payed']['checked'])) { + print ''; // TODO Use a denormalized field + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Pending amount + if (!empty($arrayfields['multicurrency_rtp']['checked'])) { + print ''; // TODO Use a denormalized field + if (!$i) { + $totalarray['nbfield']++; + } + } + + + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + // Date creation + if (!empty($arrayfields['f.datec']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Date modification + if (!empty($arrayfields['f.tms']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Status + if (!empty($arrayfields['f.fk_statut']['checked'])) { + print '"; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Action column + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + + print "\n"; + + $i++; } - $db->free($resql); - - $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print "
    '; - print ''; - print ''; - $liststatus = array('0'=>$langs->trans("Draft"), '1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid")); - print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', '', 1); - print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; +// Line for filters +print '
    '; + print ''; print ''; + print ''; + print ''; + $listtype = array( + FactureFournisseur::TYPE_STANDARD=>$langs->trans("InvoiceStandard"), + FactureFournisseur::TYPE_REPLACEMENT=>$langs->trans("InvoiceReplacement"), + FactureFournisseur::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"), + FactureFournisseur::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"), + ); + /* + if (!empty($conf->global->INVOICE_USE_SITUATION)) + { + $listtype[Facture::TYPE_SITUATION] = $langs->trans("InvoiceSituation"); + } + */ + //$listtype[Facture::TYPE_PROFORMA]=$langs->trans("InvoiceProForma"); // A proformat invoice is not an invoice but must be an order. + print $form->selectarray('search_type', $listtype, $search_type, 1, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100'); + print ''; + print ''; + print ''; + print '
    '; + print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
    '; + print '
    '; + print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); + print '
    '; + print '
    '; + print '
    '; + /* + print $langs->trans('From').' '; + print $form->selectDate($search_datelimit_start ? $search_datelimit_start : -1, 'search_datelimit_start', 0, 0, 1); + print '
    '; + print '
    '; + print $langs->trans('to').' ';*/ + print $form->selectDate($search_datelimit_end ? $search_datelimit_end : -1, 'search_datelimit_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("Before")); + print '
    '.$langs->trans("Alert"); + print '
    '; + print '
    0 ? " disabled" : "").'>'; + print ''; + print ''; + print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100'); + print ''; + print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1); + print ''; + print $form->getSelectConditionsPaiements($search_paymentcond, 'search_paymentcond', -1, 1, 1, 'maxwidth100'); + print ''; + print $form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 1, 1, 20, 1, 'maxwidth100', 1); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print $form->selectMultiCurrency($search_multicurrency_code, 'search_multicurrency_code', 1); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
    '; + print ''; + print ''; + $liststatus = array('0'=>$langs->trans("Draft"), '1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid")); + print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', '', 1); + print ''; +$searchpicto = $form->showFilterButtons(); +print $searchpicto; +print '
    '; + print '
    '; - print ''; - // Picto + Ref - print '
    '; - print $facturestatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1); + print ''; + // Picto + Ref + print '
    '; + print $facturestatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1); - $filename = dol_sanitizeFileName($obj->ref); - $filedir = $conf->fournisseur->facture->dir_output.'/'.get_exdir($obj->facid, 2, 0, 0, $facturestatic, 'invoice_supplier').dol_sanitizeFileName($obj->ref); - $subdir = get_exdir($obj->facid, 2, 0, 0, $facturestatic, 'invoice_supplier').dol_sanitizeFileName($obj->ref); - print $formfile->getDocumentsLink('facture_fournisseur', $subdir, $filedir); - print '
    '; + $filename = dol_sanitizeFileName($obj->ref); + $filedir = $conf->fournisseur->facture->dir_output.'/'.get_exdir($obj->facid, 2, 0, 0, $facturestatic, 'invoice_supplier').dol_sanitizeFileName($obj->ref); + $subdir = get_exdir($obj->facid, 2, 0, 0, $facturestatic, 'invoice_supplier').dol_sanitizeFileName($obj->ref); + print $formfile->getDocumentsLink('facture_fournisseur', $subdir, $filedir); + print '
    '; - print "
    '; - print $obj->ref_supplier; - print ''; + print $obj->ref_supplier; + print ''; - print $facturestatic->getLibType(); - print "'; + print $facturestatic->getLibType(); + print "'; - print $obj->label; - print ''; + print $obj->label; + print ''; - print dol_print_date($db->jdate($obj->datef), 'day'); - print ''; + print dol_print_date($db->jdate($obj->datef), 'day'); + print ''.dol_print_date($datelimit, 'day'); - if ($facturestatic->hasDelay()) { - print img_warning($langs->trans('Alert').' - '.$langs->trans('Late')); - } - print ''; - if ($obj->project_id > 0) { - $projectstatic->id = $obj->project_id; - $projectstatic->ref = $obj->project_ref; - $projectstatic->title = $obj->project_label; - print $projectstatic->getNomUrl(1); - } - print ''; - print $thirdparty->getNomUrl(1, 'supplier', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); - print ''; - print $thirdparty->name_alias; - print ''; - print $obj->town; - print ''; - print dol_escape_htmltag($obj->zip); - print '".$obj->state_name."'; - $tmparray = getCountry($obj->fk_pays, 'all'); - print $tmparray['label']; - print ''; - if (empty($typenArray)) { - $typenArray = $formcompany->typent_array(1); - } - print $typenArray[$obj->typent_code]; - print ''; - $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none', 1); - print ''; - $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1); - print ''.price($obj->total_ht)."'.price($obj->total_vat)."'.price($obj->total_localtax1)."'.price($obj->total_localtax2)."'.price($obj->total_ttc)."'; - if ($userstatic->id) { - print $userstatic->getLoginUrl(-1); - } else { - print ' '; - } - print "'.(!empty($totalpay) ?price($totalpay, 0, $langs) : '').''.(!empty($remaintopay) ?price($remaintopay, 0, $langs) : ' ').''.$obj->multicurrency_code.' - '.$langs->trans('Currency'.$obj->multicurrency_code)."'; - $form->form_multicurrency_rate($_SERVER['PHP_SELF'].'?id='.$obj->rowid, $obj->multicurrency_tx, 'none', $obj->multicurrency_code); - print "'.price($obj->multicurrency_total_ht)."'.price($obj->multicurrency_total_vat)."'.price($obj->multicurrency_total_ttc)."'.(!empty($multicurrency_totalpay) ?price($multicurrency_totalpay, 0, $langs) : '').''; - print (!empty($multicurrency_remaintopay) ? price($multicurrency_remaintopay, 0, $langs) : ''); - print ''; - print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); - print ''; - print dol_print_date($db->jdate($obj->date_update), 'dayhour', 'tzuser'); - print ''; - print $facturestatic->LibStatut($obj->paye, $obj->fk_statut, 5, $paiement, $obj->type); - print "'; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->facid, $arrayofselected)) { - $selected = 1; - } - print ''; + // Date limit + if (!empty($arrayfields['f.date_lim_reglement']['checked'])) { + print ''.dol_print_date($datelimit, 'day'); + if ($facturestatic->hasDelay()) { + print img_warning($langs->trans('Alert').' - '.$langs->trans('Late')); } print '
    '; + if ($obj->project_id > 0) { + $projectstatic->id = $obj->project_id; + $projectstatic->ref = $obj->project_ref; + $projectstatic->title = $obj->project_label; + print $projectstatic->getNomUrl(1); + } + print ''; + print $thirdparty->getNomUrl(1, 'supplier', 0, 0, -1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + print ''; + print $thirdparty->name_alias; + print ''; + print $obj->town; + print ''; + print dol_escape_htmltag($obj->zip); + print '".$obj->state_name."'; + $tmparray = getCountry($obj->fk_pays, 'all'); + print $tmparray['label']; + print ''; + if (empty($typenArray)) { + $typenArray = $formcompany->typent_array(1); + } + print $typenArray[$obj->typent_code]; + print ''; + $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none', 1); + print ''; + $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1); + print ''.price($obj->total_ht)."'.price($obj->total_vat)."'.price($obj->total_localtax1)."'.price($obj->total_localtax2)."'.price($obj->total_ttc)."'; + if ($userstatic->id) { + print $userstatic->getLoginUrl(-1); + } else { + print ' '; + } + print "'.(!empty($totalpay) ?price($totalpay, 0, $langs) : '').''.(!empty($remaintopay) ?price($remaintopay, 0, $langs) : ' ').''.$obj->multicurrency_code.' - '.$langs->trans('Currency'.$obj->multicurrency_code)."'; + $form->form_multicurrency_rate($_SERVER['PHP_SELF'].'?id='.$obj->rowid, $obj->multicurrency_tx, 'none', $obj->multicurrency_code); + print "'.price($obj->multicurrency_total_ht)."'.price($obj->multicurrency_total_vat)."'.price($obj->multicurrency_total_ttc)."'.(!empty($multicurrency_totalpay) ?price($multicurrency_totalpay, 0, $langs) : '').''; + print (!empty($multicurrency_remaintopay) ? price($multicurrency_remaintopay, 0, $langs) : ''); + print ''; + print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); + print ''; + print dol_print_date($db->jdate($obj->date_update), 'dayhour', 'tzuser'); + print ''; + print $facturestatic->LibStatut($obj->paye, $obj->fk_statut, 5, $paiement, $obj->type); + print "'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->facid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print '
    \n"; - print ''; - - print "\n"; - - $hidegeneratedfilelistifempty = 1; - if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) { - $hidegeneratedfilelistifempty = 0; - } - - // Show list of available documents - $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; - $urlsource .= str_replace('&', '&', $param); - - $filedir = $diroutputmassaction; - $genallowed = $user->rights->facture->lire; - $delallowed = $user->rights->facture->creer; - $title = ''; - - print $formfile->showdocuments('massfilesarea_supplier_invoice', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); -} else { - dol_print_error($db); + // Show total line + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; } +// If no record found +if ($num == 0) { + $colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { + $colspan++; + } + } + print '
    '.$langs->trans("NoRecordFound").'
    \n"; +print ''; + +print "\n"; + +$hidegeneratedfilelistifempty = 1; +if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) { + $hidegeneratedfilelistifempty = 0; +} + +// Show list of available documents +$urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; +$urlsource .= str_replace('&', '&', $param); + +$filedir = $diroutputmassaction; +$genallowed = $user->rights->facture->lire; +$delallowed = $user->rights->facture->creer; +$title = ''; + +print $formfile->showdocuments('massfilesarea_supplier_invoice', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); + // End of page llxFooter(); $db->close(); diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index e1eb788723f..1c61fdc8e07 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -53,6 +53,8 @@ $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $object = new FactureFournisseur($db); $object->fetch($id, $ref); +$usercancreate = ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer); +$permissiontoadd = $usercancreate; $permissionnote = ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer); // Used by the include of actions_setnotes.inc.php @@ -106,40 +108,28 @@ if ($object->id > 0) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) { $morehtmlref .= ' ('.$langs->trans("OtherBills").')'; } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer) { + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - // $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php index c7c1297e0e8..a11cf769204 100644 --- a/htdocs/fourn/paiement/card.php +++ b/htdocs/fourn/paiement/card.php @@ -374,9 +374,9 @@ if ($result > 0) { if ($user->socid == 0 && $action == '') { if ($user->rights->fournisseur->facture->supprimer) { if ($allow_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($title_button, $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } } diff --git a/htdocs/fourn/paiement/document.php b/htdocs/fourn/paiement/document.php index e26734ed9c6..2e61322997a 100644 --- a/htdocs/fourn/paiement/document.php +++ b/htdocs/fourn/paiement/document.php @@ -123,7 +123,7 @@ if ($object->id > 0) { $morehtmlref .= $object->num_payment ? ' - '.$object->num_payment : ''; // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Amount $morehtmlref .= '
    '.$langs->trans('Amount').' : '. price($object->amount, '', $langs, 0, 0, -1, $conf->currency); diff --git a/htdocs/hrm/admin/job_extrafields.php b/htdocs/hrm/admin/job_extrafields.php index 8dff50f4b6f..6ac0773c00f 100644 --- a/htdocs/hrm/admin/job_extrafields.php +++ b/htdocs/hrm/admin/job_extrafields.php @@ -67,7 +67,7 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject = $langs->transnoentitiesnoconv("Job"); +$textobject = $langs->transnoentitiesnoconv("JobPosition"); $help_url = ''; $page_name = "HrmSetup"; diff --git a/htdocs/hrm/class/evaluation.class.php b/htdocs/hrm/class/evaluation.class.php index 879acff61fa..b35a23a6389 100644 --- a/htdocs/hrm/class/evaluation.class.php +++ b/htdocs/hrm/class/evaluation.class.php @@ -119,7 +119,7 @@ class Evaluation extends CommonObject 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>0, 'visible'=>5, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '6' => 'Closed'),), 'date_eval' => array('type'=>'date', 'label'=>'DateEval', 'enabled'=>'1', 'position'=>502, 'notnull'=>1, 'visible'=>1,), 'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'User', 'enabled'=>'1', 'position'=>504, 'notnull'=>1, 'visible'=>1,), - 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'Job', 'enabled'=>'1', 'position'=>505, 'notnull'=>1, 'visible'=>1,), + 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'JobPosition', 'enabled'=>'1', 'position'=>505, 'notnull'=>1, 'visible'=>1,), ); public $rowid; public $ref; diff --git a/htdocs/hrm/class/position.class.php b/htdocs/hrm/class/position.class.php index 19246dc2313..5d0c04a4f47 100644 --- a/htdocs/hrm/class/position.class.php +++ b/htdocs/hrm/class/position.class.php @@ -110,10 +110,10 @@ class Position extends CommonObject 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), 'fk_contrat' => array('type'=>'integer:Contrat:contrat/class/contrat.class.php', 'label'=>'fk_contrat', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>0,), 'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Employee', 'enabled'=>'1', 'position'=>55, 'notnull'=>1, 'visible'=>1, 'default'=>0), - 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'Job', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1,), + 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'JobPosition', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1,), 'date_start' => array('type'=>'date', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>51, 'notnull'=>1, 'visible'=>1,), 'date_end' => array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>52, 'notnull'=>0, 'visible'=>1,), - 'abort_comment' => array('type'=>'varchar(255)', 'label'=>'AbandonmentComment', 'enabled'=>'1', 'position'=>502, 'notnull'=>0, 'visible'=>1,), + 'abort_comment' => array('type'=>'varchar(255)', 'label'=>'AbandonmentComment', 'enabled'=>'getDolGlobalInt("HRM_JOB_POSITON_ENDING_COMMENT")', 'position'=>502, 'notnull'=>0, 'visible'=>1,), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>0,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>71, 'notnull'=>0, 'visible'=>0,), 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), diff --git a/htdocs/hrm/core/tpl/objectline_title.tpl.php b/htdocs/hrm/core/tpl/objectline_title.tpl.php index 3801288543a..ae835ea2bca 100644 --- a/htdocs/hrm/core/tpl/objectline_title.tpl.php +++ b/htdocs/hrm/core/tpl/objectline_title.tpl.php @@ -65,7 +65,7 @@ print '
    '.$langs->trans('Label').''.$langs->trans('Description').''.$langs->trans('EmployeeRank').''.$form->textwithpicto($langs->trans("Level"), $langs->trans('EmployeeRank')).'
    '; - print ''; - print ''; - print ''; - print ''; - print ''; - }*/ - - - if (!empty($object->lines)) { - $conf->modules_parts['tpl']['hrm']='/hrm/core/tpl/'; // Pour utilisation du tpl hrm sur cet écran - print '
    '.$langs->trans('Skill').''.$langs->trans('Description').''.$langs->trans('Rank').'
    '; - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, ''); - print '
    '; - } - - - - if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { - print '
    '; - - if ($object->status == $object::STATUS_DRAFT && $permissiontoadd) { - print '
    '; - print ''; - print '
    '; - } - } - - - print ''; - - print "\n"; - print "
    "; + if (!empty($conf->use_javascript_ajax) && $object->status == 0) { + include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'; } + + $conf->modules_parts['tpl']['hrm']='/hrm/core/tpl/'; // Pour utilisation du tpl hrm sur cet écran + + print '
    '; + if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { + print ''; + } + + //if (!empty($object->lines)) { + $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + //} + + // Form to add new line + /* + if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') { + if ($action != 'editline') { + // Add products/services form + + $parameters = array(); + $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + if (empty($reshook)) + $object->formAddObjectLine(1, $mysoc, $soc); + } + } + */ + + if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { + print '
    '; + } + print '
    '; + + print "\n"; + + print "
    "; } // list of comparison diff --git a/htdocs/hrm/evaluation_contact.php b/htdocs/hrm/evaluation_contact.php index 1c1d9ed26fd..4ea2e8e81be 100644 --- a/htdocs/hrm/evaluation_contact.php +++ b/htdocs/hrm/evaluation_contact.php @@ -31,8 +31,9 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; -require_once DOL_DOCUMENT_ROOT . '/hrm/class/evaluation.class.php'; -require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_evaluation.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/evaluation.class.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/lib/hrm_evaluation.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/job.class.php'; // Load translation files required by the page $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); @@ -138,43 +139,13 @@ if ($object->id) { $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
    '; - /* - // Ref customer - $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); - // Thirdparty - $morehtmlref.='
    '.$langs->trans('ThirdParty') . ' : ' . (is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : ''); - // Project - if (isModEnabled('project')) - { - $langs->load("projects"); - $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($permissiontoadd) - { - if ($action != 'classify') - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
    '; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
    '; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } - } else { - if (!empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref .= ': '.$proj->getNomUrl(); - } else { - $morehtmlref .= ''; - } - } - }*/ + $morehtmlref .= $langs->trans('Label').' : '.$object->label; + $u_position = new User(($db)); + $u_position->fetch($object->fk_user); + $morehtmlref .= '
    '.$langs->trans('Employee').' : '.$u_position->getNomUrl(1); + $job = new Job($db); + $job->fetch($object->fk_job); + $morehtmlref .= '
    '.$langs->trans('JobPosition').' : '.$job->getNomUrl(1); $morehtmlref .= '
    '; dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); diff --git a/htdocs/hrm/evaluation_document.php b/htdocs/hrm/evaluation_document.php index 23f9d260f0f..84bc6023291 100644 --- a/htdocs/hrm/evaluation_document.php +++ b/htdocs/hrm/evaluation_document.php @@ -33,9 +33,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; -require_once DOL_DOCUMENT_ROOT . '/hrm/class/evaluation.class.php'; -require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_evaluation.lib.php'; -require_once DOL_DOCUMENT_ROOT . '/hrm/class/job.class.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/evaluation.class.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/lib/hrm_evaluation.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/hrm/class/job.class.php'; // Load translation files required by the page $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); @@ -138,7 +138,7 @@ if ($object->id) { $morehtmlref .= '
    '.$langs->trans('Employee').' : '.$u_position->getNomUrl(1); $job = new Job($db); $job->fetch($object->fk_job); - $morehtmlref .= '
    '.$langs->trans('Job').' : '.$job->getNomUrl(1); + $morehtmlref .= '
    '.$langs->trans('JobPosition').' : '.$job->getNomUrl(1); $morehtmlref .= ''; dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/hrm/evaluation_list.php b/htdocs/hrm/evaluation_list.php index f475cef7af7..cf3272b894e 100644 --- a/htdocs/hrm/evaluation_list.php +++ b/htdocs/hrm/evaluation_list.php @@ -54,6 +54,7 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); // Load variable for pagination $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; diff --git a/htdocs/hrm/evaluation_note.php b/htdocs/hrm/evaluation_note.php index 5c02b533bb7..ff0921cc59e 100644 --- a/htdocs/hrm/evaluation_note.php +++ b/htdocs/hrm/evaluation_note.php @@ -113,7 +113,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= '
    '.$langs->trans('Employee').' : '.$u_position->getNomUrl(1); $job = new Job($db); $job->fetch($object->fk_job); - $morehtmlref .= '
    '.$langs->trans('Job').' : '.$job->getNomUrl(1); + $morehtmlref .= '
    '.$langs->trans('JobPosition').' : '.$job->getNomUrl(1); $morehtmlref .= ''; diff --git a/htdocs/hrm/lib/hrm.lib.php b/htdocs/hrm/lib/hrm.lib.php index 2fef293784d..88a851f0137 100644 --- a/htdocs/hrm/lib/hrm.lib.php +++ b/htdocs/hrm/lib/hrm.lib.php @@ -54,13 +54,13 @@ function hrmAdminPrepareHead() $head[$h][2] = 'establishments'; $h++; - $head[$h][0] = DOL_URL_ROOT . '/hrm/admin/evaluation_extrafields.php'; - $head[$h][1] = $langs->trans("EvaluationsExtraFields"); - $nbExtrafields = $extrafields->attributes['hrm_evaluation']['count']; + $head[$h][0] = DOL_URL_ROOT . '/hrm/admin/skill_extrafields.php'; + $head[$h][1] = $langs->trans("SkillsExtraFields"); + $nbExtrafields = $extrafields->attributes['hrm_skill']['count']; if ($nbExtrafields > 0) { $head[$h][1] .= ''.$nbExtrafields.''; } - $head[$h][2] = 'evaluationsAttributes'; + $head[$h][2] = 'skillsAttributes'; $h++; $head[$h][0] = DOL_URL_ROOT . '/hrm/admin/job_extrafields.php'; @@ -72,13 +72,13 @@ function hrmAdminPrepareHead() $head[$h][2] = 'jobsAttributes'; $h++; - $head[$h][0] = DOL_URL_ROOT . '/hrm/admin/skill_extrafields.php'; - $head[$h][1] = $langs->trans("SkillsExtraFields"); - $nbExtrafields = $extrafields->attributes['hrm_skill']['count']; + $head[$h][0] = DOL_URL_ROOT . '/hrm/admin/evaluation_extrafields.php'; + $head[$h][1] = $langs->trans("EvaluationsExtraFields"); + $nbExtrafields = $extrafields->attributes['hrm_evaluation']['count']; if ($nbExtrafields > 0) { $head[$h][1] .= ''.$nbExtrafields.''; } - $head[$h][2] = 'skillsAttributes'; + $head[$h][2] = 'evaluationsAttributes'; $h++; // Show more tabs from modules diff --git a/htdocs/hrm/position_list.php b/htdocs/hrm/position_list.php index e79af867a74..739dc8bee02 100644 --- a/htdocs/hrm/position_list.php +++ b/htdocs/hrm/position_list.php @@ -54,6 +54,7 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); // Load variable for pagination $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; @@ -115,11 +116,11 @@ $arrayfields = array(); foreach ($object->fields as $key => $val) { // If $val['visible']==0, then we never show the field if (!empty($val['visible'])) { - $visible = (int) dol_eval($val['visible'], 1, 1, '1'); + $visible = (int) dol_eval($val['visible'], 1); $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1, 1, '1')), + 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -136,18 +137,15 @@ $permissiontoread = $user->rights->hrm->all->read; $permissiontoadd = $user->rights->hrm->all->write; $permissiontodelete = $user->rights->hrm->all->delete; -// Security check -if (empty($conf->hrm->enabled)) { - accessforbidden('Module not enabled'); -} - // Security check (enable the most restrictive one) if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) accessforbidden(); //$socid = 0; if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); //restrictedArea($user, $object->element, $object->id, $object->table_element, '', 'fk_soc', 'rowid', $isdraft); -if (empty($conf->hrm->enabled)) accessforbidden(); +if (!isModEnabled('hrm')) { + accessforbidden('Module hrm not enabled'); +} if (!$permissiontoread) accessforbidden(); @@ -250,23 +248,23 @@ foreach ($search as $key => $val) { } $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) { - if ($search[$key] == '-1' || $search[$key] === '0') { + if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) { $search[$key] = ''; } $mode_search = 2; } if ($search[$key] != '') { - $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search)); + $sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); } } else { if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { $columnName=preg_replace('/(_dtstart|_dtend)$/', '', $key); if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) { if (preg_match('/_dtstart$/', $key)) { - $sql .= " AND t." . $columnName . " >= '" . $db->idate($search[$key]) . "'"; + $sql .= " AND t.".$db->escape($columnName)." >= '".$db->idate($search[$key])."'"; } if (preg_match('/_dtend$/', $key)) { - $sql .= " AND t." . $columnName . " <= '" . $db->idate($search[$key]) . "'"; + $sql .= " AND t.".$db->escape($columnName)." <= '".$db->idate($search[$key])."'"; } } } @@ -290,7 +288,7 @@ $sql .= $hookmanager->resPrint; /* If a group by is required $sql .= " GROUP BY "; foreach($object->fields as $key => $val) { - $sql .= "t.".$key.", "; + $sql .= "t.".$db->escape($key).", "; } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { @@ -305,8 +303,6 @@ $sql .= $hookmanager->resPrint; $sql = preg_replace('/,\s*$/', '', $sql); */ -$sql .= $db->order($sortfield, $sortorder); - // Count total nb of records $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { @@ -316,24 +312,24 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $page = 0; $offset = 0; } + $db->free($resql); } -// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. -if (is_numeric($nbtotalofrecords) && ($limit > $nbtotalofrecords || empty($limit))) { - $num = $nbtotalofrecords; -} else { - if ($limit) { - $sql .= $db->plimit($limit + 1, $offset); - } - $resql = $db->query($sql); - if (!$resql) { - dol_print_error($db); - exit; - } - - $num = $db->num_rows($resql); +// Complete request and execute it with limit +$sql .= $db->order($sortfield, $sortorder); +if ($limit) { + $sql .= $db->plimit($limit + 1, $offset); } +$resql = $db->query($sql); +if (!$resql) { + dol_print_error($db); + exit; +} + +$num = $db->num_rows($resql); + + // Direct jump if only one record found if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) { $obj = $db->fetch_object($resql); @@ -366,6 +362,9 @@ llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', ''); $arrayofselected = is_array($toselect) ? $toselect : array(); $param = ''; +if (!empty($mode)) { + $param .= '&mode='.urlencode($mode); +} if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); } @@ -374,11 +373,17 @@ if ($limit > 0 && $limit != $conf->liste_limit) { } foreach ($search as $key => $val) { - if (is_array($search[$key]) && count($search[$key])) { + if (is_array($search[$key])) { foreach ($search[$key] as $skey) { - $param .= '&search_'.$key.'[]='.urlencode($skey); + if ($skey != '') { + $param .= '&search_'.$key.'[]='.urlencode($skey); + } } - } else { + } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { + $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); + $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); + $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } } @@ -399,7 +404,7 @@ $arrayofmassactions = array( //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); -if ($permissiontodelete) { +if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { @@ -418,6 +423,7 @@ print ''; print ''; print ''; print ''; +print ''; $newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/hrm/position.php', 1).'?action=create', '', $permissiontoadd); @@ -431,9 +437,12 @@ $trackid = 'xxxx'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; if ($search_all) { + $setupstring = ''; foreach ($fieldstosearchall as $key => $val) { $fieldstosearchall[$key] = $langs->trans($val); + $setupstring .= $key."=".$val.";"; } + print ''."\n"; print '
    '.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'
    '; } @@ -457,7 +466,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
    '; // You can use div-table-responsive-no-min if you dont need reserved height for your table @@ -467,7 +476,15 @@ print ''; +// Action column +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} foreach ($object->fields as $key => $val) { + $searchkey = empty($search[$key]) ? '' : $search[$key]; $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if ($key == 'status') { $cssforfield .= ($cssforfield ? ' ' : '').'center'; @@ -475,7 +492,7 @@ foreach ($object->fields as $key => $val) { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif (in_array($val['type'], array('timestamp'))) { $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; - } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) { + } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'rowid' && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) { $cssforfield .= ($cssforfield ? ' ' : '').'right'; } if (!empty($arrayfields['t.'.$key]['checked'])) { @@ -483,9 +500,7 @@ foreach ($object->fields as $key => $val) { if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { print $form->selectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); } elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:') === 0)) { - print $object->showInputField($val, $key, (isset($search[$key]) ? $search[$key] : ''), '', '', 'search_', 'maxwidth125', 1); - } elseif (!preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - print ''; + print $object->showInputField($val, $key, (isset($search[$key]) ? $search[$key] : ''), '', '', 'search_', $cssforfield.' maxwidth250', 1); } elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { print '
    '; print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); @@ -493,6 +508,12 @@ foreach ($object->fields as $key => $val) { print '
    '; print $form->selectDate($search[$key.'_dtend'] ? $search[$key.'_dtend'] : '', "search_".$key."_dtend", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); print '
    '; + } elseif ($key == 'lang') { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; + $formadmin = new FormAdmin($db); + print $formadmin->select_language($search[$key], 'search_lang', 0, null, 1, 0, 0, 'minwidth150 maxwidth200', 2); + } else { + print ''; } print ''; } @@ -505,16 +526,23 @@ $parameters = array('arrayfields'=>$arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column -print '
    '; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; +} print ''."\n"; +$totalarray = array(); +$totalarray['nbfield'] = 0; // Fields title label // -------------------------------------------------------------------- print ''; +if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +} foreach ($object->fields as $key => $val) { $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if ($key == 'status') { @@ -523,21 +551,26 @@ foreach ($object->fields as $key => $val) { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif (in_array($val['type'], array('timestamp'))) { $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; - } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) { + } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'rowid' && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) { $cssforfield .= ($cssforfield ? ' ' : '').'right'; } + $cssforfield = preg_replace('/small\s*/', '', $cssforfield); // the 'small' css must not be used for the title label if (!empty($arrayfields['t.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield ? 'class="'.$cssforfield.'"' : ''), $sortfield, $sortorder, ($cssforfield ? $cssforfield.' ' : ''))."\n"; + $totalarray['nbfield']++; } } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column -print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +} +$totalarray['nbfield']++; print ''."\n"; @@ -555,9 +588,11 @@ if (isset($extrafields->attributes[$object->table_element]['computed']) && is_ar // Loop on record // -------------------------------------------------------------------- $i = 0; +$savnbfield = $totalarray['nbfield']; $totalarray = array(); $totalarray['nbfield'] = 0; -while ($i < ($limit ? min($num, $limit) : $num)) { +$imaxinloop = ($limit ? min($num, $limit) : $num); +while ($i < $imaxinloop) { $obj = $db->fetch_object($resql); if (empty($obj)) { break; // Should not happen @@ -566,75 +601,107 @@ while ($i < ($limit ? min($num, $limit) : $num)) { // Store properties in $object $object->setVarsFromFetchObj($obj); - // Show here line of result - print ''; - foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); - if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { - $cssforfield .= ($cssforfield ? ' ' : '').'center'; - } elseif ($key == 'status') { - $cssforfield .= ($cssforfield ? ' ' : '').'center'; + if ($mode == 'kanban') { + if ($i == 0) { + print ''; } - - if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('rowid', 'status')) && empty($val['arrayofkeyval'])) { - $cssforfield .= ($cssforfield ? ' ' : '').'right'; - } - //if (in_array($key, array('fk_soc', 'fk_user', 'fk_warehouse'))) $cssforfield = 'tdoverflowmax100'; - - if (!empty($arrayfields['t.'.$key]['checked'])) { - print ''; - if ($key == 'status') { - print $object->getLibStatut(5); - } elseif ($key == 'rowid') { - print $object->getNomUrl(1); - } else { - print $object->showOutputField($val, $key, $object->$key, ''); + } else { + // Show here line of result + $j = 0; + print ''; + // Action column + if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; - if (!$i) { - $totalarray['nbfield']++; - } - if (!empty($val['isameasure']) && $val['isameasure'] == 1) { - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key; - } - if (!isset($totalarray['val'])) { - $totalarray['val'] = array(); - } - if (!isset($totalarray['val']['t.'.$key])) { - $totalarray['val']['t.'.$key] = 0; - } - $totalarray['val']['t.'.$key] += $object->$key; - } } - } - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; - // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - // Action column - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + foreach ($object->fields as $key => $val) { + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); + if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { + $cssforfield .= ($cssforfield ? ' ' : '').'center'; + } elseif ($key == 'status') { + $cssforfield .= ($cssforfield ? ' ' : '').'center'; + } - print ''."\n"; + if (in_array($val['type'], array('timestamp'))) { + $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; + } elseif ($key == 'ref') { + $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; + } + + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('rowid', 'status')) && empty($val['arrayofkeyval'])) { + $cssforfield .= ($cssforfield ? ' ' : '').'right'; + } + //if (in_array($key, array('fk_soc', 'fk_user', 'fk_warehouse'))) $cssforfield = 'tdoverflowmax100'; + + if (!empty($arrayfields['t.'.$key]['checked'])) { + print ''; + if ($key == 'status') { + print $object->getLibStatut(5); + } elseif ($key == 'rowid') { + print $object->showOutputField($val, $key, $object->id, ''); + } else { + print $object->showOutputField($val, $key, $object->$key, ''); + } + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + if (!empty($val['isameasure']) && $val['isameasure'] == 1) { + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key; + } + if (!isset($totalarray['val'])) { + $totalarray['val'] = array(); + } + if (!isset($totalarray['val']['t.'.$key])) { + $totalarray['val']['t.'.$key] = 0; + } + $totalarray['val']['t.'.$key] += $object->$key; + } + } + } + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Action column + if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { + print ''; + } + if (!$i) { + $totalarray['nbfield']++; + } + + print ''."\n"; + } $i++; } @@ -650,14 +717,14 @@ if ($num == 0) { $colspan++; } } - print ''; + print ''; } $db->free($resql); $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); -$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
    '; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; -$searchpicto = $form->showFilterButtons(); -print $searchpicto; -print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
    '; + print '
    '; } - - if (in_array($val['type'], array('timestamp'))) { - $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; - } elseif ($key == 'ref') { - $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; + // Output Kanban + print $object->getKanbanView(''); + if ($i == ($imaxinloop - 1)) { + print '
    '; + print '
    '; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($object->id, $arrayofselected)) { + $selected = 1; + } + print ''; } print ''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($object->id, $arrayofselected)) { - $selected = 1; - } - print ''; - } - print '
    '; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($object->id, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print '
    '.$langs->trans("NoRecordFound").'
    '.$langs->trans("NoRecordFound").'
    '."\n"; diff --git a/htdocs/hrm/skill_list.php b/htdocs/hrm/skill_list.php index 664d54212a3..ddf385b170e 100644 --- a/htdocs/hrm/skill_list.php +++ b/htdocs/hrm/skill_list.php @@ -344,21 +344,6 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', ''); -// Example : Adding jquery code -// print ''; - $arrayofselected = is_array($toselect) ? $toselect : array(); $param = ''; diff --git a/htdocs/includes/adodbtime/adodb-time.inc.php b/htdocs/includes/adodbtime/adodb-time.inc.php index 030196db275..1dfa97929a2 100644 --- a/htdocs/includes/adodbtime/adodb-time.inc.php +++ b/htdocs/includes/adodbtime/adodb-time.inc.php @@ -1,8 +1,8 @@ admin && empty($conf->global->MAIN_REMOVE_INSTALL_WARNING)) { } if ($message) { - print $message; + print $message.'
    '; //$message.='
    '; //print info_admin($langs->trans("WarningUntilDirRemoved",DOL_DOCUMENT_ROOT."/install")); } @@ -194,7 +194,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { $dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed"); } - // Number of customer orders a deal + // Number of sales orders a deal if (isModEnabled('commande') && empty($conf->global->MAIN_DISABLE_BLOCK_CUSTOMER) && $user->hasRight('commande', 'lire')) { include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $board = new Commande($db); @@ -558,7 +558,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { } $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); - $textLateTitle .= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + $textLateTitle .= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil(empty($board->warning_delay) ? 0 : $board->warning_delay) >= 0 ? '+' : '').ceil(empty($board->warning_delay) ? 0 : $board->warning_delay).' '.$langs->trans("days").')'; if ($board->id == 'bank_account') { $textLateTitle .= '
    '.$langs->trans("IfYouDontReconcileDisableProperty", $langs->transnoentitiesnoconv("Conciliable")).''; diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip deleted file mode 100644 index e7f645d168a..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-corporate.zip and /dev/null differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/LICENSE b/htdocs/install/doctemplates/websites/website_template-corporate/LICENSE new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/LICENSE @@ -0,0 +1 @@ + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/README.md b/htdocs/install/doctemplates/websites/website_template-corporate/README.md new file mode 100644 index 00000000000..12ac388316c --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/README.md @@ -0,0 +1 @@ +This template has been developed by DoliCloud (https://www.dolicloud.com) for Dolibarr ERP CRM. diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-corporate/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-corporate/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/LICENSE b/htdocs/install/doctemplates/websites/website_template-corporate/containers/LICENSE new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/LICENSE @@ -0,0 +1 @@ + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/README.md b/htdocs/install/doctemplates/websites/website_template-corporate/containers/README.md new file mode 100644 index 00000000000..12ac388316c --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/README.md @@ -0,0 +1 @@ +This template has been developed by DoliCloud (https://www.dolicloud.com) for Dolibarr ERP CRM. diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-company-is-now-on-dolibarr.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-company-is-now-on-dolibarr.php new file mode 100644 index 00000000000..99c4f10314b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-company-is-now-on-dolibarr.php @@ -0,0 +1,5 @@ +ref.'/page180.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-new-web-site-has-been-launched.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-new-web-site-has-been-launched.php new file mode 100644 index 00000000000..248bb708f48 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog-our-new-web-site-has-been-launched.php @@ -0,0 +1,5 @@ +ref.'/page181.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog.php new file mode 100644 index 00000000000..43a0212d3f6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/blog.php @@ -0,0 +1,5 @@ +ref.'/page179.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/careers.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/careers.php new file mode 100644 index 00000000000..a2c8a7165a7 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/careers.php @@ -0,0 +1,5 @@ +ref.'/page182.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/carriere.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/carriere.php new file mode 100644 index 00000000000..f32f4818ac4 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/carriere.php @@ -0,0 +1,5 @@ +ref.'/page183.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/clients-testimonials.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/clients-testimonials.php new file mode 100644 index 00000000000..2c01e32e135 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/clients-testimonials.php @@ -0,0 +1,5 @@ +ref.'/page184.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/contact.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/contact.php new file mode 100644 index 00000000000..2c9c69905fa --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/contact.php @@ -0,0 +1,5 @@ +ref.'/page185.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/faq.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/faq.php new file mode 100644 index 00000000000..94f01880f4e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/faq.php @@ -0,0 +1,5 @@ +ref.'/page186.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/footer.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/footer.php new file mode 100644 index 00000000000..533ddc027a2 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/footer.php @@ -0,0 +1,5 @@ +ref.'/page187.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/header.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/header.php new file mode 100644 index 00000000000..831c7ded51a --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/header.php @@ -0,0 +1,5 @@ +ref.'/page188.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/home.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/home.php new file mode 100644 index 00000000000..86a6639e327 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/home.php @@ -0,0 +1,5 @@ +ref.'/page189.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-corporate/containers/htmlheader.html new file mode 100644 index 00000000000..948c6713c3d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/htmlheader.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/index.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/index.php new file mode 100644 index 00000000000..5ac34065524 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/index.php @@ -0,0 +1,11 @@ + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/javascript.js.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/javascript.js.php new file mode 100644 index 00000000000..f58102cf00b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/javascript.js.php @@ -0,0 +1,13 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/manifest.json.php new file mode 100644 index 00000000000..b61531d6c11 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/manifest.json.php @@ -0,0 +1,13 @@ + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/our-team.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/our-team.php new file mode 100644 index 00000000000..1afe5d1523d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/our-team.php @@ -0,0 +1,5 @@ +ref.'/page190.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page179.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page179.tpl.php new file mode 100644 index 00000000000..7a474b5595e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page179.tpl.php @@ -0,0 +1,99 @@ + + + +Blog + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    The latest news... +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +

    + + load("main"); + $fuser = new User($db); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'status'=>1, 'lang'=>'null,'.$websitepage->lang)); + foreach($arrayofblogs as $blog) + { + print ''; + } + ?> +
    +
    + +

    + + + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page180.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page180.tpl.php new file mode 100644 index 00000000000..538fc1764e4 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page180.tpl.php @@ -0,0 +1,84 @@ + + + +Our company is now on Dolibarr ERP CRM + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    title; ?> +
    +
    +
    +
    +
    +
    +
    +
    + +
    +


    + Like several thousands of companies, our company (name ?>) has moved all its information system to Dolibarr ERP CRM. More than 20 applications have been replaced by only one, easier to use and fully integrated. + This is an important step in improving all of our services. + +


    + +
    + +

    +
    Screenshot of our new Open Source solution
    +
    + + + +





    +
    + + + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page181.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page181.tpl.php new file mode 100644 index 00000000000..a8a484ccf44 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page181.tpl.php @@ -0,0 +1,85 @@ + + + +Our new web site has been launched + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    title; ?> +
    +
    +
    +
    +
    +
    +
    +
    + +
    +





    + + + Our new website, based on Dolibarr CMS, has been launched.
    + Now it is modern and directly integrated with the internal management tools of the company. Many new online services will be available for our customers... + + +


    + +
    + +

    +
    Theme of our new web site
    +
    + + +





    +
    + + + + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page182.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page182.tpl.php new file mode 100644 index 00000000000..49735b4f21a --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page182.tpl.php @@ -0,0 +1,129 @@ + + + +Careers + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page183.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page183.tpl.php new file mode 100644 index 00000000000..bf4d4c92682 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page183.tpl.php @@ -0,0 +1,84 @@ + + + +Carrière + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Offres d'emploi +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +Nous n'avons pas d'offres d'emploi ouvertes en ce moment...
    +
    +
    +
    +
    +
    +
    + + +

    + + + +
    + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page184.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page184.tpl.php new file mode 100644 index 00000000000..fca2346bede --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page184.tpl.php @@ -0,0 +1,78 @@ + + + +Clients Testimonials + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Testimonials +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +

    +

    What they say about us

    +



    + Send us your testimonial (by email to email; ?>) +



    +

    +
    + +

    + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page185.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page185.tpl.php new file mode 100644 index 00000000000..f478da7021f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page185.tpl.php @@ -0,0 +1,84 @@ + + + +Contact + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Contact +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    Contact us:



    + email ?>
    + getFullAddress() ?>
    +
    +
    + + + +
    +
    + +
    + +


    + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page186.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page186.tpl.php new file mode 100644 index 00000000000..111e4615774 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page186.tpl.php @@ -0,0 +1,91 @@ + + + +FAQ + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    FAQs +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +


    Frequently Asked Questions

    +
    +
    +
    +

    How can I contact you ?


    +You can contact us by using this page. +
    +
    +
    +

    What is your privacy policy ?


    +You may find information about our privacy policy on this page. + + +



    + +
    +
    + + +

    + + + +
    + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page187.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page187.tpl.php new file mode 100644 index 00000000000..615a2214885 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page187.tpl.php @@ -0,0 +1,132 @@ + + + +Footer + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    + + componentSelectLang('auto', $weblangs, 'margin-top-10'); ?> +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    getFullAddress(1, '
    ', 1); ?>
    +
    +
    +
    +

    Follow Us:

    +
      + socialnetworks as $key => $value) { + print '
    • '; + } ?> +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + Website generated and powered by Dolibarr ERP & CRM +
    +
    + +
    + + + +
    + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page188.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page188.tpl.php new file mode 100644 index 00000000000..99e9ddd3e9f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page188.tpl.php @@ -0,0 +1,134 @@ + + + +Header and Top Menu + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page189.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page189.tpl.php new file mode 100644 index 00000000000..8e0d8fbbea5 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page189.tpl.php @@ -0,0 +1,576 @@ + + + +Home + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Boost your business +
    +
    +

    We provide powerful solutions for all businesses

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
     Best prices on the market  +
    +
    +

    Our optimized processes allows us to provide you very competitive prices

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Our sales representative are also technicians.

    +
    +
    +
    +
    +
    + +
    +

    Take a look at our offers...

    +
    +
    +
    +
    +
    + +
    +

    Our customer-supplier relationship is very appreciated by our customers

    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +

    We continue to follow and assist you after the sale. Contact us at any time.

    +
    +
    +
    +
    +
    + + + +
    +
    +

    Looking for

    +

    a high quality service?

    +

    With a lot of experience, hiring us is a security for your business!

    +
    +
    +
    11
    +
    Years of Experience
    +
    +
    +
    + query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?> +
    +
    Experts
    +
    +
    +
    + query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?> +
    +
    Trusted Clients
    +
    +
    +
    + +
    +
    +
    + + + + +
    +
    + +
    +
    + + + +
    +
    +

    our team

    +
    +
    + +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +

    Request a callback

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +

    successful cases

    + +
    +
    +
    +
    +
    + + + +
    +
    +

    Latest News

    +
    + fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, array('type_container'=>'blogpost', 'status'=>1, 'lang'=>'null,'.$websitepage->lang)); + foreach($arrayofblogs as $blog) + { + ?> + + + +
    +
    +
    + + + + + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page190.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page190.tpl.php new file mode 100644 index 00000000000..63255c34db5 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page190.tpl.php @@ -0,0 +1,115 @@ + + + +Our team + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Our team +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +

    +

    The crew...




    + query($sql); + if (! $resql) dol_print_error($db); + while ($obj = $db->fetch_object($resql)) + { + $arrayofusers[]=$obj->rowid; + } + + print '
    '; + foreach($arrayofusers as $id) + { + $fuser->fetch($id); + + print '
    '; + print '
    '; + print '
    '; + if ($fuser->photo) print Form::showphoto('userphoto', $fuser, 100, 0, 0, 'photowithmargin', '', 0); + //print ''; + else print ''; + print '
    '; + print '
    '; + print '
    '.$fuser->firstname.'
    '; + print '
      '; + //print '
    • September 24, 2018
    • '; + if ($fuser->job) print '
    • '.$fuser->job.'
    • '; + else print '
    • '; + print '
    '; + print '
    '; + print '
    '; + print '
    '; + } + print '
    '; + + ?> +
    +
    + +

    + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page191.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page191.tpl.php new file mode 100644 index 00000000000..b52ee75825e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page191.tpl.php @@ -0,0 +1,110 @@ + + + +Partners + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Partners +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    Our partners...

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +

    + + + +
    + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page192.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page192.tpl.php new file mode 100644 index 00000000000..4f17f5da805 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page192.tpl.php @@ -0,0 +1,186 @@ + + + +Pricing + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Our plans +
    +
    +
    +
    +
    +
    +
    +
    + + + + + +
    +
    + +
    +
    + + + +

    + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page193.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page193.tpl.php new file mode 100644 index 00000000000..4e6f65e80a5 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page193.tpl.php @@ -0,0 +1,100 @@ + + + +Privacy Policies + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Privacy Policy +
    +
    +
    +
    +
    +
    +
    +
    + +


    + +
    +
    +

    Information collected and used


    +

    * Your customer information (email, phone, business name, first and last name of contact, address, postal code, country and VAT number) are stored when you become a customer. This information allows us to bill you. +

    * If you paid using our online service, we also store the last 4 digits of your card. The full details of your credit card is stored by our payment provider Stripe (the world leader in online payment).

    +

    * You have the option to request the deletion of your data and the above information at any time (except data required y fiscal tracking rules, like your invoices).

    +

    * The Privacy Policies and GDPR referral contact for our services is: global->MAIN_INFO_GDPR; ?>

    +


    +

    Data Storage and Backups


    +

    * The storage of collected data (see 'Information collected and used') is done in a database.

    +

    * We made one backup every week. Only 4 weeks are kept.

    +


    +

    Subcontractor


    +

    * Our services relies on the following subcontractors and service:
    +** The host of computer servers, which is ABC company. These servers are hosted in US. No customer information is communicated to this subcontractor who only provides the hardware and network layer, the installation and operation being carried out by us directly.
    +** The online payment service Stripe, which is used, to ensure regular payment of subscription or your invoices paid online.

    +


    +

    Software Protection


    +

    * Our services runs on Linux Ubuntu systems and software. They benefit from regular security updates when the operating system editor (Ubuntu Canonical) publishes them.

    +

    * Our services are accessible in HTTPS (HTTP encrypted) only, encrypted with SHA256 certificates.

    +

    * Our technical platform are protected by various solutions.

    +


    +

    Data theft


    +

    * In case of suspicion of a theft of the data we have collected (see first point 'Information collected and used'), customers will be informed by email, at email corresponding to their customer account

    +

     

    +
    +
    + + + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page194.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page194.tpl.php new file mode 100644 index 00000000000..e4aa79e1291 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page194.tpl.php @@ -0,0 +1,84 @@ + + + +Product P + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Product P +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +This is a description page of our product P...
    +
    +
    +
    +
    +
    +
    + + +

    + + + +
    + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page195.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page195.tpl.php new file mode 100644 index 00000000000..0e1774d931b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page195.tpl.php @@ -0,0 +1,112 @@ + + + +Search Page + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Search +
    +
    +
    +
    +
    +
    +
    +
    + +


    + +
    + +
    + +
    +
    + + load("main"); + + if (function_exists('getPagesFromSearchCriterias')) + { + if (GETPOSTISSET('s')) + { + $listofpages = getPagesFromSearchCriterias('page', 'meta', GETPOST('s', 'alphanohtml')); + if ($listofpages['code'] == 'OK') + { + foreach($listofpages['list'] as $websitepagefound) + { + print '
    '.$websitepagefound->title.' - '.$websitepagefound->description.'
    '; + } + } + else + { + // If error, show message + print $listofpages['message']; + } + } + } + else + { + print $weblangs->trans("FeatureNotYetAvailable"); + } + ?> + +





    +
    + + + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/page196.tpl.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page196.tpl.php new file mode 100644 index 00000000000..d52718bcfc8 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/page196.tpl.php @@ -0,0 +1,82 @@ + + + +Service S + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    Service S +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +This is a description page of our service S...
    +
    +
    +
    +
    +
    +
    + + +

    + + + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/partners.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/partners.php new file mode 100644 index 00000000000..44e501d9f4d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/partners.php @@ -0,0 +1,5 @@ +ref.'/page191.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/pricing.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/pricing.php new file mode 100644 index 00000000000..d2866cadf43 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/pricing.php @@ -0,0 +1,5 @@ +ref.'/page192.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/privacy-policies.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/privacy-policies.php new file mode 100644 index 00000000000..59dc87944fe --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/privacy-policies.php @@ -0,0 +1,5 @@ +ref.'/page193.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/product-p.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/product-p.php new file mode 100644 index 00000000000..beac94b27c8 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/product-p.php @@ -0,0 +1,5 @@ +ref.'/page194.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-corporate/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/search.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/search.php new file mode 100644 index 00000000000..359c5bf3b26 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/search.php @@ -0,0 +1,5 @@ +ref.'/page195.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/service-s.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/service-s.php new file mode 100644 index 00000000000..f69f6e7a13e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/service-s.php @@ -0,0 +1,5 @@ +ref.'/page196.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/styles.css.php new file mode 100644 index 00000000000..3307c499765 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/styles.css.php @@ -0,0 +1,20608 @@ + +/* CSS content (all pages) */ +body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } +.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} +.bodywebsite a:focus, +.bodywebsite button:focus { + outline: none !important; +} +.bodywebsite button::-moz-focus-inner { + border: 0; +} +.bodywebsite :focus { + outline: none; +} +.bodywebsite input, +.bodywebsite select, +.bodywebsite textarea { + outline: 0; +} +.bodywebsite p { + margin: 0; +} +.bodywebsite q { + font-size: 18px; + color: #fff; +} +.bodywebsite dl { + margin-bottom: 0; +} +.bodywebsite dt { + font-weight: 400; +} +html .bodywebsite p a:hover { + text-decoration: none; +} +.bodywebsite form { + margin-bottom: 0; +} +.bodywebsite .text-left { + text-align: left; +} +.bodywebsite .text-center { + text-align: center; +} +.bodywebsite .text-right { + text-align: right; +} +.bodywebsite .page .text-middle { + vertical-align: middle; +} +.bodywebsite .centpercent { + width: 100%; +} +.bodywebsite .page-head { + position: relative; + z-index: 90; + /* must be lower than 100 */ + background-color: #fff; +} +.bodywebsite .page-content { + position: relative; + z-index: 1; +} +.bodywebsite .page-foot { + background-color: #000; +} +.bodywebsite input, +.bodywebsite button, +.bodywebsite select, +.bodywebsite textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +.bodywebsite a { + display: inline-block; + text-decoration: none; + transition: 0.33s all ease-out; +} +.bodywebsite a, +.bodywebsite a:active, +.bodywebsite a:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite h3 a, +.bodywebsite h3 a:active +{ + font-weight: normal !important; +} +.bodywebsite a:hover, +.bodywebsite a:focus { + color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; + text-decoration: none; +} +.bodywebsite a:focus { + outline: 0; +} +.bodywebsite a[href*='callto'], +.bodywebsite a[href*='mailto'] { + white-space: nowrap; +} +.bodywebsite img { + vertical-align: middle; + max-width: 100%; +} +.bodywebsite .img-responsive { + max-width: 100%; + height: auto; +} +.bodywebsite .img-circle { + border-radius: 50%; +} +.bodywebsite hr { + margin-top: 0; + margin-bottom: 0; + border: 0; + border-top: 1px solid #2a2b2b; +} +.bodywebsite .margin-lr-30 { + margin-left: 30px !important; + margin-right: 30px !important; +} +.bodywebsite .unit-left, +.bodywebsite .unit-body { + white-space: nowrap; + display: inline-block; + vertical-align: middle; +} +.bodywebsite .unit-left { + padding-right: 10px; +} +.bodywebsite [role="button"] { + cursor: pointer; +} +.bodywebsite #sectionnews .nohover { + color: #000; +} +.bodywebsite .blog-box { + box-shadow: -1px -1px 12px 5px rgba(85, 85, 85, 0.1) !important; +} +.bodywebsite .blog-box:hover { + box-shadow: -1px -1px 12px 5px rgba(65, 65, 65, 0.3) !important; +} +.bodywebsite .margin-top-5 { + margin-top: 5px !important; +} +.bodywebsite .margin-top-10 { + margin-top: 10px !important; +} +.bodywebsite .rights { + display: inline-block; + margin: 0; + line-height: 1.5; + letter-spacing: .025em; + vertical-align: baseline; +} +.bodywebsite .rights * { + display: inline; + margin-right: .25em; +} +.bodywebsite .page-foot-default .rights { + color: #fff; + font-weight: 300; +} +.bodywebsite .page-foot .brand + * { + margin-top: 22px; +} +.bodywebsite .page-foot * + .link-block { + margin-top: 15px; +} +.bodywebsite .page-foot .footer-title + * { + margin-top: 30px; +} +.bodywebsite .page-foot .contact-info * + .unit { + margin-top: 15px; +} +.bodywebsite .privacy-link { + margin-top: 30px; +} +.bodywebsite .one-page-section * + .group-xl { + margin-top: 40px; +} +@media (min-width: 768px) { + .bodywebsite .one-page-section * + .group-xl { + margin-top: 60px; + } +} +@media (min-width: 1200px) { + .bodywebsite .one-page-section * + .group-xl { + margin-top: 100px; + } +} +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6, +.bodywebsite .h1, +.bodywebsite .h2, +.bodywebsite .h3, +.bodywebsite .h4, +.bodywebsite .h5, +.bodywebsite .h6 { + margin-top: 0; + margin-bottom: 0; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-weight: 700; + color: #000; +} +.bodywebsite h1 > span, +.bodywebsite h2 > span, +.bodywebsite h3 > span, +.bodywebsite h4 > span, +.bodywebsite h5 > span, +.bodywebsite h6 > span, +.bodywebsite .h1 > span, +.bodywebsite .h2 > span, +.bodywebsite .h3 > span, +.bodywebsite .h4 > span, +.bodywebsite .h5 > span, +.bodywebsite .h6 > span { + display: inline-block; + font-size: inherit; +} +.bodywebsite h1 a, +.bodywebsite h2 a, +.bodywebsite h3 a, +.bodywebsite h4 a, +.bodywebsite h5 a, +.bodywebsite h6 a, +.bodywebsite .h1 a, +.bodywebsite .h2 a, +.bodywebsite .h3 a, +.bodywebsite .h4 a, +.bodywebsite .h5 a, +.bodywebsite .h6 a { + display: inline; + font: inherit; + letter-spacing: inherit; + transition: .33s all ease; +} +.bodywebsite h1 a:hover, +.bodywebsite h2 a:hover, +.bodywebsite h3 a:hover, +.bodywebsite h4 a:hover, +.bodywebsite h5 a:hover, +.bodywebsite h6 a:hover, +.bodywebsite .h1 a:hover, +.bodywebsite .h2 a:hover, +.bodywebsite .h3 a:hover, +.bodywebsite .h4 a:hover, +.bodywebsite .h5 a:hover, +.bodywebsite .h6 a:hover { + color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; +} +.bodywebsite h1, +.bodywebsite .h1 { + font-size: 18px; + line-height: 1.35; + text-transform: uppercase; +} +@media (min-width: 1200px) { + .bodywebsite h1, + .bodywebsite .h1 { + line-height: 1.2; + font-size: 33px; + } +} +.bodywebsite h1.small, +.bodywebsite .h1.small { + font-size: 40px; +} +@media (min-width: 768px) { + .bodywebsite h1.small, + .bodywebsite .h1.small { + font-size: 40px; + } +} +@media (min-width: 992px) { + .bodywebsite h1.small, + .bodywebsite .h1.small { + font-size: 60px; + } +} +@media (min-width: 1200px) { + .bodywebsite h1.small, + .bodywebsite .h1.small { + font-size: 72px; + line-height: 1.2; + } +} +.bodywebsite h2, +.bodywebsite .h2 { + font-weight: 500; + font-size: 15px; + line-height: 1.2; +} +@media (min-width: 576px) { + .bodywebsite h2, + .bodywebsite .h2 { + line-height: 1.33333; + font-size: 18px; + } +} +.bodywebsite .text-big-18 { + font-size: 18px; +} +.bodywebsite .text-big-19 { + font-size: 19px; +} +.bodywebsite .text-small { + font-size: 12px; +} +.bodywebsite .text-small-16 { + font-size: 16px; +} +.bodywebsite small, +.bodywebsite .small { + font-size: 12px; + line-height: 18px; +} +.bodywebsite code { + padding: 5px 7px; + font-size: 75%; + color: #fe4a21; + background-color: #f9f9f9; + border-radius: 2px; +} +.bodywebsite em { + font-family: Helvetica, Arial, sans-serif; + font-size: inherit; + font-style: italic; + font-weight: 700; + line-height: inherit; + color: #767877; +} +.bodywebsite address { + margin-top: 0; + margin-bottom: 0; +} +.bodywebsite .context-dark, +.bodywebsite .bg-black, +.bodywebsite .bg-accent { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .context-dark a, +.bodywebsite .bg-black a, +.bodywebsite .bg-accent a, +.bodywebsite .bg-black a:active, +.bodywebsite .bg-accent a:active, +.bodywebsite .context-dark a:focus, +.bodywebsite .bg-black a:focus, +.bodywebsite .bg-accent a:focus, +.bodywebsite .bg-cello a:focus { + color: #fff; +} +.bodywebsite .context-dark a:hover, +.bodywebsite .bg-black a:hover, +.bodywebsite .bg-accent a:hover +{ + color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; +} +.bodywebsite .context-dark .text-extra-large-bordered, +.bodywebsite .bg-black .text-extra-large-bordered, +.bodywebsite .bg-gray-darker .text-extra-large-bordered, +.bodywebsite .bg-gray-dark .text-extra-large-bordered, +.bodywebsite .bg-mine-shaft .text-extra-large-bordered, +.bodywebsite .bg-cod-gray .text-extra-large-bordered, +.bodywebsite .bg-accent .text-extra-large-bordered, +.bodywebsite .bg-cello .text-extra-large-bordered { + color: #fff; +} +.bodywebsite .bg-black { + background: #000; + fill: #000; +} +.bodywebsite .bg-accent { + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .bg-accent.bg-default-outline-btn .btn-white-outline:hover { + background: #3a3c3e; + border-color: #3a3c3e; +} +.bodywebsite .bg-porcelain { + background: #e5e7e9; + fill: #e5e7e9; +} +.bodywebsite .bg-cape-cod { + background: #444; + fill: #3a3c3e; +} +.bodywebsite #sectionfirstclass .bg-cape-cod { + background: #fff; + fill: #3a3c3e; +} +.bodywebsite .page .text-primary { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?> !important; +} +.bodywebsite .page a.text-primary:focus, +.bodywebsite .page a.text-primary:hover { + color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; +} +.bodywebsite .page .text-secondary { + color: #00030a !important; +} +.bodywebsite .page a.text-secondary:focus, +.bodywebsite .page a.text-secondary:hover { + color: black !important; +} +.bodywebsite .page .text-red-orange { + color: #ff4b22 !important; +} +.bodywebsite .page a.text-red-orange:focus, +.bodywebsite .page a.text-red-orange:hover { + color: #ee2c00 !important; +} +.bodywebsite .page .text-black { + color: #000 !important; +} +.bodywebsite .page a.text-black:focus, +.bodywebsite .page a.text-black:hover { + color: black !important; +} +.bodywebsite .page .text-silver { + color: #cdcdcd !important; +} +.bodywebsite .page a.text-silver:focus, +.bodywebsite .page a.text-silver:hover { + color: #b4b4b4 !important; +} +.bodywebsite .page .text-dark { + color: #2a2b2b !important; +} +.bodywebsite .page a.text-dark:focus, +.bodywebsite .page a.text-dark:hover { + color: #111111 !important; +} +.bodywebsite .page .text-gray { + color: #9f9f9f !important; +} +.bodywebsite .page a.text-gray:focus, +.bodywebsite .page a.text-gray:hover { + color: #868686 !important; +} +.bodywebsite .page .text-gray-light { + color: #dedede !important; +} +.bodywebsite .page a.text-gray-light:focus, +.bodywebsite .page a.text-gray-light:hover { + color: #c5c5c5 !important; +} +.bodywebsite .page .text-white { + color: #fff !important; + text-shadow: 1px 1px 8px #222; +} +.bodywebsite .page a.text-white:focus, +.bodywebsite .page a.text-white:hover { + color: #e6e6e6 !important; +} +.bodywebsite .page .text-white-05 { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite .page a.text-white-05:focus, +.bodywebsite .page a.text-white-05:hover { + color: rgba(230, 230, 230, 0.5) !important; +} +.bodywebsite .page .text-white-03 { + color: rgba(255, 255, 255, 0.3) !important; +} +.bodywebsite .page a.text-white-03:focus, +.bodywebsite .page a.text-white-03:hover { + color: rgba(230, 230, 230, 0.3) !important; +} +.bodywebsite .page .text-white-08 { + color: rgba(255, 255, 255, 0.8) !important; +} +.bodywebsite .page a.text-white-08:focus, +.bodywebsite .page a.text-white-08:hover { + color: rgba(230, 230, 230, 0.8) !important; +} +.bodywebsite .page .text-tundora { + color: #414141 !important; +} +.bodywebsite .page a.text-tundora:focus, +.bodywebsite .page a.text-tundora:hover { + color: #282828 !important; +} +.bodywebsite .page .text-black-05 { + color: rgba(0, 0, 0, 0.5) !important; +} +.bodywebsite .page a.text-black-05:focus, +.bodywebsite .page a.text-black-05:hover { + color: rgba(0, 0, 0, 0.5) !important; +} +.bodywebsite .page .text-bismark { + color: #496a8a !important; +} +.bodywebsite .page a.text-bismark:focus, +.bodywebsite .page a.text-bismark:hover { + color: #375069 !important; +} +.bodywebsite .page .text-black-08 { + color: rgba(0, 0, 0, 0.8) !important; +} +.bodywebsite .page a.text-black-08:focus, +.bodywebsite .page a.text-black-08:hover { + color: rgba(0, 0, 0, 0.8) !important; +} +.bodywebsite .page .text-gray-darker { + color: #00030a !important; +} +.bodywebsite .page a.text-gray-darker:focus, +.bodywebsite .page a.text-gray-darker:hover { + color: black !important; +} +.bodywebsite .page .text-abbey { + color: #464a4d !important; +} +.bodywebsite .page a.text-abbey:focus, +.bodywebsite .page a.text-abbey:hover { + color: #2e3032 !important; +} +.bodywebsite .page .text-rolling-stone { + color: #74787C !important; +} +.bodywebsite .page a.text-rolling-stone:focus, +.bodywebsite .page a.text-rolling-stone:hover { + color: #5b5f62 !important; +} +.bodywebsite .page .text-fuel-yellow { + color: #F0B922 !important; +} +.bodywebsite .page a.text-fuel-yellow:focus, +.bodywebsite .page a.text-fuel-yellow:hover { + color: #d19d0e !important; +} +.bodywebsite .hidden { + display: none; +} +.bodywebsite .text-italic { + font-style: italic; +} +.bodywebsite .text-normal { + font-style: normal; +} +.bodywebsite .text-none { + text-transform: none; +} +.bodywebsite .text-underline { + text-decoration: underline; +} +.bodywebsite .text-strike { + text-decoration: line-through; +} +.bodywebsite .text-thin { + font-weight: 100; +} +.bodywebsite .text-light { + font-weight: 300; +} +.bodywebsite .text-regular { + font-weight: 400; +} +.bodywebsite .text-medium { + font-weight: 500; +} +.bodywebsite .text-sbold { + font-weight: 600; +} +.bodywebsite .text-bold, +.bodywebsite strong { + font-weight: 700; +} +.bodywebsite .text-ubold { + font-weight: 900; +} +.bodywebsite .text-spacing-0 { + letter-spacing: 0; +} +.bodywebsite .text-spacing-40 { + letter-spacing: 0.04em; +} +.bodywebsite .text-spacing-inverse-20 { + letter-spacing: -0.02em; +} +.bodywebsite .text-spacing-120 { + letter-spacing: 0.12em; +} +.bodywebsite .btn { + max-width: 100%; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: 700; + border-radius: 0; + border: 2px solid; + text-transform: uppercase; + transition: 0.3s ease-out; + padding: 11px 15px; +} +@media (min-width: 992px) { + .bodywebsite .btn { + padding: 12px 35px; + } +} +.bodywebsite .btn:focus, +.bodywebsite .btn:active, +.bodywebsite .btn:active:focus { + outline: none; +} +.bodywebsite .btn:active, +.bodywebsite .btn.active { + box-shadow: none; +} +.bodywebsite .btn-smaller { + padding: 8px 25px; +} +.bodywebsite .btn-small { + padding-left: 20px; + padding-right: 20px; +} +@media (min-width: 768px) { + .bodywebsite .btn { + min-width: 190px; + } +} +html .bodywebsite .btn-default, +html .bodywebsite .btn-default:active, +html .bodywebsite .btn-default.active, +html .bodywebsite .btn-default:active:focus, +html .bodywebsite .btn-default.active:focus, +html .bodywebsite .btn-default:focus:active, +html .bodywebsite .btn-default:focus { + color: #fff; + background-color: #464a4d; + border-color: #464a4d; +} +.bodywebsite .open > html .btn-default.dropdown-toggle, +html .bodywebsite .btn-default:hover { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +html .bodywebsite .btn-default.disabled, +html .bodywebsite .btn-default[disabled], +.bodywebsite fieldset[disabled] html .btn-default { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-default .badge { + color: #464a4d; + background-color: #fff; +} +html .bodywebsite .btn-primary, +html .bodywebsite .btn-primary:active, +html .bodywebsite .btn-primary.active, +html .bodywebsite .btn-primary:active:focus, +html .bodywebsite .btn-primary.active:focus, +html .bodywebsite .btn-primary:focus:active, +html .bodywebsite .btn-primary:focus { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + /* border: 0; */ +} +.bodywebsite .open > html .btn-primary.dropdown-toggle { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + /* border: none; */ +} +html .bodywebsite .btn-primary:hover { + color: #fff; + box-shadow: 1px 1px 8px #aaa; +} +html .bodywebsite .btn-primary.disabled, +html .bodywebsite .btn-primary[disabled], +.bodywebsite fieldset[disabled] html .btn-primary { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-primary .badge { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background-color: #fff; +} +html .bodywebsite .btn-primary-contrast, +html .bodywebsite .btn-primary-contrast:active, +html .bodywebsite .btn-primary-contrast.active, +html .bodywebsite .btn-primary-contrast:active:focus, +html .bodywebsite .btn-primary-contrast.active:focus, +html .bodywebsite .btn-primary-contrast:focus:active, +html .bodywebsite .btn-primary-contrast:focus { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .open > html .btn-primary-contrast.dropdown-toggle, +html .bodywebsite .btn-primary-contrast:hover { + color: #fff; + background-color: #42b294; + border-color: #42b294; +} +html .bodywebsite .btn-primary-contrast.disabled, +html .bodywebsite .btn-primary-contrast[disabled], +.bodywebsite fieldset[disabled] html .btn-primary-contrast { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-primary-contrast .badge { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background-color: #fff; +} +html .bodywebsite .btn-primary-outline, +html .bodywebsite .btn-primary-outline:active, +html .bodywebsite .btn-primary-outline.active, +html .bodywebsite .btn-primary-outline:active:focus, +html .bodywebsite .btn-primary-outline.active:focus, +html .bodywebsite .btn-primary-outline:focus:active, +html .bodywebsite .btn-primary-outline:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background-color: transparent; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .open > html .btn-primary-outline.dropdown-toggle, +html .bodywebsite .btn-primary-outline:hover { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +html .bodywebsite .btn-primary-outline.disabled, +html .bodywebsite .btn-primary-outline[disabled], +.bodywebsite fieldset[disabled] html .btn-primary-outline { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-primary-outline .badge { + color: transparent; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +html .bodywebsite .btn-cello-outline, +html .bodywebsite .btn-cello-outline:active, +html .bodywebsite .btn-cello-outline.active, +html .bodywebsite .btn-cello-outline:active:focus, +html .bodywebsite .btn-cello-outline.active:focus, +html .bodywebsite .btn-cello-outline:focus:active, +html .bodywebsite .btn-cello-outline:focus { + color: #1e3953; + background-color: transparent; + border-color: #1e3953; +} +.bodywebsite .open > html .btn-cello-outline.dropdown-toggle, +html .bodywebsite .btn-cello-outline:hover { + color: #fff; + background-color: #1e3953; + border-color: #1e3953; +} +html .bodywebsite .btn-cello-outline.disabled, +html .bodywebsite .btn-cello-outline[disabled], +.bodywebsite fieldset[disabled] html .btn-cello-outline { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-cello-outline .badge { + color: transparent; + background-color: #1e3953; +} +html .bodywebsite .btn-white-outline, +html .bodywebsite .btn-white-outline:active, +html .bodywebsite .btn-white-outline.active, +html .bodywebsite .btn-white-outline:active:focus, +html .bodywebsite .btn-white-outline.active:focus, +html .bodywebsite .btn-white-outline:focus:active, +html .bodywebsite .btn-white-outline:focus { + color: #fff; + background-color: transparent; + border-color: #fff; +} +.bodywebsite .open > html .btn-white-outline.dropdown-toggle, +html .bodywebsite .btn-white-outline:hover { + color: #fff; + background-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; + border-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; +} +html .bodywebsite .btn-white-outline.disabled, +html .bodywebsite .btn-white-outline[disabled], +.bodywebsite fieldset[disabled] html .btn-white-outline { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-white-outline .badge { + color: transparent; + background-color: #fff; +} +html .bodywebsite .btn-white-outline-variant-1, +html .bodywebsite .btn-white-outline-variant-1:active, +html .bodywebsite .btn-white-outline-variant-1.active, +html .bodywebsite .btn-white-outline-variant-1:active:focus, +html .bodywebsite .btn-white-outline-variant-1.active:focus, +html .bodywebsite .btn-white-outline-variant-1:focus:active, +html .bodywebsite .btn-white-outline-variant-1:focus { + color: #fff; + background-color: transparent; + border-color: #fff; +} +.bodywebsite .open > html .btn-white-outline-variant-1.dropdown-toggle, +html .bodywebsite .btn-white-outline-variant-1:hover { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +html .bodywebsite .btn-white-outline-variant-1.disabled, +html .bodywebsite .btn-white-outline-variant-1[disabled], +.bodywebsite fieldset[disabled] html .btn-white-outline-variant-1 { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-white-outline-variant-1 .badge { + color: transparent; + background-color: #fff; +} +html .bodywebsite .btn-silver-outline, +html .bodywebsite .btn-silver-outline:active, +html .bodywebsite .btn-silver-outline.active, +html .bodywebsite .btn-silver-outline:active:focus, +html .bodywebsite .btn-silver-outline.active:focus, +html .bodywebsite .btn-silver-outline:focus:active, +html .bodywebsite .btn-silver-outline:focus { + color: #000; + background-color: transparent; + border-color: #cdcdcd; +} +.bodywebsite .open > html .btn-silver-outline.dropdown-toggle, +html .bodywebsite .btn-silver-outline:hover { + color: #fff; + background-color: #cdcdcd; + border-color: #cdcdcd; +} +html .bodywebsite .btn-silver-outline.disabled, +html .bodywebsite .btn-silver-outline[disabled], +.bodywebsite fieldset[disabled] html .btn-silver-outline { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-silver-outline .badge { + color: transparent; + background-color: #000; +} +html .bodywebsite .btn-black-outline, +html .bodywebsite .btn-black-outline:active, +html .bodywebsite .btn-black-outline.active, +html .bodywebsite .btn-black-outline:active:focus, +html .bodywebsite .btn-black-outline.active:focus, +html .bodywebsite .btn-black-outline:focus:active, +html .bodywebsite .btn-black-outline:focus { + color: #000; + background-color: transparent; + border-color: #000; +} +.bodywebsite .open > html .btn-black-outline.dropdown-toggle, +html .bodywebsite .btn-black-outline:hover { + color: #fff; + background-color: #000; + border-color: #000; +} +html .bodywebsite .btn-black-outline.disabled, +html .bodywebsite .btn-black-outline[disabled], +.bodywebsite fieldset[disabled] html .btn-black-outline { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-black-outline .badge { + color: transparent; + background-color: #000; +} +html .bodywebsite .btn-cello, +html .bodywebsite .btn-cello:active, +html .bodywebsite .btn-cello.active, +html .bodywebsite .btn-cello:active:focus, +html .bodywebsite .btn-cello.active:focus, +html .bodywebsite .btn-cello:focus:active, +html .bodywebsite .btn-cello:focus { + color: #fff; + background-color: #1e3953; + border-color: #1e3953; +} +.bodywebsite .open > html .btn-cello.dropdown-toggle, +html .bodywebsite .btn-cello:hover { + color: #fff; + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +html .bodywebsite .btn-cello.disabled, +html .bodywebsite .btn-cello[disabled], +.bodywebsite fieldset[disabled] html .btn-cello { + pointer-events: none; + opacity: .5; +} +html .bodywebsite .btn-cello .badge { + color: #1e3953; + background-color: #fff; +} +.bodywebsite .btn-xs { + padding: 12px 25px; + font-size: 11px; + line-height: 1.71429; + border-radius: 0; +} +@media (min-width: 768px) { + .bodywebsite .btn-xs { + min-width: 165px; + } +} +.bodywebsite .btn-sm { + padding: 10px 20px; + font-size: 13px; + line-height: 1.71429; + border-radius: 0; +} +@media (min-width: 768px) { + .bodywebsite .btn-sm { + min-width: 170px; + } +} +.bodywebsite .btn-lg { + padding: 14px 30px; + font-size: 14px; + line-height: 1.71429; + border-radius: 0; +} +@media (min-width: 768px) { + .bodywebsite .btn-lg { + min-width: 270px; + padding: 18px 40px; + } +} +@media (min-width: 992px) { + .bodywebsite .btn-lg-bigger { + padding-top: 28px; + padding-bottom: 28px; + } +} +.bodywebsite .btn-xl { + padding: 20px 35px; + font-size: 15px; + line-height: 1.71429; + border-radius: 0; +} +@media (min-width: 768px) { + .bodywebsite .btn-xl { + padding: 21px 50px; + } +} +@media (min-width: 992px) { + .bodywebsite .btn-xl { + min-width: 270px; + } +} +.bodywebsite .btn-min-width-0 { + min-width: 0; +} +.bodywebsite .btn-block { + min-width: 30px; + max-width: 100%; +} +.bodywebsite .btn-rect { + border-radius: 0; +} +.bodywebsite .btn-round { + border-radius: 12px; +} +.bodywebsite .btn-circle { + border-radius: 35px; +} +.bodywebsite .btn-round-bottom { + border-radius: 0 0 5px 5px; +} +.bodywebsite .btn-shadow { + box-shadow: -3px 3px 3px 0 rgba(0, 0, 0, 0.14); +} +.bodywebsite .btn.btn-icon { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; +} +.bodywebsite .btn.btn-icon .icon { + position: relative; + top: 1px; + display: inline-block; + width: auto; + height: auto; + line-height: 0; + vertical-align: middle; + transition: 0s; +} +.bodywebsite .btn.btn-icon-left .icon { + margin-right: 10px; +} +.bodywebsite .btn.btn-icon-right { + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; +} +.bodywebsite .btn.btn-icon-right .icon { + margin-left: 10px; +} +.bodywebsite .btn-icon-only { + background: none; + border: none; + display: inline-block; + padding: 0; + outline: none; + outline-offset: 0; + cursor: pointer; + -webkit-appearance: none; + font-size: 0; + line-height: 0; + transition: .33s all ease; +} +.bodywebsite .btn-icon-only::-moz-focus-inner { + border: none; + padding: 0; +} +.bodywebsite .btn-icon-only.btn-icon-only-primary, +.bodywebsite .btn-icon-only.btn-icon-only-primary:active, +.bodywebsite .btn-icon-only.btn-icon-only-primary:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .btn-icon-only.btn-icon-only-primary:hover { + color: #000; +} +.bodywebsite .btn-icon-only { + padding: 9px 18px; +} +.bodywebsite .btn-icon-single { + display: inline-block; + padding: 0; + min-width: 0; +} +.bodywebsite .btn-icon-default { + color: #000; +} +.bodywebsite .btn-icon-default:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .btn-cello-outline.btn-icon .icon { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + transition: .33s all ease; +} +.bodywebsite .btn-cello-outline.btn-icon:hover.btn-icon .icon { + color: #fff; +} +.bodywebsite .button-block * + .btn { + margin-top: 0; +} +.bodywebsite .icon { + display: inline-block; + text-align: center; +} +.bodywebsite .icon:before { + display: inline-block; + font-style: normal; + speak: none; + text-transform: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bodywebsite [class*='icon-circle'] { + border-radius: 50%; + overflow: hidden; +} +.bodywebsite [class*='icon-round'] { + border-radius: 4px; + overflow: hidden; +} +.bodywebsite .page .icon-default { + color: #9f9f9f; +} +.bodywebsite .page .icon-black { + color: #000; +} +.bodywebsite .page .icon-primary { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .icon-gunsmoke { + color: #767877; +} +.bodywebsite .page .icon-tundora { + color: #414141; +} +.bodywebsite .page .icon-gray-dark-filled { + color: #fff; + background: #2a2b2b; +} +.bodywebsite .page .icon-san-juan-filled { + color: #fff; + background: #2e5275; +} +.bodywebsite .page .icon-silver-chalice-filled { + color: #fff; + background: #ababab; +} +.bodywebsite .page .icon-abbey-filled { + color: #fff; + background: #464a4d; +} +.bodywebsite .page .icon-white { + color: #fff; +} +.bodywebsite .page a.icon-default, +.bodywebsite .page a.icon-default:active, +.bodywebsite .page a.icon-default:focus { + color: #9f9f9f; +} +.bodywebsite .page a.icon-default:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page a.icon-primary, +.bodywebsite .page a.icon-primary:active, +.bodywebsite .page a.icon-primary:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page a.icon-primary:hover { + color: #fff; +} +.bodywebsite .page a.icon-abbey-filled:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page a.icon-tundora-inverse, +.bodywebsite .page a.icon-tundora-inverse:active, +.bodywebsite .page a.icon-tundora-inverse:focus { + color: #414141; +} +.bodywebsite .page a.icon-tundora-inverse:hover { + color: #fff; +} +.bodywebsite .page a.icon-gray-dark-filled, +.bodywebsite .page a.icon-gray-dark-filled:active, +.bodywebsite .page a.icon-gray-dark-filled:focus { + color: #fff; + background: #2a2b2b; +} +.bodywebsite .page a.icon-gray-dark-filled:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page a.icon-silver-chalice-filled, +.bodywebsite .page a.icon-silver-chalice-filled:active, +.bodywebsite .page a.icon-silver-chalice-filled:focus { + color: #fff; + background: #ababab; +} +.bodywebsite .page a.icon-silver-chalice-filled:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page a.icon-san-juan-filled, +.bodywebsite .page a.icon-san-juan-filled:active, +.bodywebsite .page a.icon-san-juan-filled:focus { + color: #fff; + background: #2e5275; +} +.bodywebsite .page a.icon-san-juan-filled:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .icon-xxs { + width: 18px; + height: 18px; + font-size: 18px; + line-height: 18px; +} +.bodywebsite .page .icon-xxs-small { + width: 16px; + height: 16px; + font-size: 16px; + line-height: 16px; +} +.bodywebsite .page .icon-xxs-smaller { + width: 14px; + height: 14px; + font-size: 14px; + line-height: 14px; +} +.bodywebsite .page .icon-xxs-smallest { + width: 12px; + height: 12px; + font-size: 12px; + line-height: 12px; +} +.bodywebsite .page .icon-xs { + width: 22px; + height: 22px; + font-size: 22px; + line-height: 22px; +} +.bodywebsite .page .icon-xs-smaller { + width: 20px; + height: 20px; + font-size: 20px; + line-height: 20px; +} +.bodywebsite .page .icon-sm { + width: 24px; + height: 24px; + font-size: 24px; + line-height: 24px; +} +.bodywebsite .page .icon-sm-custom { + width: 24px; + height: 24px; + font-size: 24px; + line-height: 24px; +} +@media (min-width: 992px) { + .bodywebsite .page .icon-sm-custom { + width: 30px; + height: 30px; + font-size: 30px; + line-height: 30px; + } +} +.bodywebsite .page .icon-md { + width: 36px; + height: 36px; + font-size: 36px; + line-height: 36px; +} +.bodywebsite .page .icon-md-custom { + width: 26px; + height: 26px; + font-size: 26px; + line-height: 26px; +} +@media (min-width: 992px) { + .bodywebsite .page .icon-md-custom { + width: 36px; + height: 36px; + font-size: 36px; + line-height: 36px; + } +} +.bodywebsite .page .icon-md-smaller { + width: 30px; + height: 30px; + font-size: 30px; + line-height: 30px; +} +.bodywebsite .page .icon-lg { + width: 45px; + height: 45px; + font-size: 45px; + line-height: 45px; +} +.bodywebsite .page .icon-lg-variant-1 { + width: 42px; + height: 42px; + font-size: 42px; + line-height: 42px; +} +.bodywebsite .page .icon-lg-variant-2 { + width: 44px; + height: 44px; + font-size: 44px; + line-height: 44px; +} +.bodywebsite .page .icon-lg-bigger { + width: 50px; + height: 50px; + font-size: 50px; + line-height: 50px; +} +.bodywebsite .page .icon-xl { + width: 60px; + height: 60px; + font-size: 60px; + line-height: 60px; +} +.bodywebsite .page [class*='icon-round'].icon-xxs-smallest, +.bodywebsite .page [class*='icon-circle'].icon-xxs-smallest { + width: 26px; + height: 26px; + line-height: 26px; +} +.bodywebsite .icon-shift-1 { + position: relative; + top: 2px; +} +.bodywebsite .icon-shift-2 { + position: relative; + top: 2px; +} +@media (min-width: 992px) { + .bodywebsite .icon-shift-2 { + top: 4px; + } +} +.bodywebsite .icon-1:before, +.bodywebsite .icon-2:before, +.bodywebsite .icon-4:before, +.bodywebsite .icon-5:before, +.bodywebsite .icon-6:before, +.bodywebsite .icon-3:before { + content: ''; + display: inline-block; + width: 40px; + height: 40px; +} +.bodywebsite .thumbnail { + position: relative; + z-index: 1; + width: 100%; + max-height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + border: none; + border-radius: 0; + background-color: transparent; +} +.bodywebsite .thumbnail .caption { + padding: 0; +} +.bodywebsite .thumbnail { + box-shadow: none; +} +.bodywebsite .thumbnail-variant-1 { + background-color: transparent; + text-align: center; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image { + position: relative; + display: inline-block; + overflow: hidden; + pointer-events: none; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image, +.bodywebsite .thumbnail-variant-1 .thumbnail-image > img { + border-radius: 600px; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image > img { + width: auto; + pointer-events: auto; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner { + position: absolute; + top: 0; + right: 1px; + bottom: 0; + left: 1px; + z-index: 2; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 20px 5px 5px; + background: rgba(0, 0, 0, 0.4); + border-radius: 600px; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner * { + pointer-events: auto; +} +.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner > * + * { + margin-top: 0; + margin-left: 20px; +} +.bodywebsite .thumbnail-variant-1 .header { + line-height: 1.2; +} +.bodywebsite .thumbnail-variant-1 * + p { + margin-top: 0; +} +.bodywebsite .thumbnail-variant-1 * + .thumbnail-caption { + margin-top: 18px; +} +@media (min-width: 992px) { + .bodywebsite .desktop .thumbnail-variant-1 .thumbnail-image-inner { + opacity: 0; + visibility: hidden; + transform: rotate3d(0, 1, 0, 60deg); + transition: .55s all ease; + background: rgba(0, 0, 0, 0.6); + } + .bodywebsite .desktop .thumbnail-variant-1 .thumbnail-image:hover .thumbnail-image-inner { + opacity: 1; + visibility: visible; + transform: rotate3d(0, 1, 0, 0deg); + } +} +@media (min-width: 1200px) { + .bodywebsite .thumbnail-variant-1 * + .thumbnail-caption { + margin-top: 30px; + } +} +.bodywebsite .thumbnail-variant-2 { + min-height: 300px; + padding: 30px 0 0; + overflow: visible; + text-align: center; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; +} +.bodywebsite .thumbnail-variant-2-wrap { + padding-bottom: 25px; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-image { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; + width: 100%; + overflow: hidden; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-image > img { + position: absolute; + top: 20%; + left: 50%; + transform: translate(-50%, -20%); + width: auto; + min-width: 101%; + max-width: none; + height: auto; + min-height: 100%; + max-height: none; +} +.bodywebsite .thumbnail-variant-2:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + background: rgba(0, 0, 0, 0.5); +} +.bodywebsite .thumbnail-variant-2 .thumbnail-inner { + position: relative; + z-index: 2; + padding: 30px 10px; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-caption { + position: relative; + z-index: 3; + width: calc(66%); + padding: 17px 8px 25px; + margin: 31px 17px -25px 17px; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-caption * { + color: #fff; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-caption a, +.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:active, +.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:focus { + color: #fff; +} +.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:hover { + color: #9f9f9f; +} +.bodywebsite .thumbnail-variant-2 .text-header { + font-size: 18px; + font-weight: 700; +} +.bodywebsite .thumbnail-variant-2 .text-caption { + font-style: italic; + line-height: 1.3; + font-family: "Roboto", Helvetica, Arial, sans-serif; +} +@media (min-width: 768px) { + .bodywebsite .thumbnail-variant-2 .text-caption { + font-size: 16px; + } +} +@media (min-width: 992px) { + .bodywebsite .desktop .thumbnail-variant-2:before { + top: 40px; + } + .bodywebsite .desktop .thumbnail-variant-2 .thumbnail-inner > * { + position: relative; + transform: translateY(14px); + transition: 0.4s all ease-in-out; + } + .bodywebsite .desktop .thumbnail-variant-2:before, + .bodywebsite .desktop .thumbnail-variant-2 .thumbnail-inner { + opacity: 0; + visibility: hidden; + transition: 0.33s all ease-out; + } + .bodywebsite .desktop .thumbnail-variant-2:hover:before { + top: 0; + left: 0; + right: 0; + } + .bodywebsite .desktop .thumbnail-variant-2:hover .thumbnail-inner > * { + transform: translateY(0); + } + .bodywebsite .desktop .thumbnail-variant-2:hover:before, + .bodywebsite .desktop .thumbnail-variant-2:hover .thumbnail-inner { + opacity: 1; + visibility: visible; + } +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-variant-2 .thumbnail-caption { + width: calc(84%); + margin: 31px 8px -25px 8px; + } +} +@media (min-width: 1200px) { + .bodywebsite .thumbnail-variant-2 { + width: calc(78%); + margin: 0 11px 0; + } + .bodywebsite .thumbnail-variant-2 .thumbnail-caption { + width: calc(66%); + margin: 31px 17px -25px 17px; + } +} +.bodywebsite .ie-11 .thumbnail-variant-2 { + min-height: 0; +} +.bodywebsite .thumbnail-variant-3 { + width: 100.025%; + text-align: center; +} +.bodywebsite .thumbnail-variant-3 img { + position: relative; + left: 50%; + transform: translateX(-50%); + width: auto; + max-width: none; + min-width: 100.5%; +} +.bodywebsite .thumbnail-variant-3 .link-external { + position: absolute; + top: -30px; + right: -30px; + z-index: 1; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 200px; + height: 110px; + padding: 55px 15px 5px; + vertical-align: bottom; + line-height: 40px; + background: #fafafa; + transform-origin: 74% 110%; + transform: rotate(45deg); + will-change: transform; + text-align: center; + /** + @bugfix: color flickering in child objects on hover + @affected: IE Edge + */ + transition: top 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), right 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), opacity 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), visibility 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86); +} +.bodywebsite .thumbnail-variant-3 .link-external .icon { + transition: none; + transform: rotate(-45deg); + color: #000; + vertical-align: bottom; +} +.bodywebsite .thumbnail-variant-3 .link-external:hover { + top: -12px; + right: -12px; +} +.bodywebsite .thumbnail-variant-3 .link-original { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} +.bodywebsite .thumbnail-variant-3 .link-original, +.bodywebsite .thumbnail-variant-3 .link-original:active, +.bodywebsite .thumbnail-variant-3 .link-original:focus, +.bodywebsite .thumbnail-variant-3 .link-original:hover { + color: #fff; +} +.bodywebsite .thumbnail-variant-3 .link-original:before { + content: '\e8ff'; + position: relative; + left: 20px; + bottom: 30px; + z-index: 3; + font-family: 'Material Icons'; + font-size: 140px; + line-height: 1; + opacity: .2; + transition: .33s all ease; +} +.bodywebsite .thumbnail-variant-3 .caption { + position: absolute; + top: -2px; + right: 0; + bottom: -2px; + left: 0; + padding: 15px; + transition: 0.33s all ease-in-out; + background: rgba(0, 0, 0, 0.6); +} +@media (min-width: 992px) { + .bodywebsite .desktop .thumbnail-variant-3 figure img { + will-change: transform; + transition: 0.4s ease-out; + } + .bodywebsite .desktop .thumbnail-variant-3 .caption, + .bodywebsite .desktop .thumbnail-variant-3 .link-external { + opacity: 0; + visibility: hidden; + } + .bodywebsite .desktop .thumbnail-variant-3 .link-external { + right: -50px; + top: -50px; + } + .bodywebsite .desktop .thumbnail-variant-3:hover .caption, + .bodywebsite .desktop .thumbnail-variant-3:hover .link-external { + opacity: 1; + visibility: visible; + } + .bodywebsite .desktop .thumbnail-variant-3:hover figure img { + transform: translateX(-50%) scale(1.08); + } + .bodywebsite .desktop .thumbnail-variant-3:hover .link-external { + right: -30px; + top: -30px; + } + .bodywebsite .desktop .thumbnail-variant-3:hover .link-external:hover { + top: -20px; + right: -20px; + } +} +.bodywebsite .thumbnail-variant-3 > * + * { + margin-top: 0; +} +@media (min-width: 768px) { + .bodywebsite .thumbnail-wrap { + padding: 0 5px; + } +} +@media (min-width: 1200px) { + .bodywebsite .thumbnail-wrap { + padding: 0 9px; + } +} +.bodywebsite .thumbnail-variant-4 { + position: relative; + overflow: hidden; + box-shadow: 0px 0px 13px 0px rgba(1, 3, 4, 0.15); +} +.bodywebsite .thumbnail-variant-4 .thumbnail-image { + background: #000; +} +.bodywebsite .thumbnail-variant-4 .thumbnail-image img { + opacity: .92; +} +.bodywebsite .thumbnail-variant-4 .caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 16px 15px; + text-align: center; + color: #000; + background: #fff; +} +.bodywebsite .thumbnail-variant-4 .text-light { + color: #0d0d0d; +} +@media (min-width: 992px) { + .bodywebsite .desktop .thumbnail-variant-4 .thumbnail-image img { + position: relative; + will-change: transform; + opacity: 1; + transition: opacity .7s, transform .7s; + transform: scale3d(1.0001, 1.0001, 1); + } + .bodywebsite .desktop .thumbnail-variant-4 .caption, + .bodywebsite .desktop .thumbnail-variant-4 .caption-header { + transition: transform 0.55s; + transform: translate3d(0, 200%, 0); + } + .bodywebsite .desktop .thumbnail-variant-4 .caption-header { + transition-delay: 0.05s; + } + .bodywebsite .desktop .thumbnail-variant-4:hover .thumbnail-image img { + opacity: .9; + transform: scale3d(1.07, 1.07, 1); + } + .bodywebsite .desktop .thumbnail-variant-4:hover .caption, + .bodywebsite .desktop .thumbnail-variant-4:hover .caption-header { + transform: translate3d(0, 0, 0); + } +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-variant-4 .caption { + padding: 20px 15px; + } +} +.bodywebsite .thumbnail-profile .thumbnail-image img { + width: 100%; +} +.bodywebsite .thumbnail-profile .thumbnail-caption { + padding: 20px; + background: #f2f3f7; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner { + margin-bottom: -12px; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; + transform: translateY(-12px); + text-align: center; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner > * { + display: inline-block; + margin-top: 12px; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner, +.bodywebsite .thumbnail-profile .thumbnail-caption-inner > ul { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { + position: relative; + margin-bottom: -3px; + transform: translateY(-3px); + -webkit-flex-grow: 2; + -ms-flex-positive: 2; + flex-grow: 2; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner ul > li { + display: inline-block; + margin-top: 3px; + padding: 0 7px; +} +.bodywebsite .thumbnail-profile .thumbnail-caption-inner .btn-wrap { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +@media (min-width: 576px) { + .bodywebsite .thumbnail-profile .thumbnail-caption-inner, + .bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + } +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; + } +} +@media (min-width: 1200px) { + .bodywebsite .thumbnail-profile .thumbnail-caption-inner { + text-align: left; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + } + .bodywebsite .thumbnail-profile .thumbnail-caption-inner .btn-wrap { + text-align: right; + } +} +@media (max-width: 767px) { + .bodywebsite .thumbnail-variant-2 { + max-width: 300px; + margin-left: auto; + margin-right: auto; + } + .bodywebsite .thumbnail-variant-3, + .bodywebsite .thumbnail-profile { + max-width: 370px; + margin-left: auto; + margin-right: auto; + } +} +.bodywebsite .thumbnail-block { + display: block; +} +.bodywebsite .thumbnail-block > img, +.bodywebsite .thumbnail-block a > img { + width: 100%; + height: auto; +} +.bodywebsite .thumbnail-variant-5 { + padding: 40px 20px; + display: inline-block; +} +.bodywebsite .thumbnail-variant-5, +.bodywebsite .thumbnail-variant-5 img { + transition: 0.2s ease-in-out; +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-variant-5 { + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + } + .bodywebsite .thumbnail-variant-5 .thumbnail-variant-5-img-wrap { + position: relative; + display: inline-block; + } + .bodywebsite .thumbnail-variant-5 .thumbnail-variant-5-img-wrap:before { + content: ''; + position: absolute; + top: 0; + right: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 50%; + background: rgba(0, 0, 0, 0.4); + transition: 0.2s ease-in-out; + } + .bodywebsite .thumbnail-variant-5 { + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + } + .bodywebsite .thumbnail-variant-5:hover .thumbnail-variant-5-img-wrap:before { + opacity: 0; + } + .bodywebsite .thumbnail-variant-5:hover img { + will-change: transform; + -webkit-transform: scale(1.18); + transform: scale(1.18); + } +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-variant-5 { + padding: 40px 50px; + } +} +@media (min-width: 1200px) { + .bodywebsite .thumbnail-variant-5 { + padding: 65px 50px; + } +} +.bodywebsite .thumbnail-variant-5 * + h2 { + margin-top: 36px; +} +.bodywebsite .thumbnail-variant-5 h2 + * { + margin-top: 0; +} +.bodywebsite .thumbnail-variant-5 .link-group + .link-group { + margin-top: 7px; +} +.bodywebsite .thumbnail-variant-5 .divider-fullwidth { + margin-top: 12px; + margin-bottom: 17px; +} +.bodywebsite .thumbnail-with-img * + .thumbnail-title { + margin-top: 22px; +} +.bodywebsite .thumbnail-with-img .thumbnail-title + * { + margin-top: 10px; +} +.bodywebsite .thumbnail-profile-info h4 + * { + margin-top: 0; +} +.bodywebsite .thumbnail-profile-info * + .profile-quote { + margin-top: 15px; +} +.bodywebsite .thumbnail-profile-info .profile-quote + * { + margin-top: 15px; +} +.bodywebsite .thumbnail-profile-info * + .list-progress { + margin-top: 35px; +} +@media (min-width: 992px) { + .bodywebsite .thumbnail-profile-info * + .profile-quote { + margin-top: 0; + } + .bodywebsite .thumbnail-profile-info .profile-quote + * { + margin-top: 0; + } +} +.bodywebsite figure img { + margin: 18px; + border: 1px solid #ccc; + box-shadow: 1px 1px 25px #aaa; + max-width: calc(44%); +} +.bodywebsite figure img { + width: 100%; + height: auto; + max-width: none; +} +.bodywebsite .figure .caption { + padding: 15px; +} +.bodywebsite .rd-mailform { + position: relative; +} +.bodywebsite label { + margin-bottom: 0; +} +.bodywebsite input::-webkit-autofill + .form-label { + display: none; + transition: none; +} +.bodywebsite .form-label, +.bodywebsite .form-input { + font-weight: 400; +} +.bodywebsite .input-sm, +.bodywebsite .input-lg, +.bodywebsite .form-input { + font-size: 14px; +} +.bodywebsite .input-sm, +.bodywebsite .input-sm:focus, +.bodywebsite .input-lg, +.bodywebsite .input-lg:focus, +.bodywebsite .form-input, +.bodywebsite .form-input:focus { + box-shadow: none; +} +.bodywebsite textarea.form-input { + height: 166px; + min-height: 52px; + max-height: 249px; + resize: vertical; +} +.bodywebsite .form-input { + height: auto; + min-height: 20px; + border: 0px solid #dedede; + border-radius: 0; + -webkit-appearance: none; + line-height: 24px; +} +.bodywebsite .form-input:focus { + outline: 0; +} +.bodywebsite .form-wrap { + position: relative; + margin-bottom: 0; +} +.bodywebsite .form-wrap + .form-wrap { + margin-top: 10px; +} +.bodywebsite .form-label { + position: absolute; + top: 26px; + left: 19px; + font-size: 14px; + color: #9f9f9f; + pointer-events: none; + z-index: 9; + transition: .3s; + transform: translateY(-50%); + will-change: transform; +} +.bodywebsite .form-label.focus { + opacity: 0; +} +.bodywebsite .form-label.auto-fill { + color: #9f9f9f; +} +@media (min-width: 768px) { + .bodywebsite .form-label-outside { + position: static; + margin-bottom: 8px; + } + .bodywebsite .form-label-outside, + .bodywebsite .form-label-outside.focus, + .bodywebsite .form-label-outside.auto-fill { + transform: none; + color: #9f9f9f; + font-size: 14px; + } +} +.bodywebsite .form-wrap-outside { + margin-top: 10px; +} +.bodywebsite .form-wrap-outside .form-label-outside { + position: absolute; + top: -15px; + left: 0; +} +.bodywebsite .form-wrap-outside .form-label-outside.focus { + opacity: 1; +} +@media (min-width: 768px) { + .bodywebsite .form-wrap-outside .form-label-outside { + top: -30px; + } +} +.bodywebsite .form-border-bottom { + border-bottom: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .form-validation { + position: absolute; + right: 10px; + top: 2px; + font-size: 11px; + line-height: 11px; + color: #fe4a21; + margin-top: 2px; + transition: .3s; +} +.bodywebsite form.label-outside .form-validation { + top: 12px; +} +.bodywebsite .has-error .help-block, +.bodywebsite .has-error .control-label, +.bodywebsite .has-error .radio, +.bodywebsite .has-error .checkbox, +.bodywebsite .has-error .radio-inline, +.bodywebsite .has-error .checkbox-inline, +.bodywebsite .has-error.radio label, +.bodywebsite .has-error.checkbox label, +.bodywebsite .has-error.radio-inline label, +.bodywebsite .has-error.checkbox-inline label { + color: #fe4a21; +} +.bodywebsite .has-error .form-input:not(.form-input-impressed), +.bodywebsite .has-error .form-input:not(.form-input-impressed):focus { + border-color: #fe4a21; + box-shadow: none; +} +.bodywebsite .has-error .form-input-impressed, +.bodywebsite .has-error .form-input-impressed:focus { + box-shadow: inset 0 0 0 1px #fe4a21; +} +.bodywebsite .has-error .input-group-addon { + color: #fff; + border-color: #fe4a21; + background-color: #fe4a21; +} +.bodywebsite .form-inline .has-error ~ button[type='submit'] { + border-color: #fe4a21; + background: #fe4a21; +} +.bodywebsite .has-error .form-validation { + color: #fe4a21; +} +.bodywebsite .has-success .help-block, +.bodywebsite .has-success .control-label, +.bodywebsite .has-success .radio, +.bodywebsite .has-success .checkbox, +.bodywebsite .has-success .radio-inline, +.bodywebsite .has-success .checkbox-inline, +.bodywebsite .has-success.radio label, +.bodywebsite .has-success.checkbox label, +.bodywebsite .has-success.radio-inline label, +.bodywebsite .has-success.checkbox-inline label { + color: #58c476; +} +.bodywebsite .has-success .form-input:not(.form-input-impressed), +.bodywebsite .has-success .form-input:not(.form-input-impressed):focus { + border-color: #dff0d8; + box-shadow: none; +} +.bodywebsite .has-success .form-input-impressed, +.bodywebsite .has-success .form-input-impressed:focus { + box-shadow: inset 0 0 0 1px #dff0d8; +} +.bodywebsite .has-success .input-group-addon { + color: #fff; + border-color: #dff0d8; + background-color: #dff0d8; +} +.bodywebsite .form-inline .has-success ~ button[type='submit'] { + border-color: #dff0d8; + background: #dff0d8; +} +.bodywebsite .has-success .form-validation { + color: #58c476; +} +.bodywebsite .has-warning .help-block, +.bodywebsite .has-warning .control-label, +.bodywebsite .has-warning .radio, +.bodywebsite .has-warning .checkbox, +.bodywebsite .has-warning .radio-inline, +.bodywebsite .has-warning .checkbox-inline, +.bodywebsite .has-warning.radio label, +.bodywebsite .has-warning.checkbox label, +.bodywebsite .has-warning.radio-inline label, +.bodywebsite .has-warning.checkbox-inline label { + color: #c49558; +} +.bodywebsite .has-warning .form-input:not(.form-input-impressed), +.bodywebsite .has-warning .form-input:not(.form-input-impressed):focus { + border-color: #fcf8e3; + box-shadow: none; +} +.bodywebsite .has-warning .form-input-impressed, +.bodywebsite .has-warning .form-input-impressed:focus { + box-shadow: inset 0 0 0 1px #fcf8e3; +} +.bodywebsite .has-warning .input-group-addon { + color: #fff; + border-color: #fcf8e3; + background-color: #fcf8e3; +} +.bodywebsite .form-inline .has-warning ~ button[type='submit'] { + border-color: #fcf8e3; + background: #fcf8e3; +} +.bodywebsite .has-warning .form-validation { + color: #c49558; +} +.bodywebsite .has-info .help-block, +.bodywebsite .has-info .control-label, +.bodywebsite .has-info .radio, +.bodywebsite .has-info .checkbox, +.bodywebsite .has-info .radio-inline, +.bodywebsite .has-info .checkbox-inline, +.bodywebsite .has-info.radio label, +.bodywebsite .has-info.checkbox label, +.bodywebsite .has-info.radio-inline label, +.bodywebsite .has-info.checkbox-inline label { + color: #3e9cf6; +} +.bodywebsite .has-info .form-input:not(.form-input-impressed), +.bodywebsite .has-info .form-input:not(.form-input-impressed):focus { + border-color: #d9edf7; + box-shadow: none; +} +.bodywebsite .has-info .form-input-impressed, +.bodywebsite .has-info .form-input-impressed:focus { + box-shadow: inset 0 0 0 1px #d9edf7; +} +.bodywebsite .has-info .input-group-addon { + color: #fff; + border-color: #d9edf7; + background-color: #d9edf7; +} +.bodywebsite .form-inline .has-info ~ button[type='submit'] { + border-color: #d9edf7; + background: #d9edf7; +} +.bodywebsite .has-info .form-validation { + color: #3e9cf6; +} +.bodywebsite #form-output-global { + position: fixed; + bottom: 30px; + left: 15px; + visibility: hidden; + transform: translateX(-500px); + transition: .3s all ease; + z-index: 9999999; +} +.bodywebsite #form-output-global.active { + transform: translateX(0); + visibility: visible; +} +@media (min-width: 576px) { + .bodywebsite #form-output-global { + left: 30px; + } +} +.bodywebsite .form-output { + position: absolute; + top: 100%; + left: 0; + font-size: 14px; + line-height: 1.5; + margin-top: 2px; + transition: .3s; + opacity: 0; + visibility: hidden; +} +.bodywebsite .form-output.active { + opacity: 1; + visibility: visible; +} +.bodywebsite .form-output.error { + color: #fe4a21; +} +.bodywebsite .form-output.success { + color: #58c476; +} +.bodywebsite .radio .radio-custom, +.bodywebsite .radio-inline .radio-custom, +.bodywebsite .checkbox .checkbox-custom, +.bodywebsite .checkbox-inline .checkbox-custom { + opacity: 0; +} +.bodywebsite .radio .radio-custom, +.bodywebsite .radio .radio-custom-dummy, +.bodywebsite .radio-inline .radio-custom, +.bodywebsite .radio-inline .radio-custom-dummy, +.bodywebsite .checkbox .checkbox-custom, +.bodywebsite .checkbox .checkbox-custom-dummy, +.bodywebsite .checkbox-inline .checkbox-custom, +.bodywebsite .checkbox-inline .checkbox-custom-dummy { + position: absolute; + width: 18px; + height: 18px; + margin-left: -20px; + margin-top: 3px; + outline: none; + cursor: pointer; +} +.bodywebsite .radio .radio-custom-dummy, +.bodywebsite .radio-inline .radio-custom-dummy, +.bodywebsite .checkbox .checkbox-custom-dummy, +.bodywebsite .checkbox-inline .checkbox-custom-dummy { + pointer-events: none; +} +.bodywebsite .radio .radio-custom-dummy:after, +.bodywebsite .radio-inline .radio-custom-dummy:after, +.bodywebsite .checkbox .checkbox-custom-dummy:after, +.bodywebsite .checkbox-inline .checkbox-custom-dummy:after { + position: absolute; + opacity: 0; + transition: .22s; +} +.bodywebsite .radio .radio-custom:focus, +.bodywebsite .radio-inline .radio-custom:focus, +.bodywebsite .checkbox .checkbox-custom:focus, +.bodywebsite .checkbox-inline .checkbox-custom:focus { + outline: none; +} +.bodywebsite .radio-custom:checked + .radio-custom-dummy:after, +.bodywebsite .checkbox-custom:checked + .checkbox-custom-dummy:after { + opacity: 1; +} +.bodywebsite .radio, +.bodywebsite .radio-inline { + padding-left: 30px; +} +.bodywebsite .radio .radio-custom-dummy, +.bodywebsite .radio-inline .radio-custom-dummy { + margin-top: 2px; + border-radius: 50%; + margin-left: -30px; + background: transparent; + border: 2px solid #000; +} +.bodywebsite .radio .radio-custom-dummy:after, +.bodywebsite .radio-inline .radio-custom-dummy:after { + content: ''; + top: 3px; + right: 3px; + bottom: 3px; + left: 3px; + background: #00030a; + border-radius: 50%; +} +.bodywebsite .form-wrap-color .radio-inline, +.bodywebsite .form-wrap-size .radio-inline { + padding-left: 0; +} +.bodywebsite .form-wrap-color .radio-control, +.bodywebsite .form-wrap-size .radio-control { + position: relative; + display: block; + width: 24px; + height: 24px; + border-radius: 50%; + margin-top: 23px; + margin-bottom: 23px; +} +.bodywebsite .form-wrap-color .radio-control:after, +.bodywebsite .form-wrap-size .radio-control:after { + bottom: 0; +} +.bodywebsite .form-wrap-color .radio-control:after, +.bodywebsite .form-wrap-size .radio-control:after { + content: ''; + position: absolute; + left: 50%; + bottom: -23px; + transform: translateX(-50%); + width: 0; + max-width: 100%; + height: 3px; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + visibility: hidden; + transition: .2s; +} +.bodywebsite .form-wrap-color .radio-custom:checked ~ .radio-control:after, +.bodywebsite .form-wrap-size .radio-custom:checked ~ .radio-control:after { + visibility: visible; + width: 100%; +} +.bodywebsite .form-wrap-color .radio-custom-dummy, +.bodywebsite .form-wrap-size .radio-custom-dummy { + display: none; +} +.bodywebsite .form-wrap-size .radio-inline { + padding-left: 2px; + padding-right: 2px; +} +.bodywebsite .form-wrap-size .radio-inline + .radio-inline { + margin-left: 1px; +} +.bodywebsite .form-wrap-size .radio-control { + color: #9f9f9f; + text-align: center; + text-transform: uppercase; + transition: .2s; +} +.bodywebsite .form-wrap-size .radio-control:hover { + color: #000; +} +.bodywebsite .form-wrap-size .radio-custom:checked ~ .radio-control { + color: #000; +} +.bodywebsite .checkbox, +.bodywebsite .checkbox-inline { + padding-left: 38px; + color: #000; +} +.bodywebsite .checkbox .checkbox-custom-dummy, +.bodywebsite .checkbox-inline .checkbox-custom-dummy { + pointer-events: none; + border-radius: 2px; + margin-left: 0; + left: 0; + background: #fff; + box-shadow: none; + border: 2px solid #dedede; +} +.bodywebsite .checkbox .checkbox-custom-dummy:after, +.bodywebsite .checkbox-inline .checkbox-custom-dummy:after { + content: '\e5ca'; + font-family: 'Material Icons'; + font-size: 22px; + line-height: 10px; + position: absolute; + top: 0; + left: -1px; + color: #2a2b2b; +} +.bodywebsite .checkbox-small { + padding-left: 26px; +} +.bodywebsite .checkbox-small .checkbox-custom-dummy { + margin-top: 6px; + width: 12px; + height: 12px; + border-width: 1px; + border-radius: 1px; +} +.bodywebsite .checkbox-small .checkbox-custom-dummy:after { + top: -1px; + left: -2px; + font-size: 18px; +} +.bodywebsite .textarea-lined-wrap { + position: relative; + line-height: 2.39; +} +.bodywebsite .textarea-lined-wrap textarea { + height: 203px; + resize: none; + overflow: hidden; + line-height: 2.39; + background-color: transparent; +} +.bodywebsite .textarea-lined-wrap-xs textarea { + height: 68px; +} +.bodywebsite .page .form-classic-bordered .form-label, +.bodywebsite .page .form-classic-bordered .form-label-outside, +.bodywebsite .page .form-classic-bordered .form-input { + color: #000; +} +.bodywebsite .page .form-classic-bordered .form-input { + border: 1px solid #dedede; +} +.bodywebsite .page .form-modern .form-input, +.bodywebsite .page .form-modern .form-label { + color: #9f9f9f; +} +.bodywebsite .page .form-modern input { + height: auto; + min-height: 20px; +} +.bodywebsite .page .form-modern .form-input:focus { + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .form-modern .form-input { + padding: 6px 0; + border-radius: 0; + border-width: 0 0 1px 0; + border-color: #dedede; + background-color: transparent; +} +.bodywebsite .page .form-modern .form-label { + left: 0; + top: 18px; +} +.bodywebsite .page .form-modern .form-validation { + top: auto; + left: auto; + right: 0; + bottom: -12px; + font-style: italic; +} +.bodywebsite .page .form-modern .has-error .help-block, +.bodywebsite .page .form-modern .has-error .control-label, +.bodywebsite .page .form-modern .has-error .radio, +.bodywebsite .page .form-modern .has-error .checkbox, +.bodywebsite .page .form-modern .has-error .radio-inline, +.bodywebsite .page .form-modern .has-error .checkbox-inline, +.bodywebsite .page .form-modern .has-error.radio label, +.bodywebsite .page .form-modern .has-error.checkbox label, +.bodywebsite .page .form-modern .has-error.radio-inline label, +.bodywebsite .page .form-modern .has-error.checkbox-inline label { + color: #fe4a21; +} +.bodywebsite .page .form-modern .has-error .form-input:not(.form-input-impressed), +.bodywebsite .page .form-modern .has-error .form-input:not(.form-input-impressed):focus { + border-color: #fe4a21; + box-shadow: none; +} +.bodywebsite .page .form-modern .has-error .form-input-impressed, +.bodywebsite .page .form-modern .has-error .form-input-impressed:focus { + box-shadow: inset 0 0 0 1px #fe4a21; +} +.bodywebsite .page .form-modern .has-error .input-group-addon { + color: #fff; + border-color: #fe4a21; + background-color: #fe4a21; +} +.bodywebsite .form-inline .page .form-modern .has-error ~ button[type='submit'] { + border-color: #fe4a21; + background: #fe4a21; +} +.bodywebsite .page .form-modern .has-error .form-validation { + color: #fe4a21; +} +.bodywebsite .page .form-modern.form-darker .form-input, +.bodywebsite .page .form-modern.form-darker .form-label { + color: #000; +} +.bodywebsite .page .form-modern.form-darker .form-label:not(.focus) + .form-input { + border-color: #cdcdcd; +} +.bodywebsite .page .form-modern.form-inverse .form-label, +.bodywebsite .page .form-modern.form-inverse .form-input { + color: #9f9f9f; + background-color: transparent; +} +.bodywebsite .page .form-modern.form-inverse .form-label.text-white-05, +.bodywebsite .page .form-modern.form-inverse .form-input.text-white-05 { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .stacktable { + width: 100%; + text-align: left; +} +.bodywebsite .st-head-row { + padding-top: 1em; +} +.bodywebsite .st-head-row.st-head-row-main { + font-size: 1.5em; + padding-top: 0; +} +.bodywebsite .st-key { + width: 49%; + text-align: right; + padding-right: 1%; +} +.bodywebsite .st-val { + width: 49%; + padding-left: 1%; +} +.bodywebsite .stacktable.large-only { + display: none; +} +.bodywebsite .stacktable.small-only { + display: table; +} +@media (min-width: 768px) { + .bodywebsite .stacktable.large-only { + display: table; + } + .bodywebsite .stacktable.small-only { + display: none; + } +} +.bodywebsite .section-relative { + position: relative; +} +.bodywebsite #sectionfooter h4, +.bodywebsite #sectiontestimonies h1 { + color: #fff; +} +@media (min-width: 768px) { + .bodywebsite .section-with-counters { + padding-top: 1px; + padding-bottom: 1px; + } + .bodywebsite .section-with-counters > div { + position: relative; + box-shadow: 2px 2px 27px 0px rgba(1, 3, 4, 0.35); + z-index: 2; + margin-top: -30px; + margin-bottom: -30px; + } +} +@media (min-width: 768px) { + .bodywebsite .section-image-aside { + position: relative; + } +} +.bodywebsite .section-image-aside-img { + position: absolute; + top: 0; + bottom: 0; + width: 190%; + -webkit-background-size: cover; + background-size: cover; +} +@media (min-width: 768px) { + .bodywebsite .section-image-aside-img { + width: 50vw; + } +} +.bodywebsite .section-image-aside-left .section-image-aside-img { + right: -50%; +} +@media (min-width: 768px) { + .bodywebsite .section-image-aside-left .section-image-aside-img { + right: 0; + } +} +.bodywebsite .section-image-aside-right .section-image-aside-img { + left: -50%; +} +@media (min-width: 768px) { + .bodywebsite .section-image-aside-right .section-image-aside-img { + left: 0; + } +} +.bodywebsite .section-15 { + padding-top: 15px; + padding-bottom: 15px; +} +.bodywebsite .section-30 { + padding-top: 30px; + padding-bottom: 30px; +} +.bodywebsite .section-35 { + padding-top: 35px; + padding-bottom: 35px; +} +.bodywebsite .section-40 { + padding-top: 40px; + padding-bottom: 40px; +} +.bodywebsite .section-45 { + padding-top: 45px; + padding-bottom: 45px; +} +.bodywebsite .section-50 { + padding-top: 50px; + padding-bottom: 50px; +} +.bodywebsite .section-60 { + padding-top: 60px; + padding-bottom: 60px; +} +.bodywebsite .section-66 { + padding-top: 66px; + padding-bottom: 66px; +} +.bodywebsite .section-75 { + padding-top: 75px; + padding-bottom: 75px; +} +.bodywebsite .section-90 { + padding-top: 90px; + padding-bottom: 90px; +} +.bodywebsite .section-100 { + padding-top: 100px; + padding-bottom: 100px; +} +.bodywebsite .section-120 { + padding-top: 120px; + padding-bottom: 120px; +} +.bodywebsite .section-130 { + padding-top: 130px; + padding-bottom: 130px; +} +.bodywebsite .section-145 { + padding-top: 145px; + padding-bottom: 145px; +} +.bodywebsite .section-165 { + padding-top: 165px; + padding-bottom: 165px; +} +@media (min-width: 576px) { + .bodywebsite .section-sm-15 { + padding-top: 15px; + padding-bottom: 15px; + } + .bodywebsite .section-sm-30 { + padding-top: 30px; + padding-bottom: 30px; + } + .bodywebsite .section-sm-35 { + padding-top: 35px; + padding-bottom: 35px; + } + .bodywebsite .section-sm-40 { + padding-top: 40px; + padding-bottom: 40px; + } + .bodywebsite .section-sm-45 { + padding-top: 45px; + padding-bottom: 45px; + } + .bodywebsite .section-sm-50 { + padding-top: 50px; + padding-bottom: 50px; + } + .bodywebsite .section-sm-60 { + padding-top: 60px; + padding-bottom: 60px; + } + .bodywebsite .section-sm-66 { + padding-top: 66px; + padding-bottom: 66px; + } + .bodywebsite .section-sm-75 { + padding-top: 75px; + padding-bottom: 75px; + } + .bodywebsite .section-sm-90 { + padding-top: 90px; + padding-bottom: 90px; + } + .bodywebsite .section-sm-100 { + padding-top: 100px; + padding-bottom: 100px; + } + .bodywebsite .section-sm-120 { + padding-top: 120px; + padding-bottom: 120px; + } + .bodywebsite .section-sm-130 { + padding-top: 130px; + padding-bottom: 130px; + } + .bodywebsite .section-sm-145 { + padding-top: 145px; + padding-bottom: 145px; + } + .bodywebsite .section-sm-165 { + padding-top: 165px; + padding-bottom: 165px; + } +} +@media (min-width: 768px) { + .bodywebsite .section-md-15 { + padding-top: 15px; + padding-bottom: 15px; + } + .bodywebsite .section-md-30 { + padding-top: 30px; + padding-bottom: 30px; + } + .bodywebsite .section-md-35 { + padding-top: 35px; + padding-bottom: 35px; + } + .bodywebsite .section-md-40 { + padding-top: 40px; + padding-bottom: 40px; + } + .bodywebsite .section-md-45 { + padding-top: 45px; + padding-bottom: 45px; + } + .bodywebsite .section-md-50 { + padding-top: 50px; + padding-bottom: 50px; + } + .bodywebsite .section-md-60 { + padding-top: 60px; + padding-bottom: 60px; + } + .bodywebsite .section-md-66 { + padding-top: 66px; + padding-bottom: 66px; + } + .bodywebsite .section-md-75 { + padding-top: 75px; + padding-bottom: 75px; + } + .bodywebsite .section-md-90 { + padding-top: 90px; + padding-bottom: 90px; + } + .bodywebsite .section-md-100 { + padding-top: 100px; + padding-bottom: 100px; + } + .bodywebsite .section-md-120 { + padding-top: 120px; + padding-bottom: 120px; + } + .bodywebsite .section-md-130 { + padding-top: 130px; + padding-bottom: 130px; + } + .bodywebsite .section-md-145 { + padding-top: 145px; + padding-bottom: 145px; + } + .bodywebsite .section-md-165 { + padding-top: 165px; + padding-bottom: 165px; + } +} +@media (min-width: 992px) { + .bodywebsite .section-lg-15 { + padding-top: 15px; + padding-bottom: 15px; + } + .bodywebsite .section-lg-30 { + padding-top: 30px; + padding-bottom: 30px; + } + .bodywebsite .section-lg-35 { + padding-top: 35px; + padding-bottom: 35px; + } + .bodywebsite .section-lg-40 { + padding-top: 40px; + padding-bottom: 40px; + } + .bodywebsite .section-lg-45 { + padding-top: 45px; + padding-bottom: 45px; + } + .bodywebsite .section-lg-50 { + padding-top: 50px; + padding-bottom: 50px; + } + .bodywebsite .section-lg-60 { + padding-top: 60px; + padding-bottom: 60px; + } + .bodywebsite .section-lg-66 { + padding-top: 66px; + padding-bottom: 66px; + } + .bodywebsite .section-lg-75 { + padding-top: 75px; + padding-bottom: 75px; + } + .bodywebsite .section-lg-90 { + padding-top: 90px; + padding-bottom: 90px; + } + .bodywebsite .section-lg-100 { + padding-top: 100px; + padding-bottom: 100px; + } + .bodywebsite .section-lg-120 { + padding-top: 120px; + padding-bottom: 120px; + } + .bodywebsite .section-lg-130 { + padding-top: 130px; + padding-bottom: 130px; + } + .bodywebsite .section-lg-145 { + padding-top: 145px; + padding-bottom: 145px; + } + .bodywebsite .section-lg-165 { + padding-top: 165px; + padding-bottom: 165px; + } +} +@media (min-width: 1200px) { + .bodywebsite .section-xl-15 { + padding-top: 15px; + padding-bottom: 15px; + } + .bodywebsite .section-xl-30 { + padding-top: 30px; + padding-bottom: 30px; + } + .bodywebsite .section-xl-35 { + padding-top: 35px; + padding-bottom: 35px; + } + .bodywebsite .section-xl-40 { + padding-top: 40px; + padding-bottom: 40px; + } + .bodywebsite .section-xl-45 { + padding-top: 45px; + padding-bottom: 45px; + } + .bodywebsite .section-xl-50 { + padding-top: 50px; + padding-bottom: 50px; + } + .bodywebsite .section-xl-60 { + padding-top: 60px; + padding-bottom: 60px; + } + .bodywebsite .section-xl-66 { + padding-top: 66px; + padding-bottom: 66px; + } + .bodywebsite .section-xl-75 { + padding-top: 75px; + padding-bottom: 75px; + } + .bodywebsite .section-xl-90 { + padding-top: 90px; + padding-bottom: 90px; + } + .bodywebsite .section-xl-100 { + padding-top: 100px; + padding-bottom: 100px; + } + .bodywebsite .section-xl-120 { + padding-top: 120px; + padding-bottom: 120px; + } + .bodywebsite .section-xl-130 { + padding-top: 130px; + padding-bottom: 130px; + } + .bodywebsite .section-xl-145 { + padding-top: 145px; + padding-bottom: 145px; + } + .bodywebsite .section-xl-165 { + padding-top: 165px; + padding-bottom: 165px; + } +} +@media (min-width: 1800px) { + .bodywebsite .section-xxl-15 { + padding-top: 15px; + padding-bottom: 15px; + } + .bodywebsite .section-xxl-30 { + padding-top: 30px; + padding-bottom: 30px; + } + .bodywebsite .section-xxl-35 { + padding-top: 35px; + padding-bottom: 35px; + } + .bodywebsite .section-xxl-40 { + padding-top: 40px; + padding-bottom: 40px; + } + .bodywebsite .section-xxl-45 { + padding-top: 45px; + padding-bottom: 45px; + } + .bodywebsite .section-xxl-50 { + padding-top: 50px; + padding-bottom: 50px; + } + .bodywebsite .section-xxl-60 { + padding-top: 60px; + padding-bottom: 60px; + } + .bodywebsite .section-xxl-66 { + padding-top: 66px; + padding-bottom: 66px; + } + .bodywebsite .section-xxl-75 { + padding-top: 75px; + padding-bottom: 75px; + } + .bodywebsite .section-xxl-90 { + padding-top: 90px; + padding-bottom: 90px; + } + .bodywebsite .section-xxl-100 { + padding-top: 100px; + padding-bottom: 100px; + } + .bodywebsite .section-xxl-120 { + padding-top: 120px; + padding-bottom: 120px; + } + .bodywebsite .section-xxl-130 { + padding-top: 130px; + padding-bottom: 130px; + } + .bodywebsite .section-xxl-145 { + padding-top: 145px; + padding-bottom: 145px; + } + .bodywebsite .section-xxl-165 { + padding-top: 165px; + padding-bottom: 165px; + } +} +.bodywebsite .section-top-15 { + padding-top: 15px; +} +.bodywebsite .section-top-30 { + padding-top: 30px; +} +.bodywebsite .section-top-35 { + padding-top: 35px; +} +.bodywebsite .section-top-40 { + padding-top: 40px; +} +.bodywebsite .section-top-45 { + padding-top: 45px; +} +.bodywebsite .section-top-50 { + padding-top: 50px; +} +.bodywebsite .section-top-60 { + padding-top: 60px; +} +.bodywebsite .section-top-66 { + padding-top: 66px; +} +.bodywebsite .section-top-75 { + padding-top: 75px; +} +.bodywebsite .section-top-90 { + padding-top: 90px; +} +.bodywebsite .section-top-100 { + padding-top: 100px; +} +.bodywebsite .section-top-120 { + padding-top: 120px; +} +.bodywebsite .section-top-130 { + padding-top: 130px; +} +.bodywebsite .section-top-145 { + padding-top: 145px; +} +.bodywebsite .section-top-165 { + padding-top: 165px; +} +@media (min-width: 576px) { + .bodywebsite .section-sm-top-15 { + padding-top: 15px; + } + .bodywebsite .section-sm-top-30 { + padding-top: 30px; + } + .bodywebsite .section-sm-top-35 { + padding-top: 35px; + } + .bodywebsite .section-sm-top-40 { + padding-top: 40px; + } + .bodywebsite .section-sm-top-45 { + padding-top: 45px; + } + .bodywebsite .section-sm-top-50 { + padding-top: 50px; + } + .bodywebsite .section-sm-top-60 { + padding-top: 60px; + } + .bodywebsite .section-sm-top-66 { + padding-top: 66px; + } + .bodywebsite .section-sm-top-75 { + padding-top: 75px; + } + .bodywebsite .section-sm-top-90 { + padding-top: 90px; + } + .bodywebsite .section-sm-top-100 { + padding-top: 100px; + } + .bodywebsite .section-sm-top-120 { + padding-top: 120px; + } + .bodywebsite .section-sm-top-130 { + padding-top: 130px; + } + .bodywebsite .section-sm-top-145 { + padding-top: 145px; + } + .bodywebsite .section-sm-top-165 { + padding-top: 165px; + } +} +@media (min-width: 768px) { + .bodywebsite .section-md-top-15 { + padding-top: 15px; + } + .bodywebsite .section-md-top-30 { + padding-top: 30px; + } + .bodywebsite .section-md-top-35 { + padding-top: 35px; + } + .bodywebsite .section-md-top-40 { + padding-top: 40px; + } + .bodywebsite .section-md-top-45 { + padding-top: 45px; + } + .bodywebsite .section-md-top-50 { + padding-top: 50px; + } + .bodywebsite .section-md-top-60 { + padding-top: 60px; + } + .bodywebsite .section-md-top-66 { + padding-top: 66px; + } + .bodywebsite .section-md-top-75 { + padding-top: 75px; + } + .bodywebsite .section-md-top-90 { + padding-top: 90px; + } + .bodywebsite .section-md-top-100 { + padding-top: 100px; + } + .bodywebsite .section-md-top-120 { + padding-top: 120px; + } + .bodywebsite .section-md-top-130 { + padding-top: 130px; + } + .bodywebsite .section-md-top-145 { + padding-top: 145px; + } + .bodywebsite .section-md-top-165 { + padding-top: 165px; + } +} +@media (min-width: 992px) { + .bodywebsite .section-lg-top-15 { + padding-top: 15px; + } + .bodywebsite .section-lg-top-30 { + padding-top: 30px; + } + .bodywebsite .section-lg-top-35 { + padding-top: 35px; + } + .bodywebsite .section-lg-top-40 { + padding-top: 40px; + } + .bodywebsite .section-lg-top-45 { + padding-top: 45px; + } + .bodywebsite .section-lg-top-50 { + padding-top: 50px; + } + .bodywebsite .section-lg-top-60 { + padding-top: 60px; + } + .bodywebsite .section-lg-top-66 { + padding-top: 66px; + } + .bodywebsite .section-lg-top-75 { + padding-top: 75px; + } + .bodywebsite .section-lg-top-90 { + padding-top: 90px; + } + .bodywebsite .section-lg-top-100 { + padding-top: 100px; + } + .bodywebsite .section-lg-top-120 { + padding-top: 120px; + } + .bodywebsite .section-lg-top-130 { + padding-top: 130px; + } + .bodywebsite .section-lg-top-145 { + padding-top: 145px; + } + .bodywebsite .section-lg-top-165 { + padding-top: 165px; + } +} +@media (min-width: 1200px) { + .bodywebsite .section-xl-top-15 { + padding-top: 15px; + } + .bodywebsite .section-xl-top-30 { + padding-top: 30px; + } + .bodywebsite .section-xl-top-35 { + padding-top: 35px; + } + .bodywebsite .section-xl-top-40 { + padding-top: 40px; + } + .bodywebsite .section-xl-top-45 { + padding-top: 45px; + } + .bodywebsite .section-xl-top-50 { + padding-top: 50px; + } + .bodywebsite .section-xl-top-60 { + padding-top: 60px; + } + .bodywebsite .section-xl-top-66 { + padding-top: 66px; + } + .bodywebsite .section-xl-top-75 { + padding-top: 75px; + } + .bodywebsite .section-xl-top-90 { + padding-top: 90px; + } + .bodywebsite .section-xl-top-100 { + padding-top: 100px; + } + .bodywebsite .section-xl-top-120 { + padding-top: 120px; + } + .bodywebsite .section-xl-top-130 { + padding-top: 130px; + } + .bodywebsite .section-xl-top-145 { + padding-top: 145px; + } + .bodywebsite .section-xl-top-165 { + padding-top: 165px; + } +} +@media (min-width: 1800px) { + .bodywebsite .section-xxl-top-15 { + padding-top: 15px; + } + .bodywebsite .section-xxl-top-30 { + padding-top: 30px; + } + .bodywebsite .section-xxl-top-35 { + padding-top: 35px; + } + .bodywebsite .section-xxl-top-40 { + padding-top: 40px; + } + .bodywebsite .section-xxl-top-45 { + padding-top: 45px; + } + .bodywebsite .section-xxl-top-50 { + padding-top: 50px; + } + .bodywebsite .section-xxl-top-60 { + padding-top: 60px; + } + .bodywebsite .section-xxl-top-66 { + padding-top: 66px; + } + .bodywebsite .section-xxl-top-75 { + padding-top: 75px; + } + .bodywebsite .section-xxl-top-90 { + padding-top: 90px; + } + .bodywebsite .section-xxl-top-100 { + padding-top: 100px; + } + .bodywebsite .section-xxl-top-120 { + padding-top: 120px; + } + .bodywebsite .section-xxl-top-130 { + padding-top: 130px; + } + .bodywebsite .section-xxl-top-145 { + padding-top: 145px; + } + .bodywebsite .section-xxl-top-165 { + padding-top: 165px; + } +} +.bodywebsite .section-bottom-15 { + padding-bottom: 15px; +} +.bodywebsite .section-bottom-30 { + padding-bottom: 30px; +} +.bodywebsite .section-bottom-35 { + padding-bottom: 35px; +} +.bodywebsite .section-bottom-40 { + padding-bottom: 40px; +} +.bodywebsite .section-bottom-45 { + padding-bottom: 45px; +} +.bodywebsite .section-bottom-50 { + padding-bottom: 50px; +} +.bodywebsite .section-bottom-60 { + padding-bottom: 60px; +} +.bodywebsite .section-bottom-66 { + padding-bottom: 66px; +} +.bodywebsite .section-bottom-75 { + padding-bottom: 75px; +} +.bodywebsite .section-bottom-90 { + padding-bottom: 90px; +} +.bodywebsite .section-bottom-100 { + padding-bottom: 100px; +} +.bodywebsite .section-bottom-120 { + padding-bottom: 120px; +} +.bodywebsite .section-bottom-130 { + padding-bottom: 130px; +} +.bodywebsite .section-bottom-145 { + padding-bottom: 145px; +} +.bodywebsite .section-bottom-165 { + padding-bottom: 165px; +} +@media (min-width: 576px) { + .bodywebsite .section-sm-bottom-15 { + padding-bottom: 15px; + } + .bodywebsite .section-sm-bottom-30 { + padding-bottom: 30px; + } + .bodywebsite .section-sm-bottom-35 { + padding-bottom: 35px; + } + .bodywebsite .section-sm-bottom-40 { + padding-bottom: 40px; + } + .bodywebsite .section-sm-bottom-45 { + padding-bottom: 45px; + } + .bodywebsite .section-sm-bottom-50 { + padding-bottom: 50px; + } + .bodywebsite .section-sm-bottom-60 { + padding-bottom: 60px; + } + .bodywebsite .section-sm-bottom-66 { + padding-bottom: 66px; + } + .bodywebsite .section-sm-bottom-75 { + padding-bottom: 75px; + } + .bodywebsite .section-sm-bottom-90 { + padding-bottom: 90px; + } + .bodywebsite .section-sm-bottom-100 { + padding-bottom: 100px; + } + .bodywebsite .section-sm-bottom-120 { + padding-bottom: 120px; + } + .bodywebsite .section-sm-bottom-130 { + padding-bottom: 130px; + } + .bodywebsite .section-sm-bottom-145 { + padding-bottom: 145px; + } + .bodywebsite .section-sm-bottom-165 { + padding-bottom: 165px; + } +} +@media (min-width: 768px) { + .bodywebsite .section-md-bottom-15 { + padding-bottom: 15px; + } + .bodywebsite .section-md-bottom-30 { + padding-bottom: 30px; + } + .bodywebsite .section-md-bottom-35 { + padding-bottom: 35px; + } + .bodywebsite .section-md-bottom-40 { + padding-bottom: 40px; + } + .bodywebsite .section-md-bottom-45 { + padding-bottom: 45px; + } + .bodywebsite .section-md-bottom-50 { + padding-bottom: 50px; + } + .bodywebsite .section-md-bottom-60 { + padding-bottom: 60px; + } + .bodywebsite .section-md-bottom-66 { + padding-bottom: 66px; + } + .bodywebsite .section-md-bottom-75 { + padding-bottom: 75px; + } + .bodywebsite .section-md-bottom-90 { + padding-bottom: 90px; + } + .bodywebsite .section-md-bottom-100 { + padding-bottom: 100px; + } + .bodywebsite .section-md-bottom-120 { + padding-bottom: 120px; + } + .bodywebsite .section-md-bottom-130 { + padding-bottom: 130px; + } + .bodywebsite .section-md-bottom-145 { + padding-bottom: 145px; + } + .bodywebsite .section-md-bottom-165 { + padding-bottom: 165px; + } +} +@media (min-width: 992px) { + .bodywebsite .section-lg-bottom-15 { + padding-bottom: 15px; + } + .bodywebsite .section-lg-bottom-30 { + padding-bottom: 30px; + } + .bodywebsite .section-lg-bottom-35 { + padding-bottom: 35px; + } + .bodywebsite .section-lg-bottom-40 { + padding-bottom: 40px; + } + .bodywebsite .section-lg-bottom-45 { + padding-bottom: 45px; + } + .bodywebsite .section-lg-bottom-50 { + padding-bottom: 50px; + } + .bodywebsite .section-lg-bottom-60 { + padding-bottom: 60px; + } + .bodywebsite .section-lg-bottom-66 { + padding-bottom: 66px; + } + .bodywebsite .section-lg-bottom-75 { + padding-bottom: 75px; + } + .bodywebsite .section-lg-bottom-90 { + padding-bottom: 90px; + } + .bodywebsite .section-lg-bottom-100 { + padding-bottom: 100px; + } + .bodywebsite .section-lg-bottom-120 { + padding-bottom: 120px; + } + .bodywebsite .section-lg-bottom-130 { + padding-bottom: 130px; + } + .bodywebsite .section-lg-bottom-145 { + padding-bottom: 145px; + } + .bodywebsite .section-lg-bottom-165 { + padding-bottom: 165px; + } +} +@media (min-width: 1200px) { + .bodywebsite .section-xl-bottom-15 { + padding-bottom: 15px; + } + .bodywebsite .section-xl-bottom-30 { + padding-bottom: 30px; + } + .bodywebsite .section-xl-bottom-35 { + padding-bottom: 35px; + } + .bodywebsite .section-xl-bottom-40 { + padding-bottom: 40px; + } + .bodywebsite .section-xl-bottom-45 { + padding-bottom: 45px; + } + .bodywebsite .section-xl-bottom-50 { + padding-bottom: 50px; + } + .bodywebsite .section-xl-bottom-60 { + padding-bottom: 60px; + } + .bodywebsite .section-xl-bottom-66 { + padding-bottom: 66px; + } + .bodywebsite .section-xl-bottom-75 { + padding-bottom: 75px; + } + .bodywebsite .section-xl-bottom-90 { + padding-bottom: 90px; + } + .bodywebsite .section-xl-bottom-100 { + padding-bottom: 100px; + } + .bodywebsite .section-xl-bottom-120 { + padding-bottom: 120px; + } + .bodywebsite .section-xl-bottom-130 { + padding-bottom: 130px; + } + .bodywebsite .section-xl-bottom-145 { + padding-bottom: 145px; + } + .bodywebsite .section-xl-bottom-165 { + padding-bottom: 165px; + } +} +@media (min-width: 1800px) { + .bodywebsite .section-xxl-bottom-15 { + padding-bottom: 15px; + } + .bodywebsite .section-xxl-bottom-30 { + padding-bottom: 30px; + } + .bodywebsite .section-xxl-bottom-35 { + padding-bottom: 35px; + } + .bodywebsite .section-xxl-bottom-40 { + padding-bottom: 40px; + } + .bodywebsite .section-xxl-bottom-45 { + padding-bottom: 45px; + } + .bodywebsite .section-xxl-bottom-50 { + padding-bottom: 50px; + } + .bodywebsite .section-xxl-bottom-60 { + padding-bottom: 60px; + } + .bodywebsite .section-xxl-bottom-66 { + padding-bottom: 66px; + } + .bodywebsite .section-xxl-bottom-75 { + padding-bottom: 75px; + } + .bodywebsite .section-xxl-bottom-90 { + padding-bottom: 90px; + } + .bodywebsite .section-xxl-bottom-100 { + padding-bottom: 100px; + } + .bodywebsite .section-xxl-bottom-120 { + padding-bottom: 120px; + } + .bodywebsite .section-xxl-bottom-130 { + padding-bottom: 130px; + } + .bodywebsite .section-xxl-bottom-145 { + padding-bottom: 145px; + } + .bodywebsite .section-xxl-bottom-165 { + padding-bottom: 165px; + } +} +html .bodywebsite .group { + -webkit-transform: translateY(-15px); + transform: translateY(-15px); + margin-bottom: -15px; + margin-left: -15px; +} +html .bodywebsite .group > *, +html .bodywebsite .group > *:first-child { + display: inline-block; + margin-top: 15px; + margin-left: 15px; +} +html .bodywebsite .group-xs { + -webkit-transform: translateY(-5px); + transform: translateY(-5px); + margin-bottom: -5px; + margin-left: -5px; +} +html .bodywebsite .group-xs > *, +html .bodywebsite .group-xs > *:first-child { + display: inline-block; + margin-top: 5px; + margin-left: 5px; +} +html .bodywebsite .group-sm { + -webkit-transform: translateY(-10px); + transform: translateY(-10px); + margin-bottom: -10px; + margin-left: -10px; +} +html .bodywebsite .group-sm > *, +html .bodywebsite .group-sm > *:first-child { + display: inline-block; + margin-top: 10px; + margin-left: 10px; +} +html .bodywebsite .group-md { + -webkit-transform: translateY(-15px); + transform: translateY(-15px); + margin-bottom: -15px; + margin-left: -15px; +} +html .bodywebsite .group-md > *, +html .bodywebsite .group-md > *:first-child { + display: inline-block; + margin-top: 15px; + margin-left: 15px; +} +html .bodywebsite .group-lg { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + margin-bottom: -20px; + margin-left: -20px; +} +html .bodywebsite .group-lg > *, +html .bodywebsite .group-lg > *:first-child { + display: inline-block; + margin-top: 20px; + margin-left: 20px; +} +html .bodywebsite .group-xl { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + margin-bottom: -30px; + margin-left: -30px; +} +html .bodywebsite .group-xl > *, +html .bodywebsite .group-xl > *:first-child { + display: inline-block; + margin-top: 30px; + margin-left: 30px; +} +html .bodywebsite .group-top > *, +html .bodywebsite .group-top > *:first-child { + vertical-align: top; +} +html .bodywebsite .group-middle > *, +html .bodywebsite .group-middle > *:first-child { + vertical-align: middle; +} +html .bodywebsite .group-bottom > *, +html .bodywebsite .group-bottom > *:first-child { + vertical-align: bottom; +} +html .bodywebsite .group-inline > * { + display: inline; +} +html .bodywebsite .group-inline > *:not(:last-child) { + margin-right: .25em; +} +html .bodywebsite .group-xl-responsive { + -webkit-transform: translateY(-18px); + transform: translateY(-18px); + margin-bottom: -18px; + margin-left: -18px; +} +html .bodywebsite .group-xl-responsive > *, +html .bodywebsite .group-xl-responsive > *:first-child { + display: inline-block; + margin-top: 18px; + margin-left: 18px; +} +@media (min-width: 768px) { + html .bodywebsite .group-xl-responsive { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + margin-bottom: -30px; + margin-left: -30px; + } + html .bodywebsite .group-xl-responsive > *, + html .bodywebsite .group-xl-responsive > *:first-child { + display: inline-block; + margin-top: 30px; + margin-left: 30px; + } +} +.bodywebsite .group-flex-center { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} +.bodywebsite .relative { + position: relative; +} +.bodywebsite .static { + position: static; +} +.bodywebsite .block-top-level { + position: relative; + z-index: 3; +} +.bodywebsite .height-fill { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} +.bodywebsite .height-fill > * { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .centered { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.bodywebsite .align-bottom { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; +} +.bodywebsite .block-centered { + margin-left: auto; + margin-right: auto; +} +@media (max-width: 767px) { + .bodywebsite .responsive-centered { + margin-left: auto; + margin-right: auto; + } +} +.bodywebsite .overflow-hidden { + overflow: hidden; +} +.bodywebsite .page .white-space-normal { + white-space: normal; +} +.bodywebsite * + h1, +.bodywebsite * + .h1 { + margin-top: 20px; +} +@media (min-width: 768px) { + .bodywebsite * + h1, + .bodywebsite * + .h1 { + margin-top: 27px; + } +} +@media (min-width: 992px) { + .bodywebsite * + h1, + .bodywebsite * + .h1 { + margin-top: 34px; + } +} +.bodywebsite * + h2, +.bodywebsite * + .h2 { + margin-top: 25px; +} +.bodywebsite * + h3, +.bodywebsite * + .h3 { + margin-top: 17px; +} +.bodywebsite * + h4, +.bodywebsite * + .h4 { + margin-top: 15px; +} +.bodywebsite h1 + *, +.bodywebsite .h1 + * { + margin-top: 25px; +} +.bodywebsite h2 + *, +.bodywebsite .h2 + * { + margin-top: 18px; +} +.bodywebsite h3 + *, +.bodywebsite .h3 + * { + margin-top: 19px; +} +.bodywebsite h4 + *, +.bodywebsite .h4 + * { + margin-top: 18px; +} +.bodywebsite * + p, +.bodywebsite * + p { + margin-top: 14px; +} +.bodywebsite * + .text-big { + margin-top: 20px; +} +.bodywebsite hr + * { + margin-top: 18px; +} +@media (min-width: 1200px) { + .bodywebsite hr + * { + margin-top: 26px; + } +} +.bodywebsite * + .big { + margin-top: 6px; +} +.bodywebsite * + .text-large { + margin-top: 10px; +} +.bodywebsite * + .text-bigger { + margin-top: 28px; +} +.bodywebsite * + .btn { + margin-top: 30px; +} +@media (min-width: 1200px) { + .bodywebsite * + .btn { + margin-top: 44px; + } +} +.bodywebsite * + .link { + margin-top: 18px; +} +.bodywebsite * + .contact-info { + margin-top: 16px; +} +.bodywebsite * + .list-inline { + margin-top: 32px; +} +.bodywebsite * + .list-terms { + margin-top: 42px; +} +@media (min-width: 1200px) { + .bodywebsite * + .list-terms { + margin-top: 62px; + } +} +.bodywebsite * + .list-marked, +.bodywebsite * + .list-ordered { + margin-top: 22px; +} +.bodywebsite * + .link-wrap { + margin-top: 8px; +} +.bodywebsite * + .link-iconed { + margin-top: 2px; +} +.bodywebsite .contact-info { + vertical-align: baseline; +} +.bodywebsite .contact-info a { + display: inline-block; +} +.bodywebsite .contact-info dl dt, +.bodywebsite .contact-info dl dd { + display: inline-block; +} +.bodywebsite .contact-info dl dt:after { + content: ':'; + display: inline-block; + text-align: center; +} +.bodywebsite .contact-info .dl-inline dt { + padding-right: 0; +} +.bodywebsite .grid-system p { + color: #00030a; +} +@media (max-width: 1199px) { + .bodywebsite .grid-system p { + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} +.bodywebsite .object-inline, +.bodywebsite .object-inline-baseline { + white-space: nowrap; +} +.bodywebsite .object-inline > * + *, +.bodywebsite .object-inline-baseline > * + * { + margin-top: 0; + margin-left: 5px; +} +.bodywebsite .object-inline { + vertical-align: middle; +} +.bodywebsite .object-inline > * { + display: inline-block; + vertical-align: middle; +} +.bodywebsite .object-inline-baseline { + vertical-align: baseline; +} +.bodywebsite .object-inline-baseline > * { + display: inline-block; + vertical-align: baseline; +} +.bodywebsite .row-no-gutter { + margin-left: 0; + margin-right: 0; +} +.bodywebsite .row-no-gutter [class*='col'] { + padding: 0; +} +.bodywebsite .text-width-1 { + max-width: 400px; +} +@media (min-width: 992px) { + .bodywebsite .text-width-1 { + max-width: 310px; + } +} +.bodywebsite .min-width-1 { + min-width: 100%; +} +@media (min-width: 576px) { + .bodywebsite .min-width-1 { + min-width: 270px; + } +} +.bodywebsite .img-shadow { + box-shadow: -3px 2px 4px 0px rgba(0, 0, 0, 0.58); +} +@media (min-width: 768px) { + .bodywebsite .img-shadow { + box-shadow: -5px 4px 8px 0px rgba(0, 0, 0, 0.58); + } +} +.bodywebsite .box { + box-shadow: 0 5px 23px 0 rgba(0, 0, 0, 0.3); + padding: 50px 30px; + margin-top: 10px; + margin-bottom: 10px; +} +@media (min-width: 992px) { + .bodywebsite .box { + padding: 55px 30px 65px 44px; + } +} +@media (min-width: 1200px) { + .bodywebsite .box { + padding: 54px 40px 85px 54px; + } +} +.bodywebsite .box-xs { + padding: 38px 20px; +} +.bodywebsite .page .box-list-xs { + box-shadow: 0 5px 13px 0 rgba(0, 0, 0, 0.2); +} +.bodywebsite .page .box-list-xs .box-xs + .box-xs { + border-top: 1px solid #1c2e3f; +} +@media (min-width: 768px) { + .bodywebsite .page .box-list-xs { + max-width: 170px; + } +} +.bodywebsite .group-item { + width: 100%; + max-width: 220px; + margin-left: auto; + margin-right: auto; +} +@media (min-width: 576px) { + .bodywebsite .group-item { + max-width: 300px; + } +} +@media (min-width: 768px) { + .bodywebsite .group-item { + min-width: 40%; + max-width: 0; + } +} +@media (min-width: 1200px) { + .bodywebsite .group-item { + min-width: 272px; + } + .bodywebsite .group-item-sm { + min-width: 195px; + } +} +@media (min-width: 1200px) { + .bodywebsite .border-modern { + position: relative; + } + .bodywebsite .border-modern .border-modern-item-1, + .bodywebsite .border-modern .border-modern-item-2, + .bodywebsite .border-modern .border-modern-item-3, + .bodywebsite .border-modern .border-modern-item-4 { + position: absolute; + width: 45px; + height: 45px; + border-left: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-top: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + } + .bodywebsite .border-modern .border-modern-item-1, + .bodywebsite .border-modern .border-modern-item-2 { + top: -27px; + } + .bodywebsite .border-modern .border-modern-item-3, + .bodywebsite .border-modern .border-modern-item-4 { + bottom: -68px; + } + .bodywebsite .border-modern .border-modern-item-1, + .bodywebsite .border-modern .border-modern-item-3 { + left: 0px; + } + .bodywebsite .border-modern .border-modern-item-2, + .bodywebsite .border-modern .border-modern-item-4 { + right: 0px; + } + .bodywebsite .border-modern .border-modern-item-2 { + transform: rotate(90deg); + } + .bodywebsite .border-modern .border-modern-item-3 { + transform: rotate(-90deg); + } + .bodywebsite .border-modern .border-modern-item-4 { + transform: rotate(180deg); + } +} +.bodywebsite .pagination-custom { + display: inline-block; + position: relative; + transform: translateY(-4px); + margin-bottom: -4px; +} +.bodywebsite .pagination-custom > * { + margin-top: 4px; +} +.bodywebsite .pagination-custom > *:not(:last-child) { + margin-right: 4px; +} +.bodywebsite .pagination-custom .page-item { + display: inline-block; + line-height: 1; +} +.bodywebsite .pagination-custom .page-item:first-child .page-link, +.bodywebsite .pagination-custom .page-item:last-child .page-link { + padding-left: 25px; + padding-right: 25px; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .pagination-custom .page-item .page-link { + display: block; + width: auto; + min-width: 52px; + height: 52px; + padding: 10px 20px; + border: 2px solid; + border-radius: 0; + font: 700 14px/14px "Roboto", Helvetica, Arial, sans-serif; + text-transform: uppercase; + vertical-align: middle; +} +.bodywebsite .pagination-custom .page-item .page-link:after { + content: ''; + height: 108%; + width: 0; + display: inline-block; + vertical-align: middle; +} +.bodywebsite .pagination-custom .page-item .page-link, +.bodywebsite .pagination-custom .page-item .page-link:active, +.bodywebsite .pagination-custom .page-item .page-link:focus { + color: #000; + background: transparent; + border-color: #cdcdcd; +} +.bodywebsite .pagination-custom .page-item .page-link:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .pagination-custom .page-item.disabled, +.bodywebsite .pagination-custom .page-item.active { + pointer-events: none; +} +.bodywebsite .pagination-custom .page-item.active .page-link { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .pagination-custom .page-item.disabled .page-link { + color: #f9f9f9; + background: #cdcdcd; + border-color: #cdcdcd; +} +.bodywebsite .label-custom { + padding: .35em .3em .25em; + font-weight: 400; + font-size: 70%; + text-transform: uppercase; +} +.bodywebsite .mac .label-custom { + padding-top: .4em; +} +.bodywebsite .label-custom.label-danger { + color: #fff; + background: #fe4a21; + box-shadow: inset 0 8px 12px rgba(0, 0, 0, 0.25); +} +.bodywebsite .label-custom.label-info { + color: #fff; + background: #3e9cf6; + box-shadow: inset 0 8px 12px rgba(0, 0, 0, 0.25); +} +.bodywebsite blockquote { + font: inherit; + padding: 0; + margin: 0; + border: 0; +} +.bodywebsite blockquote q:before, +.bodywebsite blockquote q:after { + content: none; +} +.bodywebsite blockquote cite { + font-style: normal; +} +.bodywebsite .quote-default { + position: relative; + padding: 43px 0 43px 6px; + color: #00030a; +} +.bodywebsite .quote-default svg { + fill: #ddd; +} +.bodywebsite .quote-default .quote-open, +.bodywebsite .quote-default .quote-close { + position: absolute; + left: 30px; +} +.bodywebsite .quote-default .quote-open { + top: 0; +} +.bodywebsite .quote-default .quote-close { + bottom: 0; +} +.bodywebsite .quote-bordered { + padding-top: 14px; +} +.bodywebsite .quote-bordered .quote-body { + position: relative; + padding-bottom: 10px; +} +.bodywebsite .quote-bordered h6 { + font-size: 18px; +} +.bodywebsite .quote-bordered .quote-body-inner { + position: relative; + padding: 37px 22px 29px 34px; + border-style: solid; + border-width: 1px 1px 0 1px; + border-color: #e5e7e9; +} +.bodywebsite .quote-bordered .quote-body-inner:before, +.bodywebsite .quote-bordered .quote-body-inner:after { + content: ''; + position: absolute; + bottom: -10px; + height: 10px; + border-style: solid; + border-color: #e5e7e9; + background-color: transparent; +} +.bodywebsite .quote-bordered .quote-body-inner:before { + left: 10px; + width: 46px; + border-width: 1px 1px 0 0; + transform: skew(45deg); + transform-origin: 100% 100%; +} +.bodywebsite .quote-bordered .quote-body-inner:after { + right: 10px; + width: calc(34%); + border-width: 1px 0 0 1px; + transform: skew(-45deg); + transform-origin: 0 100%; +} +.bodywebsite .quote-bordered .quote-open { + position: absolute; + top: -10px; + left: 34px; + z-index: 2; +} +.bodywebsite .quote-bordered .quote-open > svg { + fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .quote-bordered .quote-footer { + padding-left: 25px; +} +.bodywebsite .quote-bordered cite { + font-size: 17px; + font-weight: 900; + line-height: 21px; + color: #fff; +} +.bodywebsite .quote-bordered * + .quote-footer { + margin-top: 9px; +} +.bodywebsite .quote-bordered cite + p { + margin-top: 0; +} +.bodywebsite .quote-bordered-inverse cite, +.bodywebsite .quote-bordered-inverse q { + color: #000; +} +.bodywebsite .quote-minimal-bordered { + position: relative; + padding: 16px 0 26px; + text-align: center; +} +.bodywebsite .quote-minimal-bordered q { + font: 400 20px "Roboto", Helvetica, Arial, sans-serif; + font-style: italic; + color: #464a4d; +} +.bodywebsite .quote-minimal-bordered q:before, +.bodywebsite .quote-minimal-bordered q:after { + content: '"'; +} +.bodywebsite .quote-minimal-bordered:before, +.bodywebsite .quote-minimal-bordered:after { + content: ''; + position: absolute; + left: 50%; + width: 270px; + height: 1px; + transform: translateX(-50%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff', endColorstr='#00000000', GradientType=1); +} +.bodywebsite .quote-minimal-bordered:before { + top: 0; +} +.bodywebsite .quote-minimal-bordered:after { + bottom: 0; +} +@media (min-width: 768px) { + .bodywebsite .quote-minimal-bordered q { + font-size: 24px; + line-height: 1.55; + } +} +@media (min-width: 1200px) { + .bodywebsite .quote-minimal-bordered q { + font-size: 30px; + } +} +.bodywebsite .quote-minimal q { + font-size: 18px; + font-weight: 300; + font-style: italic; + line-height: 1.2; + color: #000; +} +.bodywebsite .quote-minimal cite { + font: 700 15px "Roboto", Helvetica, Arial, sans-serif; + line-height: 1.1; + color: #000; +} +.bodywebsite .quote-minimal .caption { + color: #9f9f9f; +} +.bodywebsite .quote-minimal.quote-minimal-inverse q { + color: #fff; +} +.bodywebsite .quote-minimal.quote-minimal-inverse cite { + color: #fff; +} +.bodywebsite .quote-minimal.quote-minimal-inverse .caption { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .quote-minimal * + .caption { + margin-top: 0; +} +.bodywebsite .quote-minimal * + .quote-meta { + margin-top: 20px; +} +.bodywebsite .quote-strict q, +.bodywebsite .quote-strict cite { + color: #000; +} +.bodywebsite .quote-strict q { + font-size: 19px; + font-weight: 300; + font-style: italic; + line-height: 28px; +} +.bodywebsite .quote-strict cite { + display: block; + font: 700 16px/21px "Roboto", Helvetica, Arial, sans-serif; + text-transform: uppercase; +} +.bodywebsite .quote-strict * + cite { + margin-top: 20px; +} +.bodywebsite .quote-strict.quote-strict-inverse q, +.bodywebsite .quote-strict.quote-strict-inverse cite { + color: #fff; +} +.bodywebsite .quote-vertical { + max-width: 360px; + margin-left: auto; + margin-right: auto; + text-align: center; +} +.bodywebsite .quote-vertical q { + font-size: 16px; + line-height: 1.57895; + font-weight: 100; + color: rgba(0, 0, 0, 0.5); +} +.bodywebsite .quote-vertical cite { + display: block; + color: #000; + font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; +} +.bodywebsite .quote-vertical .quote-open > svg { + fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .quote-vertical .quote-image, +.bodywebsite .quote-vertical .quote-image > img { + border-radius: 600px; +} +.bodywebsite .quote-vertical .quote-image > img { + width: auto; +} +.bodywebsite .quote-vertical * + cite { + margin-top: 16px; +} +.bodywebsite .quote-vertical * + .caption { + margin-top: 0; +} +.bodywebsite .quote-vertical * + .quote-text { + margin-top: 25px; +} +.bodywebsite .quote-vertical * + .quote-meta { + margin-top: 25px; +} +.bodywebsite .quote-vertical.quote-vertical-inverse q, +.bodywebsite .quote-vertical.quote-vertical-inverse cite { + color: #fff; +} +.bodywebsite .quote-vertical.quote-vertical-inverse .cite { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .quote-vertical.quote-vertical-inverse .quote-open > svg { + fill: #fff; +} +.bodywebsite .quote-review cite { + font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; + text-transform: uppercase; + letter-spacing: -0.025em; + color: #000; +} +.bodywebsite .quote-review .quote-header { + position: relative; + transform: translateY(-2px); + margin-bottom: -2px; +} +.bodywebsite .quote-review .quote-header > * { + margin-top: 2px; +} +.bodywebsite .quote-review .quote-header > *:not(:last-child) { + margin-right: 10px; +} +.bodywebsite .quote-review .quote-header > * { + display: inline-block; + vertical-align: middle; +} +.bodywebsite .quote-review * + .quote-body { + margin-top: 10px; +} +.bodywebsite * + .quote-review { + margin-top: 35px; +} +@media (min-width: 768px) { + .bodywebsite .quote-minimal q { + font-size: 22px; + } + .bodywebsite .quote-minimal cite { + font-size: 19px; + } + .bodywebsite .quote-minimal * + .quote-meta { + margin-top: 37px; + } + .bodywebsite * + .quote-review { + margin-top: 45px; + } +} +@media (min-width: 992px) { + .bodywebsite .quote-minimal q { + font-size: 24px; + } + .bodywebsite .quote-vertical q { + font-size: 19px; + } +} +.bodywebsite .quote-left .divider-fullwidth { + margin-top: 20px; + background: #bcd; +} +.bodywebsite .quote-left .quote-name { + font-size: 18px; + font-weight: 500; + color: #fff; +} +@media (min-width: 992px) { + .bodywebsite .quote-left .quote-name { + font-size: 24px; + } +} +.bodywebsite .quote-left .quote-desc-text { + font-size: 26px; + line-height: 1; + font-style: italic; + font-weight: 700; +} +@media (min-width: 992px) { + .bodywebsite .quote-left .quote-desc-text { + font-size: 36px; + } +} +.bodywebsite .quote-left .quote-body { + margin-top: 27px; + padding-left: 75px; + position: relative; + text-align: left; +} +.bodywebsite .quote-left .quote-body:before { + content: ''; + position: absolute; + top: 6px; + left: 0; + width: 50px; + height: 36px; + background: url("medias/image/ref; ?>/icon-quote.png") no-repeat top left; + opacity: .5; +} +.bodywebsite .quote-left .quote-body q { + color: #fff; +} +.bodywebsite .quote-left .h4 + *, +.bodywebsite .quote-left h5 + * { + margin-top: 0; +} +.bodywebsite .page .box-text > * { + display: inline; + margin: 0 .25em 0 0; +} +.bodywebsite .icon-box-horizontal .unit-left { + min-width: 48px; +} +.bodywebsite .icon-box-horizontal [class*='icon-md'] { + margin-top: -2px; +} +.bodywebsite .icon-box-horizontal [class*='icon-lg'] { + margin-top: -5px; +} +.bodywebsite .icon-box-horizontal * + p { + margin-top: 9px; +} +.bodywebsite .icon-box-vertical * + p { + margin-top: 9px; +} +.bodywebsite .icon-box-vertical-sm { + max-width: 370px; +} +@media (max-width: 767px) { + .bodywebsite .icon-box-vertical-sm { + margin-left: auto; + margin-right: auto; + } +} +.bodywebsite .icon-box { + position: relative; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 100%; + padding: 35px 30px; + text-align: center; + cursor: default; +} +@media (min-width: 768px) { + .bodywebsite .icon-box:before, + .bodywebsite .icon-box:after { + content: ''; + position: absolute; + width: 100%; + height: 100%; + border: 1px solid #e5e7e9; + pointer-events: none; + transition: .33s all ease; + } + .bodywebsite .icon-box.icon-box-top-line:before { + border-width: 1px 0 0 0; + } + .bodywebsite .icon-box:before { + top: 0; + left: 0; + border-width: 0 0 0 0; + } + .bodywebsite .icon-box:after { + bottom: 0; + right: 0; + border-width: 0 1px 1px 0; + } +} +.bodywebsite .icon-box .icon:after { + opacity: 0; +} +.bodywebsite .icon-box .btn:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .icon-box .box-top, +.bodywebsite .icon-box .box-body { + position: relative; + will-change: transform; + transition: .33s all ease; + -webkit-filter: blur(0); +} +.bodywebsite .icon-box .box-top { + top: 0; +} +.bodywebsite .icon-box .box-body { + max-width: 100%; +} +.bodywebsite .icon-box .box-header { + bottom: 0; +} +.bodywebsite .icon-box .box-icon { + min-height: 46px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} +.bodywebsite .icon-box * + .box-header { + margin-top: 10px; +} +.bodywebsite .icon-box * + .box-body { + margin-top: 22px; +} +.bodywebsite .icon-box .box-body + .btn { + margin-top: 18px; +} +.bodywebsite .icon-box.hover .box-top, +.bodywebsite .icon-box:hover .box-top { + -webkit-transform: translateY(-7px); + transform: translateY(-7px); +} +.bodywebsite .icon-box.hover .btn, +.bodywebsite .icon-box.hover .box-body, +.bodywebsite .icon-box:hover .btn, +.bodywebsite .icon-box:hover .box-body { + -webkit-transform: translateY(7px); + transform: translateY(7px); +} +@media (min-width: 992px) { + .bodywebsite .desktop .icon-box .icon-box-overlay { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + opacity: 0; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + transition: 0.2s ease-in-out; + } + .bodywebsite .desktop .icon-box:hover .icon-box-overlay { + opacity: 1; + z-index: 5; + -webkit-transform: scale(1.05); + transform: scale(1.05); + } + .bodywebsite .desktop .icon-box:hover .btn { + z-index: 6; + } + .bodywebsite .desktop .icon-box:hover .box-body, + .bodywebsite .desktop .icon-box:hover .box-top { + z-index: 6; + } +} +@media (min-width: 768px) { + .bodywebsite .icon-box { + padding: 67px 37px 61px; + margin-left: auto; + margin-right: auto; + } +} +@media (min-width: 1400px) { + .bodywebsite .icon-box { + padding: 67px 110px 61px; + } +} +@media (min-width: 1800px) { + .bodywebsite .icon-box { + padding: 90px 165px 82px; + } +} +.bodywebsite .list-blocks { + counter-reset: li; +} +.bodywebsite .list-blocks > li { + display: block; +} +.bodywebsite .list-blocks .block-list-counter:before { + position: relative; + content: counter(li, decimal-leading-zero); + counter-increment: li; + font: 700 30px/30px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: -0.025em; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-blocks > li + li { + margin-top: 50px; +} +.bodywebsite .block-image-plate { + display: block; + width: 100%; +} +.bodywebsite .block-image-plate .block-header { + max-width: 400px; +} +.bodywebsite .block-image-plate .block-inner { + position: relative; + padding: 45px 30px; +} +.bodywebsite .block-image-plate .block-inner:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 0; + background: rgba(0, 0, 0, 0.7); +} +.bodywebsite .block-image-plate .block-inner > * { + position: relative; + z-index: 2; +} +.bodywebsite .block-image-plate * + .block-text { + margin-top: 18px; +} +.bodywebsite .block-image-plate * + .block-body { + margin-top: 22px; +} +@media (max-width: 767px) { + .bodywebsite .block-image-plate { + margin-left: -16px; + margin-right: -15px; + width: calc(132%); + } +} +@media (min-width: 768px) { + .bodywebsite .block-image-plate .block-header { + max-width: 340px; + } + .bodywebsite .block-image-plate .block-header h3 { + line-height: 1.2; + } + .bodywebsite .block-image-plate .block-inner { + padding: 60px 12.5% 60px 8.33333%; + } + .bodywebsite .block-image-plate .block-body { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + } + .bodywebsite .block-image-plate .block-left { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-flex-basis: 11.11111%; + -ms-flex-preferred-size: 11.11111%; + flex-basis: 11.11111%; + max-width: 11.11111%; + max-width: 100px; + } + .bodywebsite .block-image-plate .block-body { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } + .bodywebsite .block-image-plate * + .block-text { + margin-top: 0; + } +} +@media (min-width: 992px) { + .bodywebsite .block-image-plate .block-header { + max-width: 410px; + } + .bodywebsite .block-image-plate .block-inner { + padding-right: 16%; + padding-top: 90px; + padding-bottom: 95px; + } +} +.bodywebsite .block-vacation { + position: relative; + width: 100%; + padding: 39px 9% 45px; + border-radius: 4px; + background: #fff; + box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); +} +.bodywebsite .block-vacation, +.bodywebsite .block-vacation:active, +.bodywebsite .block-vacation:focus, +.bodywebsite .block-vacation:hover { + color: #9f9f9f; +} +.bodywebsite .block-vacation:hover { + box-shadow: -3px 5px 12px 0px rgba(65, 65, 65, 0.16); +} +.bodywebsite .block-vacation * + .block-meta { + margin-top: 14px; +} +@media (min-width: 1200px) { + .bodywebsite .block-vacation * + .block-meta { + margin-top: 5px; + } +} +.bodywebsite .block-shadow { + position: relative; + width: 100%; + padding-top: 30px; + overflow: hidden; + border-radius: 0; + background: #fff; + box-shadow: 0px 1px 10px 0px rgba(65, 65, 65, 0.12); + text-align: center; +} +.bodywebsite .block-shadow .block-inner { + padding: 0 40px; +} +.bodywebsite .block-shadow * + .block-footer { + margin-top: 32px; +} +.bodywebsite .block-shadow * + .icon-block { + margin-top: 40px; +} +@media (min-width: 768px) { + .bodywebsite .block-shadow { + padding-top: 38px; + } + .bodywebsite .block-shadow .block-inner { + padding: 0 70px; + } + .bodywebsite .block-shadow * + .icon-block { + margin-top: 60px; + } +} +.bodywebsite .box-counter { + text-align: center; +} +.bodywebsite .box-counter .box-header { + text-transform: uppercase; +} +.bodywebsite .box-counter * + .box-header { + margin-top: 10px; +} +@media (min-width: 768px) and (max-width: 1199px) { + .bodywebsite .box-counter .box-header { + font-size: 15px; + } +} +.bodywebsite .box-counter-inverse .box-header { + color: rgba(255, 255, 255, 0.2); +} +.bodywebsite .box-counter-inverse .counter { + color: #dedede; +} +.bodywebsite .box-counter-inverse-lighter .box-header { + color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .box-counter-inverse-lighter .counter { + color: #dedede; +} +.bodywebsite .box-container-small { + display: inline-block; + width: 100%; + max-width: 280px; +} +.bodywebsite .post-single .post-footer { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + position: relative; + transform: translateY(-10px); + margin-bottom: -10px; +} +.bodywebsite .post-single .post-footer > * { + margin-top: 10px; +} +.bodywebsite .post-single .post-footer > *:not(:last-child) { + margin-right: 20px; +} +.bodywebsite .post-single * + .post-header { + margin-top: 15px; +} +.bodywebsite .post-single * + .post-meta { + margin-top: 20px; +} +.bodywebsite .post-single * + .post-body { + margin-top: 20px; +} +.bodywebsite .post-single * + .post-footer { + margin-top: 42px; +} +.bodywebsite .post-single + * { + margin-top: 40px; +} +@media (min-width: 768px) { + .bodywebsite .post-single * + .post-header { + margin-top: 22px; + } + .bodywebsite .post-single * + .post-meta { + margin-top: 10px; + } +} +.bodywebsite .post-info * + .post-main { + margin-top: 30px; +} +.bodywebsite .post-info * + .post-body { + margin-top: 20px; +} +@media (min-width: 768px) { + .bodywebsite .post-info .post-main { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .bodywebsite .post-info .post-left { + -webkit-flex-basis: 33.33333%; + -ms-flex-preferred-size: 33.33333%; + flex-basis: 33.33333%; + max-width: 33.33333%; + padding-right: 25px; + } + .bodywebsite .post-info .post-body { + -webkit-flex-basis: 66.66667%; + -ms-flex-preferred-size: 66.66667%; + flex-basis: 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .post-info * + .post-body { + margin-top: 0; + } +} +.bodywebsite .post-minimal { + position: relative; + border-radius: 4px; + overflow: hidden; + background: #fff; + box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); +} +.bodywebsite .post-minimal .post-body { + padding: 20px; +} +.bodywebsite .post-minimal * + p { + margin-top: 8px; +} +.bodywebsite .post-minimal * + .post-meta { + margin-top: 5px; +} +@media (max-width: 575px) { + .bodywebsite .post-minimal { + display: inline-block; + width: 100%; + max-width: 300px; + } +} +@media (min-width: 576px) { + .bodywebsite .post-minimal { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + } + .bodywebsite .post-minimal .post-left { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + width: 220px; + } + .bodywebsite .post-minimal .post-image { + position: relative; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; + } + .bodywebsite .post-minimal .post-image img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + height: auto; + width: auto; + min-height: 100%; + min-width: 100%; + z-index: 1; + } + .bodywebsite .post-minimal .post-body { + padding: 30px 24px 30px 27px; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } +} +@media (min-width: 1200px) { + .bodywebsite .post-minimal .post-body { + padding: 40px 26px 40px 50px; + } +} +.bodywebsite .post-preview { + max-width: 320px; +} +.bodywebsite .post-preview a { + display: block; +} +.bodywebsite .post-preview .post-image, +.bodywebsite .post-preview .post-image img { + border-radius: 5px; +} +.bodywebsite .post-preview .post-image img { + width: auto; +} +.bodywebsite .post-preview .post-header { + line-height: 1.5; + color: #000; + transition: .33s all ease; +} +.bodywebsite .post-preview .list-meta > li { + display: inline-block; + font-size: 12px; + font-style: italic; + color: #9b9b9b; +} +.bodywebsite .post-preview .list-meta > li:not(:last-child):after { + content: '/'; +} +.bodywebsite .post-preview:hover .post-header { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .post-preview * + .post-meta { + margin-top: 5px; +} +.bodywebsite .post-preview.post-preview-inverse > li { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .post-preview.post-preview-inverse .post-header { + color: #fff; +} +.bodywebsite .post-preview.post-preview-inverse:hover .post-header { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .blog-timeline > dt { + font: 700 25px "Roboto", Helvetica, Arial, sans-serif; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .blog-timeline > dd { + margin-top: 20px; +} +@media (min-width: 768px) { + .bodywebsite .blog-timeline { + word-spacing: 0; + white-space: nowrap; + } + .bodywebsite .blog-timeline > * { + display: inline-block; + } + .bodywebsite .blog-timeline > dt { + min-width: 65px; + padding-right: 20px; + margin-top: -0.15em; + vertical-align: top; + } + .bodywebsite .blog-timeline > dd { + margin-top: 0; + width: calc(0%); + } +} +@media (min-width: 992px) { + .bodywebsite .blog-timeline > dt { + min-width: 100px; + padding-right: 30px; + } +} +.bodywebsite .post-boxed { + max-width: 330px; + margin-right: auto; + margin-left: auto; + padding-top: 10px; + text-align: center; + box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); + transition: .3s all ease; +} +.bodywebsite .post-boxed-img-wrap a { + display: block; +} +.bodywebsite .post-boxed-title { + font: 500 18px/28px "Roboto", Helvetica, Arial, sans-serif; +} +.bodywebsite .post-boxed-title { + color: #000; +} +.bodywebsite .post-boxed-title a { + display: inline; + color: #000; +} +.bodywebsite .post-boxed-title a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .post-boxed img { + max-width: 75%; +} +.bodywebsite .post-boxed .list-inline { + font-size: 12px; + letter-spacing: .05em; +} +.bodywebsite .post-boxed-caption { + padding: 20px; +} +.bodywebsite #sectionteam .post-boxed-caption { + height: 140px; +} +.bodywebsite .post-boxed .post-boxed-title + * { + margin-top: 5px; +} +@media (min-width: 768px) { + .bodywebsite .post-boxed .post-boxed-caption { + padding: 28px 42px 36px 28px; + } +} +@media (min-width: 1200px) { + .bodywebsite .post-boxed:hover { + box-shadow: -3px 5px 12px 0px rgba(65, 65, 65, 0.16); + } +} +.bodywebsite .post-minimal .post-image { + height: 100%; +} +.bodywebsite .post-minimal .post-image img { + width: 100%; + height: 100%; + object-fit: cover; +} +.bodywebsite * + .post-blockquote { + margin-top: 30px; +} +.bodywebsite .post-blockquote + * { + margin-top: 30px; +} +@media (min-width: 768px) { + .bodywebsite * + .post-blockquote { + margin-top: 50px; + } + .bodywebsite .post-blockquote + * { + margin-top: 50px; + } +} +.bodywebsite * + .post-comment-block, +.bodywebsite * + .post-comment-form { + margin-top: 40px; +} +.bodywebsite .post-comment-form h4 + * { + margin-top: 15px; +} +.bodywebsite .comment figure, +.bodywebsite .comment figure img { + border-radius: 50%; + max-width: 71px; +} +.bodywebsite .comment time { + font-size: 12px; + line-height: 1; + color: #9b9b9b; +} +.bodywebsite .comment .user { + font-size: 16px; + line-height: 1.33333; + font-weight: 700; + text-transform: uppercase; + color: #000; +} +.bodywebsite .comment .list-icon-meta { + position: relative; + transform: translateY(0); + margin-bottom: 0; +} +.bodywebsite .comment .list-icon-meta > * { + margin-top: 0; +} +.bodywebsite .comment .list-icon-meta > *:not(:last-child) { + margin-right: 8px; +} +.bodywebsite .comment .list-icon-meta > li { + display: inline-block; +} +.bodywebsite .comment .list-icon-meta li { + font-size: 12px; + line-height: 1; + font-weight: 400; +} +.bodywebsite .comment .comment-body { + padding: 17px 22px; + border: 1px solid #dedede; + border-radius: 7px; +} +.bodywebsite .comment .comment-body-header { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + position: relative; + transform: translateY(-5px); + margin-bottom: -5px; +} +.bodywebsite .comment .comment-body-header > * { + margin-top: 5px; +} +.bodywebsite .comment .comment-body-header > *:not(:last-child) { + margin-right: 5px; +} +@media (min-width: 768px) { + .bodywebsite .comment .comment-body-header { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } +} +.bodywebsite .comment .comment-body-header > * { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.bodywebsite .comment .comment-meta { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + position: relative; + transform: translateY(-5px); + margin-bottom: -5px; +} +.bodywebsite .comment .comment-meta > * { + margin-top: 5px; +} +.bodywebsite .comment .comment-meta > *:not(:last-child) { + margin-right: 10px; +} +@media (min-width: 768px) { + .bodywebsite .comment .comment-meta > * { + display: inline-block; + vertical-align: baseline; + } +} +.bodywebsite .comment .comment-body-text { + margin-top: 10px; +} +.bodywebsite .comment-minimal .author { + font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; + text-transform: uppercase; + letter-spacing: -0.025em; + color: #000; +} +.bodywebsite .comment-minimal * + .comment-body { + margin-top: 10px; +} +.bodywebsite * + .comment-minimal { + margin-top: 35px; +} +.bodywebsite .comment-group-reply { + padding-left: 12%; +} +.bodywebsite .comment + * { + margin-top: 21px; +} +.bodywebsite * + .comment-group { + margin-top: 30px; +} +@media (min-width: 768px) { + .bodywebsite .comment > .unit > .unit-left { + margin-top: 16px; + } + .bodywebsite * + .comment-minimal { + margin-top: 45px; + } +} +@media (min-width: 992px) { + .bodywebsite * + .post-comment { + margin-top: 80px; + } +} +.bodywebsite .page-title { + text-align: center; +} +.bodywebsite .page-title > * { + letter-spacing: 0; + text-transform: uppercase; +} +.bodywebsite .page-title .page-title-inner { + position: relative; + display: inline-block; +} +.bodywebsite .page-title .page-title-left, +.bodywebsite .page-title .page-title-right { + position: absolute; + top: 50%; + width: auto; + overflow: hidden; + white-space: nowrap; + vertical-align: middle; +} +.bodywebsite .page-title .page-title-left *, +.bodywebsite .page-title .page-title-right * { + display: inline; + white-space: nowrap; +} +.bodywebsite .page-title .page-title-left { + left: 0; + text-align: right; + transform: translate(-100%, -50%); +} +.bodywebsite .page-title .page-title-left * { + padding-right: .85em; +} +.bodywebsite .page-title .page-title-left *:nth-last-child(odd) { + color: rgba(255, 255, 255, 0.1); +} +.bodywebsite .page-title .page-title-left *:nth-last-child(even) { + color: rgba(255, 255, 255, 0.2); +} +.bodywebsite .page-title .page-title-right { + right: 0; + text-align: left; + transform: translate(100%, -50%); +} +.bodywebsite .page-title .page-title-right * { + padding-left: .85em; +} +.bodywebsite .page-title .page-title-right *:nth-child(odd) { + color: rgba(255, 255, 255, 0.1); +} +.bodywebsite .page-title .page-title-right *:nth-child(even) { + color: rgba(255, 255, 255, 0.2); +} +.bodywebsite .page-title-wrap { + background: #000; + background-attachment: fixed; + -webkit-background-size: cover; + background-size: cover; + background-position: center 80%; +} +@media (min-width: 768px) { + .bodywebsite .page-title { + text-align: left; + } +} +.bodywebsite .preloader { + position: fixed; + left: 0; + top: 0; + bottom: 0; + right: 0; + z-index: 10000; + display: flex; + justify-content: center; + align-items: center; + padding: 20px; + background: #fff; + transition: .3s all ease; +} +.bodywebsite .preloader.loaded { + opacity: 0; + visibility: hidden; +} +.bodywebsite .preloader-body { + text-align: center; +} +.bodywebsite .preloader-body p { + position: relative; + right: -8px; +} +.bodywebsite .cssload-container { + width: 100%; + height: 36px; + text-align: center; +} +.bodywebsite .cssload-speeding-wheel { + width: 36px; + height: 36px; + margin: 0 auto; + border: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-radius: 50%; + border-left-color: transparent; + border-bottom-color: transparent; + animation: cssload-spin 0.88s infinite linear; +} +@-webkit-keyframes cssload-spin { + 100% { + transform: rotate(360deg); + } +} +@keyframes cssload-spin { + 100% { + transform: rotate(360deg); + } +} +.bodywebsite .pricing-table { + overflow: hidden; + background: #fff; + text-align: center; + box-shadow: -1px 2px 5px 0 rgba(65, 65, 65, 0.12); +} +.bodywebsite .pricing-table-header { + font-size: 18px; + text-transform: uppercase; + letter-spacing: .05em; + color: #464a4d; +} +.bodywebsite .pricing-table-body { + padding: 35px 30px; +} +.bodywebsite .pricing-table-label { + padding: 17px 15px; + text-align: center; + background: #3a3c3e; +} +.bodywebsite .pricing-table-label p { + font: 700 14px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: .05em; + text-transform: uppercase; + color: #fff; +} +.bodywebsite .pricing-table .pricing-list { + font-size: 16px; + font-weight: 300; + color: #00030a; +} +.bodywebsite .pricing-table .pricing-list span { + display: inline-block; + margin-right: .25em; +} +.bodywebsite .pricing-table .pricing-list > li + li { + margin-top: 12px; +} +.bodywebsite .pricing-table * + .price-object { + margin-top: 22px; +} +.bodywebsite .pricing-table * + .pricing-list { + margin-top: 22px; +} +.bodywebsite .pricing-object { + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-weight: 900; + font-size: 0; + line-height: 0; + color: #000; +} +.bodywebsite .pricing-object > * { + margin-top: 0; +} +.bodywebsite .pricing-object .price { + font-family: Helvetica, Arial, sans-serif; + font-weight: 900; +} +.bodywebsite .pricing-object .small { + position: relative; + font: 700 10px "Roboto", Helvetica, Arial, sans-serif; + color: inherit; + text-transform: uppercase; +} +.bodywebsite .pricing-object .small-middle { + vertical-align: middle; +} +.bodywebsite .pricing-object .small-bottom { + vertical-align: bottom; +} +.bodywebsite .pricing-object-sm { + font-size: 32px; + line-height: .8; +} +.bodywebsite .pricing-object-sm .small { + font-size: 12px; +} +.bodywebsite .pricing-object-sm .small-middle { + margin-right: 3px; +} +.bodywebsite .pricing-object-sm .small-bottom { + margin-left: 1px; + vertical-align: bottom; +} +.bodywebsite .price-irrelevant { + color: #9f9f9f; + text-decoration: line-through; +} +.bodywebsite .pricing-object-md { + font-size: 53px; + line-height: 1; +} +.bodywebsite .pricing-object-md .price { + line-height: .5; +} +.bodywebsite .pricing-object-md .small { + font-size: 17px; + font-weight: 400; +} +.bodywebsite .pricing-object-md .small-middle { + font-size: 23px; +} +.bodywebsite .pricing-object-md .small-bottom { + bottom: -0.25em; +} +.bodywebsite .pricing-object-lg, +.bodywebsite .pricing-object-xl { + font-size: 64px; + line-height: .7; +} +.bodywebsite .pricing-object-lg .small, +.bodywebsite .pricing-object-xl .small { + font-size: 9px; +} +.bodywebsite .pricing-object-lg .small-top, +.bodywebsite .pricing-object-xl .small-top { + top: 11px; + margin-right: 5px; + font-size: 14px; + vertical-align: top; + font-weight: 700; +} +.bodywebsite .pricing-object-lg .small-bottom, +.bodywebsite .pricing-object-xl .small-bottom { + bottom: -10px; + margin-left: -2px; + font-weight: 700; + vertical-align: bottom; +} +.bodywebsite .price-current .small { + position: relative; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-weight: 400; +} +.bodywebsite .price-current .small-middle { + vertical-align: middle; + top: -0.3em; +} +.bodywebsite .price-current .small-bottom { + top: .3em; +} +@media (min-width: 768px) { + .bodywebsite .pricing-object-lg { + font-size: 72px; + } + .bodywebsite .pricing-object-xl { + font-size: 54px; + } + .bodywebsite .pricing-object-xl .small-middle { + font-size: 30px; + } + .bodywebsite .pricing-object-xl .small-bottom { + font-size: 25px; + } +} +@media (min-width: 992px) { + .bodywebsite .pricing-object-xl { + font-size: 76px; + } +} +.bodywebsite .panel.bg-accent.bg-default-outline-btn.text-center { + background: transparent; +} +.bodywebsite .product .product-label { + padding: 7px 11px; + min-width: 90px; + font: 700 12px/16px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: .05em; + text-align: center; + border-radius: 0 0 7px 7px; +} +.bodywebsite .product .product-rating { + position: relative; + transform: translateY(-2px); + margin-bottom: -2px; +} +.bodywebsite .product .product-rating > * { + margin-top: 2px; +} +.bodywebsite .product .product-rating > *:not(:last-child) { + margin-right: 5px; +} +.bodywebsite .product .product-rating > * { + display: inline-block; + vertical-align: middle; +} +.bodywebsite .product .product-color { + display: inline-block; + width: 24px; + height: 24px; + font-size: 0; + line-height: 0; + border-radius: 50%; + background: #000; + vertical-align: middle; +} +.bodywebsite .product .product-size { + font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; + color: #000; +} +.bodywebsite .product * + .product-brand, +.bodywebsite .product .product-brand + * { + margin-top: 0; +} +.bodywebsite .one-screen-page .page { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; +} +.bodywebsite .one-screen-page .page-inner { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 100vh; + text-align: center; +} +.bodywebsite .one-screen-page .page-inner, +.bodywebsite .one-screen-page .page-inner > * { + width: 100%; +} +.bodywebsite .one-screen-page .page-head, +.bodywebsite .one-screen-page .page-foot { + padding: 0; + background: transparent; +} +.bodywebsite .one-screen-page .page-head-inner { + padding: calc(5em) 0 calc(3em); +} +.bodywebsite .one-screen-page .page-content { + padding: calc(5em) 0; +} +.bodywebsite .one-screen-page .page-foot-inner { + padding: calc(3em) 0 calc(5em); +} +.bodywebsite .one-screen-page .rights { + color: #fff; +} +.bodywebsite .one-screen-page .rights a, +.bodywebsite .one-screen-page .rights a:active, +.bodywebsite .one-screen-page .rights a:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .one-screen-page .rights a:hover { + color: #ababab; +} +@media (min-width: 576px) { + .bodywebsite .one-screen-page .page-inner { + text-align: left; + } +} +@media (min-width: 1800px) { + .bodywebsite .one-screen-page .page-head-inner { + padding: 50px 0 10px; + } + .bodywebsite .one-screen-page .page-content { + padding: 30px 0; + } + .bodywebsite .one-screen-page .page-foot-inner { + padding: 50px 0 23px; + } +} +.bodywebsite .ie-10 .one-screen-page, +.bodywebsite .ie-11 .one-screen-page { + overflow-x: hidden; + overflow-y: auto; +} +.bodywebsite .inset-left-0 { + padding-left: 0; +} +.bodywebsite .inset-left-10 { + padding-left: 10px; +} +.bodywebsite .inset-left-15 { + padding-left: 15px; +} +.bodywebsite .inset-left-20 { + padding-left: 20px; +} +.bodywebsite .inset-left-30 { + padding-left: 30px; +} +.bodywebsite .inset-left-40 { + padding-left: 40px; +} +.bodywebsite .inset-left-50 { + padding-left: 50px; +} +.bodywebsite .inset-left-60 { + padding-left: 60px; +} +.bodywebsite .inset-left-70 { + padding-left: 70px; +} +.bodywebsite .inset-left-85 { + padding-left: 85px; +} +.bodywebsite .inset-left-100 { + padding-left: 100px; +} +@media (min-width: 576px) { + .bodywebsite .inset-sm-left-0 { + padding-left: 0; + } + .bodywebsite .inset-sm-left-10 { + padding-left: 10px; + } + .bodywebsite .inset-sm-left-15 { + padding-left: 15px; + } + .bodywebsite .inset-sm-left-20 { + padding-left: 20px; + } + .bodywebsite .inset-sm-left-30 { + padding-left: 30px; + } + .bodywebsite .inset-sm-left-40 { + padding-left: 40px; + } + .bodywebsite .inset-sm-left-50 { + padding-left: 50px; + } + .bodywebsite .inset-sm-left-60 { + padding-left: 60px; + } + .bodywebsite .inset-sm-left-70 { + padding-left: 70px; + } + .bodywebsite .inset-sm-left-85 { + padding-left: 85px; + } + .bodywebsite .inset-sm-left-100 { + padding-left: 100px; + } +} +@media (min-width: 768px) { + .bodywebsite .inset-md-left-0 { + padding-left: 0; + } + .bodywebsite .inset-md-left-10 { + padding-left: 10px; + } + .bodywebsite .inset-md-left-15 { + padding-left: 15px; + } + .bodywebsite .inset-md-left-20 { + padding-left: 20px; + } + .bodywebsite .inset-md-left-30 { + padding-left: 30px; + } + .bodywebsite .inset-md-left-40 { + padding-left: 40px; + } + .bodywebsite .inset-md-left-50 { + padding-left: 50px; + } + .bodywebsite .inset-md-left-60 { + padding-left: 60px; + } + .bodywebsite .inset-md-left-70 { + padding-left: 70px; + } + .bodywebsite .inset-md-left-85 { + padding-left: 85px; + } + .bodywebsite .inset-md-left-100 { + padding-left: 100px; + } +} +@media (min-width: 992px) { + .bodywebsite .inset-lg-left-0 { + padding-left: 0; + } + .bodywebsite .inset-lg-left-10 { + padding-left: 10px; + } + .bodywebsite .inset-lg-left-15 { + padding-left: 15px; + } + .bodywebsite .inset-lg-left-20 { + padding-left: 20px; + } + .bodywebsite .inset-lg-left-30 { + padding-left: 30px; + } + .bodywebsite .inset-lg-left-40 { + padding-left: 40px; + } + .bodywebsite .inset-lg-left-50 { + padding-left: 50px; + } + .bodywebsite .inset-lg-left-60 { + padding-left: 60px; + } + .bodywebsite .inset-lg-left-70 { + padding-left: 70px; + } + .bodywebsite .inset-lg-left-85 { + padding-left: 85px; + } + .bodywebsite .inset-lg-left-100 { + padding-left: 100px; + } +} +@media (min-width: 1200px) { + .bodywebsite .inset-xl-left-0 { + padding-left: 0; + } + .bodywebsite .inset-xl-left-10 { + padding-left: 10px; + } + .bodywebsite .inset-xl-left-15 { + padding-left: 15px; + } + .bodywebsite .inset-xl-left-20 { + padding-left: 20px; + } + .bodywebsite .inset-xl-left-30 { + padding-left: 30px; + } + .bodywebsite .inset-xl-left-40 { + padding-left: 40px; + } + .bodywebsite .inset-xl-left-50 { + padding-left: 50px; + } + .bodywebsite .inset-xl-left-60 { + padding-left: 60px; + } + .bodywebsite .inset-xl-left-70 { + padding-left: 70px; + } + .bodywebsite .inset-xl-left-85 { + padding-left: 85px; + } + .bodywebsite .inset-xl-left-100 { + padding-left: 100px; + } +} +@media (min-width: 1800px) { + .bodywebsite .inset-xxl-left-0 { + padding-left: 0; + } + .bodywebsite .inset-xxl-left-10 { + padding-left: 10px; + } + .bodywebsite .inset-xxl-left-15 { + padding-left: 15px; + } + .bodywebsite .inset-xxl-left-20 { + padding-left: 20px; + } + .bodywebsite .inset-xxl-left-30 { + padding-left: 30px; + } + .bodywebsite .inset-xxl-left-40 { + padding-left: 40px; + } + .bodywebsite .inset-xxl-left-50 { + padding-left: 50px; + } + .bodywebsite .inset-xxl-left-60 { + padding-left: 60px; + } + .bodywebsite .inset-xxl-left-70 { + padding-left: 70px; + } + .bodywebsite .inset-xxl-left-85 { + padding-left: 85px; + } + .bodywebsite .inset-xxl-left-100 { + padding-left: 100px; + } +} +.bodywebsite .inset-right-0 { + padding-right: 0; +} +.bodywebsite .inset-right-10 { + padding-right: 10px; +} +.bodywebsite .inset-right-15 { + padding-right: 15px; +} +.bodywebsite .inset-right-20 { + padding-right: 20px; +} +.bodywebsite .inset-right-30 { + padding-right: 30px; +} +.bodywebsite .inset-right-40 { + padding-right: 40px; +} +.bodywebsite .inset-right-50 { + padding-right: 50px; +} +.bodywebsite .inset-right-60 { + padding-right: 60px; +} +.bodywebsite .inset-right-70 { + padding-right: 70px; +} +.bodywebsite .inset-right-85 { + padding-right: 85px; +} +.bodywebsite .inset-right-100 { + padding-right: 100px; +} +@media (min-width: 576px) { + .bodywebsite .inset-sm-right-0 { + padding-right: 0; + } + .bodywebsite .inset-sm-right-10 { + padding-right: 10px; + } + .bodywebsite .inset-sm-right-15 { + padding-right: 15px; + } + .bodywebsite .inset-sm-right-20 { + padding-right: 20px; + } + .bodywebsite .inset-sm-right-30 { + padding-right: 30px; + } + .bodywebsite .inset-sm-right-40 { + padding-right: 40px; + } + .bodywebsite .inset-sm-right-50 { + padding-right: 50px; + } + .bodywebsite .inset-sm-right-60 { + padding-right: 60px; + } + .bodywebsite .inset-sm-right-70 { + padding-right: 70px; + } + .bodywebsite .inset-sm-right-85 { + padding-right: 85px; + } + .bodywebsite .inset-sm-right-100 { + padding-right: 100px; + } +} +@media (min-width: 768px) { + .bodywebsite .inset-md-right-0 { + padding-right: 0; + } + .bodywebsite .inset-md-right-10 { + padding-right: 10px; + } + .bodywebsite .inset-md-right-15 { + padding-right: 15px; + } + .bodywebsite .inset-md-right-20 { + padding-right: 20px; + } + .bodywebsite .inset-md-right-30 { + padding-right: 30px; + } + .bodywebsite .inset-md-right-40 { + padding-right: 40px; + } + .bodywebsite .inset-md-right-50 { + padding-right: 50px; + } + .bodywebsite .inset-md-right-60 { + padding-right: 60px; + } + .bodywebsite .inset-md-right-70 { + padding-right: 70px; + } + .bodywebsite .inset-md-right-85 { + padding-right: 85px; + } + .bodywebsite .inset-md-right-100 { + padding-right: 100px; + } +} +@media (min-width: 992px) { + .bodywebsite .inset-lg-right-0 { + padding-right: 0; + } + .bodywebsite .inset-lg-right-10 { + padding-right: 10px; + } + .bodywebsite .inset-lg-right-15 { + padding-right: 15px; + } + .bodywebsite .inset-lg-right-20 { + padding-right: 20px; + } + .bodywebsite .inset-lg-right-30 { + padding-right: 30px; + } + .bodywebsite .inset-lg-right-40 { + padding-right: 40px; + } + .bodywebsite .inset-lg-right-50 { + padding-right: 50px; + } + .bodywebsite .inset-lg-right-60 { + padding-right: 60px; + } + .bodywebsite .inset-lg-right-70 { + padding-right: 70px; + } + .bodywebsite .inset-lg-right-85 { + padding-right: 85px; + } + .bodywebsite .inset-lg-right-100 { + padding-right: 100px; + } +} +@media (min-width: 1200px) { + .bodywebsite .inset-xl-right-0 { + padding-right: 0; + } + .bodywebsite .inset-xl-right-10 { + padding-right: 10px; + } + .bodywebsite .inset-xl-right-15 { + padding-right: 15px; + } + .bodywebsite .inset-xl-right-20 { + padding-right: 20px; + } + .bodywebsite .inset-xl-right-30 { + padding-right: 30px; + } + .bodywebsite .inset-xl-right-40 { + padding-right: 40px; + } + .bodywebsite .inset-xl-right-50 { + padding-right: 50px; + } + .bodywebsite .inset-xl-right-60 { + padding-right: 60px; + } + .bodywebsite .inset-xl-right-70 { + padding-right: 70px; + } + .bodywebsite .inset-xl-right-85 { + padding-right: 85px; + } + .bodywebsite .inset-xl-right-100 { + padding-right: 100px; + } +} +@media (min-width: 1800px) { + .bodywebsite .inset-xxl-right-0 { + padding-right: 0; + } + .bodywebsite .inset-xxl-right-10 { + padding-right: 10px; + } + .bodywebsite .inset-xxl-right-15 { + padding-right: 15px; + } + .bodywebsite .inset-xxl-right-20 { + padding-right: 20px; + } + .bodywebsite .inset-xxl-right-30 { + padding-right: 30px; + } + .bodywebsite .inset-xxl-right-40 { + padding-right: 40px; + } + .bodywebsite .inset-xxl-right-50 { + padding-right: 50px; + } + .bodywebsite .inset-xxl-right-60 { + padding-right: 60px; + } + .bodywebsite .inset-xxl-right-70 { + padding-right: 70px; + } + .bodywebsite .inset-xxl-right-85 { + padding-right: 85px; + } + .bodywebsite .inset-xxl-right-100 { + padding-right: 100px; + } +} +.bodywebsite .container + .container { + margin-top: 60px; +} +.bodywebsite h3.section-title { + color: #000; +} +.bodywebsite h4 + .section-title { + margin-top: 2px; +} +.bodywebsite h4 + .comment-list { + margin-top: 30px; +} +.bodywebsite h3 + p { + margin-top: 15px; +} +.bodywebsite h3 + p.h4 { + margin-top: 2px; +} +.bodywebsite h3 + .row { + margin-top: 40px; +} +.bodywebsite h3 + * { + margin-top: 40px; +} +.bodywebsite .row + .row { + margin-top: 60px; +} +.bodywebsite * + .row.list-md-dashed { + margin-top: 60px; +} +.bodywebsite .row + .button-block { + margin-top: 60px; +} +.bodywebsite .slick-slider + .slick-slider.carousel-parent { + margin-top: 35px; +} +.bodywebsite .quote-left + .button-block { + margin-top: 22px; +} +.bodywebsite .aside-title + * { + margin-top: 22px; +} +.bodywebsite * + .button-group { + margin-top: 25px; +} +html .bodywebsite .page .offset-top-0 { + margin-top: 0; +} +html .bodywebsite .page .offset-top-2 { + margin-top: 2px; +} +html .bodywebsite .page .offset-top-5 { + margin-top: 5px; +} +html .bodywebsite .page .offset-top-10 { + margin-top: 10px; +} +html .bodywebsite .page .offset-top-15 { + margin-top: 15px; +} +html .bodywebsite .page .offset-top-22 { + margin-top: 22px; +} +html .bodywebsite .page .offset-top-27 { + margin-top: 27px; +} +html .bodywebsite .page .offset-top-30 { + margin-top: 30px; +} +html .bodywebsite .page .offset-top-35 { + margin-top: 35px; +} +html .bodywebsite .page .offset-top-40 { + margin-top: 40px; +} +html .bodywebsite .page .offset-top-45 { + margin-top: 45px; +} +html .bodywebsite .page .offset-top-50 { + margin-top: 50px; +} +html .bodywebsite .page .offset-top-60 { + margin-top: 60px; +} +html .bodywebsite .page .offset-top-75 { + margin-top: 75px; +} +html .bodywebsite .page .offset-top-90 { + margin-top: 90px; +} +html .bodywebsite .page .offset-top-100 { + margin-top: 100px; +} +html .bodywebsite .page .offset-top-120 { + margin-top: 120px; +} +@media (min-width: 576px) { + html .bodywebsite .page .offset-sm-top-0 { + margin-top: 0; + } + html .bodywebsite .page .offset-sm-top-2 { + margin-top: 2px; + } + html .bodywebsite .page .offset-sm-top-5 { + margin-top: 5px; + } + html .bodywebsite .page .offset-sm-top-10 { + margin-top: 10px; + } + html .bodywebsite .page .offset-sm-top-15 { + margin-top: 15px; + } + html .bodywebsite .page .offset-sm-top-22 { + margin-top: 22px; + } + html .bodywebsite .page .offset-sm-top-27 { + margin-top: 27px; + } + html .bodywebsite .page .offset-sm-top-30 { + margin-top: 30px; + } + html .bodywebsite .page .offset-sm-top-35 { + margin-top: 35px; + } + html .bodywebsite .page .offset-sm-top-40 { + margin-top: 40px; + } + html .bodywebsite .page .offset-sm-top-45 { + margin-top: 45px; + } + html .bodywebsite .page .offset-sm-top-50 { + margin-top: 50px; + } + html .bodywebsite .page .offset-sm-top-60 { + margin-top: 60px; + } + html .bodywebsite .page .offset-sm-top-75 { + margin-top: 75px; + } + html .bodywebsite .page .offset-sm-top-90 { + margin-top: 90px; + } + html .bodywebsite .page .offset-sm-top-100 { + margin-top: 100px; + } + html .bodywebsite .page .offset-sm-top-120 { + margin-top: 120px; + } +} +@media (min-width: 768px) { + html .bodywebsite .page .offset-md-top-0 { + margin-top: 0; + } + html .bodywebsite .page .offset-md-top-2 { + margin-top: 2px; + } + html .bodywebsite .page .offset-md-top-5 { + margin-top: 5px; + } + html .bodywebsite .page .offset-md-top-10 { + margin-top: 10px; + } + html .bodywebsite .page .offset-md-top-15 { + margin-top: 15px; + } + html .bodywebsite .page .offset-md-top-22 { + margin-top: 22px; + } + html .bodywebsite .page .offset-md-top-27 { + margin-top: 27px; + } + html .bodywebsite .page .offset-md-top-30 { + margin-top: 30px; + } + html .bodywebsite .page .offset-md-top-35 { + margin-top: 35px; + } + html .bodywebsite .page .offset-md-top-40 { + margin-top: 40px; + } + html .bodywebsite .page .offset-md-top-45 { + margin-top: 45px; + } + html .bodywebsite .page .offset-md-top-50 { + margin-top: 50px; + } + html .bodywebsite .page .offset-md-top-60 { + margin-top: 60px; + } + html .bodywebsite .page .offset-md-top-75 { + margin-top: 75px; + } + html .bodywebsite .page .offset-md-top-90 { + margin-top: 90px; + } + html .bodywebsite .page .offset-md-top-100 { + margin-top: 100px; + } + html .bodywebsite .page .offset-md-top-120 { + margin-top: 120px; + } +} +@media (min-width: 992px) { + html .bodywebsite .page .offset-lg-top-0 { + margin-top: 0; + } + html .bodywebsite .page .offset-lg-top-2 { + margin-top: 2px; + } + html .bodywebsite .page .offset-lg-top-5 { + margin-top: 5px; + } + html .bodywebsite .page .offset-lg-top-10 { + margin-top: 10px; + } + html .bodywebsite .page .offset-lg-top-15 { + margin-top: 15px; + } + html .bodywebsite .page .offset-lg-top-22 { + margin-top: 22px; + } + html .bodywebsite .page .offset-lg-top-27 { + margin-top: 27px; + } + html .bodywebsite .page .offset-lg-top-30 { + margin-top: 30px; + } + html .bodywebsite .page .offset-lg-top-35 { + margin-top: 35px; + } + html .bodywebsite .page .offset-lg-top-40 { + margin-top: 40px; + } + html .bodywebsite .page .offset-lg-top-45 { + margin-top: 45px; + } + html .bodywebsite .page .offset-lg-top-50 { + margin-top: 50px; + } + html .bodywebsite .page .offset-lg-top-60 { + margin-top: 60px; + } + html .bodywebsite .page .offset-lg-top-75 { + margin-top: 75px; + } + html .bodywebsite .page .offset-lg-top-90 { + margin-top: 90px; + } + html .bodywebsite .page .offset-lg-top-100 { + margin-top: 100px; + } + html .bodywebsite .page .offset-lg-top-120 { + margin-top: 120px; + } +} +@media (min-width: 1200px) { + html .bodywebsite .page .offset-xl-top-0 { + margin-top: 0; + } + html .bodywebsite .page .offset-xl-top-2 { + margin-top: 2px; + } + html .bodywebsite .page .offset-xl-top-5 { + margin-top: 5px; + } + html .bodywebsite .page .offset-xl-top-10 { + margin-top: 10px; + } + html .bodywebsite .page .offset-xl-top-15 { + margin-top: 15px; + } + html .bodywebsite .page .offset-xl-top-22 { + margin-top: 22px; + } + html .bodywebsite .page .offset-xl-top-27 { + margin-top: 27px; + } + html .bodywebsite .page .offset-xl-top-30 { + margin-top: 30px; + } + html .bodywebsite .page .offset-xl-top-35 { + margin-top: 35px; + } + html .bodywebsite .page .offset-xl-top-40 { + margin-top: 40px; + } + html .bodywebsite .page .offset-xl-top-45 { + margin-top: 45px; + } + html .bodywebsite .page .offset-xl-top-50 { + margin-top: 50px; + } + html .bodywebsite .page .offset-xl-top-60 { + margin-top: 60px; + } + html .bodywebsite .page .offset-xl-top-75 { + margin-top: 75px; + } + html .bodywebsite .page .offset-xl-top-90 { + margin-top: 90px; + } + html .bodywebsite .page .offset-xl-top-100 { + margin-top: 100px; + } + html .bodywebsite .page .offset-xl-top-120 { + margin-top: 120px; + } +} +@media (min-width: 1800px) { + html .bodywebsite .page .offset-xxl-top-0 { + margin-top: 0; + } + html .bodywebsite .page .offset-xxl-top-2 { + margin-top: 2px; + } + html .bodywebsite .page .offset-xxl-top-5 { + margin-top: 5px; + } + html .bodywebsite .page .offset-xxl-top-10 { + margin-top: 10px; + } + html .bodywebsite .page .offset-xxl-top-15 { + margin-top: 15px; + } + html .bodywebsite .page .offset-xxl-top-22 { + margin-top: 22px; + } + html .bodywebsite .page .offset-xxl-top-27 { + margin-top: 27px; + } + html .bodywebsite .page .offset-xxl-top-30 { + margin-top: 30px; + } + html .bodywebsite .page .offset-xxl-top-35 { + margin-top: 35px; + } + html .bodywebsite .page .offset-xxl-top-40 { + margin-top: 40px; + } + html .bodywebsite .page .offset-xxl-top-45 { + margin-top: 45px; + } + html .bodywebsite .page .offset-xxl-top-50 { + margin-top: 50px; + } + html .bodywebsite .page .offset-xxl-top-60 { + margin-top: 60px; + } + html .bodywebsite .page .offset-xxl-top-75 { + margin-top: 75px; + } + html .bodywebsite .page .offset-xxl-top-90 { + margin-top: 90px; + } + html .bodywebsite .page .offset-xxl-top-100 { + margin-top: 100px; + } + html .bodywebsite .page .offset-xxl-top-120 { + margin-top: 120px; + } +} +@media (min-width: 768px) { + .bodywebsite .shift-sm-top-1 { + margin-top: -18px; + } +} +@media (min-width: 992px) { + .bodywebsite .shift-sm-top-1 { + margin-top: -23px; + } +} +@media (min-width: 992px) { + .bodywebsite .shift-md-top-1 { + margin-top: -33px; + } +} +@media (min-width: 1200px) { + .bodywebsite .shift-md-top-1 { + margin-top: -43px; + } +} +.bodywebsite .row-0 { + margin-bottom: 0px; +} +.bodywebsite .row-0:empty { + margin-bottom: 0; +} +.bodywebsite .row-0 > * { + margin-bottom: 0px; +} +.bodywebsite .row-15 { + margin-bottom: -15px; +} +.bodywebsite .row-15:empty { + margin-bottom: 0; +} +.bodywebsite .row-15 > * { + margin-bottom: 15px; +} +.bodywebsite .row-20 { + margin-bottom: -20px; +} +.bodywebsite .row-20:empty { + margin-bottom: 0; +} +.bodywebsite .row-20 > * { + margin-bottom: 20px; +} +.bodywebsite .row-30 { + margin-bottom: -30px; +} +.bodywebsite .row-30:empty { + margin-bottom: 0; +} +.bodywebsite .row-30 > * { + margin-bottom: 30px; +} +.bodywebsite .row-40 { + margin-bottom: -40px; +} +.bodywebsite .row-40:empty { + margin-bottom: 0; +} +.bodywebsite .row-40 > * { + margin-bottom: 40px; +} +.bodywebsite .row-50 { + margin-bottom: -50px; +} +.bodywebsite .row-50:empty { + margin-bottom: 0; +} +.bodywebsite .row-50 > * { + margin-bottom: 50px; +} +.bodywebsite .row-60 { + margin-bottom: -60px; +} +.bodywebsite .row-60:empty { + margin-bottom: 0; +} +.bodywebsite .row-60 > * { + margin-bottom: 60px; +} +@media (min-width: 576px) { + .bodywebsite .row-sm-50 { + margin-bottom: -50px; + } + .bodywebsite .row-sm-50:empty { + margin-bottom: 0; + } + .bodywebsite .row-sm-50 > * { + margin-bottom: 50px; + } + .bodywebsite .row-sm-0 { + margin-bottom: 0px; + } + .bodywebsite .row-sm-0:empty { + margin-bottom: 0; + } + .bodywebsite .row-sm-0 > * { + margin-bottom: 0px; + } +} +@media (min-width: 768px) { + .bodywebsite .row-md-60 { + margin-bottom: -60px; + } + .bodywebsite .row-md-60:empty { + margin-bottom: 0; + } + .bodywebsite .row-md-60 > * { + margin-bottom: 60px; + } +} +@media (min-width: 992px) { + .bodywebsite .row-md-30 { + margin-bottom: -30px; + } + .bodywebsite .row-md-30:empty { + margin-bottom: 0; + } + .bodywebsite .row-md-30 > * { + margin-bottom: 30px; + } +} +@media (min-width: 1200px) { + .bodywebsite .row-xl-100 { + margin-bottom: -100px; + } + .bodywebsite .row-xl-100:empty { + margin-bottom: 0; + } + .bodywebsite .row-xl-100 > * { + margin-bottom: 100px; + } + .bodywebsite .row-xl-90 { + margin-bottom: -90px; + } + .bodywebsite .row-xl-90:empty { + margin-bottom: 0; + } + .bodywebsite .row-xl-90 > * { + margin-bottom: 90px; + } +} +.bodywebsite .link { + display: inline-block; +} +.bodywebsite .link-inline { + font: inherit; + line-height: inherit; + text-decoration: underline; +} +.bodywebsite .link-underline, +.bodywebsite .link-underline:active, +.bodywebsite .link-underline:focus { + text-decoration: underline; +} +.bodywebsite .link-underline:hover { + text-decoration: none; +} +.bodywebsite .link-circle { + border-radius: 50%; +} +.bodywebsite .link-circle .icon, +.bodywebsite .link-circle .icon:before { + position: static; +} +.bodywebsite .link-bold { + font: 700 18px/22px "Roboto", Helvetica, Arial, sans-serif; +} +.bodywebsite .link-group { + white-space: nowrap; +} +.bodywebsite .link-group * { + vertical-align: middle; +} +.bodywebsite .link-group span { + display: inline-block; +} +.bodywebsite .link-group span + *, +.bodywebsite .link-group * + span { + margin-left: 5px; +} +.bodywebsite .link-group.link-group-animated .icon { + position: relative; + right: 0; + transition: .22s; +} +.bodywebsite .link-group.link-group-animated:hover .icon { + right: -5px; +} +.bodywebsite .link-group-baseline * { + vertical-align: baseline; +} +.bodywebsite .link-icon, +.bodywebsite .link-icon * { + vertical-align: middle; +} +.bodywebsite .link-icon .icon { + margin-right: 5px; +} +.bodywebsite .link-icon-mod .icon { + position: relative; + top: -3px; +} +.bodywebsite .link-image img { + width: auto; + transition: .44s all ease; + opacity: .5; +} +.bodywebsite .link-image:hover img { + opacity: 1; +} +.bodywebsite .link-image-wrap { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + min-height: 126px; +} +.bodywebsite * + .link-image-wrap { + margin-top: 13px; +} +.bodywebsite .page .link-primary-inline { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-primary-inline.active, +.bodywebsite .page .link-primary-inline:active, +.bodywebsite .page .link-primary-inline:focus { + color: #9b9b9b; +} +.bodywebsite .page .link-primary-inline.hover, +.bodywebsite .page .link-primary-inline:hover { + color: #42b294; +} +.bodywebsite .page .link-default, +.bodywebsite .page .link-default:active, +.bodywebsite .page .link-default:focus { + color: #9f9f9f; +} +.bodywebsite .page .link-default:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-primary, +.bodywebsite .page .link-primary:active, +.bodywebsite .page .link-primary:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-primary:hover { + color: #00030a; +} +.bodywebsite .page .link-primary-inverse, +.bodywebsite .page .link-primary-inverse:active, +.bodywebsite .page .link-primary-inverse:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-primary-inverse:hover { + color: #ddd; +} +.bodywebsite .page .link-primary-inverse-v2, +.bodywebsite .page .link-primary-inverse-v2:active, +.bodywebsite .page .link-primary-inverse-v2:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-primary-inverse-v2:hover { + color: #fff; +} +.bodywebsite .page .link-secondary, +.bodywebsite .page .link-secondary:active, +.bodywebsite .page .link-secondary:focus { + color: #00030a; +} +.bodywebsite .page .link-secondary:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-tundora, +.bodywebsite .page .link-tundora:active, +.bodywebsite .page .link-tundora:focus { + color: #414141; +} +.bodywebsite .page .link-tundora:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-tundora-inverse, +.bodywebsite .page .link-tundora-inverse:active, +.bodywebsite .page .link-tundora-inverse:focus { + color: #414141; +} +.bodywebsite .page .link-tundora-inverse:hover { + color: #fff; +} +.bodywebsite .page .link-secondary, +.bodywebsite .page .link-secondary:active, +.bodywebsite .page .link-secondary:focus { + color: #000; +} +.bodywebsite .page .link-secondary:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-gray-light, +.bodywebsite .page .link-gray-light:active, +.bodywebsite .page .link-gray-light:focus { + color: #dedede; +} +.bodywebsite .page .link-gray-light:hover { + color: #000; +} +.bodywebsite .page .link-white, +.bodywebsite .page .link-white:active, +.bodywebsite .page .link-white:focus { + color: #fff; +} +.bodywebsite .page .link-white:hover { + color: #fff; +} +.bodywebsite .page .link-black, +.bodywebsite .page .link-black:active, +.bodywebsite .page .link-black:focus { + color: #000; +} +.bodywebsite .page .link-black:hover { + color: maincolorbis) ? 'rgb(50, 120, 180)' : '#'.$website->maincolorbis; ?>; +} +.bodywebsite .page .link-black:hover { + text-decoration: underline; +} +.bodywebsite .page .link-gray-dark-filled, +.bodywebsite .page .link-gray-dark-filled:active, +.bodywebsite .page .link-gray-dark-filled:focus { + color: #fff; + background: #2a2b2b; +} +.bodywebsite .page .link-gray-dark-filled:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .page .link-shop { + width: 25px; + height: 25px; + font-size: 25px; + line-height: 25px; +} +.bodywebsite .page .link-shop, +.bodywebsite .page .link-shop:active, +.bodywebsite .page .link-shop:focus { + color: #00030a; +} +.bodywebsite .page .link-shop:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite ul, +.bodywebsite ol { + list-style: none; + padding: 0; + margin: 0; +} +.bodywebsite dl { + margin: 0; +} +.bodywebsite dt { + font-weight: inherit; +} +.bodywebsite .list > li + li { + margin-top: 5px; +} +.bodywebsite .list-xl > li + li { + margin-top: 44px; +} +.bodywebsite .list-inline { + margin-left: -5px; + margin-right: -5px; + vertical-align: baseline; +} +.bodywebsite .list-inline > li { + display: inline-block; + padding-left: 8px; + padding-right: 8px; +} +.bodywebsite .list-inline-xs { + margin-left: -6px; + margin-right: -6px; +} +.bodywebsite .list-inline-xs > li { + display: inline-block; + padding-left: 6px; + padding-right: 6px; +} +.bodywebsite .list-inline-sm { + margin-left: -10px; + margin-right: -10px; +} +.bodywebsite .list-inline-sm > li { + display: inline-block; + padding-left: 10px; + padding-right: 10px; +} +.bodywebsite .list-inline-md { + margin-left: -15px; + margin-right: -15px; +} +.bodywebsite .list-inline-md > li { + display: inline-block; + padding-left: 15px; + padding-right: 15px; +} +.bodywebsite .list-objects-inline { + margin-bottom: -4px; + margin-left: -22px; + transform: translateY(-4px); +} +.bodywebsite .list-objects-inline > *, +.bodywebsite .list-objects-inline > *:first-child { + display: inline-block; + vertical-align: middle; + margin-top: 4px; + margin-left: 22px; +} +.bodywebsite .list-objects-inline > li > * { + display: inline-block; + vertical-align: middle; +} +.bodywebsite .list-objects-inline > li > * + * { + margin-left: 5px; +} +.bodywebsite .list-terms dt + dd { + margin-top: 10px; +} +.bodywebsite .list-terms dd + dt { + margin-top: 31px; +} +.bodywebsite .list-terms-variant-1 dt { + font: 700 16px/22px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: -0.025em; + color: #000; +} +.bodywebsite .list-terms-variant-1 dt + dd { + margin-top: 18px; +} +.bodywebsite .list-terms-variant-1 dd + dt { + margin-top: 40px; +} +@media (min-width: 1200px) { + .bodywebsite .list-terms-variant-1 dt { + font-size: 24px; + line-height: 1.2; + } + .bodywebsite .list-terms-variant-1 dd + dt { + margin-top: 50px; + } +} +.bodywebsite .list-inline-dashed { + margin-left: -15px; +} +.bodywebsite .list-inline-dashed li { + padding-left: 15px; + padding-right: 10px; +} +.bodywebsite .list-inline-dashed li:after { + content: '|'; + position: relative; + right: -12.5px; + color: #e5e7e9; +} +.bodywebsite .list-inline-dashed li:last-child { + padding-right: 0; +} +.bodywebsite .list-inline-dashed li:last-child:after { + display: none; +} +@media (min-width: 992px) { + .bodywebsite .list-md-dashed > * { + position: relative; + } + .bodywebsite .list-md-dashed > *:after { + content: ''; + position: absolute; + font-weight: 100; + top: 0; + right: -6%; + height: 73px; + -webkit-transform: translateX(-50%) skew(-21deg); + transform: translateX(-50%) skew(-21deg); + width: 1px; + background: #48494a; + } +} +@media (min-width: 992px) and (min-width: 1200px) { + .bodywebsite .list-md-dashed > *:after { + right: -3%; + height: 120px; + } +} +@media (min-width: 992px) { + .bodywebsite .list-md-dashed > *:last-child::after { + display: none; + } +} +.bodywebsite .dl-inline { + vertical-align: middle; +} +.bodywebsite .dl-inline dt, +.bodywebsite .dl-inline dd { + display: inline-block; + vertical-align: middle; +} +.bodywebsite .dl-inline dt { + padding-right: 5px; +} +.bodywebsite .dl-inline dt:after { + content: ':'; +} +.bodywebsite .dl-inline .pricing-object-sm { + position: relative; + top: -5px; +} +.bodywebsite .list-terms-inline dt, +.bodywebsite .list-terms-inline dd { + display: inline-block; +} +.bodywebsite .list-terms-inline dt { + color: #000; +} +.bodywebsite .list-terms-inline dd { + color: #9f9f9f; +} +.bodywebsite .list-terms-inline dt:after { + content: ':'; +} +.bodywebsite .list-index { + counter-reset: li; +} +.bodywebsite .list-index > li .list-index-counter:before { + content: counter(li, decimal-leading-zero); + counter-increment: li; +} +.bodywebsite .list-marked li { + color: #000; + position: relative; + padding-left: 32px; +} +.bodywebsite .list-marked li:before { + position: absolute; + top: 1px; + left: 0; + content: '\e005'; + font-family: "fl-flat-icons-set-2"; + display: inline-block; + margin-right: 11px; + font-size: 13px; + line-height: inherit; + vertical-align: middle; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-marked li:not(:last-child):after { + content: ';'; +} +.bodywebsite .list-marked li:last-child:after { + content: '.'; +} +.bodywebsite .list-marked li + li { + margin-top: 11px; +} +.bodywebsite .list-marked-spacing-lg li { + padding-left: 26px; +} +@media (min-width: 992px) and (max-width: 1799px) { + .bodywebsite .list-marked li { + padding-left: 24px; + font-size: 13px; + } + .bodywebsite .list-marked li:before { + font-size: 11px; + } +} +.bodywebsite .list-marked-variant-2 > li > a { + position: relative; + display: inline-block; +} +.bodywebsite .list-marked-variant-2 > li > a:hover:before { + left: 4px; +} +.bodywebsite .list-marked-variant-2 > li + li { + margin-top: 14px; +} +.bodywebsite .list-ordered { + counter-reset: li; +} +.bodywebsite .list-ordered li { + color: #000; +} +.bodywebsite .list-ordered li:before { + display: inline-block; + margin-right: 13px; + width: 15px; + content: counter(li, decimal) "."; + counter-increment: li; +} +.bodywebsite .list-ordered li:not(:last-child):after { + content: ';'; +} +.bodywebsite .list-ordered li:last-child:after { + content: '.'; +} +.bodywebsite .list-ordered li + li { + margin-top: 11px; +} +.bodywebsite .list-tags > li { + display: inline-block; + font-style: italic; +} +.bodywebsite .list-tags > li a, +.bodywebsite .list-tags > li a:active, +.bodywebsite .list-tags > li a:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-tags > li a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-tags > li:after { + content: ','; + display: inline-block; + color: #f9f9f9; +} +.bodywebsite .list-tags > li:last-child:after { + display: none; +} +.bodywebsite .list-numbered { + counter-reset: li; +} +.bodywebsite .list-numbered > li { + position: relative; + padding-left: 30px; +} +.bodywebsite .list-numbered > li:before { + position: absolute; + top: 0; + left: 0; + content: counter(li, decimal) "."; + counter-increment: li; +} +.bodywebsite .list-numbered > li + li { + margin-top: 10px; +} +.bodywebsite .list-icon-pack { + margin-top: 6px; +} +.bodywebsite .list-icon-pack > li { + margin-top: 25px; +} +.bodywebsite .list-icon-pack > li span { + display: block; +} +.bodywebsite .list-icon-pack > li span + span { + margin-left: .25em; +} +.bodywebsite .list-icon-pack h6 + *, +.bodywebsite .list-icon-pack .h6 + * { + margin-top: 2px; +} +.bodywebsite .list-links > li { + display: inline-block; +} +.bodywebsite .list-links > li:after { + content: ';'; +} +.bodywebsite .list-links > li:last-child:after { + display: none; +} +.bodywebsite .list-hashtags > li { + display: inline-block; +} +.bodywebsite .list-hashtags > li a { + color: inherit; +} +.bodywebsite .list-hashtags > li a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-hashtags > li > a:before { + content: '#'; +} +.bodywebsite .list-marked-bordered { + color: #000; +} +.bodywebsite .list-marked-bordered li a { + display: block; + padding: 10px 7px; + border-bottom: 1px solid #f9f9f9; +} +.bodywebsite .list-marked-bordered li a:before { + position: relative; + display: inline-block; + padding-right: 10px; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + line-height: inherit; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + content: '\f105'; +} +.bodywebsite .list-marked-bordered li a span { + color: inherit; + transition: color .33s; +} +.bodywebsite .list-marked-bordered li a span:first-child { + color: #000; +} +.bodywebsite .list-marked-bordered li a:hover, +.bodywebsite .list-marked-bordered li a:hover span:nth-child(n) { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-marked-bordered li span:not(:last-child) { + margin-right: .25em; +} +.bodywebsite .list-bordered-horizontal { + position: relative; + transform: translateY(-7px); + margin-bottom: -7px; +} +.bodywebsite .list-bordered-horizontal > * { + margin-top: 7px; +} +.bodywebsite .list-bordered-horizontal > *:not(:last-child) { + margin-right: 35px; +} +@media (min-width: 768px) { + .bodywebsite .list-bordered-horizontal > li { + display: inline-block; + } + .bodywebsite .list-bordered-horizontal > li:not(:last-child) { + position: relative; + } + .bodywebsite .list-bordered-horizontal > li:not(:last-child):after { + content: ''; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: -20px; + width: 1px; + height: 22px; + background: #dedede; + } +} +.bodywebsite .list-tag-blocks { + position: relative; + transform: translateY(-6px); + margin-bottom: -6px; +} +.bodywebsite .list-tag-blocks > * { + margin-top: 6px; +} +.bodywebsite .list-tag-blocks > *:not(:last-child) { + margin-right: 6px; +} +.bodywebsite .list-tag-blocks li { + display: inline-block; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; +} +.bodywebsite .list-tag-blocks li a { + display: inline-block; + padding: 6px 19px; + border-radius: 0; + border: 1px solid transparent; +} +.bodywebsite .list-tag-blocks li a, +.bodywebsite .list-tag-blocks li a:active, +.bodywebsite .list-tag-blocks li a:focus { + color: #000; + background: #fff; +} +.bodywebsite .list-tag-blocks li a:hover { + background: transparent; + border-color: #cdcdcd; +} +.bodywebsite .list-progress { + font-family: "Roboto", Helvetica, Arial, sans-serif; + color: #00030a; +} +.bodywebsite .list-progress li + li { + margin-top: 23px; +} +.bodywebsite .list-progress p { + padding-right: 40px; +} +.bodywebsite .list-tags-inline > li { + display: inline; +} +.bodywebsite .list-tags-inline > li a { + color: inherit; +} +.bodywebsite .list-tags-inline > li a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .list-tags-inline > li:not(:last-child):after { + content: ','; +} +.bodywebsite .list-rating { + font-size: 0; + line-height: 0; +} +.bodywebsite .list-rating > li { + display: inline-block; +} +.bodywebsite .list-rating .icon { + color: #ffd400; +} +.bodywebsite .list-wide-bordered { + color: #00030a; + font: 400 14px/22px "Roboto", Helvetica, Arial, sans-serif; + border-top: 1px solid #dedede; +} +.bodywebsite .list-wide-bordered dl { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + width: 100%; + font-weight: 700; +} +.bodywebsite .list-wide-bordered dl dt { + padding-right: 15px; +} +.bodywebsite .list-wide-bordered dl dd { + font-weight: 700; + font-size: 14px; +} +.bodywebsite .list-wide-bordered li { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-height: 54px; + padding: 10px 20px; + border-bottom: 1px solid #dedede; +} +.bodywebsite .list-wide-bordered + .list-wide-bordered { + border-top: 0; +} +@media (min-width: 768px) { + .bodywebsite .list-wide-bordered { + font-size: 16px; + } + .bodywebsite .list-wide-bordered li { + min-height: 73px; + padding: 20px 30px; + } +} +.bodywebsite .object-wrap { + position: relative; + overflow: hidden; +} +.bodywebsite .object-wrap-right > .object-wrap-body { + right: 0; +} +.bodywebsite .object-wrap-left > .object-wrap-body { + left: 0; +} +@media (min-width: 768px) { + .bodywebsite .object-wrap-sm-right > .object-wrap-body { + right: 0; + } + .bodywebsite .object-wrap-sm-left > .object-wrap-body { + left: 0; + } +} + +@media (max-width: 767px) { + .bodywebsite .object-wrap-body { + position: relative; + overflow: hidden; + min-height: 300px; + width: 100%; + } + .bodywebsite .object-wrap-body > img { + position: absolute; + min-width: 100%; + max-width: none; + height: auto; + max-height: none; + top: 20%; + left: 50%; + transform: translate(-50%, -20%); + } + .bodywebsite .page .text-primary { + word-break: break-all; + } + .bodywebsite figure img { + margin: unset; + } +} + +@media (min-width: 768px) { + .bodywebsite .object-wrap-body { + overflow: hidden; + position: absolute; + top: 0; + bottom: 0; + width: 100vw; + min-width: 1px; + max-width: none; + height: 100%; + min-height: 100%; + max-height: none; + margin: 0; + background: inherit; + z-index: 0; + } + .bodywebsite .object-wrap-body > img { + position: relative; + height: auto; + min-height: 100.5%; + width: auto; + min-width: 102%; + max-width: none; + left: 50%; + transform: translateX(-50%); + } + .bodywebsite .object-wrap-body + * { + margin-top: 0; + } +} +@media (min-width: 768px) { + .bodywebsite .sm-width-c6 { + width: calc(50vw); + } +} +@media (min-width: 992px) { + .bodywebsite .md-width-c7d20 { + width: calc(150vw); + } +} +@media (min-width: 1200px) { + .bodywebsite .md-width-c7d20 { + width: calc(167.5vw); + } +} +@media (min-width: 992px) { + .bodywebsite .md-width-c5dm20 { + width: calc(-50vw); + } +} +@media (min-width: 1200px) { + .bodywebsite .md-width-c5dm20 { + width: calc(-67.5vw); + } +} +.bodywebsite .bg-wrap { + position: relative; +} +.bodywebsite .bg-wrap:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 120vw; + left: 50%; + transform: translateX(-50%); + background: inherit; + z-index: -1; +} +.bodywebsite .bg-wrap-sm-left { + z-index: 1; +} +@media (min-width: 992px) { + .bodywebsite .bg-wrap-sm-left:before { + width: 100vw; + right: 0; + transform: none; + } +} +.bodywebsite .bg-wrap-sm-right { + z-index: 1; +} +@media (min-width: 992px) { + .bodywebsite .bg-wrap-sm-right:before { + width: 100vw; + left: 0; + transform: none; + } +} +@media (min-width: 576px) { + .bodywebsite .wrap-justify { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; + } + .bodywebsite .wrap-justify > * + * { + margin-top: 0; + } +} +@media (min-width: 768px) { + .bodywebsite .wrap-justify { + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +@media (min-width: 1200px) { + .bodywebsite .wrap-justify { + padding-right: 30px; + } +} +.bodywebsite .link-wrap { + line-height: 1; +} +.bodywebsite .link-wrap a { + display: inline; + line-height: 1; +} +.bodywebsite [class*='bg-decoration-wrap'] { + position: relative; + overflow: hidden; +} +.bodywebsite [class*='bg-decoration-wrap'] .bg-decoration-content { + position: relative; + z-index: 2; +} +.bodywebsite [class*='bg-decoration-wrap'] .bg-decoration-object { + top: 0; + bottom: auto; +} +.bodywebsite .bg-decoration-bottom .bg-decoration-object { + top: auto; + bottom: 0; +} +@media (min-width: 768px) { + .bodywebsite .bg-decoration-wrap-sm .bg-decoration-object { + height: 50%; + position: absolute; + right: 0; + left: 0; + } + .bodywebsite .bg-decoration-bottom-sm .bg-decoration-object { + height: 34%; + } +} +@media (min-width: 1200px) { + .bodywebsite .bg-decoration-object { + height: 50%; + position: absolute; + right: 0; + left: 0; + } + .bodywebsite .bg-decoration-bottom-mod .bg-decoration-object { + height: 45%; + } +} +.bodywebsite .divider-fullwidth { + height: 1px; + width: 100%; +} +.bodywebsite .hr { + border: none; + height: 1px; + width: 100%; +} +.bodywebsite .tabs-custom .nav-tabs { + display: block; + word-spacing: 0; + border: 0; +} +.bodywebsite .tabs-custom .nav-tabs:before, +.bodywebsite .tabs-custom .nav-tabs:after { + display: none; +} +.bodywebsite .tabs-custom .nav-tabs .nav-item { + float: none; + border: 0; + cursor: pointer; + transition: .33s all ease; +} +.bodywebsite .tabs-custom .nav-tabs .nav-item .nav-link.active { + cursor: default; + border: 0; +} +.bodywebsite .tabs-custom .nav-tabs .nav-link { + margin: 0; + border: 0; +} +.bodywebsite * + .tabs-custom { + margin-top: 35px; +} +@media (min-width: 992px) { + .bodywebsite * + .tabs-custom { + margin-top: 50px; + } +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs, +.bodywebsite .tabs-custom.tabs-line .nav-tabs, +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs { + font-size: 0; + line-height: 0; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs { + border: 1px solid #dedede; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs li { + margin: -1px 0; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link { + padding: 8px 10px; + font: 700 11px/18px "Roboto", Helvetica, Arial, sans-serif; + color: #000; + background: transparent; + border-bottom: 1px solid #dedede; + text-align: center; + vertical-align: middle; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:after { + font: 400 17px 'Material Design Icons'; + color: transparent; + position: relative; + top: -12px; + display: inline-block; + margin-left: 5px; + content: '\f236'; + vertical-align: middle; + transition: .33s all ease; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:first-child { + border-top: 1px solid #dedede; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .active.nav-link { + color: #fff; + background: #3a3c3e; + border-color: #3a3c3e; +} +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:hover:after, +.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .active.nav-link:after { + top: -1px; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .tabs-custom.tabs-corporate .tab-content { + padding: 22px 0 0; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item, +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item { + margin: 0; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item + .nav-item, +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item + .nav-item { + margin-top: -1px; +} +.bodywebsite .tabs-custom.tabs-line .tab-content, +.bodywebsite .tabs-custom.tabs-minimal .tab-content { + padding: 22px 0 0; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { + font: 400 11px/16px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: -0.05em; + text-transform: uppercase; + color: #9b9b9b; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .active.nav-link { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { + font: 700 11px/24px "Roboto", Helvetica, Arial, sans-serif; + color: #000; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .active.nav-link { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs { + text-align: center; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item { + display: block; + margin: 0 -1px; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { + padding: 8px 15px; + border: 1px solid #e5e7e9; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:last-child { + margin-right: 0; + border-bottom-width: 1px; +} +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .active.nav-link { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs { + text-align: center; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item { + display: block; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { + padding: 7px 15px; + border: 1px solid #e5e7e9; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:last-child { + border-bottom-width: 1px; +} +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .active.nav-link { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +@media (min-width: 768px) { + .bodywebsite .tabs-custom.tabs-line .nav-item, + .bodywebsite .tabs-custom.tabs-minimal .nav-item { + margin: 0; + } + .bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { + font-size: 14px; + line-height: 24px; + } + .bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { + font-size: 14px; + line-height: 24px; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + text-align: left; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link { + position: relative; + z-index: 10; + display: inline-block; + border: 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item + .nav-item, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item + .nav-item { + margin-top: 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .tab-content, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .tab-content { + padding: 40px 0 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-link { + display: block; + border: 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs { + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + border-bottom: 2px solid #e5e7e9; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link { + padding: 8px 0 8px 0; + margin: 0 30px 0 0; + font-weight: 700; + background: transparent; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link:after { + content: ''; + position: absolute; + left: 0; + right: 100%; + bottom: -1px; + border-bottom: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + opacity: 0; + visibility: hidden; + transition: .33s all ease; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link:hover, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .active.nav-link { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .active.nav-link:after { + right: 0; + opacity: 1; + visibility: visible; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs { + margin-top: -10px; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item { + display: inline-block; + margin: 10px 15px 0 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link { + position: relative; + bottom: -1px; + z-index: 10; + display: inline-block; + padding: 0 0 5px 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:after { + content: ''; + position: absolute; + left: 0; + right: 100%; + bottom: 0; + border-bottom: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + opacity: 0; + visibility: hidden; + transition: .33s all ease; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:last-child { + margin-right: 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:hover, + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .active.nav-link { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .active.nav-link:after { + right: 0; + opacity: 1; + visibility: visible; + } +} +.bodywebsite .tabs-vertical .nav-tabs { + position: relative; +} +.bodywebsite .tabs-vertical .nav-tabs > .nav-item { + z-index: 10; + display: block; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs { + width: 100%; +} +.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item { + display: block; +} +.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link { + position: relative; + padding: 8px 10px; +} +.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .active.nav-link { + border-color: #3a3c3e; +} +.bodywebsite .tabs-vertical.tabs-corporate .tab-content { + padding: 30px 0 0; +} +.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs { + border-right: 1px solid #ddd; +} +.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link { + position: relative; + right: -1px; + padding: 0 16px 0 0; + text-align: right; + border-right: 1px solid transparent; + background-color: transparent; +} +.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link:hover, +.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link.resp-tab-active { + border-right-color: #00030a; +} +.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item + .nav-item { + margin-top: 16px; +} +@media (min-width: 768px) { + .bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link { + font-size: 16px; + line-height: 26px; + } + .bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:after { + font-size: 25px; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs { + position: relative; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item .nav-link { + display: block; + padding: 21px 10px 19px; + } + .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .tab-content { + padding: 30px 0 0; + } + .bodywebsite .tabs-custom.tabs-vertical { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + } + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + max-width: 50%; + } + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item { + width: 100%; + } + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link { + text-align: left; + } + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link:hover, + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .active.nav-link { + border-color: #3a3c3e; + } + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link:hover:after, + .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .active.nav-link:after { + right: 15px; + } + .bodywebsite .tabs-custom.tabs-vertical .tab-content { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs { + width: auto; + min-width: 240px; + border-width: 0 0 1px 0; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item { + margin: 0; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link { + padding: 23px 44px 22px 30px; + border-width: 1px 0 0 0; + text-align: left; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:after { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 26px; + content: '\f238'; + transition: .33s all ease; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:hover:after, + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .active.nav-link:after { + right: 15px; + top: 50%; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .tab-content { + padding: 0 0 0 30px; + margin-top: -5px; + } +} +@media (min-width: 992px) { + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs { + min-width: 300px; + } + .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .tab-content { + padding: 0 0 0 44px; + } +} +.bodywebsite .card-group.card-group-custom { + margin-bottom: 0; +} +.bodywebsite .card-group.card-group-custom .card-heading + .card-collapse > .card-body, +.bodywebsite .card-group.card-group-custom .card-heading + .card-collapse > .list-group { + border-top: 0; +} +.bodywebsite .card-group.card-group-custom .card + .card { + margin-top: 0; +} +.bodywebsite .card-group.card-group-corporate .card + .card { + margin-top: 30px; +} +.bodywebsite .card-custom { + margin: 0; + background: inherit; + border: 0; + border-radius: 0; + box-shadow: none; +} +.bodywebsite .card-custom a { + display: block; +} +.bodywebsite .card-custom .card-heading { + padding: 0; + border-bottom: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.bodywebsite .card-custom .card-body { + padding: 0; + border: 0; +} +.bodywebsite * + .card-group-custom { + margin-top: 35px; +} +@media (min-width: 768px) { + .bodywebsite * + .card-group-custom { + margin-top: 50px; + } +} +.bodywebsite .card-light:first-child .card-title { + border-top: 1px solid #dedede; +} +.bodywebsite .card-light .card-title { + border-bottom: 1px solid #dedede; +} +.bodywebsite .card-light .card-title:nth-child(n + 2) { + margin-top: -1px; +} +.bodywebsite .card-light .card-title a { + position: relative; + padding: 24px 55px 22px 32px; + font: 500 18px/24px "Roboto", Helvetica, Arial, sans-serif; + color: #000; + transition: 1.5s all ease; +} +.bodywebsite .card-light .card-title a .card-arrow:after { + opacity: 0; + visibility: hidden; +} +.bodywebsite .card-light .card-title a.collapsed .card-arrow:after { + opacity: 1; + visibility: visible; +} +.bodywebsite .card-light .card-arrow { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 26px; + transition: .33s; + will-change: transform; +} +.bodywebsite .card-light .card-arrow:before, +.bodywebsite .card-light .card-arrow:after { + content: ''; + position: absolute; + top: 50%; + transform: translateY(-50%); + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .card-light .card-arrow:before { + width: 14px; + height: 2px; + right: 0; +} +.bodywebsite .card-light .card-arrow:after { + width: 2px; + height: 14px; + right: 6px; + transition: .2s all ease; +} +.bodywebsite .card-light .card-collapse { + position: relative; + margin-top: -1px; + border-bottom: 1px solid #dedede; + color: #9f9f9f; + will-change: transform; +} +.bodywebsite .card-light .card-body { + padding: 25px 44px 25px 32px; +} +@media (max-width: 767px) { + .bodywebsite .card-light .card-title a, + .bodywebsite .card-light .card-body { + padding-left: 15px; + } +} +.bodywebsite .card-corporate .card-title a, +.bodywebsite .card-corporate .card-collapse { + background: #fff; + box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); +} +.bodywebsite .card-corporate .card-collapse.in { + box-shadow: -1px 0 5px 0 rgba(65, 65, 65, 0.12); +} +.bodywebsite .card-corporate .card-collapse.in:before { + content: ''; + position: absolute; + top: -1px; + height: 1px; + background: #ededed; + left: 0; + width: 100%; +} +.bodywebsite .card-corporate .card-title a { + position: relative; + z-index: 1; + padding: 24px 82px 22px 32px; + font: 500 18px/24px "Roboto", Helvetica, Arial, sans-serif; + color: #000; + transition: 1.3s all ease; + letter-spacing: -0.025em; + border-radius: 6px 6px 0 0; +} +.bodywebsite .card-corporate .card-title a .card-arrow:after { + opacity: 0; + visibility: hidden; +} +.bodywebsite .card-corporate .card-title a.collapsed { + border-radius: 6px; +} +.bodywebsite .card-corporate .card-title a.collapsed .card-arrow { + border-radius: 0 6px 6px 0; +} +.bodywebsite .card-corporate .card-title a.collapsed .card-arrow:after { + opacity: 1; + visibility: visible; +} +.bodywebsite .card-corporate .card-arrow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + z-index: 2; + width: 70px; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-radius: 0 6px 0 0; + transition: 1.3s all ease; +} +.bodywebsite .card-corporate .card-arrow:before, +.bodywebsite .card-corporate .card-arrow:after { + content: ''; + position: absolute; + top: 50%; + z-index: 4; + transform: translateY(-50%); + background: #fff; +} +.bodywebsite .card-corporate .card-arrow:before { + width: 14px; + height: 2px; + right: 28px; +} +.bodywebsite .card-corporate .card-arrow:after { + width: 2px; + height: 14px; + right: 34px; +} +.bodywebsite .card-corporate .card-collapse { + position: relative; + z-index: 2; + color: #9f9f9f; + border-radius: 0 0 6px 6px; +} +.bodywebsite .card-corporate .card-body { + padding: 25px 44px 25px 32px; +} +@media (max-width: 767px) { + .bodywebsite .card-corporate .card-title a, + .bodywebsite .card-corporate .card-body { + padding-left: 25px; + } +} +.bodywebsite .card-lg { + position: relative; + padding: 50px 15px; +} +.bodywebsite .card-lg:before { + content: ''; + position: absolute; + top: -45px; + left: 50%; + width: 55px; + height: 55px; + margin-left: -10px; + background: #fff; + transform: translateX(-50%) rotate(-45deg); +} +@media (min-width: 768px) { + .bodywebsite .card-lg { + padding: 90px 35px 100px; + } +} +.bodywebsite table { + background-color: transparent; +} +.bodywebsite caption { + padding-top: 17px 25px 18px; + padding-bottom: 17px 25px 18px; + color: #dedede; + text-align: left; +} +.bodywebsite th { + text-align: left; +} +.bodywebsite .table { + width: 100%; + max-width: 100%; + margin-bottom: 0; + color: #00030a; +} +.bodywebsite .table > thead > tr > th, +.bodywebsite .table > thead > tr > td, +.bodywebsite .table > tbody > tr > th, +.bodywebsite .table > tbody > tr > td, +.bodywebsite .table > tfoot > tr > th, +.bodywebsite .table > tfoot > tr > td { + line-height: 1.71429; + vertical-align: top; + border-top: 0; +} +.bodywebsite .table > tbody > tr > th, +.bodywebsite .table > tbody > tr > td, +.bodywebsite .table > tfoot > tr > th, +.bodywebsite .table > tfoot > tr > td { + padding: 17px 25px 18px; + line-height: 1.71429; + vertical-align: top; + border-bottom: 1px solid #d9d9d9; +} +.bodywebsite .table > thead > tr > th { + font-family: "Playfair Display", Helvetica, Arial, sans-serif; + font-size: 16px; + font-weight: 700; + padding: 26px 25px; + vertical-align: bottom; + background: #f6f7fa; + border-bottom: 0; +} +@media (min-width: 576px) { + .bodywebsite .table > thead > tr > th { + padding: 34px 25px 29px; + } +} +.bodywebsite .table > tfoot > tr > td { + font-weight: 700; +} +.bodywebsite .table > caption + thead > tr:first-child > th, +.bodywebsite .table > caption + thead > tr:first-child > td, +.bodywebsite .table > colgroup + thead > tr:first-child > th, +.bodywebsite .table > colgroup + thead > tr:first-child > td, +.bodywebsite .table > thead:first-child > tr:first-child > th, +.bodywebsite .table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.bodywebsite .table > tbody + tbody { + border-top: 0; +} +.bodywebsite .table .table { + background-color: #fff; +} +.bodywebsite .table-condensed > thead > tr > th, +.bodywebsite .table-condensed > thead > tr > td, +.bodywebsite .table-condensed > tbody > tr > th, +.bodywebsite .table-condensed > tbody > tr > td, +.bodywebsite .table-condensed > tfoot > tr > th, +.bodywebsite .table-condensed > tfoot > tr > td { + padding: 5px; +} +.bodywebsite .table-bordered { + border: 1px solid #d9d9d9; +} +.bodywebsite .table-bordered > thead > tr > th, +.bodywebsite .table-bordered > thead > tr > td, +.bodywebsite .table-bordered > tbody > tr > th, +.bodywebsite .table-bordered > tbody > tr > td, +.bodywebsite .table-bordered > tfoot > tr > th, +.bodywebsite .table-bordered > tfoot > tr > td { + border: 1px solid #d9d9d9; +} +.bodywebsite .table-bordered > thead > tr > th, +.bodywebsite .table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.bodywebsite .table-primary { + background: #fff; +} +.bodywebsite .table-primary thead > tr > th { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .table-striped > tbody > tr:nth-of-type(even) { + background-color: #f6f7fa; +} +.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) { + background-color: #fff; +} +.bodywebsite .table-striped > tbody > tr > td { + border-bottom: 0; +} +.bodywebsite .table-hover > tbody > tr:hover { + background-color: #f6f7fa; +} +.bodywebsite table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +.bodywebsite table td[class*="col-"], +.bodywebsite table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.bodywebsite .table-active, +.bodywebsite .table-active > th, +.bodywebsite .table-active > td { + background-color: #f6f7fa; +} +.bodywebsite .table-hover .table-active:hover { + background-color: #e6e8f1; +} +.bodywebsite .table-hover .table-active:hover > td, +.bodywebsite .table-hover .table-active:hover > th { + background-color: #e6e8f1; +} +.bodywebsite .table-success, +.bodywebsite .table-success > th, +.bodywebsite .table-success > td { + background-color: #dff0d8; +} +.bodywebsite .table-hover .table-success:hover { + background-color: #d0e9c6; +} +.bodywebsite .table-hover .table-success:hover > td, +.bodywebsite .table-hover .table-success:hover > th { + background-color: #d0e9c6; +} +.bodywebsite .table-info, +.bodywebsite .table-info > th, +.bodywebsite .table-info > td { + background-color: #d9edf7; +} +.bodywebsite .table-hover .table-info:hover { + background-color: #c4e3f3; +} +.bodywebsite .table-hover .table-info:hover > td, +.bodywebsite .table-hover .table-info:hover > th { + background-color: #c4e3f3; +} +.bodywebsite .table-warning, +.bodywebsite .table-warning > th, +.bodywebsite .table-warning > td { + background-color: #fcf8e3; +} +.bodywebsite .table-hover .table-warning:hover { + background-color: #faf2cc; +} +.bodywebsite .table-hover .table-warning:hover > td, +.bodywebsite .table-hover .table-warning:hover > th { + background-color: #faf2cc; +} +.bodywebsite .table-danger, +.bodywebsite .table-danger > th, +.bodywebsite .table-danger > td { + background-color: #fe4a21; +} +.bodywebsite .table-hover .table-danger:hover { + background-color: #fe3508; +} +.bodywebsite .table-hover .table-danger:hover > td, +.bodywebsite .table-hover .table-danger:hover > th { + background-color: #fe3508; +} +.bodywebsite .table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media (max-width: 575px) { + .bodywebsite .table-responsive { + width: 100%; + margin-bottom: 1.28571; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #d9d9d9; + } + .bodywebsite .table-responsive > .table { + margin-bottom: 0; + } + .bodywebsite .table-responsive > .table > thead > tr > th, + .bodywebsite .table-responsive > .table > thead > tr > td, + .bodywebsite .table-responsive > .table > tbody > tr > th, + .bodywebsite .table-responsive > .table > tbody > tr > td, + .bodywebsite .table-responsive > .table > tfoot > tr > th, + .bodywebsite .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .bodywebsite .table-responsive > .table-bordered { + border: 0; + } + .bodywebsite .table-responsive > .table-bordered > thead > tr > th:first-child, + .bodywebsite .table-responsive > .table-bordered > thead > tr > td:first-child, + .bodywebsite .table-responsive > .table-bordered > tbody > tr > th:first-child, + .bodywebsite .table-responsive > .table-bordered > tbody > tr > td:first-child, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .bodywebsite .table-responsive > .table-bordered > thead > tr > th:last-child, + .bodywebsite .table-responsive > .table-bordered > thead > tr > td:last-child, + .bodywebsite .table-responsive > .table-bordered > tbody > tr > th:last-child, + .bodywebsite .table-responsive > .table-bordered > tbody > tr > td:last-child, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .bodywebsite .table-responsive > .table-bordered > tbody > tr:last-child > th, + .bodywebsite .table-responsive > .table-bordered > tbody > tr:last-child > td, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .bodywebsite .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +.bodywebsite .jumbotron-custom { + font-weight: 900; + font-size: 35px; + line-height: 1.2; + letter-spacing: .01em; +} +.bodywebsite .jumbotron-custom > span { + font-size: 31px; + line-height: 1.2; +} +@media (min-width: 768px) { + .bodywebsite .jumbotron-custom { + font-size: 45px; + } + .bodywebsite .jumbotron-custom > span { + font-size: 41px; + } +} +@media (min-width: 992px) { + .bodywebsite .jumbotron-custom { + font-size: 55px; + } + .bodywebsite .jumbotron-custom > span { + font-size: 51px; + } +} +@media (min-width: 1200px) { + .bodywebsite .jumbotron-custom { + font-size: 65px; + } + .bodywebsite .jumbotron-custom > span { + font-size: 61px; + } +} +.bodywebsite [class^="thin-icon-"]:before, +.bodywebsite [class*=" thin-icon-"]:before, +.bodywebsite .thin-ico { + font-family: "Thin Regular"; + font-weight: 400; + font-style: normal; + font-size: inherit; + text-transform: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bodywebsite .thin-icon-volume-on:before { + content: '\e800'; +} +.bodywebsite .thin-icon-gift:before { + content: '\e801'; +} +.bodywebsite .thin-icon-cup:before { + content: '\e802'; +} +.bodywebsite .thin-icon-folder:before { + content: '\e803'; +} +.bodywebsite .thin-icon-dublicate:before { + content: '\e804'; +} +.bodywebsite .thin-icon-tag:before { + content: '\e805'; +} +.bodywebsite .thin-icon-chat:before { + content: '\e806'; +} +.bodywebsite .thin-icon-clock:before { + content: '\e807'; +} +.bodywebsite .thin-icon-microphone:before { + content: '\e808'; +} +.bodywebsite .thin-icon-map-marker:before { + content: '\e809'; +} +.bodywebsite .thin-icon-mobile:before { + content: '\e80a'; +} +.bodywebsite .thin-icon-cloud-charge:before { + content: '\e80b'; +} +.bodywebsite .thin-icon-resize:before { + content: '\e80c'; +} +.bodywebsite .thin-icon-cake:before { + content: '\e80d'; +} +.bodywebsite .thin-icon-case:before { + content: '\e80e'; +} +.bodywebsite .thin-icon-address:before { + content: '\e80f'; +} +.bodywebsite .thin-icon-phone-support:before { + content: '\e810'; +} +.bodywebsite .thin-icon-fullscreen:before { + content: '\e811'; +} +.bodywebsite .thin-icon-db:before { + content: '\e812'; +} +.bodywebsite .thin-icon-music:before { + content: '\e813'; +} +.bodywebsite .thin-icon-network:before { + content: '\e814'; +} +.bodywebsite .thin-icon-db-network:before { + content: '\e815'; +} +.bodywebsite .thin-icon-dropbox-upload:before { + content: '\e816'; +} +.bodywebsite .thin-icon-phone-call:before { + content: '\e817'; +} +.bodywebsite .thin-icon-briefcase-2:before { + content: '\e818'; +} +.bodywebsite .thin-icon-card:before { + content: '\e819'; +} +.bodywebsite .thin-icon-support:before { + content: '\e81a'; +} +.bodywebsite .thin-icon-pull:before { + content: '\e81b'; +} +.bodywebsite .thin-icon-desktop:before { + content: '\e81c'; +} +.bodywebsite .thin-icon-pass:before { + content: '\e81d'; +} +.bodywebsite .thin-icon-picture:before { + content: '\e81e'; +} +.bodywebsite .thin-icon-email:before { + content: '\e81f'; +} +.bodywebsite .thin-icon-push:before { + content: '\e820'; +} +.bodywebsite .thin-icon-house:before { + content: '\e821'; +} +.bodywebsite .thin-icon-download:before { + content: '\e822'; +} +.bodywebsite .thin-icon-storage:before { + content: '\e823'; +} +.bodywebsite .thin-icon-milk:before { + content: '\e824'; +} +.bodywebsite .thin-icon-external-right:before { + content: '\e825'; +} +.bodywebsite .thin-icon-email-open:before { + content: '\e826'; +} +.bodywebsite .thin-icon-planet:before { + content: '\e827'; +} +.bodywebsite .thin-icon-pointer:before { + content: '\e828'; +} +.bodywebsite .thin-icon-email-search:before { + content: '\e829'; +} +.bodywebsite .thin-icon-external-left:before { + content: '\e82a'; +} +.bodywebsite .thin-icon-shirt:before { + content: '\e82b'; +} +.bodywebsite .thin-icon-document-edit:before { + content: '\e82c'; +} +.bodywebsite .thin-icon-document-delete:before { + content: '\e82d'; +} +.bodywebsite .thin-icon-money:before { + content: '\e82e'; +} +.bodywebsite .thin-icon-eye:before { + content: '\e82f'; +} +.bodywebsite .thin-icon-settings:before { + content: '\e830'; +} +.bodywebsite .thin-icon-arrow-bottom-right:before { + content: '\e831'; +} +.bodywebsite .thin-icon-arrow-right:before { + content: '\e832'; +} +.bodywebsite .thin-icon-flag:before { + content: '\e833'; +} +.bodywebsite .thin-icon-star:before { + content: '\e834'; +} +.bodywebsite .thin-icon-calculator:before { + content: '\e835'; +} +.bodywebsite .thin-icon-safe:before { + content: '\e836'; +} +.bodywebsite .thin-icon-cart:before { + content: '\e837'; +} +.bodywebsite .thin-icon-bullhorn:before { + content: '\e838'; +} +.bodywebsite .thin-icon-anchor:before { + content: '\e839'; +} +.bodywebsite .thin-icon-globe:before { + content: '\e83a'; +} +.bodywebsite .thin-icon-statistics:before { + content: '\e83b'; +} +.bodywebsite .thin-icon-thumb-up:before { + content: '\e83c'; +} +.bodywebsite .thin-icon-headphones:before { + content: '\e83d'; +} +.bodywebsite .thin-icon-bell:before { + content: '\e83e'; +} +.bodywebsite .thin-icon-study:before { + content: '\e83f'; +} +.bodywebsite .thin-icon-cart-add:before { + content: '\e840'; +} +.bodywebsite .thin-icon-cart-delete:before { + content: '\e841'; +} +.bodywebsite .thin-icon-satelite:before { + content: '\e842'; +} +.bodywebsite .thin-icon-home:before { + content: '\e843'; +} +.bodywebsite .thin-icon-time:before { + content: '\e844'; +} +.bodywebsite .thin-icon-book:before { + content: '\e845'; +} +.bodywebsite .thin-icon-bookmark:before { + content: '\e846'; +} +.bodywebsite .thin-icon-key:before { + content: '\e847'; +} +.bodywebsite .thin-icon-timer:before { + content: '\e848'; +} +.bodywebsite .thin-icon-saturn:before { + content: '\e849'; +} +.bodywebsite .thin-icon-notes:before { + content: '\e84a'; +} +.bodywebsite .thin-icon-ambulance:before { + content: '\e84b'; +} +.bodywebsite .thin-icon-briefcase:before { + content: '\e84c'; +} +.bodywebsite .thin-icon-layers:before { + content: '\e84d'; +} +.bodywebsite .thin-icon-delivery:before { + content: '\e84e'; +} +.bodywebsite .thin-icon-tint:before { + content: '\e84f'; +} +.bodywebsite .thin-icon-trash:before { + content: '\e850'; +} +.bodywebsite .thin-icon-lightbulb:before { + content: '\e851'; +} +.bodywebsite .thin-icon-calendar:before { + content: '\e852'; +} +.bodywebsite .thin-icon-chart:before { + content: '\e853'; +} +.bodywebsite .thin-icon-documents:before { + content: '\e854'; +} +.bodywebsite .thin-icon-checklist:before { + content: '\e855'; +} +.bodywebsite .thin-icon-camera-web:before { + content: '\e856'; +} +.bodywebsite .thin-icon-camera:before { + content: '\e857'; +} +.bodywebsite .thin-icon-lock:before { + content: '\e858'; +} +.bodywebsite .thin-icon-umbrella:before { + content: '\e859'; +} +.bodywebsite .thin-icon-user:before { + content: '\e85a'; +} +.bodywebsite .thin-icon-love:before { + content: '\e85b'; +} +.bodywebsite .thin-icon-hanger:before { + content: '\e85c'; +} +.bodywebsite .thin-icon-car:before { + content: '\e85d'; +} +.bodywebsite .thin-icon-cloth:before { + content: '\e85e'; +} +.bodywebsite .thin-icon-box:before { + content: '\e85f'; +} +.bodywebsite .thin-icon-attachment:before { + content: '\e860'; +} +.bodywebsite .thin-icon-cd:before { + content: '\e861'; +} +.bodywebsite .thin-icon-love-broken:before { + content: '\e862'; +} +.bodywebsite .thin-icon-volume-off:before { + content: '\e863'; +} +.bodywebsite .slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} +.bodywebsite .counter { + font: 900 45px/45px "Roboto", Helvetica, Arial, sans-serif; + margin-bottom: 0; + color: #fff; +} +.bodywebsite .counter-bold { + font-weight: 700; +} +.bodywebsite .counter-k:after { + content: 'k'; +} +.bodywebsite * + .counter-title { + margin-top: 0; +} +.bodywebsite .countdown-default { + color: #000; +} +.bodywebsite .countdown-default .countdown-section { + position: relative; + display: inline-block; + min-width: 90px; + padding: 0 10px; + text-align: center; +} +.bodywebsite .countdown-default .countdown-section > * { + display: block; +} +.bodywebsite .countdown-default .countdown-section:after { + position: absolute; + top: 35%; + transform: translateY(-35%); + border-radius: 20px; + background: #000; +} +.bodywebsite .countdown-default .countdown-section:nth-last-child(n + 3):after { + content: ''; + right: -2px; + width: 5px; + height: 5px; +} +@media (max-width: 767px) { + .bodywebsite .countdown-default .countdown-section:last-child { + display: none; + } +} +.bodywebsite .countdown-default .countdown-amount { + font-family: Helvetica, Arial, sans-serif; + font-size: 30px; + font-weight: 900; + line-height: 1; +} +.bodywebsite .countdown-default .countdown-period { + margin-top: 10px; + font-size: 12px; + text-transform: uppercase; + letter-spacing: -0.025em; + color: rgba(0, 0, 0, 0.4); +} +.bodywebsite .countdown-default.countdown-inverse .countdown-section:after { + background: #fff; +} +.bodywebsite .countdown-default.countdown-inverse .countdown-period { + color: rgba(255, 255, 255, 0.4); +} +@media (min-width: 768px) { + .bodywebsite .countdown-default .countdown-section { + min-width: 150px; + } + .bodywebsite .countdown-default .countdown-section:not(:last-child):after { + content: ''; + top: 50%; + right: -5px; + transform: translateY(-50%); + width: 10px; + height: 10px; + } + .bodywebsite .countdown-default .countdown-amount { + font-size: 50px; + } + .bodywebsite .countdown-default .countdown-period { + font-size: 14px; + } +} +@media (min-width: 992px) { + .bodywebsite .countdown-default .countdown-section { + min-width: 200px; + } + .bodywebsite .countdown-default .countdown-amount { + font-size: 72px; + } +} +.bodywebsite .countdown-inverse { + color: #fff; +} +.bodywebsite .owl-carousel .animated { + -webkit-animation-duration: 1000ms; + animation-duration: 1000ms; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.bodywebsite .owl-carousel .owl-animated-in { + z-index: 0; +} +.bodywebsite .owl-carousel .owl-animated-out { + z-index: 1; +} +.bodywebsite .owl-carousel .fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +.bodywebsite .owl-height { + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out; +} +.bodywebsite .owl-carousel { + display: none; + width: 100%; + -webkit-tap-highlight-color: transparent; + /* position relative and z-index fix webkit rendering fonts issue */ + position: relative; + z-index: 1; +} +.bodywebsite .owl-carousel .owl-stage { + position: relative; + -ms-touch-action: pan-Y; +} +.bodywebsite .owl-carousel .owl-stage:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +.bodywebsite .owl-carousel .owl-stage-outer { + position: relative; + overflow: hidden; + /* fix for flashing background */ + -webkit-transform: translate3d(0px, 0px, 0px); +} +.bodywebsite .owl-carousel .owl-controls .owl-nav .owl-prev, +.bodywebsite .owl-carousel .owl-controls .owl-nav .owl-next, +.bodywebsite .owl-carousel .owl-controls .owl-dot { + cursor: pointer; + cursor: hand; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bodywebsite .owl-carousel.owl-loaded { + display: block; +} +.bodywebsite .owl-carousel.owl-loading { + opacity: 0; + display: block; +} +.bodywebsite .owl-carousel.owl-hidden { + opacity: 0; +} +.bodywebsite .owl-carousel .owl-refresh .owl-item { + display: none; +} +.bodywebsite .owl-carousel .owl-item { + position: relative; + min-height: 1px; + float: left; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bodywebsite .owl-carousel.owl-text-select-on .owl-item { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bodywebsite .owl-carousel .owl-grab { + cursor: move; + cursor: -webkit-grab; + cursor: grab; +} +.bodywebsite .owl-carousel.owl-rtl { + direction: rtl; +} +.bodywebsite .owl-carousel.owl-rtl .owl-item { + float: right; +} +.bodywebsite .no-js .owl-carousel { + display: block; +} +.bodywebsite .owl-carousel .owl-item .owl-lazy { + opacity: 0; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.bodywebsite .owl-carousel .owl-video-wrapper { + position: relative; + height: 100%; + background: #000; +} +.bodywebsite .owl-carousel .owl-video-play-icon { + position: absolute; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + cursor: pointer; + z-index: 1; + -webkit-transition: scale 100ms ease; + -moz-transition: scale 100ms ease; + -ms-transition: scale 100ms ease; + -o-transition: scale 100ms ease; + transition: scale 100ms ease; +} +.bodywebsite .owl-carousel .owl-video-play-icon:before { + content: '\f144'; +} +.bodywebsite .owl-carousel .owl-video-play-icon:hover { + -webkit-transform: scale(1.3); + transform: scale(1.3); +} +.bodywebsite .owl-carousel .owl-video-playing .owl-video-tn, +.bodywebsite .owl-carousel .owl-video-playing .owl-video-play-icon { + display: none; +} +.bodywebsite .owl-carousel .owl-video-tn { + opacity: 0; + height: 100%; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: contain; + -moz-background-size: contain; + -o-background-size: contain; + background-size: contain; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.bodywebsite .owl-carousel .owl-video-frame { + position: relative; + z-index: 1; +} +.bodywebsite .owl-carousel .owl-stage { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} +.bodywebsite .owl-carousel .owl-item { + float: none; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} +.bodywebsite .owl-carousel .item { + width: 100%; +} +.bodywebsite .owl-carousel-center .owl-item { + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} +.bodywebsite .owl-carousel-center .owl-stage { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; +} +.bodywebsite .owl-prev, +.bodywebsite .owl-next { + position: absolute; + top: 50%; + transform: translateY(-50%); + color: #000; + transition: .22s; +} +.bodywebsite .owl-prev.disabled, +.bodywebsite .owl-next.disabled { + opacity: 0; +} +.bodywebsite .owl-prev:hover, +.bodywebsite .owl-next:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .owl-prev { + left: 0; +} +.bodywebsite .owl-prev:before { + content: '\e5c4'; +} +.bodywebsite .owl-next { + right: 0; +} +.bodywebsite .owl-next:before { + content: '\e5c8'; +} +.bodywebsite .owl-dots { + text-align: center; +} +.bodywebsite .owl-dot { + display: inline-block; +} +.bodywebsite .owl-numbering-default { + padding-bottom: 15px; +} +.bodywebsite .owl-numbering-default > * { + display: inline-block; +} +.bodywebsite .owl-numbering-default .numbering-current { + min-width: 16px; + font: 700 25px "Roboto", Helvetica, Arial, sans-serif; + color: #000; + transition: .33s all ease; +} +.bodywebsite .owl-numbering-default .numbering-separator { + position: relative; + display: inline-block; + margin: 0 10px; +} +.bodywebsite .owl-numbering-default .numbering-separator:after { + position: absolute; + top: -23px; + left: -12px; + content: ''; + width: 2px; + height: 51px; + transform-origin: 50% 75%; + transform: rotate(30deg); + background: rgba(0, 0, 0, 0.3); +} +.bodywebsite .owl-numbering-default .numbering-count { + position: relative; + top: 19px; + left: -7px; + font: 400 18px "Roboto", Helvetica, Arial, sans-serif; + color: rgba(0, 0, 0, 0.3); +} +.bodywebsite .owl-carousel-inverse .owl-next, +.bodywebsite .owl-carousel-inverse .owl-prev { + color: #fff; +} +.bodywebsite .owl-carousel-inverse .owl-next:hover, +.bodywebsite .owl-carousel-inverse .owl-prev:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-current { + color: #fff; +} +.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-separator:after { + background: rgba(255, 255, 255, 0.3); +} +.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-count { + color: rgba(255, 255, 255, 0.3); +} +.bodywebsite .owl-carousel-dark .owl-next, +.bodywebsite .owl-carousel-dark .owl-prev { + color: #000; +} +.bodywebsite .owl-carousel-dark .owl-next:hover, +.bodywebsite .owl-carousel-dark .owl-prev:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .owl-nav-position-numbering .owl-next, +.bodywebsite .owl-nav-position-numbering .owl-prev { + top: auto; + bottom: -53px; + transform: none; +} +.bodywebsite .owl-nav-position-numbering .owl-prev { + left: auto; + right: calc(92%); +} +.bodywebsite .owl-nav-position-numbering .owl-next { + right: auto; + left: calc(92%); +} +.bodywebsite .owl-nav-position-numbering + .owl-numbering { + margin-top: 15px; +} +.bodywebsite .owl-nav-bottom-left .owl-nav { + margin-top: 15px; +} +.bodywebsite .owl-nav-bottom-left .owl-next, +.bodywebsite .owl-nav-bottom-left .owl-prev { + display: inline-block; + position: static; + top: auto; + transform: none; +} +.bodywebsite .owl-nav-bottom-left .owl-prev { + left: auto; +} +.bodywebsite .owl-nav-bottom-left .owl-next { + right: auto; + margin-left: 10px; +} +.bodywebsite .owl-style-minimal .item { + width: 100%; +} +.bodywebsite .owl-style-minimal .item img { + width: 100%; +} +.bodywebsite .owl-style-minimal .owl-dots { + margin-top: 10px; + text-align: center; +} +.bodywebsite .owl-style-minimal .owl-dot { + width: 8px; + height: 8px; + border-radius: 10px; + background: #dedede; + transition: .33s all ease; +} +.bodywebsite .owl-style-minimal .owl-dot.active, +.bodywebsite .owl-style-minimal .owl-dot:hover { + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .owl-style-minimal .owl-dot + .owl-dot { + margin-left: 8px; +} +.bodywebsite .owl-style-minimal-inverse .owl-dot { + background: #74787C; +} +@media (min-width: 992px) { + .bodywebsite .owl-spacing-1 { + padding-right: 60px; + padding-left: 60px; + } +} +@media (min-width: 1200px) { + .bodywebsite .owl-spacing-1 { + padding: 0; + } + .bodywebsite .owl-spacing-1 .owl-item { + padding-right: 41px; + padding-left: 41px; + } + .bodywebsite .owl-spacing-1 .owl-prev { + left: -6%; + } + .bodywebsite .owl-spacing-1 .owl-next { + right: -6%; + } +} +.bodywebsite .owl-nav-classic .owl-nav { + display: none; +} +@media (min-width: 992px) { + .bodywebsite .owl-nav-classic .owl-dots { + display: none !important; + } + .bodywebsite .owl-nav-classic .owl-nav { + display: block; + } + .bodywebsite .owl-nav-classic .owl-nav .owl-prev, + .bodywebsite .owl-nav-classic .owl-nav .owl-next { + top: 39%; + transform: translateY(-45%); + width: 45px; + height: 45px; + line-height: 45px; + color: #fff; + background: rgba(255, 255, 255, 0.2); + text-align: center; + font: 400 20px/45px 'fl-flat-icons-set-2'; + } + .bodywebsite .owl-nav-classic .owl-nav .owl-prev:hover, + .bodywebsite .owl-nav-classic .owl-nav .owl-next:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + } + .bodywebsite .owl-nav-classic .owl-nav .owl-prev { + padding-right: 3px; + } + .bodywebsite .owl-nav-classic .owl-nav .owl-prev:before { + position: relative; + display: inline-block; + content: '\e015'; + transform: scale(-1, 1); + } + .bodywebsite .owl-nav-classic .owl-nav .owl-next { + padding-left: 3px; + } + .bodywebsite .owl-nav-classic .owl-nav .owl-next:before { + content: '\e015'; + } +} +.bodywebsite .owl-nav-modern .owl-nav { + display: none; +} +@media (min-width: 1400px) { + .bodywebsite .owl-nav-modern .owl-dots { + display: none !important; + } + .bodywebsite .owl-nav-modern .owl-nav { + display: block; + } + .bodywebsite .owl-nav-modern .owl-nav .owl-prev:before, + .bodywebsite .owl-nav-modern .owl-nav .owl-next:before { + content: ''; + } + .bodywebsite .owl-nav-modern .owl-nav .owl-prev:hover, + .bodywebsite .owl-nav-modern .owl-nav .owl-next:hover { + opacity: 0.5; + } + .bodywebsite .owl-nav-modern .owl-nav .owl-prev { + left: -58px; + } + .bodywebsite .owl-nav-modern .owl-nav .owl-next { + right: -50px; + } + .bodywebsite .owl-nav-modern .owl-nav .owl-next { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } +} +@-webkit-keyframes rd-navbar-slide-down { + 0% { + transform: translateY(-100%); + } + 100% { + transform: translateY(0); + } +} + +.rd-navbar-group.rd-navbar-search-wrap.toggle-original-elements.active { + overflow: hidden; +} + +.bodywebsite .rd-navbar-wrap, +.bodywebsite .rd-navbar-static .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu, +.bodywebsite .rd-navbar-static .rd-navbar-inner, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap, +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu, +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search { + transition: 0.3s all cubic-bezier(0.785, 0.135, 0.15, 0.86); +} +.bodywebsite .rd-navbar, +.bodywebsite .rd-navbar.rd-navbar--is-clone { + display: none; +} +.bodywebsite .rd-navbar-fixed, +.bodywebsite .rd-navbar-static, +.bodywebsite .rd-navbar-fullwidth, +.bodywebsite .rd-navbar-sidebar { + display: block; +} +.bodywebsite .rd-navbar--no-transition, +.bodywebsite .rd-navbar--no-transition * { + transition: none !important; +} +.bodywebsite .rd-navbar-wrap { + position: relative; + z-index: 10; +} +.bodywebsite .rd-navbar-wrap, +.bodywebsite .rd-navbar, +.bodywebsite .rd-navbar-brand, +.bodywebsite .rd-navbar-slogan, +.bodywebsite .rd-navbar-dropdown, +.bodywebsite .rd-navbar-megamenu, +.bodywebsite .rd-navbar-collapse-items, +.bodywebsite .brand-name, +.bodywebsite .rd-navbar-nav, +.bodywebsite .rd-navbar-panel, +.bodywebsite .rd-navbar-search-form-input, +.bodywebsite .rd-navbar-search-form-submit, +.bodywebsite .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-live-search-results, +.bodywebsite .rd-navbar-search-form { + transition: 0.33s all ease-out; +} +.bodywebsite .rd-navbar-collapse-toggle { + display: inline-block; + position: relative; + width: 48px; + height: 48px; + line-height: 48px; + cursor: pointer; + color: #00030a; + display: none; +} +.bodywebsite .rd-navbar-collapse-toggle span { + top: 50%; + margin-top: -3px; +} +.bodywebsite .rd-navbar-collapse-toggle span, +.bodywebsite .rd-navbar-collapse-toggle span:before, +.bodywebsite .rd-navbar-collapse-toggle span:after { + position: absolute; + width: 6px; + height: 6px; + line-height: 6px; + text-align: center; + background: #00030a; + left: 50%; + margin-left: -3px; + border-radius: 50%; + transition: .3s all ease; +} +.bodywebsite .rd-navbar-collapse-toggle span:before, +.bodywebsite .rd-navbar-collapse-toggle span:after { + content: ''; +} +.bodywebsite .rd-navbar-collapse-toggle span:before { + bottom: 100%; + margin-bottom: 3px; +} +.bodywebsite .rd-navbar-collapse-toggle span:after { + top: 100%; + margin-top: 3px; +} +.bodywebsite .rd-navbar-collapse-toggle.active span { + transform: scale(0.7); +} +.bodywebsite .rd-navbar-collapse-toggle.active span:before { + transform: translateY(18px); +} +.bodywebsite .rd-navbar-collapse-toggle.active span:after { + transform: translateY(-18px); +} +.bodywebsite .rd-navbar--has-sidebar body { + padding-left: 270px; +} +.bodywebsite .rd-navbar--is-stuck { + border-bottom: 1px solid #e5e7e9; +} +.bodywebsite .rd-navbar.rd-navbar-fixed + .rd-navbar.rd-navbar--is-clone, +.bodywebsite .rd-navbar.rd-navbar-sidebar + .rd-navbar.rd-navbar--is-clone { + display: none; +} +.bodywebsite .rd-navbar { + display: none; + background: #fff; + box-shadow: none; +} +.bodywebsite .rd-navbar-toggle { + display: inline-block; + position: relative; + width: 48px; + height: 48px; + line-height: 48px; + cursor: pointer; + color: #000; + background-color: transparent; + border: none; + display: none; +} +.bodywebsite .rd-navbar-toggle span { + position: relative; + display: block; + margin: auto; + transition: .3s all ease; +} +.bodywebsite .rd-navbar-toggle span:after, +.bodywebsite .rd-navbar-toggle span:before { + content: ""; + position: absolute; + left: 0; + top: -8px; + transition: .3s all ease; +} +.bodywebsite .rd-navbar-toggle span:after { + top: 8px; +} +.bodywebsite .rd-navbar-toggle span:after, +.bodywebsite .rd-navbar-toggle span:before, +.bodywebsite .rd-navbar-toggle span { + width: 24px; + height: 4px; + background-color: #000; + backface-visibility: hidden; + border-radius: 2px; +} +.bodywebsite .rd-navbar-toggle span { + transform: rotate(180deg); +} +.bodywebsite .rd-navbar-toggle span:before, +.bodywebsite .rd-navbar-toggle span:after { + transform-origin: 1.71429px center; +} +.bodywebsite .rd-navbar-toggle.active span { + transform: rotate(360deg); +} +.bodywebsite .rd-navbar-toggle.active span:before, +.bodywebsite .rd-navbar-toggle.active span:after { + top: 0; + width: 15px; +} +.bodywebsite .rd-navbar-toggle.active span:before { + -webkit-transform: rotate3d(0, 0, 1, -40deg); + transform: rotate3d(0, 0, 1, -40deg); +} +.bodywebsite .rd-navbar-toggle.active span:after { + -webkit-transform: rotate3d(0, 0, 1, 40deg); + transform: rotate3d(0, 0, 1, 40deg); +} +.bodywebsite .rd-navbar-toggle:focus { + outline: none; +} +.bodywebsite .rd-navbar-brand { + transition: none !important; +} +.bodywebsite .rd-navbar-brand svg { + fill: #000; +} +.bodywebsite .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-search .rd-search-submit, +.bodywebsite .buttonwithnoborder { + background: none; + border: none; + display: inline-block; + padding: 0; + outline: none; + outline-offset: 0; + cursor: pointer; + -webkit-appearance: none; +} +.bodywebsite .rd-navbar-search .rd-navbar-search-toggle::-moz-focus-inner, +.bodywebsite .rd-navbar-search .rd-search-submit::-moz-focus-inner { + border: none; + padding: 0; +} +.bodywebsite .rd-navbar-search .form-input::-ms-clear { + display: none; +} +.bodywebsite .rd-navbar-search-toggle { + display: inline-block; + width: 36px; + height: 36px; + text-align: center; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; +} +.bodywebsite .rd-navbar-search-toggle:before { + content: '\f002'; + position: absolute; + left: 0; + top: 0; +} +.bodywebsite .rd-navbar-search-toggle:after { + display: none; +} +.bodywebsite .rd-navbar-aside { + pointer-events: none; +} +.bodywebsite .rd-navbar-aside > * { + pointer-events: auto; +} +.bodywebsite .rd-navbar-aside-toggle { + display: none; + pointer-events: auto; +} +.bodywebsite .rd-navbar-static .rd-navbar-search-form-input input, +.bodywebsite .rd-navbar-sidebar .rd-navbar-search-form-input input, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-search-form-input input { + width: 100%; + padding: 0 10px; + font-size: 16px; +} +.bodywebsite .rd-navbar-static:after, +.bodywebsite .rd-navbar-fullwidth:after { + content: ''; + background: #fff; +} +.bodywebsite .rd-navbar-static .rd-navbar-brand, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-brand, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-search-toggle { + position: relative; + z-index: 2; +} +.bodywebsite .rd-navbar-static .rd-navbar-inner, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-inner { + position: relative; + max-width: 1200px; + padding-left: 15px; + padding-right: 15px; + margin-left: auto; + margin-right: auto; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a { + position: relative; + padding: 5px 0; + font-size: 13px; + line-height: 1.2; + color: #00030a; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a .label, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a .label { + position: absolute; + left: 0; + margin: -18px 0 0 0; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a { + font-size: 14px; + } +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li.active > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.active > a { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li.focus > a, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.focus > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-megamenu { + opacity: 0; + visibility: hidden; + font-size: 14px; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu.focus, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu.focus { + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-megamenu { + transform: translateY(30px); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-megamenu { + transform: translateY(0); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu > .rd-navbar-dropdown { + transform: translateX(-20px); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown { + transform: translateX(0); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown { + display: block; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li { + display: inline-block; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav li.rd-navbar--has-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.rd-navbar--has-dropdown { + position: relative; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav li.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav li.focus > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-static .rd-navbar-nav li.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-nav li.opened > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.focus > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.focus > .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.opened > .rd-navbar-megamenu { + opacity: 1; + visibility: visible; + transform: translateY(0); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-dropdown { + position: absolute; + left: 0; + z-index: 5; + display: block; + margin-top: 27px; + text-align: left; + background: #fff; +} +.bodywebsite .rd-navbar-static .rd-navbar-list li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list li { + padding-left: 5px; + padding-right: 5px; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a { + position: relative; + display: block; + width: 100%; + padding-left: 0; + padding-right: 14px; + font-size: 14px; + line-height: 1.3; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:before, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:before { + transition: .33s all ease; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:before, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:before { + position: absolute; + top: 0; + left: -6px; + content: '\f105'; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + line-height: inherit; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover { + padding-left: 14px; + padding-right: 0; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover:before, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover:before, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover:before { + left: 0; + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:focus, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:active, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:focus, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:active, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:focus, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:active, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:focus, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:active { + color: #9f9f9f; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, +.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li + li, +.bodywebsite .rd-navbar-static .rd-navbar-list > li + li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li + li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li + li { + margin-top: 14px; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, + .bodywebsite .rd-navbar-static .rd-navbar-list > li > a, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a { + font-size: 16px; + } +} +@media (min-width: 1800px) { + .bodywebsite .rd-navbar-static .rd-navbar-dropdown > li + li, + .bodywebsite .rd-navbar-static .rd-navbar-list > li + li, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li + li, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li + li { + margin-top: 17px; + } +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown, +.bodywebsite .rd-navbar-static .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { + box-shadow: 0 0 13px 0 rgba(0, 0, 0, 0.13); + border-top: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown { + width: 188px; + padding: 25px 25px 30px; + margin-left: -32px; + background: #fff; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-static .rd-navbar-dropdown, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown { + width: 235px; + } +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-dropdown { + position: absolute; + left: 100%; + margin-left: 91px; + top: -20px; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a { + display: block; + width: 100%; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:focus, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:active, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:focus, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:active { + color: #9f9f9f; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.focus > a, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.opened > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.focus > a, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.opened > a { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { + position: absolute; + z-index: 4; + display: table; + table-layout: fixed; + width: calc(70%); + left: 15px; + max-width: 1200px; + margin-top: 27px; + text-align: left; + background: #fff; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu > li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li { + position: relative; + display: table-cell; + padding: 34px 20px 30px 35px; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu > li + li, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li + li { + border-left: 1px solid #ededed; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu * + .rd-megamenu-header, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu * + .rd-megamenu-header { + margin-top: 40px; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu * + .rd-navbar-list, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu * + .rd-navbar-list { + margin-top: 20px; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-static .rd-navbar-megamenu, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { + width: 1140px; + } + .bodywebsite .rd-navbar-static .rd-navbar-megamenu > li, + .bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li { + padding: 44px 25px 50px 45px; + } +} +.bodywebsite .rd-navbar-static .rd-navbar-submenu-toggle, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-submenu-toggle { + display: none; + cursor: pointer; + z-index: 100; +} +.bodywebsite .rd-navbar-static .rd-navbar-submenu-toggle:hover, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-submenu-toggle:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-submenu-toggle { + display: none; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + width: 24px; + text-align: center; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-submenu-toggle::after { + content: '\f107'; + position: relative; + display: inline-block; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + text-align: center; + transition: 0.4s all ease; + z-index: 2; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + will-change: transform; + -webkit-filter: blur(0); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li li > a:hover + .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li > a:hover + .rd-navbar-submenu-toggle::after { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a:hover + .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a:hover + .rd-navbar-submenu-toggle::after { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-submenu-toggle, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-submenu-toggle { + display: none; + vertical-align: middle; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-submenu-toggle::after { + top: 1px; +} +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover + .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.opened > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover + .rd-navbar-submenu-toggle::after { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone { + display: none; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone.rd-navbar--is-stuck, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone.rd-navbar--is-stuck { + display: block; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-stuck, +.bodywebsite .rd-navbar-static.rd-navbar--is-clone, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone { + position: fixed; + left: 0; + top: 0; + right: 0; + z-index: 999; + background: #fff; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-megamenu, +.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone .rd-navbar-megamenu { + margin-top: 18px; +} +.bodywebsite .rd-navbar-static .rd-navbar-megamenu, +.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { + position: absolute; + transform: translateY(30px); + text-align: left; + visibility: hidden; + opacity: 0; +} +.bodywebsite .rd-navbar-static .rd-navbar--has-dropdown, +.bodywebsite .rd-navbar-fullwidth .rd-navbar--has-dropdown { + position: relative; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-toggle, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-toggle { + display: inline-block; + z-index: 9999; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown, +.bodywebsite .rd-navbar-sidebar .rd-navbar-dropdown { + display: block; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items { + position: absolute; + width: 260px; + padding: 25px 15px; + box-shadow: none; + color: #00030a; + background: #fff; + font-size: 16px; + line-height: 34px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items li > *, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items li > * { + vertical-align: middle; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items li + li, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items li + li { + margin-top: 10px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items .icon, +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items a, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items .icon, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items a { + display: inline-block; + font-size: 16px; + line-height: 30px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items .icon, +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items a[class*="fa"]:before, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items .icon, +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items a[class*="fa"]:before { + display: inline-block; + width: 30px; + height: 30px; + padding-right: 5px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav, +.bodywebsite .rd-navbar-sidebar { + width: 270px; + left: 0; + top: 0; + font-size: 16px; + line-height: 34px; + color: #00030a; + background: #fff; + z-index: 998; +} +.bodywebsite .rd-navbar-static-smooth .rd-navbar { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 9999; +} +.bodywebsite .rd-navbar-static { + display: block; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li { + display: inline-block; +} +.bodywebsite .rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 10px; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search { + position: static; + z-index: 2; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search { + position: absolute; + top: -1px; + right: 4px; + bottom: 0; + left: 0; + z-index: 5; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-submit, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit { + width: 39px; + height: 39px; + line-height: 38px; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-results-live, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-results-live { + padding: 0; + border: 0; + background: #fff; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-results-live > *, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-results-live > * { + display: none; + padding: 16px; + border: 1px solid #e5e7e9; + border-top: 0; + border-radius: 0 0 3px 3px; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .form-label, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .form-label { + border: 0; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active .rd-search, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active .rd-search { + opacity: 1; + visibility: visible; + transition: .22s; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active .rd-search-results-live > *, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active .rd-search-results-live > * { + display: block; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search-wrap.active .rd-navbar-nav-inner, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search-wrap.active .rd-navbar-nav-inner { + position: relative; +} +.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active + .rd-navbar-nav, +.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active + .rd-navbar-nav { + opacity: 0; + visibility: hidden; + pointer-events: none; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone { + display: block; + transform: translateY(-105%); + transition: .33s all ease; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone.rd-navbar--is-stuck { + transform: translateY(0); +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-inner, +.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-inner { + padding: 13px 30px; +} +.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav-wrap, +.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav-wrap { + margin-top: 0; +} +.bodywebsite .rd-navbar-fullwidth { + display: block; + text-align: center; +} +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav { + width: 100%; +} +.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li + li { + margin-left: 20px; +} +.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck .rd-navbar-panel { + display: none; +} +.bodywebsite .rd-navbar-fixed { + display: block; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-brand { + /*position: fixed; */ + top: 10px; + left: 64px; + z-index: 17; + display: block; + overflow: hidden; + text-align: left; + white-space: nowrap; + text-overflow: ellipsis; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-brand .brand-slogan { + display: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-panel { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + /* position: fixed; */ + left: 0; + top: 0; + right: 0; + padding: 4px; + height: 56px; + color: #9f9f9f; + z-index: 999; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-panel:before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + box-shadow: none; + border-bottom: 1px solid #e5e7e9; + background: #fff; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-toggle { + display: inline-block; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap { + position: fixed; + top: 56px; + left: 0; + bottom: -56px; + z-index: 998; + width: 270px; + padding: 0 0 56px; + color: #fff; + background: #fff; + border-right: 1px solid #e5e7e9; + transform: translateX(-105%); + pointer-events: none; + overflow: hidden; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap.active { + transform: translateX(0); +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner { + position: relative; + z-index: 100000; + height: 100%; + padding: 10px 0 20px; + pointer-events: auto; + -webkit-overflow-scrolling: touch; + overflow-x: hidden; + overflow-y: auto; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar { + width: 4px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar-thumb { + background: white; + border: none; + border-radius: 0; + opacity: .2; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar-track { + background: #fff; + border: none; + border-radius: 0; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav { + display: block; + font-size: 16px; + line-height: 26px; + text-align: left; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li > a { + display: block; + font-size: 16px; + padding: 14px 56px 14px 16px; + color: #464a4d; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > a:hover, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > a:hover, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > a:hover, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > a:hover { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > .rd-navbar-submenu-toggle::after, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { + color: #fff; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav > li + li { + margin-top: 4px; +} +.bodywebsite .rd-navbar-fixed .label-custom { + position: relative; + top: -1px; + display: inline-block; + margin: 0 0 0 8px; + font-size: 60%; + line-height: 1; + padding: 6px .5em 5px; + vertical-align: middle; +} +.bodywebsite .iphone .rd-navbar-fixed .label-custom, +.bodywebsite .ipad .rd-navbar-fixed .label-custom, +.bodywebsite .mac .rd-navbar-fixed .label-custom { + padding: 6px .5em 4px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown > li > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-list > li > a { + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-size: 12px; + line-height: 1.2; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu .rd-megamenu-header { + padding: 0 15px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu > li { + padding-top: 15px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu * + .rd-megamenu-header { + margin-top: 15px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu * + .rd-navbar-list { + margin-top: 10px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu { + display: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu { + position: relative; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu li > a { + font-size: 14px; + padding-left: 30px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-dropdown li li > a, +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-megamenu ul li li > a { + padding-left: 48px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-megamenu { + display: block; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-search, +.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap { + display: block; + padding: 16px 5px; +} +.bodywebsite .rd-navbar-fixed .rd-search .rd-search-results-live { + display: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap { + padding: 16px 10px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap .btn { + width: 100%; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li .rd-navbar-megamenu { + transition: opacity 0.3s, height 0.4s ease; + opacity: 0; + height: 0; + overflow: hidden; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-megamenu { + padding: 3px 0; + opacity: 1; + height: auto; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle { + color: #fff; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { + transform: rotate(180deg); + margin-top: -24px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-submenu-toggle::after { + content: '\f107'; + position: absolute; + top: 24px; + right: 0; + margin-top: -18px; + width: 65px; + height: 44px; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + line-height: 42px; + text-align: center; + transition: 0.4s all ease; + z-index: 2; + cursor: pointer; + color: #000; + will-change: transform; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse, +.bodywebsite .rd-navbar-fixed .rd-navbar-search-toggle { + position: fixed; + top: 4px; + height: 48px; + z-index: 1000; + background-color: transparent; + border: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-collapse:focus, +.bodywebsite .rd-navbar-fixed .rd-navbar-search-toggle:focus { + outline: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside { + top: 0; + right: 0; + width: 100%; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside, +.bodywebsite .rd-navbar-fixed .rd-navbar-aside .rd-navbar-aside-toggle { + position: fixed; + z-index: 1000; + display: block; + height: 48px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside.active .rd-navbar-aside-content { + visibility: visible; + opacity: 1; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle { + top: 4px; + right: 4px; + display: inline-block; + position: relative; + width: 48px; + height: 48px; + line-height: 48px; + cursor: pointer; + color: #000; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span { + top: 50%; + margin-top: -3px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span, +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before, +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { + position: absolute; + width: 6px; + height: 6px; + line-height: 6px; + text-align: center; + background: #000; + left: 50%; + margin-left: -3px; + border-radius: 50%; + transition: .3s all ease; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before, +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { + content: ''; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before { + bottom: 100%; + margin-bottom: 3px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { + top: 100%; + margin-top: 3px; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span { + transform: scale(0.7); +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span:before { + transform: translateY(18px); +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span:after { + transform: translateY(-18px); +} +.bodywebsite .rd-navbar-fixed .rd-navbar-aside-content { + position: absolute; + top: calc(107%); + right: 0; + width: calc(102%); + padding: 20px 35px; + margin: 0 -1px; + pointer-events: auto; + opacity: 0; + visibility: hidden; + transition: 0.23s all ease-out; +} +@media (min-width: 768px) { + .bodywebsite .rd-navbar-fixed .rd-navbar-aside-content { + width: auto; + } +} +.bodywebsite .rd-navbar-fixed.rd-navbar--is-clone { + display: none; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-fixed--visible { + display: block; +} +.bodywebsite .rd-navbar-fixed .rd-navbar-fixed--hidden { + display: none; +} +.bodywebsite html.rd-navbar-fixed-linked .page { + padding-top: 56px; +} +.bodywebsite html.rd-navbar-sidebar-linked body { + padding-left: 270px; +} +.bodywebsite .rd-navbar-sidebar { + position: fixed; + display: block; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > a, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > a:hover, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > a, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + background: transparent; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle { + color: #fff; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle:hover, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle:hover { + cursor: pointer; + color: #fff; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li .rd-navbar-dropdown, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li .rd-navbar-megamenu { + transition: opacity 0.3s, height 0.4s ease; + opacity: 0; + height: 0; + overflow: hidden; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-megamenu { + opacity: 1; + height: auto; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > a { + background: transparent; + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle { + color: #fff; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-submenu-toggle::after { + content: '\f078'; + position: absolute; + top: 22px; + right: 0; + margin-top: -22px; + width: 65px; + height: 44px; + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + line-height: 42px; + text-align: center; + transition: 0.4s all ease; + z-index: 2; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-brand { + text-align: center; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items { + top: 0; + left: 0; + padding-top: 45px; + transform: scale(0.7); + transform-origin: 0% 0%; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse { + position: absolute; + top: 4px; + left: 4px; + display: inline-block; + z-index: 1; +} +.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse.active .rd-navbar-collapse-items { + opacity: 1; + visibility: visible; + transform: scale(1); +} +.bodywebsite .rd-navbar-default .rd-navbar-nav > li > a { + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-weight: 700; + line-height: 1.2; + text-transform: uppercase; + color: #00030a; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .form-input, +.bodywebsite .rd-navbar-default .rd-navbar-search .form-label { + font-size: 16px; + line-height: 1.3; + color: #9b9b9b; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .form-label { + top: 18px; + left: 22px; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .form-input { + padding: 7px 45px 10px 22px; + height: auto; + min-height: 20px; + border: 1px solid #e5e7e9; + border-radius: 3px; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit { + font-size: 25px; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:active, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:focus, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:active, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:focus { + color: #00030a; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:hover, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit, +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:before { + font-family: 'Material Icons'; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle { + position: relative; +} +.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:after { + content: '\e5cd'; +} +.bodywebsite .rd-navbar-default.rd-navbar-fixed .rd-navbar-shop { + position: fixed; + top: 15px; + right: 15px; + z-index: 1001; +} +.bodywebsite .rd-navbar-default.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle { + display: none; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-inner, +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-group { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-inner { + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 44px 15px 42px; + font-size: 0; + line-height: 0; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-panel { + min-width: 100px; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-group { + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav-inner { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-right: 12px; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav { + z-index: 0; + margin-right: 40px; + transition: .25s; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 32px; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav { + margin-right: 77px; + } + .bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 48px; + } +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { + display: none; +} +.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-dropdown { + margin-top: 54px; +} +.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-clone .rd-navbar-inner, +.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-inner { + padding: 18px 15px; +} +.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { + margin-top: 49px; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-nav > li > a { + font-weight: 700; + font-size: 14px; + letter-spacing: .05em; + text-transform: uppercase; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-input, +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-label { + font-size: 16px; + line-height: 1.3; + color: #9b9b9b; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-label { + top: 18px; + left: 22px; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-input { + padding: 7px 45px 7px 22px; + height: auto; + min-height: 20px; + border: 1px solid #e5e7e9; + border-radius: 3px; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit { + text-align: center; + color: #000; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit:before { + position: static; + display: inline-block; + font-family: 'fl-bigmug-line'; + font-size: 20px; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:hover, +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:after { + display: none; +} +.bodywebsite .rd-navbar-corporate-dark .rd-navbar-aside { + width: 100%; + font-size: 14px; + line-height: 1.71429; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside-content { + border-bottom: 1px solid #000; + border-left: 1px solid #000; + background: #111; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside .list-units > li + li { + margin-top: 10px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside * + .rd-navbar-aside-group { + margin-top: 14px; +} +@media (min-width: 576px) { + .bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside-content { + width: auto; + } +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-inner { + padding: 0; + font-size: 0; + line-height: 0; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-panel { + min-width: 100px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside { + position: relative; + z-index: 2; + background: #3a3c3e; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 50%; + transform: translateX(-50%); + background: inherit; + width: 102vw; + z-index: -1; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content, +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content { + padding: 12px 15px; + margin-bottom: -5px; + transform: translateY(-5px); + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:first-child { + margin-top: 7px; + -webkit-flex-grow: 8; + -ms-flex-positive: 8; + flex-grow: 8; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-right: 20px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:last-child { + margin-top: 5px; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li { + display: inline-block; + margin-top: 0; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { + margin-right: 25px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group { + /* padding: 35px 15px; */ + padding-top: 18px; + padding-bottom: 18px; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav-inner { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav { + margin-right: 23px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li { + padding-left: 5px; + padding-right: 5px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > a { + font-size: 13px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li.rd-navbar-submenu { + margin-right: -18px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle { + display: inline-block; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 32px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav .rd-navbar-dropdown > li { + padding-left: 5px; + padding-right: 5px; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > a { + font-size: 14px; + } + .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 29px; + } + .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { + margin-right: 50px; + } +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search { + position: static; + z-index: 2; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search .rd-search { + position: absolute; + top: -2px; + /* right: -2px; */ + bottom: 0; + left: 0; + z-index: 5; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search .rd-search-submit { + width: 39px; + height: 39px; + line-height: 38px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search-wrap.active .rd-navbar-nav-wrap { + position: relative; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search.active + .rd-navbar-nav { + opacity: 0; + visibility: hidden; + pointer-events: none; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { + display: none; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-aside, +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-aside { + display: none; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-group, +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-group { + padding-top: 18px; + padding-bottom: 18px; +} +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { + margin-top: 18px; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-nav > li > a { + font: 400 16px "Roboto", Helvetica, Arial, sans-serif; + letter-spacing: .025em; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-input, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-label { + font-size: 16px; + line-height: 1.3; + color: #9b9b9b; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-label { + top: 18px; + left: 22px; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-input { + padding: 7px 22px 10px; + height: auto; + min-height: 20px; + border: 1px solid #e5e7e9; + border-radius: 3px; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-search-submit { + text-align: center; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-search-submit:before { + font-family: 'fl-bigmug-line'; + position: static; + display: inline-block; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { + font-size: 20px; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before { + font-family: 'fl-bigmug-line'; + color: #000; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { + font-family: 'Material Icons'; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:hover:before { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { + width: 36px; + height: 36px; + text-align: center; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { + display: block; + position: absolute; + left: 0; + top: 0; +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before { + content: ""; + transform: scale(1) rotate(0deg); +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { + content: ""; + opacity: 0; + transform: scale(0) rotate(-90deg); +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle.active:before { + opacity: 0; + transform: scale(0) rotate(90deg); +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle.active:after { + opacity: 1; + transform: scale(1) rotate(0deg); +} +.bodywebsite .rd-navbar-corporate-light .rd-navbar-aside { + width: 100%; + font-size: 14px; + line-height: 1.71429; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search { + padding: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search { + opacity: 0; + visibility: hidden; + position: fixed; + width: 100%; + padding: 8px 10px; + transform: translateY(-80%); + background: #fff; + border: 1px solid #e5e7e9; + border-top: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search.active .rd-search { + opacity: 1; + visibility: visible; + transform: translateY(0); +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .form-input { + padding: 7px 46px 10px 22px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit { + font-size: 20px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:focus, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:focus { + color: #000; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:hover, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle { + position: fixed; + right: 56px; + top: 10px; + z-index: 1000; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit { + right: 10px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside-content { + border: 1px solid #e5e7e9; + background: #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside .list-units > li + li { + margin-top: 10px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside * + .rd-navbar-aside-group { + margin-top: 14px; +} +@media (min-width: 576px) { + .bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside-content { + width: auto; + } +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-btn-wrap { + padding: 16px 5px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-inner { + padding: 0; + font-size: 0; + line-height: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-panel { + min-width: 100px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside { + position: relative; + z-index: 100; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap { + position: relative; + z-index: 1001; + padding: 6px 20px 6px 10px; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 50%; + transform: translateX(-50%); + border-bottom: 1px solid #e5e7e9; + width: 101vw; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap > * + * { + margin-left: 10px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content { + margin-bottom: -5px; + transform: translateY(-5px); + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:first-child { + margin-top: 7px; + -webkit-flex-grow: 8; + -ms-flex-positive: 8; + flex-grow: 8; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-right: 20px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:last-child { + margin-top: 5px; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .list-units li { + display: inline-block; + margin-top: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { + margin-right: 30px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group { + padding: 35px 15px; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav-inner { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav { + margin-right: 40px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > a { + font-size: 15px; + padding: 7px 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li.rd-navbar-submenu { + margin-right: -24px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle { + position: relative; + top: 2px; + display: inline-block; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 37px; +} +@media (min-width: 1200px) { + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > a { + font-size: 16px; + } + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li + li { + margin-left: 48px; + } +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search { + position: relative; + z-index: 1500; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-input, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { + color: #fff; + font-size: 30px; + font-weight: 700; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { + top: 24px; + left: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-input { + padding: 10px 50px 9px 0; + background-color: transparent; + border: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .btn { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1000; + opacity: 0; + visibility: hidden; + background: rgba(0, 0, 0, 0.96); +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-inner { + width: 540px; + margin-top: 75px; + margin-left: auto; + margin-right: auto; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border-bottom: 1px solid #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit { + position: relative; + left: 0; + top: 0; + width: 39px; + height: 39px; + font-size: 25px; + line-height: 39px; + transform: none; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:focus { + color: #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:hover { + color: #ababab; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live { + position: relative; + display: block; + top: auto; + right: auto; + bottom: auto; + left: auto; + margin-top: 60px; + margin-left: auto; + margin-right: auto; + width: 800px; + font-size: 20px; + background-color: transparent; + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live > * { + display: block; + padding: 0; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .active .search_list li { + top: 0; + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search-quick-result { + display: none; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list { + margin: 0; + background-color: transparent; + text-align: left; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li { + position: relative; + top: 30px; + display: inline-block; + width: 48%; + padding: 0 15px; + text-align: left; + transition: 0.5s all ease-in-out; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list .search_all { + top: 0; + margin-top: 40px; + display: inline-block; + width: 100%; + text-align: right; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(0) { + transition-delay: 0s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(1) { + transition-delay: 0.15s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(2) { + transition-delay: 0.3s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(3) { + transition-delay: 0.45s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(4) { + transition-delay: 0.6s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(5) { + transition-delay: 0.75s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(6) { + transition-delay: 0.9s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(7) { + transition-delay: 1.05s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(8) { + transition-delay: 1.2s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(9) { + transition-delay: 1.35s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(10) { + transition-delay: 1.5s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(0) { + transition-delay: 0s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(1) { + transition-delay: 0.2s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(2) { + transition-delay: 0.4s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(3) { + transition-delay: 0.6s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(4) { + transition-delay: 0.8s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(5) { + transition-delay: 1s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(6) { + transition-delay: 1.2s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(7) { + transition-delay: 1.4s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(8) { + transition-delay: 1.6s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(9) { + transition-delay: 1.8s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(10) { + transition-delay: 2s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .result-item:only-child { + top: 0; + width: 100%; + text-align: center; + transition-delay: 0s; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .result-item:nth-child(n + 3) { + margin-top: 50px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title { + font: 700 30px/26px Helvetica, Arial, sans-serif; + font-style: italic; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:focus { + color: #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:hover { + color: #ababab; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title + p { + margin-top: 16px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_error { + line-height: 1.35; + text-align: center; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit { + display: inline-block; + padding: 10px 35px; + border: 2px solid; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:active:focus, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.active:focus, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:focus:active, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:focus { + color: #fff; + background-color: transparent; + border-color: #fff; +} +.bodywebsite .open > .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.dropdown-toggle, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:hover { + color: #414141; + background-color: #fff; + border-color: #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.disabled, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit[disabled], +.bodywebsite fieldset[disabled] .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit { + pointer-events: none; + opacity: .5; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit .badge { + color: transparent; + background-color: #fff; +} +@media (min-width: 1600px) and (min-height: 767px) { + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-inner { + margin-top: 10%; + } +} +@media (max-height: 767px) { + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .result-item:nth-child(5), + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .result-item:nth-child(6) { + display: none; + } + .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .search_list > li.search_all { + transition-delay: 0.8s; + } +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-search { + display: block; + z-index: 10000; + margin: 0; + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle { + z-index: 10002; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle:after { + color: #fff; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle:hover:after { + color: #ababab; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { + display: none; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-aside-wrap, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-aside-wrap { + position: absolute; + top: -60px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-group, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-group { + padding-top: 17px; + padding-bottom: 17px; +} +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, +.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { + margin-top: 50px; +} +html .bodywebsite.boxed.rd-navbar--has-sidebar body { + padding-left: 300px; + padding-right: 30px; +} +html .bodywebsite.boxed .rd-navbar--is-clone { + max-width: 1920px; + margin-left: auto; + margin-right: auto; +} + + +.bodywebsite .rd-parallax-inner { + position: relative; + overflow: hidden; + -webkit-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); + z-index: 1; +} +.bodywebsite .rd-parallax-layer[data-type="media"] { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 100%; + pointer-events: none; +} +.bodywebsite .rd-parallax-layer[data-type="media"] iframe { + width: 100%; + height: 100%; +} +.bodywebsite .rd-parallax-layer[data-url] { + -webkit-background-size: cover; + background-size: cover; + background-position: center center; +} +.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] { + background-color: #000; + color: #fff; +} +.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] .rd-parallax-layer[data-type="media"] { + opacity: 0.2; +} +.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] .rd-parallax-layer[data-type="media"] + * { + position: relative; +} +.bodywebsite .rd-parallax.rd-parallax-overlay-2 .rd-parallax-layer[data-type="media"] { + opacity: 0.8; +} +.bodywebsite .google-map-markers { + display: none; +} +.bodywebsite .google-map-container { + width: 100%; +} +.bodywebsite .google-map { + height: 250px; + color: #333; +} +.bodywebsite .google-map img { + max-width: none !important; +} +@media (min-width: 576px) { + .bodywebsite .google-map { + height: 250px; + } +} +@media (min-width: 768px) { + .bodywebsite .google-map { + height: 400px; + } +} +@media (min-width: 1200px) { + .bodywebsite .google-map { + height: 450px; + } +} +@media (min-width: 1800px) { + .bodywebsite .google-map { + height: 532px; + } +} +.bodywebsite .rd-search { + position: relative; +} +.bodywebsite .rd-search .form-wrap { + display: block; + margin: 0; + font-size: 0; +} +.bodywebsite .rd-search label * { + margin-top: 0; +} +.bodywebsite .rd-search .rd-search-submit { + top: 19px; + right: -4px; + background-color: transparent; + border: none; + transform: translateY(-50%); +} +.bodywebsite .rd-search .text-mobile { + display: block; +} +.bodywebsite .rd-search .text-default { + display: none; +} +@media (min-width: 768px) { + .bodywebsite .rd-search .text-mobile { + display: none; + } + .bodywebsite .rd-search .text-default { + display: block; + } +} +.bodywebsite .rd-search-submit { + background: none; + border: none; + padding: 0; + outline: none; + outline-offset: 0; + -webkit-appearance: none; + display: inline-block; + position: relative; + width: 48px; + height: 48px; + line-height: 48px; + cursor: pointer; + color: #00030a; + text-align: center; + font-size: 22px; + position: absolute; + right: 0; + transition: color .33s; +} +.bodywebsite .rd-search-submit::-moz-focus-inner { + border: none; + padding: 0; +} +.bodywebsite .rd-search-submit:before { + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; +} +.bodywebsite .rd-search-submit.active { + transform: scale(0.7); +} +.bodywebsite .rd-search-submit:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-search-minimal { + position: relative; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 40px; + border-bottom: 1px solid #dedede; +} +.bodywebsite .rd-search-minimal:before { + content: '\e8b6'; + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 10px; + font: 400 21px 'Material Icons'; + color: #000; +} +.bodywebsite .rd-search-minimal .form-wrap { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +.bodywebsite .rd-search-minimal .form-label, +.bodywebsite .rd-search-minimal .form-input { + font: 400 16px/24px "Roboto", Helvetica, Arial, sans-serif; + color: rgba(0, 0, 0, 0.2); + letter-spacing: -0.025em; +} +.bodywebsite .rd-search-minimal .form-label { + top: 29px; +} +.bodywebsite .rd-search-minimal .form-input { + padding: 17px 20px; +} +.bodywebsite .rd-search-minimal button[type='submit'] { + padding: 0 20px; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} +@media (min-width: 768px) { + .bodywebsite .rd-search-minimal .form-label, + .bodywebsite .rd-search-minimal .form-input { + font-size: 19px; + } +} +.bodywebsite .rd-search-classic { + overflow: hidden; + border: 1px solid #dedede; + border-radius: 0; +} +.bodywebsite .rd-search-classic .form-input { + min-height: 50px; + padding: 13px 50px 15px 19px; + border: 0; +} +.bodywebsite .rd-search-classic .rd-search-submit { + position: absolute; + right: 0; + top: 0; + bottom: 0; + width: 40px; + line-height: 0; + height: auto; + transform: none; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + text-align: left; +} +.bodywebsite .rd-search-classic .rd-search-submit:before { + font: 400 25px 'Material Icons'; +} +.bodywebsite .search_error { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} +.bodywebsite .rd-search-results-live { + position: absolute; + left: 0; + right: 0; + top: 100%; + z-index: 998; + margin: -3px 0 0; + font-size: 14px; + line-height: 34px; + text-align: left; + color: #9f9f9f; + opacity: 0; + visibility: hidden; +} +.bodywebsite .rd-search-results-live > * { + padding: 16px; + border: 0px solid #dedede; + border-top: 0; +} +.bodywebsite .rd-search-results-live .search-quick-result { + font: 700 14px/24px "Roboto", Helvetica, Arial, sans-serif; + color: #000; + letter-spacing: .06em; + text-transform: uppercase; +} +.bodywebsite .rd-search-results-live .search_list { + margin-top: 10px; + font-size: 16px; + line-height: 30px; +} +.bodywebsite .rd-search-results-live .search_list li + li { + margin-top: 20px; +} +.bodywebsite .rd-search-results-live .search_list .search_error { + padding-bottom: 10px; + font-size: 14px; + line-height: 1.1; +} +.bodywebsite .rd-search-results-live .search_link, +.bodywebsite .rd-search-results-live .search_link:active, +.bodywebsite .rd-search-results-live .search_link:focus { + color: #464a4d; +} +.bodywebsite .rd-search-results-live .search_link:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-search-results-live p { + margin-top: 0; + font-size: 14px; + line-height: 1.6; +} +.bodywebsite .rd-search-results-live .search_title { + margin-bottom: 0; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: 700; + color: #000; +} +.bodywebsite .rd-search-results-live .search_submit { + display: block; + padding: 6px 20px; + font-size: 14px; + font-weight: 700; + text-align: center; + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + border-radius: 5px; + border: 0; + text-transform: uppercase; + transition: 0.3s ease-out; +} +.bodywebsite .rd-search-results-live .search_submit:hover { + color: #fff; + background: #3a3c3e; +} +.bodywebsite .rd-search-results-live .match { + display: none; +} +@media (min-width: 1200px) { + .bodywebsite .rd-search-results-live .search_link p { + display: block; + } +} +.bodywebsite .rd-navbar-fixed-linked .rd-search-results-live { + display: none; +} +.bodywebsite .rd-search-results-live.active.cleared { + opacity: 0; + visibility: hidden; + transition-delay: .08s; +} +.bodywebsite .active .rd-search-results-live { + display: block; + opacity: 1; + visibility: visible; +} +.bodywebsite .rd-search-results .search_list { + text-align: left; + padding-left: 0; + font-size: 14px; + list-style-type: none; + counter-reset: result; +} +.bodywebsite .rd-search-results .result-item { + position: relative; + padding-left: 40px; + color: #9f9f9f; +} +.bodywebsite .rd-search-results .result-item:before { + position: absolute; + top: -1px; + left: 0; + content: counter(result, decimal-leading-zero) "."; + counter-increment: result; + font: 500 19px "Roboto", Helvetica, Arial, sans-serif; + line-height: 1; + color: #cdcdcd; +} +.bodywebsite .rd-search-results .result-item:only-child:before { + display: none; +} +.bodywebsite .rd-search-results .search { + color: #fff; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .rd-search-results .search_error .search { + color: #9f9f9f; + background-color: transparent; +} +.bodywebsite .rd-search-results .match em { + font: 700 12px/16px "Roboto", Helvetica, Arial, sans-serif; + font-style: normal; + text-transform: uppercase; + color: #000; +} +.bodywebsite .rd-search-results * + p { + margin-top: 10px; +} +.bodywebsite .rd-search-results * + .match { + margin-top: 5px; +} +.bodywebsite .rd-search-results * + .result-item { + margin-top: 35px; +} +@media (min-width: 576px) { + .bodywebsite .rd-search-results .result-item { + padding-left: 60px; + } + .bodywebsite .rd-search-results .result-item:before { + left: 15px; + font-size: 19px; + } +} +@media (min-width: 768px) { + .bodywebsite .rd-search-results .result-item:before { + top: 0; + } +} +@media (min-width: 992px) { + .bodywebsite .rd-search-results .result-item { + padding-left: 85px; + } + .bodywebsite .rd-search-results .result-item:before { + top: 0; + left: 40px; + } +} +@media (min-width: 1200px) { + .bodywebsite .rd-search-results .result-item { + padding-left: 100px; + } + .bodywebsite .rd-search-results .result-item:before { + left: 44px; + } +} +.bodywebsite .twitter-item-minimal .tweet-user { + font-size: 16px; + font-weight: 700; +} +.bodywebsite .twitter-item-minimal .tweet-user a, +.bodywebsite .twitter-item-minimal .tweet-user a:active, +.bodywebsite .twitter-item-minimal .tweet-user a:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .twitter-item-minimal .tweet-user a:hover { + color: #000; +} +.bodywebsite .twitter-item-minimal .tweet-user a:before { + content: '-'; +} +.bodywebsite .twitter-item-minimal .tweet-text a, +.bodywebsite .twitter-item-minimal .tweet-text a:active, +.bodywebsite .twitter-item-minimal .tweet-text a:focus { + color: #000; +} +.bodywebsite .twitter-item-minimal .tweet-text a:hover { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .twitter-item-minimal * + .tweet-text { + margin-top: 0; +} +.bodywebsite .twitter-item-minimal * + .tweet-user { + margin-top: 10px; +} +.bodywebsite .twitter-item-minimal + .twitter-item-minimal { + margin-top: 25px; +} +.bodywebsite .twitter-widget { + overflow: hidden; + background: #fff; + border-radius: 6px; + box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); +} +.bodywebsite .twitter-widget > a { + display: block; + color: #9f9f9f; +} +.bodywebsite .twitter-widget .tweet-text a, +.bodywebsite .twitter-widget .tweet-text a:active, +.bodywebsite .twitter-widget .tweet-text a:focus { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .twitter-widget .tweet-text a:hover { + color: #000; +} +.bodywebsite .twitter-widget .twitter-widget-time { + color: #9f9f9f; +} +.bodywebsite .twitter-widget .twitter-widget-meta > * { + line-height: 1.1; +} +.bodywebsite .twitter-widget .twitter-widget-meta > * + * { + margin-top: 5px; +} +.bodywebsite .twitter-widget .twitter-widget-media { + position: relative; + z-index: 1; + overflow: hidden; +} +.bodywebsite .twitter-widget .twitter-widget-media > img { + position: absolute; + top: 0; + right: 0; + left: 0; + min-height: 101%; +} +.bodywebsite .twitter-widget .twitter-widget-media:empty { + display: none; +} +.bodywebsite .twitter-widget .twitter-widget-media:not(:empty) { + padding-bottom: 42.5170068%; +} +.bodywebsite .twitter-widget .tweet-avatar { + display: block; + width: 48px; + height: 48px; + background: #dedede; +} +.bodywebsite .twitter-widget .twitter-widget-header { + padding: 30px 30px 0 30px; +} +.bodywebsite .twitter-widget .twitter-widget-inset { + padding: 25px 30px 15px; +} +.bodywebsite .twitter-widget .twitter-widget-footer { + padding: 15px 30px; +} +.bodywebsite * + .twitter-widget { + margin-top: 30px; +} +.bodywebsite .swiper-container { + margin: 0 auto; + position: relative; + overflow: hidden; + /* Fix of Webkit flickering */ + z-index: 1; + height: auto; +} +.bodywebsite .swiper-container .swiper-wrapper { + height: auto; + min-height: 36.25vw; +} +@media (min-width: 1800px) { + .bodywebsite .swiper-container .swiper-wrapper { + height: auto; + min-height: 680px; + } +} +.bodywebsite .swiper-container-no-flexbox .swiper-slide { + float: left; +} +.bodywebsite .swiper-container-vertical > .swiper-wrapper { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-flex-direction: column; + -webkit-flex-direction: column; + flex-direction: column; +} +.bodywebsite .swiper-wrapper { + position: relative; + width: 100%; + z-index: 1; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + -ms-transition-property: -ms-transform; + transition-property: transform; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} +.bodywebsite .swiper-container-android .swiper-slide, +.bodywebsite .swiper-wrapper { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate(0px, 0px); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); +} +.bodywebsite .swiper-container-multirow > .swiper-wrapper { + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; +} +.bodywebsite .swiper-container-free-mode > .swiper-wrapper { + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + margin: 0 auto; +} +.bodywebsite .swiper-slide { + position: relative; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-flex-shrink: 0; + -ms-flex: 0 0 auto; + flex-shrink: 0; + width: 100%; + min-height: inherit; +} +.bodywebsite .swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} +.bodywebsite .swiper-wp8-horizontal { + -ms-touch-action: pan-y; + touch-action: pan-y; +} +.bodywebsite .swiper-wp8-vertical { + -ms-touch-action: pan-x; + touch-action: pan-x; +} +.bodywebsite .swiper-nav { + position: absolute; + top: 50%; + right: 0; + left: 0; + z-index: 10; + pointer-events: none; + transform: translateY(-50%); +} +.bodywebsite .swiper-button-prev, +.bodywebsite .swiper-button-next { + z-index: 10; + width: 48px; + height: 48px; + background-size: 48px 48px; + color: #fff; + transition: 180ms ease-in-out; + text-align: center; + cursor: pointer; + pointer-events: auto; +} +.bodywebsite .swiper-button-prev:hover, +.bodywebsite .swiper-button-next:hover { + opacity: .7; +} +.bodywebsite .swiper-button-prev.swiper-button-disabled, +.bodywebsite .swiper-button-next.swiper-button-disabled { + opacity: 0; + cursor: auto; + pointer-events: none; +} +.bodywebsite .swiper-button-next { + transform: rotate(180deg); +} +.bodywebsite .swiper-pagination-wrap { + position: absolute; + bottom: 20px; + left: 50%; + width: 100%; + transform: translate3d(-50%, 0, 0); + z-index: 10; +} +@media (min-width: 992px) { + .bodywebsite .swiper-pagination-wrap { + bottom: 35px; + } +} +@media (min-width: 1200px) { + .bodywebsite .swiper-pagination-wrap { + bottom: 55px; + } +} +.bodywebsite .swiper-pagination { + display: block; + width: 100%; + text-align: center; + transition: 300ms; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 10; +} +@media (min-width: 768px) { + .bodywebsite .swiper-pagination { + text-align: left; + } +} +.bodywebsite .swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} +.bodywebsite .swiper-pagination-bullet { + display: inline-block; + width: 6px; + height: 6px; + border-radius: 20px; + background: #cdcdcd; + pointer-events: none; + transition: all 0.2s ease-out; +} +.bodywebsite .swiper-pagination-bullet + * { + margin-left: 10px; +} +@media (min-width: 768px) { + .bodywebsite .swiper-pagination-bullet { + width: 12px; + height: 12px; + pointer-events: auto; + } + .bodywebsite .swiper-pagination-bullet + * { + margin-left: 20px; + } +} +.bodywebsite .swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} +.bodywebsite .swiper-pagination-white .swiper-pagination-bullet { + background: #fff; +} +.bodywebsite .swiper-pagination-bullet:hover, +.bodywebsite .swiper-pagination-bullet-active { + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .swiper-pagination-white .swiper-pagination-bullet-active { + background: #fff; +} +.bodywebsite .swiper-pagination-black .swiper-pagination-bullet-active { + background: #000; +} +.bodywebsite .swiper-container-vertical > .swiper-pagination { + right: 10px; + top: 50%; + -webkit-transform: translate3d(0px, -50%, 0); + -moz-transform: translate3d(0px, -50%, 0); + -o-transform: translate(0px, -50%); + -ms-transform: translate3d(0px, -50%, 0); + transform: translate3d(0px, -50%, 0); +} +.bodywebsite .swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet { + margin: 5px 0; + display: block; +} +.bodywebsite .swiper-container-horizontal > .swiper-pagination { + bottom: 20px; + left: 0; + width: 100%; +} +.bodywebsite .swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet { + margin: 0 5px; +} + +.bodywebsite .swiper-container-coverflow .swiper-wrapper { + /* Windows 8 IE 10 fix */ + -ms-perspective: 1200px; +} +.bodywebsite .swiper-container-fade.swiper-container-free-mode .swiper-slide { + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; +} +.bodywebsite .swiper-container-fade .swiper-slide { + pointer-events: none; +} +.bodywebsite .swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; +} +.bodywebsite .swiper-container-fade .swiper-slide-active, +.bodywebsite .swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.bodywebsite .swiper-container-cube { + overflow: visible; +} +.bodywebsite .swiper-container-cube .swiper-slide { + pointer-events: none; + visibility: hidden; + -webkit-transform-origin: 0 0; + -moz-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + width: 100%; + height: 100%; + z-index: 1; +} +.bodywebsite .swiper-container-cube.swiper-container-rtl .swiper-slide { + -webkit-transform-origin: 100% 0; + -moz-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; +} +.bodywebsite .swiper-container-cube .swiper-slide-active, +.bodywebsite .swiper-container-cube .swiper-slide-next, +.bodywebsite .swiper-container-cube .swiper-slide-prev, +.bodywebsite .swiper-container-cube .swiper-slide-next + .swiper-slide { + pointer-events: auto; + visibility: visible; +} +.bodywebsite .swiper-container-cube .swiper-slide-shadow-top, +.bodywebsite .swiper-container-cube .swiper-slide-shadow-bottom, +.bodywebsite .swiper-container-cube .swiper-slide-shadow-left, +.bodywebsite .swiper-container-cube .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +.bodywebsite .swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; +} +.bodywebsite .swiper-scrollbar { + position: relative; + -ms-touch-action: none; +} +.bodywebsite .swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + top: 0; + left: 0; + z-index: 50; + height: 5px; + width: 100%; +} +.bodywebsite .swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} +.bodywebsite .swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; + left: 0; + top: 0; +} +.bodywebsite .swiper-scrollbar-cursor-drag { + cursor: move; +} +.bodywebsite .swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + -webkit-transform-origin: 50%; + -moz-transform-origin: 50%; + transform-origin: 50%; + -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; + -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite; + animation: swiper-preloader-spin 1s steps(12, end) infinite; +} +.bodywebsite .swiper-lazy-preloader:after { + display: block; + content: ""; + width: 100%; + height: 100%; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + background-position: 50%; + -webkit-background-size: 100%; + background-size: 100%; + background-repeat: no-repeat; +} +.bodywebsite .swiper-lazy-preloader-white:after { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} +@-webkit-keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); + } +} +.bodywebsite .swiper-slide > .vide__body, +.bodywebsite .swiper-slide > .parallax_cnt { + height: 100%; +} +.bodywebsite .swiper-slide { + position: relative; + text-align: center; + white-space: nowrap; + background-position: center center; + overflow: hidden; +} +.bodywebsite .swiper-slide:not(.vide):not(.rd-parallax):before, +.bodywebsite .swiper-slide .parallax_cnt:before, +.bodywebsite .swiper-slide .vide__body:before { + content: ''; + display: inline-block; + height: 50%; +} +.bodywebsite .swiper-slide-caption { + display: inline-block; + width: 100%; + max-height: 100%; + margin-left: -0.25em; + vertical-align: middle; + white-space: normal; + z-index: 1; +} +.bodywebsite .swiper-variant-1, +.bodywebsite .swiper-variant-1 .swiper-wrapper { + height: auto; + min-height: calc(44vh); +} +.bodywebsite .swiper-variant-1 .swiper-slide-caption { + padding: 40px 0 40px; +} +.bodywebsite .swiper-variant-1 .swiper-button-prev, +.bodywebsite .swiper-variant-1 .swiper-button-next { + display: none; +} +.bodywebsite .swiper-variant-1 .slider-text { + display: none; +} +.bodywebsite .swiper-variant-1 .jumbotron-custom + * { + margin-top: 5px; +} +.bodywebsite .swiper-variant-1 * + .button-block { + margin-top: 27px; +} +@media (min-width: 768px) { + .bodywebsite .swiper-variant-1, + .bodywebsite .swiper-variant-1 .swiper-wrapper { + height: auto; + min-height: 36.25vw; + } + .bodywebsite .swiper-variant-1 .swiper-slide-caption { + padding: 60px 0 115px; + } + .bodywebsite .swiper-variant-1 .slider-header { + font-size: 50px; + } + .bodywebsite .swiper-variant-1 .slider-text { + display: block; + } +} +@media (min-width: 992px) { + .bodywebsite .swiper-variant-1 .swiper-slide-caption { + padding: 100px 0 155px; + } + .bodywebsite .swiper-variant-1 .swiper-button-prev, + .bodywebsite .swiper-variant-1 .swiper-button-next { + position: absolute; + top: 50%; + transform: translateY(-59%); + z-index: 10; + display: block; + transition: .3s all ease; + } + .bodywebsite .swiper-variant-1 .swiper-button-prev { + left: 5.1%; + transform: scale(-1, 1); + } + .bodywebsite .swiper-variant-1 .swiper-button-next { + right: 5.1%; + } +} +@media (min-width: 1200px) { + .bodywebsite .swiper-variant-1 .slider-header { + font-size: 59px; + } + .bodywebsite .swiper-variant-1 .swiper-button-prev { + left: 20px; + } + .bodywebsite .swiper-variant-1 .swiper-button-next { + right: 20px; + } +} +@media (min-width: 1599px) { + .bodywebsite .swiper-variant-1 .swiper-button-prev { + left: calc(50vw - 1170px / 2 - 170px + (1170px / 12) * 0); + } + .bodywebsite .swiper-variant-1 .swiper-button-next { + right: calc(50vw - 1170px / 2 - 170px + (1170px / 12) * 0); + } +} +@media (min-width: 1800px) { + .bodywebsite .swiper-variant-1, + .bodywebsite .swiper-variant-1 .swiper-wrapper { + height: auto; + min-height: 680px; + } +} +.bodywebsite .ui-to-top { + width: 40px; + height: 40px; + font-size: 18px; + line-height: 38px; + border-radius: 50%; + position: fixed; + right: 15px; + bottom: 15px; + overflow: hidden; + text-align: center; + text-decoration: none; + z-index: 20; + transition: .3s all ease; + box-shadow: 0 0 1px 0px rgba(55, 195, 134, 0.3); + transform: translateY(100px); +} +.bodywebsite .ui-to-top, +.bodywebsite .ui-to-top:active, +.bodywebsite .ui-to-top:focus { + color: #fff; + background: maincolor) ? 'rgb(150, 150, 150)' : '#'.$website->maincolor; ?>; + opacity: 0.6; +} +.bodywebsite .ui-to-top:hover { + color: #fff; + background: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; + box-shadow: 0 0 1px 0px rgba(0, 0, 0, 0.4); +} +.bodywebsite .ui-to-top:focus { + outline: 0; +} +.bodywebsite .ui-to-top.active { + transform: translateY(0); +} +.bodywebsite .mobile .ui-to-top, +.bodywebsite .tablet .ui-to-top { + display: none !important; +} +@media (min-width: 576px) { + .bodywebsite .ui-to-top { + right: 40px; + bottom: 40px; + } +} +.bodywebsite .progress-bar-wrap { + max-width: 100%; + width: 210px; +} +@media (min-width: 576px) and (max-width: 767px) { + .bodywebsite .progress-bar-wrap { + max-width: 120px; + } +} +@media (min-width: 768px) { + .bodywebsite .progress-bar-wrap { + max-width: 150px; + } +} +.bodywebsite .progress-bar { + position: relative; + width: 100%; + margin: 0; + font-family: "Roboto", Helvetica, Arial, sans-serif; +} +.bodywebsite .progress-bar .progress-bar__body { + position: absolute; + right: 50%; + width: 100%; + top: 50%; + padding: 0; + margin: 0; + white-space: nowrap; + font-size: 34px; + font-weight: 400; + line-height: 26px; + color: #00030a; + text-align: right; +} +.bodywebsite .progress-bar .progress-bar__body:after { + content: '%'; +} +.bodywebsite .progress-bar .progress-bar__stroke, +.bodywebsite .progress-bar .progress-bar__trail { + stroke-linejoin: round; +} +.bodywebsite .progress-bar-horizontal { + position: relative; + font-family: "Roboto", Helvetica, Arial, sans-serif; + text-align: right; +} +.bodywebsite .progress-bar-horizontal > svg { + margin-top: 3px; + border-radius: 3px; +} +.bodywebsite .progress-bar-horizontal .progress-bar__body { + position: absolute; + top: -27px; + margin-top: 0; + padding-right: 0; +} +.bodywebsite .progress-bar-horizontal .progress-bar__body:after { + content: '%'; +} +.bodywebsite .progress-bar-radial { + position: relative; + padding-bottom: 100%; +} +.bodywebsite .progress-bar-radial > svg { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + border-radius: 5px; + overflow: hidden; +} +.bodywebsite .progress-bar-radial .progress-bar__stroke, +.bodywebsite .progress-bar-radial .progress-bar__trail { + stroke-location: outside; +} +.bodywebsite .progress-bar-radial .progress-bar__body { + transform: translate(50%, -50%); +} +.bodywebsite .progress-bar-default .progress-bar__stroke { + stroke: #9f9f9f; +} +.bodywebsite .progress-bar-default .progress-bar__trail { + stroke: rgba(159, 159, 159, 0.05); +} +.bodywebsite .progress-bar-primary .progress-bar__stroke { + stroke: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .progress-bar-primary .progress-bar__trail { + stroke: #F8F9FB; +} +.bodywebsite .progress-bar-bermuda-gray .progress-bar__stroke { + stroke: #6f8fad; +} +.bodywebsite .progress-bar-bermuda-gray .progress-bar__trail { + stroke: #F8F9FB; +} +.bodywebsite .progress-bar-contessa .progress-bar__stroke { + stroke: #e76752; +} +.bodywebsite .progress-bar-contessa .progress-bar__trail { + stroke: #F8F9FB; +} +.bodywebsite .progress-bar-red-orange-1 .progress-bar__stroke { + stroke: #f8333c; +} +.bodywebsite .progress-bar-red-orange-1 .progress-bar__trail { + stroke: #ededed; +} +.bodywebsite .progress-bar-dodger-blue .progress-bar__stroke { + stroke: #45a4ff; +} +.bodywebsite .progress-bar-dodger-blue .progress-bar__trail { + stroke: #ededed; +} +.bodywebsite .progress-bar-gorse .progress-bar__stroke { + stroke: #fde74c; +} +.bodywebsite .progress-bar-gorse .progress-bar__trail { + stroke: #ededed; +} +.bodywebsite .progress-bar-old-gold .progress-bar__stroke { + stroke: #ecd746; +} +.bodywebsite .progress-bar-old-gold .progress-bar__trail { + stroke: #F8F9FB; +} +.bodywebsite .progress-bar-secondary-2 .progress-bar__stroke { + stroke: #dedede; +} +.bodywebsite .progress-bar-secondary-2 .progress-bar__trail { + stroke: gray; +} +.bodywebsite .progress-bar-secondary-1 .progress-bar__stroke { + stroke: #dedede; +} +.bodywebsite .progress-bar-secondary-1 .progress-bar__trail { + stroke: rgba(159, 159, 159, 0.05); +} +.bodywebsite .progress-bar-secondary-3 .progress-bar__stroke { + stroke: #c49558; +} +.bodywebsite .progress-bar-secondary-3 .progress-bar__trail { + stroke: rgba(159, 159, 159, 0.05); +} +.bodywebsite .progress-bar-secondary-4 .progress-bar__stroke { + stroke: #fe4a21; +} +.bodywebsite .progress-bar-secondary-4 .progress-bar__trail { + stroke: rgba(159, 159, 159, 0.05); +} +.bodywebsite .countdown-wrap { + max-width: 720px; + max-height: 134px; +} +.bodywebsite .countdown-wrap .time_circles > div { + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 0; + line-height: 0; +} +.bodywebsite .countdown-wrap div > h4 { + position: relative; + margin-top: -2px; + font: 500 12px "Roboto", Helvetica, Arial, sans-serif !important; + color: rgba(0, 0, 0, 0.2); + letter-spacing: -0.025em; + bottom: auto !important; + text-transform: uppercase; +} +@media (min-width: 576px) { + .bodywebsite .countdown-wrap div > h4 { + font-size: 14px !important; + } +} +.bodywebsite .countdown-wrap span { + font: 900 18px "Roboto", Helvetica, Arial, sans-serif !important; + font-style: normal; + color: #000; +} +@media (min-width: 576px) { + .bodywebsite .countdown-wrap span { + font-size: 40px !important; + } +} +@media (min-width: 768px) { + .bodywebsite .countdown-wrap span { + font-size: 45px !important; + line-height: 1; + } +} +.bodywebsite .slick-slider { + position: relative; + display: block; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} +.bodywebsite .slick-list { + position: relative; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.bodywebsite .slick-list:focus { + outline: none; +} +.bodywebsite .slick-list.dragging { + cursor: pointer; + cursor: hand; +} +.bodywebsite .slick-slider .slick-track, +.bodywebsite .slick-slider .slick-list { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.bodywebsite .slick-track { + position: relative; + left: 0; + top: 0; + display: block; +} +.bodywebsite .slick-track:before, +.bodywebsite .slick-track:after { + content: ""; + display: table; +} +.bodywebsite .slick-track:after { + clear: both; +} +.bodywebsite .slick-loading .slick-track { + visibility: hidden; +} +.bodywebsite .slick-slide { + float: left; + min-height: 1px; + display: none; +} +.bodywebsite [dir="rtl"] .slick-slide { + float: right; +} +.bodywebsite .slick-slide img { + display: block; +} +.bodywebsite .slick-slide.slick-loading img { + display: none; +} +.bodywebsite .slick-slide.dragging img { + pointer-events: none; +} +.bodywebsite .slick-initialized .slick-slide { + display: block; +} +.bodywebsite .slick-loading .slick-slide { + visibility: hidden; +} +.bodywebsite .slick-vertical .slick-slide { + display: block; + height: auto; + border: 1px solid transparent; +} +.bodywebsite .slick-arrow.slick-hidden { + display: none; +} +.bodywebsite .slick-loading .slick-list { + background: #fff url("medias/image/ref; ?>/ajax-loading.gif") center center no-repeat; +} +.bodywebsite .slick-prev, +.bodywebsite .slick-next { + position: absolute; + display: block; + height: 20px; + width: 20px; + line-height: 0; + font-size: 0; + cursor: pointer; + background: rgba(0, 0, 0, 0.6); + color: transparent; + top: 50%; + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); + padding: 0; + border: none; + outline: none; + z-index: 999; +} +.bodywebsite .slick-prev:hover, +.bodywebsite .slick-prev:focus, +.bodywebsite .slick-next:hover, +.bodywebsite .slick-next:focus { + outline: none; + background: transparent; + color: transparent; +} +.bodywebsite .slick-prev:hover:before, +.bodywebsite .slick-prev:focus:before, +.bodywebsite .slick-next:hover:before, +.bodywebsite .slick-next:focus:before { + opacity: 1; +} +.bodywebsite .slick-prev.slick-disabled:before, +.bodywebsite .slick-next.slick-disabled:before { + opacity: 0.25; +} +.bodywebsite .slick-prev:before, +.bodywebsite .slick-next:before { + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-size: 20px; + line-height: 1; + color: white; + opacity: 0.75; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bodywebsite .slick-prev { + left: 0; +} +.bodywebsite [dir="rtl"] .slick-prev { + left: auto; + right: 0; +} +.bodywebsite .slick-prev:before { + content: "←"; +} +.bodywebsite [dir="rtl"] .slick-prev:before { + content: "→"; +} +.bodywebsite .slick-next { + right: 0; +} +.bodywebsite [dir="rtl"] .slick-next { + left: 0; + right: auto; +} +.bodywebsite .slick-next:before { + content: "→"; +} +.bodywebsite [dir="rtl"] .slick-next:before { + content: "←"; +} +.bodywebsite .slick-slider { + margin-top: 30px; +} +.bodywebsite .slick-slider *:focus { + outline: 0; +} +.bodywebsite .slick-dots { + display: block; + margin-top: 20px; + list-style: none; + width: 100%; + padding: 0; + text-align: center; + font-size: 0; + line-height: 0; + word-spacing: 0; +} +.bodywebsite .slick-dots li { + position: relative; + display: inline-block; + height: 20px; + width: 20px; + margin: 0 5px; + padding: 0; + cursor: pointer; +} +.bodywebsite .slick-dots li button { + background: none; + border: none; + display: inline-block; + padding: 0; + outline: none; + outline-offset: 0; + cursor: pointer; + -webkit-appearance: none; + width: 8px; + height: 8px; + border-radius: 100px; + background: #ababab; +} +.bodywebsite .slick-dots li button::-moz-focus-inner { + border: none; + padding: 0; +} +.bodywebsite .slick-dots li.slick-active button, +.bodywebsite .slick-dots li:hover button { + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .slick-dots-variant-1 .slick-dots li button { + height: 12px; + width: 12px; + background: rgba(58, 60, 62, 0.5); + transition: .33s all ease; + position: relative; +} +.bodywebsite .slick-dots-variant-1 .slick-dots li button:after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 19px; + height: 19px; + border: 4px solid #fff; + opacity: 0; + border-radius: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + transition: 180ms ease-in-out; +} +.bodywebsite .slick-dots-variant-1 .slick-dots li.slick-active button, +.bodywebsite .slick-dots-variant-1 .slick-dots li:hover button { + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .slick-dots-variant-1 .slick-dots li.slick-active button:after, +.bodywebsite .slick-dots-variant-1 .slick-dots li:hover button:after { + opacity: 1; + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); +} +.bodywebsite .slick-carousel-complex-variant-1 { + position: relative; + padding-bottom: 60px; +} +.bodywebsite .slick-carousel-complex-variant-1:after { + content: ''; + position: absolute; + top: 80px; + left: 50%; + bottom: 0; + transform: translateX(-50%); + width: 101vw; + background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .slick-carousel-complex-variant-1 > * { + position: relative; + z-index: 2; +} +.bodywebsite .slick-carousel-complex-variant-1 .slick-slider { + margin-bottom: 0; +} +.bodywebsite .slick-carousel-complex-variant-1 .slick-dots { + margin-top: 30px; +} +@media (min-width: 768px) { + .bodywebsite .slick-carousel-complex-variant-1 { + padding-bottom: 90px; + } +} +.bodywebsite .slick-slider-images .item { + padding: 0 15px; + text-align: right; +} +.bodywebsite .slick-slider-images .item img { + display: inline-block; + transform: scale(0.75); + transform-origin: 100% 50%; + will-change: transform; + cursor: pointer; + transition: .5s all ease; +} +.bodywebsite .slick-slider-images .item.slick-center { + text-align: center; +} +.bodywebsite .slick-slider-images .item.slick-center img { + transform-origin: 50% 50%; + transform: scale(1); +} +.bodywebsite .slick-slider-images .item.slick-center + * { + text-align: left; +} +.bodywebsite .slick-slider-images .item.slick-center + * img { + transform-origin: 0 50%; +} +.bodywebsite .slick-carousel-round-image .item img { + border-radius: 50%; +} +.bodywebsite .carousel-testimonials-home .slick-slide { + text-align: center; +} +.bodywebsite #sectiontestimonies.maincolorbackground { + background-image: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +@media (min-width: 576px) { + .bodywebsite .carousel-testimonials-home .slick-slide { + text-align: left; + } +} +.bodywebsite .carousel-testimonials-home .slick-dots li button { + background: rgba(246, 247, 250, 0.5); +} +.bodywebsite .carousel-testimonials-home .item { + padding-left: 10px; + padding-right: 10px; +} +@media (min-width: 1200px) { + .bodywebsite .carousel-testimonials-home .item { + padding-left: 0; + padding-right: 0; + } +} +@media (min-width: 576px) { + .bodywebsite .carousel-testimonials-home .slick-dots { + display: none !important; + } +} +.bodywebsite .carousel-testimonials-home .slick-images .item { + padding-left: 0; + padding-right: 0; +} +.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap { + text-align: center; + position: relative; + padding: 10px; +} +.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap:after { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(0); + content: ''; + display: inline-block; + margin-left: 0px; + border: 1px solid #fccb56; + width: 116px; + height: 116px; + border-radius: 50%; + transition: 200ms ease-in-out; + opacity: 0; + pointer-events: none; +} +.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap img { + display: inline-block; + border-radius: 50%; + cursor: pointer; +} +.bodywebsite .carousel-testimonials-home .slick-images .item:hover .imp-wrap:after, +.bodywebsite .carousel-testimonials-home .slick-images .item.slick-current .imp-wrap:after { + transform: translate(-50%, -50%) scale(1); + opacity: 1; +} +.bodywebsite .carousel-testimonials-home .quote-desc { + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} +.bodywebsite .websitemaincolor { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .maincolor { + color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .maincolorbis { + color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; +} +.bodywebsite .maincolorbackground { + background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; +} +.bodywebsite .maincolorbisbackground { + background-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; + border-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; +} +.bodywebsite .maincolorbisbackground:hover { + box-shadow: 1px 1px 8px #aaa; +} +.bodywebsite textarea:focus, +.bodywebsite button:focus { + border: unset !important; +} +.bodywebsite .marginrightonly { + margin-right: 10px !important; +} +.bodywebsite .inline-block { + display: inline-block; +} +.bodywebsite .valignmiddle { + vertical-align: middle; +} +.bodywebsite .center { + text-align: center; +} +.bodywebsite button.buttonwithnoborder.toggle-original.active { + display: none; +} +.bodywebsite .rd-navbar-nav-wrap.active .toggle-original span.icon.icon-xs.icon-dusty-gray.fa.fa-search { + display: none; +} +.bodywebsite ul.rd-navbar-list { + padding-top: 20px; +} +.bodywebsite .photouser:hover, +.bodywebsite .photouser:active { + border: 2px solid #eee; +} +.bodywebsite .imp-wrap { + display: inline-block; +} +.bodywebsite .imp-wrap img { + border-radius: 50px; +} +.bodywebsite .text-green { + color: #6ca; +} +.bodywebsite .plan-tile .plan-title { + padding: 20px 0 0; + font-size: 20px; + font-weight: bold; + text-align: center; +} +.bodywebsite .plan-tile .plan-tag { + color: #687484; + text-align: center; + font-size: 16px; + padding: 0 5px 10px; + font-weight: 300; + min-height: 70px; +} +.bodywebsite .plan-tile .plan-pricer .plan-price-title { + display: block; + text-align: center; + color: #8492A6; + font-style: italic; + position: absolute; + top: 30px; + transform: translateX(-50%); + -webkit-transform: translateX(-50%); + left: 50%; + font-size: 16px; + width: 100%; + font-weight: 300; +} +.bodywebsite .plan-tile .plan-feat { + display: block; + font-size: 14px; + color: #3C4858; + text-align: center; + padding: 22px 10px; + min-height: 90px; +} +.bodywebsite .plan-tile .plan-pricer .plan-price { + border-bottom: 1px solid #d5dadf; + border-top: 1px solid #d5dadf; + padding: 20px 0 20px; + display: block; +} +.bodywebsite .plan-tile .plan-pricer .plan-price > span { + color: #3C4858; + font-size: 32px; +} +.bodywebsite .plan-tile .plan-pricer .plan-price > span > sup { + font-size: 13px; + top: -0.9em; +} +.bodywebsite .plan-tile .plan-pricer { + padding: 5px 0; + text-align: center; + max-width: 90%; + position: relative; + margin: auto; +} +.bodywebsite .pricing-plan-slider .plan-tile .plan-btn { + position: absolute; + bottom: 0px; + left: 0; + width: 100%; +} +.bodywebsite .plan-tile .plan-btn { + text-align: center; + padding: 0 15px 15px 15px; +} +.bodywebsite .plan-features { + padding-top: 20px; + padding-bottom: 20px; + padding-left: 20px; + padding-right: 20px; +} +.bodywebsite .formcontact div { + margin: 2px; +} +.bodywebsite section#sectionfooterdolibarr { + padding-left: 3px; + padding-right: 3px; + padding-bottom: 10px; +} +.bodywebsite button.buttonwithnoborder.toggle-original { + font-family: "Font Awesome 5 Free"; + font-weight: 600; + font-size: initial; + /* If removed, the search icon is not visible */ +} +.bodywebsite .rd-navbar-fixed .buttonsearchwhenstatic { + display: none; +} +.bodywebsite input[type="text"] { + display: block; + width: 100%; + padding: 11px 35px; + font-size: 14px; + line-height: 1.25; + background-image: none; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +@media print { + .bodywebsite *, + .bodywebsite *::before, + .bodywebsite *::after { + text-shadow: none !important; + box-shadow: none !important; + } + .bodywebsite a, + .bodywebsite a:visited { + text-decoration: underline; + } + .bodywebsite abbr[title]::after { + content: " (" attr(title) ")"; + } + .bodywebsite pre { + white-space: pre-wrap !important; + } + .bodywebsite pre, + .bodywebsite blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + .bodywebsite thead { + display: table-header-group; + } + .bodywebsite tr, + .bodywebsite img { + page-break-inside: avoid; + } + .bodywebsite p, + .bodywebsite h2, + .bodywebsite h3 { + orphans: 3; + widows: 3; + } + .bodywebsite h2, + .bodywebsite h3 { + page-break-after: avoid; + } + .bodywebsite .navbar { + display: none; + } + .bodywebsite .badge { + border: 1px solid #000; + } + .bodywebsite .table { + border-collapse: collapse !important; + } + .bodywebsite .table td, + .bodywebsite .table th { + background-color: #fff !important; + } + .bodywebsite .table-bordered th, + .bodywebsite .table-bordered td { + border: 1px solid #ddd !important; + } +} +.bodywebsite *, +.bodywebsite *::before, +.bodywebsite *::after { + box-sizing: border-box; +} +html .bodywebsite { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +@-ms-viewport { + width: device-width; +} +.bodywebsite article, +.bodywebsite aside, +.bodywebsite dialog, +.bodywebsite figcaption, +.bodywebsite figure, +.bodywebsite footer, +.bodywebsite header, +.bodywebsite hgroup, +.bodywebsite main, +.bodywebsite nav, +.bodywebsite section { + display: block; +} +.bodywebsite { + margin: 0; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 1.71429; + text-align: left; + background-color: #fff; +} +.bodywebsite [tabindex="-1"]:focus { + outline: none !important; +} +.bodywebsite hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} +.bodywebsite abbr[title], +.bodywebsite abbr[data-original-title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} +.bodywebsite address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} +.bodywebsite ol, +.bodywebsite ul, +.bodywebsite dl { + margin-top: 0; +} +.bodywebsite ol ol, +.bodywebsite ul ul, +.bodywebsite ol ul, +.bodywebsite ul ol { + margin-bottom: 0; +} +.bodywebsite dt { + font-weight: inherit; +} +.bodywebsite dd { + margin-bottom: .5rem; + margin-left: 0; +} +.bodywebsite blockquote { + margin: 0 0 1rem; +} +.bodywebsite dfn { + font-style: italic; +} +.bodywebsite b, +.bodywebsite strong { + font-weight: bolder; +} +.bodywebsite small { + font-size: 80%; +} +.bodywebsite sub, +.bodywebsite sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +.bodywebsite sub { + bottom: -0.25em; +} +.bodywebsite sup { + top: -0.5em; +} +.bodywebsite a { + text-decoration: none; + -webkit-text-decoration-skip: objects; +} +.bodywebsite a:hover { + text-decoration: none; +} +.bodywebsite a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} +.bodywebsite a:not([href]):not([tabindex]):focus, +.bodywebsite a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} +.bodywebsite a:not([href]):not([tabindex]):focus { + outline: 0; +} +.bodywebsite pre, +.bodywebsite code, +.bodywebsite kbd, +.bodywebsite samp { + font-family: monospace, monospace; + font-size: 1em; +} +.bodywebsite pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} +.bodywebsite figure { + margin: 0 0 1rem; +} +.bodywebsite img { + vertical-align: middle; + border-style: none; +} +.bodywebsite svg:not(:root) { + overflow: hidden; +} +.bodywebsite a, +.bodywebsite area, +.bodywebsite button, +.bodywebsite [role="button"], +.bodywebsite input:not([type="range"]), +.bodywebsite label, +.bodywebsite select, +.bodywebsite summary, +.bodywebsite textarea { + touch-action: manipulation; +} +.bodywebsite table { + border-collapse: collapse; +} +.bodywebsite caption { + padding-top: 17px 25px 18px; + padding-bottom: 17px 25px 18px; + color: #dedede; + text-align: left; + caption-side: bottom; +} +.bodywebsite th { + text-align: inherit; +} +.bodywebsite label { + display: inline-block; + margin-bottom: .5rem; +} +.bodywebsite button { + border-radius: 0; +} +.bodywebsite button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} +.bodywebsite input, +.bodywebsite button, +.bodywebsite select, +.bodywebsite optgroup, +.bodywebsite textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +.bodywebsite button, +.bodywebsite input { + overflow: visible; +} +.bodywebsite button, +.bodywebsite select { + text-transform: none; +} +.bodywebsite button, +html .bodywebsite [type="button"], +.bodywebsite [type="reset"], +.bodywebsite [type="submit"] { + -webkit-appearance: button; +} +.bodywebsite button::-moz-focus-inner, +.bodywebsite [type="button"]::-moz-focus-inner, +.bodywebsite [type="reset"]::-moz-focus-inner, +.bodywebsite [type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} +.bodywebsite input[type="radio"], +.bodywebsite input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} +.bodywebsite input[type="date"], +.bodywebsite input[type="time"], +.bodywebsite input[type="datetime-local"], +.bodywebsite input[type="month"] { + -webkit-appearance: listbox; +} +.bodywebsite textarea { + overflow: auto; + resize: vertical; +} +.bodywebsite fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +.bodywebsite legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} +.bodywebsite progress { + vertical-align: baseline; +} +.bodywebsite [type="number"]::-webkit-inner-spin-button, +.bodywebsite [type="number"]::-webkit-outer-spin-button { + height: auto; +} +.bodywebsite [type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} +.bodywebsite [type="search"]::-webkit-search-cancel-button, +.bodywebsite [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +.bodywebsite ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} +.bodywebsite output { + display: inline-block; +} +.bodywebsite summary { + display: list-item; +} +.bodywebsite template { + display: none; +} +.bodywebsite [hidden] { + display: none !important; +} +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6, +.bodywebsite .h1, +.bodywebsite .h2, +.bodywebsite .h3, +.bodywebsite .h4, +.bodywebsite .h5, +.bodywebsite .h6 { + margin-bottom: 0.5rem; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-weight: 700; + line-height: 1.1; + color: #000; +} +.bodywebsite h1, +.bodywebsite .h1 { + font-size: 45px; +} +.bodywebsite h2, +.bodywebsite .h2 { + font-size: 24px; +} +.bodywebsite h3, +.bodywebsite .h3 { + font-size: 33px; +} +.bodywebsite h4, +.bodywebsite .h4 { + font-size: 18px; +} +.bodywebsite .lead { + font-size: 24px; + font-weight: 300; +} +.bodywebsite hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid #2a2b2b; +} +.bodywebsite small, +.bodywebsite .small { + font-size: 80%; + font-weight: 400; +} +.bodywebsite mark, +.bodywebsite .mark { + padding: 5px 10px; + background-color: #37c386; +} +.bodywebsite .list-unstyled { + padding-left: 0; + list-style: none; +} +.bodywebsite .list-inline { + padding-left: 0; + list-style: none; +} +.bodywebsite .list-inline-item { + display: inline-block; +} +.bodywebsite .list-inline-item:not(:last-child) { + margin-right: 5px; +} +.bodywebsite .initialism { + font-size: 90%; + text-transform: uppercase; +} +.bodywebsite .blockquote { + margin-bottom: 1rem; + font-size: 17.5px; +} +.bodywebsite .blockquote-footer { + display: block; + font-size: 80%; + color: #dedede; +} +.bodywebsite .blockquote-footer::before { + content: "\2014 \00A0"; +} +.bodywebsite .img-fluid { + max-width: 100%; + height: auto; +} +.bodywebsite code, +.bodywebsite kbd, +.bodywebsite pre, +.bodywebsite samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +.bodywebsite code { + padding: 10px 5px; + font-size: 90%; + color: #00030a; + background-color: #edeff4; + border-radius: 0; +} +.bodywebsite a > code { + padding: 0; + color: inherit; + background-color: inherit; +} +.bodywebsite kbd { + padding: 10px 5px; + font-size: 90%; + color: #fff; + background-color: #212529; + border-radius: 3px; + box-shadow: inset 0 -0.1rem 0 rgba(0, 0, 0, 0.25); +} +.bodywebsite kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + box-shadow: none; +} +.bodywebsite pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #212529; +} +.bodywebsite pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} +.bodywebsite .pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.bodywebsite .container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 576px) { + .bodywebsite .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .bodywebsite .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .bodywebsite .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .bodywebsite .container { + max-width: 1170px; + } +} +.bodywebsite .container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.bodywebsite .row { + display: flex; + flex-wrap: wrap; + /*margin-right: -15px; + margin-left: -15px; */ +} +.bodywebsite .no-gutters { + margin-right: 0; + margin-left: 0; +} +.bodywebsite .no-gutters > .col, +.bodywebsite .no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} +.bodywebsite .col-1, +.bodywebsite .col-2, +.bodywebsite .col-3, +.bodywebsite .col-4, +.bodywebsite .col-5, +.bodywebsite .col-6, +.bodywebsite .col-7, +.bodywebsite .col-8, +.bodywebsite .col-9, +.bodywebsite .col-10, +.bodywebsite .col-11, +.bodywebsite .col-12, +.bodywebsite .col, +.bodywebsite .col-auto, +.bodywebsite .col-sm-1, +.bodywebsite .col-sm-2, +.bodywebsite .col-sm-3, +.bodywebsite .col-sm-4, +.bodywebsite .col-sm-5, +.bodywebsite .col-sm-6, +.bodywebsite .col-sm-7, +.bodywebsite .col-sm-8, +.bodywebsite .col-sm-9, +.bodywebsite .col-sm-10, +.bodywebsite .col-sm-11, +.bodywebsite .col-sm-12, +.bodywebsite .col-sm, +.bodywebsite .col-sm-auto, +.bodywebsite .col-md-1, +.bodywebsite .col-md-2, +.bodywebsite .col-md-3, +.bodywebsite .col-md-4, +.bodywebsite .col-md-5, +.bodywebsite .col-md-6, +.bodywebsite .col-md-7, +.bodywebsite .col-md-8, +.bodywebsite .col-md-9, +.bodywebsite .col-md-10, +.bodywebsite .col-md-11, +.bodywebsite .col-md-12, +.bodywebsite .col-md, +.bodywebsite .col-md-auto, +.bodywebsite .col-lg-1, +.bodywebsite .col-lg-2, +.bodywebsite .col-lg-3, +.bodywebsite .col-lg-4, +.bodywebsite .col-lg-5, +.bodywebsite .col-lg-6, +.bodywebsite .col-lg-7, +.bodywebsite .col-lg-8, +.bodywebsite .col-lg-9, +.bodywebsite .col-lg-10, +.bodywebsite .col-lg-11, +.bodywebsite .col-lg-12, +.bodywebsite .col-lg, +.bodywebsite .col-lg-auto, +.bodywebsite .col-xl-1, +.bodywebsite .col-xl-2, +.bodywebsite .col-xl-3, +.bodywebsite .col-xl-4, +.bodywebsite .col-xl-5, +.bodywebsite .col-xl-6, +.bodywebsite .col-xl-7, +.bodywebsite .col-xl-8, +.bodywebsite .col-xl-9, +.bodywebsite .col-xl-10, +.bodywebsite .col-xl-11, +.bodywebsite .col-xl-12, +.bodywebsite .col-xl, +.bodywebsite .col-xl-auto, +.bodywebsite .col-xxl-1, +.bodywebsite .col-xxl-2, +.bodywebsite .col-xxl-3, +.bodywebsite .col-xxl-4, +.bodywebsite .col-xxl-5, +.bodywebsite .col-xxl-6, +.bodywebsite .col-xxl-7, +.bodywebsite .col-xxl-8, +.bodywebsite .col-xxl-9, +.bodywebsite .col-xxl-10, +.bodywebsite .col-xxl-11, +.bodywebsite .col-xxl-12, +.bodywebsite .col-xxl, +.bodywebsite .col-xxl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px +} +.bodywebsite .col { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} +.bodywebsite .col-auto { + flex: 0 0 auto; + width: auto; + max-width: none; +} +.bodywebsite .col-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; +} +.bodywebsite .col-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} +.bodywebsite .col-3 { + flex: 0 0 25%; + max-width: 25%; +} +.bodywebsite .col-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} +.bodywebsite .col-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; +} +.bodywebsite .col-6 { + flex: 0 0 50%; + max-width: 50%; +} +.bodywebsite .col-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; +} +.bodywebsite .col-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; +} +.bodywebsite .col-9 { + flex: 0 0 75%; + max-width: 75%; +} +.bodywebsite .col-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; +} +.bodywebsite .col-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; +} +.bodywebsite .col-12 { + flex: 0 0 100%; + max-width: 100%; +} +.bodywebsite .order-first { + order: -1; +} +.bodywebsite .order-1 { + order: 1; +} +.bodywebsite .order-2 { + order: 2; +} +.bodywebsite .order-3 { + order: 3; +} +.bodywebsite .order-4 { + order: 4; +} +.bodywebsite .order-5 { + order: 5; +} +.bodywebsite .order-6 { + order: 6; +} +.bodywebsite .order-7 { + order: 7; +} +.bodywebsite .order-8 { + order: 8; +} +.bodywebsite .order-9 { + order: 9; +} +.bodywebsite .order-10 { + order: 10; +} +.bodywebsite .order-11 { + order: 11; +} +.bodywebsite .order-12 { + order: 12; +} +.bodywebsite .offset-1 { + margin-left: 8.33333%; +} +.bodywebsite .offset-2 { + margin-left: 16.66667%; +} +.bodywebsite .offset-3 { + margin-left: 25%; +} +.bodywebsite .offset-4 { + margin-left: 33.33333%; +} +.bodywebsite .offset-5 { + margin-left: 41.66667%; +} +.bodywebsite .offset-6 { + margin-left: 50%; +} +.bodywebsite .offset-7 { + margin-left: 58.33333%; +} +.bodywebsite .offset-8 { + margin-left: 66.66667%; +} +.bodywebsite .offset-9 { + margin-left: 75%; +} +.bodywebsite .offset-10 { + margin-left: 83.33333%; +} +.bodywebsite .offset-11 { + margin-left: 91.66667%; +} +@media (min-width: 576px) { + .bodywebsite .col-sm { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .bodywebsite .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + .bodywebsite .col-sm-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .bodywebsite .col-sm-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .bodywebsite .col-sm-3 { + flex: 0 0 25%; + max-width: 25%; + } + .bodywebsite .col-sm-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .bodywebsite .col-sm-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .bodywebsite .col-sm-6 { + flex: 0 0 50%; + max-width: 50%; + } + .bodywebsite .col-sm-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .bodywebsite .col-sm-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .col-sm-9 { + flex: 0 0 75%; + max-width: 75%; + } + .bodywebsite .col-sm-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .bodywebsite .col-sm-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .bodywebsite .col-sm-12 { + flex: 0 0 100%; + max-width: 100%; + } + .bodywebsite .order-sm-first { + order: -1; + } + .bodywebsite .order-sm-1 { + order: 1; + } + .bodywebsite .order-sm-2 { + order: 2; + } + .bodywebsite .order-sm-3 { + order: 3; + } + .bodywebsite .order-sm-4 { + order: 4; + } + .bodywebsite .order-sm-5 { + order: 5; + } + .bodywebsite .order-sm-6 { + order: 6; + } + .bodywebsite .order-sm-7 { + order: 7; + } + .bodywebsite .order-sm-8 { + order: 8; + } + .bodywebsite .order-sm-9 { + order: 9; + } + .bodywebsite .order-sm-10 { + order: 10; + } + .bodywebsite .order-sm-11 { + order: 11; + } + .bodywebsite .order-sm-12 { + order: 12; + } + .bodywebsite .offset-sm-0 { + margin-left: 0; + } + .bodywebsite .offset-sm-1 { + margin-left: 8.33333%; + } + .bodywebsite .offset-sm-2 { + margin-left: 16.66667%; + } + .bodywebsite .offset-sm-3 { + margin-left: 25%; + } + .bodywebsite .offset-sm-4 { + margin-left: 33.33333%; + } + .bodywebsite .offset-sm-5 { + margin-left: 41.66667%; + } + .bodywebsite .offset-sm-6 { + margin-left: 50%; + } + .bodywebsite .offset-sm-7 { + margin-left: 58.33333%; + } + .bodywebsite .offset-sm-8 { + margin-left: 66.66667%; + } + .bodywebsite .offset-sm-9 { + margin-left: 75%; + } + .bodywebsite .offset-sm-10 { + margin-left: 83.33333%; + } + .bodywebsite .offset-sm-11 { + margin-left: 91.66667%; + } +} +@media (min-width: 768px) { + .bodywebsite .col-md { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .bodywebsite .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + .bodywebsite .col-md-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .bodywebsite .col-md-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .bodywebsite .col-md-3 { + flex: 0 0 25%; + max-width: 25%; + } + .bodywebsite .col-md-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .bodywebsite .col-md-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .bodywebsite .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } + .bodywebsite .col-md-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .bodywebsite .col-md-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .col-md-9 { + flex: 0 0 75%; + max-width: 75%; + } + .bodywebsite .col-md-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .bodywebsite .col-md-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .bodywebsite .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + } + .bodywebsite .order-md-first { + order: -1; + } + .bodywebsite .order-md-1 { + order: 1; + } + .bodywebsite .order-md-2 { + order: 2; + } + .bodywebsite .order-md-3 { + order: 3; + } + .bodywebsite .order-md-4 { + order: 4; + } + .bodywebsite .order-md-5 { + order: 5; + } + .bodywebsite .order-md-6 { + order: 6; + } + .bodywebsite .order-md-7 { + order: 7; + } + .bodywebsite .order-md-8 { + order: 8; + } + .bodywebsite .order-md-9 { + order: 9; + } + .bodywebsite .order-md-10 { + order: 10; + } + .bodywebsite .order-md-11 { + order: 11; + } + .bodywebsite .order-md-12 { + order: 12; + } + .bodywebsite .offset-md-0 { + margin-left: 0; + } + .bodywebsite .offset-md-1 { + margin-left: 8.33333%; + } + .bodywebsite .offset-md-2 { + margin-left: 16.66667%; + } + .bodywebsite .offset-md-3 { + margin-left: 25%; + } + .bodywebsite .offset-md-4 { + margin-left: 33.33333%; + } + .bodywebsite .offset-md-5 { + margin-left: 41.66667%; + } + .bodywebsite .offset-md-6 { + margin-left: 50%; + } + .bodywebsite .offset-md-7 { + margin-left: 58.33333%; + } + .bodywebsite .offset-md-8 { + margin-left: 66.66667%; + } + .bodywebsite .offset-md-9 { + margin-left: 75%; + } + .bodywebsite .offset-md-10 { + margin-left: 83.33333%; + } + .bodywebsite .offset-md-11 { + margin-left: 91.66667%; + } +} +@media (min-width: 992px) { + .bodywebsite .col-lg { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .bodywebsite .col-lg-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + .bodywebsite .col-lg-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .bodywebsite .col-lg-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .bodywebsite .col-lg-3 { + flex: 0 0 25%; + max-width: 25%; + } + .bodywebsite .col-lg-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .bodywebsite .col-lg-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .bodywebsite .col-lg-6 { + flex: 0 0 50%; + max-width: 50%; + } + .bodywebsite .col-lg-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .bodywebsite .col-lg-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .col-lg-9 { + flex: 0 0 75%; + max-width: 75%; + } + .bodywebsite .col-lg-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .bodywebsite .col-lg-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .bodywebsite .col-lg-12 { + flex: 0 0 100%; + max-width: 100%; + } + .bodywebsite .order-lg-first { + order: -1; + } + .bodywebsite .order-lg-1 { + order: 1; + } + .bodywebsite .order-lg-2 { + order: 2; + } + .bodywebsite .order-lg-3 { + order: 3; + } + .bodywebsite .order-lg-4 { + order: 4; + } + .bodywebsite .order-lg-5 { + order: 5; + } + .bodywebsite .order-lg-6 { + order: 6; + } + .bodywebsite .order-lg-7 { + order: 7; + } + .bodywebsite .order-lg-8 { + order: 8; + } + .bodywebsite .order-lg-9 { + order: 9; + } + .bodywebsite .order-lg-10 { + order: 10; + } + .bodywebsite .order-lg-11 { + order: 11; + } + .bodywebsite .order-lg-12 { + order: 12; + } + .bodywebsite .offset-lg-0 { + margin-left: 0; + } + .bodywebsite .offset-lg-1 { + margin-left: 8.33333%; + } + .bodywebsite .offset-lg-2 { + margin-left: 16.66667%; + } + .bodywebsite .offset-lg-3 { + margin-left: 25%; + } + .bodywebsite .offset-lg-4 { + margin-left: 33.33333%; + } + .bodywebsite .offset-lg-5 { + margin-left: 41.66667%; + } + .bodywebsite .offset-lg-6 { + margin-left: 50%; + } + .bodywebsite .offset-lg-7 { + margin-left: 58.33333%; + } + .bodywebsite .offset-lg-8 { + margin-left: 66.66667%; + } + .bodywebsite .offset-lg-9 { + margin-left: 75%; + } + .bodywebsite .offset-lg-10 { + margin-left: 83.33333%; + } + .bodywebsite .offset-lg-11 { + margin-left: 91.66667%; + } +} +@media (min-width: 1200px) { + .bodywebsite .col-xl { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .bodywebsite .col-xl-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + .bodywebsite .col-xl-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .bodywebsite .col-xl-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .bodywebsite .col-xl-3 { + flex: 0 0 25%; + max-width: 25%; + } + .bodywebsite .col-xl-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .bodywebsite .col-xl-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .bodywebsite .col-xl-6 { + flex: 0 0 50%; + max-width: 50%; + } + .bodywebsite .col-xl-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .bodywebsite .col-xl-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .col-xl-9 { + flex: 0 0 75%; + max-width: 75%; + } + .bodywebsite .col-xl-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .bodywebsite .col-xl-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .bodywebsite .col-xl-12 { + flex: 0 0 100%; + max-width: 100%; + } + .bodywebsite .order-xl-first { + order: -1; + } + .bodywebsite .order-xl-1 { + order: 1; + } + .bodywebsite .order-xl-2 { + order: 2; + } + .bodywebsite .order-xl-3 { + order: 3; + } + .bodywebsite .order-xl-4 { + order: 4; + } + .bodywebsite .order-xl-5 { + order: 5; + } + .bodywebsite .order-xl-6 { + order: 6; + } + .bodywebsite .order-xl-7 { + order: 7; + } + .bodywebsite .order-xl-8 { + order: 8; + } + .bodywebsite .order-xl-9 { + order: 9; + } + .bodywebsite .order-xl-10 { + order: 10; + } + .bodywebsite .order-xl-11 { + order: 11; + } + .bodywebsite .order-xl-12 { + order: 12; + } + .bodywebsite .offset-xl-0 { + margin-left: 0; + } + .bodywebsite .offset-xl-1 { + margin-left: 8.33333%; + } + .bodywebsite .offset-xl-2 { + margin-left: 16.66667%; + } + .bodywebsite .offset-xl-3 { + margin-left: 25%; + } + .bodywebsite .offset-xl-4 { + margin-left: 33.33333%; + } + .bodywebsite .offset-xl-5 { + margin-left: 41.66667%; + } + .bodywebsite .offset-xl-6 { + margin-left: 50%; + } + .bodywebsite .offset-xl-7 { + margin-left: 58.33333%; + } + .bodywebsite .offset-xl-8 { + margin-left: 66.66667%; + } + .bodywebsite .offset-xl-9 { + margin-left: 75%; + } + .bodywebsite .offset-xl-10 { + margin-left: 83.33333%; + } + .bodywebsite .offset-xl-11 { + margin-left: 91.66667%; + } +} +@media (min-width: 1800px) { + .bodywebsite .col-xxl { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .bodywebsite .col-xxl-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + .bodywebsite .col-xxl-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .bodywebsite .col-xxl-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .bodywebsite .col-xxl-3 { + flex: 0 0 25%; + max-width: 25%; + } + .bodywebsite .col-xxl-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .bodywebsite .col-xxl-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .bodywebsite .col-xxl-6 { + flex: 0 0 50%; + max-width: 50%; + } + .bodywebsite .col-xxl-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .bodywebsite .col-xxl-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .bodywebsite .col-xxl-9 { + flex: 0 0 75%; + max-width: 75%; + } + .bodywebsite .col-xxl-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .bodywebsite .col-xxl-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .bodywebsite .col-xxl-12 { + flex: 0 0 100%; + max-width: 100%; + } + .bodywebsite .order-xxl-first { + order: -1; + } + .bodywebsite .order-xxl-1 { + order: 1; + } + .bodywebsite .order-xxl-2 { + order: 2; + } + .bodywebsite .order-xxl-3 { + order: 3; + } + .bodywebsite .order-xxl-4 { + order: 4; + } + .bodywebsite .order-xxl-5 { + order: 5; + } + .bodywebsite .order-xxl-6 { + order: 6; + } + .bodywebsite .order-xxl-7 { + order: 7; + } + .bodywebsite .order-xxl-8 { + order: 8; + } + .bodywebsite .order-xxl-9 { + order: 9; + } + .bodywebsite .order-xxl-10 { + order: 10; + } + .bodywebsite .order-xxl-11 { + order: 11; + } + .bodywebsite .order-xxl-12 { + order: 12; + } + .bodywebsite .offset-xxl-0 { + margin-left: 0; + } + .bodywebsite .offset-xxl-1 { + margin-left: 8.33333%; + } + .bodywebsite .offset-xxl-2 { + margin-left: 16.66667%; + } + .bodywebsite .offset-xxl-3 { + margin-left: 25%; + } + .bodywebsite .offset-xxl-4 { + margin-left: 33.33333%; + } + .bodywebsite .offset-xxl-5 { + margin-left: 41.66667%; + } + .bodywebsite .offset-xxl-6 { + margin-left: 50%; + } + .bodywebsite .offset-xxl-7 { + margin-left: 58.33333%; + } + .bodywebsite .offset-xxl-8 { + margin-left: 66.66667%; + } + .bodywebsite .offset-xxl-9 { + margin-left: 75%; + } + .bodywebsite .offset-xxl-10 { + margin-left: 83.33333%; + } + .bodywebsite .offset-xxl-11 { + margin-left: 91.66667%; + } +} +.bodywebsite .table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent; +} +.bodywebsite .table th, +.bodywebsite .table td { + padding: 17px 25px 18px; + vertical-align: top; + border-top: 1px solid #d9d9d9; +} +.bodywebsite .table thead th { + vertical-align: bottom; + border-bottom: 2px solid #d9d9d9; +} +.bodywebsite .table tbody + tbody { + border-top: 2px solid #d9d9d9; +} +.bodywebsite .table .table { + background-color: #fff; +} +.bodywebsite .table-sm th, +.bodywebsite .table-sm td { + padding: 0.3rem; +} +.bodywebsite .table-bordered { + border: 1px solid #d9d9d9; +} +.bodywebsite .table-bordered th, +.bodywebsite .table-bordered td { + border: 1px solid #d9d9d9; +} +.bodywebsite .table-bordered thead th, +.bodywebsite .table-bordered thead td { + border-bottom-width: 2px; +} +.bodywebsite .table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} +.bodywebsite .table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} +.bodywebsite .table-primary, +.bodywebsite .table-primary > th, +.bodywebsite .table-primary > td { + background-color: #b8daff; +} +.bodywebsite .table-hover .table-primary:hover { + background-color: #9fcdff; +} +.bodywebsite .table-hover .table-primary:hover > td, +.bodywebsite .table-hover .table-primary:hover > th { + background-color: #9fcdff; +} +.bodywebsite .table-secondary, +.bodywebsite .table-secondary > th, +.bodywebsite .table-secondary > td { + background-color: #dddfe2; +} +.bodywebsite .table-hover .table-secondary:hover { + background-color: #cfd2d6; +} +.bodywebsite .table-hover .table-secondary:hover > td, +.bodywebsite .table-hover .table-secondary:hover > th { + background-color: #cfd2d6; +} +.bodywebsite .table-success, +.bodywebsite .table-success > th, +.bodywebsite .table-success > td { + background-color: #c3e6cb; +} +.bodywebsite .table-hover .table-success:hover { + background-color: #b1dfbb; +} +.bodywebsite .table-hover .table-success:hover > td, +.bodywebsite .table-hover .table-success:hover > th { + background-color: #b1dfbb; +} +.bodywebsite .table-info, +.bodywebsite .table-info > th, +.bodywebsite .table-info > td { + background-color: #bee5eb; +} +.bodywebsite .table-hover .table-info:hover { + background-color: #abdde5; +} +.bodywebsite .table-hover .table-info:hover > td, +.bodywebsite .table-hover .table-info:hover > th { + background-color: #abdde5; +} +.bodywebsite .table-warning, +.bodywebsite .table-warning > th, +.bodywebsite .table-warning > td { + background-color: #ffeeba; +} +.bodywebsite .table-hover .table-warning:hover { + background-color: #ffe8a1; +} +.bodywebsite .table-hover .table-warning:hover > td, +.bodywebsite .table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} +.bodywebsite .table-danger, +.bodywebsite .table-danger > th, +.bodywebsite .table-danger > td { + background-color: #f5c6cb; +} +.bodywebsite .table-hover .table-danger:hover { + background-color: #f1b0b7; +} +.bodywebsite .table-hover .table-danger:hover > td, +.bodywebsite .table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} +.bodywebsite .table-light, +.bodywebsite .table-light > th, +.bodywebsite .table-light > td { + background-color: #fdfdfe; +} +.bodywebsite .table-hover .table-light:hover { + background-color: #ececf6; +} +.bodywebsite .table-hover .table-light:hover > td, +.bodywebsite .table-hover .table-light:hover > th { + background-color: #ececf6; +} +.bodywebsite .table-dark, +.bodywebsite .table-dark > th, +.bodywebsite .table-dark > td { + background-color: #c6c8ca; +} +.bodywebsite .table-hover .table-dark:hover { + background-color: #b9bbbe; +} +.bodywebsite .table-hover .table-dark:hover > td, +.bodywebsite .table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} +.bodywebsite .table-active, +.bodywebsite .table-active > th, +.bodywebsite .table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} +.bodywebsite .table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} +.bodywebsite .table-hover .table-active:hover > td, +.bodywebsite .table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} +.bodywebsite .table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; +} +.bodywebsite .table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #d9d9d9; +} +.bodywebsite .table-dark { + color: #fff; + background-color: #212529; +} +.bodywebsite .table-dark th, +.bodywebsite .table-dark td, +.bodywebsite .table-dark thead th { + border-color: #32383e; +} +.bodywebsite .table-dark.table-bordered { + border: 0; +} +.bodywebsite .table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} +.bodywebsite .table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); +} +@media (max-width: 575px) { + .bodywebsite .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .bodywebsite .table-responsive-sm.table-bordered { + border: 0; + } +} +@media (max-width: 767px) { + .bodywebsite .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .bodywebsite .table-responsive-md.table-bordered { + border: 0; + } +} +@media (max-width: 991px) { + .bodywebsite .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .bodywebsite .table-responsive-lg.table-bordered { + border: 0; + } +} +@media (max-width: 1199px) { + .bodywebsite .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .bodywebsite .table-responsive-xl.table-bordered { + border: 0; + } +} +@media (max-width: 1799px) { + .bodywebsite .table-responsive-xxl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .bodywebsite .table-responsive-xxl.table-bordered { + border: 0; + } +} +.bodywebsite .table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; +} +.bodywebsite .table-responsive.table-bordered { + border: 0; +} +.bodywebsite .form-input { + display: block; + width: 100%; + padding: 11px 35px; + font-size: 14px; + line-height: 1.25; + background-image: none; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +.bodywebsite .form-input::-ms-expand { + background-color: transparent; + border: 0; +} +.bodywebsite .form-input:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: none; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.bodywebsite .form-input::placeholder { + color: #868e96; + opacity: 1; +} +.bodywebsite .form-input:disabled, +.bodywebsite .form-input[readonly] { + background-color: #e9ecef; + opacity: 1; +} +.bodywebsite select.form-input:not([size]):not([multiple]) { + height: calc(4.25rem); +} +.bodywebsite .form-input-file, +.bodywebsite .form-input-range { + display: block; +} +.bodywebsite .col-form-label { + padding-top: calc(12px); + padding-bottom: calc(12px); + margin-bottom: 0; + line-height: 1.25; +} +.bodywebsite .col-form-label-lg { + padding-top: calc(13px); + padding-bottom: calc(13px); + font-size: 18px; + line-height: 1.5; +} +.bodywebsite .col-form-label-sm { + padding-top: calc(6px); + padding-bottom: calc(6px); + font-size: 12px; + line-height: 1.5; +} +.bodywebsite .col-form-legend { + padding-top: 11px; + padding-bottom: 11px; + margin-bottom: 0; + font-size: 14px; +} +.bodywebsite .form-input-plaintext { + padding-top: 11px; + padding-bottom: 11px; + margin-bottom: 0; + line-height: 1.25; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.bodywebsite .form-input-plaintext.form-input-sm, +.bodywebsite .input-group-sm > .form-input-plaintext.form-input, +.bodywebsite .input-group-sm > .form-input-plaintext.input-group-addon, +.bodywebsite .input-group-sm > .input-group-btn > .form-input-plaintext.btn, +.bodywebsite .form-input-plaintext.form-input-lg, +.bodywebsite .input-group-lg > .form-input-plaintext.form-input, +.bodywebsite .input-group-lg > .form-input-plaintext.input-group-addon, +.bodywebsite .input-group-lg > .input-group-btn > .form-input-plaintext.btn { + padding-right: 0; + padding-left: 0; +} +.bodywebsite .form-input-sm, +.bodywebsite .input-group-sm > .form-input, +.bodywebsite .input-group-sm > .input-group-addon, +.bodywebsite .input-group-sm > .input-group-btn > .btn { + padding: 5px 25px; + font-size: 12px; + line-height: 1.5; + border-radius: 0.2rem; +} +.bodywebsite select.form-input-sm:not([size]):not([multiple]), +.bodywebsite .input-group-sm > select.form-input:not([size]):not([multiple]), +.bodywebsite .input-group-sm > select.input-group-addon:not([size]):not([multiple]), +.bodywebsite .input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: calc(3.8125rem); +} +.bodywebsite .form-input-lg, +.bodywebsite .input-group-lg > .form-input, +.bodywebsite .input-group-lg > .input-group-addon, +.bodywebsite .input-group-lg > .input-group-btn > .btn { + padding: 12px 50px; + font-size: 18px; + line-height: 1.5; + border-radius: 0.3rem; +} +.bodywebsite select.form-input-lg:not([size]):not([multiple]), +.bodywebsite .input-group-lg > select.form-input:not([size]):not([multiple]), +.bodywebsite .input-group-lg > select.input-group-addon:not([size]):not([multiple]), +.bodywebsite .input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: calc(4.875rem); +} +.bodywebsite .form-label { + margin-bottom: 1rem; +} +.bodywebsite .form-text { + display: block; + margin-top: 0.25rem; +} +.bodywebsite .form-row { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} +.bodywebsite .form-row > .col, +.bodywebsite .form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} +.bodywebsite .form-check { + position: relative; + display: block; + margin-bottom: 0.5rem; +} +.bodywebsite .form-check.disabled .form-check-label { + color: #dedede; +} +.bodywebsite .form-check-label { + padding-left: 1.25rem; + margin-bottom: 0; +} +.bodywebsite .form-check-input { + position: absolute; + margin-top: 0.25rem; + margin-left: -1.25rem; +} +.bodywebsite .form-check-inline { + display: inline-block; + margin-right: 0.75rem; +} +.bodywebsite .form-check-inline .form-check-label { + vertical-align: middle; +} +.bodywebsite .was-validated .form-input:valid, +.bodywebsite .form-input.is-valid, +.bodywebsite .was-validated .custom-select:valid, +.bodywebsite .custom-select.is-valid { + border-color: #98bf44; +} +.bodywebsite .was-validated .form-input:valid:focus, +.bodywebsite .form-input.is-valid:focus, +.bodywebsite .was-validated .custom-select:valid:focus, +.bodywebsite .custom-select.is-valid:focus { + box-shadow: 0 0 0 0.2rem rgba(152, 191, 68, 0.25); +} +.bodywebsite .was-validated .form-check-input:valid + .form-check-label, +.bodywebsite .form-check-input.is-valid + .form-check-label { + color: #98bf44; +} +.bodywebsite .was-validated .custom-control-input:valid ~ .custom-control-indicator, +.bodywebsite .custom-control-input.is-valid ~ .custom-control-indicator { + background-color: rgba(152, 191, 68, 0.25); +} +.bodywebsite .was-validated .custom-control-input:valid ~ .custom-control-description, +.bodywebsite .custom-control-input.is-valid ~ .custom-control-description { + color: #98bf44; +} +.bodywebsite .was-validated .custom-file-input:valid ~ .custom-file-control, +.bodywebsite .custom-file-input.is-valid ~ .custom-file-control { + border-color: #98bf44; +} +.bodywebsite .was-validated .custom-file-input:valid ~ .custom-file-control::before, +.bodywebsite .custom-file-input.is-valid ~ .custom-file-control::before { + border-color: inherit; +} +.bodywebsite .was-validated .custom-file-input:valid:focus, +.bodywebsite .custom-file-input.is-valid:focus { + box-shadow: 0 0 0 0.2rem rgba(152, 191, 68, 0.25); +} +.bodywebsite .was-validated .form-input:invalid, +.bodywebsite .form-input.is-invalid, +.bodywebsite .was-validated .custom-select:invalid, +.bodywebsite .custom-select.is-invalid { + border-color: #f5543f; +} +.bodywebsite .was-validated .form-input:invalid:focus, +.bodywebsite .form-input.is-invalid:focus, +.bodywebsite .was-validated .custom-select:invalid:focus, +.bodywebsite .custom-select.is-invalid:focus { + box-shadow: 0 0 0 0.2rem rgba(245, 84, 63, 0.25); +} +.bodywebsite .was-validated .form-check-input:invalid + .form-check-label, +.bodywebsite .form-check-input.is-invalid + .form-check-label { + color: #f5543f; +} +.bodywebsite .was-validated .custom-control-input:invalid ~ .custom-control-indicator, +.bodywebsite .custom-control-input.is-invalid ~ .custom-control-indicator { + background-color: rgba(245, 84, 63, 0.25); +} +.bodywebsite .was-validated .custom-control-input:invalid ~ .custom-control-description, +.bodywebsite .custom-control-input.is-invalid ~ .custom-control-description { + color: #f5543f; +} +.bodywebsite .was-validated .custom-file-input:invalid ~ .custom-file-control, +.bodywebsite .custom-file-input.is-invalid ~ .custom-file-control { + border-color: #f5543f; +} +.bodywebsite .was-validated .custom-file-input:invalid ~ .custom-file-control::before, +.bodywebsite .custom-file-input.is-invalid ~ .custom-file-control::before { + border-color: inherit; +} +.bodywebsite .was-validated .custom-file-input:invalid:focus, +.bodywebsite .custom-file-input.is-invalid:focus { + box-shadow: 0 0 0 0.2rem rgba(245, 84, 63, 0.25); +} +.bodywebsite .form-inline { + display: flex; + flex-flow: row wrap; + align-items: center; +} +.bodywebsite .form-inline .form-check { + width: 100%; +} +@media (min-width: 576px) { + .bodywebsite .form-inline label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .bodywebsite .form-inline .form-label { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + align-items: center; + margin-bottom: 0; + } + .bodywebsite .form-inline .form-input { + display: inline-block; + width: auto; + vertical-align: middle; + } + .bodywebsite .form-inline .form-input-plaintext { + display: inline-block; + } + .bodywebsite .form-inline .input-group { + width: auto; + } + .bodywebsite .form-inline .form-check { + display: flex; + align-items: center; + justify-content: center; + width: auto; + margin-top: 0; + margin-bottom: 0; + } + .bodywebsite .form-inline .form-check-label { + padding-left: 0; + } + .bodywebsite .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .bodywebsite .form-inline .custom-control { + display: flex; + align-items: center; + justify-content: center; + padding-left: 0; + } + .bodywebsite .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: 0.25rem; + vertical-align: text-bottom; + } + .bodywebsite .form-inline .has-feedback .form-input-feedback { + top: 0; + } +} +.bodywebsite .btn { + display: inline-block; + font-weight: 700; + text-align: center; + white-space: nowrap; + vertical-align: middle; + user-select: none; + border: 1px solid transparent; + padding: 11px 35px; + font-size: 14px; + line-height: 1.25; + border-radius: 5px; + transition: all 0.15s ease-in-out; +} +.bodywebsite .btn:focus, +.bodywebsite .btn:hover { + text-decoration: none; +} +.bodywebsite .btn:focus, +.bodywebsite .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.bodywebsite .btn.disabled, +.bodywebsite .btn:disabled { + opacity: .65; + box-shadow: none; +} +.bodywebsite .btn:not([disabled]):not(.disabled):active, +.bodywebsite .btn:not([disabled]):not(.disabled).active { + background-image: none; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25), 0; +} +.bodywebsite a.btn.disabled, +.bodywebsite fieldset[disabled] a.btn { + pointer-events: none; +} +.bodywebsite .btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; + box-shadow: 0; +} +.bodywebsite .btn-primary:focus, +.bodywebsite .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} +.bodywebsite .btn-primary.maincolorbisbackground:focus, +.bodywebsite .btn-primary.maincolorbisbackground.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 255, 123, 0.5); +} +.bodywebsite .btn-primary.maincolorbisbackground:hover { + box-shadow: 1px 1px 8px #aaa; +} +.bodywebsite .btn-primary.disabled, +.bodywebsite .btn-primary:disabled { + background-color: #007bff; + border-color: #007bff; +} +.bodywebsite .btn-primary:not([disabled]):not(.disabled):active, +.bodywebsite .btn-primary:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} +.bodywebsite .btn-secondary { + color: #fff; + background-color: #868e96; + border-color: #868e96; + box-shadow: 0; +} +.bodywebsite .btn-secondary:hover { + color: #fff; + background-color: #727b84; + border-color: #6c757d; +} +.bodywebsite .btn-secondary:focus, +.bodywebsite .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} +.bodywebsite .btn-secondary.disabled, +.bodywebsite .btn-secondary:disabled { + background-color: #868e96; + border-color: #868e96; +} +.bodywebsite .btn-secondary:not([disabled]):not(.disabled):active, +.bodywebsite .btn-secondary:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #666e76; + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} +.bodywebsite .btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; + box-shadow: 0; +} +.bodywebsite .btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} +.bodywebsite .btn-success:focus, +.bodywebsite .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} +.bodywebsite .btn-success.disabled, +.bodywebsite .btn-success:disabled { + background-color: #28a745; + border-color: #28a745; +} +.bodywebsite .btn-success:not([disabled]):not(.disabled):active, +.bodywebsite .btn-success:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} +.bodywebsite .btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + box-shadow: 0; +} +.bodywebsite .btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} +.bodywebsite .btn-info:focus, +.bodywebsite .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} +.bodywebsite .btn-info.disabled, +.bodywebsite .btn-info:disabled { + background-color: #17a2b8; + border-color: #17a2b8; +} +.bodywebsite .btn-info:not([disabled]):not(.disabled):active, +.bodywebsite .btn-info:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} +.bodywebsite .btn-warning { + color: #111; + background-color: #ffc107; + border-color: #ffc107; + box-shadow: 0; +} +.bodywebsite .btn-warning:hover { + color: #111; + background-color: #e0a800; + border-color: #d39e00; +} +.bodywebsite .btn-warning:focus, +.bodywebsite .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} +.bodywebsite .btn-warning.disabled, +.bodywebsite .btn-warning:disabled { + background-color: #ffc107; + border-color: #ffc107; +} +.bodywebsite .btn-warning:not([disabled]):not(.disabled):active, +.bodywebsite .btn-warning:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-warning.dropdown-toggle { + color: #111; + background-color: #d39e00; + border-color: #c69500; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} +.bodywebsite .btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + box-shadow: 0; +} +.bodywebsite .btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} +.bodywebsite .btn-danger:focus, +.bodywebsite .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} +.bodywebsite .btn-danger.disabled, +.bodywebsite .btn-danger:disabled { + background-color: #dc3545; + border-color: #dc3545; +} +.bodywebsite .btn-danger:not([disabled]):not(.disabled):active, +.bodywebsite .btn-danger:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} +.bodywebsite .btn-light { + color: #111; + background-color: #f8f9fa; + border-color: #f8f9fa; + box-shadow: 0; +} +.bodywebsite .btn-light:hover { + color: #111; + background-color: #e2e6ea; + border-color: #dae0e5; +} +.bodywebsite .btn-light:focus, +.bodywebsite .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} +.bodywebsite .btn-light.disabled, +.bodywebsite .btn-light:disabled { + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.bodywebsite .btn-light:not([disabled]):not(.disabled):active, +.bodywebsite .btn-light:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-light.dropdown-toggle { + color: #111; + background-color: #dae0e5; + border-color: #d3d9df; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} +.bodywebsite .btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; + box-shadow: 0; +} +.bodywebsite .btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} +.bodywebsite .btn-dark:focus, +.bodywebsite .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} +.bodywebsite .btn-dark.disabled, +.bodywebsite .btn-dark:disabled { + background-color: #343a40; + border-color: #343a40; +} +.bodywebsite .btn-dark:not([disabled]):not(.disabled):active, +.bodywebsite .btn-dark:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} +.bodywebsite .btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff; +} +.bodywebsite .btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} +.bodywebsite .btn-outline-primary:focus, +.bodywebsite .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} +.bodywebsite .btn-outline-primary.disabled, +.bodywebsite .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} +.bodywebsite .btn-outline-primary:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-primary:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} +.bodywebsite .btn-outline-secondary { + color: #868e96; + background-color: transparent; + background-image: none; + border-color: #868e96; +} +.bodywebsite .btn-outline-secondary:hover { + color: #fff; + background-color: #868e96; + border-color: #868e96; +} +.bodywebsite .btn-outline-secondary:focus, +.bodywebsite .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} +.bodywebsite .btn-outline-secondary.disabled, +.bodywebsite .btn-outline-secondary:disabled { + color: #868e96; + background-color: transparent; +} +.bodywebsite .btn-outline-secondary:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-secondary:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #868e96; + border-color: #868e96; + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} +.bodywebsite .btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745; +} +.bodywebsite .btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} +.bodywebsite .btn-outline-success:focus, +.bodywebsite .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} +.bodywebsite .btn-outline-success.disabled, +.bodywebsite .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} +.bodywebsite .btn-outline-success:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-success:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} +.bodywebsite .btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8; +} +.bodywebsite .btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} +.bodywebsite .btn-outline-info:focus, +.bodywebsite .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} +.bodywebsite .btn-outline-info.disabled, +.bodywebsite .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} +.bodywebsite .btn-outline-info:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-info:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} +.bodywebsite .btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107; +} +.bodywebsite .btn-outline-warning:hover { + color: #fff; + background-color: #ffc107; + border-color: #ffc107; +} +.bodywebsite .btn-outline-warning:focus, +.bodywebsite .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} +.bodywebsite .btn-outline-warning.disabled, +.bodywebsite .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} +.bodywebsite .btn-outline-warning:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-warning:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #ffc107; + border-color: #ffc107; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} +.bodywebsite .btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545; +} +.bodywebsite .btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.bodywebsite .btn-outline-danger:focus, +.bodywebsite .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} +.bodywebsite .btn-outline-danger.disabled, +.bodywebsite .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} +.bodywebsite .btn-outline-danger:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-danger:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} +.bodywebsite .btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; +} +.bodywebsite .btn-outline-light:hover { + color: #00030a; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.bodywebsite .btn-outline-light:focus, +.bodywebsite .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} +.bodywebsite .btn-outline-light.disabled, +.bodywebsite .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} +.bodywebsite .btn-outline-light:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-light:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-light.dropdown-toggle { + color: #00030a; + background-color: #f8f9fa; + border-color: #f8f9fa; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} +.bodywebsite .btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40; +} +.bodywebsite .btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} +.bodywebsite .btn-outline-dark:focus, +.bodywebsite .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} +.bodywebsite .btn-outline-dark.disabled, +.bodywebsite .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} +.bodywebsite .btn-outline-dark:not([disabled]):not(.disabled):active, +.bodywebsite .btn-outline-dark:not([disabled]):not(.disabled).active, +.bodywebsite .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} +.bodywebsite .btn-link { + font-weight: 400; + color: #37c386; + background-color: transparent; +} +.bodywebsite .btn-link:hover { + color: #26875d; + text-decoration: none; + background-color: transparent; + border-color: transparent; +} +.bodywebsite .btn-link:focus, +.bodywebsite .btn-link.focus { + border-color: transparent; + box-shadow: none; +} +.bodywebsite .btn-link:disabled, +.bodywebsite .btn-link.disabled { + color: #dedede; +} +.bodywebsite .btn-lg, +.bodywebsite .btn-group-lg > .btn { + padding: 12px 50px; + font-size: 18px; + line-height: 1.5; + border-radius: 6px; +} +.bodywebsite .btn-sm, +.bodywebsite .btn-group-sm > .btn { + padding: 5px 25px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.bodywebsite .btn-block { + display: block; + width: 100%; +} +.bodywebsite .btn-block + .btn-block { + margin-top: 0.5rem; +} +.bodywebsite input[type="submit"].btn-block, +.bodywebsite input[type="reset"].btn-block, +.bodywebsite input[type="button"].btn-block { + width: 100%; +} +.bodywebsite .fade { + opacity: 0; + transition: opacity 0.15s linear; +} +.bodywebsite .fade.show { + opacity: 1; +} +.bodywebsite .collapse { + display: none; +} +.bodywebsite .collapse.show { + display: block; +} +.bodywebsite tr.collapse.show { + display: table-row; +} +.bodywebsite tbody.collapse.show { + display: table-row-group; +} +.bodywebsite .collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +.bodywebsite .dropup, +.bodywebsite .dropdown { + position: relative; +} +.bodywebsite .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.bodywebsite .dropdown-toggle:empty::after { + margin-left: 0; +} +.bodywebsite .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175); +} +.bodywebsite .dropup .dropdown-menu { + margin-top: 0; + margin-bottom: 0.125rem; +} +.bodywebsite .dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.bodywebsite .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} +.bodywebsite .dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e5e5e5; +} +.bodywebsite .dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #2a2b2b; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} +.bodywebsite .dropdown-item:focus, +.bodywebsite .dropdown-item:hover { + color: #1d1e1e; + text-decoration: none; + background-color: #f5f5f5; +} +.bodywebsite .dropdown-item.active, +.bodywebsite .dropdown-item:active { + color: #2a2b2b; + text-decoration: none; + background-color: #37c386; +} +.bodywebsite .dropdown-item.disabled, +.bodywebsite .dropdown-item:disabled { + color: #dedede; + background-color: transparent; +} +.bodywebsite .dropdown-menu.show { + display: block; +} +.bodywebsite .dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 12px; + color: #dedede; + white-space: nowrap; +} +.bodywebsite .btn-group, +.bodywebsite .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.bodywebsite .btn-group > .btn, +.bodywebsite .btn-group-vertical > .btn { + position: relative; + flex: 0 1 auto; +} +.bodywebsite .btn-group > .btn:hover, +.bodywebsite .btn-group-vertical > .btn:hover { + z-index: 2; +} +.bodywebsite .btn-group > .btn:focus, +.bodywebsite .btn-group > .btn:active, +.bodywebsite .btn-group > .btn.active, +.bodywebsite .btn-group-vertical > .btn:focus, +.bodywebsite .btn-group-vertical > .btn:active, +.bodywebsite .btn-group-vertical > .btn.active { + z-index: 2; +} +.bodywebsite .btn-group .btn + .btn, +.bodywebsite .btn-group .btn + .btn-group, +.bodywebsite .btn-group .btn-group + .btn, +.bodywebsite .btn-group .btn-group + .btn-group, +.bodywebsite .btn-group-vertical .btn + .btn, +.bodywebsite .btn-group-vertical .btn + .btn-group, +.bodywebsite .btn-group-vertical .btn-group + .btn, +.bodywebsite .btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} +.bodywebsite .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.bodywebsite .btn-toolbar .input-group { + width: auto; +} +.bodywebsite .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.bodywebsite .btn-group > .btn:first-child { + margin-left: 0; +} +.bodywebsite .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.bodywebsite .btn-group > .btn:last-child:not(:first-child), +.bodywebsite .btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite .btn-group > .btn-group { + float: left; +} +.bodywebsite .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.bodywebsite .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.bodywebsite .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.bodywebsite .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite .btn + .dropdown-toggle-split { + padding-right: 26.25px; + padding-left: 26.25px; +} +.bodywebsite .btn + .dropdown-toggle-split::after { + margin-left: 0; +} +.bodywebsite .btn-sm + .dropdown-toggle-split, +.bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 18.75px; + padding-left: 18.75px; +} +.bodywebsite .btn-lg + .dropdown-toggle-split, +.bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 37.5px; + padding-left: 37.5px; +} +.bodywebsite .btn-group.show .dropdown-toggle { + box-shadow: 0; +} +.bodywebsite .btn-group.show .dropdown-toggle.btn-link { + box-shadow: none; +} +.bodywebsite .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.bodywebsite .btn-group-vertical .btn, +.bodywebsite .btn-group-vertical .btn-group { + width: 100%; +} +.bodywebsite .btn-group-vertical > .btn + .btn, +.bodywebsite .btn-group-vertical > .btn + .btn-group, +.bodywebsite .btn-group-vertical > .btn-group + .btn, +.bodywebsite .btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.bodywebsite .btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.bodywebsite .btn-group-vertical > .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite .btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.bodywebsite .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.bodywebsite .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.bodywebsite .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.bodywebsite [data-toggle="buttons"] > .btn input[type="radio"], +.bodywebsite [data-toggle="buttons"] > .btn input[type="checkbox"], +.bodywebsite [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +.bodywebsite [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.bodywebsite .input-group { + position: relative; + display: flex; + align-items: stretch; + width: 100%; +} +.bodywebsite .input-group .form-input { + position: relative; + z-index: 2; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} +.bodywebsite .input-group .form-input:focus, +.bodywebsite .input-group .form-input:active, +.bodywebsite .input-group .form-input:hover { + z-index: 3; +} +.bodywebsite .input-group-addon, +.bodywebsite .input-group-btn, +.bodywebsite .input-group .form-input { + display: flex; + align-items: center; +} +.bodywebsite .input-group-addon:not(:first-child):not(:last-child), +.bodywebsite .input-group-btn:not(:first-child):not(:last-child), +.bodywebsite .input-group .form-input:not(:first-child):not(:last-child) { + border-radius: 0; +} +.bodywebsite .input-group-addon, +.bodywebsite .input-group-btn { + white-space: nowrap; +} +.bodywebsite .input-group-addon { + padding: 11px 35px; + margin-bottom: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.25; + color: #495057; + text-align: center; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} +.bodywebsite .input-group-addon.form-input-sm, +.bodywebsite .input-group-sm > .input-group-addon, +.bodywebsite .input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 5px 25px; + font-size: 12px; + border-radius: 0.2rem; +} +.bodywebsite .input-group-addon.form-input-lg, +.bodywebsite .input-group-lg > .input-group-addon, +.bodywebsite .input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 12px 50px; + font-size: 18px; + border-radius: 0.3rem; +} +.bodywebsite .input-group-addon input[type="radio"], +.bodywebsite .input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.bodywebsite .input-group .form-input:not(:last-child), +.bodywebsite .input-group-addon:not(:last-child), +.bodywebsite .input-group-btn:not(:last-child) > .btn, +.bodywebsite .input-group-btn:not(:last-child) > .btn-group > .btn, +.bodywebsite .input-group-btn:not(:last-child) > .dropdown-toggle, +.bodywebsite .input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), +.bodywebsite .input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.bodywebsite .input-group-addon:not(:last-child) { + border-right: 0; +} +.bodywebsite .input-group .form-input:not(:first-child), +.bodywebsite .input-group-addon:not(:first-child), +.bodywebsite .input-group-btn:not(:first-child) > .btn, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group > .btn, +.bodywebsite .input-group-btn:not(:first-child) > .dropdown-toggle, +.bodywebsite .input-group-btn:not(:last-child) > .btn:not(:first-child), +.bodywebsite .input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite .form-input + .input-group-addon:not(:first-child) { + border-left: 0; +} +.bodywebsite .input-group-btn { + position: relative; + align-items: stretch; + font-size: 0; + white-space: nowrap; +} +.bodywebsite .input-group-btn > .btn { + position: relative; +} +.bodywebsite .input-group-btn > .btn + .btn { + margin-left: -1px; +} +.bodywebsite .input-group-btn > .btn:focus, +.bodywebsite .input-group-btn > .btn:active, +.bodywebsite .input-group-btn > .btn:hover { + z-index: 3; +} +.bodywebsite .input-group-btn:first-child > .btn + .btn { + margin-left: 0; +} +.bodywebsite .input-group-btn:not(:last-child) > .btn, +.bodywebsite .input-group-btn:not(:last-child) > .btn-group { + margin-right: -1px; +} +.bodywebsite .input-group-btn:not(:first-child) > .btn, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group { + z-index: 2; + margin-left: 0; +} +.bodywebsite .input-group-btn:not(:first-child) > .btn:first-child, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group:first-child { + margin-left: -1px; +} +.bodywebsite .input-group-btn:not(:first-child) > .btn:focus, +.bodywebsite .input-group-btn:not(:first-child) > .btn:active, +.bodywebsite .input-group-btn:not(:first-child) > .btn:hover, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group:focus, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group:active, +.bodywebsite .input-group-btn:not(:first-child) > .btn-group:hover { + z-index: 3; +} +.bodywebsite .custom-control { + position: relative; + display: inline-flex; + min-height: 1.71429rem; + padding-left: 1.5rem; + margin-right: 1rem; +} +.bodywebsite .custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} +.bodywebsite .custom-control-input:checked ~ .custom-control-indicator { + color: #fff; + background-color: #007bff; + box-shadow: none; +} +.bodywebsite .custom-control-input:focus ~ .custom-control-indicator { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.bodywebsite .custom-control-input:active ~ .custom-control-indicator { + color: #fff; + background-color: #b3d7ff; + box-shadow: none; +} +.bodywebsite .custom-control-input:disabled ~ .custom-control-indicator { + background-color: #e9ecef; +} +.bodywebsite .custom-control-input:disabled ~ .custom-control-description { + color: #868e96; +} +.bodywebsite .custom-control-indicator { + position: absolute; + top: 0.35714rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; + box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); +} +.bodywebsite .custom-checkbox .custom-control-indicator { + border-radius: 0.25rem; +} +.bodywebsite .custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} +.bodywebsite .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { + background-color: #007bff; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); + box-shadow: none; +} +.bodywebsite .custom-radio .custom-control-indicator { + border-radius: 50%; +} +.bodywebsite .custom-radio .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} +.bodywebsite .custom-controls-stacked { + display: flex; + flex-direction: column; +} +.bodywebsite .custom-controls-stacked .custom-control { + margin-bottom: 0.25rem; +} +.bodywebsite .custom-controls-stacked .custom-control + .custom-control { + margin-left: 0; +} +.bodywebsite .custom-select { + display: inline-block; + max-width: 100%; + height: calc(4.25rem); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + appearance: none; +} +.bodywebsite .custom-select:focus { + border-color: #80bdff; + outline: none; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); +} +.bodywebsite .custom-select[multiple] { + height: auto; + background-image: none; +} +.bodywebsite .custom-select:disabled { + color: #868e96; + background-color: #e9ecef; +} +.bodywebsite .custom-select::-ms-expand { + opacity: 0; +} +.bodywebsite .custom-select-sm { + height: calc(3.8125rem); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} +.bodywebsite .custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: calc(4.25rem); + margin-bottom: 0; +} +.bodywebsite .custom-file-input { + min-width: 14rem; + max-width: 100%; + height: calc(4.25rem); + margin: 0; + opacity: 0; +} +.bodywebsite .custom-file-input:focus ~ .custom-file-control { + box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #007bff; +} +.bodywebsite .custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: calc(4.25rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + pointer-events: none; + user-select: none; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.bodywebsite .custom-file-control:lang(en):empty::after { + content: "Choose file..."; +} +.bodywebsite .custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: calc(4.25rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0 0.25rem 0.25rem 0; +} +.bodywebsite .custom-file-control:lang(en)::before { + content: "Browse"; +} +.bodywebsite .nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.bodywebsite .nav-link { + display: block; + padding: 0.5rem 1rem; +} +.bodywebsite .nav-link:focus, +.bodywebsite .nav-link:hover { + text-decoration: none; +} +.bodywebsite .nav-link.disabled { + color: #868e96; +} +.bodywebsite .nav-tabs { + border-bottom: 1px solid #ddd; +} +.bodywebsite .nav-tabs .nav-item { + margin-bottom: -1px; +} +.bodywebsite .nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.bodywebsite .nav-tabs .nav-link:focus, +.bodywebsite .nav-tabs .nav-link:hover { + border-color: #f9f9f9 #f9f9f9 #ddd; +} +.bodywebsite .nav-tabs .nav-link.disabled { + color: #868e96; + background-color: transparent; + border-color: transparent; +} +.bodywebsite .nav-tabs .nav-link.active, +.bodywebsite .nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #ddd #ddd #fff; +} +.bodywebsite .nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.bodywebsite .nav-pills .nav-link { + border-radius: 0; +} +.bodywebsite .nav-pills .nav-link.active, +.bodywebsite .nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} +.bodywebsite .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} +.bodywebsite .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} +.bodywebsite .tab-content > .tab-pane { + display: none; +} +.bodywebsite .tab-content > .active { + display: block; +} +.bodywebsite .navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.5rem 1rem; +} +.bodywebsite .navbar > .container, +.bodywebsite .navbar > .container-fluid { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; +} +.bodywebsite .navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} +.bodywebsite .navbar-brand:focus, +.bodywebsite .navbar-brand:hover { + text-decoration: none; +} +.bodywebsite .navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.bodywebsite .navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} +.bodywebsite .navbar-nav .dropdown-menu { + position: static; + float: none; +} +.bodywebsite .navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.bodywebsite .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} +.bodywebsite .navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} +.bodywebsite .navbar-toggler:focus, +.bodywebsite .navbar-toggler:hover { + text-decoration: none; +} +.bodywebsite .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} +@media (max-width: 575px) { + .bodywebsite .navbar-expand-sm > .container, + .bodywebsite .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} +@media (min-width: 576px) { + .bodywebsite .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .bodywebsite .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; + } + .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .bodywebsite .navbar-expand-sm > .container, + .bodywebsite .navbar-expand-sm > .container-fluid { + flex-wrap: nowrap; + } + .bodywebsite .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .bodywebsite .navbar-expand-sm .navbar-toggler { + display: none; + } + .bodywebsite .navbar-expand-sm .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} +@media (max-width: 767px) { + .bodywebsite .navbar-expand-md > .container, + .bodywebsite .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} +@media (min-width: 768px) { + .bodywebsite .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start; + } + .bodywebsite .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; + } + .bodywebsite .navbar-expand-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .bodywebsite .navbar-expand-md > .container, + .bodywebsite .navbar-expand-md > .container-fluid { + flex-wrap: nowrap; + } + .bodywebsite .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .bodywebsite .navbar-expand-md .navbar-toggler { + display: none; + } + .bodywebsite .navbar-expand-md .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} +@media (max-width: 991px) { + .bodywebsite .navbar-expand-lg > .container, + .bodywebsite .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} +@media (min-width: 992px) { + .bodywebsite .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start; + } + .bodywebsite .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; + } + .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .bodywebsite .navbar-expand-lg > .container, + .bodywebsite .navbar-expand-lg > .container-fluid { + flex-wrap: nowrap; + } + .bodywebsite .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .bodywebsite .navbar-expand-lg .navbar-toggler { + display: none; + } + .bodywebsite .navbar-expand-lg .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} +@media (max-width: 1199px) { + .bodywebsite .navbar-expand-xl > .container, + .bodywebsite .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} +@media (min-width: 1200px) { + .bodywebsite .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .bodywebsite .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; + } + .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .bodywebsite .navbar-expand-xl > .container, + .bodywebsite .navbar-expand-xl > .container-fluid { + flex-wrap: nowrap; + } + .bodywebsite .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .bodywebsite .navbar-expand-xl .navbar-toggler { + display: none; + } + .bodywebsite .navbar-expand-xl .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} +@media (max-width: 1799px) { + .bodywebsite .navbar-expand-xxl > .container, + .bodywebsite .navbar-expand-xxl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} +@media (min-width: 1800px) { + .bodywebsite .navbar-expand-xxl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .bodywebsite .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; + } + .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .bodywebsite .navbar-expand-xxl > .container, + .bodywebsite .navbar-expand-xxl > .container-fluid { + flex-wrap: nowrap; + } + .bodywebsite .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .bodywebsite .navbar-expand-xxl .navbar-toggler { + display: none; + } + .bodywebsite .navbar-expand-xxl .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} +.bodywebsite .navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start; +} +.bodywebsite .navbar-expand > .container, +.bodywebsite .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} +.bodywebsite .navbar-expand .navbar-nav { + flex-direction: row; +} +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; +} +.bodywebsite .navbar-expand .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; +} +.bodywebsite .navbar-expand > .container, +.bodywebsite .navbar-expand > .container-fluid { + flex-wrap: nowrap; +} +.bodywebsite .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.bodywebsite .navbar-expand .navbar-toggler { + display: none; +} +.bodywebsite .navbar-expand .dropup .dropdown-menu { + top: auto; + bottom: 100%; +} +.bodywebsite .navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} +.bodywebsite .navbar-light .navbar-brand:focus, +.bodywebsite .navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, 0.9); +} +.bodywebsite .navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} +.bodywebsite .navbar-light .navbar-nav .nav-link:focus, +.bodywebsite .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} +.bodywebsite .navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} +.bodywebsite .navbar-light .navbar-nav .show > .nav-link, +.bodywebsite .navbar-light .navbar-nav .active > .nav-link, +.bodywebsite .navbar-light .navbar-nav .nav-link.show, +.bodywebsite .navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} +.bodywebsite .navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} +.bodywebsite .navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} +.bodywebsite .navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} +.bodywebsite .navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} +.bodywebsite .navbar-light .navbar-text a:focus, +.bodywebsite .navbar-light .navbar-text a:hover { + color: rgba(0, 0, 0, 0.9); +} +.bodywebsite .navbar-dark .navbar-brand { + color: #fff; +} +.bodywebsite .navbar-dark .navbar-brand:focus, +.bodywebsite .navbar-dark .navbar-brand:hover { + color: #fff; +} +.bodywebsite .navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .navbar-dark .navbar-nav .nav-link:focus, +.bodywebsite .navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, 0.75); +} +.bodywebsite .navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} +.bodywebsite .navbar-dark .navbar-nav .show > .nav-link, +.bodywebsite .navbar-dark .navbar-nav .active > .nav-link, +.bodywebsite .navbar-dark .navbar-nav .nav-link.show, +.bodywebsite .navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} +.bodywebsite .navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} +.bodywebsite .navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} +.bodywebsite .navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .navbar-dark .navbar-text a { + color: #fff; +} +.bodywebsite .navbar-dark .navbar-text a:focus, +.bodywebsite .navbar-dark .navbar-text a:hover { + color: #fff; +} +.bodywebsite .jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 6px; +} +@media (min-width: 576px) { + .bodywebsite .jumbotron { + padding: 4rem 2rem; + } +} +.bodywebsite .jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} +.bodywebsite .alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} +.bodywebsite .alert-heading { + color: inherit; +} +.bodywebsite .alert-link { + font-weight: 700; +} +.bodywebsite .alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} +.bodywebsite .alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} +.bodywebsite .alert-primary hr { + border-top-color: #9fcdff; +} +.bodywebsite .alert-primary .alert-link { + color: #002752; +} +.bodywebsite .alert-secondary { + color: #464a4e; + background-color: #e7e8ea; + border-color: #dddfe2; +} +.bodywebsite .alert-secondary hr { + border-top-color: #cfd2d6; +} +.bodywebsite .alert-secondary .alert-link { + color: #2e3133; +} +.bodywebsite .alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} +.bodywebsite .alert-success hr { + border-top-color: #b1dfbb; +} +.bodywebsite .alert-success .alert-link { + color: #0b2e13; +} +.bodywebsite .alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} +.bodywebsite .alert-info hr { + border-top-color: #abdde5; +} +.bodywebsite .alert-info .alert-link { + color: #062c33; +} +.bodywebsite .alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} +.bodywebsite .alert-warning hr { + border-top-color: #ffe8a1; +} +.bodywebsite .alert-warning .alert-link { + color: #533f03; +} +.bodywebsite .alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} +.bodywebsite .alert-danger hr { + border-top-color: #f1b0b7; +} +.bodywebsite .alert-danger .alert-link { + color: #491217; +} +.bodywebsite .alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} +.bodywebsite .alert-light hr { + border-top-color: #ececf6; +} +.bodywebsite .alert-light .alert-link { + color: #686868; +} +.bodywebsite .alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} +.bodywebsite .alert-dark hr { + border-top-color: #b9bbbe; +} +.bodywebsite .alert-dark .alert-link { + color: #040505; +} +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} +.bodywebsite .progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} +.bodywebsite .progress-bar { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + background-color: #007bff; +} +.bodywebsite .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} +.bodywebsite .progress-bar-animated { + animation: progress-bar-stripes 1s linear infinite; +} +.bodywebsite .media { + display: flex; + align-items: flex-start; +} +.bodywebsite .media-body { + flex: 1; +} +.bodywebsite .list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} +.bodywebsite .list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} +.bodywebsite .list-group-item-action:focus, +.bodywebsite .list-group-item-action:hover { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} +.bodywebsite .list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} +.bodywebsite .list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.bodywebsite .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.bodywebsite .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.bodywebsite .list-group-item:focus, +.bodywebsite .list-group-item:hover { + text-decoration: none; +} +.bodywebsite .list-group-item.disabled, +.bodywebsite .list-group-item:disabled { + color: #868e96; + background-color: #fff; +} +.bodywebsite .list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} +.bodywebsite .list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.bodywebsite .list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} +.bodywebsite .list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} +.bodywebsite .list-group-item-primary { + color: #004085; + background-color: #b8daff; +} +.bodywebsite a.list-group-item-primary, +.bodywebsite button.list-group-item-primary { + color: #004085; +} +.bodywebsite a.list-group-item-primary:focus, +.bodywebsite a.list-group-item-primary:hover, +.bodywebsite button.list-group-item-primary:focus, +.bodywebsite button.list-group-item-primary:hover { + color: #004085; + background-color: #9fcdff; +} +.bodywebsite a.list-group-item-primary.active, +.bodywebsite button.list-group-item-primary.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} +.bodywebsite .list-group-item-secondary { + color: #464a4e; + background-color: #dddfe2; +} +.bodywebsite a.list-group-item-secondary, +.bodywebsite button.list-group-item-secondary { + color: #464a4e; +} +.bodywebsite a.list-group-item-secondary:focus, +.bodywebsite a.list-group-item-secondary:hover, +.bodywebsite button.list-group-item-secondary:focus, +.bodywebsite button.list-group-item-secondary:hover { + color: #464a4e; + background-color: #cfd2d6; +} +.bodywebsite a.list-group-item-secondary.active, +.bodywebsite button.list-group-item-secondary.active { + color: #fff; + background-color: #464a4e; + border-color: #464a4e; +} +.bodywebsite .list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} +.bodywebsite a.list-group-item-success, +.bodywebsite button.list-group-item-success { + color: #155724; +} +.bodywebsite a.list-group-item-success:focus, +.bodywebsite a.list-group-item-success:hover, +.bodywebsite button.list-group-item-success:focus, +.bodywebsite button.list-group-item-success:hover { + color: #155724; + background-color: #b1dfbb; +} +.bodywebsite a.list-group-item-success.active, +.bodywebsite button.list-group-item-success.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} +.bodywebsite .list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} +.bodywebsite a.list-group-item-info, +.bodywebsite button.list-group-item-info { + color: #0c5460; +} +.bodywebsite a.list-group-item-info:focus, +.bodywebsite a.list-group-item-info:hover, +.bodywebsite button.list-group-item-info:focus, +.bodywebsite button.list-group-item-info:hover { + color: #0c5460; + background-color: #abdde5; +} +.bodywebsite a.list-group-item-info.active, +.bodywebsite button.list-group-item-info.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} +.bodywebsite .list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} +.bodywebsite a.list-group-item-warning, +.bodywebsite button.list-group-item-warning { + color: #856404; +} +.bodywebsite a.list-group-item-warning:focus, +.bodywebsite a.list-group-item-warning:hover, +.bodywebsite button.list-group-item-warning:focus, +.bodywebsite button.list-group-item-warning:hover { + color: #856404; + background-color: #ffe8a1; +} +.bodywebsite a.list-group-item-warning.active, +.bodywebsite button.list-group-item-warning.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} +.bodywebsite .list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} +.bodywebsite a.list-group-item-danger, +.bodywebsite button.list-group-item-danger { + color: #721c24; +} +.bodywebsite a.list-group-item-danger:focus, +.bodywebsite a.list-group-item-danger:hover, +.bodywebsite button.list-group-item-danger:focus, +.bodywebsite button.list-group-item-danger:hover { + color: #721c24; + background-color: #f1b0b7; +} +.bodywebsite a.list-group-item-danger.active, +.bodywebsite button.list-group-item-danger.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} +.bodywebsite .list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} +.bodywebsite a.list-group-item-light, +.bodywebsite button.list-group-item-light { + color: #818182; +} +.bodywebsite a.list-group-item-light:focus, +.bodywebsite a.list-group-item-light:hover, +.bodywebsite button.list-group-item-light:focus, +.bodywebsite button.list-group-item-light:hover { + color: #818182; + background-color: #ececf6; +} +.bodywebsite a.list-group-item-light.active, +.bodywebsite button.list-group-item-light.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} +.bodywebsite .list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} +.bodywebsite a.list-group-item-dark, +.bodywebsite button.list-group-item-dark { + color: #1b1e21; +} +.bodywebsite a.list-group-item-dark:focus, +.bodywebsite a.list-group-item-dark:hover, +.bodywebsite button.list-group-item-dark:focus, +.bodywebsite button.list-group-item-dark:hover { + color: #1b1e21; + background-color: #b9bbbe; +} +.bodywebsite a.list-group-item-dark.active, +.bodywebsite button.list-group-item-dark.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} +.bodywebsite .close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} +.bodywebsite .close:focus, +.bodywebsite .close:hover { + color: #000; + text-decoration: none; + opacity: .75; +} +.bodywebsite button.close { + padding: 0; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.bodywebsite .tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.71429; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 12px; + word-wrap: break-word; + opacity: 0; +} +.bodywebsite .tooltip.show { + opacity: 1; +} +.bodywebsite .tooltip .arrow { + position: absolute; + display: block; + width: 6px; + height: 6px; +} +.bodywebsite .tooltip .arrow::before { + position: absolute; + border-color: transparent; + border-style: solid; +} +.bodywebsite .tooltip.bs-tooltip-top, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] { + padding: 6px 0; +} +.bodywebsite .tooltip.bs-tooltip-top .arrow, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} +.bodywebsite .tooltip.bs-tooltip-top .arrow::before, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow::before { + margin-left: -4px; + content: ""; + border-width: 6px 6px 0; + border-top-color: #37c386; +} +.bodywebsite .tooltip.bs-tooltip-right, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] { + padding: 0 6px; +} +.bodywebsite .tooltip.bs-tooltip-right .arrow, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; +} +.bodywebsite .tooltip.bs-tooltip-right .arrow::before, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow::before { + margin-top: -4px; + content: ""; + border-width: 6px 6px 6px 0; + border-right-color: #37c386; +} +.bodywebsite .tooltip.bs-tooltip-bottom, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] { + padding: 6px 0; +} +.bodywebsite .tooltip.bs-tooltip-bottom .arrow, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} +.bodywebsite .tooltip.bs-tooltip-bottom .arrow::before, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + margin-left: -4px; + content: ""; + border-width: 0 6px 6px; + border-bottom-color: #37c386; +} +.bodywebsite .tooltip.bs-tooltip-left, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] { + padding: 0 6px; +} +.bodywebsite .tooltip.bs-tooltip-left .arrow, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; +} +.bodywebsite .tooltip.bs-tooltip-left .arrow::before, +.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow::before { + right: 0; + margin-top: -4px; + content: ""; + border-width: 6px 0 6px 6px; + border-left-color: #37c386; +} +.bodywebsite .tooltip-inner { + max-width: 200px; + padding: 6px 10px; + color: #fff; + text-align: center; + background-color: #37c386; + border-radius: 0; +} +.bodywebsite .popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: "Roboto", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.71429; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 12px; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2); +} +.bodywebsite .popover .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.bodywebsite .popover .arrow::before, +.bodywebsite .popover .arrow::after { + position: absolute; + display: block; + border-color: transparent; + border-style: solid; +} +.bodywebsite .popover .arrow::before { + content: ""; + border-width: 0.8rem; +} +.bodywebsite .popover .arrow::after { + content: ""; + border-width: 0.8rem; +} +.bodywebsite .popover.bs-popover-top, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.8rem; +} +.bodywebsite .popover.bs-popover-top .arrow, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow { + bottom: 0; +} +.bodywebsite .popover.bs-popover-top .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::before, +.bodywebsite .popover.bs-popover-top .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::after { + border-bottom-width: 0; +} +.bodywebsite .popover.bs-popover-top .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: -0.8rem; + margin-left: -0.8rem; + border-top-color: rgba(0, 0, 0, 0.25); +} +.bodywebsite .popover.bs-popover-top .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: calc(0.2rem); + margin-left: -0.8rem; + border-top-color: #fff; +} +.bodywebsite .popover.bs-popover-right, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] { + margin-left: 0.8rem; +} +.bodywebsite .popover.bs-popover-right .arrow, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow { + left: 0; +} +.bodywebsite .popover.bs-popover-right .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::before, +.bodywebsite .popover.bs-popover-right .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::after { + margin-top: -0.8rem; + border-left-width: 0; +} +.bodywebsite .popover.bs-popover-right .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::before { + left: -0.8rem; + border-right-color: rgba(0, 0, 0, 0.25); +} +.bodywebsite .popover.bs-popover-right .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::after { + left: calc(0.2rem); + border-right-color: #fff; +} +.bodywebsite .popover.bs-popover-bottom, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.8rem; +} +.bodywebsite .popover.bs-popover-bottom .arrow, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow { + top: 0; +} +.bodywebsite .popover.bs-popover-bottom .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before, +.bodywebsite .popover.bs-popover-bottom .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { + margin-left: -0.8rem; + border-top-width: 0; +} +.bodywebsite .popover.bs-popover-bottom .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: -0.8rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.bodywebsite .popover.bs-popover-bottom .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: calc(0.2rem); + border-bottom-color: #fff; +} +.bodywebsite .popover.bs-popover-bottom .popover-header::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7; +} +.bodywebsite .popover.bs-popover-left, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] { + margin-right: 0.8rem; +} +.bodywebsite .popover.bs-popover-left .arrow, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow { + right: 0; +} +.bodywebsite .popover.bs-popover-left .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::before, +.bodywebsite .popover.bs-popover-left .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::after { + margin-top: -0.8rem; + border-right-width: 0; +} +.bodywebsite .popover.bs-popover-left .arrow::before, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::before { + right: -0.8rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.bodywebsite .popover.bs-popover-left .arrow::after, +.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::after { + right: calc(0.2rem); + border-left-color: #fff; +} +.bodywebsite .popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 14px; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(5px); + border-top-right-radius: calc(5px); +} +.bodywebsite .popover-header:empty { + display: none; +} +.bodywebsite .popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} +.bodywebsite .carousel { + position: relative; +} +.bodywebsite .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.bodywebsite .carousel-item { + position: relative; + display: none; + align-items: center; + width: 100%; + transition: transform 0.6s ease; + backface-visibility: hidden; + perspective: 1000px; +} +.bodywebsite .carousel-item.active, +.bodywebsite .carousel-item-next, +.bodywebsite .carousel-item-prev { + display: block; +} +.bodywebsite .carousel-item-next, +.bodywebsite .carousel-item-prev { + position: absolute; + top: 0; +} +.bodywebsite .carousel-item-next.carousel-item-left, +.bodywebsite .carousel-item-prev.carousel-item-right { + transform: translateX(0); +} +@supports (transform-style: preserve-3d) { + .bodywebsite .carousel-item-next.carousel-item-left, + .bodywebsite .carousel-item-prev.carousel-item-right { + transform: translate3d(0, 0, 0); + } +} +.bodywebsite .carousel-item-next, +.bodywebsite .active.carousel-item-right { + transform: translateX(100%); +} +@supports (transform-style: preserve-3d) { + .bodywebsite .carousel-item-next, + .bodywebsite .active.carousel-item-right { + transform: translate3d(100%, 0, 0); + } +} +.bodywebsite .carousel-item-prev, +.bodywebsite .active.carousel-item-left { + transform: translateX(-100%); +} +@supports (transform-style: preserve-3d) { + .bodywebsite .carousel-item-prev, + .bodywebsite .active.carousel-item-left { + transform: translate3d(-100%, 0, 0); + } +} +.bodywebsite .carousel-control-prev, +.bodywebsite .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} +.bodywebsite .carousel-control-prev:focus, +.bodywebsite .carousel-control-prev:hover, +.bodywebsite .carousel-control-next:focus, +.bodywebsite .carousel-control-next:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} +.bodywebsite .carousel-control-prev { + left: 0; +} +.bodywebsite .carousel-control-next { + right: 0; +} +.bodywebsite .carousel-control-prev-icon, +.bodywebsite .carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; +} +.bodywebsite .carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} +.bodywebsite .carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} +.bodywebsite .carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} +.bodywebsite .carousel-indicators li { + position: relative; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, 0.5); +} +.bodywebsite .carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} +.bodywebsite .carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} +.bodywebsite .carousel-indicators .active { + background-color: #fff; +} +.bodywebsite .carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} +.bodywebsite .align-baseline { + vertical-align: baseline !important; +} +.bodywebsite .align-top { + vertical-align: top !important; +} +.bodywebsite .align-middle { + vertical-align: middle !important; +} +.bodywebsite .align-bottom { + vertical-align: bottom !important; +} +.bodywebsite .align-text-bottom { + vertical-align: text-bottom !important; +} +.bodywebsite .align-text-top { + vertical-align: text-top !important; +} +.bodywebsite .bg-primary { + background-color: #007bff !important; +} +.bodywebsite a.bg-primary:focus, +.bodywebsite a.bg-primary:hover { + background-color: #0062cc !important; +} +.bodywebsite .bg-secondary { + background-color: #868e96 !important; +} +.bodywebsite a.bg-secondary:focus, +.bodywebsite a.bg-secondary:hover { + background-color: #6c757d !important; +} +.bodywebsite .bg-success { + background-color: #28a745 !important; +} +.bodywebsite a.bg-success:focus, +.bodywebsite a.bg-success:hover { + background-color: #1e7e34 !important; +} +.bodywebsite .bg-info { + background-color: #17a2b8 !important; +} +.bodywebsite a.bg-info:focus, +.bodywebsite a.bg-info:hover { + background-color: #117a8b !important; +} +.bodywebsite .bg-warning { + background-color: #ffc107 !important; +} +.bodywebsite a.bg-warning:focus, +.bodywebsite a.bg-warning:hover { + background-color: #d39e00 !important; +} +.bodywebsite .bg-danger { + background-color: #dc3545 !important; +} +.bodywebsite a.bg-danger:focus, +.bodywebsite a.bg-danger:hover { + background-color: #bd2130 !important; +} +.bodywebsite .bg-light { + background-color: #f8f9fa !important; +} +.bodywebsite a.bg-light:focus, +.bodywebsite a.bg-light:hover { + background-color: #dae0e5 !important; +} +.bodywebsite .bg-dark { + background-color: #343a40 !important; +} +.bodywebsite a.bg-dark:focus, +.bodywebsite a.bg-dark:hover { + background-color: #1d2124 !important; +} +.bodywebsite .bg-default { + background-color: #fff !important; +} +.bodywebsite .bg-transparent { + background-color: transparent !important; +} +.bodywebsite .border { + border: 1px solid #e9ecef !important; +} +.bodywebsite .border-0 { + border: 0 !important; +} +.bodywebsite .border-top-0 { + border-top: 0 !important; +} +.bodywebsite .border-right-0 { + border-right: 0 !important; +} +.bodywebsite .border-bottom-0 { + border-bottom: 0 !important; +} +.bodywebsite .border-left-0 { + border-left: 0 !important; +} +.bodywebsite .border-primary { + border-color: #007bff !important; +} +.bodywebsite .border-secondary { + border-color: #868e96 !important; +} +.bodywebsite .border-success { + border-color: #28a745 !important; +} +.bodywebsite .border-info { + border-color: #17a2b8 !important; +} +.bodywebsite .border-warning { + border-color: #ffc107 !important; +} +.bodywebsite .border-danger { + border-color: #dc3545 !important; +} +.bodywebsite .border-light { + border-color: #f8f9fa !important; +} +.bodywebsite .border-dark { + border-color: #343a40 !important; +} +.bodywebsite .border-white { + border-color: #fff !important; +} +.bodywebsite .rounded { + border-radius: 0 !important; +} +.bodywebsite .rounded-top { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} +.bodywebsite .rounded-right { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +.bodywebsite .rounded-bottom { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} +.bodywebsite .rounded-left { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} +.bodywebsite .rounded-circle { + border-radius: 50% !important; +} +.bodywebsite .rounded-0 { + border-radius: 0 !important; +} +.bodywebsite .clearfix::after { + display: block; + clear: both; + content: ""; +} +.bodywebsite .d-none { + display: none !important; +} +.bodywebsite .d-inline { + display: inline !important; +} +.bodywebsite .d-inline-block { + display: inline-block !important; +} +.bodywebsite .d-block { + display: block !important; +} +.bodywebsite .d-table { + display: table !important; +} +.bodywebsite .d-table-row { + display: table-row !important; +} +.bodywebsite .d-table-cell { + display: table-cell !important; +} +.bodywebsite .d-flex { + display: flex !important; +} +.bodywebsite .d-inline-flex { + display: inline-flex !important; +} +@media (min-width: 576px) { + .bodywebsite .d-sm-none { + display: none !important; + } + .bodywebsite .d-sm-inline { + display: inline !important; + } + .bodywebsite .d-sm-inline-block { + display: inline-block !important; + } + .bodywebsite .d-sm-block { + display: block !important; + } + .bodywebsite .d-sm-table { + display: table !important; + } + .bodywebsite .d-sm-table-row { + display: table-row !important; + } + .bodywebsite .d-sm-table-cell { + display: table-cell !important; + } + .bodywebsite .d-sm-flex { + display: flex !important; + } + .bodywebsite .d-sm-inline-flex { + display: inline-flex !important; + } +} +@media (min-width: 768px) { + .bodywebsite .d-md-none { + display: none !important; + } + .bodywebsite .d-md-inline { + display: inline !important; + } + .bodywebsite .d-md-inline-block { + display: inline-block !important; + } + .bodywebsite .d-md-block { + display: block !important; + } + .bodywebsite .d-md-table { + display: table !important; + } + .bodywebsite .d-md-table-row { + display: table-row !important; + } + .bodywebsite .d-md-table-cell { + display: table-cell !important; + } + .bodywebsite .d-md-flex { + display: flex !important; + } + .bodywebsite .d-md-inline-flex { + display: inline-flex !important; + } +} +@media (min-width: 992px) { + .bodywebsite .d-lg-none { + display: none !important; + } + .bodywebsite .d-lg-inline { + display: inline !important; + } + .bodywebsite .d-lg-inline-block { + display: inline-block !important; + } + .bodywebsite .d-lg-block { + display: block !important; + } + .bodywebsite .d-lg-table { + display: table !important; + } + .bodywebsite .d-lg-table-row { + display: table-row !important; + } + .bodywebsite .d-lg-table-cell { + display: table-cell !important; + } + .bodywebsite .d-lg-flex { + display: flex !important; + } + .bodywebsite .d-lg-inline-flex { + display: inline-flex !important; + } +} +@media (min-width: 1200px) { + .bodywebsite .d-xl-none { + display: none !important; + } + .bodywebsite .d-xl-inline { + display: inline !important; + } + .bodywebsite .d-xl-inline-block { + display: inline-block !important; + } + .bodywebsite .d-xl-block { + display: block !important; + } + .bodywebsite .d-xl-table { + display: table !important; + } + .bodywebsite .d-xl-table-row { + display: table-row !important; + } + .bodywebsite .d-xl-table-cell { + display: table-cell !important; + } + .bodywebsite .d-xl-flex { + display: flex !important; + } + .bodywebsite .d-xl-inline-flex { + display: inline-flex !important; + } +} +@media (min-width: 1800px) { + .bodywebsite .d-xxl-none { + display: none !important; + } + .bodywebsite .d-xxl-inline { + display: inline !important; + } + .bodywebsite .d-xxl-inline-block { + display: inline-block !important; + } + .bodywebsite .d-xxl-block { + display: block !important; + } + .bodywebsite .d-xxl-table { + display: table !important; + } + .bodywebsite .d-xxl-table-row { + display: table-row !important; + } + .bodywebsite .d-xxl-table-cell { + display: table-cell !important; + } + .bodywebsite .d-xxl-flex { + display: flex !important; + } + .bodywebsite .d-xxl-inline-flex { + display: inline-flex !important; + } +} +.bodywebsite .d-print-block { + display: none !important; +} +@media print { + .bodywebsite .d-print-block { + display: block !important; + } +} +.bodywebsite .d-print-inline { + display: none !important; +} +@media print { + .bodywebsite .d-print-inline { + display: inline !important; + } +} +.bodywebsite .d-print-inline-block { + display: none !important; +} +@media print { + .bodywebsite .d-print-inline-block { + display: inline-block !important; + } +} +@media print { + .bodywebsite .d-print-none { + display: none !important; + } +} +.bodywebsite .embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} +.bodywebsite .embed-responsive::before { + display: block; + content: ""; +} +.bodywebsite .embed-responsive .embed-responsive-item, +.bodywebsite .embed-responsive iframe, +.bodywebsite .embed-responsive embed, +.bodywebsite .embed-responsive object, +.bodywebsite .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.bodywebsite .embed-responsive-21by9::before { + padding-top: 42.85714%; +} +.bodywebsite .embed-responsive-16by9::before { + padding-top: 56.25%; +} +.bodywebsite .embed-responsive-4by3::before { + padding-top: 75%; +} +.bodywebsite .embed-responsive-1by1::before { + padding-top: 100%; +} +.bodywebsite .flex-row { + flex-direction: row !important; +} +.bodywebsite .flex-column { + flex-direction: column !important; +} +.bodywebsite .flex-row-reverse { + flex-direction: row-reverse !important; +} +.bodywebsite .flex-column-reverse { + flex-direction: column-reverse !important; +} +.bodywebsite .flex-wrap { + flex-wrap: wrap !important; +} +.bodywebsite .flex-nowrap { + flex-wrap: nowrap !important; +} +.bodywebsite .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} +.bodywebsite .justify-content-start { + justify-content: flex-start !important; +} +.bodywebsite .justify-content-end { + justify-content: flex-end !important; +} +.bodywebsite .justify-content-center { + justify-content: center !important; +} +.bodywebsite .justify-content-between { + justify-content: space-between !important; +} +.bodywebsite .justify-content-around { + justify-content: space-around !important; +} +.bodywebsite .align-items-start { + align-items: flex-start !important; +} +.bodywebsite .align-items-end { + align-items: flex-end !important; +} +.bodywebsite .align-items-center { + align-items: center !important; +} +.bodywebsite .align-items-baseline { + align-items: baseline !important; +} +.bodywebsite .align-items-stretch { + align-items: stretch !important; +} +.bodywebsite .align-content-start { + align-content: flex-start !important; +} +.bodywebsite .align-content-end { + align-content: flex-end !important; +} +.bodywebsite .align-content-center { + align-content: center !important; +} +.bodywebsite .align-content-between { + align-content: space-between !important; +} +.bodywebsite .align-content-around { + align-content: space-around !important; +} +.bodywebsite .align-content-stretch { + align-content: stretch !important; +} +.bodywebsite .align-self-auto { + align-self: auto !important; +} +.bodywebsite .align-self-start { + align-self: flex-start !important; +} +.bodywebsite .align-self-end { + align-self: flex-end !important; +} +.bodywebsite .align-self-center { + align-self: center !important; +} +.bodywebsite .align-self-baseline { + align-self: baseline !important; +} +.bodywebsite .align-self-stretch { + align-self: stretch !important; +} +@media (min-width: 576px) { + .bodywebsite .flex-sm-row { + flex-direction: row !important; + } + .bodywebsite .flex-sm-column { + flex-direction: column !important; + } + .bodywebsite .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .bodywebsite .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .bodywebsite .flex-sm-wrap { + flex-wrap: wrap !important; + } + .bodywebsite .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .bodywebsite .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .bodywebsite .justify-content-sm-start { + justify-content: flex-start !important; + } + .bodywebsite .justify-content-sm-end { + justify-content: flex-end !important; + } + .bodywebsite .justify-content-sm-center { + justify-content: center !important; + } + .bodywebsite .justify-content-sm-between { + justify-content: space-between !important; + } + .bodywebsite .justify-content-sm-around { + justify-content: space-around !important; + } + .bodywebsite .align-items-sm-start { + align-items: flex-start !important; + } + .bodywebsite .align-items-sm-end { + align-items: flex-end !important; + } + .bodywebsite .align-items-sm-center { + align-items: center !important; + } + .bodywebsite .align-items-sm-baseline { + align-items: baseline !important; + } + .bodywebsite .align-items-sm-stretch { + align-items: stretch !important; + } + .bodywebsite .align-content-sm-start { + align-content: flex-start !important; + } + .bodywebsite .align-content-sm-end { + align-content: flex-end !important; + } + .bodywebsite .align-content-sm-center { + align-content: center !important; + } + .bodywebsite .align-content-sm-between { + align-content: space-between !important; + } + .bodywebsite .align-content-sm-around { + align-content: space-around !important; + } + .bodywebsite .align-content-sm-stretch { + align-content: stretch !important; + } + .bodywebsite .align-self-sm-auto { + align-self: auto !important; + } + .bodywebsite .align-self-sm-start { + align-self: flex-start !important; + } + .bodywebsite .align-self-sm-end { + align-self: flex-end !important; + } + .bodywebsite .align-self-sm-center { + align-self: center !important; + } + .bodywebsite .align-self-sm-baseline { + align-self: baseline !important; + } + .bodywebsite .align-self-sm-stretch { + align-self: stretch !important; + } +} +@media (min-width: 768px) { + .bodywebsite .flex-md-row { + flex-direction: row !important; + } + .bodywebsite .flex-md-column { + flex-direction: column !important; + } + .bodywebsite .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .bodywebsite .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .bodywebsite .flex-md-wrap { + flex-wrap: wrap !important; + } + .bodywebsite .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .bodywebsite .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .bodywebsite .justify-content-md-start { + justify-content: flex-start !important; + } + .bodywebsite .justify-content-md-end { + justify-content: flex-end !important; + } + .bodywebsite .justify-content-md-center { + justify-content: center !important; + } + .bodywebsite .justify-content-md-between { + justify-content: space-between !important; + } + .bodywebsite .justify-content-md-around { + justify-content: space-around !important; + } + .bodywebsite .align-items-md-start { + align-items: flex-start !important; + } + .bodywebsite .align-items-md-end { + align-items: flex-end !important; + } + .bodywebsite .align-items-md-center { + align-items: center !important; + } + .bodywebsite .align-items-md-baseline { + align-items: baseline !important; + } + .bodywebsite .align-items-md-stretch { + align-items: stretch !important; + } + .bodywebsite .align-content-md-start { + align-content: flex-start !important; + } + .bodywebsite .align-content-md-end { + align-content: flex-end !important; + } + .bodywebsite .align-content-md-center { + align-content: center !important; + } + .bodywebsite .align-content-md-between { + align-content: space-between !important; + } + .bodywebsite .align-content-md-around { + align-content: space-around !important; + } + .bodywebsite .align-content-md-stretch { + align-content: stretch !important; + } + .bodywebsite .align-self-md-auto { + align-self: auto !important; + } + .bodywebsite .align-self-md-start { + align-self: flex-start !important; + } + .bodywebsite .align-self-md-end { + align-self: flex-end !important; + } + .bodywebsite .align-self-md-center { + align-self: center !important; + } + .bodywebsite .align-self-md-baseline { + align-self: baseline !important; + } + .bodywebsite .align-self-md-stretch { + align-self: stretch !important; + } +} +@media (min-width: 992px) { + .bodywebsite .flex-lg-row { + flex-direction: row !important; + } + .bodywebsite .flex-lg-column { + flex-direction: column !important; + } + .bodywebsite .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .bodywebsite .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .bodywebsite .flex-lg-wrap { + flex-wrap: wrap !important; + } + .bodywebsite .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .bodywebsite .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .bodywebsite .justify-content-lg-start { + justify-content: flex-start !important; + } + .bodywebsite .justify-content-lg-end { + justify-content: flex-end !important; + } + .bodywebsite .justify-content-lg-center { + justify-content: center !important; + } + .bodywebsite .justify-content-lg-between { + justify-content: space-between !important; + } + .bodywebsite .justify-content-lg-around { + justify-content: space-around !important; + } + .bodywebsite .align-items-lg-start { + align-items: flex-start !important; + } + .bodywebsite .align-items-lg-end { + align-items: flex-end !important; + } + .bodywebsite .align-items-lg-center { + align-items: center !important; + } + .bodywebsite .align-items-lg-baseline { + align-items: baseline !important; + } + .bodywebsite .align-items-lg-stretch { + align-items: stretch !important; + } + .bodywebsite .align-content-lg-start { + align-content: flex-start !important; + } + .bodywebsite .align-content-lg-end { + align-content: flex-end !important; + } + .bodywebsite .align-content-lg-center { + align-content: center !important; + } + .bodywebsite .align-content-lg-between { + align-content: space-between !important; + } + .bodywebsite .align-content-lg-around { + align-content: space-around !important; + } + .bodywebsite .align-content-lg-stretch { + align-content: stretch !important; + } + .bodywebsite .align-self-lg-auto { + align-self: auto !important; + } + .bodywebsite .align-self-lg-start { + align-self: flex-start !important; + } + .bodywebsite .align-self-lg-end { + align-self: flex-end !important; + } + .bodywebsite .align-self-lg-center { + align-self: center !important; + } + .bodywebsite .align-self-lg-baseline { + align-self: baseline !important; + } + .bodywebsite .align-self-lg-stretch { + align-self: stretch !important; + } +} +@media (min-width: 1200px) { + .bodywebsite .flex-xl-row { + flex-direction: row !important; + } + .bodywebsite .flex-xl-column { + flex-direction: column !important; + } + .bodywebsite .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .bodywebsite .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .bodywebsite .flex-xl-wrap { + flex-wrap: wrap !important; + } + .bodywebsite .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .bodywebsite .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .bodywebsite .justify-content-xl-start { + justify-content: flex-start !important; + } + .bodywebsite .justify-content-xl-end { + justify-content: flex-end !important; + } + .bodywebsite .justify-content-xl-center { + justify-content: center !important; + } + .bodywebsite .justify-content-xl-between { + justify-content: space-between !important; + } + .bodywebsite .justify-content-xl-around { + justify-content: space-around !important; + } + .bodywebsite .align-items-xl-start { + align-items: flex-start !important; + } + .bodywebsite .align-items-xl-end { + align-items: flex-end !important; + } + .bodywebsite .align-items-xl-center { + align-items: center !important; + } + .bodywebsite .align-items-xl-baseline { + align-items: baseline !important; + } + .bodywebsite .align-items-xl-stretch { + align-items: stretch !important; + } + .bodywebsite .align-content-xl-start { + align-content: flex-start !important; + } + .bodywebsite .align-content-xl-end { + align-content: flex-end !important; + } + .bodywebsite .align-content-xl-center { + align-content: center !important; + } + .bodywebsite .align-content-xl-between { + align-content: space-between !important; + } + .bodywebsite .align-content-xl-around { + align-content: space-around !important; + } + .bodywebsite .align-content-xl-stretch { + align-content: stretch !important; + } + .bodywebsite .align-self-xl-auto { + align-self: auto !important; + } + .bodywebsite .align-self-xl-start { + align-self: flex-start !important; + } + .bodywebsite .align-self-xl-end { + align-self: flex-end !important; + } + .bodywebsite .align-self-xl-center { + align-self: center !important; + } + .bodywebsite .align-self-xl-baseline { + align-self: baseline !important; + } + .bodywebsite .align-self-xl-stretch { + align-self: stretch !important; + } +} +@media (min-width: 1800px) { + .bodywebsite .flex-xxl-row { + flex-direction: row !important; + } + .bodywebsite .flex-xxl-column { + flex-direction: column !important; + } + .bodywebsite .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .bodywebsite .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .bodywebsite .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .bodywebsite .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .bodywebsite .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .bodywebsite .justify-content-xxl-start { + justify-content: flex-start !important; + } + .bodywebsite .justify-content-xxl-end { + justify-content: flex-end !important; + } + .bodywebsite .justify-content-xxl-center { + justify-content: center !important; + } + .bodywebsite .justify-content-xxl-between { + justify-content: space-between !important; + } + .bodywebsite .justify-content-xxl-around { + justify-content: space-around !important; + } + .bodywebsite .align-items-xxl-start { + align-items: flex-start !important; + } + .bodywebsite .align-items-xxl-end { + align-items: flex-end !important; + } + .bodywebsite .align-items-xxl-center { + align-items: center !important; + } + .bodywebsite .align-items-xxl-baseline { + align-items: baseline !important; + } + .bodywebsite .align-items-xxl-stretch { + align-items: stretch !important; + } + .bodywebsite .align-content-xxl-start { + align-content: flex-start !important; + } + .bodywebsite .align-content-xxl-end { + align-content: flex-end !important; + } + .bodywebsite .align-content-xxl-center { + align-content: center !important; + } + .bodywebsite .align-content-xxl-between { + align-content: space-between !important; + } + .bodywebsite .align-content-xxl-around { + align-content: space-around !important; + } + .bodywebsite .align-content-xxl-stretch { + align-content: stretch !important; + } + .bodywebsite .align-self-xxl-auto { + align-self: auto !important; + } + .bodywebsite .align-self-xxl-start { + align-self: flex-start !important; + } + .bodywebsite .align-self-xxl-end { + align-self: flex-end !important; + } + .bodywebsite .align-self-xxl-center { + align-self: center !important; + } + .bodywebsite .align-self-xxl-baseline { + align-self: baseline !important; + } + .bodywebsite .align-self-xxl-stretch { + align-self: stretch !important; + } +} +.bodywebsite .float-left { + float: left !important; +} +.bodywebsite .float-right { + float: right !important; +} +.bodywebsite .float-none { + float: none !important; +} +@media (min-width: 576px) { + .bodywebsite .float-sm-left { + float: left !important; + } + .bodywebsite .float-sm-right { + float: right !important; + } + .bodywebsite .float-sm-none { + float: none !important; + } +} +@media (min-width: 768px) { + .bodywebsite .float-md-left { + float: left !important; + } + .bodywebsite .float-md-right { + float: right !important; + } + .bodywebsite .float-md-none { + float: none !important; + } +} +@media (min-width: 992px) { + .bodywebsite .float-lg-left { + float: left !important; + } + .bodywebsite .float-lg-right { + float: right !important; + } + .bodywebsite .float-lg-none { + float: none !important; + } +} +@media (min-width: 1200px) { + .bodywebsite .float-xl-left { + float: left !important; + } + .bodywebsite .float-xl-right { + float: right !important; + } + .bodywebsite .float-xl-none { + float: none !important; + } +} +@media (min-width: 1800px) { + .bodywebsite .float-xxl-left { + float: left !important; + } + .bodywebsite .float-xxl-right { + float: right !important; + } + .bodywebsite .float-xxl-none { + float: none !important; + } +} +.bodywebsite .position-static { + position: static !important; +} +.bodywebsite .position-relative { + position: relative !important; +} +.bodywebsite .position-absolute { + position: absolute !important; +} +.bodywebsite .position-fixed { + position: fixed !important; +} +.bodywebsite .position-sticky { + position: sticky !important; +} +.bodywebsite .dolsticky { + position: sticky; + top: 0; + z-index: 100; +} +.bodywebsite .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} +.bodywebsite .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} +@supports (position: sticky) { + .bodywebsite .sticky-top { + position: sticky; + top: 0; + z-index: 1020; + } +} +.bodywebsite .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + clip-path: inset(50%); + border: 0; +} +.bodywebsite .sr-only-focusable:active, +.bodywebsite .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + clip-path: none; +} +.bodywebsite .w-25 { + width: 25% !important; +} +.bodywebsite .w-50 { + width: 50% !important; +} +.bodywebsite .w-75 { + width: 75% !important; +} +.bodywebsite .w-100 { + width: 100% !important; +} +.bodywebsite .h-25 { + height: 25% !important; +} +.bodywebsite .h-50 { + height: 50% !important; +} +.bodywebsite .h-75 { + height: 75% !important; +} +.bodywebsite .h-100 { + height: 100% !important; +} +.bodywebsite .mw-100 { + max-width: 100% !important; +} +.bodywebsite .mh-100 { + max-height: 100% !important; +} +.bodywebsite .m-0 { + margin: 0 !important; +} +.bodywebsite .mt-0, +.bodywebsite .my-0 { + margin-top: 0 !important; +} +.bodywebsite .mr-0, +.bodywebsite .mx-0 { + margin-right: 0 !important; +} +.bodywebsite .mb-0, +.bodywebsite .my-0 { + margin-bottom: 0 !important; +} +.bodywebsite .ml-0, +.bodywebsite .mx-0 { + margin-left: 0 !important; +} +.bodywebsite .m-1 { + margin: 0.25rem !important; +} +.bodywebsite .mt-1, +.bodywebsite .my-1 { + margin-top: 0.25rem !important; +} +.bodywebsite .mr-1, +.bodywebsite .mx-1 { + margin-right: 0.25rem !important; +} +.bodywebsite .mb-1, +.bodywebsite .my-1 { + margin-bottom: 0.25rem !important; +} +.bodywebsite .ml-1, +.bodywebsite .mx-1 { + margin-left: 0.25rem !important; +} +.bodywebsite .m-2 { + margin: 0.5rem !important; +} +.bodywebsite .mt-2, +.bodywebsite .my-2 { + margin-top: 0.5rem !important; +} +.bodywebsite .mr-2, +.bodywebsite .mx-2 { + margin-right: 0.5rem !important; +} +.bodywebsite .mb-2, +.bodywebsite .my-2 { + margin-bottom: 0.5rem !important; +} +.bodywebsite .ml-2, +.bodywebsite .mx-2 { + margin-left: 0.5rem !important; +} +.bodywebsite .m-3 { + margin: 1rem !important; +} +.bodywebsite .mt-3, +.bodywebsite .my-3 { + margin-top: 1rem !important; +} +.bodywebsite .mr-3, +.bodywebsite .mx-3 { + margin-right: 1rem !important; +} +.bodywebsite .mb-3, +.bodywebsite .my-3 { + margin-bottom: 1rem !important; +} +.bodywebsite .ml-3, +.bodywebsite .mx-3 { + margin-left: 1rem !important; +} +.bodywebsite .m-4 { + margin: 1.5rem !important; +} +.bodywebsite .mt-4, +.bodywebsite .my-4 { + margin-top: 1.5rem !important; +} +.bodywebsite .mr-4, +.bodywebsite .mx-4 { + margin-right: 1.5rem !important; +} +.bodywebsite .mb-4, +.bodywebsite .my-4 { + margin-bottom: 1.5rem !important; +} +.bodywebsite .ml-4, +.bodywebsite .mx-4 { + margin-left: 1.5rem !important; +} +.bodywebsite .m-5 { + margin: 3rem !important; +} +.bodywebsite .mt-5, +.bodywebsite .my-5 { + margin-top: 3rem !important; +} +.bodywebsite .mr-5, +.bodywebsite .mx-5 { + margin-right: 3rem !important; +} +.bodywebsite .mb-5, +.bodywebsite .my-5 { + margin-bottom: 3rem !important; +} +.bodywebsite .ml-5, +.bodywebsite .mx-5 { + margin-left: 3rem !important; +} +.bodywebsite .p-0 { + padding: 0 !important; +} +.bodywebsite .pt-0, +.bodywebsite .py-0 { + padding-top: 0 !important; +} +.bodywebsite .pr-0, +.bodywebsite .px-0 { + padding-right: 0 !important; +} +.bodywebsite .pb-0, +.bodywebsite .py-0 { + padding-bottom: 0 !important; +} +.bodywebsite .pl-0, +.bodywebsite .px-0 { + padding-left: 0 !important; +} +.bodywebsite .p-1 { + padding: 0.25rem !important; +} +.bodywebsite .pt-1, +.bodywebsite .py-1 { + padding-top: 0.25rem !important; +} +.bodywebsite .pr-1, +.bodywebsite .px-1 { + padding-right: 0.25rem !important; +} +.bodywebsite .pb-1, +.bodywebsite .py-1 { + padding-bottom: 0.25rem !important; +} +.bodywebsite .pl-1, +.bodywebsite .px-1 { + padding-left: 0.25rem !important; +} +.bodywebsite .p-2 { + padding: 0.5rem !important; +} +.bodywebsite .pt-2, +.bodywebsite .py-2 { + padding-top: 0.5rem !important; +} +.bodywebsite .pr-2, +.bodywebsite .px-2 { + padding-right: 0.5rem !important; +} +.bodywebsite .pb-2, +.bodywebsite .py-2 { + padding-bottom: 0.5rem !important; +} +.bodywebsite .pl-2, +.bodywebsite .px-2 { + padding-left: 0.5rem !important; +} +.bodywebsite .p-3 { + padding: 1rem !important; +} +.bodywebsite .pt-3, +.bodywebsite .py-3 { + padding-top: 1rem !important; +} +.bodywebsite .pr-3, +.bodywebsite .px-3 { + padding-right: 1rem !important; +} +.bodywebsite .pb-3, +.bodywebsite .py-3 { + padding-bottom: 1rem !important; +} +.bodywebsite .pl-3, +.bodywebsite .px-3 { + padding-left: 1rem !important; +} +.bodywebsite .p-4 { + padding: 1.5rem !important; +} +.bodywebsite .pt-4, +.bodywebsite .py-4 { + padding-top: 1.5rem !important; +} +.bodywebsite .pr-4, +.bodywebsite .px-4 { + padding-right: 1.5rem !important; +} +.bodywebsite .pb-4, +.bodywebsite .py-4 { + padding-bottom: 1.5rem !important; +} +.bodywebsite .pl-4, +.bodywebsite .px-4 { + padding-left: 1.5rem !important; +} +.bodywebsite .p-5 { + padding: 3rem !important; +} +.bodywebsite .pt-5, +.bodywebsite .py-5 { + padding-top: 3rem !important; +} +.bodywebsite .pr-5, +.bodywebsite .px-5 { + padding-right: 3rem !important; +} +.bodywebsite .pb-5, +.bodywebsite .py-5 { + padding-bottom: 3rem !important; +} +.bodywebsite .pl-5, +.bodywebsite .px-5 { + padding-left: 3rem !important; +} +.bodywebsite .m-auto { + margin: auto !important; +} +.bodywebsite .mt-auto, +.bodywebsite .my-auto { + margin-top: auto !important; +} +.bodywebsite .mr-auto, +.bodywebsite .mx-auto { + margin-right: auto !important; +} +.bodywebsite .mb-auto, +.bodywebsite .my-auto { + margin-bottom: auto !important; +} +.bodywebsite .ml-auto, +.bodywebsite .mx-auto { + margin-left: auto !important; +} +@media (min-width: 576px) { + .bodywebsite .m-sm-0 { + margin: 0 !important; + } + .bodywebsite .mt-sm-0, + .bodywebsite .my-sm-0 { + margin-top: 0 !important; + } + .bodywebsite .mr-sm-0, + .bodywebsite .mx-sm-0 { + margin-right: 0 !important; + } + .bodywebsite .mb-sm-0, + .bodywebsite .my-sm-0 { + margin-bottom: 0 !important; + } + .bodywebsite .ml-sm-0, + .bodywebsite .mx-sm-0 { + margin-left: 0 !important; + } + .bodywebsite .m-sm-1 { + margin: 0.25rem !important; + } + .bodywebsite .mt-sm-1, + .bodywebsite .my-sm-1 { + margin-top: 0.25rem !important; + } + .bodywebsite .mr-sm-1, + .bodywebsite .mx-sm-1 { + margin-right: 0.25rem !important; + } + .bodywebsite .mb-sm-1, + .bodywebsite .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .bodywebsite .ml-sm-1, + .bodywebsite .mx-sm-1 { + margin-left: 0.25rem !important; + } + .bodywebsite .m-sm-2 { + margin: 0.5rem !important; + } + .bodywebsite .mt-sm-2, + .bodywebsite .my-sm-2 { + margin-top: 0.5rem !important; + } + .bodywebsite .mr-sm-2, + .bodywebsite .mx-sm-2 { + margin-right: 0.5rem !important; + } + .bodywebsite .mb-sm-2, + .bodywebsite .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .bodywebsite .ml-sm-2, + .bodywebsite .mx-sm-2 { + margin-left: 0.5rem !important; + } + .bodywebsite .m-sm-3 { + margin: 1rem !important; + } + .bodywebsite .mt-sm-3, + .bodywebsite .my-sm-3 { + margin-top: 1rem !important; + } + .bodywebsite .mr-sm-3, + .bodywebsite .mx-sm-3 { + margin-right: 1rem !important; + } + .bodywebsite .mb-sm-3, + .bodywebsite .my-sm-3 { + margin-bottom: 1rem !important; + } + .bodywebsite .ml-sm-3, + .bodywebsite .mx-sm-3 { + margin-left: 1rem !important; + } + .bodywebsite .m-sm-4 { + margin: 1.5rem !important; + } + .bodywebsite .mt-sm-4, + .bodywebsite .my-sm-4 { + margin-top: 1.5rem !important; + } + .bodywebsite .mr-sm-4, + .bodywebsite .mx-sm-4 { + margin-right: 1.5rem !important; + } + .bodywebsite .mb-sm-4, + .bodywebsite .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .bodywebsite .ml-sm-4, + .bodywebsite .mx-sm-4 { + margin-left: 1.5rem !important; + } + .bodywebsite .m-sm-5 { + margin: 3rem !important; + } + .bodywebsite .mt-sm-5, + .bodywebsite .my-sm-5 { + margin-top: 3rem !important; + } + .bodywebsite .mr-sm-5, + .bodywebsite .mx-sm-5 { + margin-right: 3rem !important; + } + .bodywebsite .mb-sm-5, + .bodywebsite .my-sm-5 { + margin-bottom: 3rem !important; + } + .bodywebsite .ml-sm-5, + .bodywebsite .mx-sm-5 { + margin-left: 3rem !important; + } + .bodywebsite .p-sm-0 { + padding: 0 !important; + } + .bodywebsite .pt-sm-0, + .bodywebsite .py-sm-0 { + padding-top: 0 !important; + } + .bodywebsite .pr-sm-0, + .bodywebsite .px-sm-0 { + padding-right: 0 !important; + } + .bodywebsite .pb-sm-0, + .bodywebsite .py-sm-0 { + padding-bottom: 0 !important; + } + .bodywebsite .pl-sm-0, + .bodywebsite .px-sm-0 { + padding-left: 0 !important; + } + .bodywebsite .p-sm-1 { + padding: 0.25rem !important; + } + .bodywebsite .pt-sm-1, + .bodywebsite .py-sm-1 { + padding-top: 0.25rem !important; + } + .bodywebsite .pr-sm-1, + .bodywebsite .px-sm-1 { + padding-right: 0.25rem !important; + } + .bodywebsite .pb-sm-1, + .bodywebsite .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .bodywebsite .pl-sm-1, + .bodywebsite .px-sm-1 { + padding-left: 0.25rem !important; + } + .bodywebsite .p-sm-2 { + padding: 0.5rem !important; + } + .bodywebsite .pt-sm-2, + .bodywebsite .py-sm-2 { + padding-top: 0.5rem !important; + } + .bodywebsite .pr-sm-2, + .bodywebsite .px-sm-2 { + padding-right: 0.5rem !important; + } + .bodywebsite .pb-sm-2, + .bodywebsite .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .bodywebsite .pl-sm-2, + .bodywebsite .px-sm-2 { + padding-left: 0.5rem !important; + } + .bodywebsite .p-sm-3 { + padding: 1rem !important; + } + .bodywebsite .pt-sm-3, + .bodywebsite .py-sm-3 { + padding-top: 1rem !important; + } + .bodywebsite .pr-sm-3, + .bodywebsite .px-sm-3 { + padding-right: 1rem !important; + } + .bodywebsite .pb-sm-3, + .bodywebsite .py-sm-3 { + padding-bottom: 1rem !important; + } + .bodywebsite .pl-sm-3, + .bodywebsite .px-sm-3 { + padding-left: 1rem !important; + } + .bodywebsite .p-sm-4 { + padding: 1.5rem !important; + } + .bodywebsite .pt-sm-4, + .bodywebsite .py-sm-4 { + padding-top: 1.5rem !important; + } + .bodywebsite .pr-sm-4, + .bodywebsite .px-sm-4 { + padding-right: 1.5rem !important; + } + .bodywebsite .pb-sm-4, + .bodywebsite .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .bodywebsite .pl-sm-4, + .bodywebsite .px-sm-4 { + padding-left: 1.5rem !important; + } + .bodywebsite .p-sm-5 { + padding: 3rem !important; + } + .bodywebsite .pt-sm-5, + .bodywebsite .py-sm-5 { + padding-top: 3rem !important; + } + .bodywebsite .pr-sm-5, + .bodywebsite .px-sm-5 { + padding-right: 3rem !important; + } + .bodywebsite .pb-sm-5, + .bodywebsite .py-sm-5 { + padding-bottom: 3rem !important; + } + .bodywebsite .pl-sm-5, + .bodywebsite .px-sm-5 { + padding-left: 3rem !important; + } + .bodywebsite .m-sm-auto { + margin: auto !important; + } + .bodywebsite .mt-sm-auto, + .bodywebsite .my-sm-auto { + margin-top: auto !important; + } + .bodywebsite .mr-sm-auto, + .bodywebsite .mx-sm-auto { + margin-right: auto !important; + } + .bodywebsite .mb-sm-auto, + .bodywebsite .my-sm-auto { + margin-bottom: auto !important; + } + .bodywebsite .ml-sm-auto, + .bodywebsite .mx-sm-auto { + margin-left: auto !important; + } +} +@media (min-width: 768px) { + .bodywebsite .m-md-0 { + margin: 0 !important; + } + .bodywebsite .mt-md-0, + .bodywebsite .my-md-0 { + margin-top: 0 !important; + } + .bodywebsite .mr-md-0, + .bodywebsite .mx-md-0 { + margin-right: 0 !important; + } + .bodywebsite .mb-md-0, + .bodywebsite .my-md-0 { + margin-bottom: 0 !important; + } + .bodywebsite .ml-md-0, + .bodywebsite .mx-md-0 { + margin-left: 0 !important; + } + .bodywebsite .m-md-1 { + margin: 0.25rem !important; + } + .bodywebsite .mt-md-1, + .bodywebsite .my-md-1 { + margin-top: 0.25rem !important; + } + .bodywebsite .mr-md-1, + .bodywebsite .mx-md-1 { + margin-right: 0.25rem !important; + } + .bodywebsite .mb-md-1, + .bodywebsite .my-md-1 { + margin-bottom: 0.25rem !important; + } + .bodywebsite .ml-md-1, + .bodywebsite .mx-md-1 { + margin-left: 0.25rem !important; + } + .bodywebsite .m-md-2 { + margin: 0.5rem !important; + } + .bodywebsite .mt-md-2, + .bodywebsite .my-md-2 { + margin-top: 0.5rem !important; + } + .bodywebsite .mr-md-2, + .bodywebsite .mx-md-2 { + margin-right: 0.5rem !important; + } + .bodywebsite .mb-md-2, + .bodywebsite .my-md-2 { + margin-bottom: 0.5rem !important; + } + .bodywebsite .ml-md-2, + .bodywebsite .mx-md-2 { + margin-left: 0.5rem !important; + } + .bodywebsite .m-md-3 { + margin: 1rem !important; + } + .bodywebsite .mt-md-3, + .bodywebsite .my-md-3 { + margin-top: 1rem !important; + } + .bodywebsite .mr-md-3, + .bodywebsite .mx-md-3 { + margin-right: 1rem !important; + } + .bodywebsite .mb-md-3, + .bodywebsite .my-md-3 { + margin-bottom: 1rem !important; + } + .bodywebsite .ml-md-3, + .bodywebsite .mx-md-3 { + margin-left: 1rem !important; + } + .bodywebsite .m-md-4 { + margin: 1.5rem !important; + } + .bodywebsite .mt-md-4, + .bodywebsite .my-md-4 { + margin-top: 1.5rem !important; + } + .bodywebsite .mr-md-4, + .bodywebsite .mx-md-4 { + margin-right: 1.5rem !important; + } + .bodywebsite .mb-md-4, + .bodywebsite .my-md-4 { + margin-bottom: 1.5rem !important; + } + .bodywebsite .ml-md-4, + .bodywebsite .mx-md-4 { + margin-left: 1.5rem !important; + } + .bodywebsite .m-md-5 { + margin: 3rem !important; + } + .bodywebsite .mt-md-5, + .bodywebsite .my-md-5 { + margin-top: 3rem !important; + } + .bodywebsite .mr-md-5, + .bodywebsite .mx-md-5 { + margin-right: 3rem !important; + } + .bodywebsite .mb-md-5, + .bodywebsite .my-md-5 { + margin-bottom: 3rem !important; + } + .bodywebsite .ml-md-5, + .bodywebsite .mx-md-5 { + margin-left: 3rem !important; + } + .bodywebsite .p-md-0 { + padding: 0 !important; + } + .bodywebsite .pt-md-0, + .bodywebsite .py-md-0 { + padding-top: 0 !important; + } + .bodywebsite .pr-md-0, + .bodywebsite .px-md-0 { + padding-right: 0 !important; + } + .bodywebsite .pb-md-0, + .bodywebsite .py-md-0 { + padding-bottom: 0 !important; + } + .bodywebsite .pl-md-0, + .bodywebsite .px-md-0 { + padding-left: 0 !important; + } + .bodywebsite .p-md-1 { + padding: 0.25rem !important; + } + .bodywebsite .pt-md-1, + .bodywebsite .py-md-1 { + padding-top: 0.25rem !important; + } + .bodywebsite .pr-md-1, + .bodywebsite .px-md-1 { + padding-right: 0.25rem !important; + } + .bodywebsite .pb-md-1, + .bodywebsite .py-md-1 { + padding-bottom: 0.25rem !important; + } + .bodywebsite .pl-md-1, + .bodywebsite .px-md-1 { + padding-left: 0.25rem !important; + } + .bodywebsite .p-md-2 { + padding: 0.5rem !important; + } + .bodywebsite .pt-md-2, + .bodywebsite .py-md-2 { + padding-top: 0.5rem !important; + } + .bodywebsite .pr-md-2, + .bodywebsite .px-md-2 { + padding-right: 0.5rem !important; + } + .bodywebsite .pb-md-2, + .bodywebsite .py-md-2 { + padding-bottom: 0.5rem !important; + } + .bodywebsite .pl-md-2, + .bodywebsite .px-md-2 { + padding-left: 0.5rem !important; + } + .bodywebsite .p-md-3 { + padding: 1rem !important; + } + .bodywebsite .pt-md-3, + .bodywebsite .py-md-3 { + padding-top: 1rem !important; + } + .bodywebsite .pr-md-3, + .bodywebsite .px-md-3 { + padding-right: 1rem !important; + } + .bodywebsite .pb-md-3, + .bodywebsite .py-md-3 { + padding-bottom: 1rem !important; + } + .bodywebsite .pl-md-3, + .bodywebsite .px-md-3 { + padding-left: 1rem !important; + } + .bodywebsite .p-md-4 { + padding: 1.5rem !important; + } + .bodywebsite .pt-md-4, + .bodywebsite .py-md-4 { + padding-top: 1.5rem !important; + } + .bodywebsite .pr-md-4, + .bodywebsite .px-md-4 { + padding-right: 1.5rem !important; + } + .bodywebsite .pb-md-4, + .bodywebsite .py-md-4 { + padding-bottom: 1.5rem !important; + } + .bodywebsite .pl-md-4, + .bodywebsite .px-md-4 { + padding-left: 1.5rem !important; + } + .bodywebsite .p-md-5 { + padding: 3rem !important; + } + .bodywebsite .pt-md-5, + .bodywebsite .py-md-5 { + padding-top: 3rem !important; + } + .bodywebsite .pr-md-5, + .bodywebsite .px-md-5 { + padding-right: 3rem !important; + } + .bodywebsite .pb-md-5, + .bodywebsite .py-md-5 { + padding-bottom: 3rem !important; + } + .bodywebsite .pl-md-5, + .bodywebsite .px-md-5 { + padding-left: 3rem !important; + } + .bodywebsite .m-md-auto { + margin: auto !important; + } + .bodywebsite .mt-md-auto, + .bodywebsite .my-md-auto { + margin-top: auto !important; + } + .bodywebsite .mr-md-auto, + .bodywebsite .mx-md-auto { + margin-right: auto !important; + } + .bodywebsite .mb-md-auto, + .bodywebsite .my-md-auto { + margin-bottom: auto !important; + } + .bodywebsite .ml-md-auto, + .bodywebsite .mx-md-auto { + margin-left: auto !important; + } +} +@media (min-width: 992px) { + .bodywebsite .m-lg-0 { + margin: 0 !important; + } + .bodywebsite .mt-lg-0, + .bodywebsite .my-lg-0 { + margin-top: 0 !important; + } + .bodywebsite .mr-lg-0, + .bodywebsite .mx-lg-0 { + margin-right: 0 !important; + } + .bodywebsite .mb-lg-0, + .bodywebsite .my-lg-0 { + margin-bottom: 0 !important; + } + .bodywebsite .ml-lg-0, + .bodywebsite .mx-lg-0 { + margin-left: 0 !important; + } + .bodywebsite .m-lg-1 { + margin: 0.25rem !important; + } + .bodywebsite .mt-lg-1, + .bodywebsite .my-lg-1 { + margin-top: 0.25rem !important; + } + .bodywebsite .mr-lg-1, + .bodywebsite .mx-lg-1 { + margin-right: 0.25rem !important; + } + .bodywebsite .mb-lg-1, + .bodywebsite .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .bodywebsite .ml-lg-1, + .bodywebsite .mx-lg-1 { + margin-left: 0.25rem !important; + } + .bodywebsite .m-lg-2 { + margin: 0.5rem !important; + } + .bodywebsite .mt-lg-2, + .bodywebsite .my-lg-2 { + margin-top: 0.5rem !important; + } + .bodywebsite .mr-lg-2, + .bodywebsite .mx-lg-2 { + margin-right: 0.5rem !important; + } + .bodywebsite .mb-lg-2, + .bodywebsite .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .bodywebsite .ml-lg-2, + .bodywebsite .mx-lg-2 { + margin-left: 0.5rem !important; + } + .bodywebsite .m-lg-3 { + margin: 1rem !important; + } + .bodywebsite .mt-lg-3, + .bodywebsite .my-lg-3 { + margin-top: 1rem !important; + } + .bodywebsite .mr-lg-3, + .bodywebsite .mx-lg-3 { + margin-right: 1rem !important; + } + .bodywebsite .mb-lg-3, + .bodywebsite .my-lg-3 { + margin-bottom: 1rem !important; + } + .bodywebsite .ml-lg-3, + .bodywebsite .mx-lg-3 { + margin-left: 1rem !important; + } + .bodywebsite .m-lg-4 { + margin: 1.5rem !important; + } + .bodywebsite .mt-lg-4, + .bodywebsite .my-lg-4 { + margin-top: 1.5rem !important; + } + .bodywebsite .mr-lg-4, + .bodywebsite .mx-lg-4 { + margin-right: 1.5rem !important; + } + .bodywebsite .mb-lg-4, + .bodywebsite .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .bodywebsite .ml-lg-4, + .bodywebsite .mx-lg-4 { + margin-left: 1.5rem !important; + } + .bodywebsite .m-lg-5 { + margin: 3rem !important; + } + .bodywebsite .mt-lg-5, + .bodywebsite .my-lg-5 { + margin-top: 3rem !important; + } + .bodywebsite .mr-lg-5, + .bodywebsite .mx-lg-5 { + margin-right: 3rem !important; + } + .bodywebsite .mb-lg-5, + .bodywebsite .my-lg-5 { + margin-bottom: 3rem !important; + } + .bodywebsite .ml-lg-5, + .bodywebsite .mx-lg-5 { + margin-left: 3rem !important; + } + .bodywebsite .p-lg-0 { + padding: 0 !important; + } + .bodywebsite .pt-lg-0, + .bodywebsite .py-lg-0 { + padding-top: 0 !important; + } + .bodywebsite .pr-lg-0, + .bodywebsite .px-lg-0 { + padding-right: 0 !important; + } + .bodywebsite .pb-lg-0, + .bodywebsite .py-lg-0 { + padding-bottom: 0 !important; + } + .bodywebsite .pl-lg-0, + .bodywebsite .px-lg-0 { + padding-left: 0 !important; + } + .bodywebsite .p-lg-1 { + padding: 0.25rem !important; + } + .bodywebsite .pt-lg-1, + .bodywebsite .py-lg-1 { + padding-top: 0.25rem !important; + } + .bodywebsite .pr-lg-1, + .bodywebsite .px-lg-1 { + padding-right: 0.25rem !important; + } + .bodywebsite .pb-lg-1, + .bodywebsite .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .bodywebsite .pl-lg-1, + .bodywebsite .px-lg-1 { + padding-left: 0.25rem !important; + } + .bodywebsite .p-lg-2 { + padding: 0.5rem !important; + } + .bodywebsite .pt-lg-2, + .bodywebsite .py-lg-2 { + padding-top: 0.5rem !important; + } + .bodywebsite .pr-lg-2, + .bodywebsite .px-lg-2 { + padding-right: 0.5rem !important; + } + .bodywebsite .pb-lg-2, + .bodywebsite .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .bodywebsite .pl-lg-2, + .bodywebsite .px-lg-2 { + padding-left: 0.5rem !important; + } + .bodywebsite .p-lg-3 { + padding: 1rem !important; + } + .bodywebsite .pt-lg-3, + .bodywebsite .py-lg-3 { + padding-top: 1rem !important; + } + .bodywebsite .pr-lg-3, + .bodywebsite .px-lg-3 { + padding-right: 1rem !important; + } + .bodywebsite .pb-lg-3, + .bodywebsite .py-lg-3 { + padding-bottom: 1rem !important; + } + .bodywebsite .pl-lg-3, + .bodywebsite .px-lg-3 { + padding-left: 1rem !important; + } + .bodywebsite .p-lg-4 { + padding: 1.5rem !important; + } + .bodywebsite .pt-lg-4, + .bodywebsite .py-lg-4 { + padding-top: 1.5rem !important; + } + .bodywebsite .pr-lg-4, + .bodywebsite .px-lg-4 { + padding-right: 1.5rem !important; + } + .bodywebsite .pb-lg-4, + .bodywebsite .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .bodywebsite .pl-lg-4, + .bodywebsite .px-lg-4 { + padding-left: 1.5rem !important; + } + .bodywebsite .p-lg-5 { + padding: 3rem !important; + } + .bodywebsite .pt-lg-5, + .bodywebsite .py-lg-5 { + padding-top: 3rem !important; + } + .bodywebsite .pr-lg-5, + .bodywebsite .px-lg-5 { + padding-right: 3rem !important; + } + .bodywebsite .pb-lg-5, + .bodywebsite .py-lg-5 { + padding-bottom: 3rem !important; + } + .bodywebsite .pl-lg-5, + .bodywebsite .px-lg-5 { + padding-left: 3rem !important; + } + .bodywebsite .m-lg-auto { + margin: auto !important; + } + .bodywebsite .mt-lg-auto, + .bodywebsite .my-lg-auto { + margin-top: auto !important; + } + .bodywebsite .mr-lg-auto, + .bodywebsite .mx-lg-auto { + margin-right: auto !important; + } + .bodywebsite .mb-lg-auto, + .bodywebsite .my-lg-auto { + margin-bottom: auto !important; + } + .bodywebsite .ml-lg-auto, + .bodywebsite .mx-lg-auto { + margin-left: auto !important; + } +} +@media (min-width: 1200px) { + .bodywebsite .m-xl-0 { + margin: 0 !important; + } + .bodywebsite .mt-xl-0, + .bodywebsite .my-xl-0 { + margin-top: 0 !important; + } + .bodywebsite .mr-xl-0, + .bodywebsite .mx-xl-0 { + margin-right: 0 !important; + } + .bodywebsite .mb-xl-0, + .bodywebsite .my-xl-0 { + margin-bottom: 0 !important; + } + .bodywebsite .ml-xl-0, + .bodywebsite .mx-xl-0 { + margin-left: 0 !important; + } + .bodywebsite .m-xl-1 { + margin: 0.25rem !important; + } + .bodywebsite .mt-xl-1, + .bodywebsite .my-xl-1 { + margin-top: 0.25rem !important; + } + .bodywebsite .mr-xl-1, + .bodywebsite .mx-xl-1 { + margin-right: 0.25rem !important; + } + .bodywebsite .mb-xl-1, + .bodywebsite .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .bodywebsite .ml-xl-1, + .bodywebsite .mx-xl-1 { + margin-left: 0.25rem !important; + } + .bodywebsite .m-xl-2 { + margin: 0.5rem !important; + } + .bodywebsite .mt-xl-2, + .bodywebsite .my-xl-2 { + margin-top: 0.5rem !important; + } + .bodywebsite .mr-xl-2, + .bodywebsite .mx-xl-2 { + margin-right: 0.5rem !important; + } + .bodywebsite .mb-xl-2, + .bodywebsite .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .bodywebsite .ml-xl-2, + .bodywebsite .mx-xl-2 { + margin-left: 0.5rem !important; + } + .bodywebsite .m-xl-3 { + margin: 1rem !important; + } + .bodywebsite .mt-xl-3, + .bodywebsite .my-xl-3 { + margin-top: 1rem !important; + } + .bodywebsite .mr-xl-3, + .bodywebsite .mx-xl-3 { + margin-right: 1rem !important; + } + .bodywebsite .mb-xl-3, + .bodywebsite .my-xl-3 { + margin-bottom: 1rem !important; + } + .bodywebsite .ml-xl-3, + .bodywebsite .mx-xl-3 { + margin-left: 1rem !important; + } + .bodywebsite .m-xl-4 { + margin: 1.5rem !important; + } + .bodywebsite .mt-xl-4, + .bodywebsite .my-xl-4 { + margin-top: 1.5rem !important; + } + .bodywebsite .mr-xl-4, + .bodywebsite .mx-xl-4 { + margin-right: 1.5rem !important; + } + .bodywebsite .mb-xl-4, + .bodywebsite .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .bodywebsite .ml-xl-4, + .bodywebsite .mx-xl-4 { + margin-left: 1.5rem !important; + } + .bodywebsite .m-xl-5 { + margin: 3rem !important; + } + .bodywebsite .mt-xl-5, + .bodywebsite .my-xl-5 { + margin-top: 3rem !important; + } + .bodywebsite .mr-xl-5, + .bodywebsite .mx-xl-5 { + margin-right: 3rem !important; + } + .bodywebsite .mb-xl-5, + .bodywebsite .my-xl-5 { + margin-bottom: 3rem !important; + } + .bodywebsite .ml-xl-5, + .bodywebsite .mx-xl-5 { + margin-left: 3rem !important; + } + .bodywebsite .p-xl-0 { + padding: 0 !important; + } + .bodywebsite .pt-xl-0, + .bodywebsite .py-xl-0 { + padding-top: 0 !important; + } + .bodywebsite .pr-xl-0, + .bodywebsite .px-xl-0 { + padding-right: 0 !important; + } + .bodywebsite .pb-xl-0, + .bodywebsite .py-xl-0 { + padding-bottom: 0 !important; + } + .bodywebsite .pl-xl-0, + .bodywebsite .px-xl-0 { + padding-left: 0 !important; + } + .bodywebsite .p-xl-1 { + padding: 0.25rem !important; + } + .bodywebsite .pt-xl-1, + .bodywebsite .py-xl-1 { + padding-top: 0.25rem !important; + } + .bodywebsite .pr-xl-1, + .bodywebsite .px-xl-1 { + padding-right: 0.25rem !important; + } + .bodywebsite .pb-xl-1, + .bodywebsite .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .bodywebsite .pl-xl-1, + .bodywebsite .px-xl-1 { + padding-left: 0.25rem !important; + } + .bodywebsite .p-xl-2 { + padding: 0.5rem !important; + } + .bodywebsite .pt-xl-2, + .bodywebsite .py-xl-2 { + padding-top: 0.5rem !important; + } + .bodywebsite .pr-xl-2, + .bodywebsite .px-xl-2 { + padding-right: 0.5rem !important; + } + .bodywebsite .pb-xl-2, + .bodywebsite .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .bodywebsite .pl-xl-2, + .bodywebsite .px-xl-2 { + padding-left: 0.5rem !important; + } + .bodywebsite .p-xl-3 { + padding: 1rem !important; + } + .bodywebsite .pt-xl-3, + .bodywebsite .py-xl-3 { + padding-top: 1rem !important; + } + .bodywebsite .pr-xl-3, + .bodywebsite .px-xl-3 { + padding-right: 1rem !important; + } + .bodywebsite .pb-xl-3, + .bodywebsite .py-xl-3 { + padding-bottom: 1rem !important; + } + .bodywebsite .pl-xl-3, + .bodywebsite .px-xl-3 { + padding-left: 1rem !important; + } + .bodywebsite .p-xl-4 { + padding: 1.5rem !important; + } + .bodywebsite .pt-xl-4, + .bodywebsite .py-xl-4 { + padding-top: 1.5rem !important; + } + .bodywebsite .pr-xl-4, + .bodywebsite .px-xl-4 { + padding-right: 1.5rem !important; + } + .bodywebsite .pb-xl-4, + .bodywebsite .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .bodywebsite .pl-xl-4, + .bodywebsite .px-xl-4 { + padding-left: 1.5rem !important; + } + .bodywebsite .p-xl-5 { + padding: 3rem !important; + } + .bodywebsite .pt-xl-5, + .bodywebsite .py-xl-5 { + padding-top: 3rem !important; + } + .bodywebsite .pr-xl-5, + .bodywebsite .px-xl-5 { + padding-right: 3rem !important; + } + .bodywebsite .pb-xl-5, + .bodywebsite .py-xl-5 { + padding-bottom: 3rem !important; + } + .bodywebsite .pl-xl-5, + .bodywebsite .px-xl-5 { + padding-left: 3rem !important; + } + .bodywebsite .m-xl-auto { + margin: auto !important; + } + .bodywebsite .mt-xl-auto, + .bodywebsite .my-xl-auto { + margin-top: auto !important; + } + .bodywebsite .mr-xl-auto, + .bodywebsite .mx-xl-auto { + margin-right: auto !important; + } + .bodywebsite .mb-xl-auto, + .bodywebsite .my-xl-auto { + margin-bottom: auto !important; + } + .bodywebsite .ml-xl-auto, + .bodywebsite .mx-xl-auto { + margin-left: auto !important; + } +} +@media (min-width: 1800px) { + .bodywebsite .m-xxl-0 { + margin: 0 !important; + } + .bodywebsite .mt-xxl-0, + .bodywebsite .my-xxl-0 { + margin-top: 0 !important; + } + .bodywebsite .mr-xxl-0, + .bodywebsite .mx-xxl-0 { + margin-right: 0 !important; + } + .bodywebsite .mb-xxl-0, + .bodywebsite .my-xxl-0 { + margin-bottom: 0 !important; + } + .bodywebsite .ml-xxl-0, + .bodywebsite .mx-xxl-0 { + margin-left: 0 !important; + } + .bodywebsite .m-xxl-1 { + margin: 0.25rem !important; + } + .bodywebsite .mt-xxl-1, + .bodywebsite .my-xxl-1 { + margin-top: 0.25rem !important; + } + .bodywebsite .mr-xxl-1, + .bodywebsite .mx-xxl-1 { + margin-right: 0.25rem !important; + } + .bodywebsite .mb-xxl-1, + .bodywebsite .my-xxl-1 { + margin-bottom: 0.25rem !important; + } + .bodywebsite .ml-xxl-1, + .bodywebsite .mx-xxl-1 { + margin-left: 0.25rem !important; + } + .bodywebsite .m-xxl-2 { + margin: 0.5rem !important; + } + .bodywebsite .mt-xxl-2, + .bodywebsite .my-xxl-2 { + margin-top: 0.5rem !important; + } + .bodywebsite .mr-xxl-2, + .bodywebsite .mx-xxl-2 { + margin-right: 0.5rem !important; + } + .bodywebsite .mb-xxl-2, + .bodywebsite .my-xxl-2 { + margin-bottom: 0.5rem !important; + } + .bodywebsite .ml-xxl-2, + .bodywebsite .mx-xxl-2 { + margin-left: 0.5rem !important; + } + .bodywebsite .m-xxl-3 { + margin: 1rem !important; + } + .bodywebsite .mt-xxl-3, + .bodywebsite .my-xxl-3 { + margin-top: 1rem !important; + } + .bodywebsite .mr-xxl-3, + .bodywebsite .mx-xxl-3 { + margin-right: 1rem !important; + } + .bodywebsite .mb-xxl-3, + .bodywebsite .my-xxl-3 { + margin-bottom: 1rem !important; + } + .bodywebsite .ml-xxl-3, + .bodywebsite .mx-xxl-3 { + margin-left: 1rem !important; + } + .bodywebsite .m-xxl-4 { + margin: 1.5rem !important; + } + .bodywebsite .mt-xxl-4, + .bodywebsite .my-xxl-4 { + margin-top: 1.5rem !important; + } + .bodywebsite .mr-xxl-4, + .bodywebsite .mx-xxl-4 { + margin-right: 1.5rem !important; + } + .bodywebsite .mb-xxl-4, + .bodywebsite .my-xxl-4 { + margin-bottom: 1.5rem !important; + } + .bodywebsite .ml-xxl-4, + .bodywebsite .mx-xxl-4 { + margin-left: 1.5rem !important; + } + .bodywebsite .m-xxl-5 { + margin: 3rem !important; + } + .bodywebsite .mt-xxl-5, + .bodywebsite .my-xxl-5 { + margin-top: 3rem !important; + } + .bodywebsite .mr-xxl-5, + .bodywebsite .mx-xxl-5 { + margin-right: 3rem !important; + } + .bodywebsite .mb-xxl-5, + .bodywebsite .my-xxl-5 { + margin-bottom: 3rem !important; + } + .bodywebsite .ml-xxl-5, + .bodywebsite .mx-xxl-5 { + margin-left: 3rem !important; + } + .bodywebsite .p-xxl-0 { + padding: 0 !important; + } + .bodywebsite .pt-xxl-0, + .bodywebsite .py-xxl-0 { + padding-top: 0 !important; + } + .bodywebsite .pr-xxl-0, + .bodywebsite .px-xxl-0 { + padding-right: 0 !important; + } + .bodywebsite .pb-xxl-0, + .bodywebsite .py-xxl-0 { + padding-bottom: 0 !important; + } + .bodywebsite .pl-xxl-0, + .bodywebsite .px-xxl-0 { + padding-left: 0 !important; + } + .bodywebsite .p-xxl-1 { + padding: 0.25rem !important; + } + .bodywebsite .pt-xxl-1, + .bodywebsite .py-xxl-1 { + padding-top: 0.25rem !important; + } + .bodywebsite .pr-xxl-1, + .bodywebsite .px-xxl-1 { + padding-right: 0.25rem !important; + } + .bodywebsite .pb-xxl-1, + .bodywebsite .py-xxl-1 { + padding-bottom: 0.25rem !important; + } + .bodywebsite .pl-xxl-1, + .bodywebsite .px-xxl-1 { + padding-left: 0.25rem !important; + } + .bodywebsite .p-xxl-2 { + padding: 0.5rem !important; + } + .bodywebsite .pt-xxl-2, + .bodywebsite .py-xxl-2 { + padding-top: 0.5rem !important; + } + .bodywebsite .pr-xxl-2, + .bodywebsite .px-xxl-2 { + padding-right: 0.5rem !important; + } + .bodywebsite .pb-xxl-2, + .bodywebsite .py-xxl-2 { + padding-bottom: 0.5rem !important; + } + .bodywebsite .pl-xxl-2, + .bodywebsite .px-xxl-2 { + padding-left: 0.5rem !important; + } + .bodywebsite .p-xxl-3 { + padding: 1rem !important; + } + .bodywebsite .pt-xxl-3, + .bodywebsite .py-xxl-3 { + padding-top: 1rem !important; + } + .bodywebsite .pr-xxl-3, + .bodywebsite .px-xxl-3 { + padding-right: 1rem !important; + } + .bodywebsite .pb-xxl-3, + .bodywebsite .py-xxl-3 { + padding-bottom: 1rem !important; + } + .bodywebsite .pl-xxl-3, + .bodywebsite .px-xxl-3 { + padding-left: 1rem !important; + } + .bodywebsite .p-xxl-4 { + padding: 1.5rem !important; + } + .bodywebsite .pt-xxl-4, + .bodywebsite .py-xxl-4 { + padding-top: 1.5rem !important; + } + .bodywebsite .pr-xxl-4, + .bodywebsite .px-xxl-4 { + padding-right: 1.5rem !important; + } + .bodywebsite .pb-xxl-4, + .bodywebsite .py-xxl-4 { + padding-bottom: 1.5rem !important; + } + .bodywebsite .pl-xxl-4, + .bodywebsite .px-xxl-4 { + padding-left: 1.5rem !important; + } + .bodywebsite .p-xxl-5 { + padding: 3rem !important; + } + .bodywebsite .pt-xxl-5, + .bodywebsite .py-xxl-5 { + padding-top: 3rem !important; + } + .bodywebsite .pr-xxl-5, + .bodywebsite .px-xxl-5 { + padding-right: 3rem !important; + } + .bodywebsite .pb-xxl-5, + .bodywebsite .py-xxl-5 { + padding-bottom: 3rem !important; + } + .bodywebsite .pl-xxl-5, + .bodywebsite .px-xxl-5 { + padding-left: 3rem !important; + } + .bodywebsite .m-xxl-auto { + margin: auto !important; + } + .bodywebsite .mt-xxl-auto, + .bodywebsite .my-xxl-auto { + margin-top: auto !important; + } + .bodywebsite .mr-xxl-auto, + .bodywebsite .mx-xxl-auto { + margin-right: auto !important; + } + .bodywebsite .mb-xxl-auto, + .bodywebsite .my-xxl-auto { + margin-bottom: auto !important; + } + .bodywebsite .ml-xxl-auto, + .bodywebsite .mx-xxl-auto { + margin-left: auto !important; + } +} +.bodywebsite .text-justify { + text-align: justify !important; +} +.bodywebsite .text-nowrap { + white-space: nowrap !important; +} +.bodywebsite .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.bodywebsite .text-left { + text-align: left !important; +} +.bodywebsite .text-right { + text-align: right !important; +} +.bodywebsite .text-center { + text-align: center !important; +} +@media (min-width: 576px) { + .bodywebsite .text-sm-left { + text-align: left !important; + } + .bodywebsite .text-sm-right { + text-align: right !important; + } + .bodywebsite .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .bodywebsite .text-md-left { + text-align: left !important; + } + .bodywebsite .text-md-right { + text-align: right !important; + } + .bodywebsite .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .bodywebsite .text-lg-left { + text-align: left !important; + } + .bodywebsite .text-lg-right { + text-align: right !important; + } + .bodywebsite .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .bodywebsite .text-xl-left { + text-align: left !important; + } + .bodywebsite .text-xl-right { + text-align: right !important; + } + .bodywebsite .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1800px) { + .bodywebsite .text-xxl-left { + text-align: left !important; + } + .bodywebsite .text-xxl-right { + text-align: right !important; + } + .bodywebsite .text-xxl-center { + text-align: center !important; + } +} +.bodywebsite .text-lowercase { + text-transform: lowercase !important; +} +.bodywebsite .text-uppercase { + text-transform: uppercase !important; +} +.bodywebsite .text-capitalize { + text-transform: capitalize !important; +} +.bodywebsite .font-weight-light { + font-weight: 300 !important; +} +.bodywebsite .font-weight-normal { + font-weight: 400 !important; +} +.bodywebsite .font-weight-bold { + font-weight: 700 !important; +} +.bodywebsite .font-italic { + font-style: italic !important; +} +.bodywebsite .text-white { + color: #fff !important; +} +.bodywebsite .text-primary { + color: #007bff !important; +} +.bodywebsite a.text-primary:focus, +.bodywebsite a.text-primary:hover { + color: #0062cc !important; +} +.bodywebsite .text-secondary { + color: #868e96 !important; +} +.bodywebsite a.text-secondary:focus, +.bodywebsite a.text-secondary:hover { + color: #6c757d !important; +} +.bodywebsite .text-success { + color: #28a745 !important; +} +.bodywebsite a.text-success:focus, +.bodywebsite a.text-success:hover { + color: #1e7e34 !important; +} +.bodywebsite .text-info { + color: #17a2b8 !important; +} +.bodywebsite a.text-info:focus, +.bodywebsite a.text-info:hover { + color: #117a8b !important; +} +.bodywebsite .text-warning { + color: #ffc107 !important; +} +.bodywebsite a.text-warning:focus, +.bodywebsite a.text-warning:hover { + color: #d39e00 !important; +} +.bodywebsite .text-danger { + color: #dc3545 !important; +} +.bodywebsite a.text-danger:focus, +.bodywebsite a.text-danger:hover { + color: #bd2130 !important; +} +.bodywebsite .text-light { + color: #f8f9fa !important; +} +.bodywebsite a.text-light:focus, +.bodywebsite a.text-light:hover { + color: #dae0e5 !important; +} +.bodywebsite .text-dark { + color: #343a40 !important; +} +.bodywebsite a.text-dark:focus, +.bodywebsite a.text-dark:hover { + color: #1d2124 !important; +} +.bodywebsite .text-muted { + color: #dedede !important; +} +.bodywebsite .text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.bodywebsite .visible { + visibility: visible !important; +} +.bodywebsite .invisible { + visibility: hidden !important; +} +.bodywebsite .animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + opacity: 1; +} +.bodywebsite .animated:not(.page) { + will-change: transform; +} +.bodywebsite .animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +.bodywebsite .animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} +html .bodywebsite:not(.lt-ie10) .not-animated { + opacity: 0; +} +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.bodywebsite .fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.bodywebsite .fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/test2.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/test2.php new file mode 100644 index 00000000000..9939ba32bf6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/test2.php @@ -0,0 +1,4 @@ +ref.'/page126.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php new file mode 100644 index 00000000000..26adb3ef220 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php @@ -0,0 +1,278 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) { + $original_file = 'blog.rss'; +} + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) { + $attachment = false; +} +if (isset($_GET["attachment"])) { + $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +} +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) { + $attachment = false; +} + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) { + $type = GETPOST('type', 'alpha'); +} else { + $type = dol_mimetype($original_file); +} + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost', 'status'=>1); + if ($l) { + $filters['lang'] = $l; + } + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang($l); + $outputlangs->loadLangs(array("main", "other")); + $title = $desc = $outputlangs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) { + $result = 1; + } else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) { + $attachment = $_GET["attachment"]; + } + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) { + $contenttype = $_GET["contenttype"]; + } + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) { + header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + } + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) { + header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + } else { + header('Cache-Control: private, must-revalidate'); + } + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) { + print 'File '.$outputfile.' was empty.'; + } + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + // Get logos + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed']; + $sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) { + header('Content-Encoding: '.$encoding); + } + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } else { + header('Content-Disposition: inline; filename="'.$filename.'"'); + } + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) { + $db->close(); +} +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ajax-loading.gif b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ajax-loading.gif new file mode 100644 index 00000000000..f7e0378a8ca Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ajax-loading.gif differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/alberteinstein.jpg b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/alberteinstein.jpg new file mode 100644 index 00000000000..869d4762746 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/alberteinstein.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/apache.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/apache.png new file mode 100644 index 00000000000..73a380ba51c Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/apache.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_coder.webp b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_coder.webp new file mode 100644 index 00000000000..b2e8e72e9dd Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_coder.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_computer_coffee.webp b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_computer_coffee.webp new file mode 100644 index 00000000000..792fdadeeee Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_computer_coffee.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_dolibarr.webp b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_dolibarr.webp new file mode 100644 index 00000000000..66d7c020d21 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_dolibarr.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_rough-horn.webp b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_rough-horn.webp new file mode 100644 index 00000000000..7c9420b5591 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_rough-horn.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_sunset.webp b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_sunset.webp new file mode 100644 index 00000000000..a89a14fdec8 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/background_sunset.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/briefcase.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/briefcase.png new file mode 100644 index 00000000000..bf6fa1aa05c Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/briefcase.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/calendar.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/calendar.png new file mode 100644 index 00000000000..d065bdcf9f4 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/calendar.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/daviddoe.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/daviddoe.png new file mode 100644 index 00000000000..ec1fe6eacb9 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/daviddoe.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr.ico b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr.ico new file mode 100644 index 00000000000..611e4bf150e Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr.ico differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_256x256.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_256x256.png new file mode 100644 index 00000000000..970f841001b Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_256x256.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_logo.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_logo.png new file mode 100644 index 00000000000..8edd0660e60 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/dolibarr_logo.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-5.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-5.png new file mode 100644 index 00000000000..319e564ed3c Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-5.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-6.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-6.png new file mode 100644 index 00000000000..6991f9b0e72 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-6.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-quote.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-quote.png new file mode 100644 index 00000000000..3e903027e37 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/icon-quote.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/light-bulb.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/light-bulb.png new file mode 100644 index 00000000000..deaa9cf4ae1 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/light-bulb.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariadb.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariadb.png new file mode 100644 index 00000000000..26caeaea837 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariadb.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariecurie.jpg b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariecurie.jpg new file mode 100644 index 00000000000..c6aab3154f1 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/mariecurie.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/organization.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/organization.png new file mode 100644 index 00000000000..c77120cefae Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/organization.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ovh.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ovh.png new file mode 100644 index 00000000000..c4036d82bed Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ovh.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/package.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/package.png new file mode 100644 index 00000000000..f6ca65c0447 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/package.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/php.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/php.png new file mode 100644 index 00000000000..7b3e8ce8f6f Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/php.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/pierrecurie.jpg b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/pierrecurie.jpg new file mode 100644 index 00000000000..8ea6696ba45 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/pierrecurie.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_mini.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_mini.png new file mode 100644 index 00000000000..438d91ed1f9 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_mini.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_small.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_small.png new file mode 100644 index 00000000000..29580ebc5b0 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/apache_small.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_mini.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_mini.png new file mode 100644 index 00000000000..ed00343bf25 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_mini.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_small.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_small.png new file mode 100644 index 00000000000..fd206b7d0c4 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/mariadb_small.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_mini.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_mini.png new file mode 100644 index 00000000000..a4f3dc65994 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_mini.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_small.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_small.png new file mode 100644 index 00000000000..77dae0c33ac Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ovh_small.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_mini.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_mini.png new file mode 100644 index 00000000000..67b1977d1c5 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_mini.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_small.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_small.png new file mode 100644 index 00000000000..ee42122929d Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/php_small.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_mini.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_mini.png new file mode 100644 index 00000000000..8218af0ea05 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_mini.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_small.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_small.png new file mode 100644 index 00000000000..0f5df4b61ae Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/thumbs/ubuntu_small.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ubuntu.png b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ubuntu.png new file mode 100644 index 00000000000..4bd8dbe0a0c Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate/medias/image/websitekey/ubuntu.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/medias/js/websitekey/extlib.min.js b/htdocs/install/doctemplates/websites/website_template-corporate/medias/js/websitekey/extlib.min.js new file mode 100644 index 00000000000..7e0209f1df6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-corporate/medias/js/websitekey/extlib.min.js @@ -0,0 +1,853 @@ + + +/** + * @module Popper.js + * @author Federico Zivolo + * @see https://github.com/FezVrasta/popper.js + * @license MIT + * @version 1.11.0 + */ +(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=window.getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e||-1!==['HTML','BODY','#document'].indexOf(e.nodeName))return window.document.body;var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:window.document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return window.document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var f=a.commonAncestorContainer;if(e!==f&&t!==f||i.contains(n))return p(f)?f:r(f);var l=s(e);return l.host?d(l.host,t):d(e,s(t).host)}function a(e){var t=1=o.clientWidth&&i>=o.clientHeight}),f=0i[e]&&!t.escapeWithReference&&(n=z(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=V,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var o=t.element;if('string'==typeof o){if(o=e.instance.popper.querySelector(o),!o)return e;}else if(!e.instance.popper.contains(o))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var i=e.placement.split('-')[0],n=e.offsets,r=n.popper,p=n.reference,s=-1!==['left','right'].indexOf(i),d=s?'height':'width',a=s?'top':'left',f=s?'left':'top',l=s?'bottom':'right',m=O(o)[d];p[l]-mr[l]&&(e.offsets.popper[a]+=p[a]+m-r[l]);var h=p[a]+p[d]/2-m/2,g=h-c(e.offsets.popper)[a];return g=_(z(r[d]-m,g),0),e.arrowElement=o,e.offsets.arrow={},e.offsets.arrow[a]=Math.round(g),e.offsets.arrow[f]='',e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=w(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=L(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[i,n];break;case fe.CLOCKWISE:p=K(i);break;case fe.COUNTERCLOCKWISE:p=K(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=L(i);var a=e.offsets.popper,f=e.offsets.reference,l=V,m='left'===i&&l(a.right)>l(f.left)||'right'===i&&l(a.left)l(f.top)||'bottom'===i&&l(a.top)l(o.right),g=l(a.top)l(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,y=-1!==['top','bottom'].indexOf(i),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),w&&(r=j(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[t]-(s?n[p?'width':'height']:0),e.placement=L(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right0?n:null}catch(t){return null}},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger(r.end)},supportsTransitionEnd:function(){return Boolean(r)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(e,n,i){for(var s in i)if(Object.prototype.hasOwnProperty.call(i,s)){var r=i[s],o=n[s],l=o&&a.isElement(o)?"element":t(o);if(!new RegExp(r).test(l))throw new Error(e.toUpperCase()+': Option "'+s+'" provided type "'+l+'" but expected type "'+r+'".')}}};return r=i(),e.fn.emulateTransitionEnd=s,a.supportsTransitionEnd()&&(e.event.special[a.TRANSITION_END]=n()),a}(),r=function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t},o=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e},a=function(){var t="alert",n=e.fn[t],i={CLOSE:"close.bs.alert",CLOSED:"closed.bs.alert",CLICK_DATA_API:"click.bs.alert.data-api"},o={ALERT:"alert",FADE:"fade",SHOW:"show"},a=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=s.getSelectorFromElement(t),i=!1;return n&&(i=e(n)[0]),i||(i=e(t).closest("."+o.ALERT)[0]),i},n._triggerCloseEvent=function(t){var n=e.Event(i.CLOSE);return e(t).trigger(n),n},n._removeElement=function(t){var n=this;e(t).removeClass(o.SHOW),s.supportsTransitionEnd()&&e(t).hasClass(o.FADE)?e(t).one(s.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(150):this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger(i.CLOSED).remove()},t._jQueryInterface=function(n){return this.each(function(){var i=e(this),s=i.data("bs.alert");s||(s=new t(this),i.data("bs.alert",s)),"close"===n&&s[n](this)})},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(i.CLICK_DATA_API,{DISMISS:'[data-dismiss="alert"]'}.DISMISS,a._handleDismiss(new a)),e.fn[t]=a._jQueryInterface,e.fn[t].Constructor=a,e.fn[t].noConflict=function(){return e.fn[t]=n,a._jQueryInterface},a}(),l=function(){var t="button",n=e.fn[t],i={ACTIVE:"active",BUTTON:"btn",FOCUS:"focus"},s={DATA_TOGGLE_CARROT:'[data-toggle^="button"]',DATA_TOGGLE:'[data-toggle="buttons"]',INPUT:"input",ACTIVE:".active",BUTTON:".btn"},o={CLICK_DATA_API:"click.bs.button.data-api",FOCUS_BLUR_DATA_API:"focus.bs.button.data-api blur.bs.button.data-api"},a=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,r=e(this._element).closest(s.DATA_TOGGLE)[0];if(r){var o=e(this._element).find(s.INPUT)[0];if(o){if("radio"===o.type)if(o.checked&&e(this._element).hasClass(i.ACTIVE))t=!1;else{var a=e(r).find(s.ACTIVE)[0];a&&e(a).removeClass(i.ACTIVE)}if(t){if(o.hasAttribute("disabled")||r.hasAttribute("disabled")||o.classList.contains("disabled")||r.classList.contains("disabled"))return;o.checked=!e(this._element).hasClass(i.ACTIVE),e(o).trigger("change")}o.focus(),n=!1}}n&&this._element.setAttribute("aria-pressed",!e(this._element).hasClass(i.ACTIVE)),t&&e(this._element).toggleClass(i.ACTIVE)},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each(function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()})},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(o.CLICK_DATA_API,s.DATA_TOGGLE_CARROT,function(t){t.preventDefault();var n=t.target;e(n).hasClass(i.BUTTON)||(n=e(n).closest(s.BUTTON)),a._jQueryInterface.call(e(n),"toggle")}).on(o.FOCUS_BLUR_DATA_API,s.DATA_TOGGLE_CARROT,function(t){var n=e(t.target).closest(s.BUTTON)[0];e(n).toggleClass(i.FOCUS,/^focus(in)?$/.test(t.type))}),e.fn[t]=a._jQueryInterface,e.fn[t].Constructor=a,e.fn[t].noConflict=function(){return e.fn[t]=n,a._jQueryInterface},a}(),h=function(){var t="carousel",n="bs.carousel",i="."+n,o=e.fn[t],a={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},l={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},h={NEXT:"next",PREV:"prev",LEFT:"left",RIGHT:"right"},c={SLIDE:"slide"+i,SLID:"slid"+i,KEYDOWN:"keydown"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i,TOUCHEND:"touchend"+i,LOAD_DATA_API:"load.bs.carousel.data-api",CLICK_DATA_API:"click.bs.carousel.data-api"},u={CAROUSEL:"carousel",ACTIVE:"active",SLIDE:"slide",RIGHT:"carousel-item-right",LEFT:"carousel-item-left",NEXT:"carousel-item-next",PREV:"carousel-item-prev",ITEM:"carousel-item"},d={ACTIVE:".active",ACTIVE_ITEM:".active.carousel-item",ITEM:".carousel-item",NEXT_PREV:".carousel-item-next, .carousel-item-prev",INDICATORS:".carousel-indicators",DATA_SLIDE:"[data-slide], [data-slide-to]",DATA_RIDE:'[data-ride="carousel"]'},f=function(){function o(t,n){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(n),this._element=e(t)[0],this._indicatorsElement=e(this._element).find(d.INDICATORS)[0],this._addEventListeners()}var f=o.prototype;return f.next=function(){this._isSliding||this._slide(h.NEXT)},f.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},f.prev=function(){this._isSliding||this._slide(h.PREV)},f.pause=function(t){t||(this._isPaused=!0),e(this._element).find(d.NEXT_PREV)[0]&&s.supportsTransitionEnd()&&(s.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},f.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},f.to=function(t){var n=this;this._activeElement=e(this._element).find(d.ACTIVE_ITEM)[0];var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one(c.SLID,function(){return n.to(t)});else{if(i===t)return this.pause(),void this.cycle();var s=t>i?h.NEXT:h.PREV;this._slide(s,this._items[t])}},f.dispose=function(){e(this._element).off(i),e.removeData(this._element,n),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},f._getConfig=function(n){return n=e.extend({},a,n),s.typeCheckConfig(t,n,l),n},f._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on(c.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&(e(this._element).on(c.MOUSEENTER,function(e){return t.pause(e)}).on(c.MOUSELEAVE,function(e){return t.cycle(e)}),"ontouchstart"in document.documentElement&&e(this._element).on(c.TOUCHEND,function(){t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval)}))},f._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next();break;default:return}},f._getItemIndex=function(t){return this._items=e.makeArray(e(t).parent().find(d.ITEM)),this._items.indexOf(t)},f._getItemByDirection=function(t,e){var n=t===h.NEXT,i=t===h.PREV,s=this._getItemIndex(e),r=this._items.length-1;if((i&&0===s||n&&s===r)&&!this._config.wrap)return e;var o=(s+(t===h.PREV?-1:1))%this._items.length;return-1===o?this._items[this._items.length-1]:this._items[o]},f._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),s=this._getItemIndex(e(this._element).find(d.ACTIVE_ITEM)[0]),r=e.Event(c.SLIDE,{relatedTarget:t,direction:n,from:s,to:i});return e(this._element).trigger(r),r},f._setActiveIndicatorElement=function(t){if(this._indicatorsElement){e(this._indicatorsElement).find(d.ACTIVE).removeClass(u.ACTIVE);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&e(n).addClass(u.ACTIVE)}},f._slide=function(t,n){var i,r,o,a=this,l=e(this._element).find(d.ACTIVE_ITEM)[0],f=this._getItemIndex(l),_=n||l&&this._getItemByDirection(t,l),g=this._getItemIndex(_),m=Boolean(this._interval);if(t===h.NEXT?(i=u.LEFT,r=u.NEXT,o=h.LEFT):(i=u.RIGHT,r=u.PREV,o=h.RIGHT),_&&e(_).hasClass(u.ACTIVE))this._isSliding=!1;else if(!this._triggerSlideEvent(_,o).isDefaultPrevented()&&l&&_){this._isSliding=!0,m&&this.pause(),this._setActiveIndicatorElement(_);var p=e.Event(c.SLID,{relatedTarget:_,direction:o,from:f,to:g});s.supportsTransitionEnd()&&e(this._element).hasClass(u.SLIDE)?(e(_).addClass(r),s.reflow(_),e(l).addClass(i),e(_).addClass(i),e(l).one(s.TRANSITION_END,function(){e(_).removeClass(i+" "+r).addClass(u.ACTIVE),e(l).removeClass(u.ACTIVE+" "+r+" "+i),a._isSliding=!1,setTimeout(function(){return e(a._element).trigger(p)},0)}).emulateTransitionEnd(600)):(e(l).removeClass(u.ACTIVE),e(_).addClass(u.ACTIVE),this._isSliding=!1,e(this._element).trigger(p)),m&&this.cycle()}},o._jQueryInterface=function(t){return this.each(function(){var i=e(this).data(n),s=e.extend({},a,e(this).data());"object"==typeof t&&e.extend(s,t);var r="string"==typeof t?t:s.slide;if(i||(i=new o(this,s),e(this).data(n,i)),"number"==typeof t)i.to(t);else if("string"==typeof r){if("undefined"==typeof i[r])throw new Error('No method named "'+r+'"');i[r]()}else s.interval&&(i.pause(),i.cycle())})},o._dataApiClickHandler=function(t){var i=s.getSelectorFromElement(this);if(i){var r=e(i)[0];if(r&&e(r).hasClass(u.CAROUSEL)){var a=e.extend({},e(r).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(a.interval=!1),o._jQueryInterface.call(e(r),a),l&&e(r).data(n).to(l),t.preventDefault()}}},r(o,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return a}}]),o}();return e(document).on(c.CLICK_DATA_API,d.DATA_SLIDE,f._dataApiClickHandler),e(window).on(c.LOAD_DATA_API,function(){e(d.DATA_RIDE).each(function(){var t=e(this);f._jQueryInterface.call(t,t.data())})}),e.fn[t]=f._jQueryInterface,e.fn[t].Constructor=f,e.fn[t].noConflict=function(){return e.fn[t]=o,f._jQueryInterface},f}(),c=function(){var t="collapse",n="bs.collapse",i=e.fn[t],o={toggle:!0,parent:""},a={toggle:"boolean",parent:"(string|element)"},l={SHOW:"show.bs.collapse",SHOWN:"shown.bs.collapse",HIDE:"hide.bs.collapse",HIDDEN:"hidden.bs.collapse",CLICK_DATA_API:"click.bs.collapse.data-api"},h={SHOW:"show",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},c={WIDTH:"width",HEIGHT:"height"},u={ACTIVES:".show, .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},d=function(){function i(t,n){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(n),this._triggerArray=e.makeArray(e('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var i=e(u.DATA_TOGGLE),r=0;r0&&this._triggerArray.push(o)}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var d=i.prototype;return d.toggle=function(){e(this._element).hasClass(h.SHOW)?this.hide():this.show()},d.show=function(){var t=this;if(!this._isTransitioning&&!e(this._element).hasClass(h.SHOW)){var r,o;if(this._parent&&((r=e.makeArray(e(this._parent).children().children(u.ACTIVES))).length||(r=null)),!(r&&(o=e(r).data(n))&&o._isTransitioning)){var a=e.Event(l.SHOW);if(e(this._element).trigger(a),!a.isDefaultPrevented()){r&&(i._jQueryInterface.call(e(r),"hide"),o||e(r).data(n,null));var c=this._getDimension();e(this._element).removeClass(h.COLLAPSE).addClass(h.COLLAPSING),this._element.style[c]=0,this._triggerArray.length&&e(this._triggerArray).removeClass(h.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var d=function(){e(t._element).removeClass(h.COLLAPSING).addClass(h.COLLAPSE).addClass(h.SHOW),t._element.style[c]="",t.setTransitioning(!1),e(t._element).trigger(l.SHOWN)};if(s.supportsTransitionEnd()){var f="scroll"+(c[0].toUpperCase()+c.slice(1));e(this._element).one(s.TRANSITION_END,d).emulateTransitionEnd(600),this._element.style[c]=this._element[f]+"px"}else d()}}}},d.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass(h.SHOW)){var n=e.Event(l.HIDE);if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();if(this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",s.reflow(this._element),e(this._element).addClass(h.COLLAPSING).removeClass(h.COLLAPSE).removeClass(h.SHOW),this._triggerArray.length)for(var r=0;r0},g._getPopperConfig=function(){var t=this,n={};"function"==typeof this._config.offset?n.fn=function(n){return n.offsets=e.extend({},n.offsets,t._config.offset(n.offsets)||{}),n}:n.offset=this._config.offset;var i={placement:this._getPlacement(),modifiers:{offset:n,flip:{enabled:this._config.flip}}};return this._inNavbar&&(i.modifiers.applyStyle={enabled:!this._inNavbar}),i},a._jQueryInterface=function(t){return this.each(function(){var n=e(this).data(i),s="object"==typeof t?t:null;if(n||(n=new a(this,s),e(this).data(i,n)),"string"==typeof t){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},a._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var n=e.makeArray(e(u.DATA_TOGGLE)),s=0;s0&&r--,40===t.which&&rdocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},u._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},u._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
    ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip"},u={SHOW:"show",OUT:"out"},d={HIDE:"hide"+i,HIDDEN:"hidden"+i,SHOW:"show"+i,SHOWN:"shown"+i,INSERTED:"inserted"+i,CLICK:"click"+i,FOCUSIN:"focusin"+i,FOCUSOUT:"focusout"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i},f={FADE:"fade",SHOW:"show"},_={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner",ARROW:".arrow"},g={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},m=function(){function o(t,e){this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var m=o.prototype;return m.enable=function(){this._isEnabled=!0},m.disable=function(){this._isEnabled=!1},m.toggleEnabled=function(){this._isEnabled=!this._isEnabled},m.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass(f.SHOW))return void this._leave(null,this);this._enter(null,this)}},m.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},m.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var r=e.contains(this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!r)return;var a=this.getTipElement(),l=s.getUID(this.constructor.NAME);a.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(a).addClass(f.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,c=this._getAttachment(h);this.addAttachmentClass(c);var d=!1===this.config.container?document.body:e(this.config.container);e(a).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(a).appendTo(d),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,a,{placement:c,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:_.ARROW}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),e(a).addClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().on("mouseover",null,e.noop);var g=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),n===u.OUT&&t._leave(null,t)};s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(this.tip).one(s.TRANSITION_END,g).emulateTransitionEnd(o._TRANSITION_DURATION):g()}},m.hide=function(t){var n=this,i=this.getTipElement(),r=e.Event(this.constructor.Event.HIDE),o=function(){n._hoverState!==u.SHOW&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};e(this.element).trigger(r),r.isDefaultPrevented()||(e(i).removeClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().off("mouseover",null,e.noop),this._activeTrigger[g.CLICK]=!1,this._activeTrigger[g.FOCUS]=!1,this._activeTrigger[g.HOVER]=!1,s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(i).one(s.TRANSITION_END,o).emulateTransitionEnd(150):o(),this._hoverState="")},m.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},m.isWithContent=function(){return Boolean(this.getTitle())},m.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},m.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},m.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(_.TOOLTIP_INNER),this.getTitle()),t.removeClass(f.FADE+" "+f.SHOW)},m.setElementContent=function(t,n){var i=this.config.html;"object"==typeof n&&(n.nodeType||n.jquery)?i?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text()):t[i?"html":"text"](n)},m.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},m._getAttachment=function(t){return h[t.toUpperCase()]},m._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach(function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,function(e){return t.toggle(e)});else if(n!==g.MANUAL){var i=n===g.HOVER?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,s=n===g.HOVER?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,function(e){return t._enter(e)}).on(s,t.config.selector,function(e){return t._leave(e)})}e(t.element).closest(".modal").on("hide.bs.modal",function(){return t.hide()})}),this.config.selector?this.config=e.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},m._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},m._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?g.FOCUS:g.HOVER]=!0),e(n.getTipElement()).hasClass(f.SHOW)||n._hoverState===u.SHOW?n._hoverState=u.SHOW:(clearTimeout(n._timeout),n._hoverState=u.SHOW,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===u.SHOW&&n.show()},n.config.delay.show):n.show())},m._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?g.FOCUS:g.HOVER]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=u.OUT,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===u.OUT&&n.hide()},n.config.delay.hide):n.hide())},m._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},m._getConfig=function(n){return"number"==typeof(n=e.extend({},this.constructor.Default,e(this.element).data(),n)).delay&&(n.delay={show:n.delay,hide:n.delay}),"number"==typeof n.title&&(n.title=n.title.toString()),"number"==typeof n.content&&(n.content=n.content.toString()),s.typeCheckConfig(t,n,this.constructor.DefaultType),n},m._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},m._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(a);null!==n&&n.length>0&&t.removeClass(n.join(""))},m._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},m._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass(f.FADE),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},o._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.tooltip"),i="object"==typeof t&&t;if((n||!/dispose|hide/.test(t))&&(n||(n=new o(this,i),e(this).data("bs.tooltip",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(o,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return c}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return d}},{key:"EVENT_KEY",get:function(){return i}},{key:"DefaultType",get:function(){return l}}]),o}();return e.fn[t]=m._jQueryInterface,e.fn[t].Constructor=m,e.fn[t].noConflict=function(){return e.fn[t]=o,m._jQueryInterface},m}(),_=function(){var t="popover",n=".bs.popover",i=e.fn[t],s=new RegExp("(^|\\s)bs-popover\\S+","g"),a=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),l=e.extend({},f.DefaultType,{content:"(string|element|function)"}),h={FADE:"fade",SHOW:"show"},c={TITLE:".popover-header",CONTENT:".popover-body"},u={HIDE:"hide"+n,HIDDEN:"hidden"+n,SHOW:"show"+n,SHOWN:"shown"+n,INSERTED:"inserted"+n,CLICK:"click"+n,FOCUSIN:"focusin"+n,FOCUSOUT:"focusout"+n,MOUSEENTER:"mouseenter"+n,MOUSELEAVE:"mouseleave"+n},d=function(i){function d(){return i.apply(this,arguments)||this}o(d,i);var f=d.prototype;return f.isWithContent=function(){return this.getTitle()||this._getContent()},f.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},f.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},f.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(c.TITLE),this.getTitle()),this.setElementContent(t.find(c.CONTENT),this._getContent()),t.removeClass(h.FADE+" "+h.SHOW)},f._getContent=function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)},f._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(s);null!==n&&n.length>0&&t.removeClass(n.join(""))},d._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/destroy|hide/.test(t))&&(n||(n=new d(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(d,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return a}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return u}},{key:"EVENT_KEY",get:function(){return n}},{key:"DefaultType",get:function(){return l}}]),d}(f);return e.fn[t]=d._jQueryInterface,e.fn[t].Constructor=d,e.fn[t].noConflict=function(){return e.fn[t]=i,d._jQueryInterface},d}(),g=function(){var t="scrollspy",n=e.fn[t],i={offset:10,method:"auto",target:""},o={offset:"number",method:"string",target:"(string|element)"},a={ACTIVATE:"activate.bs.scrollspy",SCROLL:"scroll.bs.scrollspy",LOAD_DATA_API:"load.bs.scrollspy.data-api"},l={DROPDOWN_ITEM:"dropdown-item",DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active"},h={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},c={OFFSET:"offset",POSITION:"position"},u=function(){function n(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" "+h.NAV_LINKS+","+this._config.target+" "+h.LIST_ITEMS+","+this._config.target+" "+h.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on(a.SCROLL,function(t){return i._process(t)}),this.refresh(),this._process()}var u=n.prototype;return u.refresh=function(){var t=this,n=this._scrollElement!==this._scrollElement.window?c.POSITION:c.OFFSET,i="auto"===this._config.method?n:this._config.method,r=i===c.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),e.makeArray(e(this._selector)).map(function(t){var n,o=s.getSelectorFromElement(t);if(o&&(n=e(o)[0]),n){var a=n.getBoundingClientRect();if(a.width||a.height)return[e(n)[i]().top+r,o]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},u.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},u._getConfig=function(n){if("string"!=typeof(n=e.extend({},i,n)).target){var r=e(n.target).attr("id");r||(r=s.getUID(t),e(n.target).attr("id",r)),n.target="#"+r}return s.typeCheckConfig(t,n,o),n},u._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},u._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},u._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},u._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var s=this._offsets.length;s--;)this._activeTarget!==this._targets[s]&&t>=this._offsets[s]&&("undefined"==typeof this._offsets[s+1]||t li > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},a=function(){function t(t){this._element=t}var a=t.prototype;return a.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass(i.ACTIVE)||e(this._element).hasClass(i.DISABLED))){var r,a,l=e(this._element).closest(o.NAV_LIST_GROUP)[0],h=s.getSelectorFromElement(this._element);if(l){var c="UL"===l.nodeName?o.ACTIVE_UL:o.ACTIVE;a=e.makeArray(e(l).find(c)),a=a[a.length-1]}var u=e.Event(n.HIDE,{relatedTarget:this._element}),d=e.Event(n.SHOW,{relatedTarget:a});if(a&&e(a).trigger(u),e(this._element).trigger(d),!d.isDefaultPrevented()&&!u.isDefaultPrevented()){h&&(r=e(h)[0]),this._activate(this._element,l);var f=function(){var i=e.Event(n.HIDDEN,{relatedTarget:t._element}),s=e.Event(n.SHOWN,{relatedTarget:a});e(a).trigger(i),e(t._element).trigger(s)};r?this._activate(r,r.parentNode,f):f()}}},a.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},a._activate=function(t,n,r){var a,l=this,h=(a="UL"===n.nodeName?e(n).find(o.ACTIVE_UL):e(n).children(o.ACTIVE))[0],c=r&&s.supportsTransitionEnd()&&h&&e(h).hasClass(i.FADE),u=function(){return l._transitionComplete(t,h,c,r)};h&&c?e(h).one(s.TRANSITION_END,u).emulateTransitionEnd(150):u(),h&&e(h).removeClass(i.SHOW)},a._transitionComplete=function(t,n,r,a){if(n){e(n).removeClass(i.ACTIVE);var l=e(n.parentNode).find(o.DROPDOWN_ACTIVE_CHILD)[0];l&&e(l).removeClass(i.ACTIVE),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass(i.ACTIVE),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),r?(s.reflow(t),e(t).addClass(i.SHOW)):e(t).removeClass(i.FADE),t.parentNode&&e(t.parentNode).hasClass(i.DROPDOWN_MENU)){var h=e(t).closest(o.DROPDOWN)[0];h&&e(h).find(o.DROPDOWN_TOGGLE).addClass(i.ACTIVE),t.setAttribute("aria-expanded",!0)}a&&a()},t._jQueryInterface=function(n){return this.each(function(){var i=e(this),s=i.data("bs.tab");if(s||(s=new t(this),i.data("bs.tab",s)),"string"==typeof n){if("undefined"==typeof s[n])throw new Error('No method named "'+n+'"');s[n]()}})},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(n.CLICK_DATA_API,o.DATA_TOGGLE,function(t){t.preventDefault(),a._jQueryInterface.call(e(this),"show")}),e.fn.tab=a._jQueryInterface,e.fn.tab.Constructor=a,e.fn.tab.noConflict=function(){return e.fn.tab=t,a._jQueryInterface},a}();return function(){if("undefined"==typeof e)throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=s,t.Alert=a,t.Button=l,t.Carousel=h,t.Collapse=c,t.Dropdown=u,t.Modal=d,t.Popover=_,t.Scrollspy=g,t.Tab=m,t.Tooltip=f,t}({},$,Popper); + + +/** + * @module Regula + * @description An annotation-based form-validation framework in Javascript + * @license BSD + * @version 1.3.4 + * @copyright Robert Nyman, http://www.robertnyman.com + */ +(function(e,t){typeof define=="function"&&define.amd?define("utils/MapUtils",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.MapUtils=t())})(this,function(){return{iterateOverMap:function(e,t){var n=0;for(var r in e)e.hasOwnProperty(r)&&r!=="__size__"&&(t.call(e,r,e[r],n),n++)},exists:function(e,t){var n=!1,r=0;while(!n&&r0&&(typeof r=="undefined"||o&&o.test(a))&&s.push(u);return s}function n(e,t){var n=e.getAttribute&&e.getAttribute(t)||null;if(!n){var r=e.attributes;for(var i=0;i0)for(var s in e)e.hasOwnProperty(s)&&s!="__size__"&&t.put(i,s,e[s]);return i}function f(e,t,n,i){var s=o[y.constraintType],a=W(t,s,i),f={group:n,constraintName:e.constraintName,custom:u[s].custom,compound:u[s].compound,async:u[s].async,constraintParameters:y.params,failingElements:e.failingElements,message:a};return r.reportAsSingleViolation||(f.composingConstraintViolations=e.composingConstraintViolations||[]),f}var l=[],c=[];for(var h=0;h0){v=[];for(var h=0;h0){v===null&&(v=[]);var T=0;for(var h=0;h0)throw new r.Exception.IllegalArgumentException("No constraints have been bound to the specified elements: "+i.explode(p)+". "+r.explodeParameters(e));return n=M(n),D(n,e)}function N(e){var t=[],n={asyncContexts:[],syncContexts:[]};for(var s in a)if(a.hasOwnProperty(s)){var o=a[s];for(var u=0;u0)throw new r.Exception.IllegalArgumentException("No constraints have been bound to the specified elements: "+i.explode(t)+". "+r.explodeParameters(e));return n=M(n),D(n,e)}function C(e){var t=!1,n={groupedContexts:{}},i=0;while(i0)throw new r.Exception.IllegalArgumentException("The following elements: "+i.explode(n)+" were not found in one or more of the following group(s): ["+i.explode(t,",").replace(/,/g,", ")+"]. "+r.explodeParameters(e));var m=_(o);return e.groups=m.groups,o=m.uniqueConstraintsToValidate,P(e,o,s)}function A(e){var t=!1,n={groupedContexts:{}},r=0;while(r0&&(n=B(e));if(e.asyncContexts.length>0){if(!t.callback)throw new r.Exception.IllegalArgumentException("One or more constraints to be validated are asynchronous, but a callback has not been provided.");j(e,function(e){n.length>0?n=n.concat(e):n=e,t.callback(n)})}else t.callback&&t.callback(n);return n}function P(e,t,n){var i=F(e.groups,e.independent,t);if(n){if(!e.callback)throw new r.Exception.IllegalArgumentException("One or more constraints to be validated are asynchronous, but a callback has not been provided.");if(!e.independent&&i.length>0){var s=i[0].group,o=t.groupedContexts[s];t.groupedContexts={},t.groupedContexts[s]=o}I(e.groups,e.independent,t,function(t){i.length>0?i=i.concat(t):i=t,e.callback(i)})}else e.callback&&e.callback(i);return i}function H(e,t,n){var i=a[e];if(!i)throw new r.Exception.IllegalArgumentException("Undefined group in group list (group: "+e+", elementId: "+t+", constraint: "+n+")");var s=i[t];if(!s)throw new r.Exception.IllegalArgumentException("No constraints have been defined for the element with id: "+t+" in group "+e);var o=s[n];if(!o)throw new r.Exception.IllegalArgumentException("Constraint "+n+" in group "+e+" hasn't been bound to the element with id "+t);return{group:e,elementId:t,elementConstraint:n,params:o,async:u[n].async}}function B(e){var t=[],n=0;while(n0},max:function(e){var t=!0;return g(this,e)&&(t=parseFloat(this.value)<=parseFloat(e.value)),t},min:function(e){var t=!0;return g(this,e)&&(t=parseFloat(this.value)>=parseFloat(e.value)),t},range:function(e){var t=!0;return g(this,e)&&(t=this.value.replace(/\s/g,"")!=""&&parseFloat(this.value)<=parseFloat(e.max)&&parseFloat(this.value)>=parseFloat(e.min)),t},notBlank:function(e){return this.value.replace(/\s/g,"")!=""},blank:function(e){return this.value.replace(/\s/g,"")===""},matches:function(e){var t=!0;if(g(this,e)){var n,r;typeof e["regex"]=="string"?r=e.regex.replace(/^\//,"").replace(/\/$/,""):r=e.regex,typeof e["flags"]!="undefined"?n=new RegExp(r.toString().replace(/^\//,"").replace(/\/[^\/]*$/,""),e.flags):n=new RegExp(r),t=n.test(this.value)}return t},email:function(e){var t=!0;return g(this,e)&&(t=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(this.value)),t},alpha:function(e){var t=!0;return g(this,e)&&(t=/^[A-Za-z]+$/.test(this.value)),t},numeric:function(e){var t=!0;return g(this,e)&&(t=/^[0-9]+$/.test(this.value)),t},integer:function(e){var t=!0;return g(this,e)&&(t=/^-?[0-9]+$/.test(this.value)),t},real:function(e){var t=!0;return g(this,e)&&(t=/^-?([0-9]+(\.[0-9]+)?|\.[0-9]+)$/.test(this.value)),t},alphaNumeric:function(e){var t=!0;return g(this,e)&&(t=/^[0-9A-Za-z]+$/.test(this.value)),t},completelyFilled:function(e){var t=[];for(var n=0;n=e.min&&this.value.length<=e.max),t},digits:function(e){var t=!0;if(g(this,e)){var n=this.value.replace(/\s/g,""),r=n.split(/\./);t=!1,n.length>0&&(r.length==1&&(r[1]=""),e.integer>0?t=r[0].length<=e.integer:t=!0,e.fraction>0&&(t=t&&r[1].length<=e.fraction))}return t},past:function(e){var t=!0;if(g(this,e)){var n=y.call(this,e);t=n.dateToValidaten.dateToTestAgainst}return t},url:function(e){var t=!0;return g(this,e)&&(t=/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(this.value)),t},step:function(e){var t=!0;if(g(this,e)){var n=parseFloat(this.value),r=parseFloat(e.max),i=parseFloat(e.min),s=parseFloat(e.value);t=n<=r&&n>=i&&n%s===0}return t},html5Required:function(e){return!this.validity.valueMissing},html5Email:w,html5URL:w,html5Number:w,html5DateTime:w,html5DateTimeLocal:w,html5Date:w,html5Month:w,html5Time:w,html5Week:w,html5Range:w,html5Tel:w,html5Color:w,html5Pattern:function(e){return!this.validity.patternMismatch},html5MaxLength:function(e){return!this.validity.tooLong},html5Min:function(e){return!this.validity.rowUnderflow},html5Max:function(e){return!this.validity.rowOverflow},html5Step:function(e){return!this.validity.stepMismatch}};return{Validator:d,init:p,wrapValidatorWithEmptyCheck:b,initializePublicValidators:h,compoundValidator:m,validate:E,runValidatorFor:U,interpolateConstraintDefaultMessage:W,createPublicValidator:v}}),function(e,t){typeof define=="function"&&define.amd?define("domain/CompositionGraph",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.CompositionGraph=t())}(this,function(){function n(n){var r=n.type,i=n.name,s=n.parent,o=typeof e[r]=="undefined"?{visited:!1,name:i,type:r,parents:[],children:[]}:e[r];s==null?t.children.push(o):(s.children.push(o),o.parents.push(s)),e[r]=o}function r(){var e={},n=function r(t,n){var i=typeof e[t.type]=="undefined"?{visited:t.visited,name:t.name,type:t.type,parents:[],children:[]}:e[t.type];n!==null&&i.parents.push(n);for(var s=0;s0&&(s={error:!0,message:n.generateExceptionMessage(e,o[t.constraintType],"You seem to have provided some optional or required parameters for @"+o[t.constraintType]+", but you are still missing the following "+u.length+" required parameter(s): "+i.explode(u,", ")),data:null}),s}function d(e,n){var r=t.getNodeByType(s[e]);r==null&&(t.addNode({type:s[e],name:e,parent:null}),r=t.getNodeByType(s[e]));for(var i=0;i0&&t.successful)t=c(e),n.push(t.data);return t.data=n,t}function c(e){var n={successful:!0,message:"",data:null},i=e.shift();return r(i).length==0&&(i=e.shift()),i=="@"?n=h(e):n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid constraint. Constraint definitions need to start with '@'")+" "+n.message,data:null},n}function h(e){var r={Between:"Range",Matches:"Pattern",Empty:"Blank",NotEmpty:"NotBlank",IsAlpha:"Alpha",IsNumeric:"Integer",IsAlphaNumeric:"AlphaNumeric"},i=p(e);if(i.successful){a=i.data,a=r[a]?r[a]:a;if(n.constraintDefinitions[a]){i=m(e);if(i.successful){i=n.verifyConstraintDefinition(o,a,i.data);if(i.successful){var s=i.data;i.data={element:o,constraintName:a,definedParameters:s}}}}else i={successful:!1,message:t.generateExceptionMessage(o,a,"I cannot find the specified constraint name. If this is a custom constraint, you need to define it before you bind to it")+" "+i.message,data:null}}else i={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid constraint name in constraint definition")+" "+i.message,data:null};return i}function p(e){var n=r(e.shift()),i=d(n.charAt(0));if(i.successful){var s=1;while(s0&&i(n)==","&&s.successful)n.shift(),s=g(n),s.successful&&(e.put(u,s.data.name,s.data.value),r(i(n)).length==0&&n.shift());if(s.successful){var f=n.shift();r(f).length==0&&(f=n.shift()),f!=")"?s={successful:!1,message:t.generateExceptionMessage(o,a,"Cannot find matching closing ) in parameter list")+" "+s.message,data:null}:s.data=u}}else s={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter definition")+" "+s.message,data:null}}}else i(n)!==undefined&&i(n)!="@"&&(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unexpected character '"+i(n)+"'"+" after constraint definition")+" "+s.message,data:null});return s}function g(e){var n=y(e);if(n.successful){var r=n.data,i=e.shift();i=="="?(n=b(e),n.successful?n.data={name:r,value:n.data}:n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter value")+" "+n.message,data:null}):(e.unshift(i),n={successful:!1,message:t.generateExceptionMessage(o,a,"'=' expected after parameter name "+n.message),data:null})}else n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter name. You might have unmatched parentheses")+" "+n.message,data:null};return n}function y(e){var n=r(e.shift());n.length==0&&(n=e.shift());var i={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid starting character for parameter name. Can only include A-Z, a-z, and _"),data:null};if(typeof n!="undefined"){i=d(n.charAt(0));if(i.successful){var s=1;while(s0&&s.successful&&!u)i(e)=='"'?(u=!0,e.shift()):(s=k(e),r+=s.data);u||(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unterminated string literal"),data:null})}else e.unshift(n),s={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid quoted string"),data:null};return s.successful=s.successful&&u,s.data=r,s}function k(e){var t="",n=e.shift();return n=="\\"&&(t=e.shift()),{successful:!0,message:"",data:n+t}}function L(e){var n="",r=e.shift(),s={successful:!0,message:"",data:null};if(r=="/"){n=r;var u=!1;while(e.length>0&&s.successful&&!u)i(e)=="/"?(n+=e.shift(),u=!0):(s=k(e),n+=s.data);u||(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unterminated regex literal"),data:null})}else e.unshift(r),s={successful:!1,message:t.generateExceptionMessage(o,a,"Not a regular expression"),data:null};return s.successful=s.successful&&u,s.data=n,s}function A(e){var n=e.shift(),i={successful:!0,message:"",data:null};return r(n)=="true"||r(n)=="false"?i={successful:!0,message:"",data:n==="true"}:(e.unshift(n),i={successful:!1,message:t.generateExceptionMessage(o,a,"Not a boolean"),data:null}),i}function O(e){var n=[],s=e.shift(),u={successful:!0,message:"",data:null};if(s=="["){r(i(e)).length==0&&e.shift(),i(e)=="]"?u={successful:!0,message:"",data:""}:u=M(e);if(u.successful){n.push(u.data),r(i(e)).length==0&&e.shift();while(e.length>0&&i(e)==","&&u.successful)e.shift(),u=M(e),n.push(u.data),r(i(e)).length==0&&e.shift();u.data=n,s=e.shift(),r(s).length==0&&e.shift(),s!="]"&&(u={successful:!1,message:t.generateExceptionMessage(o,a,"Cannot find matching closing ] in group definition")+" "+u.message,data:null})}else u={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid group definition")+" "+u.message,data:null}}else e.unshift(s),u={successful:!1,message:t.generateExceptionMessage(o,a,"Not a valid group definition"),data:null};return u}function M(e){var n={successful:!0,message:"",data:""},i=r(e.shift());i.length==0&&(i=e.shift()),n=d(i.charAt(0));if(n.successful){var s=1;while(s0){var o=0;while(o0?h=t.deletedGroupIndices.pop():h=t.firstCustomGroupIndex++,t.Group[c]=h,t.ReverseGroup[h]=c,o[c]={}}o[c][n.id]||(o[c][n.id]={}),o[c][n.id][r]=u}if(i.constraintDefinitions[r].html5)if(n.getAttribute("type")!==null&&i.constraintDefinitions[r].inputType!==null&&n.getAttribute("type")!==i.constraintDefinitions[r].inputType)a={successful:!1,message:s.generateExceptionMessage(n,r,"Element type of "+n.getAttribute("type")+" conflicts with type of constraint @"+r+": "+i.constraintDefinitions[r].inputType),data:null};else{var p=i.constraintDefinitions[r].attribute,d=i.constraintDefinitions[r].inputType;(p!==null&&n.getAttribute(p)===null||d!==null&&n.getAttribute("type")===null)&&y(n,r,u)}return a}function y(e,t,n){if(t===i.ReverseConstraint[i.Constraint.HTML5Required])e.setAttribute("required","true");else{var r=i.constraintDefinitions[t];for(var s=0;s0&&!t)throw new s.Exception.IllegalArgumentException("Element with id "+r+" does not have any constraints bound to it. "+s.explodeParameters(e))}function w(e){var n=e.elementId,r=e.group,s=e.constraint,u=typeof o[t.ReverseGroup[t.Group.Default]][n]!="undefined";if(u&&typeof r!="undefined"&&typeof s=="undefined"){var a=t.ReverseGroup[r];u=typeof a!="undefined"&&typeof o[a][n]!="undefined"}else if(u&&typeof r=="undefined"&&typeof s!="undefined"){var f=i.ReverseConstraint[s];u=typeof f!="undefined"&&typeof o[t.ReverseGroup[t.Group.Default]][n][f]!="undefined"}else if(u&&typeof r!="undefined"&&typeof s!="undefined"){var a=t.ReverseGroup[r],f=i.ReverseConstraint[s];u=typeof a!="undefined"&&typeof f!="undefined"&&typeof o[a][n]!="undefined"&&typeof o[a][n][f]!="undefined"}return u}var o=null,u={};return{initializeBoundConstraints:a,resetBoundConstraints:f,getBoundConstraints:l,removeElementAndGroupFromBoundConstraintsIfEmpty:c,bindAfterParsing:p,bindHTML5ValidationConstraints:d,bindFromOptions:v,unbind:b,isBound:w}}),function(e,t){typeof define=="function"&&define.amd?define("regula",["utils/MapUtils","utils/DOMUtils","service/BindingService","service/ExceptionService","service/ConstraintService","service/ValidationService","service/GroupService"],t):(e.regula=t(e.regulaModules.MapUtils,e.regulaModules.DOMUtils,e.regulaModules.BindingService,e.regulaModules.ExceptionService,e.regulaModules.ConstraintService,e.regulaModules.ValidationService,e.regulaModules.GroupService),e.regula._modules=e.regulaModules,e.regulaModules=undefined)}(this,function(e,t,n,r,i,s,o){function f(t){e.iterateOverMap(t,function(e,t,n){typeof u[e]!="undefined"&&(u[e]=t)})}function l(e){var i={successful:!0,message:"",data:null};if(typeof e=="undefined"||!e)n.resetBoundConstraints(),u.enableHTML5Validation&&t.supportsHTML5Validation()&&(i=n.bindHTML5ValidationConstraints({element:null})),i.successful&&(i=n.bindAfterParsing({element:null}));else{var s=e.elements;if(typeof s=="undefined"||!s)u.enableHTML5Validation&&t.supportsHTML5Validation()&&typeof e.element!="undefined"&&e.element!==null&&(i=n.bindHTML5ValidationConstraints({element:e.element})),i.successful&&(i=n.bindFromOptions(e));else{var o=0;while(i.successful&&o0&&n.extend(!0,t,{elements:this.get()})),regula.bind(t),this},unbind:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{elements:this.get()})),regula.unbind(t),this},isBound:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{element:this.get(0)})),regula.isBound(t),this},validate:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{elements:this.get()})),regula.validate(t)},custom:function(e){return regula.custom(e),this},compound:function(e){return regula.compound(e),this},override:function(e){return regula.override(e),this}};i.on=i.bind,i.off=i.unbind,n.fn.regula=t,n.regula=t}); + + +/** + * @module jQuery Count To + * @author Matt Huggins + * @see https://github.com/mhuggins/jquery-countTo + * @license MIT + */ +!function(t){function e(t,e){return t.toFixed(e.decimals)}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,this.dataOptions(),i),this.init()};o.DEFAULTS={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:e,onUpdate:null,onComplete:null},o.prototype.init=function(){this.value=this.options.from,this.loops=Math.ceil(this.options.speed/this.options.refreshInterval),this.loopCount=0,this.increment=(this.options.to-this.options.from)/this.loops},o.prototype.dataOptions=function(){var t={from:this.$element.data("from"),to:this.$element.data("to"),speed:this.$element.data("speed"),refreshInterval:this.$element.data("refresh-interval"),decimals:this.$element.data("decimals")},e=Object.keys(t);for(var o in e){var i=e[o];"undefined"==typeof t[i]&&delete t[i]}return t},o.prototype.update=function(){this.value+=this.increment,this.loopCount++,this.render(),"function"==typeof this.options.onUpdate&&this.options.onUpdate.call(this.$element,this.value),this.loopCount>=this.loops&&(clearInterval(this.interval),this.value=this.options.to,"function"==typeof this.options.onComplete&&this.options.onComplete.call(this.$element,this.value))},o.prototype.render=function(){var t=this.options.formatter.call(this.$element,this.value,this.options);this.$element.text(t)},o.prototype.restart=function(){this.stop(),this.init(),this.start()},o.prototype.start=function(){this.stop(),this.render(),this.interval=setInterval(this.update.bind(this),this.options.refreshInterval)},o.prototype.stop=function(){this.interval&&clearInterval(this.interval)},o.prototype.toggle=function(){this.interval?this.stop():this.start()},t.fn.countTo=function(e){return this.each(function(){var i=t(this),n=i.data("countTo"),s=!n||"object"==typeof e,r="object"==typeof e?e:{},a="string"==typeof e?e:"start";s&&(n&&n.stop(),i.data("countTo",n=new o(this,r))),n[a].call(n)})}}(jQuery); + + +/** + * @module Swiper + * @description Most modern mobile touch slider and framework with hardware accelerated transitions + * @author Vladimir Kharlampidi + * @see http://www.idangero.us/swiper/ + * @licesne MIT + * @version 3.4.2 + */ +!function(){"use strict";var e,a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=y.params.autoplay,a=y.slides.eq(y.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||y.params.autoplay),y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=new(window.MutationObserver||window.WebkitMutationObserver)(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});t.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),y.observers.push(t)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents("."+y.params.slideClass).length>0&&0===y.container.parents("."+y.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev()),y.emit("onKeyPress",y,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=y.rtl?-1:1,s=p(e);if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(y.params.mousewheelInvert&&(a=-a),y.params.freeMode){var r=y.getWrapperTranslate()+a*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),y.emit("onScroll",y,e),y.params.autoplay&&y.params.autoplayDisableOnInteraction&&y.stopAutoplay(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(a<0)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext(),y.emit("onScroll",y,e);else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev(),y.emit("onScroll",y,e);y.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function m(a,t){a=e(a);var s,r,i,n=y.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery)h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var x in c[w])void 0===s[w][x]&&(s[w][x]=c[w][x]);var y=this;if(y.params=s,y.originalParams=h,y.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=e,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(t),0!==y.container.length)){if(y.container.length>1){var T=[];return y.container.each(function(){T.push(new a(this,s))}),T}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push(y.params.containerModifierClass+y.params.direction),y.params.freeMode&&y.classNames.push(y.params.containerModifierClass+"free-mode"),y.support.flexbox||(y.classNames.push(y.params.containerModifierClass+"no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push(y.params.containerModifierClass+"autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),y.params.touchReleaseOnEdges&&(y.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push(y.params.containerModifierClass+"3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push(y.params.containerModifierClass+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0),"fade"!==y.params.effect&&"flip"!==y.params.effect||(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,void 0===g&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=e(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass(y.params.paginationModifierClass+"clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass(y.params.paginationModifierClass+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=e(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=e(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push(y.params.containerModifierClass+"rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push(y.params.containerModifierClass+"multirow"),y.device.android&&y.classNames.push(y.params.containerModifierClass+"android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1,!1===y.params.allowSwipeToPrev&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1,!1===y.params.allowSwipeToNext&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1,y.params.grabCursor&&y.unsetGrabCursor()},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0,!0===y.params.allowSwipeToPrev&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0,!0===y.params.allowSwipeToNext&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0,y.params.grabCursor&&y.setGrabCursor()},y.setGrabCursor=function(e){y.container[0].style.cursor="move",y.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",y.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",y.container[0].style.cursor=e?"grabbing":"grab"},y.unsetGrabCursor=function(){y.container[0].style.cursor=""},y.params.grabCursor&&y.setGrabCursor(),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},y.preloadImages=function(){y.imagesToLoad=y.container.find("img");for(var e=0;e1)for(e=0;ey.slides.length)break;a.push(y.slides.eq(s)[0])}else a.push(y.slides.eq(y.activeIndex)[0]);for(e=0;et?r:t}t&&y.wrapper.css("height",t+"px")},y.updateContainerSize=function(){var e,a;e=void 0!==y.params.width?y.params.width:y.container[0].clientWidth,a=void 0!==y.params.height?y.params.height:y.container[0].clientHeight,0===e&&y.isHorizontal()||0===a&&!y.isHorizontal()||(e=e-parseInt(y.container.css("padding-left"),10)-parseInt(y.container.css("padding-right"),10),a=a-parseInt(y.container.css("padding-top"),10)-parseInt(y.container.css("padding-bottom"),10),y.width=e,y.height=a,y.size=y.isHorizontal()?y.width:y.height)},y.updateSlidesSize=function(){y.slides=y.wrapper.children("."+y.params.slideClass),y.snapGrid=[],y.slidesGrid=[],y.slidesSizesGrid=[];var e,a=y.params.spaceBetween,t=-y.params.slidesOffsetBefore,s=0,i=0;if(void 0!==y.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var u,c,g;"column"===y.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),u=c+g*n/l,m.css({"-webkit-box-ordinal-group":u,"-moz-box-ordinal-group":u,"-ms-flex-order":u,"-webkit-order":u,order:u})):(g=Math.floor(e/p),c=e-g*p),m.css("margin-"+(y.isHorizontal()?"top":"left"),0!==g&&y.params.spaceBetween&&y.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==m.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?m.outerWidth(!0):m.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-y.size/2-a),0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var h;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.support.flexbox&&!y.params.setWrapperSize||(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(h=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;ey.size&&(s=!0));for(a=y.activeIndex-1;a>=0;a--)y.slides[a]&&!s&&(r+=y.slides[a].swiperSlideSize,t++,r>y.size&&(s=!0))}else for(e=y.activeIndex+1;e=0&&i0&&n<=y.size||i<=0&&n>=y.size)&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){void 0===e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);y.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),(t=Math.floor(e/y.params.slidesPerGroup))>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses(),y.updateRealIndex())},y.updateRealIndex=function(){y.realIndex=parseInt(y.slides.eq(y.activeIndex).attr("data-swiper-slide-index")||y.activeIndex,10)},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass+" "+y.params.slideDuplicateActiveClass+" "+y.params.slideDuplicateNextClass+" "+y.params.slideDuplicatePrevClass);var a=y.slides.eq(y.activeIndex);a.addClass(y.params.slideActiveClass),s.loop&&(a.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass));var t=a.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&(t=y.slides.eq(0)).addClass(y.params.slideNextClass);var r=a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===r.length&&(r=y.slides.eq(-1)).addClass(y.params.slidePrevClass),s.loop&&(t.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass),r.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass)),y.paginationContainer&&y.paginationContainer.length>0){var i,n=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?((i=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup))>y.slides.length-1-2*y.loopedSlides&&(i-=y.slides.length-2*y.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==y.params.paginationType&&(i=n+i)):i=void 0!==y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){e(this).index()===i&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(i).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(i+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(n)),"progress"===y.params.paginationType){var o=(i+1)/n,l=o,p=1;y.isHorizontal()||(p=o,l=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,i+1,n)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;t";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){y.rtl,y.translate,t=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(t),y.updateActiveIndex(),y.updateClasses()}if(y){y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set();var t;e?(y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0))||a()):y.params.autoHeight&&y.updateAutoHeight()}},y.onResize=function(e){y.params.onBeforeResize&&y.params.onBeforeResize(y),y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t,y.params.onAfterResize&&y.params.onAfterResize(y)},y.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?y.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(y.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":y.touchEventsDesktop.start,move:y.support.touch||!y.params.simulateTouch?"touchmove":y.touchEventsDesktop.move,end:y.support.touch||!y.params.simulateTouch?"touchend":y.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=!!y.params.nested;if(y.browser.ie)r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1);else{if(y.support.touch){var o=!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1};r[t](y.touchEvents.start,y.onTouchStart,o),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,o)}(s.simulateTouch&&!y.device.ios&&!y.device.android||s.simulateTouch&&!y.support.touch&&y.device.ios)&&(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))}window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),y.isEnd&&!y.params.loop||y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),y.isBeginning&&!y.params.loop||y.slidePrev()},y.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(a){var t=n(a,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+l/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-l?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;y.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(y.params.noSwiping&&n(a,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(a,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=y.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}y.emit("onTouchStart",y,a)}}}},y.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return y.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(y.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(b&&(y.touches.startX=y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.startY=y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&y.params.touchReleaseOnEdges&&!y.params.loop)if(y.isHorizontal()){if(y.touches.currentXy.touches.startX&&y.translate>=y.minTranslate())return}else if(y.touches.currentYy.touches.startY&&y.translate>=y.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(y.allowClick=!1);if(S&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;y.isHorizontal()&&y.touches.currentY===y.touches.startY||!y.isHorizontal()&&y.touches.currentX===y.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI,M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle)}if(M&&y.emit("onTouchMoveOpposite",y,a),void 0===X&&(y.touches.currentX===y.touches.startX&&y.touches.currentY===y.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),C||(s.loop&&y.fixLoop(),E=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),D=!1,!y.params.grabCursor||!0!==y.params.allowSwipeToNext&&!0!==y.params.allowSwipeToPrev||y.setGrabCursor(!0)),C=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+E+r,y.params.resistanceRatio))):r<0&&PE&&(P=E),y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(P=E);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=E,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}y.params.followFinger&&((y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P))}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&y.emit("onTouchEnd",y,a),S=!1,b){y.params.grabCursor&&C&&b&&(!0===y.params.allowSwipeToNext||!0===y.params.allowSwipeToPrev)&&y.setGrabCursor(!1);var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,a))),B=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!b||!C||!y.swipeDirection||0===y.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;y.velocity=y.velocity*y.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,m=y.translate+d;y.rtl&&(m=-m);var u,c=!1,g=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(my.minTranslate())y.params.freeModeMomentumBounce?(m-y.minTranslate()>g&&(m=y.minTranslate()+g),u=y.minTranslate(),c=!0,D=!0):m=y.minTranslate();else if(y.params.freeModeSticky){var h,v=0;for(v=0;v-m){h=v;break}m=Math.abs(y.snapGrid[h]-m)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var f,w=0,x=y.slidesSizesGrid[0];for(f=0;f=y.slidesGrid[f]&&r=y.slidesGrid[f]&&(w=f,x=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var T=(r-y.slidesGrid[w])/x;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(T>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(T>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];if(y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r),y.params.normalizeSlideIndex)for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!(!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e||(void 0===a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.updateRealIndex(),y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),1):(y.updateClasses(),y.onTransitionStart(t),0===a||y.browser.lteIE9?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),0)))},y.onTransitionStart=function(e){void 0===e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),void 0===e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.history&&y.history&&y.history.setHistory(y.params.history,y.activeIndex),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){return y.params.loop?!y.animating&&(y.fixLoop(),y.container[0].clientLeft,y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)):y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){return y.params.loop?!y.animating&&(y.fixLoop(),y.container[0].clientLeft,y.slideTo(y.activeIndex-1,a,e,t)):y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.disableTouchControl=function(){return y.params.onlyExternal=!0,!0},y.enableTouchControl=function(){return y.params.onlyExternal=!1,!0},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var n=y.maxTranslate()-y.minTranslate();(0===n?0:(e-y.minTranslate())/n)!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?((s=r.transform||r.webkitTransform).split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return void 0===e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;aa.length&&(y.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a'),t.append(l)),0===p.length&&(p=e('
    '),t.append(p)),l.length&&(l[0].style.opacity=Math.max(-s,0)),p.length&&(p[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+n+"px, "+o+"px, 0px) rotateX("+i+"deg) rotateY("+r+"deg)")}},setTransition:function(a){if(y.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),y.params.virtualTranslate&&0!==a){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&e(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(a)),a.css({height:y.width+"px"})):0===(a=y.container.find(".swiper-cube-shadow")).length&&(a=e('
    '),y.container.append(a)));for(var s=0;s-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(m),y.params.cube.slideShadows){var u=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),c=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===u.length&&(u=e('
    '),r.append(u)),0===c.length&&(c=e('
    '),r.append(c)),u.length&&(u[0].style.opacity=Math.max(-o,0)),c.length&&(c[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())a.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var g=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*g*Math.PI/360)/2+Math.cos(2*g*Math.PI/360)/2),v=y.params.cube.shadowScale,f=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;a.transform("scale3d("+v+", 1, "+f+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/f+"px) rotateX(-90deg)")}var x=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+x+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=y.translate,t=y.isHorizontal()?-a+y.width/2:-a+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;i'),o.append(v)),0===f.length&&(f=e('
    '),o.append(f)),v.length&&(v[0].style.opacity=p>0?p:0),f.length&&(f[0].style.opacity=-p>0?-p:0)}}y.browser.ie&&(y.wrapper[0].style.perspectiveOrigin=t+"px 50%")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(a),r=s.find("."+y.params.lazyLoadingClass+":not(."+y.params.lazyStatusLoadedClass+"):not(."+y.params.lazyStatusLoadingClass+")");!s.hasClass(y.params.lazyLoadingClass)||s.hasClass(y.params.lazyStatusLoadedClass)||s.hasClass(y.params.lazyStatusLoadingClass)||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass(y.params.lazyStatusLoadingClass);var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");y.loadImage(a[0],i||r,n,o,!1,function(){if(void 0!==y&&null!==y&&y){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass(y.params.lazyStatusLoadedClass).removeClass(y.params.lazyStatusLoadingClass),s.find("."+y.params.lazyPreloaderClass+", ."+y.params.preloaderClass).remove(),y.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var l=y.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(l.index(),!1)}else{var p=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');y.lazy.loadImageInSlide(p.index(),!1)}}y.emit("onLazyImageReady",y,s[0],a[0])}}),y.emit("onLazyImageLoad",y,s[0],a[0])})}},load:function(){var a,t=y.params.slidesPerView;if("auto"===t&&(t=0),y.lazy.initialImageLoaded||(y.lazy.initialImageLoaded=!0),y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=y.activeIndex;a1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var s=y.params.lazyLoadingInPrevNextAmount,r=t,i=Math.min(y.activeIndex+r+Math.max(s,r),y.slides.length),n=Math.max(y.activeIndex-Math.max(r,s),0);for(a=y.activeIndex+t;a0&&y.lazy.loadImageInSlide(o.index());var l=y.wrapper.children("."+y.params.slidePrevClass);l.length>0&&y.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=(y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,s=-y.minTranslate()*a.moveDivider,r=-y.maxTranslate()*a.moveDivider;tr&&(t=r),t=-t/a.moveDivider,y.updateProgress(t),y.setWrapperTranslate(t,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},draggableEvents:!1!==y.params.simulateTouch||y.support.touch?y.touchEvents:y.touchEventsDesktop,enableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(y.params.scrollbar){var a=y.scrollbar;a.track=e(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&a.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(a.track=y.container.find(y.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
    '),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=y.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=y.size/y.virtualSize,a.moveDivider=a.divider*(a.trackSize/y.size),a.dragSize=a.trackSize*a.divider,y.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",y.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,r;this.x.length,this.interpolate=function(e){return e?(r=t(this.x,e),s=r-1,(e-this.x[s])*(this.y[r]-this.y[s])/(this.x[r]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),y.disableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.off(y.mousewheel.event,d),y.params.mousewheelControl=!1,!0},y.enableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.on(y.mousewheel.event,d),y.params.mousewheelControl=!0,!0},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,y.progress)}),y.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},y.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:y.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,r=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(r-t,2))},onGestureStart:function(a){var t=y.zoom;if(!y.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=y.slides.eq(y.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+y.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||y.params.zoomMax,0!==t.gesture.imageWrap.length)?(t.gesture.image.transition(0),t.isScaling=!0):t.gesture.image=void 0},onGestureChange:function(e){var a=y.zoom;if(!y.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(y.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!y.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,r=300,i=t.velocity.x*s,n=t.image.currentX+i,o=t.velocity.y*r,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(r=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,r);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,m=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-m/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var r,i,n,o,l,p,d,m,u,c,g,h,v,f,w,x,y,T;void 0===s.image.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,i="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=s.image.touchesStart.x,i=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(y=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+y/2-r,p=o+T/2-i,u=s.gesture.image[0].offsetWidth,c=s.gesture.image[0].offsetHeight,g=u*s.scale,h=c*s.scale,v=Math.min(y/2-g/2,0),f=Math.min(T/2-h/2,0),w=-v,x=-f,d=l*s.scale,m=p*s.scale,dw&&(d=w),mx&&(m=x)):(d=0,m=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+m+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(y.params.zoom){var s=(y.slides,!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1});y.support.gestures?(y.slides[t]("gesturestart",y.zoom.onGestureStart,s),y.slides[t]("gesturechange",y.zoom.onGestureChange,s),y.slides[t]("gestureend",y.zoom.onGestureEnd,s)):"touchstart"===y.touchEvents.start&&(y.slides[t](y.touchEvents.start,y.zoom.onGestureStart,s),y.slides[t](y.touchEvents.move,y.zoom.onGestureChange,s),y.slides[t](y.touchEvents.end,y.zoom.onGestureEnd,s)),y[t]("touchStart",y.zoom.onTouchStart),y.slides.each(function(a,s){e(s).find("."+y.params.zoomContainerClass).length>0&&e(s)[t](y.touchEvents.move,y.zoom.onTouchMove)}),y[t]("touchEnd",y.zoom.onTouchEnd),y[t]("transitionEnd",y.zoom.onTransitionEnd),y.params.zoomToggle&&y.on("doubleTap",y.zoom.toggleZoom)}},init:function(){y.zoom.attachEvents()},destroy:function(){y.zoom.attachEvents(!0)}},y._plugins=[];for(var Y in y.plugins){var A=y.plugins[Y](y,y.params[Y]);A&&y._plugins.push(A)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),e(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var a=e(this);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.zoom&&y.zoom&&y.zoom.init(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),y.params.hashnavReplaceState&&(y.params.replaceState=y.params.hashnavReplaceState),y.params.history&&y.history&&y.history.init(),y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.zoom&&y.zoom&&y.zoom.destroy(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.params.history&&!y.params.replaceState&&window.removeEventListener("popstate",y.history.setHistoryPopState),y.params.hashnav&&y.hashnav&&y.hashnav.destroy(),y.emit("onDestroy"),!1!==e&&(y=null)},y.init(),y}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="\x3c!--[if lte IE 9]>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper}); + + +/** + * @module WOW + * @author Matthieu Aussaguel + * @license MIT + * @version 1.1.3 + */ +(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a,b){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(b){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this); + + +/** + * @module Owl carousel + * @version 2.2.1 + * @author Bartosz Wojciechowski + * @license MIT + */ +!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
    '),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&bh-f-e&&b",g[a+1]||h-f)&&(d="left"===c?a+1:a),d===-1},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){for(b=this._items.length,c=this._items[--b].width(),d=this.$element.width();b--&&(c+=this._items[b].width()+this.settings.margin,!(c>d)););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2===0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=f*-1*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a":return d?ac;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&a.namespace.indexOf("owl")!==-1?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&e*-1||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='
    ',d=k.lazyLoad?'
    ':'
    ',b.after(d),b.after(e)};if(b.wrap('
    "),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='':"vimeo"===f.type?c='':"vzaar"===f.type&&(c=''),a('
    '+c+"
    ").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)}, + a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
    '+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
    ")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
    ").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("
    ").addClass(c.dotClass).append(a("")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("
    ").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); + + +/** + * @module RD Navbar + * @author Evgeniy Gusarov + * @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a + * @version 2.2.5 + */ +/** + * @module RD Navbar + * @author Evgeniy Gusarov + * @version 2.2.5 + */ +(function() { + var isTouch; + + isTouch = "ontouchstart" in window; + + (function($, document, window) { + + /** + * Creates a RDNavbar. + * @class RDNavbar. + * @public + * @param {HTMLElement} element - The element to create the RDNavbar for. + * @param {Object} [options] - The options + */ + var RDNavbar; + RDNavbar = (function() { + + /** + * Default options for RDNavbar. + * @protected + */ + RDNavbar.prototype.Defaults = { + layout: 'rd-navbar-static', + deviceLayout: 'rd-navbar-fixed', + focusOnHover: true, + focusOnHoverTimeout: 800, + linkedElements: ["html"], + domAppend: true, + stickUp: true, + stickUpClone: true, + stickUpOffset: '100%', + anchorNav: true, + anchorNavSpeed: 400, + anchorNavOffset: 0, + anchorNavEasing: 'swing', + autoHeight: true, + responsive: { + 0: { + layout: "rd-navbar-fixed", + deviceLayout: "rd-navbar-fixed", + focusOnHover: false, + stickUp: false + }, + 992: { + layout: "rd-navbar-static", + deviceLayout: "rd-navbar-static", + focusOnHover: true, + stickUp: true + } + }, + callbacks: { + onToggleSwitch: false, + onToggleClose: false, + onDomAppend: false, + onDropdownOver: false, + onDropdownOut: false, + onDropdownToggle: false, + onDropdownClose: false, + onStuck: false, + onUnstuck: false, + onAnchorChange: false + } + }; + + function RDNavbar(element, options) { + + /** + * Current options set + * @public + */ + this.options = $.extend(true, {}, this.Defaults, options); + + /** + * Plugin element + * @public + */ + this.$element = $(element); + + /** + * Plugin element clone + * @public + */ + this.$clone = null; + + /** + * Additional references + * @public + */ + this.$win = $(window); + this.$doc = $(document); + this.currentLayout = this.options.layout; + this.loaded = false; + this.focusOnHover = this.options.focusOnHover; + this.focusTimer = false; + this.cloneTimer = false; + this.isStuck = false; + this.initialize(); + } + + + /** + * Initializes the RDNavbar. + * @protected + */ + + RDNavbar.prototype.initialize = function() { + var ctx; + ctx = this; + ctx.$element.addClass("rd-navbar").addClass(ctx.options.layout); + if (isTouch) { + ctx.$element.addClass("rd-navbar--is-touch"); + } + if (ctx.options.domAppend) { + ctx.createNav(ctx); + } + if (ctx.options.stickUpClone) { + ctx.createClone(ctx); + } + ctx.$element.addClass('rd-navbar-original'); + ctx.addAdditionalClassToToggles('.rd-navbar-original', 'toggle-original', 'toggle-original-elements'); + ctx.applyHandlers(ctx); + ctx.offset = ctx.$element.offset().top; + ctx.height = ctx.$element.outerHeight(); + ctx.loaded = true; + return ctx; + }; + + + /** + * Changes {ctx.$element} layout basing on screen resolution + * @protected + */ + + RDNavbar.prototype.resize = function(ctx, e) { + var targetElement, targetLayout; + targetLayout = isTouch ? ctx.getOption('deviceLayout') : ctx.getOption('layout'); + targetElement = ctx.$element.add(ctx.$clone); + if (targetLayout !== ctx.currentLayout || !ctx.loaded) { + ctx.switchClass(targetElement, ctx.currentLayout, targetLayout); + if (ctx.options.linkedElements != null) { + $.grep(ctx.options.linkedElements, function(link, index) { + return ctx.switchClass(link, ctx.currentLayout + '-linked', targetLayout + '-linked'); + }); + } + ctx.currentLayout = targetLayout; + } + ctx.focusOnHover = ctx.getOption('focusOnHover'); + return ctx; + }; + + + /** + * Toggles bar stickup on scroll + * @protected + */ + + RDNavbar.prototype.stickUp = function(ctx, e) { + var scrollTop, stickUp, stickUpOffset, targetElement, threshold; + stickUp = ctx.getOption("stickUp"); + if ($('html').hasClass('ios') || ctx.$element.hasClass('rd-navbar-fixed')) { + stickUp = false; + } + scrollTop = ctx.$doc.scrollTop(); + targetElement = ctx.$clone != null ? ctx.$clone : ctx.$element; + stickUpOffset = ctx.getOption('stickUpOffset'); + threshold = (typeof stickUpOffset === 'string' ? (stickUpOffset.indexOf('%') > 0 ? parseFloat(stickUpOffset) * ctx.height / 100 : parseFloat(stickUpOffset)) : stickUpOffset); + if (stickUp) { + if ((scrollTop >= threshold && !ctx.isStuck) || (scrollTop < threshold && ctx.isStuck)) { + ctx.$element.add(ctx.$clone).find('[data-rd-navbar-toggle]').each(function() { + $.proxy(ctx.closeToggle, this)(ctx, false); + }).end().find('.rd-navbar-submenu').removeClass('opened').removeClass('focus'); + if (scrollTop >= threshold && !ctx.isStuck && !ctx.$element.hasClass('rd-navbar-fixed')) { + if (ctx.options.callbacks.onStuck) { + ctx.options.callbacks.onStuck.call(ctx); + } + + + setTimeout(function(){ + if (e.type === 'resize') { + ctx.switchClass(targetElement, '', 'rd-navbar--is-stuck'); + } else { + targetElement.addClass('rd-navbar--is-stuck'); + } + ctx.isStuck = true; + }, navigator.platform.match(/(Mac)/i) ? 10 : 0); + + } else { + if (e.type === 'resize') { + ctx.switchClass(targetElement, 'rd-navbar--is-stuck', ''); + } else { + targetElement.removeClass('rd-navbar--is-stuck').one('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', $.proxy(ctx.resizeWrap, ctx, e)); + } + ctx.isStuck = false; + if (ctx.options.callbacks.onUnstuck) { + ctx.options.callbacks.onUnstuck.call(ctx); + } + } + } + } else { + ctx.$element.find('.rd-navbar-submenu').removeClass('opened').removeClass('focus'); + if (ctx.isStuck) { + ctx.switchClass(targetElement, 'rd-navbar--is-stuck', ''); + ctx.isStuck = false; + ctx.resizeWrap(e); + } + } + return ctx; + }; + + + /** + * Resizes an external wrap of navbar + * @protected + */ + + RDNavbar.prototype.resizeWrap = function(e) { + var $wrap, ctx; + ctx = this; + if ((ctx.$clone == null) && !ctx.isStuck) { + $wrap = ctx.$element.parent(); + if (!ctx.getOption('autoHeight')) { + $wrap.css('height', 'auto'); + return; + } + ctx.height = ctx.$element.outerHeight(); + if (e.type === 'resize') { + $wrap.addClass('rd-navbar--no-transition').css('height', ctx.height); + $wrap[0].offsetHeight; + return $wrap.removeClass('rd-navbar--no-transition'); + } else { + return $wrap.css('height', ctx.height); + } + } + }; + + + /** + * Creates additional DOM for navigation functionality + * @protected + */ + + RDNavbar.prototype.createNav = function(ctx) { + ctx.$element.find('.rd-navbar-dropdown, .rd-navbar-megamenu').each(function() { + var $this, rect; + $this = $(this); + rect = this.getBoundingClientRect(); + if ($this.hasClass('rd-navbar-megamenu')) { + return $this.parent().addClass('rd-navbar--has-megamenu'); + } else { + return $this.parent().addClass('rd-navbar--has-dropdown'); + } + }).parents("li").addClass("rd-navbar-submenu"); + $('').insertAfter('.rd-navbar-nav li.rd-navbar-submenu > a'); + if (ctx.options.callbacks.onDomAppend) { + ctx.options.callbacks.onDomAppend.call(this); + } + return ctx; + }; + + + /** + * Creates navbar clone to stick up + * @protected + */ + + RDNavbar.prototype.createClone = function(ctx) { + ctx.$clone = ctx.$element.clone().insertAfter(ctx.$element).addClass('rd-navbar--is-clone'); + ctx.addAdditionalClassToToggles('.rd-navbar--is-clone', 'toggle-cloned', 'toggle-cloned-elements'); + return ctx; + }; + + + /** + * Closes all toggles on outside click of each item + * @protected + */ + + RDNavbar.prototype.closeToggle = function(ctx, e) { + var $items, $target, additionalToggleElClass, additionalToogleClass, collapse, linkedElements, needClose; + $target = $(e.target); + collapse = false; + linkedElements = this.getAttribute('data-rd-navbar-toggle'); + if (ctx.options.stickUpClone && ctx.isStuck) { + additionalToogleClass = '.toggle-cloned'; + additionalToggleElClass = '.toggle-cloned-elements'; + needClose = !$target.hasClass('toggle-cloned'); + } else { + additionalToogleClass = '.toggle-original'; + additionalToggleElClass = '.toggle-original-elements'; + needClose = !$target.hasClass('toggle-original'); + } + if (e.target !== this && !$target.parents(additionalToogleClass + '[data-rd-navbar-toggle]').length && !$target.parents(additionalToggleElClass).length && linkedElements && needClose) { + $items = $(this).parents('body').find(linkedElements).add($(this).parents('.rd-navbar')[0]); + $items.each(function() { + if (!collapse) { + return collapse = (e.target === this || $.contains(this, e.target)) === true; + } + }); + if (!collapse) { + $items.add(this).removeClass('active'); + if (ctx.options.callbacks.onToggleClose) { + ctx.options.callbacks.onToggleClose.call(this, ctx); + } + } + } + return this; + }; + + + /** + * Switches toggle + * @protected + */ + + RDNavbar.prototype.switchToggle = function(ctx, e) { + var additionalToggleElClass, linkedElements, navbarClass; + e.preventDefault(); + if ($(this).hasClass('toggle-cloned')) { + navbarClass = '.rd-navbar--is-clone'; + additionalToggleElClass = '.toggle-cloned-elements'; + } else { + navbarClass = '.rd-navbar-original'; + additionalToggleElClass = '.toggle-original-elements'; + } + if (linkedElements = this.getAttribute('data-rd-navbar-toggle')) { + $(navbarClass + ' [data-rd-navbar-toggle]').not(this).each(function() { + var deactivateElements; + if (deactivateElements = this.getAttribute('data-rd-navbar-toggle')) { + return $(this).parents('body').find(navbarClass + ' ' + deactivateElements + additionalToggleElClass).add(this).add($.inArray('.rd-navbar', deactivateElements.split(/\s*,\s*/i)) > -1 ? $(this).parents('body')[0] : false).removeClass('active'); + } + }); + $(this).parents('body').find(navbarClass + ' ' + linkedElements + additionalToggleElClass).add(this).add($.inArray('.rd-navbar', linkedElements.split(/\s*,\s*/i)) > -1 ? $(this).parents('.rd-navbar')[0] : false).toggleClass('active'); + } + if (ctx.options.callbacks.onToggleSwitch) { + ctx.options.callbacks.onToggleSwitch.call(this, ctx); + } + return this; + }; + + + /** + * Triggers submenu popup to be shown on mouseover + * @protected + */ + + RDNavbar.prototype.dropdownOver = function(ctx, timer) { + var $this; + if (ctx.focusOnHover) { + $this = $(this); + clearTimeout(timer); + if (ctx.options.callbacks.onDropdownOver) { + if (!ctx.options.callbacks.onDropdownOver.call(this, ctx)){ + return this; + } + } + + $this.addClass('focus').siblings().removeClass('opened').each(ctx.dropdownUnfocus); + } + return this; + }; + + + /** + * Triggers submenu popup to be shown on mouseover + * @protected + */ + + RDNavbar.prototype.dropdownTouch = function(ctx, timer) { + var $this, hasFocus; + $this = $(this); + clearTimeout(timer); + if (ctx.focusOnHover) { + hasFocus = false; + if ($this.hasClass('focus')) { + hasFocus = true; + } + if (!hasFocus) { + $this.addClass('focus').siblings().removeClass('opened').each(ctx.dropdownUnfocus); + return false; + } + if (ctx.options.callbacks.onDropdownOver) { + ctx.options.callbacks.onDropdownOver.call(this, ctx); + } + } + return this; + }; + + + /** + * Triggers submenu popop to be hidden on mouseout + * @protected + */ + + RDNavbar.prototype.dropdownOut = function(ctx, timer) { + var $this; + if (ctx.focusOnHover) { + $this = $(this); + $this.one('mouseenter.navbar', function() { + return clearTimeout(timer); + }); + + if (ctx.options.callbacks.onDropdownOut) { + ctx.options.callbacks.onDropdownOut.call(this, ctx); + } + clearTimeout(timer); + + timer = setTimeout($.proxy(ctx.dropdownUnfocus, this, ctx), ctx.options.focusOnHoverTimeout); + } + return this; + }; + + + /** + * Removes a focus from submenu + * @protected + */ + + RDNavbar.prototype.dropdownUnfocus = function(ctx) { + var $this; + $this = $(this); + $this.find('li.focus').add(this).removeClass('focus'); + return this; + }; + + + /** + * Closes submenu + * @protected + */ + + RDNavbar.prototype.dropdownClose = function(ctx, e) { + var $this; + if (e.target !== this && !$(e.target).parents('.rd-navbar-submenu').length) { + $this = $(this); + $this.find('li.focus').add(this).removeClass('focus').removeClass('opened'); + if (ctx.options.callbacks.onDropdownClose) { + ctx.options.callbacks.onDropdownClose.call(this, ctx); + } + } + return this; + }; + + + /** + * Toggles submenu popup to be shown on trigger click + * @protected + */ + + RDNavbar.prototype.dropdownToggle = function(ctx) { + $(this).toggleClass('opened').siblings().removeClass('opened'); + if (ctx.options.callbacks.onDropdownToggle) { + ctx.options.callbacks.onDropdownToggle.call(this, ctx); + } + return this; + }; + + + /** + * Scrolls the page to triggered anchor + * @protected + */ + + RDNavbar.prototype.goToAnchor = function(ctx, e) { + var $anchor, hash; + hash = this.hash; + $anchor = $(hash); + + if (!ctx.getOption('anchorNav')){ + return false; + } + + if ($anchor.length) { + e.preventDefault(); + $('html, body').stop().animate({ + 'scrollTop': $anchor.offset().top + ctx.getOption('anchorNavOffset') + 1 + }, ctx.getOption('anchorNavSpeed'), ctx.getOption('anchorNavEasing'), function() { + return ctx.changeAnchor(hash); + }); + } + return this; + }; + + + /** + * Highlight an active anchor + * @protected + */ + + RDNavbar.prototype.activateAnchor = function(e) { + var $anchor, $item, $link, ctx, docHeight, hash, i, link, links, navOffset, scrollTop, winHeight; + ctx = this; + scrollTop = ctx.$doc.scrollTop(); + winHeight = ctx.$win.height(); + docHeight = ctx.$doc.height(); + navOffset = ctx.getOption('anchorNavOffset'); + + if (!ctx.options.anchorNav){ + return false; + } + + if (scrollTop + winHeight > docHeight - 50) { + $anchor = $('[data-type="anchor"]').last(); + if ($anchor.length) { + if ($anchor.offset().top >= scrollTop) { + hash = '#' + $anchor.attr("id"); + $item = $('.rd-navbar-nav a[href^="' + hash + '"]').parent(); + if (!$item.hasClass('active')) { + $item.addClass('active').siblings().removeClass('active'); + if (ctx.options.callbacks.onAnchorChange) { + ctx.options.callbacks.onAnchorChange.call($anchor[0], ctx); + } + } + } + } + return $anchor; + } else { + links = $('.rd-navbar-nav a[href^="#"]').get(); + for (i in links) { + link = links[i]; + $link = $(link); + hash = $link.attr('href'); + // @CHANGE LDR + if (hash != '#') $anchor = $(hash); + else $anchor = ''; + //$anchor = $(hash); + if ($anchor.length) { + if ($anchor.offset().top + navOffset <= scrollTop && $anchor.offset().top + $anchor.outerHeight() > scrollTop) { + $link.parent().addClass('active').siblings().removeClass('active'); + if (ctx.options.callbacks.onAnchorChange) { + ctx.options.callbacks.onAnchorChange.call($anchor[0], ctx); + } + } + } + } + } + return null; + }; + + + /** + * Returns current anchor + * @protected + */ + + RDNavbar.prototype.getAnchor = function() { + if (history) { + if (history.state) { + return history.state.id; + } + } + return null; + }; + + + /** + * Changes current page anchor + * @protected + */ + + RDNavbar.prototype.changeAnchor = function(hash) { + if (history) { + if (history.state) { + if (history.state.id !== hash) { + history.replaceState({ + 'anchorId': hash + }, null, hash); + } else { + history.pushState({ + 'anchorId': hash + }, null, hash); + } + } else { + history.pushState({ + 'anchorId': hash + }, null, hash); + } + } + return this; + }; + + + /** + * Applies all JS event handlers + * @protected + */ + + RDNavbar.prototype.applyHandlers = function(ctx) { + if (ctx.options.responsive != null) { + ctx.$win.on('resize.navbar', $.proxy(ctx.resize, ctx.$win[0], ctx)).on('resize.navbar', $.proxy(ctx.resizeWrap, ctx)).on('resize.navbar', $.proxy(ctx.stickUp, (ctx.$clone != null ? ctx.$clone : ctx.$element), ctx)).on('orientationchange.navbar', $.proxy(ctx.resize, ctx.$win[0], ctx)).trigger('resize.navbar'); + } + ctx.$doc.on('scroll.navbar', $.proxy(ctx.stickUp, (ctx.$clone != null ? ctx.$clone : ctx.$element), ctx)).on('scroll.navbar', $.proxy(ctx.activateAnchor, ctx)); + ctx.$element.add(ctx.$clone).find('[data-rd-navbar-toggle]').each(function() { + var $this; + $this = $(this); + $this.on('click', $.proxy(ctx.switchToggle, this, ctx)); + return $this.parents('body').on('click', $.proxy(ctx.closeToggle, this, ctx)); + }); + ctx.$element.add(ctx.$clone).find('.rd-navbar-submenu').each(function() { + var $this, timer; + $this = $(this); + timer = $this.parents(".rd-navbar--is-clone").length ? ctx.cloneTimer : ctx.focusTimer; + $this.on('mouseleave.navbar', $.proxy(ctx.dropdownOut, this, ctx, timer)); + $this.find('> a').on('mouseenter.navbar', $.proxy(ctx.dropdownOver, this, ctx, timer)); + $this.find('> a').on('touchstart.navbar', $.proxy(ctx.dropdownTouch, this, ctx, timer)); + $this.find('> .rd-navbar-submenu-toggle').on('click', $.proxy(ctx.dropdownToggle, this, ctx)); + return $this.parents('body').on('click', $.proxy(ctx.dropdownClose, this, ctx)); + }); + ctx.$element.add(ctx.$clone).find('.rd-navbar-nav a[href^="#"]').each(function() { + return $(this).on('click', $.proxy(ctx.goToAnchor, this, ctx)); + }); + + ctx.$element.find('.rd-navbar-dropdown, .rd-navbar-megamenu').each(function() { + var $this, rect; + $this = $(this); + rect = this.getBoundingClientRect(); + if ((rect.left + $this.outerWidth()) >= window.innerWidth - 10) { + this.className += ' rd-navbar-open-left'; + } else if ((rect.left - $this.outerWidth()) <= 10) { + this.className += ' rd-navbar-open-right'; + } + }); + + return ctx; + }; + + + /** + * Switches classes of elements without transition + * @protected + */ + + RDNavbar.prototype.switchClass = function(element, before, after) { + var obj; + obj = element instanceof jQuery ? element : $(element); + obj.addClass('rd-navbar--no-transition').removeClass(before).addClass(after); + obj[0].offsetHeight; + return obj.removeClass('rd-navbar--no-transition'); + }; + + + /** + * Gets specific option of plugin + * @protected + */ + + RDNavbar.prototype.getOption = function(key) { + var point, targetPoint; + for (point in this.options.responsive) { + if (point <= window.innerWidth) { + targetPoint = point; + } + } + if ((this.options.responsive != null) && (this.options.responsive[targetPoint][key] != null)) { + return this.options.responsive[targetPoint][key]; + } else { + return this.options[key]; + } + }; + + + /** + * Add additional class to navbar toggles to identify it when navbar is cloned + * @protected + */ + + RDNavbar.prototype.addAdditionalClassToToggles = function(navbarClass, toggleAdditionalClass, toggleElAdditionalClass) { + return $(navbarClass).find('[data-rd-navbar-toggle]').each(function() { + var toggleElement; + $(this).addClass(toggleAdditionalClass); + toggleElement = this.getAttribute('data-rd-navbar-toggle'); + return $(this).parents('body').find(navbarClass).find(toggleElement).addClass(toggleElAdditionalClass); + }); + }; + + return RDNavbar; + + })(); + + /** + * The jQuery Plugin for the RD Navbar + * @public + */ + $.fn.extend({ + RDNavbar: function(options) { + var $this; + $this = $(this); + if (!$this.data('RDNavbar')) { + return $this.data('RDNavbar', new RDNavbar(this, options)); + } + } + + /** + * RD Navbar window export + * @public + */ + }); + return window.RDNavbar = RDNavbar; + })(window.jQuery, document, window); + + + /** + * The Plugin AMD export + * @public + */ + + if (typeof module !== "undefined" && module !== null) { + module.exports = window.RDNavbar; + } else if (typeof define === 'function' && define.amd) { + define(["jquery"], function() { + 'use strict'; + return window.RDNavbar; + }); + } + +}).call(this); + + +/** + * @module Device.js + * @see https://github.com/matthewhudson/device.js + * @license MIT + */ +(function(){var n,e,o,t,i,r,d,a,c,l;e=window.device,n={},window.device=n,t=window.document.documentElement,l=window.navigator.userAgent.toLowerCase(),n.ios=function(){return n.iphone()||n.ipod()||n.ipad()},n.iphone=function(){return!n.windows()&&i("iphone")},n.ipod=function(){return i("ipod")},n.ipad=function(){return i("ipad")},n.android=function(){return!n.windows()&&i("android")},n.androidPhone=function(){return n.android()&&i("mobile")},n.androidTablet=function(){return n.android()&&!i("mobile")},n.blackberry=function(){return i("blackberry")||i("bb10")||i("rim")},n.blackberryPhone=function(){return n.blackberry()&&!i("tablet")},n.blackberryTablet=function(){return n.blackberry()&&i("tablet")},n.windows=function(){return i("windows")},n.windowsPhone=function(){return n.windows()&&i("phone")},n.windowsTablet=function(){return n.windows()&&i("touch")&&!n.windowsPhone()},n.fxos=function(){return(i("(mobile;")||i("(tablet;"))&&i("; rv:")},n.fxosPhone=function(){return n.fxos()&&i("mobile")},n.fxosTablet=function(){return n.fxos()&&i("tablet")},n.meego=function(){return i("meego")},n.cordova=function(){return window.cordova&&"file:"===location.protocol},n.nodeWebkit=function(){return"object"==typeof window.process},n.mobile=function(){return n.androidPhone()||n.iphone()||n.ipod()||n.windowsPhone()||n.blackberryPhone()||n.fxosPhone()||n.meego()},n.tablet=function(){return n.ipad()||n.androidTablet()||n.blackberryTablet()||n.windowsTablet()||n.fxosTablet()},n.desktop=function(){return!n.tablet()&&!n.mobile()},n.television=function(){var n,e=["googletv","viera","smarttv","internet.tv","netcast","nettv","appletv","boxee","kylo","roku","dlnadoc","roku","pov_tv","hbbtv","ce-html"];for(n=0;n1},n.landscape=function(){return window.innerHeight/window.innerWidth<1},n.noConflict=function(){return window.device=e,this},i=function(n){return-1!==l.indexOf(n)},d=function(n){var e;return e=new RegExp(n,"i"),t.className.match(e)},o=function(n){var e=null;d(n)||(e=t.className.replace(/^\s+|\s+$/g,""),t.className=e+" "+n)},c=function(n){d(n)&&(t.className=t.className.replace(" "+n,""))},n.ios()?n.ipad()?o("ios ipad tablet"):n.iphone()?o("ios iphone mobile"):n.ipod()&&o("ios ipod mobile"):n.android()?o(n.androidTablet()?"android tablet":"android mobile"):n.blackberry()?o(n.blackberryTablet()?"blackberry tablet":"blackberry mobile"):n.windows()?o(n.windowsTablet()?"windows tablet":n.windowsPhone()?"windows mobile":"desktop"):n.fxos()?o(n.fxosTablet()?"fxos tablet":"fxos mobile"):n.meego()?o("meego mobile"):n.nodeWebkit()?o("node-webkit"):n.television()?o("television"):n.desktop()&&o("desktop"),n.cordova()&&o("cordova"),r=function(){n.landscape()?(c("portrait"),o("landscape")):(c("landscape"),o("portrait"))},a=Object.prototype.hasOwnProperty.call(window,"onorientationchange")?"orientationchange":"resize",window.addEventListener?window.addEventListener(a,r,!1):window.attachEvent?window.attachEvent(a,r):window[a]=r,r(),"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:window.device=n}).call(this); + + +/** + * @module UIToTop + * @author Matt Varone + * @see http://www.mattvarone.com/web-design/uitotop-jquery-plugin/ + * @license MIT + */ +!function(o){o.fn.UItoTop=function(n){var e={text:"",min:500,scrollSpeed:800,containerID:"ui-to-top",containerClass:"ui-to-top fa fa-angle-up",easingType:"easeIn"},t=o.extend(e,n),i="#"+t.containerID;o("body").append(''+t.text+""),o(i).click(function(){return o("html, body").stop().animate({scrollTop:0},t.scrollSpeed,t.easingType),!1}),o(window).scroll(function(){var n=o(window).scrollTop();"undefined"==typeof document.body.style.maxHeight&&o(i).css({position:"absolute",top:o(window).scrollTop()+o(window).height()-50}),n>t.min?o(i).stop(!0,!0).addClass("active"):o(i).removeClass("active")})}}(jQuery); + + +/** + * @module Abstract base class for collection plugins v1.0.1. + * @author Keith Wood + * @see http://keith-wood.name/countdown.html + * @license MIT + */ +(function(){var j=false;window.JQClass=function(){};JQClass.classes={};JQClass.extend=function extender(f){var g=this.prototype;j=true;var h=new this();j=false;for(var i in f){h[i]=typeof f[i]=='function'&&typeof g[i]=='function'?(function(d,e){return function(){var b=this._super;this._super=function(a){return g[d].apply(this,a||[])};var c=e.apply(this,arguments);this._super=b;return c}})(i,f[i]):f[i]}function JQClass(){if(!j&&this._init){this._init.apply(this,arguments)}}JQClass.prototype=h;JQClass.prototype.constructor=JQClass;JQClass.extend=extender;return JQClass}})();(function($){JQClass.classes.JQPlugin=JQClass.extend({name:'plugin',defaultOptions:{},regionalOptions:{},_getters:[],_getMarker:function(){return'is-'+this.name},_init:function(){$.extend(this.defaultOptions,(this.regionalOptions&&this.regionalOptions[''])||{});var c=camelCase(this.name);$[c]=this;$.fn[c]=function(a){var b=Array.prototype.slice.call(arguments,1);if($[c]._isNotChained(a,b)){return $[c][a].apply($[c],[this[0]].concat(b))}return this.each(function(){if(typeof a==='string'){if(a[0]==='_'||!$[c][a]){throw'Unknown method: '+a;}$[c][a].apply($[c],[this].concat(b))}else{$[c]._attach(this,a)}})}},setDefaults:function(a){$.extend(this.defaultOptions,a||{})},_isNotChained:function(a,b){if(a==='option'&&(b.length===0||(b.length===1&&typeof b[0]==='string'))){return true}return $.inArray(a,this._getters)>-1},_attach:function(a,b){a=$(a);if(a.hasClass(this._getMarker())){return}a.addClass(this._getMarker());b=$.extend({},this.defaultOptions,this._getMetadata(a),b||{});var c=$.extend({name:this.name,elem:a,options:b},this._instSettings(a,b));a.data(this.name,c);this._postAttach(a,c);this.option(a,b)},_instSettings:function(a,b){return{}},_postAttach:function(a,b){},_getMetadata:function(d){try{var f=d.data(this.name.toLowerCase())||'';f=f.replace(/'/g,'"');f=f.replace(/([a-zA-Z0-9]+):/g,function(a,b,i){var c=f.substring(0,i).match(/"/g);return(!c||c.length%2===0?'"'+b+'":':b+':')});f=$.parseJSON('{'+f+'}');for(var g in f){var h=f[g];if(typeof h==='string'&&h.match(/^new Date\((.*)\)$/)){f[g]=eval(h)}}return f}catch(e){return{}}},_getInst:function(a){return $(a).data(this.name)||{}},option:function(a,b,c){a=$(a);var d=a.data(this.name);if(!b||(typeof b==='string'&&c==null)){var e=(d||{}).options;return(e&&b?e[b]:e)}if(!a.hasClass(this._getMarker())){return}var e=b||{};if(typeof b==='string'){e={};e[b]=c}this._optionsChanged(a,d,e);$.extend(d.options,e)},_optionsChanged:function(a,b,c){},destroy:function(a){a=$(a);if(!a.hasClass(this._getMarker())){return}this._preDestroy(a,this._getInst(a));a.removeData(this.name).removeClass(this._getMarker())},_preDestroy:function(a,b){}});function camelCase(c){return c.replace(/-([a-z])/g,function(a,b){return b.toUpperCase()})}$.JQPlugin={createPlugin:function(a,b){if(typeof a==='object'){b=a;a='JQPlugin'}a=camelCase(a);var c=camelCase(b.name);JQClass.classes[c]=JQClass.classes[a].extend(b);new JQClass.classes[c]()}}})(jQuery); + + +/** + * @module Moment JS + * @authors Tim Wood, Iskren Chernev, Moment.js contributors + * @see https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96 + * @version 2.12.0 + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.moment=e()}(this,function(){"use strict";function t(){return Xn.apply(null,arguments)}function e(t){Xn=t}function n(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t,e){var n,i=[];for(n=0;n0)for(n in Kn)i=Kn[n],s=e[i],c(s)||(t[i]=s);return t}function m(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),ti===!1&&(ti=!0,t.updateOffset(this),ti=!1)}function _(t){return t instanceof m||null!=t&&null!=t._isAMomentObject}function y(t){return 0>t?Math.ceil(t):Math.floor(t)}function g(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=y(e)),n}function p(t,e,n){var i,s=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),a=0;for(i=0;s>i;i++)(n&&t[i]!==e[i]||!n&&g(t[i])!==g(e[i]))&&a++;return a+r}function v(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function D(t,e){var n=!0;return a(function(){return n&&(v(t+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),e.apply(this,arguments)},e)}function M(t,e){ei[t]||(v(e),ei[t]=!0)}function S(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function Y(t){return"[object Object]"===Object.prototype.toString.call(t)}function w(t){var e,n;for(n in t)e=t[n],S(e)?this[n]=e:this["_"+n]=e;this._config=t,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function k(t,e){var n,i=a({},t);for(n in e)r(e,n)&&(Y(t[n])&&Y(e[n])?(i[n]={},a(i[n],t[n]),a(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);return i}function T(t){null!=t&&this.set(t)}function b(t){return t?t.toLowerCase().replace("_","-"):t}function O(t){for(var e,n,i,s,r=0;r0;){if(i=W(s.slice(0,e).join("-")))return i;if(n&&n.length>=e&&p(s,n,!0)>=e-1)break;e--}r++}return null}function W(t){var e=null;if(!ii[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=ni._abbr,require("./locale/"+t),x(e)}catch(n){}return ii[t]}function x(t,e){var n;return t&&(n=c(e)?P(t):U(t,e),n&&(ni=n)),ni._abbr}function U(t,e){return null!==e?(e.abbr=t,null!=ii[t]?(M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),e=k(ii[t]._config,e)):null!=e.parentLocale&&(null!=ii[e.parentLocale]?e=k(ii[e.parentLocale]._config,e):M("parentLocaleUndefined","specified parentLocale is not defined yet")),ii[t]=new T(e),x(t),ii[t]):(delete ii[t],null)}function G(t,e){if(null!=e){var n;null!=ii[t]&&(e=k(ii[t]._config,e)),n=new T(e),n.parentLocale=ii[t],ii[t]=n,x(t)}else null!=ii[t]&&(null!=ii[t].parentLocale?ii[t]=ii[t].parentLocale:null!=ii[t]&&delete ii[t]);return ii[t]}function P(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return ni;if(!n(t)){if(e=W(t))return e;t=[t]}return O(t)}function C(){return Object.keys(ii)}function F(t,e){var n=t.toLowerCase();si[n]=si[n+"s"]=si[e]=t}function H(t){return"string"==typeof t?si[t]||si[t.toLowerCase()]:void 0}function L(t){var e,n,i={};for(n in t)r(t,n)&&(e=H(n),e&&(i[e]=t[n]));return i}function V(e,n){return function(i){return null!=i?(I(this,e,i),t.updateOffset(this,n),this):N(this,e)}}function N(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function I(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function A(t,e){var n;if("object"==typeof t)for(n in t)this.set(n,t[n]);else if(t=H(t),S(this[t]))return this[t](e);return this}function R(t,e,n){var i=""+Math.abs(t),s=e-i.length,r=t>=0;return(r?n?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+i}function E(t,e,n,i){var s=i;"string"==typeof i&&(s=function(){return this[i]()}),t&&(ui[t]=s),e&&(ui[e[0]]=function(){return R(s.apply(this,arguments),e[1],e[2])}),n&&(ui[n]=function(){return this.localeData().ordinal(s.apply(this,arguments),t)})}function j(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function z(t){var e,n,i=t.match(ri);for(e=0,n=i.length;n>e;e++)ui[i[e]]?i[e]=ui[i[e]]:i[e]=j(i[e]);return function(s){var r="";for(e=0;n>e;e++)r+=i[e]instanceof Function?i[e].call(s,t):i[e];return r}}function Z(t,e){return t.isValid()?(e=$(e,t.localeData()),oi[e]=oi[e]||z(e),oi[e](t)):t.localeData().invalidDate()}function $(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(ai.lastIndex=0;i>=0&&ai.test(t);)t=t.replace(ai,n),ai.lastIndex=0,i-=1;return t}function q(t,e,n){Ti[t]=S(e)?e:function(t,i){return t&&n?n:e}}function J(t,e){return r(Ti,t)?Ti[t](e._strict,e._locale):new RegExp(B(t))}function B(t){return Q(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,s){return e||n||i||s}))}function Q(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function X(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(i=function(t,n){n[e]=g(t)}),n=0;ni;i++){if(s=o([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(s,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(s,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(s,"")+"|^"+this.monthsShort(s,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}function rt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=g(e);else if(e=t.localeData().monthsParse(e),"number"!=typeof e)return t;return n=Math.min(t.date(),et(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function at(e){return null!=e?(rt(this,e),t.updateOffset(this,!0),this):N(this,"Month")}function ot(){return et(this.year(),this.month())}function ut(t){return this._monthsParseExact?(r(this,"_monthsRegex")||lt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex}function dt(t){return this._monthsParseExact?(r(this,"_monthsRegex")||lt.call(this),t?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex}function lt(){function t(t,e){return e.length-t.length}var e,n,i=[],s=[],r=[];for(e=0;12>e;e++)n=o([2e3,e]),i.push(this.monthsShort(n,"")),s.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),s.sort(t),r.sort(t),e=0;12>e;e++)i[e]=Q(i[e]),s[e]=Q(s[e]),r[e]=Q(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")$","i")}function ht(t){var e,n=t._a;return n&&-2===d(t).overflow&&(e=n[Wi]<0||n[Wi]>11?Wi:n[xi]<1||n[xi]>et(n[Oi],n[Wi])?xi:n[Ui]<0||n[Ui]>24||24===n[Ui]&&(0!==n[Gi]||0!==n[Pi]||0!==n[Ci])?Ui:n[Gi]<0||n[Gi]>59?Gi:n[Pi]<0||n[Pi]>59?Pi:n[Ci]<0||n[Ci]>999?Ci:-1,d(t)._overflowDayOfYear&&(Oi>e||e>xi)&&(e=xi),d(t)._overflowWeeks&&-1===e&&(e=Fi),d(t)._overflowWeekday&&-1===e&&(e=Hi),d(t).overflow=e),t}function ct(t){var e,n,i,s,r,a,o=t._i,u=Ri.exec(o)||Ei.exec(o);if(u){for(d(t).iso=!0,e=0,n=zi.length;n>e;e++)if(zi[e][1].exec(u[1])){s=zi[e][0],i=zi[e][2]!==!1;break}if(null==s)return void(t._isValid=!1);if(u[3]){for(e=0,n=Zi.length;n>e;e++)if(Zi[e][1].exec(u[3])){r=(u[2]||" ")+Zi[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(u[4]){if(!ji.exec(u[4]))return void(t._isValid=!1);a="Z"}t._f=s+(r||"")+(a||""),bt(t)}else t._isValid=!1}function ft(e){var n=$i.exec(e._i);return null!==n?void(e._d=new Date(+n[1])):(ct(e),void(e._isValid===!1&&(delete e._isValid,t.createFromInputFallback(e))))}function mt(t,e,n,i,s,r,a){var o=new Date(t,e,n,i,s,r,a);return 100>t&&t>=0&&isFinite(o.getFullYear())&&o.setFullYear(t),o}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return 100>t&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function yt(t){return gt(t)?366:365}function gt(t){return t%4===0&&t%100!==0||t%400===0}function pt(){return gt(this.year())}function vt(t,e,n){var i=7+e-n,s=(7+_t(t,0,i).getUTCDay()-e)%7;return-s+i-1}function Dt(t,e,n,i,s){var r,a,o=(7+n-i)%7,u=vt(t,i,s),d=1+7*(e-1)+o+u;return 0>=d?(r=t-1,a=yt(r)+d):d>yt(t)?(r=t+1,a=d-yt(t)):(r=t,a=d),{year:r,dayOfYear:a}}function Mt(t,e,n){var i,s,r=vt(t.year(),e,n),a=Math.floor((t.dayOfYear()-r-1)/7)+1;return 1>a?(s=t.year()-1,i=a+St(s,e,n)):a>St(t.year(),e,n)?(i=a-St(t.year(),e,n),s=t.year()+1):(s=t.year(),i=a),{week:i,year:s}}function St(t,e,n){var i=vt(t,e,n),s=vt(t+1,e,n);return(yt(t)-i+s)/7}function Yt(t,e,n){return null!=t?t:null!=e?e:n}function wt(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function kt(t){var e,n,i,s,r=[];if(!t._d){for(i=wt(t),t._w&&null==t._a[xi]&&null==t._a[Wi]&&Tt(t),t._dayOfYear&&(s=Yt(t._a[Oi],i[Oi]),t._dayOfYear>yt(s)&&(d(t)._overflowDayOfYear=!0),n=_t(s,0,t._dayOfYear),t._a[Wi]=n.getUTCMonth(),t._a[xi]=n.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=r[e]=i[e];for(;7>e;e++)t._a[e]=r[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ui]&&0===t._a[Gi]&&0===t._a[Pi]&&0===t._a[Ci]&&(t._nextDay=!0,t._a[Ui]=0),t._d=(t._useUTC?_t:mt).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Ui]=24)}}function Tt(t){var e,n,i,s,r,a,o,u;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(r=1,a=4,n=Yt(e.GG,t._a[Oi],Mt(Ft(),1,4).year),i=Yt(e.W,1),s=Yt(e.E,1),(1>s||s>7)&&(u=!0)):(r=t._locale._week.dow,a=t._locale._week.doy,n=Yt(e.gg,t._a[Oi],Mt(Ft(),r,a).year),i=Yt(e.w,1),null!=e.d?(s=e.d,(0>s||s>6)&&(u=!0)):null!=e.e?(s=e.e+r,(e.e<0||e.e>6)&&(u=!0)):s=r),1>i||i>St(n,r,a)?d(t)._overflowWeeks=!0:null!=u?d(t)._overflowWeekday=!0:(o=Dt(n,i,s,r,a),t._a[Oi]=o.year,t._dayOfYear=o.dayOfYear)}function bt(e){if(e._f===t.ISO_8601)return void ct(e);e._a=[],d(e).empty=!0;var n,i,s,r,a,o=""+e._i,u=o.length,l=0;for(s=$(e._f,e._locale).match(ri)||[],n=0;n0&&d(e).unusedInput.push(a),o=o.slice(o.indexOf(i)+i.length),l+=i.length),ui[r]?(i?d(e).empty=!1:d(e).unusedTokens.push(r),tt(r,i,e)):e._strict&&!i&&d(e).unusedTokens.push(r);d(e).charsLeftOver=u-l,o.length>0&&d(e).unusedInput.push(o),d(e).bigHour===!0&&e._a[Ui]<=12&&e._a[Ui]>0&&(d(e).bigHour=void 0),e._a[Ui]=Ot(e._locale,e._a[Ui],e._meridiem),kt(e),ht(e)}function Ot(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&12>e&&(e+=12),i||12!==e||(e=0),e):e}function Wt(t){var e,n,i,s,r;if(0===t._f.length)return d(t).invalidFormat=!0,void(t._d=new Date(NaN));for(s=0;sr)&&(i=r,n=e));a(t,n||e)}function xt(t){if(!t._d){var e=L(t._i);t._a=s([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),kt(t)}}function Ut(t){var e=new m(ht(Gt(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Gt(t){var e=t._i,s=t._f;return t._locale=t._locale||P(t._l),null===e||void 0===s&&""===e?h({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),_(e)?new m(ht(e)):(n(s)?Wt(t):s?bt(t):i(e)?t._d=e:Pt(t),l(t)||(t._d=null),t))}function Pt(e){var r=e._i;void 0===r?e._d=new Date(t.now()):i(r)?e._d=new Date(+r):"string"==typeof r?ft(e):n(r)?(e._a=s(r.slice(0),function(t){return parseInt(t,10)}),kt(e)):"object"==typeof r?xt(e):"number"==typeof r?e._d=new Date(r):t.createFromInputFallback(e)}function Ct(t,e,n,i,s){var r={};return"boolean"==typeof n&&(i=n,n=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=s,r._l=n,r._i=t,r._f=e,r._strict=i,Ut(r)}function Ft(t,e,n,i){return Ct(t,e,n,i,!1)}function Ht(t,e){var i,s;if(1===e.length&&n(e[0])&&(e=e[0]),!e.length)return Ft();for(i=e[0],s=1;st&&(t=-t,n="-"),n+R(~~(t/60),2)+e+R(~~t%60,2)})}function Rt(t,e){var n=(e||"").match(t)||[],i=n[n.length-1]||[],s=(i+"").match(Xi)||["-",0,0],r=+(60*s[1])+g(s[2]);return"+"===s[0]?r:-r}function Et(e,n){var s,r;return n._isUTC?(s=n.clone(),r=(_(e)||i(e)?+e:+Ft(e))-+s,s._d.setTime(+s._d+r),t.updateOffset(s,!1),s):Ft(e).local()}function jt(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function zt(e,n){var i,s=this._offset||0;return this.isValid()?null!=e?("string"==typeof e?e=Rt(Yi,e):Math.abs(e)<16&&(e=60*e),!this._isUTC&&n&&(i=jt(this)),this._offset=e,this._isUTC=!0,null!=i&&this.add(i,"m"),s!==e&&(!n||this._changeInProgress?ue(this,ne(e-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?s:jt(this):null!=e?this:NaN}function Zt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function $t(t){return this.utcOffset(0,t)}function qt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(jt(this),"m")),this}function Jt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Rt(Si,this._i)),this}function Bt(t){return this.isValid()?(t=t?Ft(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function Qt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Xt(){if(!c(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=Gt(t),t._a){var e=t._isUTC?o(t._a):Ft(t._a);this._isDSTShifted=this.isValid()&&p(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Kt(){return this.isValid()?!this._isUTC:!1}function te(){return this.isValid()?this._isUTC:!1}function ee(){return this.isValid()?this._isUTC&&0===this._offset:!1}function ne(t,e){var n,i,s,a=t,o=null;return It(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(a={},e?a[e]=t:a.milliseconds=t):(o=Ki.exec(t))?(n="-"===o[1]?-1:1,a={y:0,d:g(o[xi])*n,h:g(o[Ui])*n,m:g(o[Gi])*n,s:g(o[Pi])*n,ms:g(o[Ci])*n}):(o=ts.exec(t))?(n="-"===o[1]?-1:1,a={y:ie(o[2],n),M:ie(o[3],n),w:ie(o[4],n),d:ie(o[5],n),h:ie(o[6],n),m:ie(o[7],n),s:ie(o[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(s=re(Ft(a.from),Ft(a.to)),a={},a.ms=s.milliseconds,a.M=s.months),i=new Nt(a),It(t)&&r(t,"_locale")&&(i._locale=t._locale),i}function ie(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function se(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function re(t,e){var n;return t.isValid()&&e.isValid()?(e=Et(e,t),t.isBefore(e)?n=se(t,e):(n=se(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function ae(t){return 0>t?-1*Math.round(-1*t):Math.round(t)}function oe(t,e){return function(n,i){var s,r;return null===i||isNaN(+i)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),r=n,n=i,i=r),n="string"==typeof n?+n:n,s=ne(n,i),ue(this,s,t),this}}function ue(e,n,i,s){var r=n._milliseconds,a=ae(n._days),o=ae(n._months);e.isValid()&&(s=null==s?!0:s,r&&e._d.setTime(+e._d+r*i),a&&I(e,"Date",N(e,"Date")+a*i),o&&rt(e,N(e,"Month")+o*i),s&&t.updateOffset(e,a||o))}function de(t,e){var n=t||Ft(),i=Et(n,this).startOf("day"),s=this.diff(i,"days",!0),r=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse",a=e&&(S(e[r])?e[r]():e[r]);return this.format(a||this.localeData().calendar(r,this,Ft(n)))}function le(){return new m(this)}function he(t,e){var n=_(t)?t:Ft(t);return this.isValid()&&n.isValid()?(e=H(c(e)?"millisecond":e),"millisecond"===e?+this>+n:+n<+this.clone().startOf(e)):!1}function ce(t,e){var n=_(t)?t:Ft(t);return this.isValid()&&n.isValid()?(e=H(c(e)?"millisecond":e),"millisecond"===e?+n>+this:+this.clone().endOf(e)<+n):!1}function fe(t,e,n){return this.isAfter(t,n)&&this.isBefore(e,n)}function me(t,e){var n,i=_(t)?t:Ft(t);return this.isValid()&&i.isValid()?(e=H(e||"millisecond"),"millisecond"===e?+this===+i:(n=+i,+this.clone().startOf(e)<=n&&n<=+this.clone().endOf(e))):!1}function _e(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function ye(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ge(t,e,n){var i,s,r,a;return this.isValid()?(i=Et(t,this),i.isValid()?(s=6e4*(i.utcOffset()-this.utcOffset()),e=H(e),"year"===e||"month"===e||"quarter"===e?(a=pe(this,i),"quarter"===e?a/=3:"year"===e&&(a/=12)):(r=this-i,a="second"===e?r/1e3:"minute"===e?r/6e4:"hour"===e?r/36e5:"day"===e?(r-s)/864e5:"week"===e?(r-s)/6048e5:r),n?a:y(a)):NaN):NaN}function pe(t,e){var n,i,s=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(s,"months");return 0>e-r?(n=t.clone().add(s-1,"months"),i=(e-r)/(r-n)):(n=t.clone().add(s+1,"months"),i=(e-r)/(n-r)),-(s+i)}function ve(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function De(){var t=this.clone().utc();return 0r&&(e=r),Ze.call(this,t,e,n,i,s))}function Ze(t,e,n,i,s){var r=Dt(t,e,n,i,s),a=_t(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function $e(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function qe(t){return Mt(t,this._week.dow,this._week.doy).week}function Je(){return this._week.dow}function Be(){return this._week.doy}function Qe(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Xe(t){var e=Mt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ke(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function tn(t,e){return n(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function en(t){return this._weekdaysShort[t.day()]}function nn(t){return this._weekdaysMin[t.day()]}function sn(t,e,n){var i,s,r;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;7>i;i++){if(s=Ft([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(s,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(s,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(s,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function rn(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ke(t,this.localeData()),this.add(t-e,"d")):e}function an(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function on(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function un(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function dn(){return this.hours()%12||12}function ln(t,e){E(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function hn(t,e){return e._meridiemParse}function cn(t){return"p"===(t+"").toLowerCase().charAt(0)}function fn(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function mn(t,e){e[Ci]=g(1e3*("0."+t))}function _n(){return this._isUTC?"UTC":""}function yn(){return this._isUTC?"Coordinated Universal Time":""}function gn(t){return Ft(1e3*t)}function pn(){return Ft.apply(null,arguments).parseZone()}function vn(t,e,n){var i=this._calendar[t];return S(i)?i.call(e,n):i}function Dn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function Mn(){return this._invalidDate}function Sn(t){return this._ordinal.replace("%d",t)}function Yn(t){return t}function wn(t,e,n,i){var s=this._relativeTime[n];return S(s)?s(t,e,n,i):s.replace(/%d/i,t)}function kn(t,e){var n=this._relativeTime[t>0?"future":"past"];return S(n)?n(e):n.replace(/%s/i,e)}function Tn(t,e,n,i){var s=P(),r=o().set(i,e);return s[n](r,t)}function bn(t,e,n,i,s){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return Tn(t,e,n,s);var r,a=[];for(r=0;i>r;r++)a[r]=Tn(t,r,n,s);return a}function On(t,e){return bn(t,e,"months",12,"month")}function Wn(t,e){return bn(t,e,"monthsShort",12,"month")}function xn(t,e){return bn(t,e,"weekdays",7,"day")}function Un(t,e){return bn(t,e,"weekdaysShort",7,"day")}function Gn(t,e){return bn(t,e,"weekdaysMin",7,"day")}function Pn(){var t=this._data;return this._milliseconds=ws(this._milliseconds),this._days=ws(this._days),this._months=ws(this._months),t.milliseconds=ws(t.milliseconds),t.seconds=ws(t.seconds),t.minutes=ws(t.minutes),t.hours=ws(t.hours),t.months=ws(t.months),t.years=ws(t.years),this}function Cn(t,e,n,i){var s=ne(e,n);return t._milliseconds+=i*s._milliseconds,t._days+=i*s._days,t._months+=i*s._months,t._bubble()}function Fn(t,e){return Cn(this,t,e,1)}function Hn(t,e){return Cn(this,t,e,-1)}function Ln(t){return 0>t?Math.floor(t):Math.ceil(t)}function Vn(){var t,e,n,i,s,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||0>=r&&0>=a&&0>=o||(r+=864e5*Ln(In(o)+a),a=0,o=0),u.milliseconds=r%1e3,t=y(r/1e3),u.seconds=t%60,e=y(t/60),u.minutes=e%60,n=y(e/60),u.hours=n%24,a+=y(n/24),s=y(Nn(a)),o+=s,a-=Ln(In(s)),i=y(o/12),o%=12,u.days=a,u.months=o,u.years=i,this}function Nn(t){return 4800*t/146097}function In(t){return 146097*t/4800}function An(t){var e,n,i=this._milliseconds;if(t=H(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+Nn(e),"month"===t?n:n/12;switch(e=this._days+Math.round(In(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function Rn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function En(t){return function(){return this.as(t)}}function jn(t){return t=H(t),this[t+"s"]()}function zn(t){return function(){return this._data[t]}}function Zn(){return y(this.days()/7)}function $n(t,e,n,i,s){return s.relativeTime(e||1,!!n,t,i)}function qn(t,e,n){var i=ne(t).abs(),s=Is(i.as("s")),r=Is(i.as("m")),a=Is(i.as("h")),o=Is(i.as("d")),u=Is(i.as("M")),d=Is(i.as("y")),l=s=r&&["m"]||r=a&&["h"]||a=o&&["d"]||o=u&&["M"]||u=d&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=n,$n.apply(null,l)}function Jn(t,e){return void 0===As[t]?!1:void 0===e?As[t]:(As[t]=e,!0)}function Bn(t){var e=this.localeData(),n=qn(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function Qn(){var t,e,n,i=Rs(this._milliseconds)/1e3,s=Rs(this._days),r=Rs(this._months);t=y(i/60),e=y(t/60),i%=60,t%=60,n=y(r/12),r%=12;var a=n,o=r,u=s,d=e,l=t,h=i,c=this.asSeconds();return c?(0>c?"-":"")+"P"+(a?a+"Y":"")+(o?o+"M":"")+(u?u+"D":"")+(d||l||h?"T":"")+(d?d+"H":"")+(l?l+"M":"")+(h?h+"S":""):"P0D"}var Xn,Kn=t.momentProperties=[],ti=!1,ei={};t.suppressDeprecationWarnings=!1;var ni,ii={},si={},ri=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ai=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,oi={},ui={},di=/\d/,li=/\d\d/,hi=/\d{3}/,ci=/\d{4}/,fi=/[+-]?\d{6}/,mi=/\d\d?/,_i=/\d\d\d\d?/,yi=/\d\d\d\d\d\d?/,gi=/\d{1,3}/,pi=/\d{1,4}/,vi=/[+-]?\d{1,6}/,Di=/\d+/,Mi=/[+-]?\d+/,Si=/Z|[+-]\d\d:?\d\d/gi,Yi=/Z|[+-]\d\d(?::?\d\d)?/gi,wi=/[+-]?\d+(\.\d{1,3})?/,ki=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Ti={},bi={},Oi=0,Wi=1,xi=2,Ui=3,Gi=4,Pi=5,Ci=6,Fi=7,Hi=8;E("M",["MM",2],"Mo",function(){return this.month()+1}),E("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),E("MMMM",0,0,function(t){return this.localeData().months(this,t)}),F("month","M"),q("M",mi),q("MM",mi,li),q("MMM",function(t,e){return e.monthsShortRegex(t)}),q("MMMM",function(t,e){return e.monthsRegex(t)}),X(["M","MM"],function(t,e){e[Wi]=g(t)-1}),X(["MMM","MMMM"],function(t,e,n,i){var s=n._locale.monthsParse(t,i,n._strict);null!=s?e[Wi]=s:d(n).invalidMonth=t});var Li=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Vi="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ni="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ii=ki,Ai=ki,Ri=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Ei=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,ji=/Z|[+-]\d\d(?::?\d\d)?/,zi=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Zi=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],$i=/^\/?Date\((\-?\d+)/i;t.createFromInputFallback=D("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),E("Y",0,0,function(){var t=this.year();return 9999>=t?""+t:"+"+t}),E(0,["YY",2],0,function(){return this.year()%100}),E(0,["YYYY",4],0,"year"),E(0,["YYYYY",5],0,"year"),E(0,["YYYYYY",6,!0],0,"year"),F("year","y"),q("Y",Mi),q("YY",mi,li),q("YYYY",pi,ci),q("YYYYY",vi,fi),q("YYYYYY",vi,fi),X(["YYYYY","YYYYYY"],Oi),X("YYYY",function(e,n){n[Oi]=2===e.length?t.parseTwoDigitYear(e):g(e);}),X("YY",function(e,n){n[Oi]=t.parseTwoDigitYear(e)}),X("Y",function(t,e){e[Oi]=parseInt(t,10)}),t.parseTwoDigitYear=function(t){return g(t)+(g(t)>68?1900:2e3)};var qi=V("FullYear",!1);t.ISO_8601=function(){};var Ji=D("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Ft.apply(null,arguments);return this.isValid()&&t.isValid()?this>t?this:t:h()}),Bi=D("moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Ft.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:h()}),Qi=function(){return Date.now?Date.now():+new Date};At("Z",":"),At("ZZ",""),q("Z",Yi),q("ZZ",Yi),X(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Rt(Yi,t)});var Xi=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var Ki=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,ts=/^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/;ne.fn=Nt.prototype;var es=oe(1,"add"),ns=oe(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var is=D("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});E(0,["gg",2],0,function(){return this.weekYear()%100}),E(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ie("gggg","weekYear"),Ie("ggggg","weekYear"),Ie("GGGG","isoWeekYear"),Ie("GGGGG","isoWeekYear"),F("weekYear","gg"),F("isoWeekYear","GG"),q("G",Mi),q("g",Mi),q("GG",mi,li),q("gg",mi,li),q("GGGG",pi,ci),q("gggg",pi,ci),q("GGGGG",vi,fi),q("ggggg",vi,fi),K(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=g(t)}),K(["gg","GG"],function(e,n,i,s){n[s]=t.parseTwoDigitYear(e)}),E("Q",0,"Qo","quarter"),F("quarter","Q"),q("Q",di),X("Q",function(t,e){e[Wi]=3*(g(t)-1)}),E("w",["ww",2],"wo","week"),E("W",["WW",2],"Wo","isoWeek"),F("week","w"),F("isoWeek","W"),q("w",mi),q("ww",mi,li),q("W",mi),q("WW",mi,li),K(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=g(t)});var ss={dow:0,doy:6};E("D",["DD",2],"Do","date"),F("date","D"),q("D",mi),q("DD",mi,li),q("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),X(["D","DD"],xi),X("Do",function(t,e){e[xi]=g(t.match(mi)[0],10)});var rs=V("Date",!0);E("d",0,"do","day"),E("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),E("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),E("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),E("e",0,0,"weekday"),E("E",0,0,"isoWeekday"),F("day","d"),F("weekday","e"),F("isoWeekday","E"),q("d",mi),q("e",mi),q("E",mi),q("dd",ki),q("ddd",ki),q("dddd",ki),K(["dd","ddd","dddd"],function(t,e,n,i){var s=n._locale.weekdaysParse(t,i,n._strict);null!=s?e.d=s:d(n).invalidWeekday=t}),K(["d","e","E"],function(t,e,n,i){e[i]=g(t)});var as="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),os="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),us="Su_Mo_Tu_We_Th_Fr_Sa".split("_");E("DDD",["DDDD",3],"DDDo","dayOfYear"),F("dayOfYear","DDD"),q("DDD",gi),q("DDDD",hi),X(["DDD","DDDD"],function(t,e,n){n._dayOfYear=g(t)}),E("H",["HH",2],0,"hour"),E("h",["hh",2],0,dn),E("hmm",0,0,function(){return""+dn.apply(this)+R(this.minutes(),2)}),E("hmmss",0,0,function(){return""+dn.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)}),E("Hmm",0,0,function(){return""+this.hours()+R(this.minutes(),2)}),E("Hmmss",0,0,function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)}),ln("a",!0),ln("A",!1),F("hour","h"),q("a",hn),q("A",hn),q("H",mi),q("h",mi),q("HH",mi,li),q("hh",mi,li),q("hmm",_i),q("hmmss",yi),q("Hmm",_i),q("Hmmss",yi),X(["H","HH"],Ui),X(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),X(["h","hh"],function(t,e,n){e[Ui]=g(t),d(n).bigHour=!0}),X("hmm",function(t,e,n){var i=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i)),d(n).bigHour=!0}),X("hmmss",function(t,e,n){var i=t.length-4,s=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i,2)),e[Pi]=g(t.substr(s)),d(n).bigHour=!0}),X("Hmm",function(t,e,n){var i=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i))}),X("Hmmss",function(t,e,n){var i=t.length-4,s=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i,2)),e[Pi]=g(t.substr(s))});var ds=/[ap]\.?m?\.?/i,ls=V("Hours",!0);E("m",["mm",2],0,"minute"),F("minute","m"),q("m",mi),q("mm",mi,li),X(["m","mm"],Gi);var hs=V("Minutes",!1);E("s",["ss",2],0,"second"),F("second","s"),q("s",mi),q("ss",mi,li),X(["s","ss"],Pi);var cs=V("Seconds",!1);E("S",0,0,function(){return~~(this.millisecond()/100)}),E(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),E(0,["SSS",3],0,"millisecond"),E(0,["SSSS",4],0,function(){return 10*this.millisecond()}),E(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),E(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),E(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),E(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),E(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),F("millisecond","ms"),q("S",gi,di),q("SS",gi,li),q("SSS",gi,hi);var fs;for(fs="SSSS";fs.length<=9;fs+="S")q(fs,Di);for(fs="S";fs.length<=9;fs+="S")X(fs,mn);var ms=V("Milliseconds",!1);E("z",0,0,"zoneAbbr"),E("zz",0,0,"zoneName");var _s=m.prototype;_s.add=es,_s.calendar=de,_s.clone=le,_s.diff=ge,_s.endOf=We,_s.format=Me,_s.from=Se,_s.fromNow=Ye,_s.to=we,_s.toNow=ke,_s.get=A,_s.invalidAt=Ve,_s.isAfter=he,_s.isBefore=ce,_s.isBetween=fe,_s.isSame=me,_s.isSameOrAfter=_e,_s.isSameOrBefore=ye,_s.isValid=He,_s.lang=is,_s.locale=Te,_s.localeData=be,_s.max=Bi,_s.min=Ji,_s.parsingFlags=Le,_s.set=A,_s.startOf=Oe,_s.subtract=ns,_s.toArray=Pe,_s.toObject=Ce,_s.toDate=Ge,_s.toISOString=De,_s.toJSON=Fe,_s.toString=ve,_s.unix=Ue,_s.valueOf=xe,_s.creationData=Ne,_s.year=qi,_s.isLeapYear=pt,_s.weekYear=Ae,_s.isoWeekYear=Re,_s.quarter=_s.quarters=$e,_s.month=at,_s.daysInMonth=ot,_s.week=_s.weeks=Qe,_s.isoWeek=_s.isoWeeks=Xe,_s.weeksInYear=je,_s.isoWeeksInYear=Ee,_s.date=rs,_s.day=_s.days=rn,_s.weekday=an,_s.isoWeekday=on,_s.dayOfYear=un,_s.hour=_s.hours=ls,_s.minute=_s.minutes=hs,_s.second=_s.seconds=cs,_s.millisecond=_s.milliseconds=ms,_s.utcOffset=zt,_s.utc=$t,_s.local=qt,_s.parseZone=Jt,_s.hasAlignedHourOffset=Bt,_s.isDST=Qt,_s.isDSTShifted=Xt,_s.isLocal=Kt,_s.isUtcOffset=te,_s.isUtc=ee,_s.isUTC=ee,_s.zoneAbbr=_n,_s.zoneName=yn,_s.dates=D("dates accessor is deprecated. Use date instead.",rs),_s.months=D("months accessor is deprecated. Use month instead",at),_s.years=D("years accessor is deprecated. Use year instead",qi),_s.zone=D("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Zt);var ys=_s,gs={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},ps={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},vs="Invalid date",Ds="%d",Ms=/\d{1,2}/,Ss={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Ys=T.prototype;Ys._calendar=gs,Ys.calendar=vn,Ys._longDateFormat=ps,Ys.longDateFormat=Dn,Ys._invalidDate=vs,Ys.invalidDate=Mn,Ys._ordinal=Ds,Ys.ordinal=Sn,Ys._ordinalParse=Ms,Ys.preparse=Yn,Ys.postformat=Yn,Ys._relativeTime=Ss,Ys.relativeTime=wn,Ys.pastFuture=kn,Ys.set=w,Ys.months=nt,Ys._months=Vi,Ys.monthsShort=it,Ys._monthsShort=Ni,Ys.monthsParse=st,Ys._monthsRegex=Ai,Ys.monthsRegex=dt,Ys._monthsShortRegex=Ii,Ys.monthsShortRegex=ut,Ys.week=qe,Ys._week=ss,Ys.firstDayOfYear=Be,Ys.firstDayOfWeek=Je,Ys.weekdays=tn,Ys._weekdays=as,Ys.weekdaysMin=nn,Ys._weekdaysMin=us,Ys.weekdaysShort=en,Ys._weekdaysShort=os,Ys.weekdaysParse=sn,Ys.isPM=cn,Ys._meridiemParse=ds,Ys.meridiem=fn,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===g(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=D("moment.lang is deprecated. Use moment.locale instead.",x),t.langData=D("moment.langData is deprecated. Use moment.localeData instead.",P);var ws=Math.abs,ks=En("ms"),Ts=En("s"),bs=En("m"),Os=En("h"),Ws=En("d"),xs=En("w"),Us=En("M"),Gs=En("y"),Ps=zn("milliseconds"),Cs=zn("seconds"),Fs=zn("minutes"),Hs=zn("hours"),Ls=zn("days"),Vs=zn("months"),Ns=zn("years"),Is=Math.round,As={s:45,m:45,h:22,d:26,M:11},Rs=Math.abs,Es=Nt.prototype;Es.abs=Pn,Es.add=Fn,Es.subtract=Hn,Es.as=An,Es.asMilliseconds=ks,Es.asSeconds=Ts,Es.asMinutes=bs,Es.asHours=Os,Es.asDays=Ws,Es.asWeeks=xs,Es.asMonths=Us,Es.asYears=Gs,Es.valueOf=Rn,Es._bubble=Vn,Es.get=jn,Es.milliseconds=Ps,Es.seconds=Cs,Es.minutes=Fs,Es.hours=Hs,Es.days=Ls,Es.weeks=Zn,Es.months=Vs,Es.years=Ns,Es.humanize=Bn,Es.toISOString=Qn,Es.toString=Qn,Es.toJSON=Qn,Es.locale=Te,Es.localeData=be,Es.toIsoString=D("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qn),Es.lang=is,E("X",0,0,"unix"),E("x",0,0,"valueOf"),q("x",Mi),q("X",wi),X("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),X("x",function(t,e,n){n._d=new Date(g(t))}),t.version="2.12.0",e(Ft),t.fn=ys,t.min=Lt,t.max=Vt,t.now=Qi,t.utc=o,t.unix=gn,t.months=On,t.isDate=i,t.locale=x,t.invalid=h,t.duration=ne,t.isMoment=_,t.weekdays=xn,t.parseZone=pn,t.localeData=P,t.isDuration=It,t.monthsShort=Wn,t.weekdaysMin=Gn,t.defineLocale=U,t.updateLocale=G,t.locales=C,t.weekdaysShort=Un,t.normalizeUnits=H,t.relativeTimeThreshold=Jn,t.prototype=ys;var js=t;return js}); + + +/** + * @module Slick + * @author Ken Wheeler + * @see http://kenwheeler.github.io/slick + * @version 1.6.0 + */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('__N__ logo_squarred ? $mysoc->logo_squarred : $mysoc->logo, \'_small\') ?>\" alt=\"\" height=\"34\">__N__
    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__ __N____N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 189 -> 11__+MAX_llx_website_page__ - Aliases home --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(11__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'home', '', 'Home', 'Welcome', 'en', '', '', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N__ __N__ __N__ __N____N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Boost your business__N__
    __N__
    __N__

    We provide powerful solutions for all businesses

    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
     Best prices on the market __N__
    __N__
    __N__

    Our optimized processes allows us to provide you very competitive prices

    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N____N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    A competent team

    __N__
    __N__
    __N__
    __N__

    Our sales representative are also technicians.

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__

    Take a look at our offers...

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__

    Our customer-supplier relationship is very appreciated by our customers

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    After Sale service

    __N__
    __N__
    __N__
    __N__

    We continue to follow and assist you after the sale. Contact us at any time.

    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__ __N__
    __N__
    __N__

    Looking for

    __N__

    a high quality service?

    __N__

    With a lot of experience, hiring us is a security for your business!

    __N__
    __N__
    __N__
    11
    __N__
    Years of Experience
    __N__
    __N__
    __N__
    __N__ query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?>__N__
    __N__
    Experts
    __N__
    __N__
    __N__
    __N__ query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?>__N__
    __N__
    Trusted Clients
    __N__
    __N__
    __N__
    __N__
    Contact us__N__   or  __N__ See our pricing
    __N__
    __N__
    __N__
    __N____N__ __N__ __N__ __N__
    __N__
    __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N__

    our plans

    __N____N__ __N__
    __N__ __N__
    __N__
    __N__
    __N__
    FREE
    __N__
    The best choice for personal use
    __N__
    The service 1 for free
    __N__
    __N__ 0/ month__N__
    __N__
    __N__ Available features are : __N__
      __N__
    • __N__ __N__ Service 1 __N__
    • __N__
    __N__
    __N__
    __N__ Subcribe__N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    STARTER
    __N__
    For small companiess
    __N__
    The service 1 and product 1 at low price
    __N__
    __N__ 29/ month__N__
    __N__
    __N__ Available features are : __N__
      __N__
    • __N__ __N__ Service 1__N__
    • __N__
    • __N__ __N__ Product 1__N__
    • __N__
    __N__
    __N__
    __N__ Subscribe__N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    PREMIUM
    __N__
    For large companies
    __N__
    The full option package for a one shot price__N__
    __N__
    __N__ 2499__N__
    __N__
    __N__ Available features are :__N__
      __N__
    • __N__ __N__ Service 1
    • __N__
    • __N__ __N__ Service 2
    • __N__
    • __N__ __N__ Product 1
    • __N__
    __N__
    __N__
    __N__ Buy__N__
    __N__
    __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__

    our team

    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N____N____N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Request a callback

    __N__
    __N__
    __N__ __N__
    __N__
    __N__ __N__
    __N__
    __N__ __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    successful cases

    __N__
    __N__
    __N__
    __N__
    __N__
    \"\"__N__
    __N__
    __N__
    __N__
    \"\"__N__
    __N__
    __N__
    __N__
    \"\"__N__
    __N__
    __N__
    __N__
    \"\"__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ Albert Einstein__N__
    __N__
    Scientist, www.emc2.org
    __N__
    __N__
    __N__
    __N__
    __N__
    -20%
    __N__
    Expenses
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__ They did everything, with almost no time or effort for me. The best part was that I could trust their team to represent our company professionally with our clients.__N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ Pierre Curie__N__
    __N__
    CEO “Cyclonic”
    __N__
    __N__
    __N__
    __N__
    __N__
    -30%
    __N__
    Expenses
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__ Their course gave me the confidence to implement new techniques in my work. I learn “how” to write – “what” and “why” also became much clearer.__N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ Marie Curie__N__
    __N__
    CTO \"Cyclonic\"
    __N__
    __N__
    __N__
    __N__
    __N__
    +22%
    __N__
    Turnover
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__ We were skeptical to work with a consultant to optimize our sales emails, but they were highly recommended by many other startups we knew. They helped us to reach our objective of 20% turnover increase, in 4 monthes.__N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ John Doe__N__
    __N__
    Sale representative
    __N__
    __N__
    __N__
    __N__
    __N__
    +40%
    __N__
    Quotes
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__ Their work on our website and Internet marketing has made a significant different to our business. We’ve seen a +40% increase in quote requests from our website.__N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N____N__ __N__
    __N__
    __N__

    Latest News

    __N__ __N__
    __N__
    __N____N____N__ __N____N____N__
    __N__', '', 0); +UPDATE llx_website SET fk_default_home = 11__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 190 -> 12__+MAX_llx_website_page__ - Aliases our-team --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(12__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'our-team', '', 'Our team', 'Our team', 'en', '', 'team', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Our team__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__
    __N__

    __N__

    The crew...




    __N__ query($sql);__N__ if (! $resql) dol_print_error($db);__N__ while ($obj = $db->fetch_object($resql))__N__ {__N__ $arrayofusers[]=$obj->rowid;__N__ }__N__ __N__ print \'
    \';__N__ foreach($arrayofusers as $id)__N__ {__N__ $fuser->fetch($id);__N____N__ print \'
    \';__N__ print \'
    \';__N__ print \'
    \';__N__ if ($fuser->photo) print Form::showphoto(\'userphoto\', $fuser, 100, 0, 0, \'photowithmargin\', \'\', 0);__N__ //print \'photo.\'\" width=\"129\" height=\"129\" alt=\"\">\';__N__ else print \'\"\"\';__N__ print \'
    \';__N__ print \'
    \';__N__ print \'
    \'.$fuser->firstname.\'
    \';__N__ print \'
      \';__N__ //print \'
    • September 24, 2018
    • \';__N__ if ($fuser->job) print \'
    • \'.$fuser->job.\'
    • \';__N__ else print \'
    • \';__N__ print \'
    \';__N__ print \'
    \';__N__ print \'
    \';__N__ print \'
    \';__N__ }__N__ print \'
    \';__N____N__ ?>__N__
    __N__
    __N____N__

    __N____N__ __N____N__
    __N__ __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 191 -> 13__+MAX_llx_website_page__ - Aliases partners --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(13__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'partners', '', 'Partners', 'Partners', 'en', '', 'partners', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Partners__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__
    __N__
    __N__

    Our partners...

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__

    __N____N__ __N____N__
    __N__ __N____N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 192 -> 14__+MAX_llx_website_page__ - Aliases pricing --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(14__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'pricing', '', 'Pricing', 'All the prices of our offers', 'en', '', 'pricing', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Our plans__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N____N____N__ __N__
    __N__
    __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N____N__ __N__
    __N__ __N__
    __N__
    __N__
    __N__
    FREE
    __N__
    The best choice for personal use
    __N__
    The service 1 for free
    __N__
    __N__ 0/ month__N__
    __N__
    __N__ Available features are : __N__
      __N__
    • __N__ __N__ Service 1 __N__
    • __N__
    __N__
    __N__
    __N__ Subcribe__N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    STARTER
    __N__
    For small companiess
    __N__
    The service 1 and product 1 at low price
    __N__
    __N__ 29/ month__N__
    __N__
    __N__ Available features are : __N__
      __N__
    • __N__ __N__ Service 1__N__
    • __N__
    • __N__ __N__ Product 1__N__
    • __N__
    __N__
    __N__
    __N__ Subscribe__N__
    __N__
    __N__
    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    PREMIUM
    __N__
    For large companies
    __N__
    The full option package for a one shot price__N__
    __N__
    __N__ 2499__N__
    __N__
    __N__ Available features are :__N__
      __N__
    • __N__ __N__ Service 1
    • __N__
    • __N__ __N__ Service 2
    • __N__
    • __N__ __N__ Product 1
    • __N__
    __N__
    __N__
    __N__ Buy__N__
    __N__
    __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__ __N__ __N__ __N__

    __N____N__ __N____N__
    __N__ __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 193 -> 15__+MAX_llx_website_page__ - Aliases privacy-policies --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(15__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'privacy-policies', '', 'Privacy Policies', 'Privacy Policies', 'en', '', 'Privacy policies, GDPR', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N__ __N__ __N__ __N____N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Privacy Policy__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N__


    __N____N__
    __N__
    __N__

    Information collected and used


    __N__

    * Your customer information (email, phone, business name, first and last name of contact, address, postal code, country and VAT number) are stored when you become a customer. This information allows us to bill you. __N__

    * If you paid using our online service, we also store the last 4 digits of your card. The full details of your credit card is stored by our payment provider Stripe (the world leader in online payment).

    __N__

    * You have the option to request the deletion of your data and the above information at any time (except data required y fiscal tracking rules, like your invoices).

    __N__

    * The Privacy Policies and GDPR referral contact for our services is: global->MAIN_INFO_GDPR; ?>

    __N__


    __N__

    Data Storage and Backups


    __N__

    * The storage of collected data (see \'Information collected and used\') is done in a database.

    __N__

    * We made one backup every week. Only 4 weeks are kept.

    __N__


    __N__

    Subcontractor


    __N__

    * Our services relies on the following subcontractors and service:
    __N__** The host of computer servers, which is ABC company. These servers are hosted in US. No customer information is communicated to this subcontractor who only provides the hardware and network layer, the installation and operation being carried out by us directly.
    __N__** The online payment service Stripe, which is used, to ensure regular payment of subscription or your invoices paid online.

    __N__


    __N__

    Software Protection


    __N__

    * Our services runs on Linux Ubuntu systems and software. They benefit from regular security updates when the operating system editor (Ubuntu Canonical) publishes them.

    __N__

    * Our services are accessible in HTTPS (HTTP encrypted) only, encrypted with SHA256 certificates.

    __N__

    * Our technical platform are protected by various solutions.

    __N__


    __N__

    Data theft


    __N__

    * In case of suspicion of a theft of the data we have collected (see first point \'Information collected and used\'), customers will be informed by email, at email corresponding to their customer account

    __N__

     

    __N__
    __N__
    __N____N____N__ __N__ __N__ __N__
    __N__ __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 194 -> 16__+MAX_llx_website_page__ - Aliases product-p --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(16__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'product-p', '', 'Product P', 'Product P', 'en', '', '', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Product P__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__
    __N__
    __N__
    __N__
    __N__
    __N__This is a description page of our product P...
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__

    __N____N__ __N____N__
    __N__ __N____N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 195 -> 17__+MAX_llx_website_page__ - Aliases search --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(17__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'search', '', 'Search Page', 'Search Page', 'en', '', '', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Search__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N__


    __N____N__
    __N__ __N__
    __N__
    __N__ \" />__N__
    __N__ \">__N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__ __N__ load(\"main\");__N__ __N__ if (function_exists(\'getPagesFromSearchCriterias\'))__N__ {__N__ if (GETPOSTISSET(\'s\'))__N__ {__N__ $listofpages = getPagesFromSearchCriterias(\'page\', \'meta\', GETPOST(\'s\', \'alphanohtml\'));__N__ if ($listofpages[\'code\'] == \'OK\')__N__ {__N__ foreach($listofpages[\'list\'] as $websitepagefound)__N__ {__N__ print \'
    ref.\'.php\">\'.$websitepagefound->title.\' - \'.$websitepagefound->description.\'
    \';__N__ }__N__ }__N__ else__N__ {__N__ // If error, show message__N__ print $listofpages[\'message\'];__N__ }__N__ }__N__ }__N__ else__N__ {__N__ print $weblangs->trans(\"FeatureNotYetAvailable\");__N__ }__N__ ?>__N__ __N__





    __N__
    __N____N__ __N____N__
    __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:23:16 UTC --; +-- Page ID 196 -> 18__+MAX_llx_website_page__ - Aliases service-s --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(18__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'service-s', '', 'Service S', 'Service S', 'en', '', '', '1', '2020-10-07 13:13:26', '2022-07-12 11:17:55', null, '', 'page', '', '
    __N____N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    Service S__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__
    __N__
    __N__
    __N__
    __N__
    __N__This is a description page of our service S...
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N____N__

    __N____N__ __N____N__
    __N__', '', 0); + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-style03.jpg b/htdocs/install/doctemplates/websites/website_template-homesubmenu.jpg similarity index 100% rename from htdocs/install/doctemplates/websites/website_template-style03.jpg rename to htdocs/install/doctemplates/websites/website_template-homesubmenu.jpg diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/LICENSE b/htdocs/install/doctemplates/websites/website_template-homesubmenu/LICENSE new file mode 100644 index 00000000000..871ef743662 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/LICENSE @@ -0,0 +1,4 @@ +LICENSE +------- + +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/README.md b/htdocs/install/doctemplates/websites/website_template-homesubmenu/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/LICENSE b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/LICENSE new file mode 100644 index 00000000000..6ee68185103 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/LICENSE @@ -0,0 +1 @@ +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/README.md b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/htmlheader.html new file mode 100644 index 00000000000..0de0b36283f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/htmlheader.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/index.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/index.php new file mode 100644 index 00000000000..967c5deb878 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/index.php @@ -0,0 +1,5 @@ +ref.'/page202.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/javascript.js.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/javascript.js.php new file mode 100644 index 00000000000..f58102cf00b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/javascript.js.php @@ -0,0 +1,13 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/manifest.json.php new file mode 100644 index 00000000000..8f844114e48 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/manifest.json.php @@ -0,0 +1,13 @@ + + + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/master.inc.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/master.inc.php new file mode 100644 index 00000000000..bd25ba5895d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/master.inc.php @@ -0,0 +1,7 @@ + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/page202.tpl.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/page202.tpl.php new file mode 100644 index 00000000000..f0c564c2d61 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/page202.tpl.php @@ -0,0 +1,315 @@ + + + +Home page + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +email; + $message = GETPOST('message', 'alpha'); + $cmail = new CMailFile('Contact from website', $to, $from, $message); + if ($cmail->sendfile()) { + ?> + + trans("ErrorFailedToSendMail", $from, $to).'. '.$cmail->error; + } +} +?> +
    + + +
    +
    +
    +
    +

    Get Productive

    +

    + Lorem ipsum dolor, sit amet consectetur adipisicing + elit. Ab fuga nobis omnis alias, aliquid iste cumque + tempora nam reprehenderit quia itaque debitis, + nostrum labore rerum reiciendis laboriosam unde, + tempore corporis. +

    + landing-img +
    + + Learn More + +
    +
    +
    +
    +
    +
    +
    +

    + LOREM IPSUM DOLOR SIT AMET EZAJB +

    + article +
    +
    +

    Our Company

    +

    + Lorem ipsum dolor, sit amet consectetur adipisicing + elit. Ab fuga nobis omnis alias, aliquid iste cumque + tempora nam reprehenderit quia itaque debitis, + nostrum labore rerum reiciendis laboriosam unde, + tempore corporis. +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Founders

    +
      +
    • +

      Author One

      +
    • +
    • +

      Author Two

      +
    • +
    • +

      Author Three

      +
    • +
    • +

      Author Four

      +
    • +
    +
    +
    +

    About

    +

    + Lorem ipsum dolor sit amet consectetur adipisicing elit. Veritatis accusantium earum sed odit velit laudantium ex libero quisquam consectetur, + dolorem vero ipsam perferendis quibusdam itaque omnis a consequatur error repellat. +

    +
    +
    +
    +
    + +
    +

    Contact us

    + +

    Do you have any questions? Please do not hesitate to contact us directly. Our team will come back to you within + a matter of hours to help you.

    + +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    +
      +
    • +

      getFullAddress() ?>

      +
    • + +
    • +

      phone ?>

      +
    • + +
    • +

      email ?>

      +
    • +
    +
    + +
    + + +
    +
    + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/styles.css.php new file mode 100644 index 00000000000..d194541d6ea --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/styles.css.php @@ -0,0 +1,12508 @@ + +@charset "UTF-8"; + +.bodywebsite :root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.bodywebsite *, + .bodywebsite *::before, + .bodywebsite *::after { + box-sizing: border-box; +} + +.bodywebsite .text-white{ + color: white; +} + +@media (prefers-reduced-motion: no-preference) { + .bodywebsite :root { + scroll-behavior: smooth; + } +} + +.bodywebsite body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +.bodywebsite hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +.bodywebsite h6, .bodywebsite .h6, .bodywebsite h5, .bodywebsite .h5, .bodywebsite h4, .bodywebsite .h4, .bodywebsite h3, .bodywebsite .h3, .bodywebsite h2, .bodywebsite .h2, .bodywebsite h1, .bodywebsite .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +.bodywebsite h1, .bodywebsite .h1 { + font-size: calc(1.375rem + 1.5vw); +} + +@media (min-width: 1200px) { + .bodywebsite h1, .bodywebsite .h1 { + font-size: 2.5rem; + } +} + +.bodywebsite h2, .bodywebsite .h2 { + font-size: calc(1.325rem + 0.9vw); +} + +@media (min-width: 1200px) { + .bodywebsite h2, .bodywebsite .h2 { + font-size: 2rem; + } +} + +.bodywebsite h3, .bodywebsite .h3 { + font-size: calc(1.3rem + 0.6vw); +} + +@media (min-width: 1200px) { + .bodywebsite h3, .bodywebsite .h3 { + font-size: 1.75rem; + } +} + +.bodywebsite h4, .bodywebsite .h4 { + font-size: calc(1.275rem + 0.3vw); +} + +@media (min-width: 1200px) { + .bodywebsite h4, .bodywebsite .h4 { + font-size: 1.5rem; + } +} + +.bodywebsite h5, .bodywebsite .h5 { + font-size: 1.25rem; +} + +.bodywebsite h6, .bodywebsite .h6 { + font-size: 1rem; +} + +.bodywebsite p { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +.bodywebsite address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +.bodywebsite ol, + .bodywebsite ul { + padding-left: 2rem; +} + +.bodywebsite ol, + .bodywebsite ul, + .bodywebsite dl { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite ol ol, + .bodywebsite ul ul, + .bodywebsite ol ul, + .bodywebsite ul ol { + margin-bottom: 0; +} + +.bodywebsite dt { + font-weight: 700; +} + +.bodywebsite dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +.bodywebsite blockquote { + margin: 0 0 1rem; +} + +.bodywebsite b, + .bodywebsite strong { + font-weight: bolder; +} + +.bodywebsite small, .bodywebsite .small { + font-size: 0.875em; +} + +.bodywebsite mark, .bodywebsite .mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +.bodywebsite sub, + .bodywebsite sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +.bodywebsite sub { + bottom: -0.25em; +} + +.bodywebsite sup { + top: -0.5em; +} + +.bodywebsite a { + color: var(--bs-link-color); + text-decoration: underline; +} + +.bodywebsite a:hover { + color: var(--bs-link-hover-color); +} + +.bodywebsite a:not([href]):not([class]), .bodywebsite a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +.bodywebsite pre, + .bodywebsite code, + .bodywebsite kbd, + .bodywebsite samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +.bodywebsite pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} + +.bodywebsite pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.bodywebsite code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} + +.bodywebsite a > code { + color: inherit; +} + +.bodywebsite kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} + +.bodywebsite kbd kbd { + padding: 0; + font-size: 1em; +} + +.bodywebsite figure { + margin: 0 0 1rem; +} + +.bodywebsite img, + .bodywebsite svg { + vertical-align: middle; +} + +.bodywebsite table { + caption-side: bottom; + border-collapse: collapse; +} + +.bodywebsite caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +.bodywebsite th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +.bodywebsite thead, + .bodywebsite tbody, + .bodywebsite tfoot, + .bodywebsite tr, + .bodywebsite td, + .bodywebsite th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +.bodywebsite label { + display: inline-block; +} + +.bodywebsite button { + border-radius: 0; +} + +.bodywebsite button:focus:not(:focus-visible) { + outline: 0; +} + +.bodywebsite input, + .bodywebsite button, + .bodywebsite select, + .bodywebsite optgroup, + .bodywebsite textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.bodywebsite button, + .bodywebsite select { + text-transform: none; +} + +.bodywebsite [role=button] { + cursor: pointer; +} + +.bodywebsite select { + word-wrap: normal; +} + +.bodywebsite select:disabled { + opacity: 1; +} + +.bodywebsite [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +.bodywebsite button, + .bodywebsite [type=button], + .bodywebsite [type=reset], + .bodywebsite [type=submit] { + -webkit-appearance: button; +} + +.bodywebsite button:not(:disabled), + .bodywebsite [type=button]:not(:disabled), + .bodywebsite [type=reset]:not(:disabled), + .bodywebsite [type=submit]:not(:disabled) { + cursor: pointer; +} + +.bodywebsite ::-moz-focus-inner { + padding: 0; + border-style: none; +} + +.bodywebsite textarea { + resize: vertical; +} + +.bodywebsite fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +.bodywebsite legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} + +@media (min-width: 1200px) { + .bodywebsite legend { + font-size: 1.5rem; + } +} + +.bodywebsite legend + * { + clear: left; +} + +.bodywebsite ::-webkit-datetime-edit-fields-wrapper, + .bodywebsite ::-webkit-datetime-edit-text, + .bodywebsite ::-webkit-datetime-edit-minute, + .bodywebsite ::-webkit-datetime-edit-hour-field, + .bodywebsite ::-webkit-datetime-edit-day-field, + .bodywebsite ::-webkit-datetime-edit-month-field, + .bodywebsite ::-webkit-datetime-edit-year-field { + padding: 0; +} + +.bodywebsite ::-webkit-inner-spin-button { + height: auto; +} + +.bodywebsite [type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +.bodywebsite ::-webkit-search-decoration { + -webkit-appearance: none; +} + +.bodywebsite ::-webkit-color-swatch-wrapper { + padding: 0; +} + +.bodywebsite ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite ::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite output { + display: inline-block; +} + +.bodywebsite iframe { + border: 0; +} + +.bodywebsite summary { + display: list-item; + cursor: pointer; +} + +.bodywebsite progress { + vertical-align: baseline; +} + +.bodywebsite [hidden] { + display: none !important; +} + +.bodywebsite .lead { + font-size: 1.25rem; + font-weight: 300; +} + +.bodywebsite .display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-1 { + font-size: 5rem; + } +} + +.bodywebsite .display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-2 { + font-size: 4.5rem; + } +} + +.bodywebsite .display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-3 { + font-size: 4rem; + } +} + +.bodywebsite .display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-4 { + font-size: 3.5rem; + } +} + +.bodywebsite .display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-5 { + font-size: 3rem; + } +} + +.bodywebsite .display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-6 { + font-size: 2.5rem; + } +} + +.bodywebsite .list-unstyled { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline-item { + display: inline-block; +} + +.bodywebsite .list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.bodywebsite .initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.bodywebsite .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.bodywebsite .blockquote > :last-child { + margin-bottom: 0; +} + +.bodywebsite .blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .blockquote-footer::before { + content: "— "; +} + +.bodywebsite .img-fluid { + max-width: 100%; + height: auto; +} + +.bodywebsite .img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.bodywebsite .figure { + display: inline-block; +} + +.bodywebsite .figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.bodywebsite .figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .container, + .bodywebsite .container-fluid, + .bodywebsite .container-xxl, + .bodywebsite .container-xl, + .bodywebsite .container-lg, + .bodywebsite .container-md, + .bodywebsite .container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .container-sm, .bodywebsite .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + .bodywebsite .container-xxl, .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1320px; + } +} + +.bodywebsite .row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} + +.bodywebsite .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.bodywebsite .col { + flex: 1 0 0%; +} + +.bodywebsite .row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.bodywebsite .row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.bodywebsite .row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.bodywebsite .col-auto { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.bodywebsite .col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.bodywebsite .col-3 { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.bodywebsite .col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.bodywebsite .col-6 { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.bodywebsite .col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.bodywebsite .col-9 { + flex: 0 0 auto; + width: 75%; +} + +.bodywebsite .col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.bodywebsite .col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.bodywebsite .col-12 { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .offset-1 { + margin-left: 8.33333333%; +} + +.bodywebsite .offset-2 { + margin-left: 16.66666667%; +} + +.bodywebsite .offset-3 { + margin-left: 25%; +} + +.bodywebsite .offset-4 { + margin-left: 33.33333333%; +} + +.bodywebsite .offset-5 { + margin-left: 41.66666667%; +} + +.bodywebsite .offset-6 { + margin-left: 50%; +} + +.bodywebsite .offset-7 { + margin-left: 58.33333333%; +} + +.bodywebsite .offset-8 { + margin-left: 66.66666667%; +} + +.bodywebsite .offset-9 { + margin-left: 75%; +} + +.bodywebsite .offset-10 { + margin-left: 83.33333333%; +} + +.bodywebsite .offset-11 { + margin-left: 91.66666667%; +} + +.bodywebsite .g-0, + .bodywebsite .gx-0 { + --bs-gutter-x: 0; +} + +.bodywebsite .g-0, + .bodywebsite .gy-0 { + --bs-gutter-y: 0; +} + +.bodywebsite .g-1, + .bodywebsite .gx-1 { + --bs-gutter-x: 0.25rem; +} + +.bodywebsite .g-1, + .bodywebsite .gy-1 { + --bs-gutter-y: 0.25rem; +} + +.bodywebsite .g-2, + .bodywebsite .gx-2 { + --bs-gutter-x: 0.5rem; +} + +.bodywebsite .g-2, + .bodywebsite .gy-2 { + --bs-gutter-y: 0.5rem; +} + +.bodywebsite .g-3, + .bodywebsite .gx-3 { + --bs-gutter-x: 1rem; +} + +.bodywebsite .g-3, + .bodywebsite .gy-3 { + --bs-gutter-y: 1rem; +} + +.bodywebsite .g-4, + .bodywebsite .gx-4 { + --bs-gutter-x: 1.5rem; +} + +.bodywebsite .g-4, + .bodywebsite .gy-4 { + --bs-gutter-y: 1.5rem; +} + +.bodywebsite .g-5, + .bodywebsite .gx-5 { + --bs-gutter-x: 3rem; +} + +.bodywebsite .g-5, + .bodywebsite .gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .bodywebsite .col-sm { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-sm-0 { + margin-left: 0; + } + + .bodywebsite .offset-sm-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-sm-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-sm-3 { + margin-left: 25%; + } + + .bodywebsite .offset-sm-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-sm-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-sm-6 { + margin-left: 50%; + } + + .bodywebsite .offset-sm-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-sm-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-sm-9 { + margin-left: 75%; + } + + .bodywebsite .offset-sm-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-sm-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gx-sm-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gy-sm-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px) { + .bodywebsite .col-md { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-md-0 { + margin-left: 0; + } + + .bodywebsite .offset-md-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-md-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-md-3 { + margin-left: 25%; + } + + .bodywebsite .offset-md-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-md-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-md-6 { + margin-left: 50%; + } + + .bodywebsite .offset-md-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-md-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-md-9 { + margin-left: 75%; + } + + .bodywebsite .offset-md-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-md-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-md-0, + .bodywebsite .gx-md-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-md-0, + .bodywebsite .gy-md-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-md-1, + .bodywebsite .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-md-1, + .bodywebsite .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gx-md-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gy-md-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gx-md-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gy-md-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px) { + .bodywebsite .col-lg { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-lg-0 { + margin-left: 0; + } + + .bodywebsite .offset-lg-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-lg-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-lg-3 { + margin-left: 25%; + } + + .bodywebsite .offset-lg-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-lg-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-lg-6 { + margin-left: 50%; + } + + .bodywebsite .offset-lg-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-lg-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-lg-9 { + margin-left: 75%; + } + + .bodywebsite .offset-lg-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-lg-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gx-lg-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gy-lg-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px) { + .bodywebsite .col-xl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gx-xl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gy-xl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px) { + .bodywebsite .col-xxl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xxl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xxl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xxl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xxl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gx-xxl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gy-xxl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} + +.bodywebsite .table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} + +.bodywebsite .table > tbody { + vertical-align: inherit; +} + +.bodywebsite .table > thead { + vertical-align: bottom; +} + +.bodywebsite .table-group-divider { + border-top: 2px solid currentcolor; +} + +.bodywebsite .caption-top { + caption-side: top; +} + +.bodywebsite .table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.bodywebsite .table-bordered > :not(caption) > * { + border-width: 1px 0; +} + +.bodywebsite .table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.bodywebsite .table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.bodywebsite .table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.bodywebsite .table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.bodywebsite .table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .bodywebsite .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +.bodywebsite .form-label { + margin-bottom: 0.5rem; +} + +.bodywebsite .col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.bodywebsite .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.bodywebsite .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.bodywebsite .form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control { + transition: none; + } +} + +.bodywebsite .form-control[type=file] { + overflow: hidden; +} + +.bodywebsite .form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-control::-webkit-date-and-time-value { + height: 1.5em; +} + +.bodywebsite .form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control:disabled { + background-color: #e9ecef; + opacity: 1; +} + +.bodywebsite .form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.bodywebsite .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + + .bodywebsite .form-control::file-selector-button { + transition: none; + } +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.bodywebsite .form-control-plaintext:focus { + outline: 0; +} + +.bodywebsite .form-control-plaintext.form-control-sm, .bodywebsite .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.bodywebsite .form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} + +.bodywebsite textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} + +.bodywebsite .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-select { + transition: none; + } +} + +.bodywebsite .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-select[multiple], .bodywebsite .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} + +.bodywebsite .form-select:disabled { + background-color: #e9ecef; +} + +.bodywebsite .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.bodywebsite .form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} + +.bodywebsite .form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.bodywebsite .form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} + +.bodywebsite .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.bodywebsite .form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} + +.bodywebsite .form-check-input[type=checkbox] { + border-radius: 0.25em; +} + +.bodywebsite .form-check-input[type=radio] { + border-radius: 50%; +} + +.bodywebsite .form-check-input:active { + filter: brightness(90%); +} + +.bodywebsite .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} + +.bodywebsite .form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +.bodywebsite .form-check-input[disabled] ~ .form-check-label, .bodywebsite .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.bodywebsite .form-switch { + padding-left: 2.5em; +} + +.bodywebsite .form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-switch .form-check-input { + transition: none; + } +} + +.bodywebsite .form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} + +.bodywebsite .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.bodywebsite .form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.bodywebsite .btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.bodywebsite .btn-check[disabled] + .btn, .bodywebsite .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.bodywebsite .form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.bodywebsite .form-range:focus { + outline: 0; +} + +.bodywebsite .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range::-moz-focus-outer { + border: 0; +} + +.bodywebsite .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range:disabled { + pointer-events: none; +} + +.bodywebsite .form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-floating { + position: relative; +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext, + .bodywebsite .form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} + +.bodywebsite .form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-floating > label { + transition: none; + } +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} + +.bodywebsite .form-floating > .form-control::-moz-placeholder, .bodywebsite .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control::placeholder, + .bodywebsite .form-floating > .form-control-plaintext::placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown), .bodywebsite .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:focus, .bodywebsite .form-floating > .form-control:not(:placeholder-shown), + .bodywebsite .form-floating > .form-control-plaintext:focus, + .bodywebsite .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill, + .bodywebsite .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:focus ~ label, + .bodywebsite .form-floating > .form-control:not(:placeholder-shown) ~ label, + .bodywebsite .form-floating > .form-control-plaintext ~ label, + .bodywebsite .form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.bodywebsite .input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.bodywebsite .input-group > .form-control, + .bodywebsite .input-group > .form-select, + .bodywebsite .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} + +.bodywebsite .input-group > .form-control:focus, + .bodywebsite .input-group > .form-select:focus, + .bodywebsite .input-group > .form-floating:focus-within { + z-index: 5; +} + +.bodywebsite .input-group .btn { + position: relative; + z-index: 2; +} + +.bodywebsite .input-group .btn:focus { + z-index: 5; +} + +.bodywebsite .input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.bodywebsite .input-group-lg > .form-control, + .bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-lg > .input-group-text, + .bodywebsite .input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .input-group-sm > .form-control, + .bodywebsite .input-group-sm > .form-select, + .bodywebsite .input-group-sm > .input-group-text, + .bodywebsite .input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-sm > .form-select { + padding-right: 3rem; +} + +.bodywebsite .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .input-group > .form-floating:not(:first-child) > .form-control, + .bodywebsite .input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.bodywebsite .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :valid ~ .valid-feedback, + .bodywebsite .was-validated :valid ~ .valid-tooltip, + .bodywebsite .is-valid ~ .valid-feedback, + .bodywebsite .is-valid ~ .valid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:valid, .bodywebsite .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:valid:focus, .bodywebsite .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:valid, .bodywebsite textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:valid, .bodywebsite .form-select.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-select:valid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:valid:not([multiple])[size="1"], .bodywebsite .form-select.is-valid:not([multiple]):not([size]), .bodywebsite .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:valid:focus, .bodywebsite .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-control-color:valid, .bodywebsite .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:valid, .bodywebsite .form-check-input.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:checked, .bodywebsite .form-check-input.is-valid:checked { + background-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:focus, .bodywebsite .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-check-input:valid ~ .form-check-label, .bodywebsite .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.bodywebsite .form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):valid, .bodywebsite .input-group > .form-control:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):valid, + .bodywebsite .input-group > .form-select:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):valid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.bodywebsite .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.bodywebsite .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :invalid ~ .invalid-feedback, + .bodywebsite .was-validated :invalid ~ .invalid-tooltip, + .bodywebsite .is-invalid ~ .invalid-feedback, + .bodywebsite .is-invalid ~ .invalid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:invalid, .bodywebsite .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:invalid:focus, .bodywebsite .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:invalid, .bodywebsite textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:invalid, .bodywebsite .form-select.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-select:invalid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:invalid:not([multiple])[size="1"], .bodywebsite .form-select.is-invalid:not([multiple]):not([size]), .bodywebsite .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:invalid:focus, .bodywebsite .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-control-color:invalid, .bodywebsite .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:invalid, .bodywebsite .form-check-input.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:checked, .bodywebsite .form-check-input.is-invalid:checked { + background-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:focus, .bodywebsite .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-check-input:invalid ~ .form-check-label, .bodywebsite .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.bodywebsite .form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):invalid, .bodywebsite .input-group > .form-control:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):invalid, + .bodywebsite .input-group > .form-select:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):invalid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.bodywebsite .btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .btn { + transition: none; + } +} + +.bodywebsite :not(.btn-check) + .btn:hover, .bodywebsite .btn:first-child:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} + +.bodywebsite .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:checked + .btn, .bodywebsite :not(.btn-check) + .btn:active, .bodywebsite .btn:first-child:active, .bodywebsite .btn.active, .bodywebsite .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} + +.bodywebsite .btn-check:checked + .btn:focus-visible, .bodywebsite :not(.btn-check) + .btn:active:focus-visible, .bodywebsite .btn:first-child:active:focus-visible, .bodywebsite .btn.active:focus-visible, .bodywebsite .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn:disabled, .bodywebsite .btn.disabled, .bodywebsite fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.bodywebsite .btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.bodywebsite .btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.bodywebsite .btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.bodywebsite .btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.bodywebsite .btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.bodywebsite .btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.bodywebsite .btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.bodywebsite .btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.bodywebsite .btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.bodywebsite .btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} + +.bodywebsite .btn-link:focus-visible { + color: var(--bs-btn-color); +} + +.bodywebsite .btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.bodywebsite .btn-lg, .bodywebsite .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 0.5rem; +} + +.bodywebsite .btn-sm, .bodywebsite .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: 0.25rem; +} + +.bodywebsite .fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .fade { + transition: none; + } +} + +.bodywebsite .fade:not(.show) { + opacity: 0; +} + +.bodywebsite .collapse:not(.show) { + display: none; +} + +.bodywebsite .collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing { + transition: none; + } +} + +.bodywebsite .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing.collapse-horizontal { + transition: none; + } +} + +.bodywebsite .dropup, + .bodywebsite .dropend, + .bodywebsite .dropdown, + .bodywebsite .dropstart, + .bodywebsite .dropup-center, + .bodywebsite .dropdown-center { + position: relative; +} + +.bodywebsite .dropdown-toggle { + white-space: nowrap; +} + +.bodywebsite .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-dropdown-link-color: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} + +.bodywebsite .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropdown-menu-start { + --bs-position: start; +} + +.bodywebsite .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.bodywebsite .dropdown-menu-end { + --bs-position: end; +} + +.bodywebsite .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .dropdown-menu-sm-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-sm-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .bodywebsite .dropdown-menu-md-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-md-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .bodywebsite .dropdown-menu-lg-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-lg-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .bodywebsite .dropdown-menu-xl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1400px) { + .bodywebsite .dropdown-menu-xxl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xxl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +.bodywebsite .dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.bodywebsite .dropend .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.bodywebsite .dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: none; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.bodywebsite .dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.bodywebsite .dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.bodywebsite .dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.bodywebsite .dropdown-item:hover, .bodywebsite .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} + +.bodywebsite .dropdown-item.active, .bodywebsite .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} + +.bodywebsite .dropdown-item.disabled, .bodywebsite .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.bodywebsite .dropdown-menu.show { + display: block; +} + +.bodywebsite .dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.bodywebsite .dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.bodywebsite .dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.bodywebsite .btn-group, + .bodywebsite .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.bodywebsite .btn-group > .btn, + .bodywebsite .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.bodywebsite .btn-group > .btn-check:checked + .btn, + .bodywebsite .btn-group > .btn-check:focus + .btn, + .bodywebsite .btn-group > .btn:hover, + .bodywebsite .btn-group > .btn:focus, + .bodywebsite .btn-group > .btn:active, + .bodywebsite .btn-group > .btn.active, + .bodywebsite .btn-group-vertical > .btn-check:checked + .btn, + .bodywebsite .btn-group-vertical > .btn-check:focus + .btn, + .bodywebsite .btn-group-vertical > .btn:hover, + .bodywebsite .btn-group-vertical > .btn:focus, + .bodywebsite .btn-group-vertical > .btn:active, + .bodywebsite .btn-group-vertical > .btn.active { + z-index: 1; +} + +.bodywebsite .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.bodywebsite .btn-toolbar .input-group { + width: auto; +} + +.bodywebsite .btn-group { + border-radius: 0.375rem; +} + +.bodywebsite .btn-group > :not(.btn-check:first-child) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.bodywebsite .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group > .btn.dropdown-toggle-split:first-child, + .bodywebsite .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .btn-group > .btn:nth-child(n+3), + .bodywebsite .btn-group > :not(.btn-check) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.bodywebsite .dropdown-toggle-split::after, .bodywebsite .dropup .dropdown-toggle-split::after, .bodywebsite .dropend .dropdown-toggle-split::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.bodywebsite .btn-sm + .dropdown-toggle-split, .bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.bodywebsite .btn-lg + .dropdown-toggle-split, .bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.bodywebsite .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.bodywebsite .btn-group-vertical > .btn, + .bodywebsite .btn-group-vertical > .btn-group { + width: 100%; +} + +.bodywebsite .btn-group-vertical > .btn:not(:first-child), + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.bodywebsite .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .btn-group-vertical > .btn ~ .btn, + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .nav-link { + transition: none; + } +} + +.bodywebsite .nav-link:hover, .bodywebsite .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} + +.bodywebsite .nav-link.disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.bodywebsite .nav-tabs { + --bs-nav-tabs-border-width: 1px; + --bs-nav-tabs-border-color: #dee2e6; + --bs-nav-tabs-border-radius: 0.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} + +.bodywebsite .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} + +.bodywebsite .nav-tabs .nav-link:hover, .bodywebsite .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} + +.bodywebsite .nav-tabs .nav-link.disabled, .bodywebsite .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-tabs .nav-link.active, + .bodywebsite .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} + +.bodywebsite .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav-pills { + --bs-nav-pills-border-radius: 0.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} + +.bodywebsite .nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} + +.bodywebsite .nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-pills .nav-link.active, + .bodywebsite .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.bodywebsite .nav-fill > .nav-link, + .bodywebsite .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.bodywebsite .nav-justified > .nav-link, + .bodywebsite .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.bodywebsite .nav-fill .nav-item .nav-link, + .bodywebsite .nav-justified .nav-item .nav-link { + width: 100%; +} + +.bodywebsite .tab-content > .tab-pane { + display: none; +} + +.bodywebsite .tab-content > .active { + display: block; +} + +.bodywebsite .navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} + +.bodywebsite .navbar > .container, + .bodywebsite .navbar > .container-fluid, + .bodywebsite .navbar > .container-sm, + .bodywebsite .navbar > .container-md, + .bodywebsite .navbar > .container-lg, + .bodywebsite .navbar > .container-xl, + .bodywebsite .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} + +.bodywebsite .navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} + +.bodywebsite .navbar-brand:hover, .bodywebsite .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.bodywebsite .navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .navbar-nav .show > .nav-link, + .bodywebsite .navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-nav .dropdown-menu { + position: static; +} + +.bodywebsite .navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} + +.bodywebsite .navbar-text a, + .bodywebsite .navbar-text a:hover, + .bodywebsite .navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.bodywebsite .navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .navbar-toggler { + transition: none; + } +} + +.bodywebsite .navbar-toggler:hover { + text-decoration: none; +} + +.bodywebsite .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.bodywebsite .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.bodywebsite .navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .bodywebsite .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-sm .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-md .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-md .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-lg .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xxl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +.bodywebsite .navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} + +.bodywebsite .navbar-expand .navbar-nav { + flex-direction: row; +} + +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.bodywebsite .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} + +.bodywebsite .navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.bodywebsite .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.bodywebsite .navbar-expand .navbar-toggler { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-header { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.bodywebsite .navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.bodywebsite .card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} + +.bodywebsite .card > hr { + margin-right: 0; + margin-left: 0; +} + +.bodywebsite .card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.bodywebsite .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .card-header + .list-group, + .bodywebsite .card > .list-group + .card-footer { + border-top: 0; +} + +.bodywebsite .card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.bodywebsite .card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.bodywebsite .card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.bodywebsite .card-text:last-child { + margin-bottom: 0; +} + +.bodywebsite .card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.bodywebsite .card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.bodywebsite .card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} + +.bodywebsite .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.bodywebsite .card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.bodywebsite .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top, + .bodywebsite .card-img-bottom { + width: 100%; +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} + +@media (min-width: 576px) { + .bodywebsite .card-group { + display: flex; + flex-flow: row wrap; + } + + .bodywebsite .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + + .bodywebsite .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-top, + .bodywebsite .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-top, + .bodywebsite .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.bodywebsite .accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='var%28--bs-body-color%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.bodywebsite .accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button { + transition: none; + } +} + +.bodywebsite .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} + +.bodywebsite .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button::after { + transition: none; + } +} + +.bodywebsite .accordion-button:hover { + z-index: 2; +} + +.bodywebsite .accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.bodywebsite .accordion-header { + margin-bottom: 0; +} + +.bodywebsite .accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:not(:first-of-type) { + border-top: 0; +} + +.bodywebsite .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.bodywebsite .accordion-flush .accordion-collapse { + border-width: 0; +} + +.bodywebsite .accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.bodywebsite .accordion-flush .accordion-item:first-child { + border-top: 0; +} + +.bodywebsite .accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.bodywebsite .accordion-flush .accordion-item .accordion-button, .bodywebsite .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; +} + +.bodywebsite .breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-divider-color: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/"); +} + +.bodywebsite .breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.bodywebsite .pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.bodywebsite .page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .page-link { + transition: none; + } +} + +.bodywebsite .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} + +.bodywebsite .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} + +.bodywebsite .page-link.active, .bodywebsite .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} + +.bodywebsite .page-link.disabled, .bodywebsite .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.bodywebsite .page-item:not(:first-child) .page-link { + margin-left: -1px; +} + +.bodywebsite .page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: 0.5rem; +} + +.bodywebsite .pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: 0.25rem; +} + +.bodywebsite .badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} + +.bodywebsite .badge:empty { + display: none; +} + +.bodywebsite .btn .badge { + position: relative; + top: -1px; +} + +.bodywebsite .alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: 1px solid var(--bs-alert-border-color); + --bs-alert-border-radius: 0.375rem; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.bodywebsite .alert-heading { + color: inherit; +} + +.bodywebsite .alert-link { + font-weight: 700; +} + +.bodywebsite .alert-dismissible { + padding-right: 3rem; +} + +.bodywebsite .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.bodywebsite .alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} + +.bodywebsite .alert-primary .alert-link { + color: #06357a; +} + +.bodywebsite .alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} + +.bodywebsite .alert-secondary .alert-link { + color: #34383c; +} + +.bodywebsite .alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} + +.bodywebsite .alert-success .alert-link { + color: #0c4128; +} + +.bodywebsite .alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} + +.bodywebsite .alert-info .alert-link { + color: #04414d; +} + +.bodywebsite .alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} + +.bodywebsite .alert-warning .alert-link { + color: #523e02; +} + +.bodywebsite .alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} + +.bodywebsite .alert-danger .alert-link { + color: #6a1a21; +} + +.bodywebsite .alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} + +.bodywebsite .alert-light .alert-link { + color: #4f5050; +} + +.bodywebsite .alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} + +.bodywebsite .alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +.bodywebsite .progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.bodywebsite .progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar { + transition: none; + } +} + +.bodywebsite .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.bodywebsite .progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.bodywebsite .list-group { + --bs-list-group-color: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.bodywebsite .list-group-numbered { + list-style-type: none; + counter-reset: section; +} + +.bodywebsite .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.bodywebsite .list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} + +.bodywebsite .list-group-item-action:hover, .bodywebsite .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} + +.bodywebsite .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.bodywebsite .list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} + +.bodywebsite .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.bodywebsite .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} + +.bodywebsite .list-group-item.disabled, .bodywebsite .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} + +.bodywebsite .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} + +.bodywebsite .list-group-item + .list-group-item { + border-top-width: 0; +} + +.bodywebsite .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-horizontal { + flex-direction: row; +} + +.bodywebsite .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .bodywebsite .list-group-horizontal-sm { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 768px) { + .bodywebsite .list-group-horizontal-md { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 992px) { + .bodywebsite .list-group-horizontal-lg { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1200px) { + .bodywebsite .list-group-horizontal-xl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1400px) { + .bodywebsite .list-group-horizontal-xxl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +.bodywebsite .list-group-flush { + border-radius: 0; +} + +.bodywebsite .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.bodywebsite .list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} + +.bodywebsite .list-group-item-primary.list-group-item-action:hover, .bodywebsite .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} + +.bodywebsite .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.bodywebsite .list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action:hover, .bodywebsite .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.bodywebsite .list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} + +.bodywebsite .list-group-item-success.list-group-item-action:hover, .bodywebsite .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} + +.bodywebsite .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.bodywebsite .list-group-item-info { + color: #055160; + background-color: #cff4fc; +} + +.bodywebsite .list-group-item-info.list-group-item-action:hover, .bodywebsite .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} + +.bodywebsite .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.bodywebsite .list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} + +.bodywebsite .list-group-item-warning.list-group-item-action:hover, .bodywebsite .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} + +.bodywebsite .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.bodywebsite .list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} + +.bodywebsite .list-group-item-danger.list-group-item-action:hover, .bodywebsite .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} + +.bodywebsite .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.bodywebsite .list-group-item-light { + color: #636464; + background-color: #fefefe; +} + +.bodywebsite .list-group-item-light.list-group-item-action:hover, .bodywebsite .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} + +.bodywebsite .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.bodywebsite .list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} + +.bodywebsite .list-group-item-dark.list-group-item-action:hover, .bodywebsite .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} + +.bodywebsite .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.bodywebsite .btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} + +.bodywebsite .btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} + +.bodywebsite .btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} + +.bodywebsite .btn-close:disabled, .bodywebsite .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.bodywebsite .btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.bodywebsite .toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-bg: rgba(255, 255, 255, 0.85); + --bs-toast-border-width: 1px; + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} + +.bodywebsite .toast.showing { + opacity: 0; +} + +.bodywebsite .toast:not(.show) { + display: none; +} + +.bodywebsite .toast-container { + position: absolute; + z-index: var(--bs-toast-zindex); + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.bodywebsite .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.bodywebsite .toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} + +.bodywebsite .toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.bodywebsite .toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.bodywebsite .modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: 1px; + --bs-modal-border-radius: 0.5rem; + --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-modal-inner-border-radius: calc(0.5rem - 1px); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: 1px; + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: 1px; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.bodywebsite .modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} + +.bodywebsite .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .modal.fade .modal-dialog { + transition: none; + } +} + +.bodywebsite .modal.show .modal-dialog { + transform: none; +} + +.bodywebsite .modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.bodywebsite .modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} + +.bodywebsite .modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.bodywebsite .modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.bodywebsite .modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} + +.bodywebsite .modal-backdrop.fade { + opacity: 0; +} + +.bodywebsite .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.bodywebsite .modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.bodywebsite .modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.bodywebsite .modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.bodywebsite .modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .bodywebsite .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + } + + .bodywebsite .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + + .bodywebsite .modal-sm { + --bs-modal-width: 300px; + } +} + +@media (min-width: 992px) { + .bodywebsite .modal-lg, + .bodywebsite .modal-xl { + --bs-modal-width: 800px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .modal-xl { + --bs-modal-width: 1140px; + } +} + +.bodywebsite .modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} + +.bodywebsite .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-header, + .bodywebsite .modal-fullscreen .modal-footer { + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .bodywebsite .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-header, + .bodywebsite .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-header, + .bodywebsite .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-header, + .bodywebsite .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-header, + .bodywebsite .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-header, + .bodywebsite .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} + +.bodywebsite .tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} + +.bodywebsite .tooltip.show { + opacity: var(--bs-tooltip-opacity); +} + +.bodywebsite .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} + +.bodywebsite .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +.bodywebsite .tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.bodywebsite .popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: 0.5rem; + --bs-popover-inner-border-radius: calc(0.5rem - 1px); + --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} + +.bodywebsite .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} + +.bodywebsite .popover .popover-arrow::before, .bodywebsite .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-end > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom .popover-header::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +.bodywebsite .bs-popover-start > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +.bodywebsite .popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} + +.bodywebsite .popover-header:empty { + display: none; +} + +.bodywebsite .popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.bodywebsite .carousel { + position: relative; +} + +.bodywebsite .carousel.pointer-event { + touch-action: pan-y; +} + +.bodywebsite .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.bodywebsite .carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-item { + transition: none; + } +} + +.bodywebsite .carousel-item.active, + .bodywebsite .carousel-item-next, + .bodywebsite .carousel-item-prev { + display: block; +} + +.bodywebsite .carousel-item-next:not(.carousel-item-start), + .bodywebsite .active.carousel-item-end { + transform: translateX(100%); +} + +.bodywebsite .carousel-item-prev:not(.carousel-item-end), + .bodywebsite .active.carousel-item-start { + transform: translateX(-100%); +} + +.bodywebsite .carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.bodywebsite .carousel-fade .carousel-item.active, + .bodywebsite .carousel-fade .carousel-item-next.carousel-item-start, + .bodywebsite .carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + transition: none; + } +} + +.bodywebsite .carousel-control-prev:hover, .bodywebsite .carousel-control-prev:focus, + .bodywebsite .carousel-control-next:hover, + .bodywebsite .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.bodywebsite .carousel-control-prev { + left: 0; +} + +.bodywebsite .carousel-control-next { + right: 0; +} + +.bodywebsite .carousel-control-prev-icon, + .bodywebsite .carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.bodywebsite .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} + +.bodywebsite .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-indicators [data-bs-target] { + transition: none; + } +} + +.bodywebsite .carousel-indicators .active { + opacity: 1; +} + +.bodywebsite .carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.bodywebsite .carousel-dark .carousel-control-prev-icon, + .bodywebsite .carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} + +.bodywebsite .carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} + +.bodywebsite .carousel-dark .carousel-caption { + color: #000; +} + +.bodywebsite .spinner-grow, + .bodywebsite .spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + -webkit-animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.bodywebsite .spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.bodywebsite .spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +.bodywebsite .spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.bodywebsite .spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .spinner-border, + .bodywebsite .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} + +.bodywebsite .offcanvas, .bodywebsite .offcanvas-xxl, .bodywebsite .offcanvas-xl, .bodywebsite .offcanvas-lg, .bodywebsite .offcanvas-md, .bodywebsite .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-sm { + transition: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.hiding, .bodywebsite .offcanvas-sm.show { + visibility: visible; + } +} + +@media (min-width: 576px) { + .bodywebsite .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-sm .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-md { + transition: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.hiding, .bodywebsite .offcanvas-md.show { + visibility: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-md .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-lg { + transition: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.hiding, .bodywebsite .offcanvas-lg.show { + visibility: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-lg .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xl { + transition: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.hiding, .bodywebsite .offcanvas-xl.show { + visibility: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xxl { + transition: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.hiding, .bodywebsite .offcanvas-xxl.show { + visibility: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xxl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.bodywebsite .offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas { + transition: none; + } +} + +.bodywebsite .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} + +.bodywebsite .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} + +.bodywebsite .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} + +.bodywebsite .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.show:not(.hiding) { + transform: none; +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.hiding, .bodywebsite .offcanvas.show { + visibility: visible; +} + +.bodywebsite .offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.bodywebsite .offcanvas-backdrop.fade { + opacity: 0; +} + +.bodywebsite .offcanvas-backdrop.show { + opacity: 0.5; +} + +.bodywebsite .offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} + +.bodywebsite .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); +} + +.bodywebsite .offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.bodywebsite .offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.bodywebsite .placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} + +.bodywebsite .placeholder.btn::before { + display: inline-block; + content: ""; +} + +.bodywebsite .placeholder-xs { + min-height: 0.6em; +} + +.bodywebsite .placeholder-sm { + min-height: 0.8em; +} + +.bodywebsite .placeholder-lg { + min-height: 1.2em; +} + +.bodywebsite .placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +.bodywebsite .placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +.bodywebsite .clearfix::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .link-primary { + color: #0d6efd !important; +} + +.bodywebsite .link-primary:hover, .bodywebsite .link-primary:focus { + color: #0a58ca !important; +} + +.bodywebsite .link-secondary { + color: #6c757d !important; +} + +.bodywebsite .link-secondary:hover, .bodywebsite .link-secondary:focus { + color: #565e64 !important; +} + +.bodywebsite .link-success { + color: #198754 !important; +} + +.bodywebsite .link-success:hover, .bodywebsite .link-success:focus { + color: #146c43 !important; +} + +.bodywebsite .link-info { + color: #0dcaf0 !important; +} + +.bodywebsite .link-info:hover, .bodywebsite .link-info:focus { + color: #3dd5f3 !important; +} + +.bodywebsite .link-warning { + color: #ffc107 !important; +} + +.bodywebsite .link-warning:hover, .bodywebsite .link-warning:focus { + color: #ffcd39 !important; +} + +.bodywebsite .link-danger { + color: #dc3545 !important; +} + +.bodywebsite .link-danger:hover, .bodywebsite .link-danger:focus { + color: #b02a37 !important; +} + +.bodywebsite .link-light { + color: #f8f9fa !important; +} + +.bodywebsite .link-light:hover, .bodywebsite .link-light:focus { + color: #f9fafb !important; +} + +.bodywebsite .link-dark { + color: #212529 !important; +} + +.bodywebsite .link-dark:hover, .bodywebsite .link-dark:focus { + color: #1a1e21 !important; +} + +.bodywebsite .ratio { + position: relative; + width: 100%; +} + +.bodywebsite .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} + +.bodywebsite .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.bodywebsite .ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.bodywebsite .ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.bodywebsite .ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.bodywebsite .ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.bodywebsite .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.bodywebsite .sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .bodywebsite .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 768px) { + .bodywebsite .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 992px) { + .bodywebsite .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1200px) { + .bodywebsite .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1400px) { + .bodywebsite .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +.bodywebsite .hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.bodywebsite .vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.bodywebsite .visually-hidden, + .bodywebsite .visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.bodywebsite .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.bodywebsite .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.bodywebsite .vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.bodywebsite .align-baseline { + vertical-align: baseline !important; +} + +.bodywebsite .align-top { + vertical-align: top !important; +} + +.bodywebsite .align-middle { + vertical-align: middle !important; +} + +.bodywebsite .align-bottom { + vertical-align: bottom !important; +} + +.bodywebsite .align-text-bottom { + vertical-align: text-bottom !important; +} + +.bodywebsite .align-text-top { + vertical-align: text-top !important; +} + +.bodywebsite .float-start { + float: left !important; +} + +.bodywebsite .float-end { + float: right !important; +} + +.bodywebsite .float-none { + float: none !important; +} + +.bodywebsite .opacity-0 { + opacity: 0 !important; +} + +.bodywebsite .opacity-25 { + opacity: 0.25 !important; +} + +.bodywebsite .opacity-50 { + opacity: 0.5 !important; +} + +.bodywebsite .opacity-75 { + opacity: 0.75 !important; +} + +.bodywebsite .opacity-100 { + opacity: 1 !important; +} + +.bodywebsite .overflow-auto { + overflow: auto !important; +} + +.bodywebsite .overflow-hidden { + overflow: hidden !important; +} + +.bodywebsite .overflow-visible { + overflow: visible !important; +} + +.bodywebsite .overflow-scroll { + overflow: scroll !important; +} + +.bodywebsite .d-inline { + display: inline !important; +} + +.bodywebsite .d-inline-block { + display: inline-block !important; +} + +.bodywebsite .d-block { + display: block !important; +} + +.bodywebsite .d-grid { + display: grid !important; +} + +.bodywebsite .d-table { + display: table !important; +} + +.bodywebsite .d-table-row { + display: table-row !important; +} + +.bodywebsite .d-table-cell { + display: table-cell !important; +} + +.bodywebsite .d-flex { + display: flex !important; +} + +.bodywebsite .d-inline-flex { + display: inline-flex !important; +} + +.bodywebsite .d-none { + display: none !important; +} + +.bodywebsite .shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.bodywebsite .shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.bodywebsite .shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.bodywebsite .shadow-none { + box-shadow: none !important; +} + +.bodywebsite .position-static { + position: static !important; +} + +.bodywebsite .position-relative { + position: relative !important; +} + +.bodywebsite .position-absolute { + position: absolute !important; +} + +.bodywebsite .position-fixed { + position: fixed !important; +} + +.bodywebsite .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.bodywebsite .top-0 { + top: 0 !important; +} + +.bodywebsite .top-50 { + top: 50% !important; +} + +.bodywebsite .top-100 { + top: 100% !important; +} + +.bodywebsite .bottom-0 { + bottom: 0 !important; +} + +.bodywebsite .bottom-50 { + bottom: 50% !important; +} + +.bodywebsite .bottom-100 { + bottom: 100% !important; +} + +.bodywebsite .start-0 { + left: 0 !important; +} + +.bodywebsite .start-50 { + left: 50% !important; +} + +.bodywebsite .start-100 { + left: 100% !important; +} + +.bodywebsite .end-0 { + right: 0 !important; +} + +.bodywebsite .end-50 { + right: 50% !important; +} + +.bodywebsite .end-100 { + right: 100% !important; +} + +.bodywebsite .translate-middle { + transform: translate(-50%, -50%) !important; +} + +.bodywebsite .translate-middle-x { + transform: translateX(-50%) !important; +} + +.bodywebsite .translate-middle-y { + transform: translateY(-50%) !important; +} + +.bodywebsite .border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-0 { + border: 0 !important; +} + +.bodywebsite .border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-top-0 { + border-top: 0 !important; +} + +.bodywebsite .border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-end-0 { + border-right: 0 !important; +} + +.bodywebsite .border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-bottom-0 { + border-bottom: 0 !important; +} + +.bodywebsite .border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-start-0 { + border-left: 0 !important; +} + +.bodywebsite .border-primary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-secondary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-success { + --bs-border-opacity: 1; +} + +.bodywebsite .border-info { + --bs-border-opacity: 1; +} + +.bodywebsite .border-warning { + --bs-border-opacity: 1; +} + +.bodywebsite .border-danger { + --bs-border-opacity: 1; +} + +.bodywebsite .border-light { + --bs-border-opacity: 1; +} + +.bodywebsite .border-dark { + --bs-border-opacity: 1; +} + +.bodywebsite .border-white { + --bs-border-opacity: 1; +} + +.bodywebsite .border-1 { + --bs-border-width: 1px; +} + +.bodywebsite .border-2 { + --bs-border-width: 2px; +} + +.bodywebsite .border-3 { + --bs-border-width: 3px; +} + +.bodywebsite .border-4 { + --bs-border-width: 4px; +} + +.bodywebsite .border-5 { + --bs-border-width: 5px; +} + +.bodywebsite .border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.bodywebsite .border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.bodywebsite .border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.bodywebsite .border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.bodywebsite .border-opacity-100 { + --bs-border-opacity: 1; +} + +.bodywebsite .w-25 { + width: 25% !important; +} + +.bodywebsite .w-50 { + width: 50% !important; +} + +.bodywebsite .w-75 { + width: 75% !important; +} + +.bodywebsite .w-100 { + width: 100% !important; +} + +.bodywebsite .w-auto { + width: auto !important; +} + +.bodywebsite .mw-100 { + max-width: 100% !important; +} + +.bodywebsite .vw-100 { + width: 100vw !important; +} + +.bodywebsite .min-vw-100 { + min-width: 100vw !important; +} + +.bodywebsite .h-25 { + height: 25% !important; +} + +.bodywebsite .h-50 { + height: 50% !important; +} + +.bodywebsite .h-75 { + height: 75% !important; +} + +.bodywebsite .h-100 { + height: 100% !important; +} + +.bodywebsite .h-auto { + height: auto !important; +} + +.bodywebsite .mh-100 { + max-height: 100% !important; +} + +.bodywebsite .vh-100 { + height: 100vh !important; +} + +.bodywebsite .min-vh-100 { + min-height: 100vh !important; +} + +.bodywebsite .flex-fill { + flex: 1 1 auto !important; +} + +.bodywebsite .flex-row { + flex-direction: row !important; +} + +.bodywebsite .flex-column { + flex-direction: column !important; +} + +.bodywebsite .flex-row-reverse { + flex-direction: row-reverse !important; +} + +.bodywebsite .flex-column-reverse { + flex-direction: column-reverse !important; +} + +.bodywebsite .flex-grow-0 { + flex-grow: 0 !important; +} + +.bodywebsite .flex-grow-1 { + flex-grow: 1 !important; +} + +.bodywebsite .flex-shrink-0 { + flex-shrink: 0 !important; +} + +.bodywebsite .flex-shrink-1 { + flex-shrink: 1 !important; +} + +.bodywebsite .flex-wrap { + flex-wrap: wrap !important; +} + +.bodywebsite .flex-nowrap { + flex-wrap: nowrap !important; +} + +.bodywebsite .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.bodywebsite .justify-content-start { + justify-content: flex-start !important; +} + +.bodywebsite .justify-content-end { + justify-content: flex-end !important; +} + +.bodywebsite .justify-content-center { + justify-content: center !important; +} + +.bodywebsite .justify-content-between { + justify-content: space-between !important; +} + +.bodywebsite .justify-content-around { + justify-content: space-around !important; +} + +.bodywebsite .justify-content-evenly { + justify-content: space-evenly !important; +} + +.bodywebsite .align-items-start { + align-items: flex-start !important; +} + +.bodywebsite .align-items-end { + align-items: flex-end !important; +} + +.bodywebsite .align-items-center { + align-items: center !important; +} + +.bodywebsite .align-items-baseline { + align-items: baseline !important; +} + +.bodywebsite .align-items-stretch { + align-items: stretch !important; +} + +.bodywebsite .align-content-start { + align-content: flex-start !important; +} + +.bodywebsite .align-content-end { + align-content: flex-end !important; +} + +.bodywebsite .align-content-center { + align-content: center !important; +} + +.bodywebsite .align-content-between { + align-content: space-between !important; +} + +.bodywebsite .align-content-around { + align-content: space-around !important; +} + +.bodywebsite .align-content-stretch { + align-content: stretch !important; +} + +.bodywebsite .align-self-auto { + align-self: auto !important; +} + +.bodywebsite .align-self-start { + align-self: flex-start !important; +} + +.bodywebsite .align-self-end { + align-self: flex-end !important; +} + +.bodywebsite .align-self-center { + align-self: center !important; +} + +.bodywebsite .align-self-baseline { + align-self: baseline !important; +} + +.bodywebsite .align-self-stretch { + align-self: stretch !important; +} + +.bodywebsite .order-first { + order: -1 !important; +} + +.bodywebsite .order-0 { + order: 0 !important; +} + +.bodywebsite .order-1 { + order: 1 !important; +} + +.bodywebsite .order-2 { + order: 2 !important; +} + +.bodywebsite .order-3 { + order: 3 !important; +} + +.bodywebsite .order-4 { + order: 4 !important; +} + +.bodywebsite .order-5 { + order: 5 !important; +} + +.bodywebsite .order-last { + order: 6 !important; +} + +.bodywebsite .m-0 { + margin: 0 !important; +} + +.bodywebsite .m-1 { + margin: 0.25rem !important; +} + +.bodywebsite .m-2 { + margin: 0.5rem !important; +} + +.bodywebsite .m-3 { + margin: 1rem !important; +} + +.bodywebsite .m-4 { + margin: 1.5rem !important; +} + +.bodywebsite .m-5 { + margin: 3rem !important; +} + +.bodywebsite .m-auto { + margin: auto !important; +} + +.bodywebsite .mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.bodywebsite .mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.bodywebsite .mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.bodywebsite .mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.bodywebsite .mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.bodywebsite .mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.bodywebsite .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.bodywebsite .my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.bodywebsite .my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.bodywebsite .my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.bodywebsite .my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.bodywebsite .my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.bodywebsite .my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.bodywebsite .my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.bodywebsite .mt-0 { + margin-top: 0 !important; +} + +.bodywebsite .mt-1 { + margin-top: 0.25rem !important; +} + +.bodywebsite .mt-2 { + margin-top: 0.5rem !important; +} + +.bodywebsite .mt-3 { + margin-top: 1rem !important; +} + +.bodywebsite .mt-4 { + margin-top: 1.5rem !important; +} + +.bodywebsite .mt-5 { + margin-top: 3rem !important; +} + +.bodywebsite .mt-auto { + margin-top: auto !important; +} + +.bodywebsite .me-0 { + margin-right: 0 !important; +} + +.bodywebsite .me-1 { + margin-right: 0.25rem !important; +} + +.bodywebsite .me-2 { + margin-right: 0.5rem !important; +} + +.bodywebsite .me-3 { + margin-right: 1rem !important; +} + +.bodywebsite .me-4 { + margin-right: 1.5rem !important; +} + +.bodywebsite .me-5 { + margin-right: 3rem !important; +} + +.bodywebsite .me-auto { + margin-right: auto !important; +} + +.bodywebsite .mb-0 { + margin-bottom: 0 !important; +} + +.bodywebsite .mb-1 { + margin-bottom: 0.25rem !important; +} + +.bodywebsite .mb-2 { + margin-bottom: 0.5rem !important; +} + +.bodywebsite .mb-3 { + margin-bottom: 1rem !important; +} + +.bodywebsite .mb-4 { + margin-bottom: 1.5rem !important; +} + +.bodywebsite .mb-5 { + margin-bottom: 3rem !important; +} + +.bodywebsite .mb-auto { + margin-bottom: auto !important; +} + +.bodywebsite .ms-0 { + margin-left: 0 !important; +} + +.bodywebsite .ms-1 { + margin-left: 0.25rem !important; +} + +.bodywebsite .ms-2 { + margin-left: 0.5rem !important; +} + +.bodywebsite .ms-3 { + margin-left: 1rem !important; +} + +.bodywebsite .ms-4 { + margin-left: 1.5rem !important; +} + +.bodywebsite .ms-5 { + margin-left: 3rem !important; +} + +.bodywebsite .ms-auto { + margin-left: auto !important; +} + +.bodywebsite .p-0 { + padding: 0 !important; +} + +.bodywebsite .p-1 { + padding: 0.25rem !important; +} + +.bodywebsite .p-2 { + padding: 0.5rem !important; +} + +.bodywebsite .p-3 { + padding: 1rem !important; +} + +.bodywebsite .p-4 { + padding: 1.5rem !important; +} + +.bodywebsite .p-5 { + padding: 3rem !important; +} + +.bodywebsite .px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.bodywebsite .px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.bodywebsite .px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.bodywebsite .px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.bodywebsite .px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.bodywebsite .px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.bodywebsite .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.bodywebsite .py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.bodywebsite .py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.bodywebsite .py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.bodywebsite .py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.bodywebsite .py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.bodywebsite .pt-0 { + padding-top: 0 !important; +} + +.bodywebsite .pt-1 { + padding-top: 0.25rem !important; +} + +.bodywebsite .pt-2 { + padding-top: 0.5rem !important; +} + +.bodywebsite .pt-3 { + padding-top: 1rem !important; +} + +.bodywebsite .pt-4 { + padding-top: 1.5rem !important; +} + +.bodywebsite .pt-5 { + padding-top: 3rem !important; +} + +.bodywebsite .pe-0 { + padding-right: 0 !important; +} + +.bodywebsite .pe-1 { + padding-right: 0.25rem !important; +} + +.bodywebsite .pe-2 { + padding-right: 0.5rem !important; +} + +.bodywebsite .pe-3 { + padding-right: 1rem !important; +} + +.bodywebsite .pe-4 { + padding-right: 1.5rem !important; +} + +.bodywebsite .pe-5 { + padding-right: 3rem !important; +} + +.bodywebsite .pb-0 { + padding-bottom: 0 !important; +} + +.bodywebsite .pb-1 { + padding-bottom: 0.25rem !important; +} + +.bodywebsite .pb-2 { + padding-bottom: 0.5rem !important; +} + +.bodywebsite .pb-3 { + padding-bottom: 1rem !important; +} + +.bodywebsite .pb-4 { + padding-bottom: 1.5rem !important; +} + +.bodywebsite .pb-5 { + padding-bottom: 3rem !important; +} + +.bodywebsite .ps-0 { + padding-left: 0 !important; +} + +.bodywebsite .ps-1 { + padding-left: 0.25rem !important; +} + +.bodywebsite .ps-2 { + padding-left: 0.5rem !important; +} + +.bodywebsite .ps-3 { + padding-left: 1rem !important; +} + +.bodywebsite .ps-4 { + padding-left: 1.5rem !important; +} + +.bodywebsite .ps-5 { + padding-left: 3rem !important; +} + +.bodywebsite .gap-0 { + gap: 0 !important; +} + +.bodywebsite .gap-1 { + gap: 0.25rem !important; +} + +.bodywebsite .gap-2 { + gap: 0.5rem !important; +} + +.bodywebsite .gap-3 { + gap: 1rem !important; +} + +.bodywebsite .gap-4 { + gap: 1.5rem !important; +} + +.bodywebsite .gap-5 { + gap: 3rem !important; +} + +.bodywebsite .font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.bodywebsite .fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.bodywebsite .fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.bodywebsite .fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.bodywebsite .fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.bodywebsite .fs-5 { + font-size: 1.25rem !important; +} + +.bodywebsite .fs-6 { + font-size: 1rem !important; +} + +.bodywebsite .fst-italic { + font-style: italic !important; +} + +.bodywebsite .fst-normal { + font-style: normal !important; +} + +.bodywebsite .fw-light { + font-weight: 300 !important; +} + +.bodywebsite .fw-lighter { + font-weight: lighter !important; +} + +.bodywebsite .fw-normal { + font-weight: 400 !important; +} + +.bodywebsite .fw-bold { + font-weight: 700 !important; +} + +.bodywebsite .fw-semibold { + font-weight: 600 !important; +} + +.bodywebsite .fw-bolder { + font-weight: bolder !important; +} + +.bodywebsite .lh-1 { + line-height: 1 !important; +} + +.bodywebsite .lh-sm { + line-height: 1.25 !important; +} + +.bodywebsite .lh-base { + line-height: 1.5 !important; +} + +.bodywebsite .lh-lg { + line-height: 2 !important; +} + +.bodywebsite .text-start { + text-align: left !important; +} + +.bodywebsite .text-end { + text-align: right !important; +} + +.bodywebsite .text-center { + text-align: center !important; +} + +.bodywebsite .text-decoration-none { + text-decoration: none !important; +} + +.bodywebsite .text-decoration-underline { + text-decoration: underline !important; +} + +.bodywebsite .text-decoration-line-through { + text-decoration: line-through !important; +} + +.bodywebsite .text-lowercase { + text-transform: lowercase !important; +} + +.bodywebsite .text-uppercase { + text-transform: uppercase !important; +} + +.bodywebsite .text-capitalize { + text-transform: capitalize !important; +} + +.bodywebsite .text-wrap { + white-space: normal !important; +} + +.bodywebsite .text-nowrap { + white-space: nowrap !important; +} + +.bodywebsite .text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +.bodywebsite .text-primary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-secondary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-success { + --bs-text-opacity: 1; +} + +.bodywebsite .text-info { + --bs-text-opacity: 1; +} + +.bodywebsite .text-warning { + --bs-text-opacity: 1; +} + +.bodywebsite .text-danger { + --bs-text-opacity: 1; +} + +.bodywebsite .text-light { + --bs-text-opacity: 1; +} + +.bodywebsite .text-dark { + --bs-text-opacity: 1; +} + +.bodywebsite .text-black { + --bs-text-opacity: 1; +} + +.bodywebsite .text-white { + --bs-text-opacity: 1; +} + +.bodywebsite .text-body { + --bs-text-opacity: 1; +} + +.bodywebsite .text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.bodywebsite .text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.bodywebsite .text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.bodywebsite .text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.bodywebsite .text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.bodywebsite .text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.bodywebsite .text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.bodywebsite .text-opacity-100 { + --bs-text-opacity: 1; +} + +.bodywebsite .bg-primary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-secondary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-success { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-info { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-warning { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-danger { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-light { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-dark { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-black { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-white { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-body { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-transparent { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bodywebsite .bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bodywebsite .bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bodywebsite .bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bodywebsite .bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.bodywebsite .user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.bodywebsite .user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.bodywebsite .user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.bodywebsite .pe-none { + pointer-events: none !important; +} + +.bodywebsite .pe-auto { + pointer-events: auto !important; +} + +.bodywebsite .rounded { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-0 { + border-radius: 0 !important; +} + +.bodywebsite .rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.bodywebsite .rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.bodywebsite .rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.bodywebsite .rounded-5 { + border-radius: var(--bs-border-radius-2xl) !important; +} + +.bodywebsite .rounded-circle { + border-radius: 50% !important; +} + +.bodywebsite .rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.bodywebsite .rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .visible { + visibility: visible !important; +} + +.bodywebsite .invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .bodywebsite .float-sm-start { + float: left !important; + } + + .bodywebsite .float-sm-end { + float: right !important; + } + + .bodywebsite .float-sm-none { + float: none !important; + } + + .bodywebsite .d-sm-inline { + display: inline !important; + } + + .bodywebsite .d-sm-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-sm-block { + display: block !important; + } + + .bodywebsite .d-sm-grid { + display: grid !important; + } + + .bodywebsite .d-sm-table { + display: table !important; + } + + .bodywebsite .d-sm-table-row { + display: table-row !important; + } + + .bodywebsite .d-sm-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-sm-flex { + display: flex !important; + } + + .bodywebsite .d-sm-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-sm-none { + display: none !important; + } + + .bodywebsite .flex-sm-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-sm-row { + flex-direction: row !important; + } + + .bodywebsite .flex-sm-column { + flex-direction: column !important; + } + + .bodywebsite .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-sm-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-sm-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-sm-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-sm-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-sm-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-sm-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-sm-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-sm-center { + align-items: center !important; + } + + .bodywebsite .align-items-sm-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-sm-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-sm-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-sm-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-sm-center { + align-content: center !important; + } + + .bodywebsite .align-content-sm-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-sm-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-sm-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-sm-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-sm-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-sm-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-sm-center { + align-self: center !important; + } + + .bodywebsite .align-self-sm-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-sm-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-sm-first { + order: -1 !important; + } + + .bodywebsite .order-sm-0 { + order: 0 !important; + } + + .bodywebsite .order-sm-1 { + order: 1 !important; + } + + .bodywebsite .order-sm-2 { + order: 2 !important; + } + + .bodywebsite .order-sm-3 { + order: 3 !important; + } + + .bodywebsite .order-sm-4 { + order: 4 !important; + } + + .bodywebsite .order-sm-5 { + order: 5 !important; + } + + .bodywebsite .order-sm-last { + order: 6 !important; + } + + .bodywebsite .m-sm-0 { + margin: 0 !important; + } + + .bodywebsite .m-sm-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-sm-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-sm-3 { + margin: 1rem !important; + } + + .bodywebsite .m-sm-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-sm-5 { + margin: 3rem !important; + } + + .bodywebsite .m-sm-auto { + margin: auto !important; + } + + .bodywebsite .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-sm-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-sm-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-sm-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-sm-auto { + margin-top: auto !important; + } + + .bodywebsite .me-sm-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-sm-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-sm-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-sm-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-sm-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-sm-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-sm-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-sm-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-sm-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-sm-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-sm-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-sm-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-sm-auto { + margin-left: auto !important; + } + + .bodywebsite .p-sm-0 { + padding: 0 !important; + } + + .bodywebsite .p-sm-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-sm-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-sm-3 { + padding: 1rem !important; + } + + .bodywebsite .p-sm-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-sm-5 { + padding: 3rem !important; + } + + .bodywebsite .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-sm-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-sm-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-sm-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-sm-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-sm-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-sm-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-sm-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-sm-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-sm-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-sm-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-sm-0 { + gap: 0 !important; + } + + .bodywebsite .gap-sm-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-sm-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-sm-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-sm-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-sm-5 { + gap: 3rem !important; + } + + .bodywebsite .text-sm-start { + text-align: left !important; + } + + .bodywebsite .text-sm-end { + text-align: right !important; + } + + .bodywebsite .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .bodywebsite .float-md-start { + float: left !important; + } + + .bodywebsite .float-md-end { + float: right !important; + } + + .bodywebsite .float-md-none { + float: none !important; + } + + .bodywebsite .d-md-inline { + display: inline !important; + } + + .bodywebsite .d-md-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-md-block { + display: block !important; + } + + .bodywebsite .d-md-grid { + display: grid !important; + } + + .bodywebsite .d-md-table { + display: table !important; + } + + .bodywebsite .d-md-table-row { + display: table-row !important; + } + + .bodywebsite .d-md-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-md-flex { + display: flex !important; + } + + .bodywebsite .d-md-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-md-none { + display: none !important; + } + + .bodywebsite .flex-md-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-md-row { + flex-direction: row !important; + } + + .bodywebsite .flex-md-column { + flex-direction: column !important; + } + + .bodywebsite .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-md-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-md-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-md-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-md-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-md-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-md-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-md-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-md-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-md-center { + align-items: center !important; + } + + .bodywebsite .align-items-md-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-md-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-md-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-md-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-md-center { + align-content: center !important; + } + + .bodywebsite .align-content-md-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-md-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-md-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-md-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-md-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-md-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-md-center { + align-self: center !important; + } + + .bodywebsite .align-self-md-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-md-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-md-first { + order: -1 !important; + } + + .bodywebsite .order-md-0 { + order: 0 !important; + } + + .bodywebsite .order-md-1 { + order: 1 !important; + } + + .bodywebsite .order-md-2 { + order: 2 !important; + } + + .bodywebsite .order-md-3 { + order: 3 !important; + } + + .bodywebsite .order-md-4 { + order: 4 !important; + } + + .bodywebsite .order-md-5 { + order: 5 !important; + } + + .bodywebsite .order-md-last { + order: 6 !important; + } + + .bodywebsite .m-md-0 { + margin: 0 !important; + } + + .bodywebsite .m-md-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-md-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-md-3 { + margin: 1rem !important; + } + + .bodywebsite .m-md-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-md-5 { + margin: 3rem !important; + } + + .bodywebsite .m-md-auto { + margin: auto !important; + } + + .bodywebsite .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-md-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-md-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-md-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-md-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-md-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-md-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-md-auto { + margin-top: auto !important; + } + + .bodywebsite .me-md-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-md-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-md-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-md-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-md-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-md-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-md-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-md-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-md-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-md-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-md-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-md-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-md-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-md-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-md-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-md-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-md-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-md-auto { + margin-left: auto !important; + } + + .bodywebsite .p-md-0 { + padding: 0 !important; + } + + .bodywebsite .p-md-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-md-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-md-3 { + padding: 1rem !important; + } + + .bodywebsite .p-md-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-md-5 { + padding: 3rem !important; + } + + .bodywebsite .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-md-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-md-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-md-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-md-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-md-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-md-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-md-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-md-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-md-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-md-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-md-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-md-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-md-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-md-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-md-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-md-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-md-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-md-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-md-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-md-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-md-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-md-0 { + gap: 0 !important; + } + + .bodywebsite .gap-md-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-md-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-md-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-md-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-md-5 { + gap: 3rem !important; + } + + .bodywebsite .text-md-start { + text-align: left !important; + } + + .bodywebsite .text-md-end { + text-align: right !important; + } + + .bodywebsite .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .bodywebsite .float-lg-start { + float: left !important; + } + + .bodywebsite .float-lg-end { + float: right !important; + } + + .bodywebsite .float-lg-none { + float: none !important; + } + + .bodywebsite .d-lg-inline { + display: inline !important; + } + + .bodywebsite .d-lg-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-lg-block { + display: block !important; + } + + .bodywebsite .d-lg-grid { + display: grid !important; + } + + .bodywebsite .d-lg-table { + display: table !important; + } + + .bodywebsite .d-lg-table-row { + display: table-row !important; + } + + .bodywebsite .d-lg-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-lg-flex { + display: flex !important; + } + + .bodywebsite .d-lg-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-lg-none { + display: none !important; + } + + .bodywebsite .flex-lg-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-lg-row { + flex-direction: row !important; + } + + .bodywebsite .flex-lg-column { + flex-direction: column !important; + } + + .bodywebsite .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-lg-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-lg-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-lg-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-lg-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-lg-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-lg-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-lg-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-lg-center { + align-items: center !important; + } + + .bodywebsite .align-items-lg-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-lg-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-lg-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-lg-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-lg-center { + align-content: center !important; + } + + .bodywebsite .align-content-lg-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-lg-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-lg-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-lg-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-lg-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-lg-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-lg-center { + align-self: center !important; + } + + .bodywebsite .align-self-lg-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-lg-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-lg-first { + order: -1 !important; + } + + .bodywebsite .order-lg-0 { + order: 0 !important; + } + + .bodywebsite .order-lg-1 { + order: 1 !important; + } + + .bodywebsite .order-lg-2 { + order: 2 !important; + } + + .bodywebsite .order-lg-3 { + order: 3 !important; + } + + .bodywebsite .order-lg-4 { + order: 4 !important; + } + + .bodywebsite .order-lg-5 { + order: 5 !important; + } + + .bodywebsite .order-lg-last { + order: 6 !important; + } + + .bodywebsite .m-lg-0 { + margin: 0 !important; + } + + .bodywebsite .m-lg-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-lg-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-lg-3 { + margin: 1rem !important; + } + + .bodywebsite .m-lg-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-lg-5 { + margin: 3rem !important; + } + + .bodywebsite .m-lg-auto { + margin: auto !important; + } + + .bodywebsite .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-lg-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-lg-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-lg-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-lg-auto { + margin-top: auto !important; + } + + .bodywebsite .me-lg-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-lg-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-lg-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-lg-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-lg-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-lg-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-lg-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-lg-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-lg-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-lg-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-lg-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-lg-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-lg-auto { + margin-left: auto !important; + } + + .bodywebsite .p-lg-0 { + padding: 0 !important; + } + + .bodywebsite .p-lg-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-lg-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-lg-3 { + padding: 1rem !important; + } + + .bodywebsite .p-lg-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-lg-5 { + padding: 3rem !important; + } + + .bodywebsite .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-lg-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-lg-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-lg-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-lg-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-lg-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-lg-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-lg-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-lg-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-lg-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-lg-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-lg-0 { + gap: 0 !important; + } + + .bodywebsite .gap-lg-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-lg-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-lg-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-lg-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-lg-5 { + gap: 3rem !important; + } + + .bodywebsite .text-lg-start { + text-align: left !important; + } + + .bodywebsite .text-lg-end { + text-align: right !important; + } + + .bodywebsite .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .float-xl-start { + float: left !important; + } + + .bodywebsite .float-xl-end { + float: right !important; + } + + .bodywebsite .float-xl-none { + float: none !important; + } + + .bodywebsite .d-xl-inline { + display: inline !important; + } + + .bodywebsite .d-xl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xl-block { + display: block !important; + } + + .bodywebsite .d-xl-grid { + display: grid !important; + } + + .bodywebsite .d-xl-table { + display: table !important; + } + + .bodywebsite .d-xl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xl-flex { + display: flex !important; + } + + .bodywebsite .d-xl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xl-none { + display: none !important; + } + + .bodywebsite .flex-xl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xl-first { + order: -1 !important; + } + + .bodywebsite .order-xl-0 { + order: 0 !important; + } + + .bodywebsite .order-xl-1 { + order: 1 !important; + } + + .bodywebsite .order-xl-2 { + order: 2 !important; + } + + .bodywebsite .order-xl-3 { + order: 3 !important; + } + + .bodywebsite .order-xl-4 { + order: 4 !important; + } + + .bodywebsite .order-xl-5 { + order: 5 !important; + } + + .bodywebsite .order-xl-last { + order: 6 !important; + } + + .bodywebsite .m-xl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xl-start { + text-align: left !important; + } + + .bodywebsite .text-xl-end { + text-align: right !important; + } + + .bodywebsite .text-xl-center { + text-align: center !important; + } +} + +@media (min-width: 1400px) { + .bodywebsite .float-xxl-start { + float: left !important; + } + + .bodywebsite .float-xxl-end { + float: right !important; + } + + .bodywebsite .float-xxl-none { + float: none !important; + } + + .bodywebsite .d-xxl-inline { + display: inline !important; + } + + .bodywebsite .d-xxl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xxl-block { + display: block !important; + } + + .bodywebsite .d-xxl-grid { + display: grid !important; + } + + .bodywebsite .d-xxl-table { + display: table !important; + } + + .bodywebsite .d-xxl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xxl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xxl-flex { + display: flex !important; + } + + .bodywebsite .d-xxl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xxl-none { + display: none !important; + } + + .bodywebsite .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xxl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xxl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xxl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xxl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xxl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xxl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xxl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xxl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xxl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xxl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xxl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xxl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xxl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xxl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xxl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xxl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xxl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xxl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xxl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xxl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xxl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xxl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xxl-first { + order: -1 !important; + } + + .bodywebsite .order-xxl-0 { + order: 0 !important; + } + + .bodywebsite .order-xxl-1 { + order: 1 !important; + } + + .bodywebsite .order-xxl-2 { + order: 2 !important; + } + + .bodywebsite .order-xxl-3 { + order: 3 !important; + } + + .bodywebsite .order-xxl-4 { + order: 4 !important; + } + + .bodywebsite .order-xxl-5 { + order: 5 !important; + } + + .bodywebsite .order-xxl-last { + order: 6 !important; + } + + .bodywebsite .m-xxl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xxl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xxl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xxl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xxl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xxl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xxl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xxl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xxl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xxl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xxl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xxl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xxl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xxl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xxl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xxl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xxl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xxl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xxl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xxl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xxl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xxl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xxl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xxl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xxl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xxl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xxl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xxl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xxl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xxl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xxl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xxl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xxl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xxl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xxl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xxl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xxl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xxl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xxl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xxl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xxl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xxl-start { + text-align: left !important; + } + + .bodywebsite .text-xxl-end { + text-align: right !important; + } + + .bodywebsite .text-xxl-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .fs-1 { + font-size: 2.5rem !important; + } + + .bodywebsite .fs-2 { + font-size: 2rem !important; + } + + .bodywebsite .fs-3 { + font-size: 1.75rem !important; + } + + .bodywebsite .fs-4 { + font-size: 1.5rem !important; + } +} + +@media print { + .bodywebsite .d-print-inline { + display: inline !important; + } + + .bodywebsite .d-print-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-print-block { + display: block !important; + } + + .bodywebsite .d-print-grid { + display: grid !important; + } + + .bodywebsite .d-print-table { + display: table !important; + } + + .bodywebsite .d-print-table-row { + display: table-row !important; + } + + .bodywebsite .d-print-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-print-flex { + display: flex !important; + } + + .bodywebsite .d-print-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-print-none { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ + +.bodywebsite #mysection1 { + font-size: 1.2rem; + font-weight: bold; +} + +.bodywebsite .flex { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.bodywebsite h1 h2 h3 h4 { + font-family: Anton; + font-weight: 900; +} + +.bodywebsite .btn-perso { + background-color: #50759e; + padding-left: 20px; + padding-right: 20px; + text-align: center; + color: #fff; + font-weight: bold; +} + +.bodywebsite .btn-perso:hover { + background-color: #fff; + color: #bb393c; +} + +.bodywebsite #landing { + background-color: #C84F37; + color: #fff; + min-height: 100vh; +} + +.bodywebsite #desc { + background-color: #292727; +} + +.bodywebsite nav { + padding-left: 30px; + padding-right: 30px; + background-color: rgba(12, 12, 12, 0.5) !important; + width: 100%; +} + +.bodywebsite #title { + font-size: 80px; + z-index: 11; +} + +.bodywebsite .img-landing { + position: relative; + top: 0%; + z-index: 10; +} + +.bodywebsite .pointed { + cursor: pointer; + background-color: #292727; + color: #fff; +} + +.bodywebsite #contact { + background-color: #C84F37; + color: white; +} + +.bodywebsite .container { + padding-top: 5%; + padding-bottom: 5%; +} + diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php new file mode 100644 index 00000000000..26adb3ef220 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php @@ -0,0 +1,278 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) { + $original_file = 'blog.rss'; +} + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) { + $attachment = false; +} +if (isset($_GET["attachment"])) { + $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +} +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) { + $attachment = false; +} + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) { + $type = GETPOST('type', 'alpha'); +} else { + $type = dol_mimetype($original_file); +} + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost', 'status'=>1); + if ($l) { + $filters['lang'] = $l; + } + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang($l); + $outputlangs->loadLangs(array("main", "other")); + $title = $desc = $outputlangs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) { + $result = 1; + } else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) { + $attachment = $_GET["attachment"]; + } + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) { + $contenttype = $_GET["contenttype"]; + } + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) { + header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + } + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) { + header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + } else { + header('Cache-Control: private, must-revalidate'); + } + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) { + print 'File '.$outputfile.' was empty.'; + } + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + // Get logos + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed']; + $sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) { + header('Content-Encoding: '.$encoding); + } + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } else { + header('Content-Disposition: inline; filename="'.$filename.'"'); + } + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) { + $db->close(); +} +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/article.png b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/article.png new file mode 100644 index 00000000000..4901fb27d6b Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/article.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/bg.png b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/bg.png new file mode 100644 index 00000000000..33393041017 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/bg.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/happy-man.png b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/happy-man.png new file mode 100644 index 00000000000..af36357a957 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-homesubmenu/medias/image/websitekey/happy-man.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/website_pages.sql b/htdocs/install/doctemplates/websites/website_template-homesubmenu/website_pages.sql new file mode 100644 index 00000000000..bbcf00e3849 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/website_pages.sql @@ -0,0 +1,9 @@ +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-09 10:36:48 UTC --; +-- Page ID 202 -> 1__+MAX_llx_website_page__ - Aliases index --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(1__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'index', '', 'Home page', '', '', '', '', '1', '2022-07-27 00:42:00', '2022-10-09 12:36:07', null, '', 'page', '', '__N__email;__N__ $message = GETPOST(\'message\', \'alpha\');__N__ $cmail = new CMailFile(\'Contact from website\', $to, $from, $message);__N__ if ($cmail->sendfile()) {__N__ ?>__N__ __N__ trans(\"ErrorFailedToSendMail\", $from, $to).\'. \'.$cmail->error;__N__ }__N__}__N__?>__N__
    __N__ __N__ __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    __N__ LOREM IPSUM DOLOR SIT AMET EZAJB__N__

    __N__ __N__
    __N__
    __N__

    Our Company

    __N__

    __N__ Lorem ipsum dolor, sit amet consectetur adipisicing__N__ elit. Ab fuga nobis omnis alias, aliquid iste cumque__N__ tempora nam reprehenderit quia itaque debitis,__N__ nostrum labore rerum reiciendis laboriosam unde,__N__ tempore corporis.__N__

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Founders

    __N__
      __N__
    • __N__

      Author One

      __N__
    • __N__
    • __N__

      Author Two

      __N__
    • __N__
    • __N__

      Author Three

      __N__
    • __N__
    • __N__

      Author Four

      __N__
    • __N__
    __N__
    __N__
    __N__

    About

    __N__

    __N__ Lorem ipsum dolor sit amet consectetur adipisicing elit. Veritatis accusantium earum sed odit velit laudantium ex libero quisquam consectetur, __N__ dolorem vero ipsam perferendis quibusdam itaque omnis a consequatur error repellat.__N__

    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__

    Contact us

    __N__ __N__

    Do you have any questions? Please do not hesitate to contact us directly. Our team will come back to you within__N__ a matter of hours to help you.

    __N__ __N__
    __N__ __N__ __N__
    __N__
    __N__ \" />__N__ __N__
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__
      __N__
    • __N__

      getFullAddress() ?>

      __N__
    • __N__ __N__
    • __N__

      phone ?>

      __N__
    • __N__ __N__
    • __N__

      email ?>

      __N__
    • __N__
    __N__
    __N____N__
    __N__ __N__ __N__
    __N__
    __N__ __N__
    __N__', '', 0); +UPDATE llx_website SET fk_default_home = 1__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-style01.jpg b/htdocs/install/doctemplates/websites/website_template-noimg.jpg similarity index 100% rename from htdocs/install/doctemplates/websites/website_template-style01.jpg rename to htdocs/install/doctemplates/websites/website_template-noimg.jpg diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/LICENSE b/htdocs/install/doctemplates/websites/website_template-noimg/LICENSE new file mode 100644 index 00000000000..871ef743662 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/LICENSE @@ -0,0 +1,4 @@ +LICENSE +------- + +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/README.md b/htdocs/install/doctemplates/websites/website_template-noimg/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-noimg/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-noimg/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/README.md b/htdocs/install/doctemplates/websites/website_template-noimg/containers/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-noimg/containers/htmlheader.html new file mode 100644 index 00000000000..a58ea695524 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/htmlheader.html @@ -0,0 +1,6 @@ + + + diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/index.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/index.php new file mode 100644 index 00000000000..64331a0ec08 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/index.php @@ -0,0 +1,4 @@ +ref.'/page80.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/javascript.js.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/javascript.js.php new file mode 100644 index 00000000000..f58102cf00b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/javascript.js.php @@ -0,0 +1,13 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/manifest.json.php new file mode 100644 index 00000000000..b61531d6c11 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/manifest.json.php @@ -0,0 +1,13 @@ + + + + + +index + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + + + + + Template + + + + + +email; + $message = GETPOST('message', 'alpha'); + $cmail = new CMailFile('Contact from website', $to, $from, $message); + if ($cmail->sendfile()) { + ?> + + trans("ErrorFailedToSendMail", $from, $to).'. '.$cmail->error; + } +} +?> +
    +
    + + +
    +
    + +
    +
    +
    +

    + Brand + Name +

    +

    + Hello fellows, here is a description of the + brand +

    + + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Products

    +
    +
    +
    +
    +
    + +
    +

    Product 1

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    + +
    +

    Product 2

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    + +
    +

    Product 3

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    + +
    +

    Product 4

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    + +
    +

    Product 5

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    + +
    +

    Product 6

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    Contact us

    +

    + Email: email ?> +

    +

    + Phone-number: phone ?> +

    +
    +
    +

    + Or complete the form +

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-noimg/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/styles.css.php new file mode 100644 index 00000000000..92936be1175 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/styles.css.php @@ -0,0 +1,12528 @@ + +@charset "UTF-8"; + +.bodywebsite { + /*! + * Bootstrap v5.2.1 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ + /* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ + /* rtl:begin:remove */ + /* rtl:end:remove */ + /*# sourceMappingURL=bootstrap.css.map */; +} + +.bodywebsite :root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.bodywebsite *, + .bodywebsite *::before, + .bodywebsite *::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + .bodywebsite :root { + scroll-behavior: smooth; + } +} + +.bodywebsite body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +.bodywebsite hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +.bodywebsite h6, .bodywebsite .h6, .bodywebsite h5, .bodywebsite .h5, .bodywebsite h4, .bodywebsite .h4, .bodywebsite h3, .bodywebsite .h3, .bodywebsite h2, .bodywebsite .h2, .bodywebsite h1, .bodywebsite .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +.bodywebsite .text-dark{ + color: black; +} + +.bodywebsite h1, .bodywebsite .h1 { + font-size: calc(1.375rem + 1.5vw); +} + +@media (min-width: 1200px) { + .bodywebsite h1, .bodywebsite .h1 { + font-size: 2.5rem; + } +} + +.bodywebsite h2, .bodywebsite .h2 { + font-size: calc(1.325rem + 0.9vw); +} + +@media (min-width: 1200px) { + .bodywebsite h2, .bodywebsite .h2 { + font-size: 2rem; + } +} + +.bodywebsite h3, .bodywebsite .h3 { + font-size: calc(1.3rem + 0.6vw); +} + +@media (min-width: 1200px) { + .bodywebsite h3, .bodywebsite .h3 { + font-size: 1.75rem; + } +} + +.bodywebsite h4, .bodywebsite .h4 { + font-size: calc(1.275rem + 0.3vw); +} + +@media (min-width: 1200px) { + .bodywebsite h4, .bodywebsite .h4 { + font-size: 1.5rem; + } +} + +.bodywebsite h5, .bodywebsite .h5 { + font-size: 1.25rem; +} + +.bodywebsite h6, .bodywebsite .h6 { + font-size: 1rem; +} + +.bodywebsite p { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +.bodywebsite address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +.bodywebsite ol, + .bodywebsite ul { + padding-left: 2rem; +} + +.bodywebsite ol, + .bodywebsite ul, + .bodywebsite dl { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite ol ol, + .bodywebsite ul ul, + .bodywebsite ol ul, + .bodywebsite ul ol { + margin-bottom: 0; +} + +.bodywebsite dt { + font-weight: 700; +} + +.bodywebsite dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +.bodywebsite blockquote { + margin: 0 0 1rem; +} + +.bodywebsite b, + .bodywebsite strong { + font-weight: bolder; +} + +.bodywebsite small, .bodywebsite .small { + font-size: 0.875em; +} + +.bodywebsite mark, .bodywebsite .mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +.bodywebsite sub, + .bodywebsite sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +.bodywebsite sub { + bottom: -0.25em; +} + +.bodywebsite sup { + top: -0.5em; +} + +.bodywebsite a { + color: var(--bs-link-color); + text-decoration: underline; +} + +.bodywebsite a:hover { + color: var(--bs-link-hover-color); +} + +.bodywebsite a:not([href]):not([class]), .bodywebsite a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +.bodywebsite pre, + .bodywebsite code, + .bodywebsite kbd, + .bodywebsite samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +.bodywebsite pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} + +.bodywebsite pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.bodywebsite code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} + +.bodywebsite a > code { + color: inherit; +} + +.bodywebsite kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} + +.bodywebsite kbd kbd { + padding: 0; + font-size: 1em; +} + +.bodywebsite figure { + margin: 0 0 1rem; +} + +.bodywebsite img, + .bodywebsite svg { + vertical-align: middle; +} + +.bodywebsite table { + caption-side: bottom; + border-collapse: collapse; +} + +.bodywebsite caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +.bodywebsite th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +.bodywebsite thead, + .bodywebsite tbody, + .bodywebsite tfoot, + .bodywebsite tr, + .bodywebsite td, + .bodywebsite th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +.bodywebsite label { + display: inline-block; +} + +.bodywebsite button { + border-radius: 0; +} + +.bodywebsite button:focus:not(:focus-visible) { + outline: 0; +} + +.bodywebsite input, + .bodywebsite button, + .bodywebsite select, + .bodywebsite optgroup, + .bodywebsite textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.bodywebsite button, + .bodywebsite select { + text-transform: none; +} + +.bodywebsite [role=button] { + cursor: pointer; +} + +.bodywebsite select { + word-wrap: normal; +} + +.bodywebsite select:disabled { + opacity: 1; +} + +.bodywebsite [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +.bodywebsite button, + .bodywebsite [type=button], + .bodywebsite [type=reset], + .bodywebsite [type=submit] { + -webkit-appearance: button; +} + +.bodywebsite button:not(:disabled), + .bodywebsite [type=button]:not(:disabled), + .bodywebsite [type=reset]:not(:disabled), + .bodywebsite [type=submit]:not(:disabled) { + cursor: pointer; +} + +.bodywebsite ::-moz-focus-inner { + padding: 0; + border-style: none; +} + +.bodywebsite textarea { + resize: vertical; +} + +.bodywebsite fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +.bodywebsite legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} + +@media (min-width: 1200px) { + .bodywebsite legend { + font-size: 1.5rem; + } +} + +.bodywebsite legend + * { + clear: left; +} + +.bodywebsite ::-webkit-datetime-edit-fields-wrapper, + .bodywebsite ::-webkit-datetime-edit-text, + .bodywebsite ::-webkit-datetime-edit-minute, + .bodywebsite ::-webkit-datetime-edit-hour-field, + .bodywebsite ::-webkit-datetime-edit-day-field, + .bodywebsite ::-webkit-datetime-edit-month-field, + .bodywebsite ::-webkit-datetime-edit-year-field { + padding: 0; +} + +.bodywebsite ::-webkit-inner-spin-button { + height: auto; +} + +.bodywebsite [type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +.bodywebsite ::-webkit-search-decoration { + -webkit-appearance: none; +} + +.bodywebsite ::-webkit-color-swatch-wrapper { + padding: 0; +} + +.bodywebsite ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite ::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite output { + display: inline-block; +} + +.bodywebsite iframe { + border: 0; +} + +.bodywebsite summary { + display: list-item; + cursor: pointer; +} + +.bodywebsite progress { + vertical-align: baseline; +} + +.bodywebsite [hidden] { + display: none !important; +} + +.bodywebsite .lead { + font-size: 1.25rem; + font-weight: 300; +} + +.bodywebsite .display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-1 { + font-size: 5rem; + } +} + +.bodywebsite .display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-2 { + font-size: 4.5rem; + } +} + +.bodywebsite .display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-3 { + font-size: 4rem; + } +} + +.bodywebsite .display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-4 { + font-size: 3.5rem; + } +} + +.bodywebsite .display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-5 { + font-size: 3rem; + } +} + +.bodywebsite .display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-6 { + font-size: 2.5rem; + } +} + +.bodywebsite .list-unstyled { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline-item { + display: inline-block; +} + +.bodywebsite .list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.bodywebsite .initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.bodywebsite .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.bodywebsite .blockquote > :last-child { + margin-bottom: 0; +} + +.bodywebsite .blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .blockquote-footer::before { + content: "— "; +} + +.bodywebsite .img-fluid { + max-width: 100%; + height: auto; +} + +.bodywebsite .img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.bodywebsite .figure { + display: inline-block; +} + +.bodywebsite .figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.bodywebsite .figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .container, + .bodywebsite .container-fluid, + .bodywebsite .container-xxl, + .bodywebsite .container-xl, + .bodywebsite .container-lg, + .bodywebsite .container-md, + .bodywebsite .container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .container-sm, .bodywebsite .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + .bodywebsite .container-xxl, .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1320px; + } +} + +.bodywebsite .row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} + +.bodywebsite .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.bodywebsite .col { + flex: 1 0 0%; +} + +.bodywebsite .row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.bodywebsite .row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.bodywebsite .row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.bodywebsite .col-auto { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.bodywebsite .col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.bodywebsite .col-3 { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.bodywebsite .col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.bodywebsite .col-6 { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.bodywebsite .col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.bodywebsite .col-9 { + flex: 0 0 auto; + width: 75%; +} + +.bodywebsite .col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.bodywebsite .col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.bodywebsite .col-12 { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .offset-1 { + margin-left: 8.33333333%; +} + +.bodywebsite .offset-2 { + margin-left: 16.66666667%; +} + +.bodywebsite .offset-3 { + margin-left: 25%; +} + +.bodywebsite .offset-4 { + margin-left: 33.33333333%; +} + +.bodywebsite .offset-5 { + margin-left: 41.66666667%; +} + +.bodywebsite .offset-6 { + margin-left: 50%; +} + +.bodywebsite .offset-7 { + margin-left: 58.33333333%; +} + +.bodywebsite .offset-8 { + margin-left: 66.66666667%; +} + +.bodywebsite .offset-9 { + margin-left: 75%; +} + +.bodywebsite .offset-10 { + margin-left: 83.33333333%; +} + +.bodywebsite .offset-11 { + margin-left: 91.66666667%; +} + +.bodywebsite .g-0, + .bodywebsite .gx-0 { + --bs-gutter-x: 0; +} + +.bodywebsite .g-0, + .bodywebsite .gy-0 { + --bs-gutter-y: 0; +} + +.bodywebsite .g-1, + .bodywebsite .gx-1 { + --bs-gutter-x: 0.25rem; +} + +.bodywebsite .g-1, + .bodywebsite .gy-1 { + --bs-gutter-y: 0.25rem; +} + +.bodywebsite .g-2, + .bodywebsite .gx-2 { + --bs-gutter-x: 0.5rem; +} + +.bodywebsite .g-2, + .bodywebsite .gy-2 { + --bs-gutter-y: 0.5rem; +} + +.bodywebsite .g-3, + .bodywebsite .gx-3 { + --bs-gutter-x: 1rem; +} + +.bodywebsite .g-3, + .bodywebsite .gy-3 { + --bs-gutter-y: 1rem; +} + +.bodywebsite .g-4, + .bodywebsite .gx-4 { + --bs-gutter-x: 1.5rem; +} + +.bodywebsite .g-4, + .bodywebsite .gy-4 { + --bs-gutter-y: 1.5rem; +} + +.bodywebsite .g-5, + .bodywebsite .gx-5 { + --bs-gutter-x: 3rem; +} + +.bodywebsite .g-5, + .bodywebsite .gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .bodywebsite .col-sm { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-sm-0 { + margin-left: 0; + } + + .bodywebsite .offset-sm-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-sm-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-sm-3 { + margin-left: 25%; + } + + .bodywebsite .offset-sm-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-sm-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-sm-6 { + margin-left: 50%; + } + + .bodywebsite .offset-sm-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-sm-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-sm-9 { + margin-left: 75%; + } + + .bodywebsite .offset-sm-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-sm-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gx-sm-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gy-sm-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px) { + .bodywebsite .col-md { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-md-0 { + margin-left: 0; + } + + .bodywebsite .offset-md-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-md-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-md-3 { + margin-left: 25%; + } + + .bodywebsite .offset-md-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-md-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-md-6 { + margin-left: 50%; + } + + .bodywebsite .offset-md-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-md-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-md-9 { + margin-left: 75%; + } + + .bodywebsite .offset-md-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-md-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-md-0, + .bodywebsite .gx-md-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-md-0, + .bodywebsite .gy-md-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-md-1, + .bodywebsite .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-md-1, + .bodywebsite .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gx-md-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gy-md-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gx-md-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gy-md-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px) { + .bodywebsite .col-lg { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-lg-0 { + margin-left: 0; + } + + .bodywebsite .offset-lg-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-lg-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-lg-3 { + margin-left: 25%; + } + + .bodywebsite .offset-lg-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-lg-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-lg-6 { + margin-left: 50%; + } + + .bodywebsite .offset-lg-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-lg-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-lg-9 { + margin-left: 75%; + } + + .bodywebsite .offset-lg-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-lg-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gx-lg-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gy-lg-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px) { + .bodywebsite .col-xl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gx-xl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gy-xl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px) { + .bodywebsite .col-xxl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xxl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xxl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xxl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xxl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gx-xxl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gy-xxl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} + +.bodywebsite .table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} + +.bodywebsite .table > tbody { + vertical-align: inherit; +} + +.bodywebsite .table > thead { + vertical-align: bottom; +} + +.bodywebsite .table-group-divider { + border-top: 2px solid currentcolor; +} + +.bodywebsite .caption-top { + caption-side: top; +} + +.bodywebsite .table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.bodywebsite .table-bordered > :not(caption) > * { + border-width: 1px 0; +} + +.bodywebsite .table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.bodywebsite .table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.bodywebsite .table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.bodywebsite .table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.bodywebsite .table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .bodywebsite .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +.bodywebsite .form-label { + margin-bottom: 0.5rem; +} + +.bodywebsite .col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.bodywebsite .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.bodywebsite .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.bodywebsite .form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control { + transition: none; + } +} + +.bodywebsite .form-control[type=file] { + overflow: hidden; +} + +.bodywebsite .form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-control::-webkit-date-and-time-value { + height: 1.5em; +} + +.bodywebsite .form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control:disabled { + background-color: #e9ecef; + opacity: 1; +} + +.bodywebsite .form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.bodywebsite .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + + .bodywebsite .form-control::file-selector-button { + transition: none; + } +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.bodywebsite .form-control-plaintext:focus { + outline: 0; +} + +.bodywebsite .form-control-plaintext.form-control-sm, .bodywebsite .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.bodywebsite .form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} + +.bodywebsite textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} + +.bodywebsite .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-select { + transition: none; + } +} + +.bodywebsite .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-select[multiple], .bodywebsite .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} + +.bodywebsite .form-select:disabled { + background-color: #e9ecef; +} + +.bodywebsite .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.bodywebsite .form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} + +.bodywebsite .form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.bodywebsite .form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} + +.bodywebsite .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.bodywebsite .form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} + +.bodywebsite .form-check-input[type=checkbox] { + border-radius: 0.25em; +} + +.bodywebsite .form-check-input[type=radio] { + border-radius: 50%; +} + +.bodywebsite .form-check-input:active { + filter: brightness(90%); +} + +.bodywebsite .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} + +.bodywebsite .form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +.bodywebsite .form-check-input[disabled] ~ .form-check-label, .bodywebsite .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.bodywebsite .form-switch { + padding-left: 2.5em; +} + +.bodywebsite .form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-switch .form-check-input { + transition: none; + } +} + +.bodywebsite .form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} + +.bodywebsite .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.bodywebsite .form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.bodywebsite .btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.bodywebsite .btn-check[disabled] + .btn, .bodywebsite .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.bodywebsite .form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.bodywebsite .form-range:focus { + outline: 0; +} + +.bodywebsite .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range::-moz-focus-outer { + border: 0; +} + +.bodywebsite .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range:disabled { + pointer-events: none; +} + +.bodywebsite .form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-floating { + position: relative; +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext, + .bodywebsite .form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} + +.bodywebsite .form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-floating > label { + transition: none; + } +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} + +.bodywebsite .form-floating > .form-control::-moz-placeholder, .bodywebsite .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control::placeholder, + .bodywebsite .form-floating > .form-control-plaintext::placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown), .bodywebsite .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:focus, .bodywebsite .form-floating > .form-control:not(:placeholder-shown), + .bodywebsite .form-floating > .form-control-plaintext:focus, + .bodywebsite .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill, + .bodywebsite .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:focus ~ label, + .bodywebsite .form-floating > .form-control:not(:placeholder-shown) ~ label, + .bodywebsite .form-floating > .form-control-plaintext ~ label, + .bodywebsite .form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.bodywebsite .input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.bodywebsite .input-group > .form-control, + .bodywebsite .input-group > .form-select, + .bodywebsite .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} + +.bodywebsite .input-group > .form-control:focus, + .bodywebsite .input-group > .form-select:focus, + .bodywebsite .input-group > .form-floating:focus-within { + z-index: 5; +} + +.bodywebsite .input-group .btn { + position: relative; + z-index: 2; +} + +.bodywebsite .input-group .btn:focus { + z-index: 5; +} + +.bodywebsite .input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.bodywebsite .input-group-lg > .form-control, + .bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-lg > .input-group-text, + .bodywebsite .input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .input-group-sm > .form-control, + .bodywebsite .input-group-sm > .form-select, + .bodywebsite .input-group-sm > .input-group-text, + .bodywebsite .input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-sm > .form-select { + padding-right: 3rem; +} + +.bodywebsite .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .input-group > .form-floating:not(:first-child) > .form-control, + .bodywebsite .input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.bodywebsite .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :valid ~ .valid-feedback, + .bodywebsite .was-validated :valid ~ .valid-tooltip, + .bodywebsite .is-valid ~ .valid-feedback, + .bodywebsite .is-valid ~ .valid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:valid, .bodywebsite .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:valid:focus, .bodywebsite .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:valid, .bodywebsite textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:valid, .bodywebsite .form-select.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-select:valid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:valid:not([multiple])[size="1"], .bodywebsite .form-select.is-valid:not([multiple]):not([size]), .bodywebsite .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:valid:focus, .bodywebsite .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-control-color:valid, .bodywebsite .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:valid, .bodywebsite .form-check-input.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:checked, .bodywebsite .form-check-input.is-valid:checked { + background-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:focus, .bodywebsite .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-check-input:valid ~ .form-check-label, .bodywebsite .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.bodywebsite .form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):valid, .bodywebsite .input-group > .form-control:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):valid, + .bodywebsite .input-group > .form-select:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):valid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.bodywebsite .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.bodywebsite .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :invalid ~ .invalid-feedback, + .bodywebsite .was-validated :invalid ~ .invalid-tooltip, + .bodywebsite .is-invalid ~ .invalid-feedback, + .bodywebsite .is-invalid ~ .invalid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:invalid, .bodywebsite .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:invalid:focus, .bodywebsite .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:invalid, .bodywebsite textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:invalid, .bodywebsite .form-select.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-select:invalid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:invalid:not([multiple])[size="1"], .bodywebsite .form-select.is-invalid:not([multiple]):not([size]), .bodywebsite .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:invalid:focus, .bodywebsite .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-control-color:invalid, .bodywebsite .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:invalid, .bodywebsite .form-check-input.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:checked, .bodywebsite .form-check-input.is-invalid:checked { + background-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:focus, .bodywebsite .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-check-input:invalid ~ .form-check-label, .bodywebsite .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.bodywebsite .form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):invalid, .bodywebsite .input-group > .form-control:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):invalid, + .bodywebsite .input-group > .form-select:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):invalid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.bodywebsite .btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .btn { + transition: none; + } +} + +.bodywebsite :not(.btn-check) + .btn:hover, .bodywebsite .btn:first-child:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} + +.bodywebsite .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:checked + .btn, .bodywebsite :not(.btn-check) + .btn:active, .bodywebsite .btn:first-child:active, .bodywebsite .btn.active, .bodywebsite .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} + +.bodywebsite .btn-check:checked + .btn:focus-visible, .bodywebsite :not(.btn-check) + .btn:active:focus-visible, .bodywebsite .btn:first-child:active:focus-visible, .bodywebsite .btn.active:focus-visible, .bodywebsite .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn:disabled, .bodywebsite .btn.disabled, .bodywebsite fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.bodywebsite .btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.bodywebsite .btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.bodywebsite .btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.bodywebsite .btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.bodywebsite .btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.bodywebsite .btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.bodywebsite .btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.bodywebsite .btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.bodywebsite .btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.bodywebsite .btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} + +.bodywebsite .btn-link:focus-visible { + color: var(--bs-btn-color); +} + +.bodywebsite .btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.bodywebsite .btn-lg, .bodywebsite .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 0.5rem; +} + +.bodywebsite .btn-sm, .bodywebsite .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: 0.25rem; +} + +.bodywebsite .fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .fade { + transition: none; + } +} + +.bodywebsite .fade:not(.show) { + opacity: 0; +} + +.bodywebsite .collapse:not(.show) { + display: none; +} + +.bodywebsite .collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing { + transition: none; + } +} + +.bodywebsite .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing.collapse-horizontal { + transition: none; + } +} + +.bodywebsite .dropup, + .bodywebsite .dropend, + .bodywebsite .dropdown, + .bodywebsite .dropstart, + .bodywebsite .dropup-center, + .bodywebsite .dropdown-center { + position: relative; +} + +.bodywebsite .dropdown-toggle { + white-space: nowrap; +} + +.bodywebsite .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-dropdown-link-color: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} + +.bodywebsite .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropdown-menu-start { + --bs-position: start; +} + +.bodywebsite .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.bodywebsite .dropdown-menu-end { + --bs-position: end; +} + +.bodywebsite .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .dropdown-menu-sm-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-sm-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .bodywebsite .dropdown-menu-md-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-md-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .bodywebsite .dropdown-menu-lg-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-lg-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .bodywebsite .dropdown-menu-xl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1400px) { + .bodywebsite .dropdown-menu-xxl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xxl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +.bodywebsite .dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.bodywebsite .dropend .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.bodywebsite .dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: none; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.bodywebsite .dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.bodywebsite .dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.bodywebsite .dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.bodywebsite .dropdown-item:hover, .bodywebsite .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} + +.bodywebsite .dropdown-item.active, .bodywebsite .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} + +.bodywebsite .dropdown-item.disabled, .bodywebsite .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.bodywebsite .dropdown-menu.show { + display: block; +} + +.bodywebsite .dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.bodywebsite .dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.bodywebsite .dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.bodywebsite .btn-group, + .bodywebsite .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.bodywebsite .btn-group > .btn, + .bodywebsite .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.bodywebsite .btn-group > .btn-check:checked + .btn, + .bodywebsite .btn-group > .btn-check:focus + .btn, + .bodywebsite .btn-group > .btn:hover, + .bodywebsite .btn-group > .btn:focus, + .bodywebsite .btn-group > .btn:active, + .bodywebsite .btn-group > .btn.active, + .bodywebsite .btn-group-vertical > .btn-check:checked + .btn, + .bodywebsite .btn-group-vertical > .btn-check:focus + .btn, + .bodywebsite .btn-group-vertical > .btn:hover, + .bodywebsite .btn-group-vertical > .btn:focus, + .bodywebsite .btn-group-vertical > .btn:active, + .bodywebsite .btn-group-vertical > .btn.active { + z-index: 1; +} + +.bodywebsite .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.bodywebsite .btn-toolbar .input-group { + width: auto; +} + +.bodywebsite .btn-group { + border-radius: 0.375rem; +} + +.bodywebsite .btn-group > :not(.btn-check:first-child) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.bodywebsite .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group > .btn.dropdown-toggle-split:first-child, + .bodywebsite .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .btn-group > .btn:nth-child(n+3), + .bodywebsite .btn-group > :not(.btn-check) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.bodywebsite .dropdown-toggle-split::after, .bodywebsite .dropup .dropdown-toggle-split::after, .bodywebsite .dropend .dropdown-toggle-split::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.bodywebsite .btn-sm + .dropdown-toggle-split, .bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.bodywebsite .btn-lg + .dropdown-toggle-split, .bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.bodywebsite .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.bodywebsite .btn-group-vertical > .btn, + .bodywebsite .btn-group-vertical > .btn-group { + width: 100%; +} + +.bodywebsite .btn-group-vertical > .btn:not(:first-child), + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.bodywebsite .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .btn-group-vertical > .btn ~ .btn, + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .nav-link { + transition: none; + } +} + +.bodywebsite .nav-link:hover, .bodywebsite .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} + +.bodywebsite .nav-link.disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.bodywebsite .nav-tabs { + --bs-nav-tabs-border-width: 1px; + --bs-nav-tabs-border-color: #dee2e6; + --bs-nav-tabs-border-radius: 0.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} + +.bodywebsite .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} + +.bodywebsite .nav-tabs .nav-link:hover, .bodywebsite .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} + +.bodywebsite .nav-tabs .nav-link.disabled, .bodywebsite .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-tabs .nav-link.active, + .bodywebsite .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} + +.bodywebsite .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav-pills { + --bs-nav-pills-border-radius: 0.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} + +.bodywebsite .nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} + +.bodywebsite .nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-pills .nav-link.active, + .bodywebsite .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.bodywebsite .nav-fill > .nav-link, + .bodywebsite .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.bodywebsite .nav-justified > .nav-link, + .bodywebsite .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.bodywebsite .nav-fill .nav-item .nav-link, + .bodywebsite .nav-justified .nav-item .nav-link { + width: 100%; +} + +.bodywebsite .tab-content > .tab-pane { + display: none; +} + +.bodywebsite .tab-content > .active { + display: block; +} + +.bodywebsite .navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} + +.bodywebsite .navbar > .container, + .bodywebsite .navbar > .container-fluid, + .bodywebsite .navbar > .container-sm, + .bodywebsite .navbar > .container-md, + .bodywebsite .navbar > .container-lg, + .bodywebsite .navbar > .container-xl, + .bodywebsite .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} + +.bodywebsite .navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} + +.bodywebsite .navbar-brand:hover, .bodywebsite .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.bodywebsite .navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .navbar-nav .show > .nav-link, + .bodywebsite .navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-nav .dropdown-menu { + position: static; +} + +.bodywebsite .navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} + +.bodywebsite .navbar-text a, + .bodywebsite .navbar-text a:hover, + .bodywebsite .navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.bodywebsite .navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .navbar-toggler { + transition: none; + } +} + +.bodywebsite .navbar-toggler:hover { + text-decoration: none; +} + +.bodywebsite .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.bodywebsite .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.bodywebsite .navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .bodywebsite .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-sm .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-md .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-md .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-lg .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xxl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +.bodywebsite .navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} + +.bodywebsite .navbar-expand .navbar-nav { + flex-direction: row; +} + +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.bodywebsite .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} + +.bodywebsite .navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.bodywebsite .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.bodywebsite .navbar-expand .navbar-toggler { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-header { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.bodywebsite .navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.bodywebsite .card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} + +.bodywebsite .card > hr { + margin-right: 0; + margin-left: 0; +} + +.bodywebsite .card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.bodywebsite .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .card-header + .list-group, + .bodywebsite .card > .list-group + .card-footer { + border-top: 0; +} + +.bodywebsite .card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.bodywebsite .card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.bodywebsite .card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.bodywebsite .card-text:last-child { + margin-bottom: 0; +} + +.bodywebsite .card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.bodywebsite .card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.bodywebsite .card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} + +.bodywebsite .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.bodywebsite .card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.bodywebsite .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top, + .bodywebsite .card-img-bottom { + width: 100%; +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} + +@media (min-width: 576px) { + .bodywebsite .card-group { + display: flex; + flex-flow: row wrap; + } + + .bodywebsite .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + + .bodywebsite .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-top, + .bodywebsite .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-top, + .bodywebsite .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.bodywebsite .accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='var%28--bs-body-color%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.bodywebsite .accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button { + transition: none; + } +} + +.bodywebsite .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} + +.bodywebsite .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button::after { + transition: none; + } +} + +.bodywebsite .accordion-button:hover { + z-index: 2; +} + +.bodywebsite .accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.bodywebsite .accordion-header { + margin-bottom: 0; +} + +.bodywebsite .accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:not(:first-of-type) { + border-top: 0; +} + +.bodywebsite .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.bodywebsite .accordion-flush .accordion-collapse { + border-width: 0; +} + +.bodywebsite .accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.bodywebsite .accordion-flush .accordion-item:first-child { + border-top: 0; +} + +.bodywebsite .accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.bodywebsite .accordion-flush .accordion-item .accordion-button, .bodywebsite .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; +} + +.bodywebsite .breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-divider-color: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/"); +} + +.bodywebsite .breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.bodywebsite .pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.bodywebsite .page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .page-link { + transition: none; + } +} + +.bodywebsite .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} + +.bodywebsite .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} + +.bodywebsite .page-link.active, .bodywebsite .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} + +.bodywebsite .page-link.disabled, .bodywebsite .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.bodywebsite .page-item:not(:first-child) .page-link { + margin-left: -1px; +} + +.bodywebsite .page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: 0.5rem; +} + +.bodywebsite .pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: 0.25rem; +} + +.bodywebsite .badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} + +.bodywebsite .badge:empty { + display: none; +} + +.bodywebsite .btn .badge { + position: relative; + top: -1px; +} + +.bodywebsite .alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: 1px solid var(--bs-alert-border-color); + --bs-alert-border-radius: 0.375rem; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.bodywebsite .alert-heading { + color: inherit; +} + +.bodywebsite .alert-link { + font-weight: 700; +} + +.bodywebsite .alert-dismissible { + padding-right: 3rem; +} + +.bodywebsite .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.bodywebsite .alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} + +.bodywebsite .alert-primary .alert-link { + color: #06357a; +} + +.bodywebsite .alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} + +.bodywebsite .alert-secondary .alert-link { + color: #34383c; +} + +.bodywebsite .alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} + +.bodywebsite .alert-success .alert-link { + color: #0c4128; +} + +.bodywebsite .alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} + +.bodywebsite .alert-info .alert-link { + color: #04414d; +} + +.bodywebsite .alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} + +.bodywebsite .alert-warning .alert-link { + color: #523e02; +} + +.bodywebsite .alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} + +.bodywebsite .alert-danger .alert-link { + color: #6a1a21; +} + +.bodywebsite .alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} + +.bodywebsite .alert-light .alert-link { + color: #4f5050; +} + +.bodywebsite .alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} + +.bodywebsite .alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +.bodywebsite .progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.bodywebsite .progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar { + transition: none; + } +} + +.bodywebsite .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.bodywebsite .progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.bodywebsite .list-group { + --bs-list-group-color: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.bodywebsite .list-group-numbered { + list-style-type: none; + counter-reset: section; +} + +.bodywebsite .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.bodywebsite .list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} + +.bodywebsite .list-group-item-action:hover, .bodywebsite .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} + +.bodywebsite .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.bodywebsite .list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} + +.bodywebsite .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.bodywebsite .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} + +.bodywebsite .list-group-item.disabled, .bodywebsite .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} + +.bodywebsite .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} + +.bodywebsite .list-group-item + .list-group-item { + border-top-width: 0; +} + +.bodywebsite .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-horizontal { + flex-direction: row; +} + +.bodywebsite .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .bodywebsite .list-group-horizontal-sm { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 768px) { + .bodywebsite .list-group-horizontal-md { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 992px) { + .bodywebsite .list-group-horizontal-lg { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1200px) { + .bodywebsite .list-group-horizontal-xl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1400px) { + .bodywebsite .list-group-horizontal-xxl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +.bodywebsite .list-group-flush { + border-radius: 0; +} + +.bodywebsite .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.bodywebsite .list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} + +.bodywebsite .list-group-item-primary.list-group-item-action:hover, .bodywebsite .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} + +.bodywebsite .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.bodywebsite .list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action:hover, .bodywebsite .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.bodywebsite .list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} + +.bodywebsite .list-group-item-success.list-group-item-action:hover, .bodywebsite .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} + +.bodywebsite .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.bodywebsite .list-group-item-info { + color: #055160; + background-color: #cff4fc; +} + +.bodywebsite .list-group-item-info.list-group-item-action:hover, .bodywebsite .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} + +.bodywebsite .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.bodywebsite .list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} + +.bodywebsite .list-group-item-warning.list-group-item-action:hover, .bodywebsite .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} + +.bodywebsite .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.bodywebsite .list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} + +.bodywebsite .list-group-item-danger.list-group-item-action:hover, .bodywebsite .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} + +.bodywebsite .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.bodywebsite .list-group-item-light { + color: #636464; + background-color: #fefefe; +} + +.bodywebsite .list-group-item-light.list-group-item-action:hover, .bodywebsite .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} + +.bodywebsite .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.bodywebsite .list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} + +.bodywebsite .list-group-item-dark.list-group-item-action:hover, .bodywebsite .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} + +.bodywebsite .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.bodywebsite .btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} + +.bodywebsite .btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} + +.bodywebsite .btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} + +.bodywebsite .btn-close:disabled, .bodywebsite .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.bodywebsite .btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.bodywebsite .toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-bg: rgba(255, 255, 255, 0.85); + --bs-toast-border-width: 1px; + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} + +.bodywebsite .toast.showing { + opacity: 0; +} + +.bodywebsite .toast:not(.show) { + display: none; +} + +.bodywebsite .toast-container { + position: absolute; + z-index: var(--bs-toast-zindex); + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.bodywebsite .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.bodywebsite .toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} + +.bodywebsite .toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.bodywebsite .toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.bodywebsite .modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: 1px; + --bs-modal-border-radius: 0.5rem; + --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-modal-inner-border-radius: calc(0.5rem - 1px); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: 1px; + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: 1px; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.bodywebsite .modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} + +.bodywebsite .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .modal.fade .modal-dialog { + transition: none; + } +} + +.bodywebsite .modal.show .modal-dialog { + transform: none; +} + +.bodywebsite .modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.bodywebsite .modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} + +.bodywebsite .modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.bodywebsite .modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.bodywebsite .modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} + +.bodywebsite .modal-backdrop.fade { + opacity: 0; +} + +.bodywebsite .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.bodywebsite .modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.bodywebsite .modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.bodywebsite .modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.bodywebsite .modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .bodywebsite .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + } + + .bodywebsite .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + + .bodywebsite .modal-sm { + --bs-modal-width: 300px; + } +} + +@media (min-width: 992px) { + .bodywebsite .modal-lg, + .bodywebsite .modal-xl { + --bs-modal-width: 800px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .modal-xl { + --bs-modal-width: 1140px; + } +} + +.bodywebsite .modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} + +.bodywebsite .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-header, + .bodywebsite .modal-fullscreen .modal-footer { + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .bodywebsite .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-header, + .bodywebsite .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-header, + .bodywebsite .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-header, + .bodywebsite .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-header, + .bodywebsite .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-header, + .bodywebsite .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} + +.bodywebsite .tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} + +.bodywebsite .tooltip.show { + opacity: var(--bs-tooltip-opacity); +} + +.bodywebsite .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} + +.bodywebsite .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +.bodywebsite .tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.bodywebsite .popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: 0.5rem; + --bs-popover-inner-border-radius: calc(0.5rem - 1px); + --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} + +.bodywebsite .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} + +.bodywebsite .popover .popover-arrow::before, .bodywebsite .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-end > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom .popover-header::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +.bodywebsite .bs-popover-start > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +.bodywebsite .popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} + +.bodywebsite .popover-header:empty { + display: none; +} + +.bodywebsite .popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.bodywebsite .carousel { + position: relative; +} + +.bodywebsite .carousel.pointer-event { + touch-action: pan-y; +} + +.bodywebsite .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.bodywebsite .carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-item { + transition: none; + } +} + +.bodywebsite .carousel-item.active, + .bodywebsite .carousel-item-next, + .bodywebsite .carousel-item-prev { + display: block; +} + +.bodywebsite .carousel-item-next:not(.carousel-item-start), + .bodywebsite .active.carousel-item-end { + transform: translateX(100%); +} + +.bodywebsite .carousel-item-prev:not(.carousel-item-end), + .bodywebsite .active.carousel-item-start { + transform: translateX(-100%); +} + +.bodywebsite .carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.bodywebsite .carousel-fade .carousel-item.active, + .bodywebsite .carousel-fade .carousel-item-next.carousel-item-start, + .bodywebsite .carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + transition: none; + } +} + +.bodywebsite .carousel-control-prev:hover, .bodywebsite .carousel-control-prev:focus, + .bodywebsite .carousel-control-next:hover, + .bodywebsite .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.bodywebsite .carousel-control-prev { + left: 0; +} + +.bodywebsite .carousel-control-next { + right: 0; +} + +.bodywebsite .carousel-control-prev-icon, + .bodywebsite .carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.bodywebsite .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} + +.bodywebsite .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-indicators [data-bs-target] { + transition: none; + } +} + +.bodywebsite .carousel-indicators .active { + opacity: 1; +} + +.bodywebsite .carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.bodywebsite .carousel-dark .carousel-control-prev-icon, + .bodywebsite .carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} + +.bodywebsite .carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} + +.bodywebsite .carousel-dark .carousel-caption { + color: #000; +} + +.bodywebsite .spinner-grow, + .bodywebsite .spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + -webkit-animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.bodywebsite .spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.bodywebsite .spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +.bodywebsite .spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.bodywebsite .spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .spinner-border, + .bodywebsite .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} + +.bodywebsite .offcanvas, .bodywebsite .offcanvas-xxl, .bodywebsite .offcanvas-xl, .bodywebsite .offcanvas-lg, .bodywebsite .offcanvas-md, .bodywebsite .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-sm { + transition: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.hiding, .bodywebsite .offcanvas-sm.show { + visibility: visible; + } +} + +@media (min-width: 576px) { + .bodywebsite .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-sm .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-md { + transition: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.hiding, .bodywebsite .offcanvas-md.show { + visibility: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-md .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-lg { + transition: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.hiding, .bodywebsite .offcanvas-lg.show { + visibility: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-lg .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xl { + transition: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.hiding, .bodywebsite .offcanvas-xl.show { + visibility: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xxl { + transition: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.hiding, .bodywebsite .offcanvas-xxl.show { + visibility: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xxl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.bodywebsite .offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas { + transition: none; + } +} + +.bodywebsite .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} + +.bodywebsite .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} + +.bodywebsite .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} + +.bodywebsite .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.show:not(.hiding) { + transform: none; +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.hiding, .bodywebsite .offcanvas.show { + visibility: visible; +} + +.bodywebsite .offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.bodywebsite .offcanvas-backdrop.fade { + opacity: 0; +} + +.bodywebsite .offcanvas-backdrop.show { + opacity: 0.5; +} + +.bodywebsite .offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} + +.bodywebsite .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); +} + +.bodywebsite .offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.bodywebsite .offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.bodywebsite .placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} + +.bodywebsite .placeholder.btn::before { + display: inline-block; + content: ""; +} + +.bodywebsite .placeholder-xs { + min-height: 0.6em; +} + +.bodywebsite .placeholder-sm { + min-height: 0.8em; +} + +.bodywebsite .placeholder-lg { + min-height: 1.2em; +} + +.bodywebsite .placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +.bodywebsite .placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +.bodywebsite .clearfix::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .link-primary { + color: #0d6efd !important; +} + +.bodywebsite .link-primary:hover, .bodywebsite .link-primary:focus { + color: #0a58ca !important; +} + +.bodywebsite .link-secondary { + color: #6c757d !important; +} + +.bodywebsite .link-secondary:hover, .bodywebsite .link-secondary:focus { + color: #565e64 !important; +} + +.bodywebsite .link-success { + color: #198754 !important; +} + +.bodywebsite .link-success:hover, .bodywebsite .link-success:focus { + color: #146c43 !important; +} + +.bodywebsite .link-info { + color: #0dcaf0 !important; +} + +.bodywebsite .link-info:hover, .bodywebsite .link-info:focus { + color: #3dd5f3 !important; +} + +.bodywebsite .link-warning { + color: #ffc107 !important; +} + +.bodywebsite .link-warning:hover, .bodywebsite .link-warning:focus { + color: #ffcd39 !important; +} + +.bodywebsite .link-danger { + color: #dc3545 !important; +} + +.bodywebsite .link-danger:hover, .bodywebsite .link-danger:focus { + color: #b02a37 !important; +} + +.bodywebsite .link-light { + color: #f8f9fa !important; +} + +.bodywebsite .link-light:hover, .bodywebsite .link-light:focus { + color: #f9fafb !important; +} + +.bodywebsite .link-dark { + color: #212529 !important; +} + +.bodywebsite .link-dark:hover, .bodywebsite .link-dark:focus { + color: #1a1e21 !important; +} + +.bodywebsite .ratio { + position: relative; + width: 100%; +} + +.bodywebsite .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} + +.bodywebsite .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.bodywebsite .ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.bodywebsite .ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.bodywebsite .ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.bodywebsite .ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.bodywebsite .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.bodywebsite .sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .bodywebsite .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 768px) { + .bodywebsite .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 992px) { + .bodywebsite .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1200px) { + .bodywebsite .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1400px) { + .bodywebsite .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +.bodywebsite .hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.bodywebsite .vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.bodywebsite .visually-hidden, + .bodywebsite .visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.bodywebsite .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.bodywebsite .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.bodywebsite .vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.bodywebsite .align-baseline { + vertical-align: baseline !important; +} + +.bodywebsite .align-top { + vertical-align: top !important; +} + +.bodywebsite .align-middle { + vertical-align: middle !important; +} + +.bodywebsite .align-bottom { + vertical-align: bottom !important; +} + +.bodywebsite .align-text-bottom { + vertical-align: text-bottom !important; +} + +.bodywebsite .align-text-top { + vertical-align: text-top !important; +} + +.bodywebsite .float-start { + float: left !important; +} + +.bodywebsite .float-end { + float: right !important; +} + +.bodywebsite .float-none { + float: none !important; +} + +.bodywebsite .opacity-0 { + opacity: 0 !important; +} + +.bodywebsite .opacity-25 { + opacity: 0.25 !important; +} + +.bodywebsite .opacity-50 { + opacity: 0.5 !important; +} + +.bodywebsite .opacity-75 { + opacity: 0.75 !important; +} + +.bodywebsite .opacity-100 { + opacity: 1 !important; +} + +.bodywebsite .overflow-auto { + overflow: auto !important; +} + +.bodywebsite .overflow-hidden { + overflow: hidden !important; +} + +.bodywebsite .overflow-visible { + overflow: visible !important; +} + +.bodywebsite .overflow-scroll { + overflow: scroll !important; +} + +.bodywebsite .d-inline { + display: inline !important; +} + +.bodywebsite .d-inline-block { + display: inline-block !important; +} + +.bodywebsite .d-block { + display: block !important; +} + +.bodywebsite .d-grid { + display: grid !important; +} + +.bodywebsite .d-table { + display: table !important; +} + +.bodywebsite .d-table-row { + display: table-row !important; +} + +.bodywebsite .d-table-cell { + display: table-cell !important; +} + +.bodywebsite .d-flex { + display: flex !important; +} + +.bodywebsite .d-inline-flex { + display: inline-flex !important; +} + +.bodywebsite .d-none { + display: none !important; +} + +.bodywebsite .shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.bodywebsite .shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.bodywebsite .shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.bodywebsite .shadow-none { + box-shadow: none !important; +} + +.bodywebsite .position-static { + position: static !important; +} + +.bodywebsite .position-relative { + position: relative !important; +} + +.bodywebsite .position-absolute { + position: absolute !important; +} + +.bodywebsite .position-fixed { + position: fixed !important; +} + +.bodywebsite .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.bodywebsite .top-0 { + top: 0 !important; +} + +.bodywebsite .top-50 { + top: 50% !important; +} + +.bodywebsite .top-100 { + top: 100% !important; +} + +.bodywebsite .bottom-0 { + bottom: 0 !important; +} + +.bodywebsite .bottom-50 { + bottom: 50% !important; +} + +.bodywebsite .bottom-100 { + bottom: 100% !important; +} + +.bodywebsite .start-0 { + left: 0 !important; +} + +.bodywebsite .start-50 { + left: 50% !important; +} + +.bodywebsite .start-100 { + left: 100% !important; +} + +.bodywebsite .end-0 { + right: 0 !important; +} + +.bodywebsite .end-50 { + right: 50% !important; +} + +.bodywebsite .end-100 { + right: 100% !important; +} + +.bodywebsite .translate-middle { + transform: translate(-50%, -50%) !important; +} + +.bodywebsite .translate-middle-x { + transform: translateX(-50%) !important; +} + +.bodywebsite .translate-middle-y { + transform: translateY(-50%) !important; +} + +.bodywebsite .border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-0 { + border: 0 !important; +} + +.bodywebsite .border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-top-0 { + border-top: 0 !important; +} + +.bodywebsite .border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-end-0 { + border-right: 0 !important; +} + +.bodywebsite .border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-bottom-0 { + border-bottom: 0 !important; +} + +.bodywebsite .border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-start-0 { + border-left: 0 !important; +} + +.bodywebsite .border-primary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-secondary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-success { + --bs-border-opacity: 1; +} + +.bodywebsite .border-info { + --bs-border-opacity: 1; +} + +.bodywebsite .border-warning { + --bs-border-opacity: 1; +} + +.bodywebsite .border-danger { + --bs-border-opacity: 1; +} + +.bodywebsite .border-light { + --bs-border-opacity: 1; +} + +.bodywebsite .border-dark { + --bs-border-opacity: 1; +} + +.bodywebsite .border-white { + --bs-border-opacity: 1; +} + +.bodywebsite .border-1 { + --bs-border-width: 1px; +} + +.bodywebsite .border-2 { + --bs-border-width: 2px; +} + +.bodywebsite .border-3 { + --bs-border-width: 3px; +} + +.bodywebsite .border-4 { + --bs-border-width: 4px; +} + +.bodywebsite .border-5 { + --bs-border-width: 5px; +} + +.bodywebsite .border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.bodywebsite .border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.bodywebsite .border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.bodywebsite .border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.bodywebsite .border-opacity-100 { + --bs-border-opacity: 1; +} + +.bodywebsite .w-25 { + width: 25% !important; +} + +.bodywebsite .w-50 { + width: 50% !important; +} + +.bodywebsite .w-75 { + width: 75% !important; +} + +.bodywebsite .w-100 { + width: 100% !important; +} + +.bodywebsite .w-auto { + width: auto !important; +} + +.bodywebsite .mw-100 { + max-width: 100% !important; +} + +.bodywebsite .vw-100 { + width: 100vw !important; +} + +.bodywebsite .min-vw-100 { + min-width: 100vw !important; +} + +.bodywebsite .h-25 { + height: 25% !important; +} + +.bodywebsite .h-50 { + height: 50% !important; +} + +.bodywebsite .h-75 { + height: 75% !important; +} + +.bodywebsite .h-100 { + height: 100% !important; +} + +.bodywebsite .h-auto { + height: auto !important; +} + +.bodywebsite .mh-100 { + max-height: 100% !important; +} + +.bodywebsite .vh-100 { + height: 100vh !important; +} + +.bodywebsite .min-vh-100 { + min-height: 100vh !important; +} + +.bodywebsite .flex-fill { + flex: 1 1 auto !important; +} + +.bodywebsite .flex-row { + flex-direction: row !important; +} + +.bodywebsite .flex-column { + flex-direction: column !important; +} + +.bodywebsite .flex-row-reverse { + flex-direction: row-reverse !important; +} + +.bodywebsite .flex-column-reverse { + flex-direction: column-reverse !important; +} + +.bodywebsite .flex-grow-0 { + flex-grow: 0 !important; +} + +.bodywebsite .flex-grow-1 { + flex-grow: 1 !important; +} + +.bodywebsite .flex-shrink-0 { + flex-shrink: 0 !important; +} + +.bodywebsite .flex-shrink-1 { + flex-shrink: 1 !important; +} + +.bodywebsite .flex-wrap { + flex-wrap: wrap !important; +} + +.bodywebsite .flex-nowrap { + flex-wrap: nowrap !important; +} + +.bodywebsite .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.bodywebsite .justify-content-start { + justify-content: flex-start !important; +} + +.bodywebsite .justify-content-end { + justify-content: flex-end !important; +} + +.bodywebsite .justify-content-center { + justify-content: center !important; +} + +.bodywebsite .justify-content-between { + justify-content: space-between !important; +} + +.bodywebsite .justify-content-around { + justify-content: space-around !important; +} + +.bodywebsite .justify-content-evenly { + justify-content: space-evenly !important; +} + +.bodywebsite .align-items-start { + align-items: flex-start !important; +} + +.bodywebsite .align-items-end { + align-items: flex-end !important; +} + +.bodywebsite .align-items-center { + align-items: center !important; +} + +.bodywebsite .align-items-baseline { + align-items: baseline !important; +} + +.bodywebsite .align-items-stretch { + align-items: stretch !important; +} + +.bodywebsite .align-content-start { + align-content: flex-start !important; +} + +.bodywebsite .align-content-end { + align-content: flex-end !important; +} + +.bodywebsite .align-content-center { + align-content: center !important; +} + +.bodywebsite .align-content-between { + align-content: space-between !important; +} + +.bodywebsite .align-content-around { + align-content: space-around !important; +} + +.bodywebsite .align-content-stretch { + align-content: stretch !important; +} + +.bodywebsite .align-self-auto { + align-self: auto !important; +} + +.bodywebsite .align-self-start { + align-self: flex-start !important; +} + +.bodywebsite .align-self-end { + align-self: flex-end !important; +} + +.bodywebsite .align-self-center { + align-self: center !important; +} + +.bodywebsite .align-self-baseline { + align-self: baseline !important; +} + +.bodywebsite .align-self-stretch { + align-self: stretch !important; +} + +.bodywebsite .order-first { + order: -1 !important; +} + +.bodywebsite .order-0 { + order: 0 !important; +} + +.bodywebsite .order-1 { + order: 1 !important; +} + +.bodywebsite .order-2 { + order: 2 !important; +} + +.bodywebsite .order-3 { + order: 3 !important; +} + +.bodywebsite .order-4 { + order: 4 !important; +} + +.bodywebsite .order-5 { + order: 5 !important; +} + +.bodywebsite .order-last { + order: 6 !important; +} + +.bodywebsite .m-0 { + margin: 0 !important; +} + +.bodywebsite .m-1 { + margin: 0.25rem !important; +} + +.bodywebsite .m-2 { + margin: 0.5rem !important; +} + +.bodywebsite .m-3 { + margin: 1rem !important; +} + +.bodywebsite .m-4 { + margin: 1.5rem !important; +} + +.bodywebsite .m-5 { + margin: 3rem !important; +} + +.bodywebsite .m-auto { + margin: auto !important; +} + +.bodywebsite .mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.bodywebsite .mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.bodywebsite .mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.bodywebsite .mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.bodywebsite .mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.bodywebsite .mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.bodywebsite .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.bodywebsite .my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.bodywebsite .my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.bodywebsite .my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.bodywebsite .my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.bodywebsite .my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.bodywebsite .my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.bodywebsite .my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.bodywebsite .mt-0 { + margin-top: 0 !important; +} + +.bodywebsite .mt-1 { + margin-top: 0.25rem !important; +} + +.bodywebsite .mt-2 { + margin-top: 0.5rem !important; +} + +.bodywebsite .mt-3 { + margin-top: 1rem !important; +} + +.bodywebsite .mt-4 { + margin-top: 1.5rem !important; +} + +.bodywebsite .mt-5 { + margin-top: 3rem !important; +} + +.bodywebsite .mt-auto { + margin-top: auto !important; +} + +.bodywebsite .me-0 { + margin-right: 0 !important; +} + +.bodywebsite .me-1 { + margin-right: 0.25rem !important; +} + +.bodywebsite .me-2 { + margin-right: 0.5rem !important; +} + +.bodywebsite .me-3 { + margin-right: 1rem !important; +} + +.bodywebsite .me-4 { + margin-right: 1.5rem !important; +} + +.bodywebsite .me-5 { + margin-right: 3rem !important; +} + +.bodywebsite .me-auto { + margin-right: auto !important; +} + +.bodywebsite .mb-0 { + margin-bottom: 0 !important; +} + +.bodywebsite .mb-1 { + margin-bottom: 0.25rem !important; +} + +.bodywebsite .mb-2 { + margin-bottom: 0.5rem !important; +} + +.bodywebsite .mb-3 { + margin-bottom: 1rem !important; +} + +.bodywebsite .mb-4 { + margin-bottom: 1.5rem !important; +} + +.bodywebsite .mb-5 { + margin-bottom: 3rem !important; +} + +.bodywebsite .mb-auto { + margin-bottom: auto !important; +} + +.bodywebsite .ms-0 { + margin-left: 0 !important; +} + +.bodywebsite .ms-1 { + margin-left: 0.25rem !important; +} + +.bodywebsite .ms-2 { + margin-left: 0.5rem !important; +} + +.bodywebsite .ms-3 { + margin-left: 1rem !important; +} + +.bodywebsite .ms-4 { + margin-left: 1.5rem !important; +} + +.bodywebsite .ms-5 { + margin-left: 3rem !important; +} + +.bodywebsite .ms-auto { + margin-left: auto !important; +} + +.bodywebsite .p-0 { + padding: 0 !important; +} + +.bodywebsite .p-1 { + padding: 0.25rem !important; +} + +.bodywebsite .p-2 { + padding: 0.5rem !important; +} + +.bodywebsite .p-3 { + padding: 1rem !important; +} + +.bodywebsite .p-4 { + padding: 1.5rem !important; +} + +.bodywebsite .p-5 { + padding: 3rem !important; +} + +.bodywebsite .px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.bodywebsite .px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.bodywebsite .px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.bodywebsite .px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.bodywebsite .px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.bodywebsite .px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.bodywebsite .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.bodywebsite .py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.bodywebsite .py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.bodywebsite .py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.bodywebsite .py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.bodywebsite .py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.bodywebsite .pt-0 { + padding-top: 0 !important; +} + +.bodywebsite .pt-1 { + padding-top: 0.25rem !important; +} + +.bodywebsite .pt-2 { + padding-top: 0.5rem !important; +} + +.bodywebsite .pt-3 { + padding-top: 1rem !important; +} + +.bodywebsite .pt-4 { + padding-top: 1.5rem !important; +} + +.bodywebsite .pt-5 { + padding-top: 3rem !important; +} + +.bodywebsite .pe-0 { + padding-right: 0 !important; +} + +.bodywebsite .pe-1 { + padding-right: 0.25rem !important; +} + +.bodywebsite .pe-2 { + padding-right: 0.5rem !important; +} + +.bodywebsite .pe-3 { + padding-right: 1rem !important; +} + +.bodywebsite .pe-4 { + padding-right: 1.5rem !important; +} + +.bodywebsite .pe-5 { + padding-right: 3rem !important; +} + +.bodywebsite .pb-0 { + padding-bottom: 0 !important; +} + +.bodywebsite .pb-1 { + padding-bottom: 0.25rem !important; +} + +.bodywebsite .pb-2 { + padding-bottom: 0.5rem !important; +} + +.bodywebsite .pb-3 { + padding-bottom: 1rem !important; +} + +.bodywebsite .pb-4 { + padding-bottom: 1.5rem !important; +} + +.bodywebsite .pb-5 { + padding-bottom: 3rem !important; +} + +.bodywebsite .ps-0 { + padding-left: 0 !important; +} + +.bodywebsite .ps-1 { + padding-left: 0.25rem !important; +} + +.bodywebsite .ps-2 { + padding-left: 0.5rem !important; +} + +.bodywebsite .ps-3 { + padding-left: 1rem !important; +} + +.bodywebsite .ps-4 { + padding-left: 1.5rem !important; +} + +.bodywebsite .ps-5 { + padding-left: 3rem !important; +} + +.bodywebsite .gap-0 { + gap: 0 !important; +} + +.bodywebsite .gap-1 { + gap: 0.25rem !important; +} + +.bodywebsite .gap-2 { + gap: 0.5rem !important; +} + +.bodywebsite .gap-3 { + gap: 1rem !important; +} + +.bodywebsite .gap-4 { + gap: 1.5rem !important; +} + +.bodywebsite .gap-5 { + gap: 3rem !important; +} + +.bodywebsite .font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.bodywebsite .fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.bodywebsite .fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.bodywebsite .fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.bodywebsite .fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.bodywebsite .fs-5 { + font-size: 1.25rem !important; +} + +.bodywebsite .fs-6 { + font-size: 1rem !important; +} + +.bodywebsite .fst-italic { + font-style: italic !important; +} + +.bodywebsite .fst-normal { + font-style: normal !important; +} + +.bodywebsite .fw-light { + font-weight: 300 !important; +} + +.bodywebsite .fw-lighter { + font-weight: lighter !important; +} + +.bodywebsite .fw-normal { + font-weight: 400 !important; +} + +.bodywebsite .fw-bold { + font-weight: 700 !important; +} + +.bodywebsite .fw-semibold { + font-weight: 600 !important; +} + +.bodywebsite .fw-bolder { + font-weight: bolder !important; +} + +.bodywebsite .lh-1 { + line-height: 1 !important; +} + +.bodywebsite .lh-sm { + line-height: 1.25 !important; +} + +.bodywebsite .lh-base { + line-height: 1.5 !important; +} + +.bodywebsite .lh-lg { + line-height: 2 !important; +} + +.bodywebsite .text-start { + text-align: left !important; +} + +.bodywebsite .text-end { + text-align: right !important; +} + +.bodywebsite .text-center { + text-align: center !important; +} + +.bodywebsite .text-decoration-none { + text-decoration: none !important; +} + +.bodywebsite .text-decoration-underline { + text-decoration: underline !important; +} + +.bodywebsite .text-decoration-line-through { + text-decoration: line-through !important; +} + +.bodywebsite .text-lowercase { + text-transform: lowercase !important; +} + +.bodywebsite .text-uppercase { + text-transform: uppercase !important; +} + +.bodywebsite .text-capitalize { + text-transform: capitalize !important; +} + +.bodywebsite .text-wrap { + white-space: normal !important; +} + +.bodywebsite .text-nowrap { + white-space: nowrap !important; +} + +.bodywebsite .text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +.bodywebsite .text-primary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-secondary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-success { + --bs-text-opacity: 1; +} + +.bodywebsite .text-info { + --bs-text-opacity: 1; +} + +.bodywebsite .text-warning { + --bs-text-opacity: 1; +} + +.bodywebsite .text-danger { + --bs-text-opacity: 1; +} + +.bodywebsite .text-light { + --bs-text-opacity: 1; +} + +.bodywebsite .text-dark { + --bs-text-opacity: 1; +} + +.bodywebsite .text-black { + --bs-text-opacity: 1; +} + +.bodywebsite .text-white { + --bs-text-opacity: 1; +} + +.bodywebsite .text-body { + --bs-text-opacity: 1; +} + +.bodywebsite .text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.bodywebsite .text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.bodywebsite .text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.bodywebsite .text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.bodywebsite .text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.bodywebsite .text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.bodywebsite .text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.bodywebsite .text-opacity-100 { + --bs-text-opacity: 1; +} + +.bodywebsite .bg-primary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-secondary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-success { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-info { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-warning { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-danger { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-light { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-dark { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-black { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-white { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-body { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-transparent { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bodywebsite .bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bodywebsite .bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bodywebsite .bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bodywebsite .bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.bodywebsite .user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.bodywebsite .user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.bodywebsite .user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.bodywebsite .pe-none { + pointer-events: none !important; +} + +.bodywebsite .pe-auto { + pointer-events: auto !important; +} + +.bodywebsite .rounded { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-0 { + border-radius: 0 !important; +} + +.bodywebsite .rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.bodywebsite .rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.bodywebsite .rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.bodywebsite .rounded-5 { + border-radius: var(--bs-border-radius-2xl) !important; +} + +.bodywebsite .rounded-circle { + border-radius: 50% !important; +} + +.bodywebsite .rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.bodywebsite .rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .visible { + visibility: visible !important; +} + +.bodywebsite .invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .bodywebsite .float-sm-start { + float: left !important; + } + + .bodywebsite .float-sm-end { + float: right !important; + } + + .bodywebsite .float-sm-none { + float: none !important; + } + + .bodywebsite .d-sm-inline { + display: inline !important; + } + + .bodywebsite .d-sm-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-sm-block { + display: block !important; + } + + .bodywebsite .d-sm-grid { + display: grid !important; + } + + .bodywebsite .d-sm-table { + display: table !important; + } + + .bodywebsite .d-sm-table-row { + display: table-row !important; + } + + .bodywebsite .d-sm-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-sm-flex { + display: flex !important; + } + + .bodywebsite .d-sm-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-sm-none { + display: none !important; + } + + .bodywebsite .flex-sm-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-sm-row { + flex-direction: row !important; + } + + .bodywebsite .flex-sm-column { + flex-direction: column !important; + } + + .bodywebsite .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-sm-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-sm-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-sm-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-sm-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-sm-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-sm-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-sm-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-sm-center { + align-items: center !important; + } + + .bodywebsite .align-items-sm-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-sm-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-sm-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-sm-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-sm-center { + align-content: center !important; + } + + .bodywebsite .align-content-sm-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-sm-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-sm-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-sm-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-sm-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-sm-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-sm-center { + align-self: center !important; + } + + .bodywebsite .align-self-sm-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-sm-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-sm-first { + order: -1 !important; + } + + .bodywebsite .order-sm-0 { + order: 0 !important; + } + + .bodywebsite .order-sm-1 { + order: 1 !important; + } + + .bodywebsite .order-sm-2 { + order: 2 !important; + } + + .bodywebsite .order-sm-3 { + order: 3 !important; + } + + .bodywebsite .order-sm-4 { + order: 4 !important; + } + + .bodywebsite .order-sm-5 { + order: 5 !important; + } + + .bodywebsite .order-sm-last { + order: 6 !important; + } + + .bodywebsite .m-sm-0 { + margin: 0 !important; + } + + .bodywebsite .m-sm-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-sm-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-sm-3 { + margin: 1rem !important; + } + + .bodywebsite .m-sm-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-sm-5 { + margin: 3rem !important; + } + + .bodywebsite .m-sm-auto { + margin: auto !important; + } + + .bodywebsite .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-sm-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-sm-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-sm-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-sm-auto { + margin-top: auto !important; + } + + .bodywebsite .me-sm-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-sm-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-sm-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-sm-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-sm-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-sm-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-sm-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-sm-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-sm-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-sm-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-sm-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-sm-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-sm-auto { + margin-left: auto !important; + } + + .bodywebsite .p-sm-0 { + padding: 0 !important; + } + + .bodywebsite .p-sm-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-sm-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-sm-3 { + padding: 1rem !important; + } + + .bodywebsite .p-sm-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-sm-5 { + padding: 3rem !important; + } + + .bodywebsite .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-sm-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-sm-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-sm-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-sm-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-sm-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-sm-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-sm-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-sm-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-sm-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-sm-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-sm-0 { + gap: 0 !important; + } + + .bodywebsite .gap-sm-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-sm-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-sm-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-sm-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-sm-5 { + gap: 3rem !important; + } + + .bodywebsite .text-sm-start { + text-align: left !important; + } + + .bodywebsite .text-sm-end { + text-align: right !important; + } + + .bodywebsite .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .bodywebsite .float-md-start { + float: left !important; + } + + .bodywebsite .float-md-end { + float: right !important; + } + + .bodywebsite .float-md-none { + float: none !important; + } + + .bodywebsite .d-md-inline { + display: inline !important; + } + + .bodywebsite .d-md-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-md-block { + display: block !important; + } + + .bodywebsite .d-md-grid { + display: grid !important; + } + + .bodywebsite .d-md-table { + display: table !important; + } + + .bodywebsite .d-md-table-row { + display: table-row !important; + } + + .bodywebsite .d-md-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-md-flex { + display: flex !important; + } + + .bodywebsite .d-md-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-md-none { + display: none !important; + } + + .bodywebsite .flex-md-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-md-row { + flex-direction: row !important; + } + + .bodywebsite .flex-md-column { + flex-direction: column !important; + } + + .bodywebsite .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-md-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-md-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-md-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-md-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-md-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-md-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-md-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-md-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-md-center { + align-items: center !important; + } + + .bodywebsite .align-items-md-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-md-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-md-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-md-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-md-center { + align-content: center !important; + } + + .bodywebsite .align-content-md-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-md-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-md-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-md-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-md-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-md-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-md-center { + align-self: center !important; + } + + .bodywebsite .align-self-md-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-md-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-md-first { + order: -1 !important; + } + + .bodywebsite .order-md-0 { + order: 0 !important; + } + + .bodywebsite .order-md-1 { + order: 1 !important; + } + + .bodywebsite .order-md-2 { + order: 2 !important; + } + + .bodywebsite .order-md-3 { + order: 3 !important; + } + + .bodywebsite .order-md-4 { + order: 4 !important; + } + + .bodywebsite .order-md-5 { + order: 5 !important; + } + + .bodywebsite .order-md-last { + order: 6 !important; + } + + .bodywebsite .m-md-0 { + margin: 0 !important; + } + + .bodywebsite .m-md-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-md-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-md-3 { + margin: 1rem !important; + } + + .bodywebsite .m-md-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-md-5 { + margin: 3rem !important; + } + + .bodywebsite .m-md-auto { + margin: auto !important; + } + + .bodywebsite .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-md-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-md-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-md-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-md-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-md-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-md-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-md-auto { + margin-top: auto !important; + } + + .bodywebsite .me-md-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-md-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-md-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-md-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-md-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-md-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-md-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-md-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-md-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-md-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-md-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-md-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-md-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-md-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-md-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-md-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-md-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-md-auto { + margin-left: auto !important; + } + + .bodywebsite .p-md-0 { + padding: 0 !important; + } + + .bodywebsite .p-md-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-md-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-md-3 { + padding: 1rem !important; + } + + .bodywebsite .p-md-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-md-5 { + padding: 3rem !important; + } + + .bodywebsite .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-md-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-md-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-md-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-md-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-md-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-md-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-md-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-md-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-md-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-md-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-md-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-md-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-md-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-md-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-md-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-md-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-md-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-md-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-md-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-md-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-md-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-md-0 { + gap: 0 !important; + } + + .bodywebsite .gap-md-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-md-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-md-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-md-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-md-5 { + gap: 3rem !important; + } + + .bodywebsite .text-md-start { + text-align: left !important; + } + + .bodywebsite .text-md-end { + text-align: right !important; + } + + .bodywebsite .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .bodywebsite .float-lg-start { + float: left !important; + } + + .bodywebsite .float-lg-end { + float: right !important; + } + + .bodywebsite .float-lg-none { + float: none !important; + } + + .bodywebsite .d-lg-inline { + display: inline !important; + } + + .bodywebsite .d-lg-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-lg-block { + display: block !important; + } + + .bodywebsite .d-lg-grid { + display: grid !important; + } + + .bodywebsite .d-lg-table { + display: table !important; + } + + .bodywebsite .d-lg-table-row { + display: table-row !important; + } + + .bodywebsite .d-lg-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-lg-flex { + display: flex !important; + } + + .bodywebsite .d-lg-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-lg-none { + display: none !important; + } + + .bodywebsite .flex-lg-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-lg-row { + flex-direction: row !important; + } + + .bodywebsite .flex-lg-column { + flex-direction: column !important; + } + + .bodywebsite .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-lg-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-lg-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-lg-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-lg-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-lg-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-lg-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-lg-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-lg-center { + align-items: center !important; + } + + .bodywebsite .align-items-lg-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-lg-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-lg-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-lg-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-lg-center { + align-content: center !important; + } + + .bodywebsite .align-content-lg-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-lg-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-lg-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-lg-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-lg-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-lg-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-lg-center { + align-self: center !important; + } + + .bodywebsite .align-self-lg-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-lg-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-lg-first { + order: -1 !important; + } + + .bodywebsite .order-lg-0 { + order: 0 !important; + } + + .bodywebsite .order-lg-1 { + order: 1 !important; + } + + .bodywebsite .order-lg-2 { + order: 2 !important; + } + + .bodywebsite .order-lg-3 { + order: 3 !important; + } + + .bodywebsite .order-lg-4 { + order: 4 !important; + } + + .bodywebsite .order-lg-5 { + order: 5 !important; + } + + .bodywebsite .order-lg-last { + order: 6 !important; + } + + .bodywebsite .m-lg-0 { + margin: 0 !important; + } + + .bodywebsite .m-lg-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-lg-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-lg-3 { + margin: 1rem !important; + } + + .bodywebsite .m-lg-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-lg-5 { + margin: 3rem !important; + } + + .bodywebsite .m-lg-auto { + margin: auto !important; + } + + .bodywebsite .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-lg-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-lg-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-lg-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-lg-auto { + margin-top: auto !important; + } + + .bodywebsite .me-lg-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-lg-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-lg-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-lg-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-lg-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-lg-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-lg-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-lg-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-lg-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-lg-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-lg-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-lg-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-lg-auto { + margin-left: auto !important; + } + + .bodywebsite .p-lg-0 { + padding: 0 !important; + } + + .bodywebsite .p-lg-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-lg-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-lg-3 { + padding: 1rem !important; + } + + .bodywebsite .p-lg-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-lg-5 { + padding: 3rem !important; + } + + .bodywebsite .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-lg-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-lg-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-lg-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-lg-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-lg-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-lg-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-lg-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-lg-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-lg-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-lg-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-lg-0 { + gap: 0 !important; + } + + .bodywebsite .gap-lg-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-lg-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-lg-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-lg-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-lg-5 { + gap: 3rem !important; + } + + .bodywebsite .text-lg-start { + text-align: left !important; + } + + .bodywebsite .text-lg-end { + text-align: right !important; + } + + .bodywebsite .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .float-xl-start { + float: left !important; + } + + .bodywebsite .float-xl-end { + float: right !important; + } + + .bodywebsite .float-xl-none { + float: none !important; + } + + .bodywebsite .d-xl-inline { + display: inline !important; + } + + .bodywebsite .d-xl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xl-block { + display: block !important; + } + + .bodywebsite .d-xl-grid { + display: grid !important; + } + + .bodywebsite .d-xl-table { + display: table !important; + } + + .bodywebsite .d-xl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xl-flex { + display: flex !important; + } + + .bodywebsite .d-xl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xl-none { + display: none !important; + } + + .bodywebsite .flex-xl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xl-first { + order: -1 !important; + } + + .bodywebsite .order-xl-0 { + order: 0 !important; + } + + .bodywebsite .order-xl-1 { + order: 1 !important; + } + + .bodywebsite .order-xl-2 { + order: 2 !important; + } + + .bodywebsite .order-xl-3 { + order: 3 !important; + } + + .bodywebsite .order-xl-4 { + order: 4 !important; + } + + .bodywebsite .order-xl-5 { + order: 5 !important; + } + + .bodywebsite .order-xl-last { + order: 6 !important; + } + + .bodywebsite .m-xl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xl-start { + text-align: left !important; + } + + .bodywebsite .text-xl-end { + text-align: right !important; + } + + .bodywebsite .text-xl-center { + text-align: center !important; + } +} + +@media (min-width: 1400px) { + .bodywebsite .float-xxl-start { + float: left !important; + } + + .bodywebsite .float-xxl-end { + float: right !important; + } + + .bodywebsite .float-xxl-none { + float: none !important; + } + + .bodywebsite .d-xxl-inline { + display: inline !important; + } + + .bodywebsite .d-xxl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xxl-block { + display: block !important; + } + + .bodywebsite .d-xxl-grid { + display: grid !important; + } + + .bodywebsite .d-xxl-table { + display: table !important; + } + + .bodywebsite .d-xxl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xxl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xxl-flex { + display: flex !important; + } + + .bodywebsite .d-xxl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xxl-none { + display: none !important; + } + + .bodywebsite .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xxl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xxl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xxl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xxl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xxl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xxl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xxl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xxl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xxl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xxl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xxl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xxl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xxl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xxl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xxl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xxl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xxl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xxl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xxl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xxl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xxl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xxl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xxl-first { + order: -1 !important; + } + + .bodywebsite .order-xxl-0 { + order: 0 !important; + } + + .bodywebsite .order-xxl-1 { + order: 1 !important; + } + + .bodywebsite .order-xxl-2 { + order: 2 !important; + } + + .bodywebsite .order-xxl-3 { + order: 3 !important; + } + + .bodywebsite .order-xxl-4 { + order: 4 !important; + } + + .bodywebsite .order-xxl-5 { + order: 5 !important; + } + + .bodywebsite .order-xxl-last { + order: 6 !important; + } + + .bodywebsite .m-xxl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xxl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xxl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xxl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xxl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xxl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xxl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xxl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xxl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xxl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xxl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xxl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xxl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xxl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xxl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xxl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xxl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xxl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xxl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xxl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xxl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xxl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xxl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xxl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xxl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xxl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xxl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xxl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xxl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xxl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xxl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xxl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xxl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xxl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xxl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xxl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xxl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xxl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xxl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xxl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xxl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xxl-start { + text-align: left !important; + } + + .bodywebsite .text-xxl-end { + text-align: right !important; + } + + .bodywebsite .text-xxl-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .fs-1 { + font-size: 2.5rem !important; + } + + .bodywebsite .fs-2 { + font-size: 2rem !important; + } + + .bodywebsite .fs-3 { + font-size: 1.75rem !important; + } + + .bodywebsite .fs-4 { + font-size: 1.5rem !important; + } +} + +@media print { + .bodywebsite .d-print-inline { + display: inline !important; + } + + .bodywebsite .d-print-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-print-block { + display: block !important; + } + + .bodywebsite .d-print-grid { + display: grid !important; + } + + .bodywebsite .d-print-table { + display: table !important; + } + + .bodywebsite .d-print-table-row { + display: table-row !important; + } + + .bodywebsite .d-print-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-print-flex { + display: flex !important; + } + + .bodywebsite .d-print-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-print-none { + display: none !important; + } +} + +/* CSS content (all pages) */ +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + font-family: 'Hurricane', cursive; +} + +.bodywebsite #title { + font-size: 100px; +} +.bodywebsite #mysection1{ + font-family: 'Inconsolata', monospace; + color: white; + height: 80%; +} + +.bodywebsite .full-height { + height: 100vh; +} +.bodywebsite .color { + color: #aefeff; +} + +.bodywebsite .btn-color { + font-weight: bold; + color: #35858b; + border-color: #35858b; +} + +.bodywebsite .btn-color:hover { + background-color: #35858b; + color: #fff; +} + +.bodywebsite .btn-color-filled { + background-color: #35858b; + color: #072227; +} +.bodywebsite #products { + background-color: whitesmoke; +} + +.bodywebsite #home, .bodywebsite #contact{ + background-color: #072227; +} + +.bodywebsite footer { + position: fixed; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} + +/*# sourceMappingURL=bootstrap.css.map */ + diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php new file mode 100644 index 00000000000..26adb3ef220 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php @@ -0,0 +1,278 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) { + $original_file = 'blog.rss'; +} + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) { + $attachment = false; +} +if (isset($_GET["attachment"])) { + $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +} +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) { + $attachment = false; +} + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) { + $type = GETPOST('type', 'alpha'); +} else { + $type = dol_mimetype($original_file); +} + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost', 'status'=>1); + if ($l) { + $filters['lang'] = $l; + } + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang($l); + $outputlangs->loadLangs(array("main", "other")); + $title = $desc = $outputlangs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) { + $result = 1; + } else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) { + $attachment = $_GET["attachment"]; + } + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) { + $contenttype = $_GET["contenttype"]; + } + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) { + header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + } + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) { + header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + } else { + header('Cache-Control: private, must-revalidate'); + } + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) { + print 'File '.$outputfile.' was empty.'; + } + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + // Get logos + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed']; + $sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) { + header('Content-Encoding: '.$encoding); + } + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } else { + header('Content-Disposition: inline; filename="'.$filename.'"'); + } + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) { + $db->close(); +} +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/website_pages.sql b/htdocs/install/doctemplates/websites/website_template-noimg/website_pages.sql new file mode 100644 index 00000000000..70d81b97f75 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-noimg/website_pages.sql @@ -0,0 +1,9 @@ +-- File generated by Dolibarr 17.0.0-alpha -- 2022-09-26 12:49:03 UTC --; +-- Page ID 80 -> 1__+MAX_llx_website_page__ - Aliases index --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(1__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'index', '', 'index', '', '', '', '', '1', '2022-07-04 15:13:49', '2022-09-26 14:48:51', null, '', 'page', '__N__ __N__ __N__ __N____N__ __N__ __N__ __N__ __N____N____N__ Template__N__ ', '__N__email;__N__ $message = GETPOST(\'message\', \'alpha\');__N__ $cmail = new CMailFile(\'Contact from website\', $to, $from, $message);__N__ if ($cmail->sendfile()) {__N__ ?>__N__ __N__ trans(\"ErrorFailedToSendMail\", $from, $to).\'. \'.$cmail->error;__N__ }__N__}__N__?>__N__
    __N__
    __N____N__
    __N__ __N__ __N__
    __N____N__
    __N__
    __N__
    __N__

    __N__ Brand__N__ Name__N__

    __N__

    __N__ Hello fellows, here is a description of the__N__ brand__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__

    Products

    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 1

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 2

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 3

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 4

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 5

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    Product 6

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__
    __N__

    Contact us

    __N__

    __N__ Email: email ?>__N__

    __N__

    __N__ Phone-number: phone ?>__N__

    __N__
    __N__
    __N__

    __N__ Or complete the form__N__

    __N__
    __N__
    __N__ \" />__N__ __N__
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__', '', 0); +UPDATE llx_website SET fk_default_home = 1__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-style02.jpg b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple.jpg similarity index 100% rename from htdocs/install/doctemplates/websites/website_template-style02.jpg rename to htdocs/install/doctemplates/websites/website_template-onepageblackpurple.jpg diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/LICENSE b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/LICENSE new file mode 100644 index 00000000000..871ef743662 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/LICENSE @@ -0,0 +1,4 @@ +LICENSE +------- + +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/README.md b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/README.md b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/htmlheader.html new file mode 100644 index 00000000000..a58ea695524 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/htmlheader.html @@ -0,0 +1,6 @@ + + + diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/index.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/index.php new file mode 100644 index 00000000000..b4e33361f1b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/index.php @@ -0,0 +1,4 @@ +ref.'/page148.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/javascript.js.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/javascript.js.php new file mode 100644 index 00000000000..f58102cf00b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/javascript.js.php @@ -0,0 +1,13 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/manifest.json.php new file mode 100644 index 00000000000..b61531d6c11 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/manifest.json.php @@ -0,0 +1,13 @@ + + + + + +index + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + + + + + Template + + + + + +
    +
    +
    +
    +
    +
    +

    Our company

    +

    + Lorem ipsum dolor, sit amet consectetur adipisicing elit. Nostrum excepturi ipsa consequatur accusamus eveniet dignissimos necessitatibus provident dolore cupiditate. +

    +
    +

    + It uses utility classes for typography and spacing to space content out within the + larger container. +

    +

    + + + + + + +

    +
    +
    +
    + landingpage +
    +
    +
    +
    + +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    + ... +
    +

    LoremIpsum

    +

    + Some quick example text to build on the + card title and make up the bulk of the + card's content. +

    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    UNLIMITED FOR ALL

    +

    Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus molestias voluptatibus voluptatem Lorem ipsum dolor, sit amet consectetur adipisicing elit. Veritatis officia voluptatem incidunt tempore esse porro sequi eveniet eum corrupti quo.

    +
    +
    +

    $79/month

    +
    +
    +

    WHAT YOU WILL GET

    +

    Lorem ipsum dolor sit, amet consectetur


    +

    Lorem ipsum dolor sit, amet consectetur


    +

    Lorem ipsum dolor sit, amet consectetur


    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Contact us

    +
    +
    + email ?>
    + getFullAddress() ?>
    +
    +
    + + +
    +
    + +
    + +


    + +
    +
    +
    +
    +
    +
    + +
    + +
    + socialnetworks as $key => $value) { + print ''; + } ?> + +
    + +
    + + + +
    + © 2022 Dolibarr: + Dolicloud.com +
    + +
    +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/styles.css.php new file mode 100644 index 00000000000..acc30d70bfe --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/styles.css.php @@ -0,0 +1,12536 @@ + +/* CSS content (all pages) +body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } +.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} +*/ + +@charset "UTF-8"; + +.bodywebsite { + /*! + * Bootstrap v5.2.1 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ + /* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ + /* rtl:begin:remove */ + /* rtl:end:remove */ + /*# sourceMappingURL=bootstrap.css.map */; +} + +.bodywebsite :root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.bodywebsite *, + .bodywebsite *::before, + .bodywebsite *::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + .bodywebsite :root { + scroll-behavior: smooth; + } +} + +.bodywebsite .text-dark{ + color: black; +} + +.bodywebsite body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +.bodywebsite hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +.bodywebsite h6, .bodywebsite .h6, .bodywebsite h5, .bodywebsite .h5, .bodywebsite h4, .bodywebsite .h4, .bodywebsite h3, .bodywebsite .h3, .bodywebsite h2, .bodywebsite .h2, .bodywebsite h1, .bodywebsite .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +.bodywebsite h1, .bodywebsite .h1 { + font-size: calc(1.375rem + 1.5vw); +} + +@media (min-width: 1200px) { + .bodywebsite h1, .bodywebsite .h1 { + font-size: 2.5rem; + } +} + +.bodywebsite h2, .bodywebsite .h2 { + font-size: calc(1.325rem + 0.9vw); +} + +@media (min-width: 1200px) { + .bodywebsite h2, .bodywebsite .h2 { + font-size: 2rem; + } +} + +.bodywebsite h3, .bodywebsite .h3 { + font-size: calc(1.3rem + 0.6vw); +} + +@media (min-width: 1200px) { + .bodywebsite h3, .bodywebsite .h3 { + font-size: 1.75rem; + } +} + +.bodywebsite h4, .bodywebsite .h4 { + font-size: calc(1.275rem + 0.3vw); +} + +@media (min-width: 1200px) { + .bodywebsite h4, .bodywebsite .h4 { + font-size: 1.5rem; + } +} + +.bodywebsite h5, .bodywebsite .h5 { + font-size: 1.25rem; +} + +.bodywebsite h6, .bodywebsite .h6 { + font-size: 1rem; +} + +.bodywebsite p { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +.bodywebsite address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +.bodywebsite ol, + .bodywebsite ul { + padding-left: 2rem; +} + +.bodywebsite ol, + .bodywebsite ul, + .bodywebsite dl { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite ol ol, + .bodywebsite ul ul, + .bodywebsite ol ul, + .bodywebsite ul ol { + margin-bottom: 0; +} + +.bodywebsite dt { + font-weight: 700; +} + +.bodywebsite dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +.bodywebsite blockquote { + margin: 0 0 1rem; +} + +.bodywebsite b, + .bodywebsite strong { + font-weight: bolder; +} + +.bodywebsite small, .bodywebsite .small { + font-size: 0.875em; +} + +.bodywebsite mark, .bodywebsite .mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +.bodywebsite sub, + .bodywebsite sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +.bodywebsite sub { + bottom: -0.25em; +} + +.bodywebsite sup { + top: -0.5em; +} + +.bodywebsite a { + color: var(--bs-link-color); + text-decoration: underline; +} + +.bodywebsite a:hover { + color: var(--bs-link-hover-color); +} + +.bodywebsite a:not([href]):not([class]), .bodywebsite a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +.bodywebsite pre, + .bodywebsite code, + .bodywebsite kbd, + .bodywebsite samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +.bodywebsite pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} + +.bodywebsite pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.bodywebsite code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} + +.bodywebsite a > code { + color: inherit; +} + +.bodywebsite kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} + +.bodywebsite kbd kbd { + padding: 0; + font-size: 1em; +} + +.bodywebsite figure { + margin: 0 0 1rem; +} + +.bodywebsite img, + .bodywebsite svg { + vertical-align: middle; +} + +.bodywebsite table { + caption-side: bottom; + border-collapse: collapse; +} + +.bodywebsite caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +.bodywebsite th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +.bodywebsite thead, + .bodywebsite tbody, + .bodywebsite tfoot, + .bodywebsite tr, + .bodywebsite td, + .bodywebsite th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +.bodywebsite label { + display: inline-block; +} + +.bodywebsite button { + border-radius: 0; +} + +.bodywebsite button:focus:not(:focus-visible) { + outline: 0; +} + +.bodywebsite input, + .bodywebsite button, + .bodywebsite select, + .bodywebsite optgroup, + .bodywebsite textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.bodywebsite button, + .bodywebsite select { + text-transform: none; +} + +.bodywebsite [role=button] { + cursor: pointer; +} + +.bodywebsite select { + word-wrap: normal; +} + +.bodywebsite select:disabled { + opacity: 1; +} + +.bodywebsite [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +.bodywebsite button, + .bodywebsite [type=button], + .bodywebsite [type=reset], + .bodywebsite [type=submit] { + -webkit-appearance: button; +} + +.bodywebsite button:not(:disabled), + .bodywebsite [type=button]:not(:disabled), + .bodywebsite [type=reset]:not(:disabled), + .bodywebsite [type=submit]:not(:disabled) { + cursor: pointer; +} + +.bodywebsite ::-moz-focus-inner { + padding: 0; + border-style: none; +} + +.bodywebsite textarea { + resize: vertical; +} + +.bodywebsite fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +.bodywebsite legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} + +@media (min-width: 1200px) { + .bodywebsite legend { + font-size: 1.5rem; + } +} + +.bodywebsite legend + * { + clear: left; +} + +.bodywebsite ::-webkit-datetime-edit-fields-wrapper, + .bodywebsite ::-webkit-datetime-edit-text, + .bodywebsite ::-webkit-datetime-edit-minute, + .bodywebsite ::-webkit-datetime-edit-hour-field, + .bodywebsite ::-webkit-datetime-edit-day-field, + .bodywebsite ::-webkit-datetime-edit-month-field, + .bodywebsite ::-webkit-datetime-edit-year-field { + padding: 0; +} + +.bodywebsite ::-webkit-inner-spin-button { + height: auto; +} + +.bodywebsite [type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +.bodywebsite ::-webkit-search-decoration { + -webkit-appearance: none; +} + +.bodywebsite ::-webkit-color-swatch-wrapper { + padding: 0; +} + +.bodywebsite ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite ::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite output { + display: inline-block; +} + +.bodywebsite iframe { + border: 0; +} + +.bodywebsite summary { + display: list-item; + cursor: pointer; +} + +.bodywebsite progress { + vertical-align: baseline; +} + +.bodywebsite [hidden] { + display: none !important; +} + +.bodywebsite .lead { + font-size: 1.25rem; + font-weight: 300; +} + +.bodywebsite .display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-1 { + font-size: 5rem; + } +} + +.bodywebsite .display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-2 { + font-size: 4.5rem; + } +} + +.bodywebsite .display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-3 { + font-size: 4rem; + } +} + +.bodywebsite .display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-4 { + font-size: 3.5rem; + } +} + +.bodywebsite .display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-5 { + font-size: 3rem; + } +} + +.bodywebsite .display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-6 { + font-size: 2.5rem; + } +} + +.bodywebsite .list-unstyled { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline-item { + display: inline-block; +} + +.bodywebsite .list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.bodywebsite .initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.bodywebsite .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.bodywebsite .blockquote > :last-child { + margin-bottom: 0; +} + +.bodywebsite .blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .blockquote-footer::before { + content: "— "; +} + +.bodywebsite .img-fluid { + max-width: 100%; + height: auto; +} + +.bodywebsite .img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.bodywebsite .figure { + display: inline-block; +} + +.bodywebsite .figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.bodywebsite .figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .container, + .bodywebsite .container-fluid, + .bodywebsite .container-xxl, + .bodywebsite .container-xl, + .bodywebsite .container-lg, + .bodywebsite .container-md, + .bodywebsite .container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .container-sm, .bodywebsite .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + .bodywebsite .container-xxl, .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1320px; + } +} + +.bodywebsite .row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} + +.bodywebsite .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.bodywebsite .col { + flex: 1 0 0%; +} + +.bodywebsite .row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.bodywebsite .row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.bodywebsite .row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.bodywebsite .col-auto { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.bodywebsite .col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.bodywebsite .col-3 { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.bodywebsite .col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.bodywebsite .col-6 { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.bodywebsite .col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.bodywebsite .col-9 { + flex: 0 0 auto; + width: 75%; +} + +.bodywebsite .col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.bodywebsite .col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.bodywebsite .col-12 { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .offset-1 { + margin-left: 8.33333333%; +} + +.bodywebsite .offset-2 { + margin-left: 16.66666667%; +} + +.bodywebsite .offset-3 { + margin-left: 25%; +} + +.bodywebsite .offset-4 { + margin-left: 33.33333333%; +} + +.bodywebsite .offset-5 { + margin-left: 41.66666667%; +} + +.bodywebsite .offset-6 { + margin-left: 50%; +} + +.bodywebsite .offset-7 { + margin-left: 58.33333333%; +} + +.bodywebsite .offset-8 { + margin-left: 66.66666667%; +} + +.bodywebsite .offset-9 { + margin-left: 75%; +} + +.bodywebsite .offset-10 { + margin-left: 83.33333333%; +} + +.bodywebsite .offset-11 { + margin-left: 91.66666667%; +} + +.bodywebsite .g-0, + .bodywebsite .gx-0 { + --bs-gutter-x: 0; +} + +.bodywebsite .g-0, + .bodywebsite .gy-0 { + --bs-gutter-y: 0; +} + +.bodywebsite .g-1, + .bodywebsite .gx-1 { + --bs-gutter-x: 0.25rem; +} + +.bodywebsite .g-1, + .bodywebsite .gy-1 { + --bs-gutter-y: 0.25rem; +} + +.bodywebsite .g-2, + .bodywebsite .gx-2 { + --bs-gutter-x: 0.5rem; +} + +.bodywebsite .g-2, + .bodywebsite .gy-2 { + --bs-gutter-y: 0.5rem; +} + +.bodywebsite .g-3, + .bodywebsite .gx-3 { + --bs-gutter-x: 1rem; +} + +.bodywebsite .g-3, + .bodywebsite .gy-3 { + --bs-gutter-y: 1rem; +} + +.bodywebsite .g-4, + .bodywebsite .gx-4 { + --bs-gutter-x: 1.5rem; +} + +.bodywebsite .g-4, + .bodywebsite .gy-4 { + --bs-gutter-y: 1.5rem; +} + +.bodywebsite .g-5, + .bodywebsite .gx-5 { + --bs-gutter-x: 3rem; +} + +.bodywebsite .g-5, + .bodywebsite .gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .bodywebsite .col-sm { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-sm-0 { + margin-left: 0; + } + + .bodywebsite .offset-sm-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-sm-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-sm-3 { + margin-left: 25%; + } + + .bodywebsite .offset-sm-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-sm-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-sm-6 { + margin-left: 50%; + } + + .bodywebsite .offset-sm-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-sm-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-sm-9 { + margin-left: 75%; + } + + .bodywebsite .offset-sm-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-sm-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gx-sm-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gy-sm-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px) { + .bodywebsite .col-md { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-md-0 { + margin-left: 0; + } + + .bodywebsite .offset-md-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-md-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-md-3 { + margin-left: 25%; + } + + .bodywebsite .offset-md-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-md-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-md-6 { + margin-left: 50%; + } + + .bodywebsite .offset-md-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-md-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-md-9 { + margin-left: 75%; + } + + .bodywebsite .offset-md-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-md-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-md-0, + .bodywebsite .gx-md-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-md-0, + .bodywebsite .gy-md-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-md-1, + .bodywebsite .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-md-1, + .bodywebsite .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gx-md-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gy-md-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gx-md-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gy-md-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px) { + .bodywebsite .col-lg { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-lg-0 { + margin-left: 0; + } + + .bodywebsite .offset-lg-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-lg-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-lg-3 { + margin-left: 25%; + } + + .bodywebsite .offset-lg-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-lg-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-lg-6 { + margin-left: 50%; + } + + .bodywebsite .offset-lg-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-lg-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-lg-9 { + margin-left: 75%; + } + + .bodywebsite .offset-lg-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-lg-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gx-lg-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gy-lg-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px) { + .bodywebsite .col-xl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gx-xl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gy-xl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px) { + .bodywebsite .col-xxl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xxl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xxl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xxl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xxl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gx-xxl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gy-xxl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} + +.bodywebsite .table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} + +.bodywebsite .table > tbody { + vertical-align: inherit; +} + +.bodywebsite .table > thead { + vertical-align: bottom; +} + +.bodywebsite .table-group-divider { + border-top: 2px solid currentcolor; +} + +.bodywebsite .caption-top { + caption-side: top; +} + +.bodywebsite .table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.bodywebsite .table-bordered > :not(caption) > * { + border-width: 1px 0; +} + +.bodywebsite .table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.bodywebsite .table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.bodywebsite .table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.bodywebsite .table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.bodywebsite .table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .bodywebsite .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +.bodywebsite .form-label { + margin-bottom: 0.5rem; +} + +.bodywebsite .col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.bodywebsite .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.bodywebsite .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.bodywebsite .form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control { + transition: none; + } +} + +.bodywebsite .form-control[type=file] { + overflow: hidden; +} + +.bodywebsite .form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-control::-webkit-date-and-time-value { + height: 1.5em; +} + +.bodywebsite .form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control:disabled { + background-color: #e9ecef; + opacity: 1; +} + +.bodywebsite .form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.bodywebsite .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + + .bodywebsite .form-control::file-selector-button { + transition: none; + } +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.bodywebsite .form-control-plaintext:focus { + outline: 0; +} + +.bodywebsite .form-control-plaintext.form-control-sm, .bodywebsite .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.bodywebsite .form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} + +.bodywebsite textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} + +.bodywebsite .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-select { + transition: none; + } +} + +.bodywebsite .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-select[multiple], .bodywebsite .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} + +.bodywebsite .form-select:disabled { + background-color: #e9ecef; +} + +.bodywebsite .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.bodywebsite .form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} + +.bodywebsite .form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.bodywebsite .form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} + +.bodywebsite .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.bodywebsite .form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} + +.bodywebsite .form-check-input[type=checkbox] { + border-radius: 0.25em; +} + +.bodywebsite .form-check-input[type=radio] { + border-radius: 50%; +} + +.bodywebsite .form-check-input:active { + filter: brightness(90%); +} + +.bodywebsite .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} + +.bodywebsite .form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +.bodywebsite .form-check-input[disabled] ~ .form-check-label, .bodywebsite .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.bodywebsite .form-switch { + padding-left: 2.5em; +} + +.bodywebsite .form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-switch .form-check-input { + transition: none; + } +} + +.bodywebsite .form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} + +.bodywebsite .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.bodywebsite .form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.bodywebsite .btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.bodywebsite .btn-check[disabled] + .btn, .bodywebsite .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.bodywebsite .form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.bodywebsite .form-range:focus { + outline: 0; +} + +.bodywebsite .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range::-moz-focus-outer { + border: 0; +} + +.bodywebsite .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range:disabled { + pointer-events: none; +} + +.bodywebsite .form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-floating { + position: relative; +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext, + .bodywebsite .form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} + +.bodywebsite .form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-floating > label { + transition: none; + } +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} + +.bodywebsite .form-floating > .form-control::-moz-placeholder, .bodywebsite .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control::placeholder, + .bodywebsite .form-floating > .form-control-plaintext::placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown), .bodywebsite .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:focus, .bodywebsite .form-floating > .form-control:not(:placeholder-shown), + .bodywebsite .form-floating > .form-control-plaintext:focus, + .bodywebsite .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill, + .bodywebsite .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:focus ~ label, + .bodywebsite .form-floating > .form-control:not(:placeholder-shown) ~ label, + .bodywebsite .form-floating > .form-control-plaintext ~ label, + .bodywebsite .form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.bodywebsite .input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.bodywebsite .input-group > .form-control, + .bodywebsite .input-group > .form-select, + .bodywebsite .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} + +.bodywebsite .input-group > .form-control:focus, + .bodywebsite .input-group > .form-select:focus, + .bodywebsite .input-group > .form-floating:focus-within { + z-index: 5; +} + +.bodywebsite .input-group .btn { + position: relative; + z-index: 2; +} + +.bodywebsite .input-group .btn:focus { + z-index: 5; +} + +.bodywebsite .input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.bodywebsite .input-group-lg > .form-control, + .bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-lg > .input-group-text, + .bodywebsite .input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .input-group-sm > .form-control, + .bodywebsite .input-group-sm > .form-select, + .bodywebsite .input-group-sm > .input-group-text, + .bodywebsite .input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-sm > .form-select { + padding-right: 3rem; +} + +.bodywebsite .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .input-group > .form-floating:not(:first-child) > .form-control, + .bodywebsite .input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.bodywebsite .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :valid ~ .valid-feedback, + .bodywebsite .was-validated :valid ~ .valid-tooltip, + .bodywebsite .is-valid ~ .valid-feedback, + .bodywebsite .is-valid ~ .valid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:valid, .bodywebsite .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:valid:focus, .bodywebsite .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:valid, .bodywebsite textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:valid, .bodywebsite .form-select.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-select:valid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:valid:not([multiple])[size="1"], .bodywebsite .form-select.is-valid:not([multiple]):not([size]), .bodywebsite .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:valid:focus, .bodywebsite .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-control-color:valid, .bodywebsite .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:valid, .bodywebsite .form-check-input.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:checked, .bodywebsite .form-check-input.is-valid:checked { + background-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:focus, .bodywebsite .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-check-input:valid ~ .form-check-label, .bodywebsite .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.bodywebsite .form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):valid, .bodywebsite .input-group > .form-control:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):valid, + .bodywebsite .input-group > .form-select:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):valid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.bodywebsite .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.bodywebsite .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :invalid ~ .invalid-feedback, + .bodywebsite .was-validated :invalid ~ .invalid-tooltip, + .bodywebsite .is-invalid ~ .invalid-feedback, + .bodywebsite .is-invalid ~ .invalid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:invalid, .bodywebsite .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:invalid:focus, .bodywebsite .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:invalid, .bodywebsite textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:invalid, .bodywebsite .form-select.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-select:invalid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:invalid:not([multiple])[size="1"], .bodywebsite .form-select.is-invalid:not([multiple]):not([size]), .bodywebsite .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:invalid:focus, .bodywebsite .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-control-color:invalid, .bodywebsite .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:invalid, .bodywebsite .form-check-input.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:checked, .bodywebsite .form-check-input.is-invalid:checked { + background-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:focus, .bodywebsite .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-check-input:invalid ~ .form-check-label, .bodywebsite .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.bodywebsite .form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):invalid, .bodywebsite .input-group > .form-control:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):invalid, + .bodywebsite .input-group > .form-select:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):invalid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.bodywebsite .btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .btn { + transition: none; + } +} + +.bodywebsite :not(.btn-check) + .btn:hover, .bodywebsite .btn:first-child:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} + +.bodywebsite .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:checked + .btn, .bodywebsite :not(.btn-check) + .btn:active, .bodywebsite .btn:first-child:active, .bodywebsite .btn.active, .bodywebsite .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} + +.bodywebsite .btn-check:checked + .btn:focus-visible, .bodywebsite :not(.btn-check) + .btn:active:focus-visible, .bodywebsite .btn:first-child:active:focus-visible, .bodywebsite .btn.active:focus-visible, .bodywebsite .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn:disabled, .bodywebsite .btn.disabled, .bodywebsite fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.bodywebsite .btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.bodywebsite .btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.bodywebsite .btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.bodywebsite .btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.bodywebsite .btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.bodywebsite .btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.bodywebsite .btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.bodywebsite .btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.bodywebsite .btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.bodywebsite .btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} + +.bodywebsite .btn-link:focus-visible { + color: var(--bs-btn-color); +} + +.bodywebsite .btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.bodywebsite .btn-lg, .bodywebsite .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 0.5rem; +} + +.bodywebsite .btn-sm, .bodywebsite .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: 0.25rem; +} + +.bodywebsite .fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .fade { + transition: none; + } +} + +.bodywebsite .fade:not(.show) { + opacity: 0; +} + +.bodywebsite .collapse:not(.show) { + display: none; +} + +.bodywebsite .collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing { + transition: none; + } +} + +.bodywebsite .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing.collapse-horizontal { + transition: none; + } +} + +.bodywebsite .dropup, + .bodywebsite .dropend, + .bodywebsite .dropdown, + .bodywebsite .dropstart, + .bodywebsite .dropup-center, + .bodywebsite .dropdown-center { + position: relative; +} + +.bodywebsite .dropdown-toggle { + white-space: nowrap; +} + +.bodywebsite .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-dropdown-link-color: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} + +.bodywebsite .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropdown-menu-start { + --bs-position: start; +} + +.bodywebsite .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.bodywebsite .dropdown-menu-end { + --bs-position: end; +} + +.bodywebsite .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .dropdown-menu-sm-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-sm-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .bodywebsite .dropdown-menu-md-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-md-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .bodywebsite .dropdown-menu-lg-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-lg-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .bodywebsite .dropdown-menu-xl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1400px) { + .bodywebsite .dropdown-menu-xxl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xxl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +.bodywebsite .dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.bodywebsite .dropend .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.bodywebsite .dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: none; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.bodywebsite .dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.bodywebsite .dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.bodywebsite .dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.bodywebsite .dropdown-item:hover, .bodywebsite .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} + +.bodywebsite .dropdown-item.active, .bodywebsite .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} + +.bodywebsite .dropdown-item.disabled, .bodywebsite .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.bodywebsite .dropdown-menu.show { + display: block; +} + +.bodywebsite .dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.bodywebsite .dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.bodywebsite .dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.bodywebsite .btn-group, + .bodywebsite .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.bodywebsite .btn-group > .btn, + .bodywebsite .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.bodywebsite .btn-group > .btn-check:checked + .btn, + .bodywebsite .btn-group > .btn-check:focus + .btn, + .bodywebsite .btn-group > .btn:hover, + .bodywebsite .btn-group > .btn:focus, + .bodywebsite .btn-group > .btn:active, + .bodywebsite .btn-group > .btn.active, + .bodywebsite .btn-group-vertical > .btn-check:checked + .btn, + .bodywebsite .btn-group-vertical > .btn-check:focus + .btn, + .bodywebsite .btn-group-vertical > .btn:hover, + .bodywebsite .btn-group-vertical > .btn:focus, + .bodywebsite .btn-group-vertical > .btn:active, + .bodywebsite .btn-group-vertical > .btn.active { + z-index: 1; +} + +.bodywebsite .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.bodywebsite .btn-toolbar .input-group { + width: auto; +} + +.bodywebsite .btn-group { + border-radius: 0.375rem; +} + +.bodywebsite .btn-group > :not(.btn-check:first-child) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.bodywebsite .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group > .btn.dropdown-toggle-split:first-child, + .bodywebsite .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .btn-group > .btn:nth-child(n+3), + .bodywebsite .btn-group > :not(.btn-check) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.bodywebsite .dropdown-toggle-split::after, .bodywebsite .dropup .dropdown-toggle-split::after, .bodywebsite .dropend .dropdown-toggle-split::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.bodywebsite .btn-sm + .dropdown-toggle-split, .bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.bodywebsite .btn-lg + .dropdown-toggle-split, .bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.bodywebsite .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.bodywebsite .btn-group-vertical > .btn, + .bodywebsite .btn-group-vertical > .btn-group { + width: 100%; +} + +.bodywebsite .btn-group-vertical > .btn:not(:first-child), + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.bodywebsite .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .btn-group-vertical > .btn ~ .btn, + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .nav-link { + transition: none; + } +} + +.bodywebsite .nav-link:hover, .bodywebsite .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} + +.bodywebsite .nav-link.disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.bodywebsite .nav-tabs { + --bs-nav-tabs-border-width: 1px; + --bs-nav-tabs-border-color: #dee2e6; + --bs-nav-tabs-border-radius: 0.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} + +.bodywebsite .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} + +.bodywebsite .nav-tabs .nav-link:hover, .bodywebsite .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} + +.bodywebsite .nav-tabs .nav-link.disabled, .bodywebsite .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-tabs .nav-link.active, + .bodywebsite .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} + +.bodywebsite .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav-pills { + --bs-nav-pills-border-radius: 0.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} + +.bodywebsite .nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} + +.bodywebsite .nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-pills .nav-link.active, + .bodywebsite .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.bodywebsite .nav-fill > .nav-link, + .bodywebsite .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.bodywebsite .nav-justified > .nav-link, + .bodywebsite .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.bodywebsite .nav-fill .nav-item .nav-link, + .bodywebsite .nav-justified .nav-item .nav-link { + width: 100%; +} + +.bodywebsite .tab-content > .tab-pane { + display: none; +} + +.bodywebsite .tab-content > .active { + display: block; +} + +.bodywebsite .navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} + +.bodywebsite .navbar > .container, + .bodywebsite .navbar > .container-fluid, + .bodywebsite .navbar > .container-sm, + .bodywebsite .navbar > .container-md, + .bodywebsite .navbar > .container-lg, + .bodywebsite .navbar > .container-xl, + .bodywebsite .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} + +.bodywebsite .navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} + +.bodywebsite .navbar-brand:hover, .bodywebsite .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.bodywebsite .navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .navbar-nav .show > .nav-link, + .bodywebsite .navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-nav .dropdown-menu { + position: static; +} + +.bodywebsite .navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} + +.bodywebsite .navbar-text a, + .bodywebsite .navbar-text a:hover, + .bodywebsite .navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.bodywebsite .navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .navbar-toggler { + transition: none; + } +} + +.bodywebsite .navbar-toggler:hover { + text-decoration: none; +} + +.bodywebsite .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.bodywebsite .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.bodywebsite .navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .bodywebsite .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-sm .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-md .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-md .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-lg .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xxl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +.bodywebsite .navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} + +.bodywebsite .navbar-expand .navbar-nav { + flex-direction: row; +} + +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.bodywebsite .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} + +.bodywebsite .navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.bodywebsite .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.bodywebsite .navbar-expand .navbar-toggler { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-header { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.bodywebsite .navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.bodywebsite .card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} + +.bodywebsite .card > hr { + margin-right: 0; + margin-left: 0; +} + +.bodywebsite .card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.bodywebsite .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .card-header + .list-group, + .bodywebsite .card > .list-group + .card-footer { + border-top: 0; +} + +.bodywebsite .card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.bodywebsite .card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.bodywebsite .card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.bodywebsite .card-text:last-child { + margin-bottom: 0; +} + +.bodywebsite .card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.bodywebsite .card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.bodywebsite .card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} + +.bodywebsite .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.bodywebsite .card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.bodywebsite .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top, + .bodywebsite .card-img-bottom { + width: 100%; +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} + +@media (min-width: 576px) { + .bodywebsite .card-group { + display: flex; + flex-flow: row wrap; + } + + .bodywebsite .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + + .bodywebsite .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-top, + .bodywebsite .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-top, + .bodywebsite .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.bodywebsite .accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='var%28--bs-body-color%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.bodywebsite .accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button { + transition: none; + } +} + +.bodywebsite .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} + +.bodywebsite .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button::after { + transition: none; + } +} + +.bodywebsite .accordion-button:hover { + z-index: 2; +} + +.bodywebsite .accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.bodywebsite .accordion-header { + margin-bottom: 0; +} + +.bodywebsite .accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:not(:first-of-type) { + border-top: 0; +} + +.bodywebsite .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.bodywebsite .accordion-flush .accordion-collapse { + border-width: 0; +} + +.bodywebsite .accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.bodywebsite .accordion-flush .accordion-item:first-child { + border-top: 0; +} + +.bodywebsite .accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.bodywebsite .accordion-flush .accordion-item .accordion-button, .bodywebsite .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; +} + +.bodywebsite .breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-divider-color: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/"); +} + +.bodywebsite .breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.bodywebsite .pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.bodywebsite .page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .page-link { + transition: none; + } +} + +.bodywebsite .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} + +.bodywebsite .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} + +.bodywebsite .page-link.active, .bodywebsite .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} + +.bodywebsite .page-link.disabled, .bodywebsite .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.bodywebsite .page-item:not(:first-child) .page-link { + margin-left: -1px; +} + +.bodywebsite .page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: 0.5rem; +} + +.bodywebsite .pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: 0.25rem; +} + +.bodywebsite .badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} + +.bodywebsite .badge:empty { + display: none; +} + +.bodywebsite .btn .badge { + position: relative; + top: -1px; +} + +.bodywebsite .alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: 1px solid var(--bs-alert-border-color); + --bs-alert-border-radius: 0.375rem; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.bodywebsite .alert-heading { + color: inherit; +} + +.bodywebsite .alert-link { + font-weight: 700; +} + +.bodywebsite .alert-dismissible { + padding-right: 3rem; +} + +.bodywebsite .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.bodywebsite .alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} + +.bodywebsite .alert-primary .alert-link { + color: #06357a; +} + +.bodywebsite .alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} + +.bodywebsite .alert-secondary .alert-link { + color: #34383c; +} + +.bodywebsite .alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} + +.bodywebsite .alert-success .alert-link { + color: #0c4128; +} + +.bodywebsite .alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} + +.bodywebsite .alert-info .alert-link { + color: #04414d; +} + +.bodywebsite .alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} + +.bodywebsite .alert-warning .alert-link { + color: #523e02; +} + +.bodywebsite .alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} + +.bodywebsite .alert-danger .alert-link { + color: #6a1a21; +} + +.bodywebsite .alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} + +.bodywebsite .alert-light .alert-link { + color: #4f5050; +} + +.bodywebsite .alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} + +.bodywebsite .alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +.bodywebsite .progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.bodywebsite .progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar { + transition: none; + } +} + +.bodywebsite .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.bodywebsite .progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.bodywebsite .list-group { + --bs-list-group-color: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.bodywebsite .list-group-numbered { + list-style-type: none; + counter-reset: section; +} + +.bodywebsite .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.bodywebsite .list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} + +.bodywebsite .list-group-item-action:hover, .bodywebsite .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} + +.bodywebsite .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.bodywebsite .list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} + +.bodywebsite .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.bodywebsite .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} + +.bodywebsite .list-group-item.disabled, .bodywebsite .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} + +.bodywebsite .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} + +.bodywebsite .list-group-item + .list-group-item { + border-top-width: 0; +} + +.bodywebsite .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-horizontal { + flex-direction: row; +} + +.bodywebsite .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .bodywebsite .list-group-horizontal-sm { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 768px) { + .bodywebsite .list-group-horizontal-md { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 992px) { + .bodywebsite .list-group-horizontal-lg { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1200px) { + .bodywebsite .list-group-horizontal-xl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1400px) { + .bodywebsite .list-group-horizontal-xxl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +.bodywebsite .list-group-flush { + border-radius: 0; +} + +.bodywebsite .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.bodywebsite .list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} + +.bodywebsite .list-group-item-primary.list-group-item-action:hover, .bodywebsite .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} + +.bodywebsite .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.bodywebsite .list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action:hover, .bodywebsite .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.bodywebsite .list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} + +.bodywebsite .list-group-item-success.list-group-item-action:hover, .bodywebsite .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} + +.bodywebsite .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.bodywebsite .list-group-item-info { + color: #055160; + background-color: #cff4fc; +} + +.bodywebsite .list-group-item-info.list-group-item-action:hover, .bodywebsite .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} + +.bodywebsite .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.bodywebsite .list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} + +.bodywebsite .list-group-item-warning.list-group-item-action:hover, .bodywebsite .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} + +.bodywebsite .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.bodywebsite .list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} + +.bodywebsite .list-group-item-danger.list-group-item-action:hover, .bodywebsite .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} + +.bodywebsite .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.bodywebsite .list-group-item-light { + color: #636464; + background-color: #fefefe; +} + +.bodywebsite .list-group-item-light.list-group-item-action:hover, .bodywebsite .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} + +.bodywebsite .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.bodywebsite .list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} + +.bodywebsite .list-group-item-dark.list-group-item-action:hover, .bodywebsite .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} + +.bodywebsite .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.bodywebsite .btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} + +.bodywebsite .btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} + +.bodywebsite .btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} + +.bodywebsite .btn-close:disabled, .bodywebsite .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.bodywebsite .btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.bodywebsite .toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-bg: rgba(255, 255, 255, 0.85); + --bs-toast-border-width: 1px; + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} + +.bodywebsite .toast.showing { + opacity: 0; +} + +.bodywebsite .toast:not(.show) { + display: none; +} + +.bodywebsite .toast-container { + position: absolute; + z-index: var(--bs-toast-zindex); + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.bodywebsite .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.bodywebsite .toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} + +.bodywebsite .toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.bodywebsite .toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.bodywebsite .modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: 1px; + --bs-modal-border-radius: 0.5rem; + --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-modal-inner-border-radius: calc(0.5rem - 1px); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: 1px; + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: 1px; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.bodywebsite .modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} + +.bodywebsite .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .modal.fade .modal-dialog { + transition: none; + } +} + +.bodywebsite .modal.show .modal-dialog { + transform: none; +} + +.bodywebsite .modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.bodywebsite .modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} + +.bodywebsite .modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.bodywebsite .modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.bodywebsite .modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} + +.bodywebsite .modal-backdrop.fade { + opacity: 0; +} + +.bodywebsite .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.bodywebsite .modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.bodywebsite .modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.bodywebsite .modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.bodywebsite .modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .bodywebsite .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + } + + .bodywebsite .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + + .bodywebsite .modal-sm { + --bs-modal-width: 300px; + } +} + +@media (min-width: 992px) { + .bodywebsite .modal-lg, + .bodywebsite .modal-xl { + --bs-modal-width: 800px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .modal-xl { + --bs-modal-width: 1140px; + } +} + +.bodywebsite .modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} + +.bodywebsite .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-header, + .bodywebsite .modal-fullscreen .modal-footer { + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .bodywebsite .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-header, + .bodywebsite .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-header, + .bodywebsite .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-header, + .bodywebsite .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-header, + .bodywebsite .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-header, + .bodywebsite .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} + +.bodywebsite .tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} + +.bodywebsite .tooltip.show { + opacity: var(--bs-tooltip-opacity); +} + +.bodywebsite .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} + +.bodywebsite .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +.bodywebsite .tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.bodywebsite .popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: 0.5rem; + --bs-popover-inner-border-radius: calc(0.5rem - 1px); + --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} + +.bodywebsite .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} + +.bodywebsite .popover .popover-arrow::before, .bodywebsite .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-end > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom .popover-header::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +.bodywebsite .bs-popover-start > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +.bodywebsite .popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} + +.bodywebsite .popover-header:empty { + display: none; +} + +.bodywebsite .popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.bodywebsite .carousel { + position: relative; +} + +.bodywebsite .carousel.pointer-event { + touch-action: pan-y; +} + +.bodywebsite .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.bodywebsite .carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-item { + transition: none; + } +} + +.bodywebsite .carousel-item.active, + .bodywebsite .carousel-item-next, + .bodywebsite .carousel-item-prev { + display: block; +} + +.bodywebsite .carousel-item-next:not(.carousel-item-start), + .bodywebsite .active.carousel-item-end { + transform: translateX(100%); +} + +.bodywebsite .carousel-item-prev:not(.carousel-item-end), + .bodywebsite .active.carousel-item-start { + transform: translateX(-100%); +} + +.bodywebsite .carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.bodywebsite .carousel-fade .carousel-item.active, + .bodywebsite .carousel-fade .carousel-item-next.carousel-item-start, + .bodywebsite .carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + transition: none; + } +} + +.bodywebsite .carousel-control-prev:hover, .bodywebsite .carousel-control-prev:focus, + .bodywebsite .carousel-control-next:hover, + .bodywebsite .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.bodywebsite .carousel-control-prev { + left: 0; +} + +.bodywebsite .carousel-control-next { + right: 0; +} + +.bodywebsite .carousel-control-prev-icon, + .bodywebsite .carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.bodywebsite .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} + +.bodywebsite .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-indicators [data-bs-target] { + transition: none; + } +} + +.bodywebsite .carousel-indicators .active { + opacity: 1; +} + +.bodywebsite .carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.bodywebsite .carousel-dark .carousel-control-prev-icon, + .bodywebsite .carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} + +.bodywebsite .carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} + +.bodywebsite .carousel-dark .carousel-caption { + color: #000; +} + +.bodywebsite .spinner-grow, + .bodywebsite .spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + -webkit-animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.bodywebsite .spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.bodywebsite .spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +.bodywebsite .spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.bodywebsite .spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .spinner-border, + .bodywebsite .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} + +.bodywebsite .offcanvas, .bodywebsite .offcanvas-xxl, .bodywebsite .offcanvas-xl, .bodywebsite .offcanvas-lg, .bodywebsite .offcanvas-md, .bodywebsite .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-sm { + transition: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.hiding, .bodywebsite .offcanvas-sm.show { + visibility: visible; + } +} + +@media (min-width: 576px) { + .bodywebsite .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-sm .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-md { + transition: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.hiding, .bodywebsite .offcanvas-md.show { + visibility: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-md .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-lg { + transition: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.hiding, .bodywebsite .offcanvas-lg.show { + visibility: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-lg .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xl { + transition: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.hiding, .bodywebsite .offcanvas-xl.show { + visibility: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xxl { + transition: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.hiding, .bodywebsite .offcanvas-xxl.show { + visibility: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xxl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.bodywebsite .offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas { + transition: none; + } +} + +.bodywebsite .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} + +.bodywebsite .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} + +.bodywebsite .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} + +.bodywebsite .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.show:not(.hiding) { + transform: none; +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.hiding, .bodywebsite .offcanvas.show { + visibility: visible; +} + +.bodywebsite .offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.bodywebsite .offcanvas-backdrop.fade { + opacity: 0; +} + +.bodywebsite .offcanvas-backdrop.show { + opacity: 0.5; +} + +.bodywebsite .offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} + +.bodywebsite .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); +} + +.bodywebsite .offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.bodywebsite .offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.bodywebsite .placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} + +.bodywebsite .placeholder.btn::before { + display: inline-block; + content: ""; +} + +.bodywebsite .placeholder-xs { + min-height: 0.6em; +} + +.bodywebsite .placeholder-sm { + min-height: 0.8em; +} + +.bodywebsite .placeholder-lg { + min-height: 1.2em; +} + +.bodywebsite .placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +.bodywebsite .placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +.bodywebsite .clearfix::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .link-primary { + color: #0d6efd !important; +} + +.bodywebsite .link-primary:hover, .bodywebsite .link-primary:focus { + color: #0a58ca !important; +} + +.bodywebsite .link-secondary { + color: #6c757d !important; +} + +.bodywebsite .link-secondary:hover, .bodywebsite .link-secondary:focus { + color: #565e64 !important; +} + +.bodywebsite .link-success { + color: #198754 !important; +} + +.bodywebsite .link-success:hover, .bodywebsite .link-success:focus { + color: #146c43 !important; +} + +.bodywebsite .link-info { + color: #0dcaf0 !important; +} + +.bodywebsite .link-info:hover, .bodywebsite .link-info:focus { + color: #3dd5f3 !important; +} + +.bodywebsite .link-warning { + color: #ffc107 !important; +} + +.bodywebsite .link-warning:hover, .bodywebsite .link-warning:focus { + color: #ffcd39 !important; +} + +.bodywebsite .link-danger { + color: #dc3545 !important; +} + +.bodywebsite .link-danger:hover, .bodywebsite .link-danger:focus { + color: #b02a37 !important; +} + +.bodywebsite .link-light { + color: #f8f9fa !important; +} + +.bodywebsite .link-light:hover, .bodywebsite .link-light:focus { + color: #f9fafb !important; +} + +.bodywebsite .link-dark { + color: #212529 !important; +} + +.bodywebsite .link-dark:hover, .bodywebsite .link-dark:focus { + color: #1a1e21 !important; +} + +.bodywebsite .ratio { + position: relative; + width: 100%; +} + +.bodywebsite .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} + +.bodywebsite .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.bodywebsite .ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.bodywebsite .ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.bodywebsite .ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.bodywebsite .ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.bodywebsite .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.bodywebsite .sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .bodywebsite .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 768px) { + .bodywebsite .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 992px) { + .bodywebsite .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1200px) { + .bodywebsite .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1400px) { + .bodywebsite .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +.bodywebsite .hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.bodywebsite .vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.bodywebsite .visually-hidden, + .bodywebsite .visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.bodywebsite .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.bodywebsite .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.bodywebsite .vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.bodywebsite .align-baseline { + vertical-align: baseline !important; +} + +.bodywebsite .align-top { + vertical-align: top !important; +} + +.bodywebsite .align-middle { + vertical-align: middle !important; +} + +.bodywebsite .align-bottom { + vertical-align: bottom !important; +} + +.bodywebsite .align-text-bottom { + vertical-align: text-bottom !important; +} + +.bodywebsite .align-text-top { + vertical-align: text-top !important; +} + +.bodywebsite .float-start { + float: left !important; +} + +.bodywebsite .float-end { + float: right !important; +} + +.bodywebsite .float-none { + float: none !important; +} + +.bodywebsite .opacity-0 { + opacity: 0 !important; +} + +.bodywebsite .opacity-25 { + opacity: 0.25 !important; +} + +.bodywebsite .opacity-50 { + opacity: 0.5 !important; +} + +.bodywebsite .opacity-75 { + opacity: 0.75 !important; +} + +.bodywebsite .opacity-100 { + opacity: 1 !important; +} + +.bodywebsite .overflow-auto { + overflow: auto !important; +} + +.bodywebsite .overflow-hidden { + overflow: hidden !important; +} + +.bodywebsite .overflow-visible { + overflow: visible !important; +} + +.bodywebsite .overflow-scroll { + overflow: scroll !important; +} + +.bodywebsite .d-inline { + display: inline !important; +} + +.bodywebsite .d-inline-block { + display: inline-block !important; +} + +.bodywebsite .d-block { + display: block !important; +} + +.bodywebsite .d-grid { + display: grid !important; +} + +.bodywebsite .d-table { + display: table !important; +} + +.bodywebsite .d-table-row { + display: table-row !important; +} + +.bodywebsite .d-table-cell { + display: table-cell !important; +} + +.bodywebsite .d-flex { + display: flex !important; +} + +.bodywebsite .d-inline-flex { + display: inline-flex !important; +} + +.bodywebsite .d-none { + display: none !important; +} + +.bodywebsite .shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.bodywebsite .shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.bodywebsite .shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.bodywebsite .shadow-none { + box-shadow: none !important; +} + +.bodywebsite .position-static { + position: static !important; +} + +.bodywebsite .position-relative { + position: relative !important; +} + +.bodywebsite .position-absolute { + position: absolute !important; +} + +.bodywebsite .position-fixed { + position: fixed !important; +} + +.bodywebsite .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.bodywebsite .top-0 { + top: 0 !important; +} + +.bodywebsite .top-50 { + top: 50% !important; +} + +.bodywebsite .top-100 { + top: 100% !important; +} + +.bodywebsite .bottom-0 { + bottom: 0 !important; +} + +.bodywebsite .bottom-50 { + bottom: 50% !important; +} + +.bodywebsite .bottom-100 { + bottom: 100% !important; +} + +.bodywebsite .start-0 { + left: 0 !important; +} + +.bodywebsite .start-50 { + left: 50% !important; +} + +.bodywebsite .start-100 { + left: 100% !important; +} + +.bodywebsite .end-0 { + right: 0 !important; +} + +.bodywebsite .end-50 { + right: 50% !important; +} + +.bodywebsite .end-100 { + right: 100% !important; +} + +.bodywebsite .translate-middle { + transform: translate(-50%, -50%) !important; +} + +.bodywebsite .translate-middle-x { + transform: translateX(-50%) !important; +} + +.bodywebsite .translate-middle-y { + transform: translateY(-50%) !important; +} + +.bodywebsite .border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-0 { + border: 0 !important; +} + +.bodywebsite .border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-top-0 { + border-top: 0 !important; +} + +.bodywebsite .border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-end-0 { + border-right: 0 !important; +} + +.bodywebsite .border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-bottom-0 { + border-bottom: 0 !important; +} + +.bodywebsite .border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-start-0 { + border-left: 0 !important; +} + +.bodywebsite .border-primary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-secondary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-success { + --bs-border-opacity: 1; +} + +.bodywebsite .border-info { + --bs-border-opacity: 1; +} + +.bodywebsite .border-warning { + --bs-border-opacity: 1; +} + +.bodywebsite .border-danger { + --bs-border-opacity: 1; +} + +.bodywebsite .border-light { + --bs-border-opacity: 1; +} + +.bodywebsite .border-dark { + --bs-border-opacity: 1; +} + +.bodywebsite .border-white { + --bs-border-opacity: 1; +} + +.bodywebsite .border-1 { + --bs-border-width: 1px; +} + +.bodywebsite .border-2 { + --bs-border-width: 2px; +} + +.bodywebsite .border-3 { + --bs-border-width: 3px; +} + +.bodywebsite .border-4 { + --bs-border-width: 4px; +} + +.bodywebsite .border-5 { + --bs-border-width: 5px; +} + +.bodywebsite .border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.bodywebsite .border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.bodywebsite .border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.bodywebsite .border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.bodywebsite .border-opacity-100 { + --bs-border-opacity: 1; +} + +.bodywebsite .w-25 { + width: 25% !important; +} + +.bodywebsite .w-50 { + width: 50% !important; +} + +.bodywebsite .w-75 { + width: 75% !important; +} + +.bodywebsite .w-100 { + width: 100% !important; +} + +.bodywebsite .w-auto { + width: auto !important; +} + +.bodywebsite .mw-100 { + max-width: 100% !important; +} + +.bodywebsite .vw-100 { + width: 100vw !important; +} + +.bodywebsite .min-vw-100 { + min-width: 100vw !important; +} + +.bodywebsite .h-25 { + height: 25% !important; +} + +.bodywebsite .h-50 { + height: 50% !important; +} + +.bodywebsite .h-75 { + height: 75% !important; +} + +.bodywebsite .h-100 { + height: 100% !important; +} + +.bodywebsite .h-auto { + height: auto !important; +} + +.bodywebsite .mh-100 { + max-height: 100% !important; +} + +.bodywebsite .vh-100 { + height: 100vh !important; +} + +.bodywebsite .min-vh-100 { + min-height: 100vh !important; +} + +.bodywebsite .flex-fill { + flex: 1 1 auto !important; +} + +.bodywebsite .flex-row { + flex-direction: row !important; +} + +.bodywebsite .flex-column { + flex-direction: column !important; +} + +.bodywebsite .flex-row-reverse { + flex-direction: row-reverse !important; +} + +.bodywebsite .flex-column-reverse { + flex-direction: column-reverse !important; +} + +.bodywebsite .flex-grow-0 { + flex-grow: 0 !important; +} + +.bodywebsite .flex-grow-1 { + flex-grow: 1 !important; +} + +.bodywebsite .flex-shrink-0 { + flex-shrink: 0 !important; +} + +.bodywebsite .flex-shrink-1 { + flex-shrink: 1 !important; +} + +.bodywebsite .flex-wrap { + flex-wrap: wrap !important; +} + +.bodywebsite .flex-nowrap { + flex-wrap: nowrap !important; +} + +.bodywebsite .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.bodywebsite .justify-content-start { + justify-content: flex-start !important; +} + +.bodywebsite .justify-content-end { + justify-content: flex-end !important; +} + +.bodywebsite .justify-content-center { + justify-content: center !important; +} + +.bodywebsite .justify-content-between { + justify-content: space-between !important; +} + +.bodywebsite .justify-content-around { + justify-content: space-around !important; +} + +.bodywebsite .justify-content-evenly { + justify-content: space-evenly !important; +} + +.bodywebsite .align-items-start { + align-items: flex-start !important; +} + +.bodywebsite .align-items-end { + align-items: flex-end !important; +} + +.bodywebsite .align-items-center { + align-items: center !important; +} + +.bodywebsite .align-items-baseline { + align-items: baseline !important; +} + +.bodywebsite .align-items-stretch { + align-items: stretch !important; +} + +.bodywebsite .align-content-start { + align-content: flex-start !important; +} + +.bodywebsite .align-content-end { + align-content: flex-end !important; +} + +.bodywebsite .align-content-center { + align-content: center !important; +} + +.bodywebsite .align-content-between { + align-content: space-between !important; +} + +.bodywebsite .align-content-around { + align-content: space-around !important; +} + +.bodywebsite .align-content-stretch { + align-content: stretch !important; +} + +.bodywebsite .align-self-auto { + align-self: auto !important; +} + +.bodywebsite .align-self-start { + align-self: flex-start !important; +} + +.bodywebsite .align-self-end { + align-self: flex-end !important; +} + +.bodywebsite .align-self-center { + align-self: center !important; +} + +.bodywebsite .align-self-baseline { + align-self: baseline !important; +} + +.bodywebsite .align-self-stretch { + align-self: stretch !important; +} + +.bodywebsite .order-first { + order: -1 !important; +} + +.bodywebsite .order-0 { + order: 0 !important; +} + +.bodywebsite .order-1 { + order: 1 !important; +} + +.bodywebsite .order-2 { + order: 2 !important; +} + +.bodywebsite .order-3 { + order: 3 !important; +} + +.bodywebsite .order-4 { + order: 4 !important; +} + +.bodywebsite .order-5 { + order: 5 !important; +} + +.bodywebsite .order-last { + order: 6 !important; +} + +.bodywebsite .m-0 { + margin: 0 !important; +} + +.bodywebsite .m-1 { + margin: 0.25rem !important; +} + +.bodywebsite .m-2 { + margin: 0.5rem !important; +} + +.bodywebsite .m-3 { + margin: 1rem !important; +} + +.bodywebsite .m-4 { + margin: 1.5rem !important; +} + +.bodywebsite .m-5 { + margin: 3rem !important; +} + +.bodywebsite .m-auto { + margin: auto !important; +} + +.bodywebsite .mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.bodywebsite .mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.bodywebsite .mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.bodywebsite .mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.bodywebsite .mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.bodywebsite .mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.bodywebsite .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.bodywebsite .my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.bodywebsite .my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.bodywebsite .my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.bodywebsite .my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.bodywebsite .my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.bodywebsite .my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.bodywebsite .my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.bodywebsite .mt-0 { + margin-top: 0 !important; +} + +.bodywebsite .mt-1 { + margin-top: 0.25rem !important; +} + +.bodywebsite .mt-2 { + margin-top: 0.5rem !important; +} + +.bodywebsite .mt-3 { + margin-top: 1rem !important; +} + +.bodywebsite .mt-4 { + margin-top: 1.5rem !important; +} + +.bodywebsite .mt-5 { + margin-top: 3rem !important; +} + +.bodywebsite .mt-auto { + margin-top: auto !important; +} + +.bodywebsite .me-0 { + margin-right: 0 !important; +} + +.bodywebsite .me-1 { + margin-right: 0.25rem !important; +} + +.bodywebsite .me-2 { + margin-right: 0.5rem !important; +} + +.bodywebsite .me-3 { + margin-right: 1rem !important; +} + +.bodywebsite .me-4 { + margin-right: 1.5rem !important; +} + +.bodywebsite .me-5 { + margin-right: 3rem !important; +} + +.bodywebsite .me-auto { + margin-right: auto !important; +} + +.bodywebsite .mb-0 { + margin-bottom: 0 !important; +} + +.bodywebsite .mb-1 { + margin-bottom: 0.25rem !important; +} + +.bodywebsite .mb-2 { + margin-bottom: 0.5rem !important; +} + +.bodywebsite .mb-3 { + margin-bottom: 1rem !important; +} + +.bodywebsite .mb-4 { + margin-bottom: 1.5rem !important; +} + +.bodywebsite .mb-5 { + margin-bottom: 3rem !important; +} + +.bodywebsite .mb-auto { + margin-bottom: auto !important; +} + +.bodywebsite .ms-0 { + margin-left: 0 !important; +} + +.bodywebsite .ms-1 { + margin-left: 0.25rem !important; +} + +.bodywebsite .ms-2 { + margin-left: 0.5rem !important; +} + +.bodywebsite .ms-3 { + margin-left: 1rem !important; +} + +.bodywebsite .ms-4 { + margin-left: 1.5rem !important; +} + +.bodywebsite .ms-5 { + margin-left: 3rem !important; +} + +.bodywebsite .ms-auto { + margin-left: auto !important; +} + +.bodywebsite .p-0 { + padding: 0 !important; +} + +.bodywebsite .p-1 { + padding: 0.25rem !important; +} + +.bodywebsite .p-2 { + padding: 0.5rem !important; +} + +.bodywebsite .p-3 { + padding: 1rem !important; +} + +.bodywebsite .p-4 { + padding: 1.5rem !important; +} + +.bodywebsite .p-5 { + padding: 3rem !important; +} + +.bodywebsite .px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.bodywebsite .px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.bodywebsite .px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.bodywebsite .px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.bodywebsite .px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.bodywebsite .px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.bodywebsite .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.bodywebsite .py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.bodywebsite .py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.bodywebsite .py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.bodywebsite .py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.bodywebsite .py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.bodywebsite .pt-0 { + padding-top: 0 !important; +} + +.bodywebsite .pt-1 { + padding-top: 0.25rem !important; +} + +.bodywebsite .pt-2 { + padding-top: 0.5rem !important; +} + +.bodywebsite .pt-3 { + padding-top: 1rem !important; +} + +.bodywebsite .pt-4 { + padding-top: 1.5rem !important; +} + +.bodywebsite .pt-5 { + padding-top: 3rem !important; +} + +.bodywebsite .pe-0 { + padding-right: 0 !important; +} + +.bodywebsite .pe-1 { + padding-right: 0.25rem !important; +} + +.bodywebsite .pe-2 { + padding-right: 0.5rem !important; +} + +.bodywebsite .pe-3 { + padding-right: 1rem !important; +} + +.bodywebsite .pe-4 { + padding-right: 1.5rem !important; +} + +.bodywebsite .pe-5 { + padding-right: 3rem !important; +} + +.bodywebsite .pb-0 { + padding-bottom: 0 !important; +} + +.bodywebsite .pb-1 { + padding-bottom: 0.25rem !important; +} + +.bodywebsite .pb-2 { + padding-bottom: 0.5rem !important; +} + +.bodywebsite .pb-3 { + padding-bottom: 1rem !important; +} + +.bodywebsite .pb-4 { + padding-bottom: 1.5rem !important; +} + +.bodywebsite .pb-5 { + padding-bottom: 3rem !important; +} + +.bodywebsite .ps-0 { + padding-left: 0 !important; +} + +.bodywebsite .ps-1 { + padding-left: 0.25rem !important; +} + +.bodywebsite .ps-2 { + padding-left: 0.5rem !important; +} + +.bodywebsite .ps-3 { + padding-left: 1rem !important; +} + +.bodywebsite .ps-4 { + padding-left: 1.5rem !important; +} + +.bodywebsite .ps-5 { + padding-left: 3rem !important; +} + +.bodywebsite .gap-0 { + gap: 0 !important; +} + +.bodywebsite .gap-1 { + gap: 0.25rem !important; +} + +.bodywebsite .gap-2 { + gap: 0.5rem !important; +} + +.bodywebsite .gap-3 { + gap: 1rem !important; +} + +.bodywebsite .gap-4 { + gap: 1.5rem !important; +} + +.bodywebsite .gap-5 { + gap: 3rem !important; +} + +.bodywebsite .font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.bodywebsite .fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.bodywebsite .fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.bodywebsite .fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.bodywebsite .fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.bodywebsite .fs-5 { + font-size: 1.25rem !important; +} + +.bodywebsite .fs-6 { + font-size: 1rem !important; +} + +.bodywebsite .fst-italic { + font-style: italic !important; +} + +.bodywebsite .fst-normal { + font-style: normal !important; +} + +.bodywebsite .fw-light { + font-weight: 300 !important; +} + +.bodywebsite .fw-lighter { + font-weight: lighter !important; +} + +.bodywebsite .fw-normal { + font-weight: 400 !important; +} + +.bodywebsite .fw-bold { + font-weight: 700 !important; +} + +.bodywebsite .fw-semibold { + font-weight: 600 !important; +} + +.bodywebsite .fw-bolder { + font-weight: bolder !important; +} + +.bodywebsite .lh-1 { + line-height: 1 !important; +} + +.bodywebsite .lh-sm { + line-height: 1.25 !important; +} + +.bodywebsite .lh-base { + line-height: 1.5 !important; +} + +.bodywebsite .lh-lg { + line-height: 2 !important; +} + +.bodywebsite .text-start { + text-align: left !important; +} + +.bodywebsite .text-end { + text-align: right !important; +} + +.bodywebsite .text-center { + text-align: center !important; +} + +.bodywebsite .text-decoration-none { + text-decoration: none !important; +} + +.bodywebsite .text-decoration-underline { + text-decoration: underline !important; +} + +.bodywebsite .text-decoration-line-through { + text-decoration: line-through !important; +} + +.bodywebsite .text-lowercase { + text-transform: lowercase !important; +} + +.bodywebsite .text-uppercase { + text-transform: uppercase !important; +} + +.bodywebsite .text-capitalize { + text-transform: capitalize !important; +} + +.bodywebsite .text-wrap { + white-space: normal !important; +} + +.bodywebsite .text-nowrap { + white-space: nowrap !important; +} + +.bodywebsite .text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +.bodywebsite .text-primary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-secondary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-success { + --bs-text-opacity: 1; +} + +.bodywebsite .text-info { + --bs-text-opacity: 1; +} + +.bodywebsite .text-warning { + --bs-text-opacity: 1; +} + +.bodywebsite .text-danger { + --bs-text-opacity: 1; +} + +.bodywebsite .text-light { + --bs-text-opacity: 1; +} + +.bodywebsite .text-dark { + --bs-text-opacity: 1; +} + +.bodywebsite .text-black { + --bs-text-opacity: 1; +} + +.bodywebsite .text-white { + --bs-text-opacity: 1; +} + +.bodywebsite .text-body { + --bs-text-opacity: 1; +} + +.bodywebsite .text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.bodywebsite .text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.bodywebsite .text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.bodywebsite .text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.bodywebsite .text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.bodywebsite .text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.bodywebsite .text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.bodywebsite .text-opacity-100 { + --bs-text-opacity: 1; +} + +.bodywebsite .bg-primary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-secondary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-success { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-info { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-warning { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-danger { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-light { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-dark { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-black { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-white { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-body { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-transparent { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bodywebsite .bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bodywebsite .bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bodywebsite .bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bodywebsite .bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.bodywebsite .user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.bodywebsite .user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.bodywebsite .user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.bodywebsite .pe-none { + pointer-events: none !important; +} + +.bodywebsite .pe-auto { + pointer-events: auto !important; +} + +.bodywebsite .rounded { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-0 { + border-radius: 0 !important; +} + +.bodywebsite .rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.bodywebsite .rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.bodywebsite .rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.bodywebsite .rounded-5 { + border-radius: var(--bs-border-radius-2xl) !important; +} + +.bodywebsite .rounded-circle { + border-radius: 50% !important; +} + +.bodywebsite .rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.bodywebsite .rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .visible { + visibility: visible !important; +} + +.bodywebsite .invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .bodywebsite .float-sm-start { + float: left !important; + } + + .bodywebsite .float-sm-end { + float: right !important; + } + + .bodywebsite .float-sm-none { + float: none !important; + } + + .bodywebsite .d-sm-inline { + display: inline !important; + } + + .bodywebsite .d-sm-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-sm-block { + display: block !important; + } + + .bodywebsite .d-sm-grid { + display: grid !important; + } + + .bodywebsite .d-sm-table { + display: table !important; + } + + .bodywebsite .d-sm-table-row { + display: table-row !important; + } + + .bodywebsite .d-sm-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-sm-flex { + display: flex !important; + } + + .bodywebsite .d-sm-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-sm-none { + display: none !important; + } + + .bodywebsite .flex-sm-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-sm-row { + flex-direction: row !important; + } + + .bodywebsite .flex-sm-column { + flex-direction: column !important; + } + + .bodywebsite .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-sm-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-sm-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-sm-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-sm-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-sm-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-sm-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-sm-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-sm-center { + align-items: center !important; + } + + .bodywebsite .align-items-sm-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-sm-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-sm-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-sm-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-sm-center { + align-content: center !important; + } + + .bodywebsite .align-content-sm-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-sm-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-sm-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-sm-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-sm-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-sm-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-sm-center { + align-self: center !important; + } + + .bodywebsite .align-self-sm-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-sm-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-sm-first { + order: -1 !important; + } + + .bodywebsite .order-sm-0 { + order: 0 !important; + } + + .bodywebsite .order-sm-1 { + order: 1 !important; + } + + .bodywebsite .order-sm-2 { + order: 2 !important; + } + + .bodywebsite .order-sm-3 { + order: 3 !important; + } + + .bodywebsite .order-sm-4 { + order: 4 !important; + } + + .bodywebsite .order-sm-5 { + order: 5 !important; + } + + .bodywebsite .order-sm-last { + order: 6 !important; + } + + .bodywebsite .m-sm-0 { + margin: 0 !important; + } + + .bodywebsite .m-sm-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-sm-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-sm-3 { + margin: 1rem !important; + } + + .bodywebsite .m-sm-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-sm-5 { + margin: 3rem !important; + } + + .bodywebsite .m-sm-auto { + margin: auto !important; + } + + .bodywebsite .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-sm-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-sm-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-sm-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-sm-auto { + margin-top: auto !important; + } + + .bodywebsite .me-sm-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-sm-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-sm-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-sm-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-sm-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-sm-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-sm-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-sm-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-sm-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-sm-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-sm-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-sm-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-sm-auto { + margin-left: auto !important; + } + + .bodywebsite .p-sm-0 { + padding: 0 !important; + } + + .bodywebsite .p-sm-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-sm-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-sm-3 { + padding: 1rem !important; + } + + .bodywebsite .p-sm-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-sm-5 { + padding: 3rem !important; + } + + .bodywebsite .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-sm-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-sm-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-sm-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-sm-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-sm-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-sm-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-sm-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-sm-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-sm-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-sm-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-sm-0 { + gap: 0 !important; + } + + .bodywebsite .gap-sm-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-sm-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-sm-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-sm-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-sm-5 { + gap: 3rem !important; + } + + .bodywebsite .text-sm-start { + text-align: left !important; + } + + .bodywebsite .text-sm-end { + text-align: right !important; + } + + .bodywebsite .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .bodywebsite .float-md-start { + float: left !important; + } + + .bodywebsite .float-md-end { + float: right !important; + } + + .bodywebsite .float-md-none { + float: none !important; + } + + .bodywebsite .d-md-inline { + display: inline !important; + } + + .bodywebsite .d-md-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-md-block { + display: block !important; + } + + .bodywebsite .d-md-grid { + display: grid !important; + } + + .bodywebsite .d-md-table { + display: table !important; + } + + .bodywebsite .d-md-table-row { + display: table-row !important; + } + + .bodywebsite .d-md-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-md-flex { + display: flex !important; + } + + .bodywebsite .d-md-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-md-none { + display: none !important; + } + + .bodywebsite .flex-md-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-md-row { + flex-direction: row !important; + } + + .bodywebsite .flex-md-column { + flex-direction: column !important; + } + + .bodywebsite .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-md-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-md-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-md-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-md-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-md-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-md-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-md-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-md-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-md-center { + align-items: center !important; + } + + .bodywebsite .align-items-md-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-md-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-md-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-md-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-md-center { + align-content: center !important; + } + + .bodywebsite .align-content-md-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-md-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-md-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-md-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-md-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-md-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-md-center { + align-self: center !important; + } + + .bodywebsite .align-self-md-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-md-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-md-first { + order: -1 !important; + } + + .bodywebsite .order-md-0 { + order: 0 !important; + } + + .bodywebsite .order-md-1 { + order: 1 !important; + } + + .bodywebsite .order-md-2 { + order: 2 !important; + } + + .bodywebsite .order-md-3 { + order: 3 !important; + } + + .bodywebsite .order-md-4 { + order: 4 !important; + } + + .bodywebsite .order-md-5 { + order: 5 !important; + } + + .bodywebsite .order-md-last { + order: 6 !important; + } + + .bodywebsite .m-md-0 { + margin: 0 !important; + } + + .bodywebsite .m-md-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-md-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-md-3 { + margin: 1rem !important; + } + + .bodywebsite .m-md-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-md-5 { + margin: 3rem !important; + } + + .bodywebsite .m-md-auto { + margin: auto !important; + } + + .bodywebsite .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-md-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-md-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-md-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-md-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-md-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-md-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-md-auto { + margin-top: auto !important; + } + + .bodywebsite .me-md-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-md-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-md-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-md-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-md-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-md-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-md-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-md-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-md-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-md-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-md-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-md-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-md-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-md-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-md-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-md-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-md-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-md-auto { + margin-left: auto !important; + } + + .bodywebsite .p-md-0 { + padding: 0 !important; + } + + .bodywebsite .p-md-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-md-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-md-3 { + padding: 1rem !important; + } + + .bodywebsite .p-md-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-md-5 { + padding: 3rem !important; + } + + .bodywebsite .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-md-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-md-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-md-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-md-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-md-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-md-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-md-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-md-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-md-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-md-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-md-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-md-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-md-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-md-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-md-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-md-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-md-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-md-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-md-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-md-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-md-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-md-0 { + gap: 0 !important; + } + + .bodywebsite .gap-md-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-md-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-md-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-md-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-md-5 { + gap: 3rem !important; + } + + .bodywebsite .text-md-start { + text-align: left !important; + } + + .bodywebsite .text-md-end { + text-align: right !important; + } + + .bodywebsite .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .bodywebsite .float-lg-start { + float: left !important; + } + + .bodywebsite .float-lg-end { + float: right !important; + } + + .bodywebsite .float-lg-none { + float: none !important; + } + + .bodywebsite .d-lg-inline { + display: inline !important; + } + + .bodywebsite .d-lg-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-lg-block { + display: block !important; + } + + .bodywebsite .d-lg-grid { + display: grid !important; + } + + .bodywebsite .d-lg-table { + display: table !important; + } + + .bodywebsite .d-lg-table-row { + display: table-row !important; + } + + .bodywebsite .d-lg-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-lg-flex { + display: flex !important; + } + + .bodywebsite .d-lg-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-lg-none { + display: none !important; + } + + .bodywebsite .flex-lg-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-lg-row { + flex-direction: row !important; + } + + .bodywebsite .flex-lg-column { + flex-direction: column !important; + } + + .bodywebsite .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-lg-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-lg-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-lg-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-lg-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-lg-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-lg-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-lg-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-lg-center { + align-items: center !important; + } + + .bodywebsite .align-items-lg-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-lg-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-lg-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-lg-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-lg-center { + align-content: center !important; + } + + .bodywebsite .align-content-lg-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-lg-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-lg-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-lg-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-lg-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-lg-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-lg-center { + align-self: center !important; + } + + .bodywebsite .align-self-lg-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-lg-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-lg-first { + order: -1 !important; + } + + .bodywebsite .order-lg-0 { + order: 0 !important; + } + + .bodywebsite .order-lg-1 { + order: 1 !important; + } + + .bodywebsite .order-lg-2 { + order: 2 !important; + } + + .bodywebsite .order-lg-3 { + order: 3 !important; + } + + .bodywebsite .order-lg-4 { + order: 4 !important; + } + + .bodywebsite .order-lg-5 { + order: 5 !important; + } + + .bodywebsite .order-lg-last { + order: 6 !important; + } + + .bodywebsite .m-lg-0 { + margin: 0 !important; + } + + .bodywebsite .m-lg-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-lg-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-lg-3 { + margin: 1rem !important; + } + + .bodywebsite .m-lg-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-lg-5 { + margin: 3rem !important; + } + + .bodywebsite .m-lg-auto { + margin: auto !important; + } + + .bodywebsite .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-lg-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-lg-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-lg-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-lg-auto { + margin-top: auto !important; + } + + .bodywebsite .me-lg-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-lg-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-lg-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-lg-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-lg-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-lg-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-lg-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-lg-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-lg-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-lg-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-lg-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-lg-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-lg-auto { + margin-left: auto !important; + } + + .bodywebsite .p-lg-0 { + padding: 0 !important; + } + + .bodywebsite .p-lg-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-lg-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-lg-3 { + padding: 1rem !important; + } + + .bodywebsite .p-lg-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-lg-5 { + padding: 3rem !important; + } + + .bodywebsite .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-lg-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-lg-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-lg-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-lg-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-lg-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-lg-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-lg-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-lg-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-lg-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-lg-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-lg-0 { + gap: 0 !important; + } + + .bodywebsite .gap-lg-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-lg-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-lg-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-lg-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-lg-5 { + gap: 3rem !important; + } + + .bodywebsite .text-lg-start { + text-align: left !important; + } + + .bodywebsite .text-lg-end { + text-align: right !important; + } + + .bodywebsite .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .float-xl-start { + float: left !important; + } + + .bodywebsite .float-xl-end { + float: right !important; + } + + .bodywebsite .float-xl-none { + float: none !important; + } + + .bodywebsite .d-xl-inline { + display: inline !important; + } + + .bodywebsite .d-xl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xl-block { + display: block !important; + } + + .bodywebsite .d-xl-grid { + display: grid !important; + } + + .bodywebsite .d-xl-table { + display: table !important; + } + + .bodywebsite .d-xl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xl-flex { + display: flex !important; + } + + .bodywebsite .d-xl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xl-none { + display: none !important; + } + + .bodywebsite .flex-xl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xl-first { + order: -1 !important; + } + + .bodywebsite .order-xl-0 { + order: 0 !important; + } + + .bodywebsite .order-xl-1 { + order: 1 !important; + } + + .bodywebsite .order-xl-2 { + order: 2 !important; + } + + .bodywebsite .order-xl-3 { + order: 3 !important; + } + + .bodywebsite .order-xl-4 { + order: 4 !important; + } + + .bodywebsite .order-xl-5 { + order: 5 !important; + } + + .bodywebsite .order-xl-last { + order: 6 !important; + } + + .bodywebsite .m-xl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xl-start { + text-align: left !important; + } + + .bodywebsite .text-xl-end { + text-align: right !important; + } + + .bodywebsite .text-xl-center { + text-align: center !important; + } +} + +@media (min-width: 1400px) { + .bodywebsite .float-xxl-start { + float: left !important; + } + + .bodywebsite .float-xxl-end { + float: right !important; + } + + .bodywebsite .float-xxl-none { + float: none !important; + } + + .bodywebsite .d-xxl-inline { + display: inline !important; + } + + .bodywebsite .d-xxl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xxl-block { + display: block !important; + } + + .bodywebsite .d-xxl-grid { + display: grid !important; + } + + .bodywebsite .d-xxl-table { + display: table !important; + } + + .bodywebsite .d-xxl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xxl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xxl-flex { + display: flex !important; + } + + .bodywebsite .d-xxl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xxl-none { + display: none !important; + } + + .bodywebsite .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xxl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xxl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xxl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xxl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xxl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xxl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xxl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xxl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xxl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xxl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xxl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xxl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xxl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xxl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xxl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xxl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xxl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xxl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xxl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xxl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xxl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xxl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xxl-first { + order: -1 !important; + } + + .bodywebsite .order-xxl-0 { + order: 0 !important; + } + + .bodywebsite .order-xxl-1 { + order: 1 !important; + } + + .bodywebsite .order-xxl-2 { + order: 2 !important; + } + + .bodywebsite .order-xxl-3 { + order: 3 !important; + } + + .bodywebsite .order-xxl-4 { + order: 4 !important; + } + + .bodywebsite .order-xxl-5 { + order: 5 !important; + } + + .bodywebsite .order-xxl-last { + order: 6 !important; + } + + .bodywebsite .m-xxl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xxl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xxl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xxl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xxl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xxl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xxl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xxl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xxl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xxl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xxl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xxl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xxl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xxl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xxl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xxl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xxl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xxl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xxl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xxl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xxl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xxl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xxl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xxl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xxl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xxl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xxl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xxl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xxl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xxl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xxl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xxl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xxl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xxl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xxl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xxl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xxl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xxl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xxl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xxl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xxl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xxl-start { + text-align: left !important; + } + + .bodywebsite .text-xxl-end { + text-align: right !important; + } + + .bodywebsite .text-xxl-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .fs-1 { + font-size: 2.5rem !important; + } + + .bodywebsite .fs-2 { + font-size: 2rem !important; + } + + .bodywebsite .fs-3 { + font-size: 1.75rem !important; + } + + .bodywebsite .fs-4 { + font-size: 1.5rem !important; + } +} + +@media print { + .bodywebsite .d-print-inline { + display: inline !important; + } + + .bodywebsite .d-print-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-print-block { + display: block !important; + } + + .bodywebsite .d-print-grid { + display: grid !important; + } + + .bodywebsite .d-print-table { + display: table !important; + } + + .bodywebsite .d-print-table-row { + display: table-row !important; + } + + .bodywebsite .d-print-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-print-flex { + display: flex !important; + } + + .bodywebsite .d-print-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-print-none { + display: none !important; + } +} + +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + font-family: Hurricane; +} + +.bodywebsite hr { + margin: 100px; +} + +.bodywebsite header { + align-items: center; + justify-content: center; +} +.bodywebsite .bg { + background-color: #010134; +} + +.bodywebsite #mysection1 { + color: white; + background-color: #010134; + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; +} + +.bodywebsite #main { + padding-top: 15%; +} + +.bodywebsite .btn-perso { + margin: 20px 15px; + font-weight: bold; + background-color: #a600a9; +} +.bodywebsite .btn-perso:hover { + background-color: #79027b; + color: white; +} + +.bodywebsite .btn-perso2 { + font-weight: bold; + background-color: #7700ba; +} +.bodywebsite .btn-perso2:hover { + background-color: #3d0160; + color: white; +} + +.bodywebsite .product { + margin-bottom: 20px; +} + +.bodywebsite .flex { + display: flex; + flex-direction: column; + align-items: center; +} + diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php new file mode 100644 index 00000000000..26adb3ef220 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php @@ -0,0 +1,278 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) { + $original_file = 'blog.rss'; +} + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) { + $attachment = false; +} +if (isset($_GET["attachment"])) { + $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +} +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) { + $attachment = false; +} + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) { + $type = GETPOST('type', 'alpha'); +} else { + $type = dol_mimetype($original_file); +} + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost', 'status'=>1); + if ($l) { + $filters['lang'] = $l; + } + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang($l); + $outputlangs->loadLangs(array("main", "other")); + $title = $desc = $outputlangs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) { + $result = 1; + } else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) { + $attachment = $_GET["attachment"]; + } + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) { + $contenttype = $_GET["contenttype"]; + } + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) { + header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + } + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) { + header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + } else { + header('Cache-Control: private, must-revalidate'); + } + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) { + print 'File '.$outputfile.' was empty.'; + } + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + // Get logos + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed']; + $sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) { + header('Content-Encoding: '.$encoding); + } + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } else { + header('Content-Disposition: inline; filename="'.$filename.'"'); + } + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) { + $db->close(); +} +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-style02.zip b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/bg.webp similarity index 56% rename from htdocs/install/doctemplates/websites/website_template-style02.zip rename to htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/bg.webp index 4a5a0a7eacb..bb1d49b7fb1 100644 Binary files a/htdocs/install/doctemplates/websites/website_template-style02.zip and b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/bg.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/icon.webp b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/icon.webp new file mode 100644 index 00000000000..76d28977fa3 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/medias/image/websitekey/icon.webp differ diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/website_pages.sql b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/website_pages.sql new file mode 100644 index 00000000000..78e198a2223 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/website_pages.sql @@ -0,0 +1,9 @@ +-- File generated by Dolibarr 17.0.0-alpha -- 2022-09-26 11:58:28 UTC --; +-- Page ID 148 -> 1__+MAX_llx_website_page__ - Aliases index --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(1__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'index', '', 'index', '', '', '', '', '1', '2022-07-21 14:41:41', '2022-09-26 13:57:58', null, '', 'page', '__N__ __N__ __N__ __N__ __N__ __N__ __N__ __N__ __N____N__ __N__ Template__N__ ', '__N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Our company

    __N__

    __N__ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Nostrum excepturi ipsa consequatur accusamus eveniet dignissimos necessitatibus provident dolore cupiditate.__N__

    __N__
    __N__

    __N__ It uses utility classes for typography and spacing to space content out within the__N__ larger container.__N__

    __N__

    __N__ __N__ __N__ __N__ __N__ __N__ __N__

    __N__
    __N__
    __N__
    __N__ \"landingpage\"__N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__

    LoremIpsum

    __N__

    __N__ Some quick example text to build on the__N__ card title and make up the bulk of the__N__ card\'s content.__N__

    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    UNLIMITED FOR ALL

    __N__

    Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus molestias voluptatibus voluptatem Lorem ipsum dolor, sit amet consectetur adipisicing elit. Veritatis officia voluptatem incidunt tempore esse porro sequi eveniet eum corrupti quo.

    __N__
    __N__
    __N__

    $79/month

    __N__
    __N__
    __N__

    WHAT YOU WILL GET

    __N__

    Lorem ipsum dolor sit, amet consectetur


    __N__

    Lorem ipsum dolor sit, amet consectetur


    __N__

    Lorem ipsum dolor sit, amet consectetur


    __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Contact us

    __N__
    __N__
    __N__ email ?>
    __N__ getFullAddress() ?>
    __N__
    __N__
    __N__ __N__ __N__
    __N__
    __N__ __N__
    __N__ __N__


    __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__ __N__
    __N__ __N__
    __N__ socialnetworks as $key => $value) {__N__ print \'\';__N__ } ?>__N____N__
    __N__ __N__
    __N__ __N__ __N__ __N__
    __N__ © 2022 Dolibarr:__N__ Dolicloud.com__N__
    __N__ __N__
    __N__
    __N__', '', 0); +UPDATE llx_website SET fk_default_home = 1__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant.jpg new file mode 100644 index 00000000000..226737e4434 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/LICENSE b/htdocs/install/doctemplates/websites/website_template-restaurant/LICENSE new file mode 100644 index 00000000000..1143fd7823a --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/LICENSE @@ -0,0 +1,8 @@ +LICENSE +------- + +Images are provided under the license: +Unsplash+ License + +Rest of templates (HTML and PHP code) content are under license +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/README.md b/htdocs/install/doctemplates/websites/website_template-restaurant/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/LICENSE b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/LICENSE new file mode 100644 index 00000000000..83294e71b2e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/LICENSE @@ -0,0 +1,2 @@ +Image are provided under the Unsplash+ License +Rest of templates (HTML and PHP code) content are GPLv3 diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/README.md b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/about.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/about.php new file mode 100644 index 00000000000..c4816800d17 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/about.php @@ -0,0 +1,5 @@ +ref.'/page169.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/contact.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/contact.php new file mode 100644 index 00000000000..7d5db994e1b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/contact.php @@ -0,0 +1,5 @@ +ref.'/page170.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/htmlheader.html new file mode 100644 index 00000000000..0de0b36283f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/htmlheader.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/index.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/index.php new file mode 100644 index 00000000000..dc10e0099f4 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/index.php @@ -0,0 +1,11 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/manifest.json.php new file mode 100644 index 00000000000..8f844114e48 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/manifest.json.php @@ -0,0 +1,13 @@ + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/master.inc.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/master.inc.php new file mode 100644 index 00000000000..bd25ba5895d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/master.inc.php @@ -0,0 +1,7 @@ + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/menu.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/menu.php new file mode 100644 index 00000000000..7e4cd71a69d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/menu.php @@ -0,0 +1,5 @@ +ref.'/page172.tpl.php'; +?> diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page169.tpl.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page169.tpl.php new file mode 100644 index 00000000000..a592c302c73 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page169.tpl.php @@ -0,0 +1,198 @@ + + + +About us + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    + + +
    + + + +
    +
    +
    + +
    +

    Team Members

    +
    + +
    +
    + + +
    +

    Sophia

    + +

    CEO & Founder

    +
    +
    +
    + +
    +
    + + +

    Benjamin W.

    + +

    Restaurant Manager

    +
    +
    + +
    +
    + + +

    Muchen Jack

    + +

    Senior Chef

    +
    +
    + +
    +
    +
    + + + + +
    + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page170.tpl.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page170.tpl.php new file mode 100644 index 00000000000..c444ce1292d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page170.tpl.php @@ -0,0 +1,480 @@ + + + +Contact us + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +email; + $message = GETPOST('message', 'alpha'); + $cmail = new CMailFile('Contact from website', $to, $from, $message); + if ($cmail->sendfile()) { + ?> + + trans("ErrorFailedToSendMail", $from, $to).'. '.$cmail->error; + } +} +?> +
    + + +
    + + + + +
    +
    +
    +
    +

    Leave a message

    +
    + +
    +
    +
    + + + +
    + +
    + + + +
    + +
    + + + + + + + +
    + +
    + +
    +
    +
    + +
    +
    Weekdays
    + +
    + $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."

    "; + } + ?> +
    + +
    Weekends
    + +
    +

    Saturday and Sunday

    + +

    to be determined !

    +
    +
    + +
    +

    + getFullAddress() ?> +

    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    name; ?>

    +
    + +
    +
    Location
    + +

    getFullAddress(); ?>

    + + Directions +
    + +
    +
    Opening Hours
    + + + $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."

    "; + } + ?> + +

    + Tel: + phone ?> +

    +
    + +
    +
    Social
    + + + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page171.tpl.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page171.tpl.php new file mode 100644 index 00000000000..79bebfe5359 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page171.tpl.php @@ -0,0 +1,720 @@ + + + +index + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + +
    + + +
    +
    +
    +
    +
    +
    +

    + Delicious Steaks +

    + +
    +
    +

    + 4.7/5 +

    + +
    + + + + + +
    +
    + +

    + From 1,206+ Customer + Reviews +

    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    + + +
    + +
    +
    +
    +
    +

    name; ?>

    +
    + +
    +
    Location
    + +

    getFullAddress(); ?>

    + + Directions +
    + +
    +
    Opening Hours
    + + + $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."

    "; + } + ?> + +

    + Tel: + phone ?> +

    +
    + +
    +
    Social
    + + + + +
    +
    + +
    + +
    + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page172.tpl.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page172.tpl.php new file mode 100644 index 00000000000..cf759e644a8 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/page172.tpl.php @@ -0,0 +1,597 @@ + + + +Our menus + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    + + +
    + + + + + + + +
    + +
    +
    +
    +
    +

    name; ?>

    +
    + +
    +
    Location
    + +

    getFullAddress(); ?>

    + + Directions +
    + +
    +
    Opening Hours
    + + + $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."

    "; + } + ?> + +

    + Tel: + phone ?> +

    +
    + +
    +
    Social
    + + + + +
    +
    + +
    + +
    + +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/styles.css.php new file mode 100644 index 00000000000..d945f011dda --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/styles.css.php @@ -0,0 +1,13192 @@ + +@charset "UTF-8"; + +.bodywebsite { + /*! + * Bootstrap v5.2.1 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ + /* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ + /* rtl:begin:remove */ + /* rtl:end:remove */ + /*# sourceMappingURL=bootstrap.css.map */; +} + +.bodywebsite :root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.bodywebsite *, + .bodywebsite *::before, + .bodywebsite *::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + .bodywebsite :root { + scroll-behavior: smooth; + } +} + +.bodywebsite body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +.bodywebsite hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +.bodywebsite h6, .bodywebsite .h6, .bodywebsite h5, .bodywebsite .h5, .bodywebsite h4, .bodywebsite .h4, .bodywebsite h3, .bodywebsite .h3, .bodywebsite h2, .bodywebsite .h2, .bodywebsite h1, .bodywebsite .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +.bodywebsite h1, .bodywebsite .h1 { + font-size: calc(1.375rem + 1.5vw); +} + +@media (min-width: 1200px) { + .bodywebsite h1, .bodywebsite .h1 { + font-size: 2.5rem; + } +} + +.bodywebsite h2, .bodywebsite .h2 { + font-size: calc(1.325rem + 0.9vw); +} + +@media (min-width: 1200px) { + .bodywebsite h2, .bodywebsite .h2 { + font-size: 2rem; + } +} + +.bodywebsite h3, .bodywebsite .h3 { + font-size: calc(1.3rem + 0.6vw); +} + +@media (min-width: 1200px) { + .bodywebsite h3, .bodywebsite .h3 { + font-size: 1.75rem; + } +} + +.bodywebsite h4, .bodywebsite .h4 { + font-size: calc(1.275rem + 0.3vw); +} + +@media (min-width: 1200px) { + .bodywebsite h4, .bodywebsite .h4 { + font-size: 1.5rem; + } +} + +.bodywebsite h5, .bodywebsite .h5 { + font-size: 1.25rem; +} + +.bodywebsite h6, .bodywebsite .h6 { + font-size: 1rem; +} + +.bodywebsite p { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +.bodywebsite address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +.bodywebsite ol, + .bodywebsite ul { + padding-left: 2rem; +} + +.bodywebsite ol, + .bodywebsite ul, + .bodywebsite dl { + margin-top: 0; + margin-bottom: 1rem; +} + +.bodywebsite ol ol, + .bodywebsite ul ul, + .bodywebsite ol ul, + .bodywebsite ul ol { + margin-bottom: 0; +} + +.bodywebsite dt { + font-weight: 700; +} + +.bodywebsite dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +.bodywebsite blockquote { + margin: 0 0 1rem; +} + +.bodywebsite b, + .bodywebsite strong { + font-weight: bolder; +} + +.bodywebsite small, .bodywebsite .small { + font-size: 0.875em; +} + +.bodywebsite mark, .bodywebsite .mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +.bodywebsite sub, + .bodywebsite sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +.bodywebsite sub { + bottom: -0.25em; +} + +.bodywebsite sup { + top: -0.5em; +} + +.bodywebsite a { + color: var(--bs-link-color); + text-decoration: underline; +} + +.bodywebsite a:hover { + color: var(--bs-link-hover-color); +} + +.bodywebsite a:not([href]):not([class]), .bodywebsite a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +.bodywebsite pre, + .bodywebsite code, + .bodywebsite kbd, + .bodywebsite samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +.bodywebsite pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} + +.bodywebsite pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.bodywebsite code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} + +.bodywebsite a > code { + color: inherit; +} + +.bodywebsite kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} + +.bodywebsite kbd kbd { + padding: 0; + font-size: 1em; +} + +.bodywebsite figure { + margin: 0 0 1rem; +} + +.bodywebsite img, + .bodywebsite svg { + vertical-align: middle; +} + +.bodywebsite table { + caption-side: bottom; + border-collapse: collapse; +} + +.bodywebsite caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +.bodywebsite th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +.bodywebsite thead, + .bodywebsite tbody, + .bodywebsite tfoot, + .bodywebsite tr, + .bodywebsite td, + .bodywebsite th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +.bodywebsite label { + display: inline-block; +} + +.bodywebsite button { + border-radius: 0; +} + +.bodywebsite button:focus:not(:focus-visible) { + outline: 0; +} + +.bodywebsite input, + .bodywebsite button, + .bodywebsite select, + .bodywebsite optgroup, + .bodywebsite textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.bodywebsite button, + .bodywebsite select { + text-transform: none; +} + +.bodywebsite [role=button] { + cursor: pointer; +} + +.bodywebsite select { + word-wrap: normal; +} + +.bodywebsite select:disabled { + opacity: 1; +} + +.bodywebsite [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +.bodywebsite button, + .bodywebsite [type=button], + .bodywebsite [type=reset], + .bodywebsite [type=submit] { + -webkit-appearance: button; +} + +.bodywebsite button:not(:disabled), + .bodywebsite [type=button]:not(:disabled), + .bodywebsite [type=reset]:not(:disabled), + .bodywebsite [type=submit]:not(:disabled) { + cursor: pointer; +} + +.bodywebsite ::-moz-focus-inner { + padding: 0; + border-style: none; +} + +.bodywebsite textarea { + resize: vertical; +} + +.bodywebsite fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +.bodywebsite legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} + +@media (min-width: 1200px) { + .bodywebsite legend { + font-size: 1.5rem; + } +} + +.bodywebsite legend + * { + clear: left; +} + +.bodywebsite ::-webkit-datetime-edit-fields-wrapper, + .bodywebsite ::-webkit-datetime-edit-text, + .bodywebsite ::-webkit-datetime-edit-minute, + .bodywebsite ::-webkit-datetime-edit-hour-field, + .bodywebsite ::-webkit-datetime-edit-day-field, + .bodywebsite ::-webkit-datetime-edit-month-field, + .bodywebsite ::-webkit-datetime-edit-year-field { + padding: 0; +} + +.bodywebsite ::-webkit-inner-spin-button { + height: auto; +} + +.bodywebsite [type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +.bodywebsite ::-webkit-search-decoration { + -webkit-appearance: none; +} + +.bodywebsite ::-webkit-color-swatch-wrapper { + padding: 0; +} + +.bodywebsite ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite ::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +.bodywebsite output { + display: inline-block; +} + +.bodywebsite iframe { + border: 0; +} + +.bodywebsite summary { + display: list-item; + cursor: pointer; +} + +.bodywebsite progress { + vertical-align: baseline; +} + +.bodywebsite [hidden] { + display: none !important; +} + +.bodywebsite .lead { + font-size: 1.25rem; + font-weight: 300; +} + +.bodywebsite .display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-1 { + font-size: 5rem; + } +} + +.bodywebsite .display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-2 { + font-size: 4.5rem; + } +} + +.bodywebsite .display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-3 { + font-size: 4rem; + } +} + +.bodywebsite .display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-4 { + font-size: 3.5rem; + } +} + +.bodywebsite .display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-5 { + font-size: 3rem; + } +} + +.bodywebsite .display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .bodywebsite .display-6 { + font-size: 2.5rem; + } +} + +.bodywebsite .list-unstyled { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline { + padding-left: 0; + list-style: none; +} + +.bodywebsite .list-inline-item { + display: inline-block; +} + +.bodywebsite .list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.bodywebsite .initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.bodywebsite .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.bodywebsite .blockquote > :last-child { + margin-bottom: 0; +} + +.bodywebsite .blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .blockquote-footer::before { + content: "— "; +} + +.bodywebsite .img-fluid { + max-width: 100%; + height: auto; +} + +.bodywebsite .img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.bodywebsite .figure { + display: inline-block; +} + +.bodywebsite .figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.bodywebsite .figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .container, + .bodywebsite .container-fluid, + .bodywebsite .container-xxl, + .bodywebsite .container-xl, + .bodywebsite .container-lg, + .bodywebsite .container-md, + .bodywebsite .container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .container-sm, .bodywebsite .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + .bodywebsite .container-xxl, .bodywebsite .container-xl, .bodywebsite .container-lg, .bodywebsite .container-md, .bodywebsite .container-sm, .bodywebsite .container { + max-width: 1320px; + } +} + +.bodywebsite .row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} + +.bodywebsite .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.bodywebsite .col { + flex: 1 0 0%; +} + +.bodywebsite .row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.bodywebsite .row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.bodywebsite .row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.bodywebsite .col-auto { + flex: 0 0 auto; + width: auto; +} + +.bodywebsite .col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.bodywebsite .col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.bodywebsite .col-3 { + flex: 0 0 auto; + width: 25%; +} + +.bodywebsite .col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.bodywebsite .col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.bodywebsite .col-6 { + flex: 0 0 auto; + width: 50%; +} + +.bodywebsite .col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.bodywebsite .col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.bodywebsite .col-9 { + flex: 0 0 auto; + width: 75%; +} + +.bodywebsite .col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.bodywebsite .col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.bodywebsite .col-12 { + flex: 0 0 auto; + width: 100%; +} + +.bodywebsite .offset-1 { + margin-left: 8.33333333%; +} + +.bodywebsite .offset-2 { + margin-left: 16.66666667%; +} + +.bodywebsite .offset-3 { + margin-left: 25%; +} + +.bodywebsite .offset-4 { + margin-left: 33.33333333%; +} + +.bodywebsite .offset-5 { + margin-left: 41.66666667%; +} + +.bodywebsite .offset-6 { + margin-left: 50%; +} + +.bodywebsite .offset-7 { + margin-left: 58.33333333%; +} + +.bodywebsite .offset-8 { + margin-left: 66.66666667%; +} + +.bodywebsite .offset-9 { + margin-left: 75%; +} + +.bodywebsite .offset-10 { + margin-left: 83.33333333%; +} + +.bodywebsite .offset-11 { + margin-left: 91.66666667%; +} + +.bodywebsite .g-0, + .bodywebsite .gx-0 { + --bs-gutter-x: 0; +} + +.bodywebsite .g-0, + .bodywebsite .gy-0 { + --bs-gutter-y: 0; +} + +.bodywebsite .g-1, + .bodywebsite .gx-1 { + --bs-gutter-x: 0.25rem; +} + +.bodywebsite .g-1, + .bodywebsite .gy-1 { + --bs-gutter-y: 0.25rem; +} + +.bodywebsite .g-2, + .bodywebsite .gx-2 { + --bs-gutter-x: 0.5rem; +} + +.bodywebsite .g-2, + .bodywebsite .gy-2 { + --bs-gutter-y: 0.5rem; +} + +.bodywebsite .g-3, + .bodywebsite .gx-3 { + --bs-gutter-x: 1rem; +} + +.bodywebsite .g-3, + .bodywebsite .gy-3 { + --bs-gutter-y: 1rem; +} + +.bodywebsite .g-4, + .bodywebsite .gx-4 { + --bs-gutter-x: 1.5rem; +} + +.bodywebsite .g-4, + .bodywebsite .gy-4 { + --bs-gutter-y: 1.5rem; +} + +.bodywebsite .g-5, + .bodywebsite .gx-5 { + --bs-gutter-x: 3rem; +} + +.bodywebsite .g-5, + .bodywebsite .gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .bodywebsite .col-sm { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-sm-0 { + margin-left: 0; + } + + .bodywebsite .offset-sm-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-sm-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-sm-3 { + margin-left: 25%; + } + + .bodywebsite .offset-sm-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-sm-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-sm-6 { + margin-left: 50%; + } + + .bodywebsite .offset-sm-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-sm-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-sm-9 { + margin-left: 75%; + } + + .bodywebsite .offset-sm-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-sm-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gx-sm-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-sm-0, + .bodywebsite .gy-sm-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-sm-1, + .bodywebsite .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-sm-2, + .bodywebsite .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-sm-3, + .bodywebsite .gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-sm-4, + .bodywebsite .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-sm-5, + .bodywebsite .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px) { + .bodywebsite .col-md { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-md-0 { + margin-left: 0; + } + + .bodywebsite .offset-md-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-md-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-md-3 { + margin-left: 25%; + } + + .bodywebsite .offset-md-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-md-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-md-6 { + margin-left: 50%; + } + + .bodywebsite .offset-md-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-md-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-md-9 { + margin-left: 75%; + } + + .bodywebsite .offset-md-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-md-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-md-0, + .bodywebsite .gx-md-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-md-0, + .bodywebsite .gy-md-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-md-1, + .bodywebsite .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-md-1, + .bodywebsite .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-md-2, + .bodywebsite .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gx-md-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-md-3, + .bodywebsite .gy-md-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-md-4, + .bodywebsite .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gx-md-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-md-5, + .bodywebsite .gy-md-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px) { + .bodywebsite .col-lg { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-lg-0 { + margin-left: 0; + } + + .bodywebsite .offset-lg-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-lg-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-lg-3 { + margin-left: 25%; + } + + .bodywebsite .offset-lg-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-lg-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-lg-6 { + margin-left: 50%; + } + + .bodywebsite .offset-lg-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-lg-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-lg-9 { + margin-left: 75%; + } + + .bodywebsite .offset-lg-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-lg-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gx-lg-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-lg-0, + .bodywebsite .gy-lg-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-lg-1, + .bodywebsite .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-lg-2, + .bodywebsite .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-lg-3, + .bodywebsite .gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-lg-4, + .bodywebsite .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-lg-5, + .bodywebsite .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px) { + .bodywebsite .col-xl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gx-xl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xl-0, + .bodywebsite .gy-xl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xl-1, + .bodywebsite .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xl-2, + .bodywebsite .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xl-3, + .bodywebsite .gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xl-4, + .bodywebsite .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xl-5, + .bodywebsite .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px) { + .bodywebsite .col-xxl { + flex: 1 0 0%; + } + + .bodywebsite .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .bodywebsite .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .bodywebsite .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .bodywebsite .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .bodywebsite .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .bodywebsite .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .bodywebsite .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .bodywebsite .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .bodywebsite .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .bodywebsite .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .bodywebsite .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .bodywebsite .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .bodywebsite .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .bodywebsite .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .bodywebsite .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .bodywebsite .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .bodywebsite .offset-xxl-0 { + margin-left: 0; + } + + .bodywebsite .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .bodywebsite .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .bodywebsite .offset-xxl-3 { + margin-left: 25%; + } + + .bodywebsite .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .bodywebsite .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .bodywebsite .offset-xxl-6 { + margin-left: 50%; + } + + .bodywebsite .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .bodywebsite .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .bodywebsite .offset-xxl-9 { + margin-left: 75%; + } + + .bodywebsite .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .bodywebsite .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gx-xxl-0 { + --bs-gutter-x: 0; + } + + .bodywebsite .g-xxl-0, + .bodywebsite .gy-xxl-0 { + --bs-gutter-y: 0; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .bodywebsite .g-xxl-1, + .bodywebsite .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .bodywebsite .g-xxl-2, + .bodywebsite .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .bodywebsite .g-xxl-3, + .bodywebsite .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .bodywebsite .g-xxl-4, + .bodywebsite .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .bodywebsite .g-xxl-5, + .bodywebsite .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} + +.bodywebsite .table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} + +.bodywebsite .table > tbody { + vertical-align: inherit; +} + +.bodywebsite .table > thead { + vertical-align: bottom; +} + +.bodywebsite .table-group-divider { + border-top: 2px solid currentcolor; +} + +.bodywebsite .caption-top { + caption-side: top; +} + +.bodywebsite .table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.bodywebsite .table-bordered > :not(caption) > * { + border-width: 1px 0; +} + +.bodywebsite .table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.bodywebsite .table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.bodywebsite .table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.bodywebsite .table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.bodywebsite .table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.bodywebsite .table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.bodywebsite .table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .bodywebsite .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +.bodywebsite .form-label { + margin-bottom: 0.5rem; +} + +.bodywebsite .col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.bodywebsite .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.bodywebsite .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.bodywebsite .form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.bodywebsite .form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control { + transition: none; + } +} + +.bodywebsite .form-control[type=file] { + overflow: hidden; +} + +.bodywebsite .form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-control::-webkit-date-and-time-value { + height: 1.5em; +} + +.bodywebsite .form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.bodywebsite .form-control:disabled { + background-color: #e9ecef; + opacity: 1; +} + +.bodywebsite .form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.bodywebsite .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + + .bodywebsite .form-control::file-selector-button { + transition: none; + } +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.bodywebsite .form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.bodywebsite .form-control-plaintext:focus { + outline: 0; +} + +.bodywebsite .form-control-plaintext.form-control-sm, .bodywebsite .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.bodywebsite .form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.bodywebsite .form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +.bodywebsite textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} + +.bodywebsite textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} + +.bodywebsite .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.bodywebsite .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} + +.bodywebsite .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} + +.bodywebsite .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.bodywebsite .form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-select { + transition: none; + } +} + +.bodywebsite .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-select[multiple], .bodywebsite .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} + +.bodywebsite .form-select:disabled { + background-color: #e9ecef; +} + +.bodywebsite .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.bodywebsite .form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} + +.bodywebsite .form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.bodywebsite .form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} + +.bodywebsite .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.bodywebsite .form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} + +.bodywebsite .form-check-input[type=checkbox] { + border-radius: 0.25em; +} + +.bodywebsite .form-check-input[type=radio] { + border-radius: 50%; +} + +.bodywebsite .form-check-input:active { + filter: brightness(90%); +} + +.bodywebsite .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} + +.bodywebsite .form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +.bodywebsite .form-check-input[disabled] ~ .form-check-label, .bodywebsite .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.bodywebsite .form-switch { + padding-left: 2.5em; +} + +.bodywebsite .form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-switch .form-check-input { + transition: none; + } +} + +.bodywebsite .form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.bodywebsite .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} + +.bodywebsite .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.bodywebsite .form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.bodywebsite .btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.bodywebsite .btn-check[disabled] + .btn, .bodywebsite .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.bodywebsite .form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.bodywebsite .form-range:focus { + outline: 0; +} + +.bodywebsite .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.bodywebsite .form-range::-moz-focus-outer { + border: 0; +} + +.bodywebsite .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.bodywebsite .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} + +.bodywebsite .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.bodywebsite .form-range:disabled { + pointer-events: none; +} + +.bodywebsite .form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.bodywebsite .form-floating { + position: relative; +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext, + .bodywebsite .form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} + +.bodywebsite .form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .form-floating > label { + transition: none; + } +} + +.bodywebsite .form-floating > .form-control, + .bodywebsite .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} + +.bodywebsite .form-floating > .form-control::-moz-placeholder, .bodywebsite .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control::placeholder, + .bodywebsite .form-floating > .form-control-plaintext::placeholder { + color: transparent; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown), .bodywebsite .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:focus, .bodywebsite .form-floating > .form-control:not(:placeholder-shown), + .bodywebsite .form-floating > .form-control-plaintext:focus, + .bodywebsite .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill, + .bodywebsite .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.bodywebsite .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:focus ~ label, + .bodywebsite .form-floating > .form-control:not(:placeholder-shown) ~ label, + .bodywebsite .form-floating > .form-control-plaintext ~ label, + .bodywebsite .form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.bodywebsite .form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.bodywebsite .input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.bodywebsite .input-group > .form-control, + .bodywebsite .input-group > .form-select, + .bodywebsite .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} + +.bodywebsite .input-group > .form-control:focus, + .bodywebsite .input-group > .form-select:focus, + .bodywebsite .input-group > .form-floating:focus-within { + z-index: 5; +} + +.bodywebsite .input-group .btn { + position: relative; + z-index: 2; +} + +.bodywebsite .input-group .btn:focus { + z-index: 5; +} + +.bodywebsite .input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.bodywebsite .input-group-lg > .form-control, + .bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-lg > .input-group-text, + .bodywebsite .input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.bodywebsite .input-group-sm > .form-control, + .bodywebsite .input-group-sm > .form-select, + .bodywebsite .input-group-sm > .input-group-text, + .bodywebsite .input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.bodywebsite .input-group-lg > .form-select, + .bodywebsite .input-group-sm > .form-select { + padding-right: 3rem; +} + +.bodywebsite .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, + .bodywebsite .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), + .bodywebsite .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, + .bodywebsite .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .input-group > .form-floating:not(:first-child) > .form-control, + .bodywebsite .input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.bodywebsite .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :valid ~ .valid-feedback, + .bodywebsite .was-validated :valid ~ .valid-tooltip, + .bodywebsite .is-valid ~ .valid-feedback, + .bodywebsite .is-valid ~ .valid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:valid, .bodywebsite .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:valid:focus, .bodywebsite .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:valid, .bodywebsite textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:valid, .bodywebsite .form-select.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-select:valid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:valid:not([multiple])[size="1"], .bodywebsite .form-select.is-valid:not([multiple]):not([size]), .bodywebsite .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:valid:focus, .bodywebsite .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-control-color:valid, .bodywebsite .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:valid, .bodywebsite .form-check-input.is-valid { + border-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:checked, .bodywebsite .form-check-input.is-valid:checked { + background-color: #198754; +} + +.bodywebsite .was-validated .form-check-input:valid:focus, .bodywebsite .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.bodywebsite .was-validated .form-check-input:valid ~ .form-check-label, .bodywebsite .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.bodywebsite .form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):valid, .bodywebsite .input-group > .form-control:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):valid, + .bodywebsite .input-group > .form-select:not(:focus).is-valid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):valid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.bodywebsite .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.bodywebsite .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.bodywebsite .was-validated :invalid ~ .invalid-feedback, + .bodywebsite .was-validated :invalid ~ .invalid-tooltip, + .bodywebsite .is-invalid ~ .invalid-feedback, + .bodywebsite .is-invalid ~ .invalid-tooltip { + display: block; +} + +.bodywebsite .was-validated .form-control:invalid, .bodywebsite .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-control:invalid:focus, .bodywebsite .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated textarea.form-control:invalid, .bodywebsite textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.bodywebsite .was-validated .form-select:invalid, .bodywebsite .form-select.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-select:invalid:not([multiple]):not([size]), .bodywebsite .was-validated .form-select:invalid:not([multiple])[size="1"], .bodywebsite .form-select.is-invalid:not([multiple]):not([size]), .bodywebsite .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.bodywebsite .was-validated .form-select:invalid:focus, .bodywebsite .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-control-color:invalid, .bodywebsite .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.bodywebsite .was-validated .form-check-input:invalid, .bodywebsite .form-check-input.is-invalid { + border-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:checked, .bodywebsite .form-check-input.is-invalid:checked { + background-color: #dc3545; +} + +.bodywebsite .was-validated .form-check-input:invalid:focus, .bodywebsite .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.bodywebsite .was-validated .form-check-input:invalid ~ .form-check-label, .bodywebsite .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.bodywebsite .form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.bodywebsite .was-validated .input-group > .form-control:not(:focus):invalid, .bodywebsite .input-group > .form-control:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-select:not(:focus):invalid, + .bodywebsite .input-group > .form-select:not(:focus).is-invalid, + .bodywebsite .was-validated .input-group > .form-floating:not(:focus-within):invalid, + .bodywebsite .input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.bodywebsite .btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .btn { + transition: none; + } +} + +.bodywebsite :not(.btn-check) + .btn:hover, .bodywebsite .btn:first-child:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} + +.bodywebsite .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn-check:checked + .btn, .bodywebsite :not(.btn-check) + .btn:active, .bodywebsite .btn:first-child:active, .bodywebsite .btn.active, .bodywebsite .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} + +.bodywebsite .btn-check:checked + .btn:focus-visible, .bodywebsite :not(.btn-check) + .btn:active:focus-visible, .bodywebsite .btn:first-child:active:focus-visible, .bodywebsite .btn.active:focus-visible, .bodywebsite .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} + +.bodywebsite .btn:disabled, .bodywebsite .btn.disabled, .bodywebsite fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.bodywebsite .btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.bodywebsite .btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.bodywebsite .btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.bodywebsite .btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.bodywebsite .btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.bodywebsite .btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.bodywebsite .btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.bodywebsite .btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.bodywebsite .btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.bodywebsite .btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.bodywebsite .btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} + +.bodywebsite .btn-link:focus-visible { + color: var(--bs-btn-color); +} + +.bodywebsite .btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.bodywebsite .btn-lg, .bodywebsite .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 0.5rem; +} + +.bodywebsite .btn-sm, .bodywebsite .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: 0.25rem; +} + +.bodywebsite .fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .fade { + transition: none; + } +} + +.bodywebsite .fade:not(.show) { + opacity: 0; +} + +.bodywebsite .collapse:not(.show) { + display: none; +} + +.bodywebsite .collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing { + transition: none; + } +} + +.bodywebsite .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .collapsing.collapse-horizontal { + transition: none; + } +} + +.bodywebsite .dropup, + .bodywebsite .dropend, + .bodywebsite .dropdown, + .bodywebsite .dropstart, + .bodywebsite .dropup-center, + .bodywebsite .dropdown-center { + position: relative; +} + +.bodywebsite .dropdown-toggle { + white-space: nowrap; +} + +.bodywebsite .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-dropdown-link-color: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} + +.bodywebsite .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropdown-menu-start { + --bs-position: start; +} + +.bodywebsite .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.bodywebsite .dropdown-menu-end { + --bs-position: end; +} + +.bodywebsite .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .bodywebsite .dropdown-menu-sm-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-sm-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .bodywebsite .dropdown-menu-md-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-md-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .bodywebsite .dropdown-menu-lg-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-lg-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .bodywebsite .dropdown-menu-xl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1400px) { + .bodywebsite .dropdown-menu-xxl-start { + --bs-position: start; + } + + .bodywebsite .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .bodywebsite .dropdown-menu-xxl-end { + --bs-position: end; + } + + .bodywebsite .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +.bodywebsite .dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.bodywebsite .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.bodywebsite .dropend .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.bodywebsite .dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.bodywebsite .dropstart .dropdown-toggle::after { + display: none; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.bodywebsite .dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.bodywebsite .dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.bodywebsite .dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.bodywebsite .dropdown-item:hover, .bodywebsite .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} + +.bodywebsite .dropdown-item.active, .bodywebsite .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} + +.bodywebsite .dropdown-item.disabled, .bodywebsite .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.bodywebsite .dropdown-menu.show { + display: block; +} + +.bodywebsite .dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.bodywebsite .dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.bodywebsite .dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.bodywebsite .btn-group, + .bodywebsite .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.bodywebsite .btn-group > .btn, + .bodywebsite .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.bodywebsite .btn-group > .btn-check:checked + .btn, + .bodywebsite .btn-group > .btn-check:focus + .btn, + .bodywebsite .btn-group > .btn:hover, + .bodywebsite .btn-group > .btn:focus, + .bodywebsite .btn-group > .btn:active, + .bodywebsite .btn-group > .btn.active, + .bodywebsite .btn-group-vertical > .btn-check:checked + .btn, + .bodywebsite .btn-group-vertical > .btn-check:focus + .btn, + .bodywebsite .btn-group-vertical > .btn:hover, + .bodywebsite .btn-group-vertical > .btn:focus, + .bodywebsite .btn-group-vertical > .btn:active, + .bodywebsite .btn-group-vertical > .btn.active { + z-index: 1; +} + +.bodywebsite .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.bodywebsite .btn-toolbar .input-group { + width: auto; +} + +.bodywebsite .btn-group { + border-radius: 0.375rem; +} + +.bodywebsite .btn-group > :not(.btn-check:first-child) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.bodywebsite .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group > .btn.dropdown-toggle-split:first-child, + .bodywebsite .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.bodywebsite .btn-group > .btn:nth-child(n+3), + .bodywebsite .btn-group > :not(.btn-check) + .btn, + .bodywebsite .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.bodywebsite .dropdown-toggle-split::after, .bodywebsite .dropup .dropdown-toggle-split::after, .bodywebsite .dropend .dropdown-toggle-split::after { + margin-left: 0; +} + +.bodywebsite .dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.bodywebsite .btn-sm + .dropdown-toggle-split, .bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.bodywebsite .btn-lg + .dropdown-toggle-split, .bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.bodywebsite .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.bodywebsite .btn-group-vertical > .btn, + .bodywebsite .btn-group-vertical > .btn-group { + width: 100%; +} + +.bodywebsite .btn-group-vertical > .btn:not(:first-child), + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.bodywebsite .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .bodywebsite .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.bodywebsite .btn-group-vertical > .btn ~ .btn, + .bodywebsite .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .nav-link { + transition: none; + } +} + +.bodywebsite .nav-link:hover, .bodywebsite .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} + +.bodywebsite .nav-link.disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.bodywebsite .nav-tabs { + --bs-nav-tabs-border-width: 1px; + --bs-nav-tabs-border-color: #dee2e6; + --bs-nav-tabs-border-radius: 0.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} + +.bodywebsite .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} + +.bodywebsite .nav-tabs .nav-link:hover, .bodywebsite .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} + +.bodywebsite .nav-tabs .nav-link.disabled, .bodywebsite .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-tabs .nav-link.active, + .bodywebsite .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} + +.bodywebsite .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.bodywebsite .nav-pills { + --bs-nav-pills-border-radius: 0.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} + +.bodywebsite .nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} + +.bodywebsite .nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} + +.bodywebsite .nav-pills .nav-link.active, + .bodywebsite .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.bodywebsite .nav-fill > .nav-link, + .bodywebsite .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.bodywebsite .nav-justified > .nav-link, + .bodywebsite .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.bodywebsite .nav-fill .nav-item .nav-link, + .bodywebsite .nav-justified .nav-item .nav-link { + width: 100%; +} + +.bodywebsite .tab-content > .tab-pane { + display: none; +} + +.bodywebsite .tab-content > .active { + display: block; +} + +.bodywebsite .navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} + +.bodywebsite .navbar > .container, + .bodywebsite .navbar > .container-fluid, + .bodywebsite .navbar > .container-sm, + .bodywebsite .navbar > .container-md, + .bodywebsite .navbar > .container-lg, + .bodywebsite .navbar > .container-xl, + .bodywebsite .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} + +.bodywebsite .navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} + +.bodywebsite .navbar-brand:hover, .bodywebsite .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.bodywebsite .navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.bodywebsite .navbar-nav .show > .nav-link, + .bodywebsite .navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-nav .dropdown-menu { + position: static; +} + +.bodywebsite .navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} + +.bodywebsite .navbar-text a, + .bodywebsite .navbar-text a:hover, + .bodywebsite .navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.bodywebsite .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.bodywebsite .navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .navbar-toggler { + transition: none; + } +} + +.bodywebsite .navbar-toggler:hover { + text-decoration: none; +} + +.bodywebsite .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.bodywebsite .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.bodywebsite .navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .bodywebsite .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-sm .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-md .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-md .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-lg .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + + .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + + .bodywebsite .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + + .bodywebsite .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + + .bodywebsite .navbar-expand-xxl .navbar-toggler { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + + .bodywebsite .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +.bodywebsite .navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} + +.bodywebsite .navbar-expand .navbar-nav { + flex-direction: row; +} + +.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.bodywebsite .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} + +.bodywebsite .navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.bodywebsite .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.bodywebsite .navbar-expand .navbar-toggler { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-header { + display: none; +} + +.bodywebsite .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.bodywebsite .navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.bodywebsite .card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} + +.bodywebsite .card > hr { + margin-right: 0; + margin-left: 0; +} + +.bodywebsite .card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.bodywebsite .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card > .card-header + .list-group, + .bodywebsite .card > .list-group + .card-footer { + border-top: 0; +} + +.bodywebsite .card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.bodywebsite .card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.bodywebsite .card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.bodywebsite .card-text:last-child { + margin-bottom: 0; +} + +.bodywebsite .card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.bodywebsite .card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.bodywebsite .card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} + +.bodywebsite .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} + +.bodywebsite .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.bodywebsite .card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.bodywebsite .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top, + .bodywebsite .card-img-bottom { + width: 100%; +} + +.bodywebsite .card-img, + .bodywebsite .card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-img, + .bodywebsite .card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.bodywebsite .card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} + +@media (min-width: 576px) { + .bodywebsite .card-group { + display: flex; + flex-flow: row wrap; + } + + .bodywebsite .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + + .bodywebsite .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-top, + .bodywebsite .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:last-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-top, + .bodywebsite .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + + .bodywebsite .card-group > .card:not(:first-child) .card-img-bottom, + .bodywebsite .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.bodywebsite .accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='var%28--bs-body-color%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.bodywebsite .accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button { + transition: none; + } +} + +.bodywebsite .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} + +.bodywebsite .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .accordion-button::after { + transition: none; + } +} + +.bodywebsite .accordion-button:hover { + z-index: 2; +} + +.bodywebsite .accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.bodywebsite .accordion-header { + margin-bottom: 0; +} + +.bodywebsite .accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} + +.bodywebsite .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:not(:first-of-type) { + border-top: 0; +} + +.bodywebsite .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} + +.bodywebsite .accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.bodywebsite .accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.bodywebsite .accordion-flush .accordion-collapse { + border-width: 0; +} + +.bodywebsite .accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.bodywebsite .accordion-flush .accordion-item:first-child { + border-top: 0; +} + +.bodywebsite .accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.bodywebsite .accordion-flush .accordion-item .accordion-button, .bodywebsite .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; +} + +.bodywebsite .breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-divider-color: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} + +.bodywebsite .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/"); +} + +.bodywebsite .breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.bodywebsite .pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.bodywebsite .page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .page-link { + transition: none; + } +} + +.bodywebsite .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} + +.bodywebsite .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} + +.bodywebsite .page-link.active, .bodywebsite .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} + +.bodywebsite .page-link.disabled, .bodywebsite .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.bodywebsite .page-item:not(:first-child) .page-link { + margin-left: -1px; +} + +.bodywebsite .page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.bodywebsite .pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: 0.5rem; +} + +.bodywebsite .pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: 0.25rem; +} + +.bodywebsite .badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} + +.bodywebsite .badge:empty { + display: none; +} + +.bodywebsite .btn .badge { + position: relative; + top: -1px; +} + +.bodywebsite .alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: 1px solid var(--bs-alert-border-color); + --bs-alert-border-radius: 0.375rem; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.bodywebsite .alert-heading { + color: inherit; +} + +.bodywebsite .alert-link { + font-weight: 700; +} + +.bodywebsite .alert-dismissible { + padding-right: 3rem; +} + +.bodywebsite .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.bodywebsite .alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} + +.bodywebsite .alert-primary .alert-link { + color: #06357a; +} + +.bodywebsite .alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} + +.bodywebsite .alert-secondary .alert-link { + color: #34383c; +} + +.bodywebsite .alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} + +.bodywebsite .alert-success .alert-link { + color: #0c4128; +} + +.bodywebsite .alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} + +.bodywebsite .alert-info .alert-link { + color: #04414d; +} + +.bodywebsite .alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} + +.bodywebsite .alert-warning .alert-link { + color: #523e02; +} + +.bodywebsite .alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} + +.bodywebsite .alert-danger .alert-link { + color: #6a1a21; +} + +.bodywebsite .alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} + +.bodywebsite .alert-light .alert-link { + color: #4f5050; +} + +.bodywebsite .alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} + +.bodywebsite .alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +.bodywebsite .progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.bodywebsite .progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar { + transition: none; + } +} + +.bodywebsite .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.bodywebsite .progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.bodywebsite .list-group { + --bs-list-group-color: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.bodywebsite .list-group-numbered { + list-style-type: none; + counter-reset: section; +} + +.bodywebsite .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.bodywebsite .list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} + +.bodywebsite .list-group-item-action:hover, .bodywebsite .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} + +.bodywebsite .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.bodywebsite .list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} + +.bodywebsite .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.bodywebsite .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} + +.bodywebsite .list-group-item.disabled, .bodywebsite .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} + +.bodywebsite .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} + +.bodywebsite .list-group-item + .list-group-item { + border-top-width: 0; +} + +.bodywebsite .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-horizontal { + flex-direction: row; +} + +.bodywebsite .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} + +.bodywebsite .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .bodywebsite .list-group-horizontal-sm { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 768px) { + .bodywebsite .list-group-horizontal-md { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 992px) { + .bodywebsite .list-group-horizontal-lg { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1200px) { + .bodywebsite .list-group-horizontal-xl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +@media (min-width: 1400px) { + .bodywebsite .list-group-horizontal-xxl { + flex-direction: row; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + + .bodywebsite .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} + +.bodywebsite .list-group-flush { + border-radius: 0; +} + +.bodywebsite .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} + +.bodywebsite .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.bodywebsite .list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} + +.bodywebsite .list-group-item-primary.list-group-item-action:hover, .bodywebsite .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} + +.bodywebsite .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.bodywebsite .list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action:hover, .bodywebsite .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} + +.bodywebsite .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.bodywebsite .list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} + +.bodywebsite .list-group-item-success.list-group-item-action:hover, .bodywebsite .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} + +.bodywebsite .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.bodywebsite .list-group-item-info { + color: #055160; + background-color: #cff4fc; +} + +.bodywebsite .list-group-item-info.list-group-item-action:hover, .bodywebsite .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} + +.bodywebsite .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.bodywebsite .list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} + +.bodywebsite .list-group-item-warning.list-group-item-action:hover, .bodywebsite .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} + +.bodywebsite .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.bodywebsite .list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} + +.bodywebsite .list-group-item-danger.list-group-item-action:hover, .bodywebsite .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} + +.bodywebsite .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.bodywebsite .list-group-item-light { + color: #636464; + background-color: #fefefe; +} + +.bodywebsite .list-group-item-light.list-group-item-action:hover, .bodywebsite .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} + +.bodywebsite .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.bodywebsite .list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} + +.bodywebsite .list-group-item-dark.list-group-item-action:hover, .bodywebsite .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} + +.bodywebsite .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.bodywebsite .btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} + +.bodywebsite .btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} + +.bodywebsite .btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} + +.bodywebsite .btn-close:disabled, .bodywebsite .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.bodywebsite .btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.bodywebsite .toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-bg: rgba(255, 255, 255, 0.85); + --bs-toast-border-width: 1px; + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} + +.bodywebsite .toast.showing { + opacity: 0; +} + +.bodywebsite .toast:not(.show) { + display: none; +} + +.bodywebsite .toast-container { + position: absolute; + z-index: var(--bs-toast-zindex); + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.bodywebsite .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.bodywebsite .toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} + +.bodywebsite .toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.bodywebsite .toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.bodywebsite .modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: 1px; + --bs-modal-border-radius: 0.5rem; + --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-modal-inner-border-radius: calc(0.5rem - 1px); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: 1px; + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: 1px; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.bodywebsite .modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} + +.bodywebsite .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .modal.fade .modal-dialog { + transition: none; + } +} + +.bodywebsite .modal.show .modal-dialog { + transform: none; +} + +.bodywebsite .modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.bodywebsite .modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} + +.bodywebsite .modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.bodywebsite .modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.bodywebsite .modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.bodywebsite .modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} + +.bodywebsite .modal-backdrop.fade { + opacity: 0; +} + +.bodywebsite .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.bodywebsite .modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.bodywebsite .modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.bodywebsite .modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.bodywebsite .modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} + +.bodywebsite .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .bodywebsite .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + } + + .bodywebsite .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + + .bodywebsite .modal-sm { + --bs-modal-width: 300px; + } +} + +@media (min-width: 992px) { + .bodywebsite .modal-lg, + .bodywebsite .modal-xl { + --bs-modal-width: 800px; + } +} + +@media (min-width: 1200px) { + .bodywebsite .modal-xl { + --bs-modal-width: 1140px; + } +} + +.bodywebsite .modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} + +.bodywebsite .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-header, + .bodywebsite .modal-fullscreen .modal-footer { + border-radius: 0; +} + +.bodywebsite .modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .bodywebsite .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-header, + .bodywebsite .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-header, + .bodywebsite .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-header, + .bodywebsite .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-header, + .bodywebsite .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-header, + .bodywebsite .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + + .bodywebsite .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} + +.bodywebsite .tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} + +.bodywebsite .tooltip.show { + opacity: var(--bs-tooltip-opacity); +} + +.bodywebsite .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} + +.bodywebsite .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bodywebsite .bs-tooltip-top .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-end .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bodywebsite .bs-tooltip-bottom .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} + +.bodywebsite .bs-tooltip-start .tooltip-arrow::before, .bodywebsite .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +.bodywebsite .tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.bodywebsite .popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: 0.5rem; + --bs-popover-inner-border-radius: calc(0.5rem - 1px); + --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} + +.bodywebsite .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} + +.bodywebsite .popover .popover-arrow::before, .bodywebsite .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-top > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-top > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-end > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} + +.bodywebsite .bs-popover-end > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-end > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-bottom > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} + +.bodywebsite .bs-popover-bottom .popover-header::before, .bodywebsite .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +.bodywebsite .bs-popover-start > .popover-arrow, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} + +.bodywebsite .bs-popover-start > .popover-arrow::before, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} + +.bodywebsite .bs-popover-start > .popover-arrow::after, .bodywebsite .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +.bodywebsite .popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} + +.bodywebsite .popover-header:empty { + display: none; +} + +.bodywebsite .popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.bodywebsite .carousel { + position: relative; +} + +.bodywebsite .carousel.pointer-event { + touch-action: pan-y; +} + +.bodywebsite .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.bodywebsite .carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-item { + transition: none; + } +} + +.bodywebsite .carousel-item.active, + .bodywebsite .carousel-item-next, + .bodywebsite .carousel-item-prev { + display: block; +} + +.bodywebsite .carousel-item-next:not(.carousel-item-start), + .bodywebsite .active.carousel-item-end { + transform: translateX(100%); +} + +.bodywebsite .carousel-item-prev:not(.carousel-item-end), + .bodywebsite .active.carousel-item-start { + transform: translateX(-100%); +} + +.bodywebsite .carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.bodywebsite .carousel-fade .carousel-item.active, + .bodywebsite .carousel-fade .carousel-item-next.carousel-item-start, + .bodywebsite .carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-fade .active.carousel-item-start, + .bodywebsite .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-control-prev, + .bodywebsite .carousel-control-next { + transition: none; + } +} + +.bodywebsite .carousel-control-prev:hover, .bodywebsite .carousel-control-prev:focus, + .bodywebsite .carousel-control-next:hover, + .bodywebsite .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.bodywebsite .carousel-control-prev { + left: 0; +} + +.bodywebsite .carousel-control-next { + right: 0; +} + +.bodywebsite .carousel-control-prev-icon, + .bodywebsite .carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.bodywebsite .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.bodywebsite .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} + +.bodywebsite .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .carousel-indicators [data-bs-target] { + transition: none; + } +} + +.bodywebsite .carousel-indicators .active { + opacity: 1; +} + +.bodywebsite .carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.bodywebsite .carousel-dark .carousel-control-prev-icon, + .bodywebsite .carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} + +.bodywebsite .carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} + +.bodywebsite .carousel-dark .carousel-caption { + color: #000; +} + +.bodywebsite .spinner-grow, + .bodywebsite .spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + -webkit-animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.bodywebsite .spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.bodywebsite .spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + + 50% { + opacity: 1; + transform: none; + } +} + +.bodywebsite .spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.bodywebsite .spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .spinner-border, + .bodywebsite .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} + +.bodywebsite .offcanvas, .bodywebsite .offcanvas-xxl, .bodywebsite .offcanvas-xl, .bodywebsite .offcanvas-lg, .bodywebsite .offcanvas-md, .bodywebsite .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-sm { + transition: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 575.98px) { + .bodywebsite .offcanvas-sm.showing, .bodywebsite .offcanvas-sm.hiding, .bodywebsite .offcanvas-sm.show { + visibility: visible; + } +} + +@media (min-width: 576px) { + .bodywebsite .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-sm .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-md { + transition: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 767.98px) { + .bodywebsite .offcanvas-md.showing, .bodywebsite .offcanvas-md.hiding, .bodywebsite .offcanvas-md.show { + visibility: visible; + } +} + +@media (min-width: 768px) { + .bodywebsite .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-md .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-lg { + transition: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 991.98px) { + .bodywebsite .offcanvas-lg.showing, .bodywebsite .offcanvas-lg.hiding, .bodywebsite .offcanvas-lg.show { + visibility: visible; + } +} + +@media (min-width: 992px) { + .bodywebsite .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-lg .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xl { + transition: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1199.98px) { + .bodywebsite .offcanvas-xl.showing, .bodywebsite .offcanvas-xl.hiding, .bodywebsite .offcanvas-xl.show { + visibility: visible; + } +} + +@media (min-width: 1200px) { + .bodywebsite .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} + +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas-xxl { + transition: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} + +@media (max-width: 1399.98px) { + .bodywebsite .offcanvas-xxl.showing, .bodywebsite .offcanvas-xxl.hiding, .bodywebsite .offcanvas-xxl.show { + visibility: visible; + } +} + +@media (min-width: 1400px) { + .bodywebsite .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + + .bodywebsite .offcanvas-xxl .offcanvas-header { + display: none; + } + + .bodywebsite .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.bodywebsite .offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .bodywebsite .offcanvas { + transition: none; + } +} + +.bodywebsite .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} + +.bodywebsite .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} + +.bodywebsite .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} + +.bodywebsite .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.show:not(.hiding) { + transform: none; +} + +.bodywebsite .offcanvas.showing, .bodywebsite .offcanvas.hiding, .bodywebsite .offcanvas.show { + visibility: visible; +} + +.bodywebsite .offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.bodywebsite .offcanvas-backdrop.fade { + opacity: 0; +} + +.bodywebsite .offcanvas-backdrop.show { + opacity: 0.5; +} + +.bodywebsite .offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} + +.bodywebsite .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); +} + +.bodywebsite .offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.bodywebsite .offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.bodywebsite .placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} + +.bodywebsite .placeholder.btn::before { + display: inline-block; + content: ""; +} + +.bodywebsite .placeholder-xs { + min-height: 0.6em; +} + +.bodywebsite .placeholder-sm { + min-height: 0.8em; +} + +.bodywebsite .placeholder-lg { + min-height: 1.2em; +} + +.bodywebsite .placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +.bodywebsite .placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +.bodywebsite .clearfix::after { + display: block; + clear: both; + content: ""; +} + +.bodywebsite .text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.bodywebsite .link-primary { + color: #0d6efd !important; +} + +.bodywebsite .link-primary:hover, .bodywebsite .link-primary:focus { + color: #0a58ca !important; +} + +.bodywebsite .link-secondary { + color: #6c757d !important; +} + +.bodywebsite .link-secondary:hover, .bodywebsite .link-secondary:focus { + color: #565e64 !important; +} + +.bodywebsite .link-success { + color: #198754 !important; +} + +.bodywebsite .link-success:hover, .bodywebsite .link-success:focus { + color: #146c43 !important; +} + +.bodywebsite .link-info { + color: #0dcaf0 !important; +} + +.bodywebsite .link-info:hover, .bodywebsite .link-info:focus { + color: #3dd5f3 !important; +} + +.bodywebsite .link-warning { + color: #ffc107 !important; +} + +.bodywebsite .link-warning:hover, .bodywebsite .link-warning:focus { + color: #ffcd39 !important; +} + +.bodywebsite .link-danger { + color: #dc3545 !important; +} + +.bodywebsite .link-danger:hover, .bodywebsite .link-danger:focus { + color: #b02a37 !important; +} + +.bodywebsite .link-light { + color: #f8f9fa !important; +} + +.bodywebsite .link-light:hover, .bodywebsite .link-light:focus { + color: #f9fafb !important; +} + +.bodywebsite .link-dark { + color: #212529 !important; +} + +.bodywebsite .link-dark:hover, .bodywebsite .link-dark:focus { + color: #1a1e21 !important; +} + +.bodywebsite .ratio { + position: relative; + width: 100%; +} + +.bodywebsite .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} + +.bodywebsite .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.bodywebsite .ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.bodywebsite .ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.bodywebsite .ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.bodywebsite .ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.bodywebsite .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.bodywebsite .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.bodywebsite .sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .bodywebsite .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 768px) { + .bodywebsite .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 992px) { + .bodywebsite .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1200px) { + .bodywebsite .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +@media (min-width: 1400px) { + .bodywebsite .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + + .bodywebsite .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} + +.bodywebsite .hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.bodywebsite .vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.bodywebsite .visually-hidden, + .bodywebsite .visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.bodywebsite .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.bodywebsite .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.bodywebsite .vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.bodywebsite .align-baseline { + vertical-align: baseline !important; +} + +.bodywebsite .align-top { + vertical-align: top !important; +} + +.bodywebsite .align-middle { + vertical-align: middle !important; +} + +.bodywebsite .align-bottom { + vertical-align: bottom !important; +} + +.bodywebsite .align-text-bottom { + vertical-align: text-bottom !important; +} + +.bodywebsite .align-text-top { + vertical-align: text-top !important; +} + +.bodywebsite .float-start { + float: left !important; +} + +.bodywebsite .float-end { + float: right !important; +} + +.bodywebsite .float-none { + float: none !important; +} + +.bodywebsite .opacity-0 { + opacity: 0 !important; +} + +.bodywebsite .opacity-25 { + opacity: 0.25 !important; +} + +.bodywebsite .opacity-50 { + opacity: 0.5 !important; +} + +.bodywebsite .opacity-75 { + opacity: 0.75 !important; +} + +.bodywebsite .opacity-100 { + opacity: 1 !important; +} + +.bodywebsite .overflow-auto { + overflow: auto !important; +} + +.bodywebsite .overflow-hidden { + overflow: hidden !important; +} + +.bodywebsite .overflow-visible { + overflow: visible !important; +} + +.bodywebsite .overflow-scroll { + overflow: scroll !important; +} + +.bodywebsite .d-inline { + display: inline !important; +} + +.bodywebsite .d-inline-block { + display: inline-block !important; +} + +.bodywebsite .d-block { + display: block !important; +} + +.bodywebsite .d-grid { + display: grid !important; +} + +.bodywebsite .d-table { + display: table !important; +} + +.bodywebsite .d-table-row { + display: table-row !important; +} + +.bodywebsite .d-table-cell { + display: table-cell !important; +} + +.bodywebsite .d-flex { + display: flex !important; +} + +.bodywebsite .d-inline-flex { + display: inline-flex !important; +} + +.bodywebsite .d-none { + display: none !important; +} + +.bodywebsite .shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.bodywebsite .shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.bodywebsite .shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.bodywebsite .shadow-none { + box-shadow: none !important; +} + +.bodywebsite .position-static { + position: static !important; +} + +.bodywebsite .position-relative { + position: relative !important; +} + +.bodywebsite .position-absolute { + position: absolute !important; +} + +.bodywebsite .position-fixed { + position: fixed !important; +} + +.bodywebsite .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.bodywebsite .top-0 { + top: 0 !important; +} + +.bodywebsite .top-50 { + top: 50% !important; +} + +.bodywebsite .top-100 { + top: 100% !important; +} + +.bodywebsite .bottom-0 { + bottom: 0 !important; +} + +.bodywebsite .bottom-50 { + bottom: 50% !important; +} + +.bodywebsite .bottom-100 { + bottom: 100% !important; +} + +.bodywebsite .start-0 { + left: 0 !important; +} + +.bodywebsite .start-50 { + left: 50% !important; +} + +.bodywebsite .start-100 { + left: 100% !important; +} + +.bodywebsite .end-0 { + right: 0 !important; +} + +.bodywebsite .end-50 { + right: 50% !important; +} + +.bodywebsite .end-100 { + right: 100% !important; +} + +.bodywebsite .translate-middle { + transform: translate(-50%, -50%) !important; +} + +.bodywebsite .translate-middle-x { + transform: translateX(-50%) !important; +} + +.bodywebsite .translate-middle-y { + transform: translateY(-50%) !important; +} + +.bodywebsite .border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-0 { + border: 0 !important; +} + +.bodywebsite .border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-top-0 { + border-top: 0 !important; +} + +.bodywebsite .border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-end-0 { + border-right: 0 !important; +} + +.bodywebsite .border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-bottom-0 { + border-bottom: 0 !important; +} + +.bodywebsite .border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.bodywebsite .border-start-0 { + border-left: 0 !important; +} + +.bodywebsite .border-primary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-secondary { + --bs-border-opacity: 1; +} + +.bodywebsite .border-success { + --bs-border-opacity: 1; +} + +.bodywebsite .border-info { + --bs-border-opacity: 1; +} + +.bodywebsite .border-warning { + --bs-border-opacity: 1; +} + +.bodywebsite .border-danger { + --bs-border-opacity: 1; +} + +.bodywebsite .border-light { + --bs-border-opacity: 1; +} + +.bodywebsite .border-dark { + --bs-border-opacity: 1; +} + +.bodywebsite .border-white { + --bs-border-opacity: 1; +} + +.bodywebsite .border-1 { + --bs-border-width: 1px; +} + +.bodywebsite .border-2 { + --bs-border-width: 2px; +} + +.bodywebsite .border-3 { + --bs-border-width: 3px; +} + +.bodywebsite .border-4 { + --bs-border-width: 4px; +} + +.bodywebsite .border-5 { + --bs-border-width: 5px; +} + +.bodywebsite .border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.bodywebsite .border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.bodywebsite .border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.bodywebsite .border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.bodywebsite .border-opacity-100 { + --bs-border-opacity: 1; +} + +.bodywebsite .w-25 { + width: 25% !important; +} + +.bodywebsite .w-50 { + width: 50% !important; +} + +.bodywebsite .w-75 { + width: 75% !important; +} + +.bodywebsite .w-100 { + width: 100% !important; +} + +.bodywebsite .w-auto { + width: auto !important; +} + +.bodywebsite .mw-100 { + max-width: 100% !important; +} + +.bodywebsite .vw-100 { + width: 100vw !important; +} + +.bodywebsite .min-vw-100 { + min-width: 100vw !important; +} + +.bodywebsite .h-25 { + height: 25% !important; +} + +.bodywebsite .h-50 { + height: 50% !important; +} + +.bodywebsite .h-75 { + height: 75% !important; +} + +.bodywebsite .h-100 { + height: 100% !important; +} + +.bodywebsite .h-auto { + height: auto !important; +} + +.bodywebsite .mh-100 { + max-height: 100% !important; +} + +.bodywebsite .vh-100 { + height: 100vh !important; +} + +.bodywebsite .min-vh-100 { + min-height: 100vh !important; +} + +.bodywebsite .flex-fill { + flex: 1 1 auto !important; +} + +.bodywebsite .flex-row { + flex-direction: row !important; +} + +.bodywebsite .flex-column { + flex-direction: column !important; +} + +.bodywebsite .flex-row-reverse { + flex-direction: row-reverse !important; +} + +.bodywebsite .flex-column-reverse { + flex-direction: column-reverse !important; +} + +.bodywebsite .flex-grow-0 { + flex-grow: 0 !important; +} + +.bodywebsite .flex-grow-1 { + flex-grow: 1 !important; +} + +.bodywebsite .flex-shrink-0 { + flex-shrink: 0 !important; +} + +.bodywebsite .flex-shrink-1 { + flex-shrink: 1 !important; +} + +.bodywebsite .flex-wrap { + flex-wrap: wrap !important; +} + +.bodywebsite .flex-nowrap { + flex-wrap: nowrap !important; +} + +.bodywebsite .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.bodywebsite .justify-content-start { + justify-content: flex-start !important; +} + +.bodywebsite .justify-content-end { + justify-content: flex-end !important; +} + +.bodywebsite .justify-content-center { + justify-content: center !important; +} + +.bodywebsite .justify-content-between { + justify-content: space-between !important; +} + +.bodywebsite .justify-content-around { + justify-content: space-around !important; +} + +.bodywebsite .justify-content-evenly { + justify-content: space-evenly !important; +} + +.bodywebsite .align-items-start { + align-items: flex-start !important; +} + +.bodywebsite .align-items-end { + align-items: flex-end !important; +} + +.bodywebsite .align-items-center { + align-items: center !important; +} + +.bodywebsite .align-items-baseline { + align-items: baseline !important; +} + +.bodywebsite .align-items-stretch { + align-items: stretch !important; +} + +.bodywebsite .align-content-start { + align-content: flex-start !important; +} + +.bodywebsite .align-content-end { + align-content: flex-end !important; +} + +.bodywebsite .align-content-center { + align-content: center !important; +} + +.bodywebsite .align-content-between { + align-content: space-between !important; +} + +.bodywebsite .align-content-around { + align-content: space-around !important; +} + +.bodywebsite .align-content-stretch { + align-content: stretch !important; +} + +.bodywebsite .align-self-auto { + align-self: auto !important; +} + +.bodywebsite .align-self-start { + align-self: flex-start !important; +} + +.bodywebsite .align-self-end { + align-self: flex-end !important; +} + +.bodywebsite .align-self-center { + align-self: center !important; +} + +.bodywebsite .align-self-baseline { + align-self: baseline !important; +} + +.bodywebsite .align-self-stretch { + align-self: stretch !important; +} + +.bodywebsite .order-first { + order: -1 !important; +} + +.bodywebsite .order-0 { + order: 0 !important; +} + +.bodywebsite .order-1 { + order: 1 !important; +} + +.bodywebsite .order-2 { + order: 2 !important; +} + +.bodywebsite .order-3 { + order: 3 !important; +} + +.bodywebsite .order-4 { + order: 4 !important; +} + +.bodywebsite .order-5 { + order: 5 !important; +} + +.bodywebsite .order-last { + order: 6 !important; +} + +.bodywebsite .m-0 { + margin: 0 !important; +} + +.bodywebsite .m-1 { + margin: 0.25rem !important; +} + +.bodywebsite .m-2 { + margin: 0.5rem !important; +} + +.bodywebsite .m-3 { + margin: 1rem !important; +} + +.bodywebsite .m-4 { + margin: 1.5rem !important; +} + +.bodywebsite .m-5 { + margin: 3rem !important; +} + +.bodywebsite .m-auto { + margin: auto !important; +} + +.bodywebsite .mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.bodywebsite .mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.bodywebsite .mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.bodywebsite .mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.bodywebsite .mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.bodywebsite .mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.bodywebsite .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.bodywebsite .my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.bodywebsite .my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.bodywebsite .my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.bodywebsite .my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.bodywebsite .my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.bodywebsite .my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.bodywebsite .my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.bodywebsite .mt-0 { + margin-top: 0 !important; +} + +.bodywebsite .mt-1 { + margin-top: 0.25rem !important; +} + +.bodywebsite .mt-2 { + margin-top: 0.5rem !important; +} + +.bodywebsite .mt-3 { + margin-top: 1rem !important; +} + +.bodywebsite .mt-4 { + margin-top: 1.5rem !important; +} + +.bodywebsite .mt-5 { + margin-top: 3rem !important; +} + +.bodywebsite .mt-auto { + margin-top: auto !important; +} + +.bodywebsite .me-0 { + margin-right: 0 !important; +} + +.bodywebsite .me-1 { + margin-right: 0.25rem !important; +} + +.bodywebsite .me-2 { + margin-right: 0.5rem !important; +} + +.bodywebsite .me-3 { + margin-right: 1rem !important; +} + +.bodywebsite .me-4 { + margin-right: 1.5rem !important; +} + +.bodywebsite .me-5 { + margin-right: 3rem !important; +} + +.bodywebsite .me-auto { + margin-right: auto !important; +} + +.bodywebsite .mb-0 { + margin-bottom: 0 !important; +} + +.bodywebsite .mb-1 { + margin-bottom: 0.25rem !important; +} + +.bodywebsite .mb-2 { + margin-bottom: 0.5rem !important; +} + +.bodywebsite .mb-3 { + margin-bottom: 1rem !important; +} + +.bodywebsite .mb-4 { + margin-bottom: 1.5rem !important; +} + +.bodywebsite .mb-5 { + margin-bottom: 3rem !important; +} + +.bodywebsite .mb-auto { + margin-bottom: auto !important; +} + +.bodywebsite .ms-0 { + margin-left: 0 !important; +} + +.bodywebsite .ms-1 { + margin-left: 0.25rem !important; +} + +.bodywebsite .ms-2 { + margin-left: 0.5rem !important; +} + +.bodywebsite .ms-3 { + margin-left: 1rem !important; +} + +.bodywebsite .ms-4 { + margin-left: 1.5rem !important; +} + +.bodywebsite .ms-5 { + margin-left: 3rem !important; +} + +.bodywebsite .ms-auto { + margin-left: auto !important; +} + +.bodywebsite .p-0 { + padding: 0 !important; +} + +.bodywebsite .p-1 { + padding: 0.25rem !important; +} + +.bodywebsite .p-2 { + padding: 0.5rem !important; +} + +.bodywebsite .p-3 { + padding: 1rem !important; +} + +.bodywebsite .p-4 { + padding: 1.5rem !important; +} + +.bodywebsite .p-5 { + padding: 3rem !important; +} + +.bodywebsite .px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.bodywebsite .px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.bodywebsite .px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.bodywebsite .px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.bodywebsite .px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.bodywebsite .px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.bodywebsite .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.bodywebsite .py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.bodywebsite .py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.bodywebsite .py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.bodywebsite .py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.bodywebsite .py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.bodywebsite .pt-0 { + padding-top: 0 !important; +} + +.bodywebsite .pt-1 { + padding-top: 0.25rem !important; +} + +.bodywebsite .pt-2 { + padding-top: 0.5rem !important; +} + +.bodywebsite .pt-3 { + padding-top: 1rem !important; +} + +.bodywebsite .pt-4 { + padding-top: 1.5rem !important; +} + +.bodywebsite .pt-5 { + padding-top: 3rem !important; +} + +.bodywebsite .pe-0 { + padding-right: 0 !important; +} + +.bodywebsite .pe-1 { + padding-right: 0.25rem !important; +} + +.bodywebsite .pe-2 { + padding-right: 0.5rem !important; +} + +.bodywebsite .pe-3 { + padding-right: 1rem !important; +} + +.bodywebsite .pe-4 { + padding-right: 1.5rem !important; +} + +.bodywebsite .pe-5 { + padding-right: 3rem !important; +} + +.bodywebsite .pb-0 { + padding-bottom: 0 !important; +} + +.bodywebsite .pb-1 { + padding-bottom: 0.25rem !important; +} + +.bodywebsite .pb-2 { + padding-bottom: 0.5rem !important; +} + +.bodywebsite .pb-3 { + padding-bottom: 1rem !important; +} + +.bodywebsite .pb-4 { + padding-bottom: 1.5rem !important; +} + +.bodywebsite .pb-5 { + padding-bottom: 3rem !important; +} + +.bodywebsite .ps-0 { + padding-left: 0 !important; +} + +.bodywebsite .ps-1 { + padding-left: 0.25rem !important; +} + +.bodywebsite .ps-2 { + padding-left: 0.5rem !important; +} + +.bodywebsite .ps-3 { + padding-left: 1rem !important; +} + +.bodywebsite .ps-4 { + padding-left: 1.5rem !important; +} + +.bodywebsite .ps-5 { + padding-left: 3rem !important; +} + +.bodywebsite .gap-0 { + gap: 0 !important; +} + +.bodywebsite .gap-1 { + gap: 0.25rem !important; +} + +.bodywebsite .gap-2 { + gap: 0.5rem !important; +} + +.bodywebsite .gap-3 { + gap: 1rem !important; +} + +.bodywebsite .gap-4 { + gap: 1.5rem !important; +} + +.bodywebsite .gap-5 { + gap: 3rem !important; +} + +.bodywebsite .font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.bodywebsite .fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.bodywebsite .fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.bodywebsite .fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.bodywebsite .fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.bodywebsite .fs-5 { + font-size: 1.25rem !important; +} + +.bodywebsite .fs-6 { + font-size: 1rem !important; +} + +.bodywebsite .fst-italic { + font-style: italic !important; +} + +.bodywebsite .fst-normal { + font-style: normal !important; +} + +.bodywebsite .fw-light { + font-weight: 300 !important; +} + +.bodywebsite .fw-lighter { + font-weight: lighter !important; +} + +.bodywebsite .fw-normal { + font-weight: 400 !important; +} + +.bodywebsite .fw-bold { + font-weight: 700 !important; +} + +.bodywebsite .fw-semibold { + font-weight: 600 !important; +} + +.bodywebsite .fw-bolder { + font-weight: bolder !important; +} + +.bodywebsite .lh-1 { + line-height: 1 !important; +} + +.bodywebsite .lh-sm { + line-height: 1.25 !important; +} + +.bodywebsite .lh-base { + line-height: 1.5 !important; +} + +.bodywebsite .lh-lg { + line-height: 2 !important; +} + +.bodywebsite .text-start { + text-align: left !important; +} + +.bodywebsite .text-end { + text-align: right !important; +} + +.bodywebsite .text-center { + text-align: center !important; +} + +.bodywebsite .text-decoration-none { + text-decoration: none !important; +} + +.bodywebsite .text-decoration-underline { + text-decoration: underline !important; +} + +.bodywebsite .text-decoration-line-through { + text-decoration: line-through !important; +} + +.bodywebsite .text-lowercase { + text-transform: lowercase !important; +} + +.bodywebsite .text-uppercase { + text-transform: uppercase !important; +} + +.bodywebsite .text-capitalize { + text-transform: capitalize !important; +} + +.bodywebsite .text-wrap { + white-space: normal !important; +} + +.bodywebsite .text-nowrap { + white-space: nowrap !important; +} + +.bodywebsite .text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +.bodywebsite .text-primary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-secondary { + --bs-text-opacity: 1; +} + +.bodywebsite .text-success { + --bs-text-opacity: 1; +} + +.bodywebsite .text-info { + --bs-text-opacity: 1; +} + +.bodywebsite .text-warning { + --bs-text-opacity: 1; +} + +.bodywebsite .text-danger { + --bs-text-opacity: 1; +} + +.bodywebsite .text-light { + --bs-text-opacity: 1; +} + +.bodywebsite .text-dark { + --bs-text-opacity: 1; +} + +.bodywebsite .text-black { + --bs-text-opacity: 1; +} + +.bodywebsite .text-white { + --bs-text-opacity: 1; + color: var(--text-white); +} + +.bodywebsite .text-body { + --bs-text-opacity: 1; +} + +.bodywebsite .text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.bodywebsite .text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.bodywebsite .text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.bodywebsite .text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.bodywebsite .text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.bodywebsite .text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.bodywebsite .text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.bodywebsite .text-opacity-100 { + --bs-text-opacity: 1; +} + +.bodywebsite .bg-primary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-secondary { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-success { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-info { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-warning { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-danger { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-light { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-dark { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-black { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-white { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-body { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-transparent { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bodywebsite .bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bodywebsite .bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bodywebsite .bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bodywebsite .bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bodywebsite .bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.bodywebsite .user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.bodywebsite .user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.bodywebsite .user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.bodywebsite .pe-none { + pointer-events: none !important; +} + +.bodywebsite .pe-auto { + pointer-events: auto !important; +} + +.bodywebsite .rounded { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-0 { + border-radius: 0 !important; +} + +.bodywebsite .rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.bodywebsite .rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.bodywebsite .rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.bodywebsite .rounded-5 { + border-radius: var(--bs-border-radius-2xl) !important; +} + +.bodywebsite .rounded-circle { + border-radius: 50% !important; +} + +.bodywebsite .rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.bodywebsite .rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.bodywebsite .visible { + visibility: visible !important; +} + +.bodywebsite .invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .bodywebsite .float-sm-start { + float: left !important; + } + + .bodywebsite .float-sm-end { + float: right !important; + } + + .bodywebsite .float-sm-none { + float: none !important; + } + + .bodywebsite .d-sm-inline { + display: inline !important; + } + + .bodywebsite .d-sm-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-sm-block { + display: block !important; + } + + .bodywebsite .d-sm-grid { + display: grid !important; + } + + .bodywebsite .d-sm-table { + display: table !important; + } + + .bodywebsite .d-sm-table-row { + display: table-row !important; + } + + .bodywebsite .d-sm-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-sm-flex { + display: flex !important; + } + + .bodywebsite .d-sm-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-sm-none { + display: none !important; + } + + .bodywebsite .flex-sm-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-sm-row { + flex-direction: row !important; + } + + .bodywebsite .flex-sm-column { + flex-direction: column !important; + } + + .bodywebsite .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-sm-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-sm-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-sm-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-sm-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-sm-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-sm-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-sm-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-sm-center { + align-items: center !important; + } + + .bodywebsite .align-items-sm-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-sm-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-sm-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-sm-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-sm-center { + align-content: center !important; + } + + .bodywebsite .align-content-sm-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-sm-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-sm-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-sm-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-sm-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-sm-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-sm-center { + align-self: center !important; + } + + .bodywebsite .align-self-sm-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-sm-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-sm-first { + order: -1 !important; + } + + .bodywebsite .order-sm-0 { + order: 0 !important; + } + + .bodywebsite .order-sm-1 { + order: 1 !important; + } + + .bodywebsite .order-sm-2 { + order: 2 !important; + } + + .bodywebsite .order-sm-3 { + order: 3 !important; + } + + .bodywebsite .order-sm-4 { + order: 4 !important; + } + + .bodywebsite .order-sm-5 { + order: 5 !important; + } + + .bodywebsite .order-sm-last { + order: 6 !important; + } + + .bodywebsite .m-sm-0 { + margin: 0 !important; + } + + .bodywebsite .m-sm-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-sm-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-sm-3 { + margin: 1rem !important; + } + + .bodywebsite .m-sm-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-sm-5 { + margin: 3rem !important; + } + + .bodywebsite .m-sm-auto { + margin: auto !important; + } + + .bodywebsite .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-sm-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-sm-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-sm-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-sm-auto { + margin-top: auto !important; + } + + .bodywebsite .me-sm-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-sm-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-sm-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-sm-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-sm-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-sm-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-sm-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-sm-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-sm-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-sm-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-sm-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-sm-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-sm-auto { + margin-left: auto !important; + } + + .bodywebsite .p-sm-0 { + padding: 0 !important; + } + + .bodywebsite .p-sm-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-sm-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-sm-3 { + padding: 1rem !important; + } + + .bodywebsite .p-sm-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-sm-5 { + padding: 3rem !important; + } + + .bodywebsite .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-sm-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-sm-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-sm-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-sm-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-sm-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-sm-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-sm-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-sm-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-sm-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-sm-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-sm-0 { + gap: 0 !important; + } + + .bodywebsite .gap-sm-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-sm-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-sm-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-sm-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-sm-5 { + gap: 3rem !important; + } + + .bodywebsite .text-sm-start { + text-align: left !important; + } + + .bodywebsite .text-sm-end { + text-align: right !important; + } + + .bodywebsite .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .bodywebsite .float-md-start { + float: left !important; + } + + .bodywebsite .float-md-end { + float: right !important; + } + + .bodywebsite .float-md-none { + float: none !important; + } + + .bodywebsite .d-md-inline { + display: inline !important; + } + + .bodywebsite .d-md-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-md-block { + display: block !important; + } + + .bodywebsite .d-md-grid { + display: grid !important; + } + + .bodywebsite .d-md-table { + display: table !important; + } + + .bodywebsite .d-md-table-row { + display: table-row !important; + } + + .bodywebsite .d-md-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-md-flex { + display: flex !important; + } + + .bodywebsite .d-md-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-md-none { + display: none !important; + } + + .bodywebsite .flex-md-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-md-row { + flex-direction: row !important; + } + + .bodywebsite .flex-md-column { + flex-direction: column !important; + } + + .bodywebsite .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-md-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-md-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-md-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-md-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-md-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-md-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-md-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-md-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-md-center { + align-items: center !important; + } + + .bodywebsite .align-items-md-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-md-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-md-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-md-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-md-center { + align-content: center !important; + } + + .bodywebsite .align-content-md-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-md-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-md-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-md-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-md-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-md-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-md-center { + align-self: center !important; + } + + .bodywebsite .align-self-md-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-md-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-md-first { + order: -1 !important; + } + + .bodywebsite .order-md-0 { + order: 0 !important; + } + + .bodywebsite .order-md-1 { + order: 1 !important; + } + + .bodywebsite .order-md-2 { + order: 2 !important; + } + + .bodywebsite .order-md-3 { + order: 3 !important; + } + + .bodywebsite .order-md-4 { + order: 4 !important; + } + + .bodywebsite .order-md-5 { + order: 5 !important; + } + + .bodywebsite .order-md-last { + order: 6 !important; + } + + .bodywebsite .m-md-0 { + margin: 0 !important; + } + + .bodywebsite .m-md-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-md-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-md-3 { + margin: 1rem !important; + } + + .bodywebsite .m-md-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-md-5 { + margin: 3rem !important; + } + + .bodywebsite .m-md-auto { + margin: auto !important; + } + + .bodywebsite .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-md-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-md-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-md-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-md-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-md-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-md-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-md-auto { + margin-top: auto !important; + } + + .bodywebsite .me-md-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-md-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-md-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-md-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-md-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-md-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-md-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-md-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-md-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-md-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-md-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-md-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-md-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-md-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-md-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-md-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-md-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-md-auto { + margin-left: auto !important; + } + + .bodywebsite .p-md-0 { + padding: 0 !important; + } + + .bodywebsite .p-md-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-md-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-md-3 { + padding: 1rem !important; + } + + .bodywebsite .p-md-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-md-5 { + padding: 3rem !important; + } + + .bodywebsite .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-md-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-md-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-md-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-md-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-md-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-md-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-md-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-md-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-md-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-md-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-md-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-md-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-md-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-md-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-md-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-md-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-md-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-md-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-md-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-md-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-md-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-md-0 { + gap: 0 !important; + } + + .bodywebsite .gap-md-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-md-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-md-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-md-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-md-5 { + gap: 3rem !important; + } + + .bodywebsite .text-md-start { + text-align: left !important; + } + + .bodywebsite .text-md-end { + text-align: right !important; + } + + .bodywebsite .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .bodywebsite .float-lg-start { + float: left !important; + } + + .bodywebsite .float-lg-end { + float: right !important; + } + + .bodywebsite .float-lg-none { + float: none !important; + } + + .bodywebsite .d-lg-inline { + display: inline !important; + } + + .bodywebsite .d-lg-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-lg-block { + display: block !important; + } + + .bodywebsite .d-lg-grid { + display: grid !important; + } + + .bodywebsite .d-lg-table { + display: table !important; + } + + .bodywebsite .d-lg-table-row { + display: table-row !important; + } + + .bodywebsite .d-lg-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-lg-flex { + display: flex !important; + } + + .bodywebsite .d-lg-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-lg-none { + display: none !important; + } + + .bodywebsite .flex-lg-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-lg-row { + flex-direction: row !important; + } + + .bodywebsite .flex-lg-column { + flex-direction: column !important; + } + + .bodywebsite .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-lg-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-lg-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-lg-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-lg-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-lg-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-lg-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-lg-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-lg-center { + align-items: center !important; + } + + .bodywebsite .align-items-lg-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-lg-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-lg-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-lg-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-lg-center { + align-content: center !important; + } + + .bodywebsite .align-content-lg-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-lg-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-lg-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-lg-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-lg-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-lg-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-lg-center { + align-self: center !important; + } + + .bodywebsite .align-self-lg-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-lg-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-lg-first { + order: -1 !important; + } + + .bodywebsite .order-lg-0 { + order: 0 !important; + } + + .bodywebsite .order-lg-1 { + order: 1 !important; + } + + .bodywebsite .order-lg-2 { + order: 2 !important; + } + + .bodywebsite .order-lg-3 { + order: 3 !important; + } + + .bodywebsite .order-lg-4 { + order: 4 !important; + } + + .bodywebsite .order-lg-5 { + order: 5 !important; + } + + .bodywebsite .order-lg-last { + order: 6 !important; + } + + .bodywebsite .m-lg-0 { + margin: 0 !important; + } + + .bodywebsite .m-lg-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-lg-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-lg-3 { + margin: 1rem !important; + } + + .bodywebsite .m-lg-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-lg-5 { + margin: 3rem !important; + } + + .bodywebsite .m-lg-auto { + margin: auto !important; + } + + .bodywebsite .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-lg-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-lg-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-lg-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-lg-auto { + margin-top: auto !important; + } + + .bodywebsite .me-lg-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-lg-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-lg-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-lg-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-lg-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-lg-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-lg-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-lg-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-lg-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-lg-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-lg-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-lg-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-lg-auto { + margin-left: auto !important; + } + + .bodywebsite .p-lg-0 { + padding: 0 !important; + } + + .bodywebsite .p-lg-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-lg-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-lg-3 { + padding: 1rem !important; + } + + .bodywebsite .p-lg-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-lg-5 { + padding: 3rem !important; + } + + .bodywebsite .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-lg-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-lg-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-lg-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-lg-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-lg-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-lg-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-lg-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-lg-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-lg-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-lg-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-lg-0 { + gap: 0 !important; + } + + .bodywebsite .gap-lg-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-lg-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-lg-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-lg-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-lg-5 { + gap: 3rem !important; + } + + .bodywebsite .text-lg-start { + text-align: left !important; + } + + .bodywebsite .text-lg-end { + text-align: right !important; + } + + .bodywebsite .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .float-xl-start { + float: left !important; + } + + .bodywebsite .float-xl-end { + float: right !important; + } + + .bodywebsite .float-xl-none { + float: none !important; + } + + .bodywebsite .d-xl-inline { + display: inline !important; + } + + .bodywebsite .d-xl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xl-block { + display: block !important; + } + + .bodywebsite .d-xl-grid { + display: grid !important; + } + + .bodywebsite .d-xl-table { + display: table !important; + } + + .bodywebsite .d-xl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xl-flex { + display: flex !important; + } + + .bodywebsite .d-xl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xl-none { + display: none !important; + } + + .bodywebsite .flex-xl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xl-first { + order: -1 !important; + } + + .bodywebsite .order-xl-0 { + order: 0 !important; + } + + .bodywebsite .order-xl-1 { + order: 1 !important; + } + + .bodywebsite .order-xl-2 { + order: 2 !important; + } + + .bodywebsite .order-xl-3 { + order: 3 !important; + } + + .bodywebsite .order-xl-4 { + order: 4 !important; + } + + .bodywebsite .order-xl-5 { + order: 5 !important; + } + + .bodywebsite .order-xl-last { + order: 6 !important; + } + + .bodywebsite .m-xl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xl-start { + text-align: left !important; + } + + .bodywebsite .text-xl-end { + text-align: right !important; + } + + .bodywebsite .text-xl-center { + text-align: center !important; + } +} + +@media (min-width: 1400px) { + .bodywebsite .float-xxl-start { + float: left !important; + } + + .bodywebsite .float-xxl-end { + float: right !important; + } + + .bodywebsite .float-xxl-none { + float: none !important; + } + + .bodywebsite .d-xxl-inline { + display: inline !important; + } + + .bodywebsite .d-xxl-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-xxl-block { + display: block !important; + } + + .bodywebsite .d-xxl-grid { + display: grid !important; + } + + .bodywebsite .d-xxl-table { + display: table !important; + } + + .bodywebsite .d-xxl-table-row { + display: table-row !important; + } + + .bodywebsite .d-xxl-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-xxl-flex { + display: flex !important; + } + + .bodywebsite .d-xxl-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-xxl-none { + display: none !important; + } + + .bodywebsite .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .bodywebsite .flex-xxl-row { + flex-direction: row !important; + } + + .bodywebsite .flex-xxl-column { + flex-direction: column !important; + } + + .bodywebsite .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .bodywebsite .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .bodywebsite .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .bodywebsite .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .bodywebsite .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .bodywebsite .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .bodywebsite .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .bodywebsite .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .bodywebsite .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .bodywebsite .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .bodywebsite .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .bodywebsite .justify-content-xxl-center { + justify-content: center !important; + } + + .bodywebsite .justify-content-xxl-between { + justify-content: space-between !important; + } + + .bodywebsite .justify-content-xxl-around { + justify-content: space-around !important; + } + + .bodywebsite .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .bodywebsite .align-items-xxl-start { + align-items: flex-start !important; + } + + .bodywebsite .align-items-xxl-end { + align-items: flex-end !important; + } + + .bodywebsite .align-items-xxl-center { + align-items: center !important; + } + + .bodywebsite .align-items-xxl-baseline { + align-items: baseline !important; + } + + .bodywebsite .align-items-xxl-stretch { + align-items: stretch !important; + } + + .bodywebsite .align-content-xxl-start { + align-content: flex-start !important; + } + + .bodywebsite .align-content-xxl-end { + align-content: flex-end !important; + } + + .bodywebsite .align-content-xxl-center { + align-content: center !important; + } + + .bodywebsite .align-content-xxl-between { + align-content: space-between !important; + } + + .bodywebsite .align-content-xxl-around { + align-content: space-around !important; + } + + .bodywebsite .align-content-xxl-stretch { + align-content: stretch !important; + } + + .bodywebsite .align-self-xxl-auto { + align-self: auto !important; + } + + .bodywebsite .align-self-xxl-start { + align-self: flex-start !important; + } + + .bodywebsite .align-self-xxl-end { + align-self: flex-end !important; + } + + .bodywebsite .align-self-xxl-center { + align-self: center !important; + } + + .bodywebsite .align-self-xxl-baseline { + align-self: baseline !important; + } + + .bodywebsite .align-self-xxl-stretch { + align-self: stretch !important; + } + + .bodywebsite .order-xxl-first { + order: -1 !important; + } + + .bodywebsite .order-xxl-0 { + order: 0 !important; + } + + .bodywebsite .order-xxl-1 { + order: 1 !important; + } + + .bodywebsite .order-xxl-2 { + order: 2 !important; + } + + .bodywebsite .order-xxl-3 { + order: 3 !important; + } + + .bodywebsite .order-xxl-4 { + order: 4 !important; + } + + .bodywebsite .order-xxl-5 { + order: 5 !important; + } + + .bodywebsite .order-xxl-last { + order: 6 !important; + } + + .bodywebsite .m-xxl-0 { + margin: 0 !important; + } + + .bodywebsite .m-xxl-1 { + margin: 0.25rem !important; + } + + .bodywebsite .m-xxl-2 { + margin: 0.5rem !important; + } + + .bodywebsite .m-xxl-3 { + margin: 1rem !important; + } + + .bodywebsite .m-xxl-4 { + margin: 1.5rem !important; + } + + .bodywebsite .m-xxl-5 { + margin: 3rem !important; + } + + .bodywebsite .m-xxl-auto { + margin: auto !important; + } + + .bodywebsite .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .bodywebsite .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .bodywebsite .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .bodywebsite .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .bodywebsite .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .bodywebsite .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .bodywebsite .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .bodywebsite .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .bodywebsite .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .bodywebsite .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .bodywebsite .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .bodywebsite .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .bodywebsite .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .bodywebsite .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .bodywebsite .mt-xxl-0 { + margin-top: 0 !important; + } + + .bodywebsite .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .bodywebsite .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .bodywebsite .mt-xxl-3 { + margin-top: 1rem !important; + } + + .bodywebsite .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .bodywebsite .mt-xxl-5 { + margin-top: 3rem !important; + } + + .bodywebsite .mt-xxl-auto { + margin-top: auto !important; + } + + .bodywebsite .me-xxl-0 { + margin-right: 0 !important; + } + + .bodywebsite .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .bodywebsite .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .bodywebsite .me-xxl-3 { + margin-right: 1rem !important; + } + + .bodywebsite .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .bodywebsite .me-xxl-5 { + margin-right: 3rem !important; + } + + .bodywebsite .me-xxl-auto { + margin-right: auto !important; + } + + .bodywebsite .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .bodywebsite .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .bodywebsite .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .bodywebsite .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .bodywebsite .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .bodywebsite .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .bodywebsite .mb-xxl-auto { + margin-bottom: auto !important; + } + + .bodywebsite .ms-xxl-0 { + margin-left: 0 !important; + } + + .bodywebsite .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .bodywebsite .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .bodywebsite .ms-xxl-3 { + margin-left: 1rem !important; + } + + .bodywebsite .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .bodywebsite .ms-xxl-5 { + margin-left: 3rem !important; + } + + .bodywebsite .ms-xxl-auto { + margin-left: auto !important; + } + + .bodywebsite .p-xxl-0 { + padding: 0 !important; + } + + .bodywebsite .p-xxl-1 { + padding: 0.25rem !important; + } + + .bodywebsite .p-xxl-2 { + padding: 0.5rem !important; + } + + .bodywebsite .p-xxl-3 { + padding: 1rem !important; + } + + .bodywebsite .p-xxl-4 { + padding: 1.5rem !important; + } + + .bodywebsite .p-xxl-5 { + padding: 3rem !important; + } + + .bodywebsite .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .bodywebsite .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .bodywebsite .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .bodywebsite .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .bodywebsite .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .bodywebsite .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .bodywebsite .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .bodywebsite .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .bodywebsite .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .bodywebsite .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .bodywebsite .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .bodywebsite .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .bodywebsite .pt-xxl-0 { + padding-top: 0 !important; + } + + .bodywebsite .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .bodywebsite .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .bodywebsite .pt-xxl-3 { + padding-top: 1rem !important; + } + + .bodywebsite .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .bodywebsite .pt-xxl-5 { + padding-top: 3rem !important; + } + + .bodywebsite .pe-xxl-0 { + padding-right: 0 !important; + } + + .bodywebsite .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .bodywebsite .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .bodywebsite .pe-xxl-3 { + padding-right: 1rem !important; + } + + .bodywebsite .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .bodywebsite .pe-xxl-5 { + padding-right: 3rem !important; + } + + .bodywebsite .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .bodywebsite .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .bodywebsite .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .bodywebsite .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .bodywebsite .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .bodywebsite .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .bodywebsite .ps-xxl-0 { + padding-left: 0 !important; + } + + .bodywebsite .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .bodywebsite .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .bodywebsite .ps-xxl-3 { + padding-left: 1rem !important; + } + + .bodywebsite .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .bodywebsite .ps-xxl-5 { + padding-left: 3rem !important; + } + + .bodywebsite .gap-xxl-0 { + gap: 0 !important; + } + + .bodywebsite .gap-xxl-1 { + gap: 0.25rem !important; + } + + .bodywebsite .gap-xxl-2 { + gap: 0.5rem !important; + } + + .bodywebsite .gap-xxl-3 { + gap: 1rem !important; + } + + .bodywebsite .gap-xxl-4 { + gap: 1.5rem !important; + } + + .bodywebsite .gap-xxl-5 { + gap: 3rem !important; + } + + .bodywebsite .text-xxl-start { + text-align: left !important; + } + + .bodywebsite .text-xxl-end { + text-align: right !important; + } + + .bodywebsite .text-xxl-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .bodywebsite .fs-1 { + font-size: 2.5rem !important; + } + + .bodywebsite .fs-2 { + font-size: 2rem !important; + } + + .bodywebsite .fs-3 { + font-size: 1.75rem !important; + } + + .bodywebsite .fs-4 { + font-size: 1.5rem !important; + } +} + +@media print { + .bodywebsite .d-print-inline { + display: inline !important; + } + + .bodywebsite .d-print-inline-block { + display: inline-block !important; + } + + .bodywebsite .d-print-block { + display: block !important; + } + + .bodywebsite .d-print-grid { + display: grid !important; + } + + .bodywebsite .d-print-table { + display: table !important; + } + + .bodywebsite .d-print-table-row { + display: table-row !important; + } + + .bodywebsite .d-print-table-cell { + display: table-cell !important; + } + + .bodywebsite .d-print-flex { + display: flex !important; + } + + .bodywebsite .d-print-inline-flex { + display: inline-flex !important; + } + + .bodywebsite .d-print-none { + display: none !important; + } +} + + +body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } +.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} + + +:root { + --text-white: #f0f0f0; + --white-color: #ffffff; + --primary-color: #d9534f; + --secondary-color: #f3af24; + --section-bg-color: #f9f9f9; + --dark-color: #000000; + --title-color: #565758; + --news-title-color: #292828; + --p-color: #717275; + --border-color: #eaeaea; + --border-radius-default: 0.25rem; + + --body-font-family: "Montserrat", sans-serif; + + --h1-font-size: 76px; + --h2-font-size: 56px; + --h3-font-size: 42px; + --h4-font-size: 28px; + --h5-font-size: 26px; + --h6-font-size: 22px; + + --p-font-size: 18px; + --menu-font-size: 18px; + --category-font-size: 14px; + + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-semibold: 600; + --font-weight-bold: 700; +} + +.bodywebsite body { + background: var(--white-color); + font-family: var(--body-font-family); + position: relative; +} + +/*--------------------------------------- + TYPOGRAPHY +-----------------------------------------*/ + +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + color: var(--dark-color); + line-height: inherit; +} + +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + font-weight: var(--font-weight-semibold); +} + +.bodywebsite h1, +.bodywebsite h2 { + font-weight: var(--font-weight-bold); +} + +.bodywebsite h1 { + font-size: var(--h1-font-size); + line-height: normal; +} + +.bodywebsite h2 { + font-size: var(--h2-font-size); +} + +.bodywebsite h3 { + font-size: var(--h3-font-size); +} + +.bodywebsite h4 { + font-size: var(--h4-font-size); +} + +.bodywebsite h5 { + font-size: var(--h5-font-size); +} + +.bodywebsite h6 { + font-size: var(--h6-font-size); +} + +.bodywebsite p, +.bodywebsite .list .list-item { + color: var(--p-color); + font-size: var(--p-font-size); + font-weight: var(--font-weight-light); +} + +.bodywebsite a, +.bodywebsite button { + touch-action: manipulation; + transition: all 0.3s; +} + +.bodywebsite .form-label { + color: var(--p-color); + font-weight: var(--font-weight-semibold); +} + +.bodywebsite a { + color: var(--secondary-color); + text-decoration: none; +} + +.bodywebsite a:hover { + color: var(--primary-color); +} + +.bodywebsite ::selection { + background: var(--primary-color); + color: var(--white-color); +} + +.bodywebsite ::-moz-selection { + background: var(--primary-color); + color: var(--white-color); +} + +.bodywebsite .section-padding { + padding-top: 8rem; + padding-bottom: 8rem; +} + +.bodywebsite b, +.bodywebsite strong { + font-weight: var(--font-weight-bold); +} + +/*--------------------------------------- + CUSTOM BUTTON +-----------------------------------------*/ +.bodywebsite .custom-btn { + border: 0; + color: var(--white-color); + font-size: var(--menu-font-size); + padding: 10px 35px; +} + +/*--------------------------------------- + NAVIGATION +-----------------------------------------*/ +.bodywebsite .navbar { + background: var(--white-color); + padding-top: 20px; + padding-bottom: 20px; +} + +.bodywebsite .navbar-brand { + color: var(--dark-color); + font-size: var(--h5-font-size); + font-weight: var(--font-weight-bold); + margin-right: 0; +} + +.bodywebsite .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 1.5rem; + padding-left: 1.5rem; +} + +.bodywebsite .navbar-expand-lg .nav-link { + color: var(--p-color); + font-weight: var(--font-weight-normal); + font-size: var(--menu-font-size); + padding-top: 15px; + padding-bottom: 15px; +} + +.bodywebsite .navbar-nav .nav-link.active, +.bodywebsite .nav-link:focus, +.bodywebsite .nav-link:hover { + color: var(--primary-color); +} + +.bodywebsite .nav-link:focus { + color: var(--p-color); +} + +.bodywebsite .navbar-toggler { + border: 0; + padding: 0; + cursor: pointer; + margin: 0; + width: 30px; + height: 35px; + outline: none; +} + +.bodywebsite .navbar-toggler:focus { + outline: none; + box-shadow: none; +} + +.bodywebsite .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon { + background: transparent; +} + +.bodywebsite .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:before, +.bodywebsite .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:after { + transition: top 300ms 50ms ease, -webkit-transform 300ms 350ms ease; + transition: top 300ms 50ms ease, transform 300ms 350ms ease; + transition: top 300ms 50ms ease, transform 300ms 350ms ease, + -webkit-transform 300ms 350ms ease; + top: 0; +} + +.bodywebsite .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:before { + transform: rotate(45deg); +} + +.bodywebsite .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:after { + transform: rotate(-45deg); +} + +.bodywebsite .navbar-toggler .navbar-toggler-icon { + background: var(--dark-color); + transition: background 10ms 300ms ease; + display: block; + width: 30px; + height: 2px; + position: relative; +} + +.bodywebsite .navbar-toggler .navbar-toggler-icon:before, +.bodywebsite .navbar-toggler .navbar-toggler-icon:after { + transition: top 300ms 350ms ease, -webkit-transform 300ms 50ms ease; + transition: top 300ms 350ms ease, transform 300ms 50ms ease; + transition: top 300ms 350ms ease, transform 300ms 50ms ease, + -webkit-transform 300ms 50ms ease; + position: absolute; + right: 0; + left: 0; + background: var(--dark-color); + width: 30px; + height: 2px; + content: ""; +} + +.bodywebsite .navbar-toggler .navbar-toggler-icon:before { + top: -8px; +} + +.bodywebsite .navbar-toggler .navbar-toggler-icon:after { + top: 8px; +} + +/*--------------------------------------- + SITE HEADER +-----------------------------------------*/ +.bodywebsite .site-header { + background-repeat: no-repeat; + background-position: center; + background-size: cover; + padding-top: 10rem; + padding-bottom: 10rem; + text-align: center; + position: relative; +} + +.bodywebsite .site-header .container { + position: relative; + z-index: 2; +} + +.bodywebsite .site-news-detail-header { + background: transparent; + text-align: left; + padding-top: 6rem; + padding-bottom: 6rem; +} + +.bodywebsite .site-about-header { + background-image: url("/viewimage.php?modulepart=medias&file=image/__WEBSITE_KEY__/header/briana-tozour-V_Nkf1E-vYA-unsplash.jpg"); +} + +.bodywebsite .site-menu-header { + background-image: url("/viewimage.php?modulepart=medias&file=image/__WEBSITE_KEY__/header/luisa-brimble-aFzg83dvnAI-unsplash.jpg"); +} + +.bodywebsite .site-news-header { + background-image: url("/viewimage.php?modulepart=medias&file=image/__WEBSITE_KEY__/header/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg"); +} + +.bodywebsite .site-contact-header { + background-image: url("/viewimage.php?modulepart=medias&file=image/__WEBSITE_KEY__/header/rod-long-I79Pgmhmy5M-unsplash.jpg"); +} + +.bodywebsite .overlay { + background: linear-gradient(to top, var(--dark-color), transparent 100%); + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +/*--------------------------------------- + HERO +-----------------------------------------*/ +.bodywebsite .hero { + position: relative; + overflow: hidden; + padding-top: 20.542rem; + padding-bottom: 20.542rem; +} + +.bodywebsite .hero .container { + position: absolute; + z-index: 9; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 100%; +} + +.bodywebsite .video-wrap { + z-index: -100; +} + +.bodywebsite .custom-video { + position: absolute; + top: 0; + left: 0; + object-fit: cover; + width: 100%; + height: 100%; +} + +/*--------------------------------------- + HERO SLIDE +-----------------------------------------*/ +.bodywebsite .carousel-image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.bodywebsite .carousel-thumb { + position: relative; +} + +.bodywebsite .carousel-caption { + background: linear-gradient(to top, var(--dark-color), transparent 90%); + text-align: left; + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 60px 40px; +} + +.bodywebsite .hero-carousel .reviews-text, +.bodywebsite .hero-text { + color: var(--white-color); +} + +.bodywebsite .price-tag { + background: var(--white-color); + border-radius: 100px; + color: var(--secondary-color); + font-size: var(--menu-font-size); + font-weight: var(--font-weight-semibold); + display: inline-block; + width: 84px; + height: 64px; + line-height: 64px; + text-align: center; +} + +.bodywebsite .hero-carousel .carousel-control-prev, +.bodywebsite .hero-carousel .carousel-control-next { + position: absolute; + top: auto; + bottom: 0; + opacity: 1; +} + +.bodywebsite .hero-carousel .carousel-control-prev, +.bodywebsite .hero-carousel .carousel-control-next { + background: var(--secondary-color); + width: 60px; + height: 60px; + text-align: center; +} + +.bodywebsite .hero-carousel .carousel-control-prev { + left: auto; + right: 60px; +} + +.bodywebsite .hero-carousel .carousel-control-next { + background: var(--primary-color); + right: 0; +} + +.bodywebsite .hero-carousel .carousel-control-prev:hover, +.bodywebsite .hero-carousel .carousel-control-next:hover { + background: var(--dark-color); +} + +.bodywebsite .hero-carousel .carousel-control-prev-icon, +.bodywebsite .hero-carousel .carousel-control-next-icon { + background-image: none; + width: inherit; + height: inherit; + line-height: 60px; +} + +.bodywebsite .hero-carousel .carousel-control-prev-icon::before, +.bodywebsite .hero-carousel .carousel-control-next-icon::before { + font-family: bootstrap-icons; + display: block; + margin: auto; + font-size: var(--h5-font-size); + color: var(--white-color); +} + +.bodywebsite .hero-carousel .carousel-control-prev-icon::before { + content: "\f13f"; +} + +.bodywebsite .hero-carousel .carousel-control-next-icon::before { + content: "\f144"; +} + +.bodywebsite .reviews-icon { + color: var(--secondary-color); +} + +/*--------------------------------------- + MENU +-----------------------------------------*/ +.bodywebsite .menu, +.bodywebsite .about, +.bodywebsite .related-news, +.bodywebsite .newsletter, +.bodywebsite .comments { + background: var(--section-bg-color); +} + +.bodywebsite .menu-thumb { + position: relative; + overflow: hidden; +} + +.bodywebsite .menu-info { + padding: 20px 20px 30px 20px; +} + +.bodywebsite .menu-image { + display: block; +} + +.bodywebsite .menu-image-wrap { + position: relative; +} + +.bodywebsite .menu-tag { + position: absolute; + top: 0; + right: 0; + margin: 20px; +} + +.bodywebsite .newsletter-image { + border-radius: 100%; + object-fit: cover; + display: block; + margin: 0 auto; + max-width: 450px; + max-height: 450px; +} + +.bodywebsite .category-tag, +.bodywebsite .menu-tag { + background: var(--dark-color); + border-radius: var(--border-radius-default); + color: var(--white-color); + font-size: var(--category-font-size); + display: inline-block; + padding: 4px 12px; +} + +.bodywebsite .category-tag { + margin-bottom: 5px; +} + +/*--------------------------------------- + CUSTOM FORM +-----------------------------------------*/ +.bodywebsite .custom-form .form-control { + margin-bottom: 20px; + padding: 14px 10px; + transition: all 0.3s; +} + +.bodywebsite .custom-form button[type="submit"] { + background: var(--dark-color); + border: 0; + color: var(--white-color); + text-transform: uppercase; +} + +.bodywebsite .custom-form button[type="submit"]:hover { + background: var(--primary-color); +} + +/*--------------------------------------- + SUBSCRIBE FORM +-----------------------------------------*/ +.bodywebsite .subscribe-form .form-control { + margin-top: 20px; + margin-bottom: 10px; +} + +.bodywebsite .booking-form .form-control { + font-weight: var(--font-weight-normal); + padding-top: 12px; + padding-bottom: 12px; + margin-bottom: 25px; + transition: all 0.3s; +} + +.bodywebsite .booking-form button[type="submit"] { + background: var(--dark-color); + border: 0; + font-weight: var(--font-weight-semibold); + color: var(--white-color); + text-transform: uppercase; + margin-bottom: 0; +} + +.bodywebsite .booking-form button[type="submit"]:hover { + background: var(--primary-color); +} +/*--------------------------------------- + FOOTER +-----------------------------------------*/ +.bodywebsite .site-footer { + background-image: url("../images/daan-evers-tKN1WXrzQ3s-unsplash.jpg"); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + padding-top: 7rem; + padding-bottom: 7rem; + position: relative; +} + +.bodywebsite .site-footer::before { + content: ""; + background: linear-gradient(to top, var(--dark-color), transparent 200%); + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.bodywebsite .site-footer .container { + position: relative; +} + +.bodywebsite .tooplate-mt30 { + margin-top: 30px; +} +.bodywebsite .tooplate-mt60 { + margin-top: 60px; +} + +.bodywebsite .copyright-text { + font-size: var(--menu-font-size); +} + +.bodywebsite .tel-link { + color: var(--p-color); +} + +.bodywebsite .site-footer a:hover { + color: var(--white-color); +} + +.bodywebsite .site-footer a { + color: #aaa; +} + +.bodywebsite .site-footer p { + color: #aaa; +} + +/*--------------------------------------- + SOCIAL ICON +-----------------------------------------*/ +.bodywebsite .social-icon { + margin: 0; + padding: 0; +} + +.bodywebsite .social-icon li { + list-style: none; + display: inline-block; + vertical-align: top; + transition: all 0.3s; +} + +.bodywebsite .social-icon:hover li:not(:hover) { + opacity: 0.65; +} + +.bodywebsite .social-icon-link { + color: var(--p-color); + font-size: var(--p-font-size); + display: inline-block; + vertical-align: top; + margin-top: 4px; + margin-bottom: 4px; + margin-right: 15px; +} + +.bodywebsite .social-icon-link:hover { + color: var(--primary-color); +} + +/*--------------------------------------- + RESPONSIVE STYLES +-----------------------------------------*/ +@media screen and (max-width: 1180px) { + h1 { + font-size: 62px; + } +} + +@media screen and (max-width: 1170px) { + h1 { + font-size: 56px; + } +} + +@media screen and (max-width: 991px) { + .bodywebsite h1 { + font-size: 38px; + } + + .bodywebsite h2 { + font-size: 32px; + } + + .bodywebsite h3 { + font-size: 26px; + } + + .bodywebsite h4 { + font-size: 24px; + } + + .bodywebsite h5 { + font-size: 20px; + } + + .bodywebsite h6 { + font-size: 18px; + } + + .bodywebsite .site-header, + .bodywebsite .section-padding { + padding-top: 5rem; + padding-bottom: 5rem; + } + + .bodywebsite .navbar { + padding-top: 10px; + padding-bottom: 10px; + } + + .bodywebsite .navbar-nav .nav-link { + padding-top: 5px; + padding-bottom: 10px; + } + + .bodywebsite #BookingModal .modal-content { + padding-bottom: 200px; + } + + .bodywebsite #BookingModal .modal-content::before { + background-image: url("../images/sincerely-media-HoEYgBL_Gcs-unsplash-mobile.jpg"); + background-position: bottom; + top: auto; + left: 0; + bottom: 0; + width: 100%; + height: 200px; + transform: rotate(180deg); + } + + .bodywebsite #BookingModal .modal-body { + padding-top: 18px; + padding-right: 32px; + } +} + +@media screen and (max-width: 480px) { + .bodywebsite .newsletter-image { + max-width: 310px; + max-height: 310px; + } + + .bodywebsite .hero-carousel .carousel-control-prev, + .bodywebsite .hero-carousel .carousel-control-next { + width: 50px; + height: 50px; + } +} + diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php new file mode 100644 index 00000000000..26adb3ef220 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php @@ -0,0 +1,278 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) { + $original_file = 'blog.rss'; +} + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) { + $attachment = false; +} +if (isset($_GET["attachment"])) { + $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +} +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) { + $attachment = false; +} + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) { + $type = GETPOST('type', 'alpha'); +} else { + $type = dol_mimetype($original_file); +} + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost', 'status'=>1); + if ($l) { + $filters['lang'] = $l; + } + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang($l); + $outputlangs->loadLangs(array("main", "other")); + $title = $desc = $outputlangs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) { + $result = 1; + } else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) { + $attachment = $_GET["attachment"]; + } + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) { + $contenttype = $_GET["contenttype"]; + } + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) { + header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + } + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) { + header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + } else { + header('Cache-Control: private, must-revalidate'); + } + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) { + print 'File '.$outputfile.' was empty.'; + } + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + // Get logos + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed']; + $sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) { + header('Content-Encoding: '.$encoding); + } + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) { + header('Content-Disposition: attachment; filename="'.$filename.'"'); + } else { + header('Content-Disposition: inline; filename="'.$filename.'"'); + } + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) { + $db->close(); +} +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/alex-haney-CAhjZmVk5H4-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/alex-haney-CAhjZmVk5H4-unsplash.jpg new file mode 100644 index 00000000000..b560348e307 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/alex-haney-CAhjZmVk5H4-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg new file mode 100644 index 00000000000..ad6b019c9db Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg new file mode 100644 index 00000000000..86554c885ff Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/lucas-swennen-1W_MyJSRLuQ-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/lucas-swennen-1W_MyJSRLuQ-unsplash.jpg new file mode 100644 index 00000000000..c666b35e4ff Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/lucas-swennen-1W_MyJSRLuQ-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/luisa-brimble-aFzg83dvnAI-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/luisa-brimble-aFzg83dvnAI-unsplash.jpg new file mode 100644 index 00000000000..4935dc39ab8 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/luisa-brimble-aFzg83dvnAI-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg new file mode 100644 index 00000000000..2bfea3596c4 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/rod-long-I79Pgmhmy5M-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/rod-long-I79Pgmhmy5M-unsplash.jpg new file mode 100644 index 00000000000..8cd3d3d1e4a Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/breakfast/rod-long-I79Pgmhmy5M-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/charles-deluvio-FdDkfYFHqe4-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/charles-deluvio-FdDkfYFHqe4-unsplash.jpg new file mode 100644 index 00000000000..f226187380f Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/charles-deluvio-FdDkfYFHqe4-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/daan-evers-tKN1WXrzQ3s-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/daan-evers-tKN1WXrzQ3s-unsplash.jpg new file mode 100644 index 00000000000..8c2def33f78 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/daan-evers-tKN1WXrzQ3s-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg new file mode 100644 index 00000000000..acd46fc663f Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-isHUj3N0194-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-isHUj3N0194-unsplash.jpg new file mode 100644 index 00000000000..04a4f0fff90 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/farhad-ibrahimzade-isHUj3N0194-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg new file mode 100644 index 00000000000..e011d4d1e5b Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/briana-tozour-V_Nkf1E-vYA-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/briana-tozour-V_Nkf1E-vYA-unsplash.jpg new file mode 100644 index 00000000000..f1d8eddf578 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/briana-tozour-V_Nkf1E-vYA-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/luisa-brimble-aFzg83dvnAI-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/luisa-brimble-aFzg83dvnAI-unsplash.jpg new file mode 100644 index 00000000000..5d151a7d3fa Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/luisa-brimble-aFzg83dvnAI-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg new file mode 100644 index 00000000000..0433e1e8cea Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/priscilla-du-preez-W3SEyZODn8U-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/rod-long-I79Pgmhmy5M-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/rod-long-I79Pgmhmy5M-unsplash.jpg new file mode 100644 index 00000000000..5c980d4764c Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/header/rod-long-I79Pgmhmy5M-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-D5c9ZciQy_I-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-D5c9ZciQy_I-unsplash.jpg new file mode 100644 index 00000000000..93f2861f4ed Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-D5c9ZciQy_I-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-MGKqxm6u2bc-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-MGKqxm6u2bc-unsplash.jpg new file mode 100644 index 00000000000..0995f0b2110 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/farhad-ibrahimzade-MGKqxm6u2bc-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-cH5IPjaAYyo-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-cH5IPjaAYyo-unsplash.jpg new file mode 100644 index 00000000000..6dcd9a26bf4 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-cH5IPjaAYyo-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-rheOvfxOlOA-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-rheOvfxOlOA-unsplash.jpg new file mode 100644 index 00000000000..df1868563d3 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/lunch/louis-hansel-rheOvfxOlOA-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/ivan-torres-MQUqbmszGGM-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/ivan-torres-MQUqbmszGGM-unsplash.jpg new file mode 100644 index 00000000000..bbf0fed93ea Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/ivan-torres-MQUqbmszGGM-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jason-leung-O67LZfeyYBk-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jason-leung-O67LZfeyYBk-unsplash.jpg new file mode 100644 index 00000000000..ea1ae5a96ab Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jason-leung-O67LZfeyYBk-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jay-wennington-N_Y88TWmGwA-unsplash.jpg b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jay-wennington-N_Y88TWmGwA-unsplash.jpg new file mode 100644 index 00000000000..1b81640a322 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-restaurant/medias/image/websitekey/slide/jay-wennington-N_Y88TWmGwA-unsplash.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/website_pages.sql b/htdocs/install/doctemplates/websites/website_template-restaurant/website_pages.sql new file mode 100644 index 00000000000..822117f86cb --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/website_pages.sql @@ -0,0 +1,18 @@ +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:18:50 UTC --; +-- Page ID 169 -> 1__+MAX_llx_website_page__ - Aliases about --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(1__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'about', '', 'About us', '', '', '', '', '1', '2022-08-09 16:40:13', '2022-10-08 19:22:45', null, '', 'page', '', '__N__
    __N__ __N____N__
    __N____N__
    __N__
    __N__
    __N____N__
    __N__

    About Us

    __N____N__ Get to know us more__N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N__
    __N____N__
    __N__

    Team Members

    __N__
    __N____N__
    __N__
    __N__ \"\"__N__ __N__
    __N__

    Sophia

    __N____N__

    CEO & Founder

    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__ \"\"__N____N__

    Benjamin W.

    __N____N__

    Restaurant Manager

    __N__
    __N__
    __N____N__
    __N__
    __N__ \"\"__N__ __N__

    Muchen Jack

    __N____N__

    Senior Chef

    __N__
    __N__
    __N____N__
    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__
    __N____N__
    __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:18:50 UTC --; +-- Page ID 170 -> 2__+MAX_llx_website_page__ - Aliases contact --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(2__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'contact', '', 'Contact us', '', '', '', '', '1', '2022-08-16 14:40:51', '2022-10-08 19:30:28', null, '', 'page', '', '__N__email;__N__ $message = GETPOST(\'message\', \'alpha\');__N__ $cmail = new CMailFile(\'Contact from website\', $to, $from, $message);__N__ if ($cmail->sendfile()) {__N__ ?>__N__ __N__ trans(\"ErrorFailedToSendMail\", $from, $to).\'. \'.$cmail->error;__N__ }__N__}__N__?>__N__
    __N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Say Hi

    __N____N__ We are happy to get in touch with you__N__
    __N__
    __N__
    __N____N__
    __N__
    __N____N__ __N__ __N__
    __N__
    __N__
    __N__
    __N__

    Leave a message

    __N__
    __N____N__
    __N__ __N__
    __N__
    __N____N__
    __N__ Phone Number__N____N__ __N__
    __N____N__
    __N__ Email__N____N__ __N____N__ Message__N____N__ __N__
    __N____N__
    __N__ __N__
    __N__ __N__
    __N____N__
    __N__
    Weekdays
    __N____N__
    __N__ $day : \" .getDolGlobalString(\"MAIN_INFO_OPENINGHOURS_$day\") .\"

    \"; __N__ }__N__ ?>__N__
    __N____N__
    Weekends
    __N____N__
    __N__

    Saturday and Sunday

    __N____N__

    to be determined !

    __N__
    __N__
    __N____N__
    __N__

    __N__ getFullAddress() ?>__N__

    __N____N__
    __N__ __N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N____N__ __N__ __N__ __N__ __N__ __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__

    Reserve a table

    __N____N__ __N__
    __N____N__ __N__
    __N__ __N__ \" />__N__ __N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__ __N__
    __N__ __N__
    __N__
    __N____N__
    __N__
    __N__ __N__ __N____N__
    __N__', '', 0); +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:18:50 UTC --; +-- Page ID 171 -> 3__+MAX_llx_website_page__ - Aliases index --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(3__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'index', '', 'index', '', '', '', '', '1', '2022-08-09 16:34:54', '2022-10-08 19:28:42', null, '', 'page', '', '__N____N__
    __N____N____N__
    __N__
    __N__
    __N__
    __N__
    __N__
    __N__

    __N__ Delicious Steaks__N__

    __N____N__ __N__ __N__

    __N__ 4.7/5__N__

    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N__
    __N____N__

    __N__ From 1,206+ Customer__N__ Reviews__N__

    __N__
    __N__
    __N__
    __N____N__
    __N__ __N__
    __N__
    __N__
    __N__ __N__
    __N____N__
    __N__

    __N__ Fine Dining Restaurant__N__

    __N__
    __N__
    __N____N__
    __N__
    __N__ __N__
    __N____N__
    __N__ __N__

    Steak

    __N____N__ 26.50__N__
    __N____N__ __N__ __N__ 3.8/5__N__ __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__ __N__
    __N____N__
    __N__ __N__

    __N__ Sausage Pasta__N__

    __N____N__ 18.25__N__
    __N____N__ __N__ __N__ 4.2/5__N__ __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N__
    __N__ __N__ __N__ __N____N__ __N__ __N__ Previous__N__ __N____N__ __N__ __N__ Next__N__ __N__ __N__ __N__ __N__ __N____N__
    __N__ __N__ __N__ Your browser does not support the video tag.__N__ __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N__
    __N__
    __N__

    __N__ Special Menus__N__

    __N__
    __N____N__
    __N__
    __N__
    __N__ __N____N__ Breakfast__N__
    __N____N__ __N__

    Morning Fresh

    __N____N__ 12.50__N____N__ __N__
    __N__ 4.3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 102 Reviews__N__

    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__
    __N__ __N____N__ Lunch__N__
    __N____N__ __N__

    DoliCloud Soup

    __N____N__ 24.50__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 50 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__
    __N__ __N____N__ Dinner__N__
    __N____N__ __N__

    Premium Steak

    __N____N__ 45__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 86 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__
    __N__ __N____N__ Dinner__N__
    __N____N__ __N__

    Seafood Set

    __N____N__ 86__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 44 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__
    __N__ __N____N__ Breakfast__N__
    __N____N__ __N__

    Burger Set

    __N____N__ 20.50__N____N__ __N__
    __N__ 4.3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 102 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__
    __N__ __N____N__ Lunch__N__
    __N____N__ __N__

    Healthy Soup

    __N____N__ 34.20__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 64 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__
    __N__
    __N____N__ __N____N__
    __N__', '', 0); +UPDATE llx_website SET fk_default_home = 3__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; +-- File generated by Dolibarr 17.0.0-alpha -- 2022-10-08 18:18:50 UTC --; +-- Page ID 172 -> 4__+MAX_llx_website_page__ - Aliases menu --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(4__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'menu', '', 'Our menus', '', '', '', '', '1', '2022-08-16 14:37:03', '2022-10-08 19:23:06', null, '', 'page', '', '__N__
    __N__ __N____N__
    __N__
    __N__
    __N__
    __N__
    __N__

    Our Menus

    __N____N__ Perfect for all Breakfast, Lunch and__N__ Dinner__N__
    __N__
    __N__
    __N____N__
    __N__
    __N____N__
    __N__
    __N__
    __N__
    __N__

    Breakfast Menu

    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Fresh Start

    __N____N__ $24.50__N____N__ __N__
    __N__ 4.4/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 128 Reviews__N__

    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Baked Creamy

    __N____N__ $16.50__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 64 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__ __N____N__ __N__

    Burger Set

    __N____N__ $24.50__N____N__ $36.50__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 32 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__
    __N____N__
    __N__
    __N__
    __N__
    __N__

    Lunch Menu

    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Super Steak Set

    __N____N__ $32.75__N____N__ $55__N____N__ __N__
    __N__ 4.2/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 66 Reviews__N__

    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Bread & Steak Set

    __N____N__ $42.50__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 84 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__
    __N____N__
    __N__
    __N__
    __N__
    __N__

    Dinner Menu

    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Seafood Set

    __N____N__ $65.50__N____N__ __N__
    __N__ 4.4/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 102 Reviews__N__

    __N__
    __N__
    __N__
    __N__
    __N____N__
    __N__
    __N__ __N____N__ __N__

    Premium Steak

    __N____N__ $74.25__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 56 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N____N__
    __N__
    __N__ __N____N__ __N__

    Salmon Set

    __N____N__ $60__N____N__ __N__
    __N__ 3/5__N__
    __N____N__
    __N__ __N__ __N__ __N__ __N__ __N__
    __N____N__

    __N__ 76 Reviews__N__

    __N__
    __N__
    __N__ __N__ __N__ __N__ __N__
    __N__
    __N____N__ __N____N__
    __N__', '', 0); + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip deleted file mode 100644 index 3c9643c8960..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-stellar.zip and /dev/null differ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/LICENSE b/htdocs/install/doctemplates/websites/website_template-stellar/LICENSE new file mode 100644 index 00000000000..871ef743662 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/LICENSE @@ -0,0 +1,4 @@ +LICENSE +------- + +CC-BY-SA - https://creativecommons.org/licenses/by/4.0/ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/README.md b/htdocs/install/doctemplates/websites/website_template-stellar/README.md new file mode 100644 index 00000000000..3a656b8ddaf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/README.md @@ -0,0 +1 @@ +Website generated by Dolibarr ERP CRM diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/.dolibarr b/htdocs/install/doctemplates/websites/website_template-stellar/containers/.dolibarr new file mode 100644 index 00000000000..0ef9997b4ab --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/.dolibarr @@ -0,0 +1,2 @@ +# Some properties for Dolibarr web site CMS +param=value diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/.htaccess b/htdocs/install/doctemplates/websites/website_template-stellar/containers/.htaccess new file mode 100644 index 00000000000..ed27b33461f --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/.htaccess @@ -0,0 +1,2 @@ +# Order allow,deny +# Deny from all diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/README.md b/htdocs/install/doctemplates/websites/website_template-stellar/containers/README.md new file mode 100644 index 00000000000..06b47fbfb9d --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/README.md @@ -0,0 +1 @@ +Design provided by HTML5up unde CC license. See https://html5up.net/license. diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/credits.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/credits.php new file mode 100644 index 00000000000..9413220a642 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/credits.php @@ -0,0 +1,4 @@ +ref.'/page20.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/footer.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/footer.php new file mode 100644 index 00000000000..f49ea9820eb --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/footer.php @@ -0,0 +1,4 @@ +ref.'/page21.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/generic.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/generic.php new file mode 100644 index 00000000000..125a586cbbf --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/generic.php @@ -0,0 +1,4 @@ +ref.'/page22.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/home.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/home.php new file mode 100644 index 00000000000..17b2d2fcb5e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/home.php @@ -0,0 +1,4 @@ +ref.'/page23.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/htmlheader.html b/htdocs/install/doctemplates/websites/website_template-stellar/containers/htmlheader.html new file mode 100644 index 00000000000..7d92b6f479e --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/htmlheader.html @@ -0,0 +1,8 @@ + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/index.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/index.php new file mode 100644 index 00000000000..3f2d97e57ac --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/index.php @@ -0,0 +1,11 @@ + +/* JS content (all pages) */ + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/manifest.json.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/manifest.json.php new file mode 100644 index 00000000000..b61531d6c11 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/manifest.json.php @@ -0,0 +1,13 @@ + + +ref.'/page24.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page20.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page20.tpl.php new file mode 100644 index 00000000000..ace3135f312 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page20.tpl.php @@ -0,0 +1,75 @@ + + + +Credits + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + +
    + + + + + + + + +
    + + +
    + +

    + +This site is edited by name; ?> + + +

    + +
    + +
    + + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page21.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page21.tpl.php new file mode 100644 index 00000000000..9cbab5789c9 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page21.tpl.php @@ -0,0 +1,91 @@ + + + +Footer + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    +
    +

    Aliquam sed mauris

    +

    Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.

    + +
    +
    +

    Etiam feugiat

    +
    +
    Address
    +
    getFullAddress(1, '
    '); ?>
    +
    Phone
    +
    phone; ?>
    +
    Email
    +
    email; ?>
    +
    +
    + +
    + + + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page22.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page22.tpl.php new file mode 100644 index 00000000000..87bf7faf346 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page22.tpl.php @@ -0,0 +1,119 @@ + + + +Generic page + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + +
    + + + + + + + + +
    + + +
    + +

    Magna feugiat lorem

    +

    Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis fames ac ante ipsum primis in faucibus.

    +

    Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet.

    +

    Tempus veroeros

    +

    Cep risus aliquam gravida cep ut lacus amet. Adipiscing faucibus nunc placerat. Tempus adipiscing turpis non blandit accumsan eget lacinia nunc integer interdum amet aliquam ut orci non col ut ut praesent.

    +
    + + +
    +

    Latest Blog posts

    +
    + loadLangs(array("main","website")); + $fuser = new User($db); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'status'=>1, 'lang'=>'null,'.$websitepage->lang)); // , 'keywords'=>$keyword + if (is_numeric($arrayofblogs) && $arrayofblogs < 0) { + print '
    '.$weblangs->trans($websitepage->error).'
    '; + } elseif (is_array($arrayofblogs) && ! empty($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + print ''; + } + } else { + print '
    '; + print '
    '; + //print $weblangs->trans("NoArticlesFoundForTheKeyword", $keyword); + print $weblangs->trans("NoArticlesFound"); + print '
    '; + print '
    '; + } + ?> +
    +
    + +
    + + + + + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page23.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page23.tpl.php new file mode 100644 index 00000000000..43664b7984b --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page23.tpl.php @@ -0,0 +1,163 @@ + + + +My personal blog + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    + + + + + + + + +
    + + +
    +
    +
    +
    +

    Ipsum sed adipiscing

    +
    +

    Sed lorem ipsum dolor sit amet nullam consequat feugiat consequat magna + adipiscing magna etiam amet veroeros. Lorem ipsum dolor tempus sit cursus. + Tempus nisl et nullam lorem ipsum dolor sit amet aliquam.

    + +
    + +
    +
    + + +
    +
    +

    Magna veroeros

    +
    +
      +
    • + +

      Ipsum consequat

      +

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      +
    • +
    • + +

      Amed sed feugiat

      +

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      +
    • +
    • + +

      Dolor nullam

      +

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      +
    • +
    + +
    + + +
    +
    +

    Ipsum consequat

    +

    Donec imperdiet consequat consequat. Suspendisse feugiat congue
    + posuere. Nulla massa urna, fermentum eget quam aliquet.

    +
    +
      +
    • + + 5,120 Etiam +
    • +
    • + + 8,192 Magna +
    • +
    • + + 2,048 Tempus +
    • +
    • + + 4,096 Aliquam +
    • +
    • + + 1,024 Nullam +
    • +
    +

    Nam elementum nisl et mi a commodo porttitor. Morbi sit amet nisl eu arcu faucibus hendrerit vel a risus. Nam a orci mi, elementum ac arcu sit amet, fermentum pellentesque et purus. Integer maximus varius lorem, sed convallis diam accumsan sed. Etiam porttitor placerat sapien, sed eleifend a enim pulvinar faucibus semper quis ut arcu. Ut non nisl a mollis est efficitur vestibulum. Integer eget purus nec nulla mattis et accumsan ut magna libero. Morbi auctor iaculis porttitor. Sed ut magna ac risus et hendrerit scelerisque. Praesent eleifend lacus in lectus aliquam porta. Cras eu ornare dui curabitur lacinia.

    + +
    + + +
    +
    +

    Congue imperdiet

    +

    Donec imperdiet consequat consequat. Suspendisse feugiat congue
    + posuere. Nulla massa urna, fermentum eget quam aliquet.

    +
    + +
    + +
    + + + +
    + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page24.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page24.tpl.php new file mode 100644 index 00000000000..3ea7a55dbd5 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page24.tpl.php @@ -0,0 +1,48 @@ + + + +Menu + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/page25.tpl.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page25.tpl.php new file mode 100644 index 00000000000..ec9e02f4914 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/page25.tpl.php @@ -0,0 +1,44 @@ + + + +This is a Blog post + + + + + + + + + +use_manifest) { print ''."\n"; } ?> + + + + + + + + + + + + +
    + This is a blog post article... +
    + + + + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/robots.txt b/htdocs/install/doctemplates/websites/website_template-stellar/containers/robots.txt new file mode 100644 index 00000000000..2b844f479d6 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/robots.txt @@ -0,0 +1,4 @@ +# Robot file. Generated with Dolibarr +User-agent: * +Allow: /public/ +Disallow: /administrator/ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/styles.css.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/styles.css.php new file mode 100644 index 00000000000..80326972fd5 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/styles.css.php @@ -0,0 +1,2696 @@ + +/* CSS content (all pages) */ +div.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } +.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} + +html { + scroll-behavior: smooth +} + +.bodywebsite .centpercent { + width: 100%; +} +.bodywebsite .center { + text-align: center; +} + +.bodywebsite span.icon.alt { + font-size: 0.5em; +} +.bodywebsite .fab.alt:before { + font-family: "Font Awesome 5 Brands" !important; +} + +.bodywebsite .logowebsite { + width: 128px; + height: 128px; + border-radius: 50%; + background-size: contain; + background-size: contain; +} + +.bodywebsite .blog-box { + box-shadow: -1px -1px 12px 5px rgba(85, 85, 85, 0.1) !important; +} + +html.bodywebsite, +.bodywebsite, +.bodywebsite div, +.bodywebsite span, +.bodywebsite applet, +.bodywebsite object, +.bodywebsite iframe, +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6, +.bodywebsite p, +.bodywebsite blockquote, +.bodywebsite pre, +.bodywebsite a, +.bodywebsite abbr, +.bodywebsite acronym, +.bodywebsite address, +.bodywebsite big, +.bodywebsite cite, +.bodywebsite code, +.bodywebsite del, +.bodywebsite dfn, +.bodywebsite em, +.bodywebsite img, +.bodywebsite ins, +.bodywebsite kbd, +.bodywebsite q, +.bodywebsite s, +.bodywebsite samp, +.bodywebsite small, +.bodywebsite strike, +.bodywebsite strong, +.bodywebsite sub, +.bodywebsite sup, +.bodywebsite tt, +.bodywebsite var, +.bodywebsite b, +.bodywebsite u, +.bodywebsite i, +.bodywebsite center, +.bodywebsite dl, +.bodywebsite dt, +.bodywebsite dd, +.bodywebsite ol, +.bodywebsite ul, +.bodywebsite li, +.bodywebsite fieldset, +.bodywebsite form, +.bodywebsite label, +.bodywebsite legend, +.bodywebsite table, +.bodywebsite caption, +.bodywebsite tbody, +.bodywebsite tfoot, +.bodywebsite thead, +.bodywebsite tr, +.bodywebsite th, +.bodywebsite td, +.bodywebsite article, +.bodywebsite aside, +.bodywebsite canvas, +.bodywebsite details, +.bodywebsite embed, +.bodywebsite figure, +.bodywebsite figcaption, +.bodywebsite footer, +.bodywebsite header, +.bodywebsite hgroup, +.bodywebsite menu, +.bodywebsite nav, +.bodywebsite output, +.bodywebsite ruby, +.bodywebsite section, +.bodywebsite summary, +.bodywebsite time, +.bodywebsite mark, +.bodywebsite audio, +.bodywebsite video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +.bodywebsite article, +.bodywebsite aside, +.bodywebsite details, +.bodywebsite figcaption, +.bodywebsite figure, +.bodywebsite footer, +.bodywebsite header, +.bodywebsite hgroup, +.bodywebsite menu, +.bodywebsite nav, +.bodywebsite section { + display: block; +} +.bodywebsite { + line-height: 1; + background-image: -moz-linear-gradient(45deg, #4376e2 15%, #5f4d93 85%); + background-image: -webkit-linear-gradient(45deg, #4376e2 15%, #5f4d93 85%); + background-image: -ms-linear-gradient(45deg, #4376e2 15%, #5f4d93 85%); + background-image: linear-gradient(45deg, #4376e2 15%, #5f4d93 85%); +} +.bodywebsite ol, +.bodywebsite ul { + list-style: none; +} +.bodywebsite blockquote, +.bodywebsite q { + quotes: none; +} +.bodywebsite blockquote:before, +.bodywebsite blockquote:after, +.bodywebsite q:before, +.bodywebsite q:after { + content: ''; + content: none; +} +.bodywebsite table { + border-collapse: collapse; + border-spacing: 0; +} +.bodywebsite { + -webkit-text-size-adjust: none; +} +.bodywebsite mark { + background-color: transparent; + color: inherit; +} +.bodywebsite input::-moz-focus-inner { + border: 0; + padding: 0; +} +.bodywebsite input, +.bodywebsite select, +.bodywebsite textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; +} +@-ms-viewport { + width: device-width; +} +.bodywebsite { + -ms-overflow-style: scrollbar; +} +@media screen and (max-width: 480px) { + .bodywebsite html, + .bodywebsite { + min-width: 320px; + } +} +.bodywebsite html { + box-sizing: border-box; +} +.bodywebsite *, +.bodywebsite *:before, +.bodywebsite *:after { + box-sizing: inherit; +} +.bodywebsite { + background-color: #935d8c; +} +.bodywebsite.is-preload *, +.bodywebsite.is-preload *:before, +.bodywebsite.is-preload *:after { + -moz-animation: none !important; + -webkit-animation: none !important; + -ms-animation: none !important; + animation: none !important; + -moz-transition: none !important; + -webkit-transition: none !important; + -ms-transition: none !important; + transition: none !important; +} +.bodywebsite { + background-color: #935d8c; + color: rgba(255, 255, 255, 0.65); +} +.bodywebsite { + font-family: "Source Sans", Helvetica, sans-serif; + font-weight: 300; + line-height: 1.65; +} +@media screen and (max-width: 1680px) { + .bodywebsite body, + .bodywebsite input, + .bodywebsite select, + .bodywebsite textarea { + font-size: 14pt; + } +} +@media screen and (max-width: 1280px) { + .bodywebsite body, + .bodywebsite input, + .bodywebsite select, + .bodywebsite textarea { + font-size: 12pt; + } +} +@media screen and (max-width: 360px) { + .bodywebsite body, + .bodywebsite input, + .bodywebsite select, + .bodywebsite textarea { + font-size: 11pt; + } +} +.bodywebsite a { + -moz-transition: color 0.2s ease, border-bottom 0.2s ease; + -webkit-transition: color 0.2s ease, border-bottom 0.2s ease; + -ms-transition: color 0.2s ease, border-bottom 0.2s ease; + transition: color 0.2s ease, border-bottom 0.2s ease; + text-decoration: none; + border-bottom: dotted 1px; + color: inherit; +} +.bodywebsite a:hover { + border-bottom-color: transparent; +} +.bodywebsite strong, +.bodywebsite b { + font-weight: 400; +} +.bodywebsite em, +.bodywebsite i { + font-style: italic; +} +.bodywebsite p { + margin: 0 0 2em 0; +} +.bodywebsite p.content { + -moz-columns: 20em 2; + -webkit-columns: 20em 2; + -ms-columns: 20em 2; + columns: 20em 2; + -moz-column-gap: 2em; + -webkit-column-gap: 2em; + -ms-column-gap: 2em; + column-gap: 2em; + text-align: justify; +} +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + font-weight: 300; + line-height: 1.5; + margin: 0 0 0.7em 0; + letter-spacing: -0.025em; +} +.bodywebsite h1 a, +.bodywebsite h2 a, +.bodywebsite h3 a, +.bodywebsite h4 a, +.bodywebsite h5 a, +.bodywebsite h6 a { + color: inherit; + text-decoration: none; +} +.bodywebsite h1 { + font-size: 2.5em; + line-height: 1.2; +} +.bodywebsite h2 { + font-size: 1.5em; +} +.bodywebsite h3 { + font-size: 1.25em; +} +.bodywebsite h4 { + font-size: 1.1em; +} +.bodywebsite h5 { + font-size: 0.9em; +} +.bodywebsite h6 { + font-size: 0.7em; +} +@media screen and (max-width: 736px) { + .bodywebsite h1 { + font-size: 2em; + } +} +.bodywebsite sub { + font-size: 0.8em; + position: relative; + top: 0.5em; +} +.bodywebsite sup { + font-size: 0.8em; + position: relative; + top: -0.5em; +} +.bodywebsite blockquote { + border-left: solid 4px; + font-style: italic; + margin: 0 0 2em 0; + padding: 0.5em 0 0.5em 2em; +} +.bodywebsite code { + border-radius: 8px; + border: solid 1px; + font-family: "Courier New", monospace; + font-size: 0.9em; + margin: 0 0.25em; + padding: 0.25em 0.65em; +} +.bodywebsite pre { + -webkit-overflow-scrolling: touch; + font-family: "Courier New", monospace; + font-size: 0.9em; + margin: 0 0 2em 0; +} +.bodywebsite pre code { + display: block; + line-height: 1.75; + padding: 1em 1.5em; + overflow-x: auto; +} +.bodywebsite hr { + border: 0; + border-bottom: solid 1px; + margin: 2em 0; +} +.bodywebsite hr.major { + margin: 3em 0; +} +.bodywebsite .align-left { + text-align: left; +} +.bodywebsite .align-center { + text-align: center; +} +.bodywebsite .align-right { + text-align: right; +} +.bodywebsite input, +.bodywebsite select, +.bodywebsite textarea { + color: #ffffff; +} +.bodywebsite a:hover { + color: #ffffff; +} +.bodywebsite strong, +.bodywebsite b { + color: #ffffff; +} +.bodywebsite h1, +.bodywebsite h2, +.bodywebsite h3, +.bodywebsite h4, +.bodywebsite h5, +.bodywebsite h6 { + color: #ffffff; +} +.bodywebsite blockquote { + border-left-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite code { + background: rgba(255, 255, 255, 0.075); + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite hr { + border-bottom-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; +} +.bodywebsite .row > * { + box-sizing: border-box; +} +.bodywebsite .row.aln-left { + justify-content: flex-start; +} +.bodywebsite .row.aln-center { + justify-content: center; +} +.bodywebsite .row.aln-right { + justify-content: flex-end; +} +.bodywebsite .row.aln-top { + align-items: flex-start; +} +.bodywebsite .row.aln-middle { + align-items: center; +} +.bodywebsite .row.aln-bottom { + align-items: flex-end; +} +.bodywebsite .row > .imp { + order: -1; +} +.bodywebsite .row > .col-1 { + width: 8.33333%; +} +.bodywebsite .row > .off-1 { + margin-left: 8.33333%; +} +.bodywebsite .row > .col-2 { + width: 16.66667%; +} +.bodywebsite .row > .off-2 { + margin-left: 16.66667%; +} +.bodywebsite .row > .col-3 { + width: 25%; +} +.bodywebsite .row > .off-3 { + margin-left: 25%; +} +.bodywebsite .row > .col-4 { + width: 33.33333%; +} +.bodywebsite .row > .off-4 { + margin-left: 33.33333%; +} +.bodywebsite .row > .col-5 { + width: 41.66667%; +} +.bodywebsite .row > .off-5 { + margin-left: 41.66667%; +} +.bodywebsite .row > .col-6 { + width: 50%; +} +.bodywebsite .row > .off-6 { + margin-left: 50%; +} +.bodywebsite .row > .col-7 { + width: 58.33333%; +} +.bodywebsite .row > .off-7 { + margin-left: 58.33333%; +} +.bodywebsite .row > .col-8 { + width: 66.66667%; +} +.bodywebsite .row > .off-8 { + margin-left: 66.66667%; +} +.bodywebsite .row > .col-9 { + width: 75%; +} +.bodywebsite .row > .off-9 { + margin-left: 75%; +} +.bodywebsite .row > .col-10 { + width: 83.33333%; +} +.bodywebsite .row > .off-10 { + margin-left: 83.33333%; +} +.bodywebsite .row > .col-11 { + width: 91.66667%; +} +.bodywebsite .row > .off-11 { + margin-left: 91.66667%; +} +.bodywebsite .row > .col-12 { + width: 100%; +} +.bodywebsite .row > .off-12 { + margin-left: 100%; +} +.bodywebsite .row { + margin-top: 0; +} +.bodywebsite .row > * { + padding: 0 0 0 0; +} +@media screen and (max-width: 1680px) { + .bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + } + .bodywebsite .row > * { + box-sizing: border-box; + } + .bodywebsite .row.aln-left { + justify-content: flex-start; + } + .bodywebsite .row.aln-center { + justify-content: center; + } + .bodywebsite .row.aln-right { + justify-content: flex-end; + } + .bodywebsite .row.aln-top { + align-items: flex-start; + } + .bodywebsite .row.aln-middle { + align-items: center; + } + .bodywebsite .row.aln-bottom { + align-items: flex-end; + } + .bodywebsite .row > .imp-xlarge { + order: -1; + } + .bodywebsite .row > .col-1-xlarge { + width: 8.33333%; + } + .bodywebsite .row > .off-1-xlarge { + margin-left: 8.33333%; + } + .bodywebsite .row > .col-2-xlarge { + width: 16.66667%; + } + .bodywebsite .row > .off-2-xlarge { + margin-left: 16.66667%; + } + .bodywebsite .row > .col-3-xlarge { + width: 25%; + } + .bodywebsite .row > .off-3-xlarge { + margin-left: 25%; + } + .bodywebsite .row > .col-4-xlarge { + width: 33.33333%; + } + .bodywebsite .row > .off-4-xlarge { + margin-left: 33.33333%; + } + .bodywebsite .row > .col-5-xlarge { + width: 41.66667%; + } + .bodywebsite .row > .off-5-xlarge { + margin-left: 41.66667%; + } + .bodywebsite .row > .col-6-xlarge { + width: 50%; + } + .bodywebsite .row > .off-6-xlarge { + margin-left: 50%; + } + .bodywebsite .row > .col-7-xlarge { + width: 58.33333%; + } + .bodywebsite .row > .off-7-xlarge { + margin-left: 58.33333%; + } + .bodywebsite .row > .col-8-xlarge { + width: 66.66667%; + } + .bodywebsite .row > .off-8-xlarge { + margin-left: 66.66667%; + } + .bodywebsite .row > .col-9-xlarge { + width: 75%; + } + .bodywebsite .row > .off-9-xlarge { + margin-left: 75%; + } + .bodywebsite .row > .col-10-xlarge { + width: 83.33333%; + } + .bodywebsite .row > .off-10-xlarge { + margin-left: 83.33333%; + } + .bodywebsite .row > .col-11-xlarge { + width: 91.66667%; + } + .bodywebsite .row > .off-11-xlarge { + margin-left: 91.66667%; + } + .bodywebsite .row > .col-12-xlarge { + width: 100%; + } + .bodywebsite .row > .off-12-xlarge { + margin-left: 100%; + } + .bodywebsite .row { + margin-top: 0; + margin-left: 0; + } + .bodywebsite .row > * { + padding: 0 0 0 0; + } +} +@media screen and (max-width: 1280px) { + .bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + } + .bodywebsite .row > * { + box-sizing: border-box; + } + .bodywebsite .row.aln-left { + justify-content: flex-start; + } + .bodywebsite .row.aln-center { + justify-content: center; + } + .bodywebsite .row.aln-right { + justify-content: flex-end; + } + .bodywebsite .row.aln-top { + align-items: flex-start; + } + .bodywebsite .row.aln-middle { + align-items: center; + } + .bodywebsite .row.aln-bottom { + align-items: flex-end; + } + .bodywebsite .row > .imp-large { + order: -1; + } + .bodywebsite .row > .col-1-large { + width: 8.33333%; + } + .bodywebsite .row > .off-1-large { + margin-left: 8.33333%; + } + .bodywebsite .row > .col-2-large { + width: 16.66667%; + } + .bodywebsite .row > .off-2-large { + margin-left: 16.66667%; + } + .bodywebsite .row > .col-3-large { + width: 25%; + } + .bodywebsite .row > .off-3-large { + margin-left: 25%; + } + .bodywebsite .row > .col-4-large { + width: 33.33333%; + } + .bodywebsite .row > .off-4-large { + margin-left: 33.33333%; + } + .bodywebsite .row > .col-5-large { + width: 41.66667%; + } + .bodywebsite .row > .off-5-large { + margin-left: 41.66667%; + } + .bodywebsite .row > .col-6-large { + width: 50%; + } + .bodywebsite .row > .off-6-large { + margin-left: 50%; + } + .bodywebsite .row > .col-7-large { + width: 58.33333%; + } + .bodywebsite .row > .off-7-large { + margin-left: 58.33333%; + } + .bodywebsite .row > .col-8-large { + width: 66.66667%; + } + .bodywebsite .row > .off-8-large { + margin-left: 66.66667%; + } + .bodywebsite .row > .col-9-large { + width: 75%; + } + .bodywebsite .row > .off-9-large { + margin-left: 75%; + } + .bodywebsite .row > .col-10-large { + width: 83.33333%; + } + .bodywebsite .row > .off-10-large { + margin-left: 83.33333%; + } + .bodywebsite .row > .col-11-large { + width: 91.66667%; + } + .bodywebsite .row > .off-11-large { + margin-left: 91.66667%; + } + .bodywebsite .row > .col-12-large { + width: 100%; + } + .bodywebsite .row > .off-12-large { + margin-left: 100%; + } + .bodywebsite .row { + margin-top: 0; + } + .bodywebsite .row > * { + padding: 0 0 0 1.5em; + } +} +@media screen and (max-width: 980px) { + .bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + } + .bodywebsite .row > * { + box-sizing: border-box; + } + .bodywebsite .row.aln-left { + justify-content: flex-start; + } + .bodywebsite .row.aln-center { + justify-content: center; + } + .bodywebsite .row.aln-right { + justify-content: flex-end; + } + .bodywebsite .row.aln-top { + align-items: flex-start; + } + .bodywebsite .row.aln-middle { + align-items: center; + } + .bodywebsite .row.aln-bottom { + align-items: flex-end; + } + .bodywebsite .row > .imp-medium { + order: -1; + } + .bodywebsite .row > .col-1-medium { + width: 8.33333%; + } + .bodywebsite .row > .off-1-medium { + margin-left: 8.33333%; + } + .bodywebsite .row > .col-2-medium { + width: 16.66667%; + } + .bodywebsite .row > .off-2-medium { + margin-left: 16.66667%; + } + .bodywebsite .row > .col-3-medium { + width: 25%; + } + .bodywebsite .row > .off-3-medium { + margin-left: 25%; + } + .bodywebsite .row > .col-4-medium { + width: 33.33333%; + } + .bodywebsite .row > .off-4-medium { + margin-left: 33.33333%; + } + .bodywebsite .row > .col-5-medium { + width: 41.66667%; + } + .bodywebsite .row > .off-5-medium { + margin-left: 41.66667%; + } + .bodywebsite .row > .col-6-medium { + width: 50%; + } + .bodywebsite .row > .off-6-medium { + margin-left: 50%; + } + .bodywebsite .row > .col-7-medium { + width: 58.33333%; + } + .bodywebsite .row > .off-7-medium { + margin-left: 58.33333%; + } + .bodywebsite .row > .col-8-medium { + width: 66.66667%; + } + .bodywebsite .row > .off-8-medium { + margin-left: 66.66667%; + } + .bodywebsite .row > .col-9-medium { + width: 75%; + } + .bodywebsite .row > .off-9-medium { + margin-left: 75%; + } + .bodywebsite .row > .col-10-medium { + width: 83.33333%; + } + .bodywebsite .row > .off-10-medium { + margin-left: 83.33333%; + } + .bodywebsite .row > .col-11-medium { + width: 91.66667%; + } + .bodywebsite .row > .off-11-medium { + margin-left: 91.66667%; + } + .bodywebsite .row > .col-12-medium { + width: 100%; + } + .bodywebsite .row > .off-12-medium { + margin-left: 100%; + } + .bodywebsite .row { + margin-top: 0; + } + .bodywebsite .row > * { + padding: 0 0 0 1.5em; + } +} +@media screen and (max-width: 736px) { + .bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + } + .bodywebsite .row > * { + box-sizing: border-box; + } + .bodywebsite .row.aln-left { + justify-content: flex-start; + } + .bodywebsite .row.aln-center { + justify-content: center; + } + .bodywebsite .row.aln-right { + justify-content: flex-end; + } + .bodywebsite .row.aln-top { + align-items: flex-start; + } + .bodywebsite .row.aln-middle { + align-items: center; + } + .bodywebsite .row.aln-bottom { + align-items: flex-end; + } + .bodywebsite .row > .imp-small { + order: -1; + } + .bodywebsite .row > .col-1-small { + width: 8.33333%; + } + .bodywebsite .row > .off-1-small { + margin-left: 8.33333%; + } + .bodywebsite .row > .col-2-small { + width: 16.66667%; + } + .bodywebsite .row > .off-2-small { + margin-left: 16.66667%; + } + .bodywebsite .row > .col-3-small { + width: 25%; + } + .bodywebsite .row > .off-3-small { + margin-left: 25%; + } + .bodywebsite .row > .col-4-small { + width: 33.33333%; + } + .bodywebsite .row > .off-4-small { + margin-left: 33.33333%; + } + .bodywebsite .row > .col-5-small { + width: 41.66667%; + } + .bodywebsite .row > .off-5-small { + margin-left: 41.66667%; + } + .bodywebsite .row > .col-6-small { + width: 50%; + } + .bodywebsite .row > .off-6-small { + margin-left: 50%; + } + .bodywebsite .row > .col-7-small { + width: 58.33333%; + } + .bodywebsite .row > .off-7-small { + margin-left: 58.33333%; + } + .bodywebsite .row > .col-8-small { + width: 66.66667%; + } + .bodywebsite .row > .off-8-small { + margin-left: 66.66667%; + } + .bodywebsite .row > .col-9-small { + width: 75%; + } + .bodywebsite .row > .off-9-small { + margin-left: 75%; + } + .bodywebsite .row > .col-10-small { + width: 83.33333%; + } + .bodywebsite .row > .off-10-small { + margin-left: 83.33333%; + } + .bodywebsite .row > .col-11-small { + width: 91.66667%; + } + .bodywebsite .row > .off-11-small { + margin-left: 91.66667%; + } + .bodywebsite .row > .col-12-small { + width: 100%; + } + .bodywebsite .row > .off-12-small { + margin-left: 100%; + } + .bodywebsite .row { + margin-top: 0; + } + .bodywebsite .row > * { + padding: 0 0 0 1em; + } +} +@media screen and (max-width: 480px) { + .bodywebsite .row { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + } + .bodywebsite .row > * { + box-sizing: border-box; + } + .bodywebsite .row.aln-left { + justify-content: flex-start; + } + .bodywebsite .row.aln-center { + justify-content: center; + } + .bodywebsite .row.aln-right { + justify-content: flex-end; + } + .bodywebsite .row.aln-top { + align-items: flex-start; + } + .bodywebsite .row.aln-middle { + align-items: center; + } + .bodywebsite .row.aln-bottom { + align-items: flex-end; + } + .bodywebsite .row > .imp-xsmall { + order: -1; + } + .bodywebsite .row > .col-1-xsmall { + width: 8.33333%; + } + .bodywebsite .row > .off-1-xsmall { + margin-left: 8.33333%; + } + .bodywebsite .row > .col-2-xsmall { + width: 16.66667%; + } + .bodywebsite .row > .off-2-xsmall { + margin-left: 16.66667%; + } + .bodywebsite .row > .col-3-xsmall { + width: 25%; + } + .bodywebsite .row > .off-3-xsmall { + margin-left: 25%; + } + .bodywebsite .row > .col-4-xsmall { + width: 33.33333%; + } + .bodywebsite .row > .off-4-xsmall { + margin-left: 33.33333%; + } + .bodywebsite .row > .col-5-xsmall { + width: 41.66667%; + } + .bodywebsite .row > .off-5-xsmall { + margin-left: 41.66667%; + } + .bodywebsite .row > .col-6-xsmall { + width: 50%; + } + .bodywebsite .row > .off-6-xsmall { + margin-left: 50%; + } + .bodywebsite .row > .col-7-xsmall { + width: 58.33333%; + } + .bodywebsite .row > .off-7-xsmall { + margin-left: 58.33333%; + } + .bodywebsite .row > .col-8-xsmall { + width: 66.66667%; + } + .bodywebsite .row > .off-8-xsmall { + margin-left: 66.66667%; + } + .bodywebsite .row > .col-9-xsmall { + width: 75%; + } + .bodywebsite .row > .off-9-xsmall { + margin-left: 75%; + } + .bodywebsite .row > .col-10-xsmall { + width: 83.33333%; + } + .bodywebsite .row > .off-10-xsmall { + margin-left: 83.33333%; + } + .bodywebsite .row > .col-11-xsmall { + width: 91.66667%; + } + .bodywebsite .row > .off-11-xsmall { + margin-left: 91.66667%; + } + .bodywebsite .row > .col-12-xsmall { + width: 100%; + } + .bodywebsite .row > .off-12-xsmall { + margin-left: 100%; + } + .bodywebsite .row { + margin-top: 0; + } + .bodywebsite .row > * { + padding: 0 0 0 1.25em; + } +} +.bodywebsite .box { + border-radius: 8px; + border: solid; + margin-bottom: 2em; + padding: 1.5em; +} +.bodywebsite .box > :last-child, +.bodywebsite .box > :last-child > :last-child, +.bodywebsite .box > :last-child > :last-child > :last-child { + margin-bottom: 0; +} +.bodywebsite .box.alt { + border: 0; + border-radius: 0; + padding: 0; +} +.bodywebsite .box { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite input[type="submit"], +.bodywebsite input[type="reset"], +.bodywebsite input[type="button"], +.bodywebsite button, +.bodywebsite .buttonwebsite { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + border-radius: 8px; + border: 0; + cursor: pointer; + display: inline-block; + font-weight: 300; + height: 2.75em; + line-height: 2.75em; + min-width: 9.25em; + padding: 0 1.5em; + text-align: center; + text-decoration: none; + white-space: nowrap; +} +.bodywebsite input[type="submit"].icon, +.bodywebsite input[type="reset"].icon, +.bodywebsite input[type="button"].icon, +.bodywebsite button.icon, +.bodywebsite .buttonwebsite.icon { + padding-left: 1.35em; +} +.bodywebsite input[type="submit"].icon:before, +.bodywebsite input[type="reset"].icon:before, +.bodywebsite input[type="button"].icon:before, +.bodywebsite button.icon:before, +.bodywebsite .buttonwebsite.icon:before { + margin-right: 0.5em; +} +.bodywebsite input[type="submit"].fit, +.bodywebsite input[type="reset"].fit, +.bodywebsite input[type="button"].fit, +.bodywebsite button.fit, +.bodywebsite .buttonwebsite.fit { + width: 100%; +} +.bodywebsite input[type="submit"].small, +.bodywebsite input[type="reset"].small, +.bodywebsite input[type="button"].small, +.bodywebsite button.small, +.bodywebsite .buttonwebsite.small { + font-size: 0.8em; +} +.bodywebsite input[type="submit"].large, +.bodywebsite input[type="reset"].large, +.bodywebsite input[type="button"].large, +.bodywebsite button.large, +.bodywebsite .buttonwebsite.large { + font-size: 1.35em; +} +.bodywebsite input[type="submit"].disabled, +.bodywebsite input[type="submit"]:disabled, +.bodywebsite input[type="reset"].disabled, +.bodywebsite input[type="reset"]:disabled, +.bodywebsite input[type="button"].disabled, +.bodywebsite input[type="button"]:disabled, +.bodywebsite button.disabled, +.bodywebsite button:disabled, +.bodywebsite .buttonwebsite.disabled, +.bodywebsite .buttonwebsite:disabled { + pointer-events: none; + opacity: 0.25; +} +@media screen and (max-width: 736px) { + .bodywebsite input[type="submit"], + .bodywebsite input[type="reset"], + .bodywebsite input[type="button"], + .bodywebsite button, + .bodywebsite .buttonwebsite { + min-width: 0; + } +} +.bodywebsite input[type="submit"], +.bodywebsite input[type="reset"], +.bodywebsite input[type="button"], +.bodywebsite button, +.bodywebsite .buttonwebsite { + background-color: transparent; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35); + color: #ffffff !important; +} +.bodywebsite input[type="submit"]:hover, +.bodywebsite input[type="reset"]:hover, +.bodywebsite input[type="button"]:hover, +.bodywebsite button:hover, +.bodywebsite .buttonwebsite:hover { + background-color: rgba(255, 255, 255, 0.075); +} +.bodywebsite input[type="submit"]:active, +.bodywebsite input[type="reset"]:active, +.bodywebsite input[type="button"]:active, +.bodywebsite button:active, +.bodywebsite .buttonwebsite:active { + background-color: rgba(255, 255, 255, 0.2); +} +.bodywebsite input[type="submit"].icon:before, +.bodywebsite input[type="reset"].icon:before, +.bodywebsite input[type="button"].icon:before, +.bodywebsite button.icon:before, +.bodywebsite .buttonwebsite.icon:before { + color: rgba(255, 255, 255, 0.5); +} +.bodywebsite input[type="submit"].primary, +.bodywebsite input[type="reset"].primary, +.bodywebsite input[type="button"].primary, +.bodywebsite button.primary, +.bodywebsite .buttonwebsite.primary { + background-color: #8cc9f0; + color: #ffffff !important; + box-shadow: none; +} +.bodywebsite input[type="submit"].primary:hover, +.bodywebsite input[type="reset"].primary:hover, +.bodywebsite input[type="button"].primary:hover, +.bodywebsite button.primary:hover, +.bodywebsite .buttonwebsite.primary:hover { + background-color: #9acff2; +} +.bodywebsite input[type="submit"].primary:active, +.bodywebsite input[type="reset"].primary:active, +.bodywebsite input[type="button"].primary:active, +.bodywebsite button.primary:active, +.bodywebsite .buttonwebsite.primary:active { + background-color: #7ec3ee; +} +.bodywebsite input[type="submit"].primary.icon:before, +.bodywebsite input[type="reset"].primary.icon:before, +.bodywebsite input[type="button"].primary.icon:before, +.bodywebsite button.primary.icon:before, +.bodywebsite .buttonwebsite.primary.icon:before { + color: #ffffff !important; +} +.bodywebsite form { + margin: 0 0 2em 0; +} +.bodywebsite label { + display: block; + font-size: 0.9em; + font-weight: 400; + margin: 0 0 1em 0; +} +.bodywebsite input[type="text"], +.bodywebsite input[type="password"], +.bodywebsite input[type="email"], +.bodywebsite select, +.bodywebsite textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + border-radius: 8px; + border: solid 1px; + color: inherit; + display: block; + outline: 0; + padding: 0 1em; + text-decoration: none; + width: 100%; +} +.bodywebsite input[type="text"]:invalid, +.bodywebsite input[type="password"]:invalid, +.bodywebsite input[type="email"]:invalid, +.bodywebsite select:invalid, +.bodywebsite textarea:invalid { + box-shadow: none; +} +.bodywebsite select { + background-size: 1.25rem; + background-repeat: no-repeat; + background-position: calc(100% - 1rem) center; + height: 2.75em; + padding-right: 2.75em; + text-overflow: ellipsis; +} +.bodywebsite select:focus::-ms-value { + background-color: transparent; +} +.bodywebsite select::-ms-expand { + display: none; +} +.bodywebsite input[type="text"], +.bodywebsite input[type="password"], +.bodywebsite input[type="email"], +.bodywebsite select { + height: 2.75em; +} +.bodywebsite textarea { + padding: 0.75em 1em; +} +.bodywebsite input[type="checkbox"], +.bodywebsite input[type="radio"] { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + display: block; + float: left; + margin-right: -2em; + opacity: 0; + width: 1em; + z-index: -1; +} +.bodywebsite input[type="checkbox"] + label, +.bodywebsite input[type="radio"] + label { + text-decoration: none; + cursor: pointer; + display: inline-block; + font-size: 1em; + font-weight: 300; + padding-left: 2.4em; + padding-right: 0.75em; + position: relative; +} +.bodywebsite input[type="checkbox"] + label:before, +.bodywebsite input[type="radio"] + label:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + text-transform: none !important; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; +} +.bodywebsite input[type="checkbox"] + label:before, +.bodywebsite input[type="radio"] + label:before { + border-radius: 8px; + border: solid 1px; + content: ''; + display: inline-block; + font-size: 0.8em; + height: 2.0625em; + left: 0; + line-height: 2.0625em; + position: absolute; + text-align: center; + top: 0; + width: 2.0625em; +} +.bodywebsite input[type="checkbox"]:checked + label:before, +.bodywebsite input[type="radio"]:checked + label:before { + content: '\f00c'; +} +.bodywebsite input[type="checkbox"] + label:before { + border-radius: 8px; +} +.bodywebsite input[type="radio"] + label:before { + border-radius: 100%; +} +.bodywebsite ::-webkit-input-placeholder { + opacity: 1; +} +.bodywebsite :-moz-placeholder { + opacity: 1; +} +.bodywebsite ::-moz-placeholder { + opacity: 1; +} +.bodywebsite :-ms-input-placeholder { + opacity: 1; +} +.bodywebsite label { + color: #ffffff; +} +.bodywebsite input[type="text"], +.bodywebsite input[type="password"], +.bodywebsite input[type="email"], +.bodywebsite select, +.bodywebsite textarea { + background-color: rgba(255, 255, 255, 0.075); + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite input[type="text"]:focus, +.bodywebsite input[type="password"]:focus, +.bodywebsite input[type="email"]:focus, +.bodywebsite select:focus, +.bodywebsite textarea:focus { + border-color: #8cc9f0; + box-shadow: 0 0 0 1px #8cc9f0; +} +.bodywebsite select { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='rgba(255, 255, 255, 0.35)' /%3E%3C/svg%3E"); +} +.bodywebsite select option { + color: #ffffff; + background: #935d8c; +} +.bodywebsite input[type="checkbox"] + label, +.bodywebsite input[type="radio"] + label { + color: rgba(255, 255, 255, 0.65); +} +.bodywebsite input[type="checkbox"] + label:before, +.bodywebsite input[type="radio"] + label:before { + background: rgba(255, 255, 255, 0.075); + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite input[type="checkbox"]:checked + label:before, +.bodywebsite input[type="radio"]:checked + label:before { + background-color: #ffffff; + border-color: #ffffff; + color: #935d8c; +} +.bodywebsite input[type="checkbox"]:focus + label:before, +.bodywebsite input[type="radio"]:focus + label:before { + border-color: #8cc9f0; + box-shadow: 0 0 0 1px #8cc9f0; +} +.bodywebsite ::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite :-moz-placeholder { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite ::-moz-placeholder { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite :-ms-input-placeholder { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite .formerize-placeholder { + color: rgba(255, 255, 255, 0.5) !important; +} +.bodywebsite .icon { + text-decoration: none; + -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + border-bottom: none; + position: relative; +} +.bodywebsite .icon:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + text-transform: none !important; + font-family: "Font Awesome 5 Free"; +} +.bodywebsite .icon > .label { + display: none; +} +.bodywebsite .icon:before { + line-height: solid; +} +.bodywebsite .icon.solid:before { + font-weight: 900; +} +.bodywebsite .icon.brands:before { + font-family: 'Font Awesome 5 Brands'; +} +.bodywebsite .icon.major { + border: solid 1px; + display: inline-block; + border-radius: 100%; + padding: 0.65em; + margin: 0 0 2em 0; + cursor: default; +} +.bodywebsite .icon.major:before { + display: inline-block; + font-size: 6.25rem; + font-weight: 600; + font-family: "Font Awesome 5 Free"; + width: 2.25em; + height: 2.25em; + line-height: 2.2em; + border-radius: 100%; + border: solid 1px; + text-align: center; +} +.bodywebsite .icon.alt { + display: inline-block; + border: solid 1px; + border-radius: 100%; +} +.bodywebsite .icon.alt:before { + display: block; + font-size: 1.25em; + font-family: "Font Awesome 5 Free"; + width: 2em; + height: 2em; + text-align: center; + line-height: 2em; +} +.bodywebsite .icon.style1 { + color: #efa8b0; +} +.bodywebsite .icon.style2 { + color: #c79cc8; +} +.bodywebsite .icon.style3 { + color: #a89cc8; +} +.bodywebsite .icon.style4 { + color: #9bb2e1; +} +.bodywebsite .icon.style5 { + color: #8cc9f0; +} +@media screen and (max-width: 1680px) { + .bodywebsite .icon.major:before { + font-size: 5.5rem; + } +} +@media screen and (max-width: 1280px) { + .bodywebsite .icon.major:before { + font-size: 4.75rem; + } +} +@media screen and (max-width: 736px) { + .bodywebsite .icon.major { + margin: 0 0 1.5em 0; + padding: 0.35em; + } + .bodywebsite .icon.major:before { + font-size: 3.5rem; + } +} +.bodywebsite .icon.major { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .icon.major:before { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .icon.alt { + border-color: rgba(255, 255, 255, 0.35); + color: #ffffff; +} +.bodywebsite .icon.alt:hover { + background-color: rgba(255, 255, 255, 0.075); +} +.bodywebsite .icon.alt:active { + background-color: rgba(255, 255, 255, 0.2); +} +.bodywebsite .image { + border-radius: 8px; + border: 0; + display: inline-block; + position: relative; +} +.bodywebsite .image img { + border-radius: 8px; + display: block; +} +.bodywebsite .image.left, +.bodywebsite .image.right { + max-width: 40%; +} +.bodywebsite .image.left img, +.bodywebsite .image.right img { + width: 100%; +} +.bodywebsite .image.left { + float: left; + margin: 0 1.5em 1em 0; + top: 0.25em; +} +.bodywebsite .image.right { + float: right; + margin: 0 0 1em 1.5em; + top: 0.25em; +} +.bodywebsite .image.fit { + display: block; + margin: 0 0 2em 0; + width: 100%; +} +.bodywebsite .image.fit img { + width: 100%; +} +.bodywebsite .image.main { + display: block; + margin: 0 0 3em 0; + width: 100%; +} +.bodywebsite .image.main img { + width: 100%; +} +.bodywebsite ol { + list-style: decimal; + margin: 0 0 2em 0; + padding-left: 1.25em; +} +.bodywebsite ol li { + padding-left: 0.25em; +} +.bodywebsite ul { + list-style: disc; + margin: 0 0 2em 0; + padding-left: 1em; +} +.bodywebsite ul li { + padding-left: 0.5em; +} +.bodywebsite ul.alt { + list-style: none; + padding-left: 0; +} +.bodywebsite ul.alt li { + border-top: solid 1px; + padding: 0.5em 0; +} +.bodywebsite ul.alt li:first-child { + border-top: 0; + padding-top: 0; +} +.bodywebsite dl { + margin: 0 0 2em 0; +} +.bodywebsite dl dt { + display: block; + font-weight: 400; + margin: 0 0 1em 0; +} +.bodywebsite dl dd { + margin-left: 2em; +} +.bodywebsite dl.alt dt { + display: block; + width: 3em; + margin: 0; + clear: left; + float: left; +} +.bodywebsite dl.alt dd { + margin: 0 0 0.85em 5.5em; +} +.bodywebsite dl.alt:after { + content: ''; + display: block; + clear: both; +} +.bodywebsite ul.alt li { + border-top-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite dl dt { + color: #ffffff; +} +.bodywebsite ul.actions { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + cursor: default; + list-style: none; + margin-left: -1em; + padding-left: 0; +} +.bodywebsite ul.actions li { + padding: 0 0 0 1em; + vertical-align: middle; +} +.bodywebsite ul.actions.special { + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + width: 100%; + margin-left: 0; +} +.bodywebsite ul.actions.special li:first-child { + padding-left: 0; +} +.bodywebsite ul.actions.stacked { + -moz-flex-direction: column; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-left: 0; +} +.bodywebsite ul.actions.stacked li { + padding: 1.3em 0 0 0; +} +.bodywebsite ul.actions.stacked li:first-child { + padding-top: 0; +} +.bodywebsite ul.actions.fit { + width: calc(100% + 1em); +} +.bodywebsite ul.actions.fit li { + -moz-flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex-grow: 1; + flex-grow: 1; + -moz-flex-shrink: 1; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + flex-shrink: 1; + width: 100%; +} +.bodywebsite ul.actions.fit li > * { + width: 100%; +} +.bodywebsite ul.actions.fit.stacked { + width: 100%; +} +.bodywebsite .list-inline { + list-style: none; +} + +@media screen and (max-width: 480px) { + .bodywebsite ul.actions:not(.fixed) { + -moz-flex-direction: column; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-left: 0; + } + .bodywebsite ul.actions:not(.fixed) li { + -moz-flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex-grow: 1; + flex-grow: 1; + -moz-flex-shrink: 1; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + flex-shrink: 1; + padding: 1em 0 0 0; + text-align: center; + } + .bodywebsite ul.actions:not(.fixed) li > * { + } + .bodywebsite ul.actions:not(.fixed) li:first-child { + padding-top: 0; + } + .bodywebsite ul.actions:not(.fixed) li input[type="submit"].icon:before, + .bodywebsite ul.actions:not(.fixed) li input[type="reset"].icon:before, + .bodywebsite ul.actions:not(.fixed) li input[type="button"].icon:before, + .bodywebsite ul.actions:not(.fixed) li button.icon:before, + .bodywebsite ul.actions:not(.fixed) li .buttonwebsite.icon:before { + margin-left: -0.5rem; + } +} +.bodywebsite ul.icons { + cursor: default; + list-style: none; + padding-left: 0; +} +.bodywebsite ul.icons li { + display: inline-block; + padding: 0 0.65em 0 0; +} +.bodywebsite ul.icons li:last-child { + padding-right: 0 !important; +} +.bodywebsite section.special, +.bodywebsite article.special { + text-align: center; +} +.bodywebsite header.major { + margin-bottom: 3em; +} +.bodywebsite header.major h2 { + font-size: 2em; +} +.bodywebsite header.major h2:after { + display: block; + content: ''; + width: 3.25em; + height: 2px; + margin: 0.7em 0 1em 0; + border-radius: 2px; +} +.bodywebsite section.special header.major h2:after, +.bodywebsite article.special header.major h2:after { + margin-left: auto; + margin-right: auto; +} +.bodywebsite header.major p { + font-size: 1.25em; + letter-spacing: -0.025em; +} +.bodywebsite header.major.special { + text-align: center; +} +.bodywebsite header.major.special h2:after { + margin-left: auto; + margin-right: auto; +} +.bodywebsite footer.major { + margin-top: 3em; +} +@media screen and (max-width: 736px) { + .bodywebsite header.major { + margin-bottom: 0; + } + .bodywebsite header.major h2 { + font-size: 1.5em; + } + .bodywebsite header.major p { + font-size: 1em; + letter-spacing: 0; + } + .bodywebsite header.major p br { + display: none; + } + .bodywebsite footer.major { + margin-top: 0; + } +} +.bodywebsite header.major h2:after { + background-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .table-wrapper { + -webkit-overflow-scrolling: touch; + overflow-x: auto; +} +.bodywebsite table { + margin: 0 0 2em 0; + width: 100%; +} +.bodywebsite table tbody tr { + border: solid 1px; + border-left: 0; + border-right: 0; +} +.bodywebsite table td { + padding: 0.75em 0.75em; +} +.bodywebsite table th { + font-size: 0.9em; + font-weight: 400; + padding: 0 0.75em 0.75em 0.75em; + text-align: left; +} +.bodywebsite table thead { + border-bottom: solid 2px; +} +.bodywebsite table tfoot { + border-top: solid 2px; +} +.bodywebsite table.alt { + border-collapse: separate; +} +.bodywebsite table.alt tbody tr td { + border: solid 1px; + border-left-width: 0; + border-top-width: 0; +} +.bodywebsite table.alt tbody tr td:first-child { + border-left-width: 1px; +} +.bodywebsite table.alt tbody tr:first-child td { + border-top-width: 1px; +} +.bodywebsite table.alt thead { + border-bottom: 0; +} +.bodywebsite table.alt tfoot { + border-top: 0; +} +.bodywebsite table tbody tr { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite table tbody tr:nth-child(2n + 1) { + background-color: rgba(255, 255, 255, 0.075); +} +.bodywebsite table th { + color: #ffffff; +} +.bodywebsite table thead { + border-bottom-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite table tfoot { + border-top-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite table.alt tbody tr td { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite .features { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + width: calc(100% + 2em); + margin: 0 0 3em -2em; + padding: 0; + list-style: none; +} +.bodywebsite .features li { + width: calc(33.33333% - 2em); + margin-left: 2em; + margin-top: 3em; + padding: 0; +} +.bodywebsite .features li:nth-child(1), +.bodywebsite .features li:nth-child(2), +.bodywebsite .features li:nth-child(3) { + margin-top: 0; +} +.bodywebsite .features li > :last-child { + margin-bottom: 0; +} +@media screen and (max-width: 980px) { + .bodywebsite .features li { + width: calc(50% - 2em); + } + .bodywebsite .features li:nth-child(3) { + margin-top: 3em; + } +} +@media screen and (max-width: 736px) { + .bodywebsite .features { + width: 100%; + margin: 0 0 2em 0; + } + .bodywebsite .features li { + width: 100%; + margin-left: 0; + margin-top: 2em; + } + .bodywebsite .features li:nth-child(2), + .bodywebsite .features li:nth-child(3) { + margin-top: 2em; + } +} +.bodywebsite .statistics { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + width: 100%; + margin: 0 0 3em 0; + padding: 0; + list-style: none; + cursor: default; +} +.bodywebsite .statistics li { + -moz-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 1.5em; + color: #ffffff; + text-align: center; +} +.bodywebsite .statistics li.style1 { + background-color: #efa8b0; +} +.bodywebsite .statistics li.style2 { + background-color: #c79cc8; +} +.bodywebsite .statistics li.style3 { + background-color: #a89cc8; +} +.bodywebsite .statistics li.style4 { + background-color: #9bb2e1; +} +.bodywebsite .statistics li.style5 { + background-color: #8cc9f0; +} +.bodywebsite .statistics li strong, +.bodywebsite .statistics li b { + display: block; + font-size: 2em; + line-height: 1.1; + color: inherit !important; + font-weight: 300; + letter-spacing: -0.025em; +} +.bodywebsite .statistics li:first-child { + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; +} +.bodywebsite .statistics li:last-child { + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} +.bodywebsite .statistics li .icon { + display: inline-block; +} +.bodywebsite .statistics li .icon:before { + font-size: 2.75rem; + line-height: 1.3; +} +@media screen and (max-width: 980px) { + .bodywebsite .statistics li strong, + .bodywebsite .statistics li b { + font-size: 1.5em; + } +} +@media screen and (max-width: 736px) { + .bodywebsite .statistics { + display: block; + width: 20em; + max-width: 100%; + margin: 0 auto 2em auto; + } + .bodywebsite .statistics li:first-child { + border-bottom-left-radius: 0; + border-top-right-radius: 8px; + } + .bodywebsite .statistics li:last-child { + border-top-right-radius: 0; + border-bottom-left-radius: 8px; + } + .bodywebsite .statistics li .icon:before { + font-size: 3.75rem; + } + .bodywebsite .statistics li strong, + .bodywebsite .statistics li b { + font-size: 2.5em; + } +} +.bodywebsite .spotlight { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-align-items: center; + -webkit-align-items: center; + -ms-align-items: center; + align-items: center; + margin: 0 0 2em 0; +} +.bodywebsite .spotlight .content { + -moz-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +.bodywebsite .spotlight .content > :last-child { + margin-bottom: 0; +} +.bodywebsite .spotlight .content header.major { + margin: 0 0 2em 0; +} +.bodywebsite .spotlight .image { + display: inline-block; + margin-left: 4em; + padding: 0.65em; + border-radius: 100%; + border: solid 1px; +} +.bodywebsite .spotlight .image img { + display: block; + border-radius: 100%; + width: 14em; + height: 14em; +} +@media screen and (max-width: 980px) { + .bodywebsite .spotlight { + -moz-flex-direction: column-reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + text-align: center; + } + .bodywebsite .spotlight .content { + -moz-flex: 0 1 auto; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 100%; + } + .bodywebsite .spotlight .content header.major h2:after { + margin-left: auto; + margin-right: auto; + } + .bodywebsite .spotlight .content .actions { + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + width: calc(100% + 1em); + } + .bodywebsite .spotlight .image { + -moz-flex: 0 1 auto; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-left: 0; + margin-bottom: 2em; + } +} +@media screen and (max-width: 736px) { + .bodywebsite .spotlight .image { + padding: 0.35em; + } + .bodywebsite .spotlight .image img { + width: 12em; + } +} +.bodywebsite .spotlight .image { + border-color: rgba(255, 255, 255, 0.35); +} +.bodywebsite #header { + padding: 5em 5em 1em 5em ; + text-align: center; +} +.bodywebsite #header h1 { + margin: 0 0 0.25em 0; +} +.bodywebsite #header p { + font-size: 1.25em; + letter-spacing: -0.025em; +} +.bodywebsite #header.alt { + padding: 7em 5em 4em 5em ; +} +.bodywebsite #header.alt h1 { + font-size: 3.25em; +} +.bodywebsite #header.alt > * { + -moz-transition: opacity 3s ease; + -webkit-transition: opacity 3s ease; + -ms-transition: opacity 3s ease; + transition: opacity 3s ease; + -moz-transition-delay: 0.5s; + -webkit-transition-delay: 0.5s; + -ms-transition-delay: 0.5s; + transition-delay: 0.5s; + opacity: 1; +} +.bodywebsite #header.alt .logo { + -moz-transition: opacity 1.25s ease, -moz-transform 0.5s ease; + -webkit-transition: opacity 1.25s ease, -webkit-transform 0.5s ease; + -ms-transition: opacity 1.25s ease, -ms-transform 0.5s ease; + transition: opacity 1.25s ease, transform 0.5s ease; + -moz-transition-delay: 0s; + -webkit-transition-delay: 0s; + -ms-transition-delay: 0s; + transition-delay: 0s; + display: block; + margin: 0 0 1.5em 0; +} +.bodywebsite #header.alt .logo img { + display: block; + margin: 0 auto; + max-width: 75%; +} +@media screen and (max-width: 1280px) { + .bodywebsite #header { + padding: 4em 4em 0.1em 4em; + } + .bodywebsite #header.alt { + padding: 6em 4em 3em 4em ; + } +} +@media screen and (max-width: 980px) { + .bodywebsite #header { + padding: 4em 3em 0.1em 3em; + } + .bodywebsite #header.alt { + padding: 5em 3em 2em 3em ; + } +} +@media screen and (max-width: 736px) { + .bodywebsite #header { + padding: 3em 2em 0.1em 2em; + } + .bodywebsite #header p { + font-size: 1em; + letter-spacing: 0; + } + .bodywebsite #header p br { + display: none; + } + .bodywebsite #header.alt { + padding: 4em 2em 1em 2em ; + } + .bodywebsite #header.alt h1 { + font-size: 2.5em; + } +} +@media screen and (max-width: 480px) { + .bodywebsite #header { + padding: 3em 1.5em 0.1em 1.5em; + } + .bodywebsite #header.alt { + padding: 4em 1.5em 1em 1.5em; + } +} +@media screen and (max-width: 360px) { + .bodywebsite #header { + padding: 2.5em 1em 0.1em 1em; + } + .bodywebsite #header.alt { + padding: 3.5em 1em 0.5em 1em; + } +} +div.bodywebsite .is-preload #header.alt > * { + opacity: 0; +} +div.bodywebsite .is-preload #header.alt .logo { + -moz-transform: scale(0.8) rotate(-30deg); + -webkit-transform: scale(0.8) rotate(-30deg); + -ms-transform: scale(0.8) rotate(-30deg); + transform: scale(0.8) rotate(-30deg); +} +.bodywebsite #nav { + -moz-transition: background-color 0.2s ease, border-top-left-radius 0.2s ease, border-top-right-radius 0.2s ease, padding 0.2s ease; + -webkit-transition: background-color 0.2s ease, border-top-left-radius 0.2s ease, border-top-right-radius 0.2s ease, padding 0.2s ease; + -ms-transition: background-color 0.2s ease, border-top-left-radius 0.2s ease, border-top-right-radius 0.2s ease, padding 0.2s ease; + transition: background-color 0.2s ease, border-top-left-radius 0.2s ease, border-top-right-radius 0.2s ease, padding 0.2s ease; + background-color: #ffffff; + color: #636363; + position: absolute; + width: 64em; + max-width: calc(100% - 4em); + padding-top: 1em; + padding-bottom: 1em; + background-color: #f7f7f7; + border-top-left-radius: 0.25em; + border-top-right-radius: 0.25em; + cursor: default; + text-align: center; +} +.bodywebsite #nav input, +.bodywebsite #nav select, +.bodywebsite #nav textarea { + color: #636363; +} +.bodywebsite #nav a:hover { + color: #636363; +} +.bodywebsite #nav strong, +.bodywebsite #nav b { + color: #636363; +} +.bodywebsite #nav h1, +.bodywebsite #nav h2, +.bodywebsite #nav h3, +.bodywebsite #nav h4, +.bodywebsite #nav h5, +.bodywebsite #nav h6 { + color: #636363; +} +.bodywebsite #nav blockquote { + border-left-color: #dddddd; +} +.bodywebsite #nav code { + background: rgba(222, 222, 222, 0.25); + border-color: #dddddd; +} +.bodywebsite #nav hr { + border-bottom-color: #dddddd; +} +.bodywebsite #nav + #main { + padding-top: 4.25em; +} +.bodywebsite #nav ul { + margin: 0; + padding: 0; + list-style: none; +} +.bodywebsite #nav ul li { + -moz-transition: margin 0.2s ease; + -webkit-transition: margin 0.2s ease; + -ms-transition: margin 0.2s ease; + transition: margin 0.2s ease; + display: inline-block; + margin: 0 0.35em; + padding: 0; + vertical-align: middle; +} +.bodywebsite #nav ul li a { + -moz-transition: font-size 0.2s ease; + -webkit-transition: font-size 0.2s ease; + -ms-transition: font-size 0.2s ease; + transition: font-size 0.2s ease; + display: inline-block; + height: 2.25em; + line-height: 2.25em; + padding: 0 1.25em; + border: 0; + border-radius: 8px; + box-shadow: inset 0 0 0 1px transparent; +} +.bodywebsite #nav ul li a:hover { + background-color: rgba(222, 222, 222, 0.25); +} +.bodywebsite #nav ul li a.active { + background-color: #ffffff; + box-shadow: none; +} +.bodywebsite #nav.alt { + position: fixed; + top: 0; + padding-top: 0.5em; + padding-bottom: 0.5em; + background-color: rgba(247, 247, 247, 0.95); + border-top-left-radius: 0; + border-top-right-radius: 0; + z-index: 10000; +} +.bodywebsite #nav.alt ul li { + margin: 0 0.175em; +} +.bodywebsite #nav.alt ul li a { + font-size: 0.9em; +} +@media screen and (max-width: 736px) { + .bodywebsite #nav { + display: none; + } + .bodywebsite #nav + #main { + padding-top: 0; + } +} +.bodywebsite #main { + background-color: #ffffff; + color: #636363; + border-radius: 0.25em; +} +.bodywebsite #main input, +.bodywebsite #main select, +.bodywebsite #main textarea { + color: #636363; +} +.bodywebsite #main a:hover { + color: #636363; +} +.bodywebsite #main strong, +.bodywebsite #main b { + color: #636363; +} +.bodywebsite #main h1, +.bodywebsite #main h2, +.bodywebsite #main h3, +.bodywebsite #main h4, +.bodywebsite #main h5, +.bodywebsite #main h6 { + color: #636363; +} +.bodywebsite #main blockquote { + border-left-color: #dddddd; +} +.bodywebsite #main code { + background: rgba(222, 222, 222, 0.25); + border-color: #dddddd; +} +.bodywebsite #main hr { + border-bottom-color: #dddddd; +} +.bodywebsite #main .box { + border-color: #dddddd; +} +.bodywebsite #main input[type="submit"], +.bodywebsite #main input[type="reset"], +.bodywebsite #main input[type="button"], +.bodywebsite #main button, +.bodywebsite #main .buttonwebsite { + background-color: transparent; + box-shadow: inset 0 0 0 1px #dddddd; + color: #636363 !important; +} +.bodywebsite #main input[type="submit"]:hover, +.bodywebsite #main input[type="reset"]:hover, +.bodywebsite #main input[type="button"]:hover, +.bodywebsite #main button:hover, +.bodywebsite #main .buttonwebsite:hover { + background-color: rgba(222, 222, 222, 0.25); +} +.bodywebsite #main input[type="submit"]:active, +.bodywebsite #main input[type="reset"]:active, +.bodywebsite #main input[type="button"]:active, +.bodywebsite #main button:active, +.bodywebsite #main .buttonwebsite:active { + background-color: rgba(222, 222, 222, 0.5); +} +.bodywebsite #main input[type="submit"].icon:before, +.bodywebsite #main input[type="reset"].icon:before, +.bodywebsite #main input[type="button"].icon:before, +.bodywebsite #main button.icon:before, +.bodywebsite #main .buttonwebsite.icon:before { + color: rgba(99, 99, 99, 0.25); +} +.bodywebsite #main input[type="submit"].primary, +.bodywebsite #main input[type="reset"].primary, +.bodywebsite #main input[type="button"].primary, +.bodywebsite #main button.primary, +.bodywebsite #main .buttonwebsite.primary { + background-color: #8cc9f0; + color: #ffffff !important; + box-shadow: none; +} +.bodywebsite #main input[type="submit"].primary:hover, +.bodywebsite #main input[type="reset"].primary:hover, +.bodywebsite #main input[type="button"].primary:hover, +.bodywebsite #main button.primary:hover, +.bodywebsite #main .buttonwebsite.primary:hover { + background-color: #9acff2; +} +.bodywebsite #main input[type="submit"].primary:active, +.bodywebsite #main input[type="reset"].primary:active, +.bodywebsite #main input[type="button"].primary:active, +.bodywebsite #main button.primary:active, +.bodywebsite #main .buttonwebsite.primary:active { + background-color: #7ec3ee; +} +.bodywebsite #main input[type="submit"].primary.icon:before, +.bodywebsite #main input[type="reset"].primary.icon:before, +.bodywebsite #main input[type="button"].primary.icon:before, +.bodywebsite #main button.primary.icon:before, +.bodywebsite #main .buttonwebsite.primary.icon:before { + color: #ffffff !important; +} +.bodywebsite #main label { + color: #636363; +} +.bodywebsite #main input[type="text"], +.bodywebsite #main input[type="password"], +.bodywebsite #main input[type="email"], +.bodywebsite #main select, +.bodywebsite #main textarea { + background-color: rgba(222, 222, 222, 0.25); + border-color: #dddddd; +} +.bodywebsite #main input[type="text"]:focus, +.bodywebsite #main input[type="password"]:focus, +.bodywebsite #main input[type="email"]:focus, +.bodywebsite #main select:focus, +.bodywebsite #main textarea:focus { + border-color: #8cc9f0; + box-shadow: 0 0 0 1px #8cc9f0; +} +.bodywebsite #main select { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='%23dddddd' /%3E%3C/svg%3E"); +} +.bodywebsite #main select option { + color: #636363; + background: #ffffff; +} +.bodywebsite #main input[type="checkbox"] + label, +.bodywebsite #main input[type="radio"] + label { + color: #636363; +} +.bodywebsite #main input[type="checkbox"] + label:before, +.bodywebsite #main input[type="radio"] + label:before { + background: rgba(222, 222, 222, 0.25); + border-color: #dddddd; +} +.bodywebsite #main input[type="checkbox"]:checked + label:before, +.bodywebsite #main input[type="radio"]:checked + label:before { + background-color: #636363; + border-color: #636363; + color: #ffffff; +} +.bodywebsite #main input[type="checkbox"]:focus + label:before, +.bodywebsite #main input[type="radio"]:focus + label:before { + border-color: #8cc9f0; + box-shadow: 0 0 0 1px #8cc9f0; +} +.bodywebsite #main ::-webkit-input-placeholder { + color: rgba(99, 99, 99, 0.25) !important; +} +.bodywebsite #main :-moz-placeholder { + color: rgba(99, 99, 99, 0.25) !important; +} +.bodywebsite #main ::-moz-placeholder { + color: rgba(99, 99, 99, 0.25) !important; +} +.bodywebsite #main :-ms-input-placeholder { + color: rgba(99, 99, 99, 0.25) !important; +} +.bodywebsite #main .formerize-placeholder { + color: rgba(99, 99, 99, 0.25) !important; +} +.bodywebsite #main .icon.major { + border-color: #dddddd; +} +.bodywebsite #main .icon.major:before { + border-color: #dddddd; +} +.bodywebsite #main .icon.alt { + border-color: #dddddd; + color: #636363; +} +.bodywebsite #main .icon.alt:hover { + background-color: rgba(222, 222, 222, 0.25); +} +.bodywebsite #main .icon.alt:active { + background-color: rgba(222, 222, 222, 0.5); +} +.bodywebsite #main ul.alt li { + border-top-color: #dddddd; +} +.bodywebsite #main dl dt { + color: #636363; +} +.bodywebsite #main header.major h2:after { + background-color: #dddddd; + background-image: -moz-linear-gradient(90deg, #efa8b0, #a89cc8, #8cc9f0); + background-image: -webkit-linear-gradient(90deg, #efa8b0, #a89cc8, #8cc9f0); + background-image: -ms-linear-gradient(90deg, #efa8b0, #a89cc8, #8cc9f0); + background-image: linear-gradient(90deg, #efa8b0, #a89cc8, #8cc9f0); +} +.bodywebsite #main table tbody tr { + border-color: #dddddd; +} +.bodywebsite #main table tbody tr:nth-child(2n + 1) { + background-color: rgba(222, 222, 222, 0.25); +} +.bodywebsite #main table th { + color: #636363; +} +.bodywebsite #main table thead { + border-bottom-color: #dddddd; +} +.bodywebsite #main table tfoot { + border-top-color: #dddddd; +} +.bodywebsite #main table.alt tbody tr td { + border-color: #dddddd; +} +.bodywebsite #main .spotlight .image { + border-color: #dddddd; +} +.bodywebsite #main > .main { + padding: 5em 5em 3em 5em ; + border-top: solid 1px #dddddd; +} +.bodywebsite #main > .main:first-child { + border-top: 0; +} +.bodywebsite #main > .main .image.main:first-child { + margin: -5em 0 5em -5em; + width: calc(100% + 10em); + border-top-right-radius: 0.25em; + border-top-left-radius: 0.25em; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.bodywebsite #main > .main .image.main:first-child img { + border-top-right-radius: 0.25em; + border-top-left-radius: 0.25em; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +@media screen and (max-width: 1280px) { + .bodywebsite #main > .main { + padding: 4em 4em 2em 4em ; + } + .bodywebsite #main > .main .image.main:first-child { + margin: -4em 0 4em -4em; + width: calc(100% + 8em); + } +} +@media screen and (max-width: 980px) { + .bodywebsite #main > .main { + padding: 4em 3em 2em 3em ; + } + .bodywebsite #main > .main .image.main:first-child { + margin: -4em 0 4em -3em; + width: calc(100% + 6em); + } +} +@media screen and (max-width: 736px) { + .bodywebsite #main > .main { + padding: 3em 2em 1em 2em ; + } + .bodywebsite #main > .main .image.main:first-child { + margin: -3em 0 2em -2em; + width: calc(100% + 4em); + } +} +@media screen and (max-width: 480px) { + .bodywebsite #main > .main { + padding: 3em 1.5em 1em 1.5em; + } + .bodywebsite #main > .main .image.main:first-child { + margin: -3em 0 1.5em -1.5em; + width: calc(100% + 3em); + } +} +@media screen and (max-width: 360px) { + .bodywebsite #main { + border-radius: 0; + } + .bodywebsite #main > .main { + padding: 2.5em 1em 0.5em 1em; + } + .bodywebsite #main > .main .image.main:first-child { + margin: -2.5em 0 1.5em -1em; + width: calc(100% + 2em); + border-radius: 0; + } + .bodywebsite #main > .main .image.main:first-child img { + border-radius: 0; + } +} +.bodywebsite #footer section { + width: calc(50% - 22px); + padding: 10px; +} +.bodywebsite #footer { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 5em 5em 3em 5em ; +} +.bodywebsite #footer .copyright { + font-size: 0.8em; + text-align: center; +} +@media screen and (max-width: 1280px) { + .bodywebsite #footer { + padding: 4em 4em 2em 4em ; + } +} +@media screen and (max-width: 980px) { + .bodywebsite #footer { + padding: 4em 3em 2em 3em ; + display: block; + } + .bodywebsite #footer .copyright { + text-align: left; + } +} +@media screen and (max-width: 736px) { + .bodywebsite #footer { + padding: 3em 2em 1em 2em ; + } +} +@media screen and (max-width: 480px) { + .bodywebsite #footer { + padding: 3em 1.5em 1em 1.5em; + } +} +@media screen and (max-width: 480px) { + .bodywebsite #footer { + padding: 2.5em 1em 0.5em 1em; + } +} +.bodywebsite #wrapper { + width: 64em; + max-width: calc(100% - 4em); + margin: 0 auto; +} +@media screen and (max-width: 480px) { + .bodywebsite #wrapper { + max-width: calc(100% - 2em); + } +} +@media screen and (max-width: 360px) { + .bodywebsite #wrapper { + max-width: 100%; + } +} + +/* CSS for ToTop button */ + +#myBtnToTop { + display: none; /* Hidden by default */ + position: fixed; /* Fixed/sticky position */ + bottom: 20px; /* Place the button at the bottom of the page */ + right: 30px; /* Place the button 30px from the right */ + z-index: 99; /* Make sure it does not overlap */ + border: none; /* Remove borders */ + outline: none; /* Remove outline */ + background-color: #868; /* Set a background color */ + color: white; /* Text color */ + cursor: pointer; /* Add a mouse pointer on hover */ + padding: 15px; /* Some padding */ + border-radius: 10px; /* Rounded corners */ + font-size: 18px; /* Increase font size */ + min-width: unset; + height: unset; + line-height: unset; +} + +#myBtnToTop:hover { + background-color: #555; /* Add a dark-grey background on hover */ +} + diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/this-is-a-blog-post.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/this-is-a-blog-post.php new file mode 100644 index 00000000000..0b70a249b2c --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/this-is-a-blog-post.php @@ -0,0 +1,4 @@ +ref.'/page25.tpl.php'; diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php new file mode 100644 index 00000000000..4f1c281ee93 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php @@ -0,0 +1,239 @@ +entity; +$original_file = GETPOST("file", "alpha"); +$l = GETPOST('l', 'aZ09'); +$limit = GETPOST('limit', 'int'); + +// Parameters for RSS +$rss = GETPOST('rss', 'aZ09'); +if ($rss) $original_file = 'blog.rss'; + +// If we have a hash public (hashp), we guess the original_file. +if (!empty($hashp)) { + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($db); + $result = $ecmfile->fetch(0, '', '', '', $hashp); + if ($result > 0) { + $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory + // filepath can be 'users/X' or 'X/propale/PR11111' + if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part. + $tmp = explode('/', $tmp[1], 2); + } + $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path + + if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter. + if ($moduleparttocheck == $modulepart) { + // We remove first level of directory + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + //var_dump($original_file); exit; + } else { + print 'Bad link. File is from another module part.'; + } + } else { + $modulepart = $moduleparttocheck; + $original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir + } + } else { + print "ErrorFileNotFoundWithSharedLink"; + exit; + } +} + +// Define attachment (attachment=true to force choice popup 'open'/'save as') +$attachment = true; +if (preg_match('/\.(html|htm)$/i', $original_file)) $attachment = false; +if (isset($_GET["attachment"])) $attachment = (GETPOST("attachment", 'alphanohtml') ? true : false); +if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) $attachment = false; + +// Define mime type +$type = 'application/octet-stream'; +if (GETPOSTISSET('type')) $type = GETPOST('type', 'alpha'); +else $type = dol_mimetype($original_file); + +// Security: Delete string ../ into $original_file +$original_file = str_replace("../", "/", $original_file); + +// Cache or not +if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) { + // Important: Following code is to avoid page request by browser and PHP CPU at + // each Dolibarr page access. + header('Cache-Control: max-age=3600, public, must-revalidate'); + header('Pragma: cache'); // This is to avoid having Pragma: no-cache +} + +$refname = basename(dirname($original_file)."/"); + +// Get RSS news +if ($rss) { + $format = 'rss'; + $type = ''; + $cachedelay = 0; + $filename = $original_file; + $dir_temp = $conf->website->dir_temp; + + include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; + include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; + $website = new Website($db); + $websitepage = new WebsitePage($db); + + $website->fetch('', $websitekey); + + $filters = array('type_container'=>'blogpost'); + if ($l) $filters['lang'] = $l; + + $MAXNEWS = ($limit ? $limit : 20); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters); + $eventarray = array(); + if (is_array($arrayofblogs)) { + foreach ($arrayofblogs as $blog) { + $blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php'; + $eventarray[] = $blog; + } + } + + require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; + require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; + + dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG); + + // Clean parameters + if (!$filename) { + $extension = 'rss'; + $filename = $format.'.'.$extension; + } + + // Create dir and define output file (definitive and temporary) + $result = dol_mkdir($dir_temp); + $outputfile = $dir_temp.'/'.$filename; + + $result = 0; + + $buildfile = true; + + if ($cachedelay) { + $nowgmt = dol_now(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) { + dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled"); + $buildfile = false; + } + } + + if ($buildfile) { + $langs->load("other"); + $title = $desc = $langs->transnoentities('LatestBlogPosts'); + + // Create temp file + $outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads + @chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK)); + + // Write file + $result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l); + + if ($result >= 0) { + if (dol_move($outputfiletmp, $outputfile, 0, 1)) $result = 1; + else { + $error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile; + dol_syslog("build_exportfile ".$error, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + print $error; + exit(-1); + } + } else { + dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR); + dol_delete_file($outputfiletmp, 0, 1); + $langs->load("errors"); + print $langs->trans("ErrorFailToCreateFile", $outputfile); + exit(-1); + } + } + + if ($result >= 0) { + $attachment = false; + if (isset($_GET["attachment"])) $attachment = $_GET["attachment"]; + //$attachment = false; + $contenttype = 'application/rss+xml'; + if (isset($_GET["contenttype"])) $contenttype = $_GET["contenttype"]; + //$contenttype='text/plain'; + $outputencoding = 'UTF-8'; + + if ($contenttype) header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : '')); + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + + // Ajout directives pour resoudre bug IE + //header('Cache-Control: Public, must-revalidate'); + //header('Pragma: public'); + if ($cachedelay) header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate'); + else header('Cache-Control: private, must-revalidate'); + + // Clean parameters + $outputfile = $dir_temp.'/'.$filename; + $result = readfile($outputfile); + if (!$result) print 'File '.$outputfile.' was empty.'; + + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + exit; + } +} +// Get logos +elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) { + readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); +} else { + // Find the subdirectory name as the reference + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); + $accessallowed = $check_access['accessallowed']; + $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; + $fullpath_original_file = $check_access['original_file']; // $fullpath_original_file is now a full path name + if ($hashp) { + $accessallowed = 1; // When using hashp, link is public so we force $accessallowed + $sqlprotectagainstexternals = ''; + } + + // Security: + // Limit access if permissions are wrong + if (!$accessallowed) { + print 'Access forbidden'; + exit; + } + + clearstatcache(); + + $filename = basename($fullpath_original_file); + + // Output file on browser + dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); + $fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset + + // This test if file exists should be useless. We keep it to find bug more easily + if (!file_exists($fullpath_original_file_osencoded)) { + print "ErrorFileDoesNotExists: ".$original_file; + exit; + } + + // Permissions are ok and file found, so we return it + //top_httphead($type); + header('Content-Type: '.$type); + header('Content-Description: File Transfer'); + if ($encoding) header('Content-Encoding: '.$encoding); + // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + else header('Content-Disposition: inline; filename="'.$filename.'"'); + header('Content-Length: '.dol_filesize($fullpath_original_file)); + + readfile($fullpath_original_file_osencoded); +} +if (is_object($db)) $db->close(); +// END PHP diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/daviddoe.png b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/daviddoe.png new file mode 100644 index 00000000000..ec1fe6eacb9 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/daviddoe.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/overlay.png b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/overlay.png new file mode 100644 index 00000000000..a5619432c61 Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/overlay.png differ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/pic01.jpg b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/pic01.jpg new file mode 100644 index 00000000000..b484c83143b Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-stellar/medias/image/websitekey/pic01.jpg differ diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/website_pages.sql b/htdocs/install/doctemplates/websites/website_template-stellar/website_pages.sql new file mode 100644 index 00000000000..59ad32e4bf0 --- /dev/null +++ b/htdocs/install/doctemplates/websites/website_template-stellar/website_pages.sql @@ -0,0 +1,18 @@ +-- Page ID 20 -> 1__+MAX_llx_website_page__ - Aliases credits --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(1__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'credits', '', 'Credits', 'Credits and legal notices', 'en', '', '', '1', '2019-08-15 16:39:56', '2020-02-21 10:27:17', null, '', 'page', '', ' __N__ __N__
    __N____N__ __N__
    __N__

    Mentions légales

    __N__

    Curriculum Vitae

    __N__
    __N____N__ __N__ __N____N__ __N__
    __N____N__ __N__
    __N____N__

    __N__ __N__This site is edited by name; ?>__N____N__ __N__

    __N____N__
    __N____N__
    __N____N__ __N__ __N____N__
    __N____N__', '', '0'); +-- Page ID 21 -> 2__+MAX_llx_website_page__ - Aliases footer --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(2__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'footer', '', 'Footer', '', 'fr', '', '', '1', '2019-08-15 16:42:44', '2020-06-19 10:18:14', null, '', 'page', '', ' __N__
    __N__
    __N__

    Aliquam sed mauris

    __N__

    Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.

    __N__ __N__
    __N__
    __N__

    Etiam feugiat

    __N__
    __N__
    Address
    __N__
    getFullAddress(1, \'
    \'); ?>
    __N__
    Phone
    __N__
    phone; ?>
    __N__
    Email
    __N__
    email; ?>\">email; ?>
    __N__
    __N__
      __N__ __N__
    __N__
    © Untitled. Design: HTML5 UP adapted for Dolibarr by DoliCloud.
    __N__
    __N____N____N____N____N____N__', '', '0'); +-- Page ID 22 -> 3__+MAX_llx_website_page__ - Aliases generic --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(3__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'generic', '', 'Generic page', 'Generic page or my personal Blog', 'en', '', 'My generic page', '1', '2019-08-15 00:03:43', '2020-05-14 18:48:34', null, '', 'page', '', ' __N____N__
    __N____N__ __N__
    __N__

    Another page

    __N__

    Ipsum dolor sit amet nullam

    __N__
    __N____N__ __N__ __N____N__ __N__
    __N____N__ __N__
    __N__ \"\"__N__

    Magna feugiat lorem

    __N__

    Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis fames ac ante ipsum primis in faucibus.

    __N__

    Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet.

    __N__

    Tempus veroeros

    __N__

    Cep risus aliquam gravida cep ut lacus amet. Adipiscing faucibus nunc placerat. Tempus adipiscing turpis non blandit accumsan eget lacinia nunc integer interdum amet aliquam ut orci non col ut ut praesent.

    __N__
    __N____N__ __N__
    __N__

    Latest Blog posts

    __N__
    __N__ loadLangs(array(\"main\",\"website\"));__N__ $fuser = new User($db);__N__ $arrayofblogs = $websitepage->fetchAll($website->id, \'DESC\', \'date_creation\', 5, 0, array(\'type_container\'=>\'blogpost\', \'status\'=>1, \'lang\'=>\'null,\'.$websitepage->lang)); // , \'keywords\'=>$keyword__N__ if (is_numeric($arrayofblogs) && $arrayofblogs < 0)__N__ {__N__ print \'
    \'.$weblangs->trans($websitepage->error).\'
    \';__N__ }__N__ elseif (is_array($arrayofblogs) && ! empty($arrayofblogs))__N__ {__N__ foreach($arrayofblogs as $blog)__N__ {__N__ print \'\';__N__ }__N__ }__N__ else__N__ {__N__ print \'
    \';__N__ print \'
    \';__N__ //print $weblangs->trans(\"NoArticlesFoundForTheKeyword\", $keyword);__N__ print $weblangs->trans(\"NoArticlesFound\");__N__ print \'
    \';__N__ print \'
    \';__N__ __N__ }__N__ ?>__N__
    __N__
    __N____N__
    __N____N____N____N__ __N__ __N__ __N__ __N__
    __N____N__', '', '0'); +-- Page ID 23 -> 4__+MAX_llx_website_page__ - Aliases home --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(4__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'home', '', 'My personal blog', 'Home page or my personal Blog', 'en', '', 'My personal blog', '1', '2019-08-15 00:03:43', '2022-07-06 23:50:25', null, '', 'page', '', '__N__
    __N____N__ __N__
    __N__
    __N__

    David Doe

    __N__

    Welcome on my website
    __N__

    __N__
    __N__
    __N____N__ __N__ __N____N__ __N__
    __N____N__ __N__
    __N__
    __N__
    __N__
    __N__

    Ipsum sed adipiscing

    __N__
    __N__

    Sed lorem ipsum dolor sit amet nullam consequat feugiat consequat magna__N__ adipiscing magna etiam amet veroeros. Lorem ipsum dolor tempus sit cursus.__N__ Tempus nisl et nullam lorem ipsum dolor sit amet aliquam.

    __N__ __N__
    __N__ \"\"__N__
    __N__
    __N____N__ __N__
    __N__
    __N__

    Magna veroeros

    __N__
    __N__
      __N__
    • __N__ __N__

      Ipsum consequat

      __N__

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      __N__
    • __N__
    • __N__ __N__

      Amed sed feugiat

      __N__

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      __N__
    • __N__
    • __N__ __N__

      Dolor nullam

      __N__

      Sed lorem amet ipsum dolor et amet nullam consequat a feugiat consequat tempus veroeros sed consequat.

      __N__
    • __N__
    __N__ __N__
    __N____N__ __N__
    __N__
    __N__

    Ipsum consequat

    __N__

    Donec imperdiet consequat consequat. Suspendisse feugiat congue
    __N__ posuere. Nulla massa urna, fermentum eget quam aliquet.

    __N__
    __N__
      __N__
    • __N__ __N__ 5,120 Etiam__N__
    • __N__
    • __N__ __N__ 8,192 Magna__N__
    • __N__
    • __N__ __N__ 2,048 Tempus__N__
    • __N__
    • __N__ __N__ 4,096 Aliquam__N__
    • __N__
    • __N__ __N__ 1,024 Nullam__N__
    • __N__
    __N__

    Nam elementum nisl et mi a commodo porttitor. Morbi sit amet nisl eu arcu faucibus hendrerit vel a risus. Nam a orci mi, elementum ac arcu sit amet, fermentum pellentesque et purus. Integer maximus varius lorem, sed convallis diam accumsan sed. Etiam porttitor placerat sapien, sed eleifend a enim pulvinar faucibus semper quis ut arcu. Ut non nisl a mollis est efficitur vestibulum. Integer eget purus nec nulla mattis et accumsan ut magna libero. Morbi auctor iaculis porttitor. Sed ut magna ac risus et hendrerit scelerisque. Praesent eleifend lacus in lectus aliquam porta. Cras eu ornare dui curabitur lacinia.

    __N__ __N__
    __N____N__ __N__
    __N__
    __N__

    Congue imperdiet

    __N__

    Donec imperdiet consequat consequat. Suspendisse feugiat congue
    __N__ posuere. Nulla massa urna, fermentum eget quam aliquet.

    __N__
    __N__ __N__
    __N____N__
    __N____N__ __N____N__
    __N____N__', '', '0'); +UPDATE llx_website SET fk_default_home = 4__+MAX_llx_website_page__ WHERE rowid = __WEBSITE_ID__; +-- Page ID 24 -> 5__+MAX_llx_website_page__ - Aliases menu --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(5__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'menu', '', 'Menu', 'Menu common to all pages', 'fr', '', '', '1', '2019-08-15 00:03:43', '2020-02-21 10:27:17', null, '', 'menu', '', '__N__', '', '0'); +-- Page ID 25 -> 6__+MAX_llx_website_page__ - Aliases this-is-a-blog-post --; +INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, lang, image, keywords, status, date_creation, tms, import_key, grabbed_from, type_container, htmlheader, content, author_alias, allowed_in_frames) VALUES(6__+MAX_llx_website_page__, null, __WEBSITE_ID__, 'this-is-a-blog-post', '', 'This is a Blog post', 'This is a full meta description of the article', '', '', 'blog', '1', '2019-08-17 17:18:45', '2022-07-06 23:50:25', null, '', 'blogpost', '', '__N__
    __N__ This is a blog post article...__N__
    __N__', 'webmaster', '0'); + +-- For Dolibarr v14+ --; +UPDATE llx_website SET lang = 'en' WHERE rowid = __WEBSITE_ID__; +UPDATE llx_website SET otherlang = '' WHERE rowid = __WEBSITE_ID__; + diff --git a/htdocs/install/doctemplates/websites/website_template-style01.zip b/htdocs/install/doctemplates/websites/website_template-style01.zip deleted file mode 100644 index 190beb449ed..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-style01.zip and /dev/null differ diff --git a/htdocs/install/doctemplates/websites/website_template-style03.zip b/htdocs/install/doctemplates/websites/website_template-style03.zip deleted file mode 100644 index 18266bd18d9..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-style03.zip and /dev/null differ diff --git a/htdocs/install/doctemplates/websites/website_template-style04.png b/htdocs/install/doctemplates/websites/website_template-style04.png deleted file mode 100644 index 26325e7e795..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-style04.png and /dev/null differ diff --git a/htdocs/install/doctemplates/websites/website_template-style04.zip b/htdocs/install/doctemplates/websites/website_template-style04.zip deleted file mode 100644 index 996d98697c3..00000000000 Binary files a/htdocs/install/doctemplates/websites/website_template-style04.zip and /dev/null differ diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php index c717d55850e..e68f0d70a96 100644 --- a/htdocs/install/inc.php +++ b/htdocs/install/inc.php @@ -35,24 +35,16 @@ require_once '../filefunc.inc.php'; -// Define DOL_DOCUMENT_ROOT and ADODB_PATH used for install/upgrade process +// Define DOL_DOCUMENT_ROOT used for install/upgrade process if (!defined('DOL_DOCUMENT_ROOT')) { define('DOL_DOCUMENT_ROOT', '..'); } -if (!defined('ADODB_PATH')) { - $foundpath = DOL_DOCUMENT_ROOT.'/includes/adodbtime/'; - if (!is_dir($foundpath)) { - $foundpath = '/usr/share/php/adodb/'; - } - define('ADODB_PATH', $foundpath); -} require_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/conf.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; -require_once ADODB_PATH.'adodb-time.inc.php'; $conf = new Conf(); diff --git a/htdocs/install/mysql/data/llx_10_c_regions.sql b/htdocs/install/mysql/data/llx_10_c_regions.sql index ffd02aa9cf9..52a1a3bbbb6 100644 --- a/htdocs/install/mysql/data/llx_10_c_regions.sql +++ b/htdocs/install/mysql/data/llx_10_c_regions.sql @@ -4,12 +4,12 @@ -- Copyright (C) 2004 Benoit Mortier -- Copyright (C) 2004 Guillaume Delecourt -- Copyright (C) 2005-2009 Regis Houssin --- Copyright (C) 2007 Patrick Raguin +-- Copyright (C) 2007 Patrick Raguin -- Copyright (C) 2010-2016 Juanjo Menent -- Copyright (C) 2012 Sebastian Neuwert --- Copyright (C) 2012 Ricardo Schluter --- Copyright (C) 2015 Ferran Marcet --- Copyright (C) 2019~ Lao Tian <281388879@qq.com> +-- Copyright (C) 2012 Ricardo Schluter +-- Copyright (C) 2015 Ferran Marcet +-- Copyright (C) 2019~ Lao Tian <281388879@qq.com> -- Copyright (C) 2020-2021 Udo Tamm -- Copyright (C) 2022 Miro Sertić -- @@ -52,11 +52,12 @@ -- Belgium -- Bolivia -- Brazil -> for Departmements +-- Burundi -- Canada -> for Departmements -- Chile -- China -- Colombie -> for Departmements --- Croatia -> for Departmements +-- Croatia -- Denmark -- France -- Germany -> for Departmements @@ -66,6 +67,7 @@ -- India -> for Departmements -- Indonesia -> for Departmements -- Italy +-- Japan -> only for Departmements -- Luxembourg -- Mauritius -- Mexique -> for Departmements @@ -332,6 +334,10 @@ insert into llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 3 insert into llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 3, 320, NULL, 1, 'Veneto'); +-- Japan Region (id country=123) +INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 123, 12301, '', 0,'日本'); + + -- Luxembourg Regions (districts) (id country=140) INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 140, 14001, '', 0, 'Diekirch'); INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 140, 14002, '', 0, 'Grevenmacher'); @@ -533,5 +539,3 @@ INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 2 INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 232, 23208, '', 0, 'Nor-Oriental'); INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 232, 23209, '', 0, 'Zuliana'); --- Japan Region (id country=123) -INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom) values ( 123, 12301, '', 0,'日本'); diff --git a/htdocs/install/mysql/data/llx_accounting_abc.sql b/htdocs/install/mysql/data/llx_accounting_abc.sql index 8874fad0784..661e786ca06 100644 --- a/htdocs/install/mysql/data/llx_accounting_abc.sql +++ b/htdocs/install/mysql/data/llx_accounting_abc.sql @@ -48,11 +48,11 @@ INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('VT', 'ACCOUNTING_SELL_JOURNAL', 2, 1, 1); INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AC', 'ACCOUNTING_PURCHASE_JOURNAL', 3, 1, 1); -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('BQ', 'FinanceJournal', 4, 1, 1); +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('BQ', 'ACCOUNTING_BANK_JOURNAL', 4, 1, 1); +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('ER', 'ACCOUNTING_EXPENSEREPORT_JOURNAL', 5, 1, 1); INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('OD', 'ACCOUNTING_MISCELLANEOUS_JOURNAL', 1, 1, 1); -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AN', 'ACCOUNTING_HAS_NEW_JOURNAL', 9, 1, 1); -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('ER', 'ExpenseReportsJournal', 5, 1, 1); -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('INV', 'InventoryJournal', 8, 1, 1); +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AN', 'ACCOUNTING_HAS_NEW_JOURNAL', 9, 0, 1); +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('INV', 'ACCOUNTING_INVENTORY_JOURNAL', 8, 0, 1); diff --git a/htdocs/install/mysql/data/llx_accounting_account_fr.sql b/htdocs/install/mysql/data/llx_accounting_account_fr.sql index d49e509a5be..4520969f82b 100644 --- a/htdocs/install/mysql/data/llx_accounting_account_fr.sql +++ b/htdocs/install/mysql/data/llx_accounting_account_fr.sql @@ -136,7 +136,7 @@ INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, acc INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 93,'PCG99-ABREGE','INCOME', '75', '1407', 'Autres produits de gestion courante', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 94,'PCG99-ABREGE','INCOME', '753', '93', 'Jetons de présence et rémunérations d''administrateurs, gérants,...', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 95,'PCG99-ABREGE','INCOME', '754', '93', 'Ristournes perçues des coopératives', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 96,'PCG99-ABREGE','INCOME', '755', '93', 'Quotes-parts de résultat sur opérations faites en commun', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 96,'PCG99-ABREGE','INCOME', '755', '93', 'Quotes-parts de résultat sur opérations faites en commun', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 97,'PCG99-ABREGE','INCOME', '76', '1407', 'Produits financiers', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 98,'PCG99-ABREGE','INCOME', '77', '1407', 'Produits exceptionnels', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 99,'PCG99-ABREGE','INCOME', '781', '1407', 'Reprises sur amortissements et provisions', 1); diff --git a/htdocs/install/mysql/data/llx_accounting_account_gb.sql b/htdocs/install/mysql/data/llx_accounting_account_gb.sql index 35c245efa95..fc2acf12395 100644 --- a/htdocs/install/mysql/data/llx_accounting_account_gb.sql +++ b/htdocs/install/mysql/data/llx_accounting_account_gb.sql @@ -26,10 +26,10 @@ INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71501, 'ENG-BASE', 'CAPIT', '1', '0', 'Equity, provisions for liabilities and charges and liabilities at more than one year', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71502, 'ENG-BASE', 'IMMO', '2', '0', 'Administration fees.Fixed assets and receivables over one year', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71503, 'ENG-BASE', 'STOCK', '3', '0', 'Stock and orders running', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71504, 'ENG-BASE', 'TIERS', '4', '0', 'Amounts receivable and payable within one year', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71504, 'ENG-BASE', 'THIRDPARTY', '4', '0', 'Amounts receivable and payable within one year', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71505, 'ENG-BASE', 'FINAN', '5', '0', 'Placing of cash and cash equivalents', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71506, 'ENG-BASE', 'CHARGE','6', '0', 'Charges', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71507, 'ENG-BASE', 'PROD', '7', '0', 'Products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71506, 'ENG-BASE', 'EXPENSE','6', '0', 'Charges', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 71507, 'ENG-BASE', 'INCOME', '7', '0', 'Products', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70103, 'ENG-BASE', 'CAPIT', '10', '71501', 'Capital and reserves', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70104, 'ENG-BASE', 'CAPIT', '101', '70103', 'Capital', 1); @@ -158,70 +158,70 @@ INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, acc INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70227, 'ENG-BASE', 'STOCK', '394', '70223', 'Provisions for depreciation of work in process', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70228, 'ENG-BASE', 'STOCK', '395', '70223', 'Provisions for depreciation of inventories of products', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70229, 'ENG-BASE', 'STOCK', '397', '70223', 'Provisions for depreciation of inventories of goods', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70230, 'ENG-BASE', 'TIERS', '40', '71504', 'Accounts payable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70231, 'ENG-BASE', 'TIERS', '400', '70230', 'Accounts payable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70232, 'ENG-BASE', 'TIERS', '401', '70230', 'Suppliers', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70233, 'ENG-BASE', 'TIERS', '403', '70230', 'Suppliers - Payables', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70234, 'ENG-BASE', 'TIERS', '404', '70230', 'Suppliers of fixed assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70235, 'ENG-BASE', 'TIERS', '405', '70230', 'Capital Suppliers - Payables', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70236, 'ENG-BASE', 'TIERS', '408', '70230', 'Supplier invoices not yet received', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70237, 'ENG-BASE', 'TIERS', '409', '70230', 'Debtors suppliers', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70238, 'ENG-BASE', 'TIERS', '41', '71504', 'Accounts receivable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70239, 'ENG-BASE', 'TIERS', '410', '70238', 'Customers and Related Accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70240, 'ENG-BASE', 'TIERS', '411', '70238', 'Customers', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70241, 'ENG-BASE', 'TIERS', '413', '70238', 'Accounts Receivable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70242, 'ENG-BASE', 'TIERS', '416', '70238', 'Doubtful or contentious customers', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70243, 'ENG-BASE', 'TIERS', '418', '70238', 'Customers - Products not yet billed', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70244, 'ENG-BASE', 'TIERS', '419', '70238', 'Accounts payable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70245, 'ENG-BASE', 'TIERS', '42', '71504', 'Personnel and related accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70246, 'ENG-BASE', 'TIERS', '421', '70245', 'Staff - Remuneration due', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70247, 'ENG-BASE', 'TIERS', '422', '70245', 'Works councils, establishment, ...', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70248, 'ENG-BASE', 'TIERS', '424', '70245', 'Employee participation in results', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70249, 'ENG-BASE', 'TIERS', '425', '70245', 'Staff - Advances and Advances', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70250, 'ENG-BASE', 'TIERS', '426', '70245', 'Staff - Deposits', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70251, 'ENG-BASE', 'TIERS', '427', '70245', 'Staff - Oppositions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70252, 'ENG-BASE', 'TIERS', '428', '70245', 'Personnel - Accrued expenses and accrued income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70253, 'ENG-BASE', 'TIERS', '43', '71504', 'Social security and other social organizations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70254, 'ENG-BASE', 'TIERS', '431', '70253', 'Social Security', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70255, 'ENG-BASE', 'TIERS', '437', '70253', 'Other social organizations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70256, 'ENG-BASE', 'TIERS', '438', '70253', 'Social organizations - Accrued expenses and accrued income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70257, 'ENG-BASE', 'TIERS', '44', '71504', 'State and other public authorities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70258, 'ENG-BASE', 'TIERS', '441', '70257', 'Status - Grants Receivable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70259, 'ENG-BASE', 'TIERS', '442', '70257', 'Statement - Taxes and taxes recoverable on third parties', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70260, 'ENG-BASE', 'TIERS', '443', '70257', 'Special operations with the State, public authorities, international organizations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70261, 'ENG-BASE', 'TIERS', '444', '70257', 'State - Income taxes', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70262, 'ENG-BASE', 'TIERS', '445', '70257', 'State - Taxes on turnover', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70263, 'ENG-BASE', 'TIERS', '446', '70257', 'Bonded Bonds', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70264, 'ENG-BASE', 'TIERS', '447', '70257', 'Other taxes, duties and similar payments', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70265, 'ENG-BASE', 'TIERS', '448', '70257', 'Statement of Accounts Payable and Accrued Income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70266, 'ENG-BASE', 'TIERS', '449', '70257', 'Emission quotas to be returned to the State', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70267, 'ENG-BASE', 'TIERS', '45', '71504', 'Group and Associates', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70268, 'ENG-BASE', 'TIERS', '451', '70267', 'Group', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70269, 'ENG-BASE', 'TIERS', '455', '70267', 'Associates - Current Accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70270, 'ENG-BASE', 'TIERS', '456', '70267', 'Associates - Capital transactions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70271, 'ENG-BASE', 'TIERS', '457', '70267', 'Associates - Dividends payable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70272, 'ENG-BASE', 'TIERS', '458', '70267', 'Associates- Joint and EIG Operations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70273, 'ENG-BASE', 'TIERS', '46', '71504', 'Miscellaneous receivables and creditors', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70274, 'ENG-BASE', 'TIERS', '462', '70273', 'Receivables on disposals of fixed assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70275, 'ENG-BASE', 'TIERS', '464', '70273', 'Debts on acquisitions of marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70276, 'ENG-BASE', 'TIERS', '465', '70273', 'Receivables on disposals of marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70277, 'ENG-BASE', 'TIERS', '467', '70273', 'Other accounts receivable or payable', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70278, 'ENG-BASE', 'TIERS', '468', '70273', 'Miscellaneous - Accrued expenses and accrued income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70279, 'ENG-BASE', 'TIERS', '47', '71504', 'Transition or suspense accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70280, 'ENG-BASE', 'TIERS', '471', '70279', 'Waiting Accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70281, 'ENG-BASE', 'TIERS', '476', '70279', 'Conversion Difference - Assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70282, 'ENG-BASE', 'TIERS', '477', '70279', 'Translation differences - Liabilities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70283, 'ENG-BASE', 'TIERS', '478', '70279', 'Other transitional accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70284, 'ENG-BASE', 'TIERS', '48', '71504', 'regularisation account', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70285, 'ENG-BASE', 'TIERS', '481', '70284', 'Expenses to be spread over several financial years', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70286, 'ENG-BASE', 'TIERS', '486', '70284', 'Prepaid expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70287, 'ENG-BASE', 'TIERS', '487', '70284', 'Deferred income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70288, 'ENG-BASE', 'TIERS', '488', '70284', 'Accounts for the periodic distribution of expenses and revenues', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70289, 'ENG-BASE', 'TIERS', '489', '70284', 'Emission allowances allocated by the State', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70290, 'ENG-BASE', 'TIERS', '49', '71504', 'Provisions for depreciation of third party accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70291, 'ENG-BASE', 'TIERS', '491', '70290', 'Provisions for depreciation of customer accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70292, 'ENG-BASE', 'TIERS', '495', '70290', 'Provisions for impairment of group and associate accounts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70293, 'ENG-BASE', 'TIERS', '496', '70290', 'Provisions for depreciation of accounts receivable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70230, 'ENG-BASE', 'THIRDPARTY', '40', '71504', 'Accounts payable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70231, 'ENG-BASE', 'THIRDPARTY', '400', '70230', 'Accounts payable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70232, 'ENG-BASE', 'THIRDPARTY', '401', '70230', 'Suppliers', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70233, 'ENG-BASE', 'THIRDPARTY', '403', '70230', 'Suppliers - Payables', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70234, 'ENG-BASE', 'THIRDPARTY', '404', '70230', 'Suppliers of fixed assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70235, 'ENG-BASE', 'THIRDPARTY', '405', '70230', 'Capital Suppliers - Payables', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70236, 'ENG-BASE', 'THIRDPARTY', '408', '70230', 'Supplier invoices not yet received', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70237, 'ENG-BASE', 'THIRDPARTY', '409', '70230', 'Debtors suppliers', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70238, 'ENG-BASE', 'THIRDPARTY', '41', '71504', 'Accounts receivable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70239, 'ENG-BASE', 'THIRDPARTY', '410', '70238', 'Customers and Related Accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70240, 'ENG-BASE', 'THIRDPARTY', '411', '70238', 'Customers', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70241, 'ENG-BASE', 'THIRDPARTY', '413', '70238', 'Accounts Receivable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70242, 'ENG-BASE', 'THIRDPARTY', '416', '70238', 'Doubtful or contentious customers', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70243, 'ENG-BASE', 'THIRDPARTY', '418', '70238', 'Customers - Products not yet billed', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70244, 'ENG-BASE', 'THIRDPARTY', '419', '70238', 'Accounts payable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70245, 'ENG-BASE', 'THIRDPARTY', '42', '71504', 'Personnel and related accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70246, 'ENG-BASE', 'THIRDPARTY', '421', '70245', 'Staff - Remuneration due', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70247, 'ENG-BASE', 'THIRDPARTY', '422', '70245', 'Works councils, establishment, ...', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70248, 'ENG-BASE', 'THIRDPARTY', '424', '70245', 'Employee participation in results', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70249, 'ENG-BASE', 'THIRDPARTY', '425', '70245', 'Staff - Advances and Advances', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70250, 'ENG-BASE', 'THIRDPARTY', '426', '70245', 'Staff - Deposits', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70251, 'ENG-BASE', 'THIRDPARTY', '427', '70245', 'Staff - Oppositions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70252, 'ENG-BASE', 'THIRDPARTY', '428', '70245', 'Personnel - Accrued expenses and accrued income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70253, 'ENG-BASE', 'THIRDPARTY', '43', '71504', 'Social security and other social organizations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70254, 'ENG-BASE', 'THIRDPARTY', '431', '70253', 'Social Security', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70255, 'ENG-BASE', 'THIRDPARTY', '437', '70253', 'Other social organizations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70256, 'ENG-BASE', 'THIRDPARTY', '438', '70253', 'Social organizations - Accrued expenses and accrued income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70257, 'ENG-BASE', 'THIRDPARTY', '44', '71504', 'State and other public authorities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70258, 'ENG-BASE', 'THIRDPARTY', '441', '70257', 'Status - Grants Receivable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70259, 'ENG-BASE', 'THIRDPARTY', '442', '70257', 'Statement - Taxes and taxes recoverable on third parties', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70260, 'ENG-BASE', 'THIRDPARTY', '443', '70257', 'Special operations with the State, public authorities, international organizations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70261, 'ENG-BASE', 'THIRDPARTY', '444', '70257', 'State - Income taxes', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70262, 'ENG-BASE', 'THIRDPARTY', '445', '70257', 'State - Taxes on turnover', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70263, 'ENG-BASE', 'THIRDPARTY', '446', '70257', 'Bonded Bonds', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70264, 'ENG-BASE', 'THIRDPARTY', '447', '70257', 'Other taxes, duties and similar payments', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70265, 'ENG-BASE', 'THIRDPARTY', '448', '70257', 'Statement of Accounts Payable and Accrued Income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70266, 'ENG-BASE', 'THIRDPARTY', '449', '70257', 'Emission quotas to be returned to the State', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70267, 'ENG-BASE', 'THIRDPARTY', '45', '71504', 'Group and Associates', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70268, 'ENG-BASE', 'THIRDPARTY', '451', '70267', 'Group', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70269, 'ENG-BASE', 'THIRDPARTY', '455', '70267', 'Associates - Current Accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70270, 'ENG-BASE', 'THIRDPARTY', '456', '70267', 'Associates - Capital transactions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70271, 'ENG-BASE', 'THIRDPARTY', '457', '70267', 'Associates - Dividends payable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70272, 'ENG-BASE', 'THIRDPARTY', '458', '70267', 'Associates- Joint and EIG Operations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70273, 'ENG-BASE', 'THIRDPARTY', '46', '71504', 'Miscellaneous receivables and creditors', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70274, 'ENG-BASE', 'THIRDPARTY', '462', '70273', 'Receivables on disposals of fixed assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70275, 'ENG-BASE', 'THIRDPARTY', '464', '70273', 'Debts on acquisitions of marketable securities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70276, 'ENG-BASE', 'THIRDPARTY', '465', '70273', 'Receivables on disposals of marketable securities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70277, 'ENG-BASE', 'THIRDPARTY', '467', '70273', 'Other accounts receivable or payable', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70278, 'ENG-BASE', 'THIRDPARTY', '468', '70273', 'Miscellaneous - Accrued expenses and accrued income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70279, 'ENG-BASE', 'THIRDPARTY', '47', '71504', 'Transition or suspense accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70280, 'ENG-BASE', 'THIRDPARTY', '471', '70279', 'Waiting Accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70281, 'ENG-BASE', 'THIRDPARTY', '476', '70279', 'Conversion Difference - Assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70282, 'ENG-BASE', 'THIRDPARTY', '477', '70279', 'Translation differences - Liabilities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70283, 'ENG-BASE', 'THIRDPARTY', '478', '70279', 'Other transitional accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70284, 'ENG-BASE', 'THIRDPARTY', '48', '71504', 'regularisation account', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70285, 'ENG-BASE', 'THIRDPARTY', '481', '70284', 'Expenses to be spread over several financial years', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70286, 'ENG-BASE', 'THIRDPARTY', '486', '70284', 'Prepaid expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70287, 'ENG-BASE', 'THIRDPARTY', '487', '70284', 'Deferred income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70288, 'ENG-BASE', 'THIRDPARTY', '488', '70284', 'Accounts for the periodic distribution of expenses and revenues', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70289, 'ENG-BASE', 'THIRDPARTY', '489', '70284', 'Emission allowances allocated by the State', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70290, 'ENG-BASE', 'THIRDPARTY', '49', '71504', 'Provisions for depreciation of third party accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70291, 'ENG-BASE', 'THIRDPARTY', '491', '70290', 'Provisions for depreciation of customer accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70292, 'ENG-BASE', 'THIRDPARTY', '495', '70290', 'Provisions for impairment of group and associate accounts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70293, 'ENG-BASE', 'THIRDPARTY', '496', '70290', 'Provisions for depreciation of accounts receivable', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70294, 'ENG-BASE', 'FINAN', '50', '71505', 'Marketable securities', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70295, 'ENG-BASE', 'FINAN', '501', '70294', 'Shares in related companies', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70296, 'ENG-BASE', 'FINAN', '502', '70294', 'Treasury shares', 1); @@ -250,120 +250,120 @@ INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, acc INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70319, 'ENG-BASE', 'FINAN', '58', '71505', 'Internal transfers', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70320, 'ENG-BASE', 'FINAN', '59', '71505', 'Provisions for impairment of financial accounts', 1); INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70321, 'ENG-BASE', 'FINAN', '590', '70320', 'Provisions for depreciation of marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70322, 'ENG-BASE', 'CHARGE', '60', '71506', 'Shopping', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70323, 'ENG-BASE', 'CHARGE', '601', '70322', 'Stored Procurement - Raw Materials (and Supplies)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70324, 'ENG-BASE', 'CHARGE', '602', '70322', 'Stored Procurement - Other Supplies', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70325, 'ENG-BASE', 'CHARGE', '603', '70322', 'Inventory Changes (Supplies and Commodities)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70326, 'ENG-BASE', 'CHARGE', '604', '70322', 'Stored Procurement - Raw Materials (and Supplies)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70327, 'ENG-BASE', 'CHARGE', '605', '70322', 'Purchase of equipment, works and equipment', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70328, 'ENG-BASE', 'CHARGE', '606', '70322', 'Non-stock purchases of materials and supplies', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70329, 'ENG-BASE', 'CHARGE', '607', '70322', 'Purchases of goods', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70330, 'ENG-BASE', 'CHARGE', '608', '70322', 'Reserved account, where applicable, to the recapitulation of incidental expenses included in purchases', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70331, 'ENG-BASE', 'CHARGE', '609', '70322', 'Discounts, rebates and rebates obtained on purchases', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70332, 'ENG-BASE', 'CHARGE', '61', '71506', 'Outside services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70333, 'ENG-BASE', 'CHARGE', '611', '70332', 'General subcontracting', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70334, 'ENG-BASE', 'CHARGE', '612', '70332', 'Lease payments', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70335, 'ENG-BASE', 'CHARGE', '613', '70332', 'Rentals', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70336, 'ENG-BASE', 'CHARGE', '614', '70332', 'Rental and condominium expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70337, 'ENG-BASE', 'CHARGE', '615', '70332', 'Maintenance and repairs', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70338, 'ENG-BASE', 'CHARGE', '616', '70332', 'Insurance premiums', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70339, 'ENG-BASE', 'CHARGE', '617', '70332', 'Studies and research', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70340, 'ENG-BASE', 'CHARGE', '618', '70332', 'Various', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70341, 'ENG-BASE', 'CHARGE', '619', '70332', 'Discounts, rebates and rebates obtained on external services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70342, 'ENG-BASE', 'CHARGE', '62', '71506', 'Other services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70343, 'ENG-BASE', 'CHARGE', '621', '70342', 'Staff outside the company', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70344, 'ENG-BASE', 'CHARGE', '622', '70342', 'Remuneration of intermediaries and fees', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70345, 'ENG-BASE', 'CHARGE', '623', '70342', 'Advertising, publications, public relations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70346, 'ENG-BASE', 'CHARGE', '624', '70342', 'Transport of goods and public transport of personnel', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70347, 'ENG-BASE', 'CHARGE', '625', '70342', 'Travel, missions and receptions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70348, 'ENG-BASE', 'CHARGE', '626', '70342', 'Postal and telecommunications costs', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70349, 'ENG-BASE', 'CHARGE', '627', '70342', 'Banking and related services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70350, 'ENG-BASE', 'CHARGE', '628', '70342', 'Various', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70351, 'ENG-BASE', 'CHARGE', '629', '70342', 'Discounts, rebates and rebates obtained on other external services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70352, 'ENG-BASE', 'CHARGE', '63', '71506', 'Taxes other and payments', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70353, 'ENG-BASE', 'CHARGE', '631', '70352', 'Taxes and similar payments on remuneration (tax administrations)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70354, 'ENG-BASE', 'CHARGE', '633', '70352', 'Taxes and similar payments on remuneration (other bodies)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70355, 'ENG-BASE', 'CHARGE', '635', '70352', 'Other taxes, duties and similar payments (tax administrations)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70356, 'ENG-BASE', 'CHARGE', '637', '70352', 'Other taxes, duties and similar payments (other bodies)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70357, 'ENG-BASE', 'CHARGE', '64', '71506', 'Staff costs', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70358, 'ENG-BASE', 'CHARGE', '641', '70357', 'Remuneration of staff', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70359, 'ENG-BASE', 'CHARGE', '644', '70357', 'Remuneration of the operator''s work', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70360, 'ENG-BASE', 'CHARGE', '645', '70357', 'Social Security and Welfare Expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70361, 'ENG-BASE', 'CHARGE', '646', '70357', 'Personal social contributions of the operator', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70362, 'ENG-BASE', 'CHARGE', '647', '70357', 'Other payroll taxes', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70363, 'ENG-BASE', 'CHARGE', '648', '70357', 'Other staff costs', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70364, 'ENG-BASE', 'CHARGE', '65', '71506', 'Other current operating expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70365, 'ENG-BASE', 'CHARGE', '651', '70364', 'Royalties for concessions, patents, licenses, trademarks, processes, software, rights and similar values', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70366, 'ENG-BASE', 'CHARGE', '653', '70364', 'Attendance fees', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70367, 'ENG-BASE', 'CHARGE', '654', '70364', 'Loss on bad debts', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70368, 'ENG-BASE', 'CHARGE', '655', '70364', 'Share of profit or loss on transactions made jointly', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70369, 'ENG-BASE', 'CHARGE', '658', '70364', 'Miscellaneous operating expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70370, 'ENG-BASE', 'CHARGE', '66', '71506', 'Financial expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70371, 'ENG-BASE', 'CHARGE', '661', '70370', 'Interest charges', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70372, 'ENG-BASE', 'CHARGE', '664', '70370', 'Loss on receivables related to investments', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70373, 'ENG-BASE', 'CHARGE', '665', '70370', 'Discounts granted', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70374, 'ENG-BASE', 'CHARGE', '666', '70370', 'Exchange losses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70375, 'ENG-BASE', 'CHARGE', '667', '70370', 'Net expense on disposals of marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70376, 'ENG-BASE', 'CHARGE', '668', '70370', 'Other financial expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70377, 'ENG-BASE', 'CHARGE', '67', '71506', 'Extraordinary charges', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70378, 'ENG-BASE', 'CHARGE', '671', '70377', 'Exceptional charges on management operations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70379, 'ENG-BASE', 'CHARGE', '672', '70377', 'Account available to entities to record, in the course of the financial year, expenses over previous financial years', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70380, 'ENG-BASE', 'CHARGE', '675', '70377', 'Book value of assets sold', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70381, 'ENG-BASE', 'CHARGE', '678', '70377', 'Other extraordinary expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70382, 'ENG-BASE', 'CHARGE', '68', '71506', 'Depreciation, amortization and provisions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70383, 'ENG-BASE', 'CHARGE', '681', '70382', 'Depreciation, amortization and provisions - Operating expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70384, 'ENG-BASE', 'CHARGE', '686', '70382', 'Depreciation, amortization and provisions - Financial expense', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70385, 'ENG-BASE', 'CHARGE', '687', '70382', 'Depreciation, amortization and provisions - Extraordinary expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70386, 'ENG-BASE', 'CHARGE', '69', '71506', 'Employee participation - income tax and assimilated', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70387, 'ENG-BASE', 'CHARGE', '691', '70386', 'Employee participation in results', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70388, 'ENG-BASE', 'CHARGE', '695', '70386', 'Income taxes', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70389, 'ENG-BASE', 'CHARGE', '696', '70386', 'Corporate income tax related to distributions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70390, 'ENG-BASE', 'CHARGE', '697', '70386', 'Annual corporation tax', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70391, 'ENG-BASE', 'CHARGE', '698', '70386', 'Tax integration', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70392, 'ENG-BASE', 'CHARGE', '699', '70386', 'Products - Reports back deficits', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70393, 'ENG-BASE', 'PROD', '70', '71507', 'Sales of manufactured goods, services, goods', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70394, 'ENG-BASE', 'PROD', '701', '70393', 'Sales of finished products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70395, 'ENG-BASE', 'PROD', '702', '70393', 'Sales of intermediate products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70396, 'ENG-BASE', 'PROD', '703', '70393', 'Sales of residual products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70397, 'ENG-BASE', 'PROD', '704', '70393', 'Works', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70398, 'ENG-BASE', 'PROD', '705', '70393', 'Studies', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70399, 'ENG-BASE', 'PROD', '706', '70393', 'Services', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70400, 'ENG-BASE', 'PROD', '707', '70393', 'Sale of goods', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70401, 'ENG-BASE', 'PROD', '708', '70393', 'Income from ancillary activities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70402, 'ENG-BASE', 'PROD', '709', '70393', 'Discounts, rebates and rebates granted by the company', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70403, 'ENG-BASE', 'PROD', '71', '71507', 'Stored production (or destocking)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70404, 'ENG-BASE', 'PROD', '713', '70403', 'Change in stocks (in-process production, products)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70405, 'ENG-BASE', 'PROD', '72', '71507', 'Immobilised production', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70406, 'ENG-BASE', 'PROD', '721', '70405', 'Intangible assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70407, 'ENG-BASE', 'PROD', '722', '70405', 'Property, plant and equipment', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70408, 'ENG-BASE', 'PROD', '74', '71507', 'Operating grants', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70409, 'ENG-BASE', 'PROD', '75', '71507', 'Other management products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70410, 'ENG-BASE', 'PROD', '751', '70409', 'Royalties for concessions, patents, licenses, trademarks, processes, software, rights and similar values', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70411, 'ENG-BASE', 'PROD', '752', '70409', 'Income from buildings not used for professional purposes', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70412, 'ENG-BASE', 'PROD', '753', '70409', 'Directors'' fees and remuneration of directors, managers, ...', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70413, 'ENG-BASE', 'PROD', '754', '70409', 'Perceived refunds of cooperatives (from surplus)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70414, 'ENG-BASE', 'PROD', '755', '70409', 'Share of profits on transactions made jointly', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70415, 'ENG-BASE', 'PROD', '758', '70409', 'Miscellaneous current management products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70416, 'ENG-BASE', 'PROD', '76', '71507', 'Financial products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70417, 'ENG-BASE', 'PROD', '761', '70416', 'Income from participations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70418, 'ENG-BASE', 'PROD', '762', '70416', 'Income from other financial assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70419, 'ENG-BASE', 'PROD', '763', '70416', 'Revenue from other receivables', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70420, 'ENG-BASE', 'PROD', '764', '70416', 'Income from marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70421, 'ENG-BASE', 'PROD', '765', '70416', 'Discounts obtained', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70422, 'ENG-BASE', 'PROD', '766', '70416', 'Exchange gains', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70423, 'ENG-BASE', 'PROD', '767', '70416', 'Net proceeds on disposals of marketable securities', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70424, 'ENG-BASE', 'PROD', '768', '70416', 'Other financial income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70425, 'ENG-BASE', 'PROD', '77', '71507', 'Exceptional products', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70426, 'ENG-BASE', 'PROD', '771', '70425', 'Extraordinary income from management operations', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70427, 'ENG-BASE', 'PROD', '772', '70425', 'Account available to entities to record, during the financial year, the revenues over previous financial years', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70428, 'ENG-BASE', 'PROD', '775', '70425', 'Proceeds from disposals of assets', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70429, 'ENG-BASE', 'PROD', '777', '70425', 'Share of investment grants transferred to profit or loss for the year', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70430, 'ENG-BASE', 'PROD', '778', '70425', 'Other extraordinary income', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70431, 'ENG-BASE', 'PROD', '78', '71507', 'Reversals of depreciation and provisions', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70432, 'ENG-BASE', 'PROD', '781', '70431', 'Reversals of depreciation and provisions (to be included in revenue)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70433, 'ENG-BASE', 'PROD', '786', '70431', 'Reversals of provisions for risks (to be recorded in financial income)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70434, 'ENG-BASE', 'PROD', '787', '70431', 'Reversals of provisions (to be recorded in exceptional income)', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70435, 'ENG-BASE', 'PROD', '79', '71507', 'Transfers of charges', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70436, 'ENG-BASE', 'PROD', '791', '70435', 'Transfers of operating expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70437, 'ENG-BASE', 'PROD', '796', '70435', 'Transfers of financial expenses', 1); -INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70438, 'ENG-BASE', 'PROD', '797', '70435', 'Transfers of Exceptional Charges', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70322, 'ENG-BASE', 'EXPENSE', '60', '71506', 'Shopping', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70323, 'ENG-BASE', 'EXPENSE', '601', '70322', 'Stored Procurement - Raw Materials (and Supplies)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70324, 'ENG-BASE', 'EXPENSE', '602', '70322', 'Stored Procurement - Other Supplies', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70325, 'ENG-BASE', 'EXPENSE', '603', '70322', 'Inventory Changes (Supplies and Commodities)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70326, 'ENG-BASE', 'EXPENSE', '604', '70322', 'Stored Procurement - Raw Materials (and Supplies)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70327, 'ENG-BASE', 'EXPENSE', '605', '70322', 'Purchase of equipment, works and equipment', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70328, 'ENG-BASE', 'EXPENSE', '606', '70322', 'Non-stock purchases of materials and supplies', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70329, 'ENG-BASE', 'EXPENSE', '607', '70322', 'Purchases of goods', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70330, 'ENG-BASE', 'EXPENSE', '608', '70322', 'Reserved account, where applicable, to the recapitulation of incidental expenses included in purchases', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70331, 'ENG-BASE', 'EXPENSE', '609', '70322', 'Discounts, rebates and rebates obtained on purchases', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70332, 'ENG-BASE', 'EXPENSE', '61', '71506', 'Outside services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70333, 'ENG-BASE', 'EXPENSE', '611', '70332', 'General subcontracting', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70334, 'ENG-BASE', 'EXPENSE', '612', '70332', 'Lease payments', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70335, 'ENG-BASE', 'EXPENSE', '613', '70332', 'Rentals', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70336, 'ENG-BASE', 'EXPENSE', '614', '70332', 'Rental and condominium expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70337, 'ENG-BASE', 'EXPENSE', '615', '70332', 'Maintenance and repairs', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70338, 'ENG-BASE', 'EXPENSE', '616', '70332', 'Insurance premiums', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70339, 'ENG-BASE', 'EXPENSE', '617', '70332', 'Studies and research', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70340, 'ENG-BASE', 'EXPENSE', '618', '70332', 'Various', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70341, 'ENG-BASE', 'EXPENSE', '619', '70332', 'Discounts, rebates and rebates obtained on external services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70342, 'ENG-BASE', 'EXPENSE', '62', '71506', 'Other services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70343, 'ENG-BASE', 'EXPENSE', '621', '70342', 'Staff outside the company', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70344, 'ENG-BASE', 'EXPENSE', '622', '70342', 'Remuneration of intermediaries and fees', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70345, 'ENG-BASE', 'EXPENSE', '623', '70342', 'Advertising, publications, public relations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70346, 'ENG-BASE', 'EXPENSE', '624', '70342', 'Transport of goods and public transport of personnel', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70347, 'ENG-BASE', 'EXPENSE', '625', '70342', 'Travel, missions and receptions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70348, 'ENG-BASE', 'EXPENSE', '626', '70342', 'Postal and telecommunications costs', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70349, 'ENG-BASE', 'EXPENSE', '627', '70342', 'Banking and related services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70350, 'ENG-BASE', 'EXPENSE', '628', '70342', 'Various', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70351, 'ENG-BASE', 'EXPENSE', '629', '70342', 'Discounts, rebates and rebates obtained on other external services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70352, 'ENG-BASE', 'EXPENSE', '63', '71506', 'Taxes other and payments', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70353, 'ENG-BASE', 'EXPENSE', '631', '70352', 'Taxes and similar payments on remuneration (tax administrations)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70354, 'ENG-BASE', 'EXPENSE', '633', '70352', 'Taxes and similar payments on remuneration (other bodies)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70355, 'ENG-BASE', 'EXPENSE', '635', '70352', 'Other taxes, duties and similar payments (tax administrations)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70356, 'ENG-BASE', 'EXPENSE', '637', '70352', 'Other taxes, duties and similar payments (other bodies)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70357, 'ENG-BASE', 'EXPENSE', '64', '71506', 'Staff costs', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70358, 'ENG-BASE', 'EXPENSE', '641', '70357', 'Remuneration of staff', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70359, 'ENG-BASE', 'EXPENSE', '644', '70357', 'Remuneration of the operator''s work', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70360, 'ENG-BASE', 'EXPENSE', '645', '70357', 'Social Security and Welfare Expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70361, 'ENG-BASE', 'EXPENSE', '646', '70357', 'Personal social contributions of the operator', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70362, 'ENG-BASE', 'EXPENSE', '647', '70357', 'Other payroll taxes', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70363, 'ENG-BASE', 'EXPENSE', '648', '70357', 'Other staff costs', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70364, 'ENG-BASE', 'EXPENSE', '65', '71506', 'Other current operating expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70365, 'ENG-BASE', 'EXPENSE', '651', '70364', 'Royalties for concessions, patents, licenses, trademarks, processes, software, rights and similar values', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70366, 'ENG-BASE', 'EXPENSE', '653', '70364', 'Attendance fees', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70367, 'ENG-BASE', 'EXPENSE', '654', '70364', 'Loss on bad debts', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70368, 'ENG-BASE', 'EXPENSE', '655', '70364', 'Share of profit or loss on transactions made jointly', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70369, 'ENG-BASE', 'EXPENSE', '658', '70364', 'Miscellaneous operating expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70370, 'ENG-BASE', 'EXPENSE', '66', '71506', 'Financial expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70371, 'ENG-BASE', 'EXPENSE', '661', '70370', 'Interest charges', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70372, 'ENG-BASE', 'EXPENSE', '664', '70370', 'Loss on receivables related to investments', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70373, 'ENG-BASE', 'EXPENSE', '665', '70370', 'Discounts granted', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70374, 'ENG-BASE', 'EXPENSE', '666', '70370', 'Exchange losses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70375, 'ENG-BASE', 'EXPENSE', '667', '70370', 'Net expense on disposals of marketable securities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70376, 'ENG-BASE', 'EXPENSE', '668', '70370', 'Other financial expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70377, 'ENG-BASE', 'EXPENSE', '67', '71506', 'Extraordinary charges', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70378, 'ENG-BASE', 'EXPENSE', '671', '70377', 'Exceptional charges on management operations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70379, 'ENG-BASE', 'EXPENSE', '672', '70377', 'Account available to entities to record, in the course of the financial year, expenses over previous financial years', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70380, 'ENG-BASE', 'EXPENSE', '675', '70377', 'Book value of assets sold', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70381, 'ENG-BASE', 'EXPENSE', '678', '70377', 'Other extraordinary expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70382, 'ENG-BASE', 'EXPENSE', '68', '71506', 'Depreciation, amortization and provisions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70383, 'ENG-BASE', 'EXPENSE', '681', '70382', 'Depreciation, amortization and provisions - Operating expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70384, 'ENG-BASE', 'EXPENSE', '686', '70382', 'Depreciation, amortization and provisions - Financial expense', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70385, 'ENG-BASE', 'EXPENSE', '687', '70382', 'Depreciation, amortization and provisions - Extraordinary expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70386, 'ENG-BASE', 'EXPENSE', '69', '71506', 'Employee participation - income tax and assimilated', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70387, 'ENG-BASE', 'EXPENSE', '691', '70386', 'Employee participation in results', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70388, 'ENG-BASE', 'EXPENSE', '695', '70386', 'Income taxes', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70389, 'ENG-BASE', 'EXPENSE', '696', '70386', 'Corporate income tax related to distributions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70390, 'ENG-BASE', 'EXPENSE', '697', '70386', 'Annual corporation tax', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70391, 'ENG-BASE', 'EXPENSE', '698', '70386', 'Tax integration', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70392, 'ENG-BASE', 'EXPENSE', '699', '70386', 'Products - Reports back deficits', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70393, 'ENG-BASE', 'INCOME', '70', '71507', 'Sales of manufactured goods, services, goods', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70394, 'ENG-BASE', 'INCOME', '701', '70393', 'Sales of finished products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70395, 'ENG-BASE', 'INCOME', '702', '70393', 'Sales of intermediate products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70396, 'ENG-BASE', 'INCOME', '703', '70393', 'Sales of residual products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70397, 'ENG-BASE', 'INCOME', '704', '70393', 'Works', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70398, 'ENG-BASE', 'INCOME', '705', '70393', 'Studies', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70399, 'ENG-BASE', 'INCOME', '706', '70393', 'Services', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70400, 'ENG-BASE', 'INCOME', '707', '70393', 'Sale of goods', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70401, 'ENG-BASE', 'INCOME', '708', '70393', 'Income from ancillary activities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70402, 'ENG-BASE', 'INCOME', '709', '70393', 'Discounts, rebates and rebates granted by the company', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70403, 'ENG-BASE', 'INCOME', '71', '71507', 'Stored production (or destocking)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70404, 'ENG-BASE', 'INCOME', '713', '70403', 'Change in stocks (in-process production, products)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70405, 'ENG-BASE', 'INCOME', '72', '71507', 'Immobilised production', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70406, 'ENG-BASE', 'INCOME', '721', '70405', 'Intangible assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70407, 'ENG-BASE', 'INCOME', '722', '70405', 'Property, plant and equipment', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70408, 'ENG-BASE', 'INCOME', '74', '71507', 'Operating grants', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70409, 'ENG-BASE', 'INCOME', '75', '71507', 'Other management products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70410, 'ENG-BASE', 'INCOME', '751', '70409', 'Royalties for concessions, patents, licenses, trademarks, processes, software, rights and similar values', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70411, 'ENG-BASE', 'INCOME', '752', '70409', 'Income from buildings not used for professional purposes', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70412, 'ENG-BASE', 'INCOME', '753', '70409', 'Directors'' fees and remuneration of directors, managers, ...', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70413, 'ENG-BASE', 'INCOME', '754', '70409', 'Perceived refunds of cooperatives (from surplus)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70414, 'ENG-BASE', 'INCOME', '755', '70409', 'Share of profits on transactions made jointly', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70415, 'ENG-BASE', 'INCOME', '758', '70409', 'Miscellaneous current management products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70416, 'ENG-BASE', 'INCOME', '76', '71507', 'Financial products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70417, 'ENG-BASE', 'INCOME', '761', '70416', 'Income from participations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70418, 'ENG-BASE', 'INCOME', '762', '70416', 'Income from other financial assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70419, 'ENG-BASE', 'INCOME', '763', '70416', 'Revenue from other receivables', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70420, 'ENG-BASE', 'INCOME', '764', '70416', 'Income from marketable securities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70421, 'ENG-BASE', 'INCOME', '765', '70416', 'Discounts obtained', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70422, 'ENG-BASE', 'INCOME', '766', '70416', 'Exchange gains', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70423, 'ENG-BASE', 'INCOME', '767', '70416', 'Net proceeds on disposals of marketable securities', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70424, 'ENG-BASE', 'INCOME', '768', '70416', 'Other financial income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70425, 'ENG-BASE', 'INCOME', '77', '71507', 'Exceptional products', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70426, 'ENG-BASE', 'INCOME', '771', '70425', 'Extraordinary income from management operations', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70427, 'ENG-BASE', 'INCOME', '772', '70425', 'Account available to entities to record, during the financial year, the revenues over previous financial years', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70428, 'ENG-BASE', 'INCOME', '775', '70425', 'Proceeds from disposals of assets', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70429, 'ENG-BASE', 'INCOME', '777', '70425', 'Share of investment grants transferred to profit or loss for the year', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70430, 'ENG-BASE', 'INCOME', '778', '70425', 'Other extraordinary income', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70431, 'ENG-BASE', 'INCOME', '78', '71507', 'Reversals of depreciation and provisions', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70432, 'ENG-BASE', 'INCOME', '781', '70431', 'Reversals of depreciation and provisions (to be included in revenue)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70433, 'ENG-BASE', 'INCOME', '786', '70431', 'Reversals of provisions for risks (to be recorded in financial income)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70434, 'ENG-BASE', 'INCOME', '787', '70431', 'Reversals of provisions (to be recorded in exceptional income)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70435, 'ENG-BASE', 'INCOME', '79', '71507', 'Transfers of charges', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70436, 'ENG-BASE', 'INCOME', '791', '70435', 'Transfers of operating expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70437, 'ENG-BASE', 'INCOME', '796', '70435', 'Transfers of financial expenses', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 70438, 'ENG-BASE', 'INCOME', '797', '70435', 'Transfers of Exceptional Charges', 1); diff --git a/htdocs/install/mysql/data/llx_c_email_templates.sql b/htdocs/install/mysql/data/llx_c_email_templates.sql index bce46a70e49..d2886631942 100644 --- a/htdocs/install/mysql/data/llx_c_email_templates.sql +++ b/htdocs/install/mysql/data/llx_c_email_templates.sql @@ -21,25 +21,26 @@ -- -- Bank Thirdparty -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'banque','thirdparty','',0,null,null,'(YourSEPAMandate)',1,'$conf->societe->enabled && $conf->banque->enabled && $conf->prelevement->enabled',0,'__(YourSEPAMandate)__','__(Hello)__,

    \n\n__(FindYourSEPAMandate)__ :
    \n__MYCOMPANY_NAME__
    \n__MYCOMPANY_FULLADDRESS__

    \n__(Sincerely)__
    \n__USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'banque','thirdparty','',0,null,null,'(YourSEPAMandate)',1,'isModEnabled("societe") && isModEnabled("banque") && isModEnabled("prelevement")',0,'__(YourSEPAMandate)__','__(Hello)__,

    \n\n__(FindYourSEPAMandate)__ :
    \n__MYCOMPANY_NAME__
    \n__MYCOMPANY_FULLADDRESS__

    \n__(Sincerely)__
    \n__USER_SIGNATURE__',null, 0); -- Members -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipWasValidated)__
    __(FirstName)__ : __MEMBER_FIRSTNAME__
    __(LastName)__ : __MEMBER_LASTNAME__
    __(ID)__ : __MEMBER_ID__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__
    \n\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 1); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfSubscriptionReminderEmail)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(YourMembershipWasCanceled)__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingAnEMailToMember)' ,60,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(CardContent)__', '__(Hello)__,

    \n\n__(ThisIsContentOfYourCard)__
    \n__(ID)__ : __ID__
    \n__(Civility)__ : __MEMBER_CIVILITY__
    \n__(Firstname)__ : __MEMBER_FIRSTNAME__
    \n__(Lastname)__ : __MEMBER_LASTNAME__
    \n__(Fullname)__ : __MEMBER_FULLNAME__
    \n__(Company)__ : __MEMBER_COMPANY__
    \n__(Address)__ : __MEMBER_ADDRESS__
    \n__(Zip)__ : __MEMBER_ZIP__
    \n__(Town)__ : __MEMBER_TOWN__
    \n__(Country)__ : __MEMBER_COUNTRY__
    \n__(Email)__ : __MEMBER_EMAIL__
    \n__(Birthday)__ : __MEMBER_BIRTH__
    \n__(Photo)__ : __MEMBER_PHOTO__
    \n__(Login)__ : __MEMBER_LOGIN__
    \n__(Phone)__ : __MEMBER_PHONE__
    \n__(PhonePerso)__ : __MEMBER_PHONEPRO__
    \n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipWasValidated)__
    __(FirstName)__ : __MEMBER_FIRSTNAME__
    __(LastName)__ : __MEMBER_LASTNAME__
    __(ID)__ : __MEMBER_ID__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__
    \n\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 1); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfSubscriptionReminderEmail)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(YourMembershipWasCanceled)__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingAnEMailToMember)' ,60, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(CardContent)__', '__(Hello)__,

    \n\n__(ThisIsContentOfYourCard)__
    \n__(ID)__ : __ID__
    \n__(Civility)__ : __MEMBER_CIVILITY__
    \n__(Firstname)__ : __MEMBER_FIRSTNAME__
    \n__(Lastname)__ : __MEMBER_LASTNAME__
    \n__(Fullname)__ : __MEMBER_FULLNAME__
    \n__(Company)__ : __MEMBER_COMPANY__
    \n__(Address)__ : __MEMBER_ADDRESS__
    \n__(Zip)__ : __MEMBER_ZIP__
    \n__(Town)__ : __MEMBER_TOWN__
    \n__(Country)__ : __MEMBER_COUNTRY__
    \n__(Email)__ : __MEMBER_EMAIL__
    \n__(Birthday)__ : __MEMBER_BIRTH__
    \n__(Photo)__ : __MEMBER_PHOTO__
    \n__(Login)__ : __MEMBER_LOGIN__
    \n__(Phone)__ : __MEMBER_PHONE__
    \n__(PhonePerso)__ : __MEMBER_PHONEPRO__
    \n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -- Recruiting -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'$conf->recruitment->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,

    \n\n__(YourCandidatureAnswerMessage)__
    __ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'isModEnabled("recruitment")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,

    \n\n__(YourCandidatureAnswerMessage)__
    __ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); -- Event organization INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__,

    __(OrganizationEventConfRequestWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskBooth)', 20, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskBooth)__', '__(Hello)__,

    __(OrganizationEventBoothRequestWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); -- TODO Add message for registration only to event __ONLINE_PAYMENT_TEXT_AND_URL__ -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailSubsBooth)', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailBoothPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfBoothWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailSubsEvent)', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailRegistrationPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfRegistrationWasReceived)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailBoothPayment)', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailBoothPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfBoothWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailRegistrationPayment)', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailRegistrationPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfRegistrationWasReceived)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +-- INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailAttendees)', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__,

    __(OrganizationEventBulkMailToAttendees)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailSpeakers)', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__,

    __(OrganizationEventBulkMailToSpeakers)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); diff --git a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql index f7e7a7a1ba5..d5deec862d0 100644 --- a/htdocs/install/mysql/migration/15.0.0-16.0.0.sql +++ b/htdocs/install/mysql/migration/15.0.0-16.0.0.sql @@ -365,7 +365,52 @@ ALTER TABLE llx_bank_account ADD COLUMN pti_in_ctti smallint DEFAULT 0 AFTER dom -- Set default ticket type to OTHER if no default exists UPDATE llx_c_ticket_type SET use_default=1 WHERE code='OTHER' AND NOT EXISTS(SELECT * FROM (SELECT * FROM llx_c_ticket_type) AS t WHERE use_default=1); + -- Assets - New module + +CREATE TABLE llx_asset( + rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, + ref varchar(128) NOT NULL, + entity integer DEFAULT 1 NOT NULL, + label varchar(255), + + fk_asset_model integer, + + reversal_amount_ht double(24,8), + acquisition_value_ht double(24,8) DEFAULT NULL, + recovered_vat double(24,8), + + reversal_date date, + + date_acquisition date NOT NULL, + date_start date NOT NULL, + + qty real DEFAULT 1 NOT NULL, + + acquisition_type smallint DEFAULT 0 NOT NULL, + asset_type smallint DEFAULT 0 NOT NULL, + + not_depreciated integer DEFAULT 0, + + disposal_date date, + disposal_amount_ht double(24,8), + fk_disposal_type integer, + disposal_depreciated integer DEFAULT 0, + disposal_subject_to_vat integer DEFAULT 0, + + note_public text, + note_private text, + + date_creation datetime NOT NULL, + tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + fk_user_creat integer NOT NULL, + fk_user_modif integer, + last_main_doc varchar(255), + import_key varchar(14), + model_pdf varchar(255), + status integer NOT NULL +) ENGINE=innodb; + ALTER TABLE llx_asset DROP FOREIGN KEY fk_asset_asset_type; ALTER TABLE llx_asset DROP INDEX idx_asset_fk_asset_type; @@ -653,6 +698,9 @@ ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN firstnam ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN lastname varchar(100); ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN email_company varchar(128) after email; +-- VMYSQL4.3 ALTER TABLE llx_eventorganization_conferenceorboothattendee MODIFY COLUMN fk_user_creat integer NULL; +-- VPGSQL8.2 ALTER TABLE llx_eventorganization_conferenceorboothattendee ALTER COLUMN fk_user_creat DROP NOT NULL; + ALTER TABLE llx_c_email_templates ADD COLUMN joinfiles text; ALTER TABLE llx_c_email_templates ADD COLUMN email_from varchar(255); @@ -692,3 +740,34 @@ ALTER TABLE llx_loan_schedule ADD UNIQUE INDEX uk_loan_schedule_ref (fk_loan, da -- We need when upgrade 15 to 16 with Dolibarr v17+ for upgrade2 function migrate_user_photospath2() ALTER TABLE llx_user CHANGE COLUMN note note_private text; + + +-- Bank Thirdparty +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'banque','thirdparty','',0,null,null,'(YourSEPAMandate)',1,'isModEnabled("societe") && isModEnabled("banque") && isModEnabled("prelevement")',0,'__(YourSEPAMandate)__','__(Hello)__,

    \n\n__(FindYourSEPAMandate)__ :
    \n__MYCOMPANY_NAME__
    \n__MYCOMPANY_FULLADDRESS__

    \n__(Sincerely)__
    \n__USER_SIGNATURE__',null, 0); + +-- Members +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourMembershipWasValidated)__
    __(FirstName)__ : __MEMBER_FIRSTNAME__
    __(LastName)__ : __MEMBER_LASTNAME__
    __(ID)__ : __MEMBER_ID__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__
    \n\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 1); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(ThisIsContentOfSubscriptionReminderEmail)__
    \n
    __ONLINE_PAYMENT_TEXT_AND_URL__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,

    \n\n__(YourMembershipWasCanceled)__
    \n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'adherent','member','',0,null,null,'(SendingAnEMailToMember)' ,60, 'isModEnabled("adherent")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(CardContent)__', '__(Hello)__,

    \n\n__(ThisIsContentOfYourCard)__
    \n__(ID)__ : __ID__
    \n__(Civility)__ : __MEMBER_CIVILITY__
    \n__(Firstname)__ : __MEMBER_FIRSTNAME__
    \n__(Lastname)__ : __MEMBER_LASTNAME__
    \n__(Fullname)__ : __MEMBER_FULLNAME__
    \n__(Company)__ : __MEMBER_COMPANY__
    \n__(Address)__ : __MEMBER_ADDRESS__
    \n__(Zip)__ : __MEMBER_ZIP__
    \n__(Town)__ : __MEMBER_TOWN__
    \n__(Country)__ : __MEMBER_COUNTRY__
    \n__(Email)__ : __MEMBER_EMAIL__
    \n__(Birthday)__ : __MEMBER_BIRTH__
    \n__(Photo)__ : __MEMBER_PHOTO__
    \n__(Login)__ : __MEMBER_LOGIN__
    \n__(Phone)__ : __MEMBER_PHONE__
    \n__(PhonePerso)__ : __MEMBER_PHONEPRO__
    \n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); + +-- Recruiting +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'isModEnabled("recruitment")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,

    \n\n__(YourCandidatureAnswerMessage)__
    __ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n

    \n__(Sincerely)__
    __USER_SIGNATURE__',null, 0); + +-- Event organization +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__,

    __(OrganizationEventConfRequestWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskBooth)', 20, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskBooth)__', '__(Hello)__,

    __(OrganizationEventBoothRequestWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +-- TODO Add message for registration only to event __ONLINE_PAYMENT_TEXT_AND_URL__ +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailBoothPayment)', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailBoothPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfBoothWasReceived)__


    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailRegistrationPayment)', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailRegistrationPayment)__', '__(Hello)__,

    __(OrganizationEventPaymentOfRegistrationWasReceived)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +-- +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailAttendees)', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__,

    __(OrganizationEventBulkMailToAttendees)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationMassEmailSpeakers)', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__,

    __(OrganizationEventBulkMailToSpeakers)__

    __(Sincerely)__
    __USER_SIGNATURE__', null, '1', null); + +-- Partnership +INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipWillSoonBeCanceled)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipWillSoonBeCanceledTopic)__', 0, '\n

    __(Hello)__,

    \n__(YourPartnershipWillSoonBeCanceledContent)__

    \n
    \n\n
    \n\n __(Sincerely)__
    \n __[MAIN_INFO_SOCIETE_NOM]__
    \n \n'); +INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipCanceled)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipCanceledTopic)__', 0, '\n

    __(Hello)__,

    \n__(YourPartnershipCanceledContent)__

    \n
    \n\n
    \n\n __(Sincerely)__
    \n __[MAIN_INFO_SOCIETE_NOM]__
    \n \n'); +INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipRefused)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipRefusedTopic)__', 0, '\n

    __(Hello)__,

    \n__(YourPartnershipRefusedContent)__

    \n
    \n\n
    \n\n __(Sincerely)__
    \n __[MAIN_INFO_SOCIETE_NOM]__
    \n \n'); +INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipAccepted)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipAcceptedTopic)__', 0, '\n

    __(Hello)__,

    \n__(YourPartnershipAcceptedContent)__

    \n
    \n\n
    \n\n __(Sincerely)__
    \n __[MAIN_INFO_SOCIETE_NOM]__
    \n \n'); diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql index 9b0018b124f..24ac0e37ff5 100644 --- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql +++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql @@ -145,6 +145,9 @@ CREATE TABLE llx_bank_extrafields ALTER TABLE llx_bank_extrafields ADD INDEX idx_bank_extrafields (fk_object); +ALTER TABLE llx_product_lot ADD COLUMN note_public text DEFAULT NULL after batch; +ALTER TABLE llx_product_lot ADD COLUMN note_private text DEFAULT NULL after note_public; + ALTER TABLE llx_user CHANGE COLUMN note note_private text; UPDATE llx_c_effectif SET code='EF101-500', libelle='101 - 500' WHERE code='EF100-500'; @@ -192,3 +195,169 @@ ALTER TABLE llx_bank_url ADD INDEX idx_bank_url_url_id (url_id); ALTER TABLE llx_societe_remise_except ADD COLUMN multicurrency_code varchar(3) NULL; ALTER TABLE llx_societe_remise_except ADD COLUMN multicurrency_tx double(24,8) NULL; +-- VMYSQL4.3 ALTER TABLE llx_hrm_evaluationdet CHANGE COLUMN `rank` rankorder integer; +-- VPGSQL8.2 ALTER TABLE llx_hrm_evaluationdet CHANGE COLUMN rank rankorder integer; + + +-- Rename const to hide public and private notes (fix allow notes const was used to hide) +UPDATE llx_const SET name = 'MAIN_LIST_HIDE_PUBLIC_NOTES' WHERE name = 'MAIN_LIST_ALLOW_PUBLIC_NOTES'; +UPDATE llx_const SET name = 'MAIN_LIST_HIDE_PRIVATE_NOTES' WHERE name = 'MAIN_LIST_ALLOW_PRIVATE_NOTES'; + + +ALTER TABLE llx_projet ADD COLUMN date_start_event datetime; +ALTER TABLE llx_projet ADD COLUMN date_end_event datetime; +ALTER TABLE llx_projet ADD COLUMN location varchar(255); + + +ALTER TABLE llx_c_action_trigger MODIFY COLUMN code varchar(128); + +-- +-- List of all managed triggered events (used for trigger agenda automatic events and for notification) +-- + +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_MODIFY','Third party update','Executed when you update third party','societe',1); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10); +--insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CREATE','Supplier order created','Executed when a supplier order is created','order_supplier',11); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',12); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_DELETE','Shipping sent is deleted','Executed when a shipping is deleted','shipping',21); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECEPTION_VALIDATE','Reception validated','Executed when a reception is validated','reception',22); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECEPTION_SENTBYMAIL','Reception sent by mail','Executed when a reception is sent by mail','reception',22); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',23); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',25); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',26); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',30); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',32); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',33); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',34); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',35); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',40); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',42); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',205); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',211); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',212); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',212); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CREATE','Project creation','Executed when a project is created','project',140); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_MODIFY','Project modified','Executed when a project is modified','project',142); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',143); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_SENTBYMAIL','Project sent by mail','Executed when a project is sent by email','project',144); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_ASSIGNED','Ticket assigned','Executed when a ticket is modified','ticket',164); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_CLOSE','Ticket closed','Executed when a ticket is closed','ticket',165); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_SENTBYMAIL','Ticket message sent by email','Executed when a message is sent from the ticket record','ticket',166); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_DELETE','Ticket deleted','Executed when a ticket is deleted','ticket',167); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_CREATE','User created','Executed when a user is created','user',301); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_MODIFY','User update','Executed when a user is updated','user',302); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_DELETE','User update','Executed when a user is deleted','user',303); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',19); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','mrp',660); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','mrp',661); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','mrp',662); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','mrp',663); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_CREATE','Contact address created','Executed when a contact is created','contact',50); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact address record','contact',52); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',53); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_DELETE','Job deleted','Executed when a job is deleted','recruitment',7506); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTCANDIDATURE_CREATE','Candidature created','Executed when a candidature is created','recruitment',7510); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTCANDIDATURE_MODIFY','Candidature modified','Executed when a candidature is modified','recruitment',7512); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTCANDIDATURE_SENTBYMAIL','Mails sent from candidature record','Executed when you send email from candidature record','recruitment',7514); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTCANDIDATURE_DELETE','Candidature deleted','Executed when a candidature is deleted','recruitment',7516); + +-- actions not enabled by default : they are excluded when we enable the module Agenda (except TASK_...) +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_CREATE','Task created','Executed when a project task is created','project',150); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_MODIFY','Task modified','Executed when a project task is modified','project',151); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_DELETE','Task deleted','Executed when a project task is deleted','project',152); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ACTION_CREATE','Action added','Executed when an action is added to the agenda','agenda',700); + +-- holiday +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_CREATE','Holiday created','Executed when a holiday is created','holiday',800); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_MODIFY','Holiday modified','Executed when a holiday is modified','holiday',801); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Holiday validated','Executed when a holiday is validated','holiday',802); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Holiday aprouved','Executed when a holiday is aprouved','holiday',803); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804); + +-- facture rec +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_CREATE','Template invoices created','Executed when a Template invoices is created','facturerec',900); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_MODIFY','Template invoices update','Executed when a Template invoices is updated','facturerec',901); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_DELETE','Template invoices deleted','Executed when a Template invoices is deleted','facturerec',902); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_AUTOCREATEBILL','Template invoices use to create invoices with auto batch','Executed when a Template invoices is use to create invoice with auto batch','facturerec',903); diff --git a/htdocs/install/mysql/tables/llx_c_action_trigger.sql b/htdocs/install/mysql/tables/llx_c_action_trigger.sql index 8f7450d0fe9..be1c8580541 100644 --- a/htdocs/install/mysql/tables/llx_c_action_trigger.sql +++ b/htdocs/install/mysql/tables/llx_c_action_trigger.sql @@ -23,7 +23,7 @@ create table llx_c_action_trigger ( rowid integer AUTO_INCREMENT PRIMARY KEY, elementtype varchar(64) NOT NULL, - code varchar(64) NOT NULL, + code varchar(128) NOT NULL, label varchar(128) NOT NULL, description varchar(255), rang integer DEFAULT 0 diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql index f13fff71a6f..4119e7aac08 100644 --- a/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql @@ -28,7 +28,7 @@ CREATE TABLE llx_emailcollector_emailcollector( acces_type integer DEFAULT 0, oauth_service varchar(128), password varchar(128), - source_directory varchar(255) NOT NULL, + source_directory varchar(255) DEFAULT 'Inbox' NOT NULL, target_directory varchar(255), maxemailpercollect integer DEFAULT 100, datelastresult datetime, diff --git a/htdocs/install/mysql/tables/llx_establishment.sql b/htdocs/install/mysql/tables/llx_establishment.sql index 1b0d2668cb0..a3542f6d9d6 100644 --- a/htdocs/install/mysql/tables/llx_establishment.sql +++ b/htdocs/install/mysql/tables/llx_establishment.sql @@ -22,8 +22,8 @@ CREATE TABLE llx_establishment ( rowid integer NOT NULL auto_increment PRIMARY KEY, entity integer NOT NULL DEFAULT 1, - label varchar(255) NOT NULL, ref varchar(30), + label varchar(255) NOT NULL, name varchar(128), address varchar(255), zip varchar(25), diff --git a/htdocs/install/mysql/tables/llx_product_lot.sql b/htdocs/install/mysql/tables/llx_product_lot.sql index 162f1c6c122..4e6914884ac 100644 --- a/htdocs/install/mysql/tables/llx_product_lot.sql +++ b/htdocs/install/mysql/tables/llx_product_lot.sql @@ -22,6 +22,8 @@ CREATE TABLE llx_product_lot ( entity integer DEFAULT 1, fk_product integer NOT NULL, -- Id of product batch varchar(128) DEFAULT NULL, -- Lot or serial number + note_public text DEFAULT NULL, + note_private text DEFAULT NULL, eatby date DEFAULT NULL, -- Eatby date sellby date DEFAULT NULL, -- Sellby date eol_date datetime NULL, diff --git a/htdocs/install/mysql/tables/llx_projet.sql b/htdocs/install/mysql/tables/llx_projet.sql index 197a92ac2be..5b3df54ba14 100644 --- a/htdocs/install/mysql/tables/llx_projet.sql +++ b/htdocs/install/mysql/tables/llx_projet.sql @@ -47,7 +47,10 @@ create table llx_projet usage_opportunity integer DEFAULT 0, -- Set to 1 if project is used to follow an opportunity usage_task integer DEFAULT 1, -- Set to 1 if project is used to manage tasks and/or record timesheet usage_bill_time integer DEFAULT 0, -- Set to 1 if time spent must be converted into invoices - usage_organize_event integer DEFAULT 0, -- Set to 1 if you want to use project to organize an event or receive attendees registration + usage_organize_event integer DEFAULT 0, -- Set to 1 if you want to use project to organize an event or receive attendees registration + date_start_event datetime, -- date start event + date_end_event datetime, -- date end event + location varchar(255), -- location accept_conference_suggestions integer DEFAULT 0, -- Set to 1 if you want to allow unknown people to suggest conferences accept_booth_suggestions integer DEFAULT 0, -- Set to 1 if you want to Allow unknown people to suggest booth max_attendees integer DEFAULT 0, diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 24b5dba4d01..7958012b0a1 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -825,7 +825,7 @@ function write_conf_file($conffile) global $dolibarr_main_distrib; global $db_host, $db_port, $db_name, $db_user, $db_pass, $db_type, $db_character_set, $db_collation; global $conffile, $conffiletoshow, $conffiletoshowshort; - global $force_dolibarr_lib_ADODB_PATH, $force_dolibarr_lib_NUSOAP_PATH; + global $force_dolibarr_lib_NUSOAP_PATH; global $force_dolibarr_lib_TCPDF_PATH, $force_dolibarr_lib_FPDI_PATH; global $force_dolibarr_lib_GEOIP_PATH; global $force_dolibarr_lib_ODTPHP_PATH, $force_dolibarr_lib_ODTPHP_PATHTOPCLZIP; @@ -944,11 +944,6 @@ function write_conf_file($conffile) } fputs($fp, '$dolibarr_lib_TCPDI_PATH=\''.$force_dolibarr_lib_TCPDI_PATH.'\';'); fputs($fp, "\n"); - if (empty($force_dolibarr_lib_ADODB_PATH)) { - fputs($fp, '//'); $force_dolibarr_lib_ADODB_PATH = ''; - } - fputs($fp, '$dolibarr_lib_ADODB_PATH=\''.$force_dolibarr_lib_ADODB_PATH.'\';'); - fputs($fp, "\n"); if (empty($force_dolibarr_lib_GEOIP_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_GEOIP_PATH = ''; } diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index c6cbab64965..bbb12e8693e 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -483,6 +483,13 @@ if (!GETPOST('action', 'aZ09') || preg_match('/upgrade/i', GETPOST('action', 'aZ migrate_user_photospath(); migrate_user_photospath2(); } + + // Scripts for 17.0 + $afterversionarray = explode('.', '16.0.9'); + $beforeversionarray = explode('.', '17.0.9'); + if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) { + migrate_contractdet_rank(); + } } @@ -5137,3 +5144,61 @@ function migrate_export_import_profiles($mode = 'export') print '
    '.$langs->trans("NothingToDo")."
    '; + print ''.$langs->trans('MigrationContractLineRank')."
    \n"; + + $sql = "SELECT c.rowid as cid ,cd.rowid as cdid,cd.rang FROM ".$db->prefix()."contratdet as cd INNER JOIN ".$db->prefix()."contrat as c ON c.rowid=cd.fk_contrat AND cd.rang=0"; + $sql .=" ORDER BY c.rowid,cd.rowid"; + + $resql = $db->query($sql); + if ($resql) { + $currentRank=0; + $current_contract=0; + while ($obj = $db->fetch_object($resql)) { + if (empty($current_contract) || $current_contract==$obj->cid) { + $currentRank++; + } else { + $currentRank=1; + } + + $sqlUpd = "UPDATE ".$db->prefix()."contratdet SET rang=".(int) $currentRank." WHERE rowid=".(int) $obj->cdid; + $resultstring = '.'; + print $resultstring; + $resqlUpd = $db->query($sqlUpd); + if (!$resqlUpd) { + dol_print_error($db); + $error++; + } + + $current_contract = $obj->cid; + } + } else { + $error++; + } + if (!$error) { + $db->commit(); + } else { + $db->rollback(); + } + + print '
    '.$langs->trans("NothingToDo")."
    '."\n"; // Common attributes + $object->fields['answer']['enabled'] = 0; include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php'; + $object->fields['answer']['enabled'] = 1; if (isModEnabled('categorie')) { $cate_arbo = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', 'parent', 64, 0, 1); @@ -205,6 +207,14 @@ if ($action == 'create') { print '
    '."\n"; + // Add field answer + print '
    '; + print $langs->trans($object->fields['answer']['label']).'
    '; + require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor = new DolEditor('answer', $object->answer, '', 200, 'dolibarr_notes', 'In', true, 0, true, ROWS_9, '100%'); + $out = $doleditor->Create(1); + print $out; + print dol_get_fiche_end(); print $form->buttonsSaveCancel('Create'); @@ -229,12 +239,14 @@ if (($id || $ref) && $action == 'edit') { print ''; } - print dol_get_fiche_head(); + print dol_get_fiche_head(array(), '', '', -3); print ''."\n"; // Common attributes + $object->fields['answer']['enabled'] = 0; include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php'; + $object->fields['answer']['enabled'] = 1; if (isModEnabled('categorie')) { $cate_arbo = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', 'parent', 64, 0, 1); @@ -260,6 +272,14 @@ if (($id || $ref) && $action == 'edit') { print '
    '; + // Add field answer + print '
    '; + print $langs->trans($object->fields['answer']['label']).'
    '; + require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor = new DolEditor('answer', $object->answer, '', 200, 'dolibarr_notes', 'In', true, 0, true, ROWS_9, '100%'); + $out = $doleditor->Create(1); + print $out; + print dol_get_fiche_end(); print $form->buttonsSaveCancel(); @@ -408,11 +428,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $keyforbreak='fk_c_ticket_category'; // We change column just before this field //unset($object->fields['fk_project']); // Hide field already shown in banner //unset($object->fields['fk_soc']); // Hide field already shown in banner + $object->fields['answer']['enabled'] = 0; include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php'; + $object->fields['answer']['enabled'] = 1; // Categories if (isModEnabled('categorie')) { - print '
    '.$langs->trans("Categories").''; + print '
    '.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1); print "
    '; + print '
    '; print '
    '; print '
    '; + // Add field answer + print '
    '; + print $langs->trans($object->fields['answer']['label']).'
    '; + require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor = new DolEditor('answer', $object->answer, '', 200, 'dolibarr_notes', 'In', true, 0, true, ROWS_9, '100%', 1); + $out = $doleditor->Create(1); + print $out; + print dol_get_fiche_end(); diff --git a/htdocs/knowledgemanagement/knowledgerecord_list.php b/htdocs/knowledgemanagement/knowledgerecord_list.php index d9fc25fa1fe..217c7c71468 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_list.php +++ b/htdocs/knowledgemanagement/knowledgerecord_list.php @@ -472,7 +472,7 @@ $moreforfilter.= '
    ';*/ // Filter on categories $moreforfilter = ''; -if (isModEnabled('categorie') && $user->rights->categorie->lire) { +if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { $moreforfilter .= '
    '; $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"'); $categoriesKnowledgeArr = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', '', 64, 0, 1); diff --git a/htdocs/langs/ar_IQ/projects.lang b/htdocs/langs/ar_IQ/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/ar_IQ/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/de_AT/admin.lang b/htdocs/langs/de_AT/admin.lang index 54771c2245a..eb37ef1ee98 100644 --- a/htdocs/langs/de_AT/admin.lang +++ b/htdocs/langs/de_AT/admin.lang @@ -21,8 +21,6 @@ SessionSaveHandler=Sessionmanager YourSession=Ihre Anmeldung Sessions=Benutzeranmeldungen DolibarrSetup=Dolibarr installieren oder aktualisieren -InternalUser=interner Nutzer -ExternalUser=externer Nutzer InternalUsers=interne Nutzer ExternalUsers=externe Nutzer UploadNewTemplate=Neue Vorlage(n) hochladen diff --git a/htdocs/langs/de_CH/accountancy.lang b/htdocs/langs/de_CH/accountancy.lang index 6a826327010..a65ad255398 100644 --- a/htdocs/langs/de_CH/accountancy.lang +++ b/htdocs/langs/de_CH/accountancy.lang @@ -39,7 +39,6 @@ CountriesNotInEEC=Nicht EWR - Staaten CountriesInEECExceptMe=Länder im EWR ausser %s CountriesExceptMe=Alle Staaten, ausser %s AccountantFiles=Geschäftsvorgänge exportieren -ExportAccountingSourceDocHelp=With this tool, you can search and export the source events that are used to generate your accountancy.
    The exported ZIP file will contain the lists of requested items in CSV, as well as their attached files in their original format (PDF, ODT, DOCX...). ExportAccountingSourceDocHelp2=Die Journale exportierst du im Menu %s - %s. VueByAccountAccounting=Anzeigen nach Buchhaltungskonto VueBySubAccountAccounting=Anzeigen nach Nebenbuchkonto @@ -232,7 +231,6 @@ AccountingAccountForSalesTaxAreDefinedInto=Obacht: Das Buchhaltungskonto für d NumberOfAccountancyEntries=Anzahl Einträge NumberOfAccountancyMovements=Anzahl Bewegungen ACCOUNTING_DISABLE_BINDING_ON_SALES=Bindung & Übertragung in der Verkaufsbuchhaltung deaktivieren (Kundenrechnungen werden in der Buchhaltung nicht berücksichtigt) -NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "%s" feature, modification and deletion of the lines will DEFINITELY not be possible) ConfirmExportFile=Bestätigen der Generierung der Buchhaltungsexportdatei ? ExportDraftJournal=Exportiere Entwurfsjournal Modelcsv=Exportformat diff --git a/htdocs/langs/de_CH/admin.lang b/htdocs/langs/de_CH/admin.lang index 3529a5b6b40..b8e31734903 100644 --- a/htdocs/langs/de_CH/admin.lang +++ b/htdocs/langs/de_CH/admin.lang @@ -256,7 +256,6 @@ SetAsDefault=Als Standard definieren InstalledInto=Installiert im Verzeichnis %s BarcodeInitForThirdparties=Barcode Init. für alle Partner BarcodeInitForProductsOrServices=Alle Strichcodes für Produkte oder Services initialisieren oder zurücksetzen -InitEmptyBarCode=Init value for the %s empty barcodes EraseAllCurrentBarCode=Alle aktuellen Barcode-Werte löschen ConfirmEraseAllCurrentBarCode=Wirklich alle aktuellen Barcode-Werte löschen? AllBarcodeReset=Alle Barcode-Werte wurden entfernt @@ -396,7 +395,6 @@ Permission215=Lieferanten einrichten Permission255=Andere Passwörter ändern Permission272=Rechnungen anzeigen Permission273=Ausgabe Rechnungen -Permission300=Barcodes auslesen Permission301=Barcodes erzeugen und ändern. Permission331=Lesezeichen einsehen Permission430=PHP Debug Bar verwenden diff --git a/htdocs/langs/de_CH/commercial.lang b/htdocs/langs/de_CH/commercial.lang index edf30db19b1..a3ab0012f82 100644 --- a/htdocs/langs/de_CH/commercial.lang +++ b/htdocs/langs/de_CH/commercial.lang @@ -35,8 +35,5 @@ Stats=Verkaufsstatistik StatusProsp=Interessenten Status NoLimit=Kein Limit ToOfferALinkForOnlineSignature=Link zur Digitalen Unterschrift -WelcomeOnOnlineSignaturePage=Willkommen auf der Seite zum Offerten von %s zu aktzeptieren. -ThisScreenAllowsYouToSignDocFrom=Hier kannst du die Offerte akzeptieren, unterzeichen oder zurückweisen. -ThisIsInformationOnDocumentToSign=Hier die Informationen zum Dokument, das zu akzeptieren oder zurückzuweisen ist. SignatureProposalRef=Unterschrift zur Offerte %s FeatureOnlineSignDisabled=Hoppla, online unterschreiben ist entweder deaktiviert - oder die Offerte wurde erstellt, bevor online unterschreiben aktiviert worden war. diff --git a/htdocs/langs/el_CY/members.lang b/htdocs/langs/el_CY/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/el_CY/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/el_CY/projects.lang b/htdocs/langs/el_CY/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/el_CY/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_AE/members.lang b/htdocs/langs/en_AE/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_AE/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_AE/projects.lang b/htdocs/langs/en_AE/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_AE/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_AU/members.lang b/htdocs/langs/en_AU/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_AU/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_AU/projects.lang b/htdocs/langs/en_AU/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_AU/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_CA/members.lang b/htdocs/langs/en_CA/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_CA/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_CA/projects.lang b/htdocs/langs/en_CA/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_CA/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_GB/accountancy.lang b/htdocs/langs/en_GB/accountancy.lang index 0afbc72c036..8ed034a497b 100644 --- a/htdocs/langs/en_GB/accountancy.lang +++ b/htdocs/langs/en_GB/accountancy.lang @@ -50,7 +50,6 @@ ACCOUNTING_LIST_SORT_VENTILATION_TODO=Begin sorting the page "Links to do" by th ACCOUNTING_LIST_SORT_VENTILATION_DONE=Begin sorting the page "Links done" by the most recent elements ACCOUNTING_LENGTH_GACCOUNT=Length of the General Ledger accounts (If you set value to 6 here, the account '706' will appear as '706000' on screen) ACCOUNTING_SELL_JOURNAL=Sales journal -ACCOUNTING_MISCELLANEOUS_JOURNAL=General journal ACCOUNTING_ACCOUNT_SUSPENSE=Suspense account DONATION_ACCOUNTINGACCOUNT=Finance account to register donations ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Default sales account (used if not defined in the product sheet) diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 40504938dbe..f61f52381f7 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -39,7 +39,6 @@ UMaskExplanation=This parameter allows you to define permissions set by default ListOfDirectories=List of OpenDocument template directories ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.

    Put here full path of directories.
    Add a carriage return between each directory.
    To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

    Files in those directories must end with .odt or .ods. FollowingSubstitutionKeysCanBeUsed=
    To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation: -InitEmptyBarCode=Init value for the %s empty barcodes Module50200Name=PayPal DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode diff --git a/htdocs/langs/en_GB/members.lang b/htdocs/langs/en_GB/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_GB/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_GB/projects.lang b/htdocs/langs/en_GB/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_GB/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_GB/trips.lang b/htdocs/langs/en_GB/trips.lang index 31e58b7f935..b9af13b26fa 100644 --- a/htdocs/langs/en_GB/trips.lang +++ b/htdocs/langs/en_GB/trips.lang @@ -1,8 +1,8 @@ # Dolibarr language file - Source file is en_US - trips -TripsAndExpensesStatistics=Expense report statistics -FeesKilometersOrAmout=Amount or Miles -TripNDF=Information expense report -TF_METRO=Tube -ErrorDoubleDeclaration=You have submitted another expense report in a similar date range. BrouillonnerTrip=Move expense report status back to "Draft" ConfirmBrouillonnerTrip=Are you sure you want to move this expense report status back to "Draft"? +ErrorDoubleDeclaration=You have submitted another expense report in a similar date range. +FeesKilometersOrAmout=Amount or Miles +TripNDF=Information expense report +TripsAndExpensesStatistics=Expense report statistics +TF_METRO=Tube diff --git a/htdocs/langs/en_IN/members.lang b/htdocs/langs/en_IN/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_IN/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_SG/members.lang b/htdocs/langs/en_SG/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_SG/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_SG/projects.lang b/htdocs/langs/en_SG/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_SG/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index f894974d314..40482298e63 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -165,12 +165,14 @@ ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow ACCOUNTING_DATE_START_BINDING=Define a date to start binding & transfer in accountancy. Below this date, the transactions will not be transferred to accounting. ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=On accountancy transfer, what is the period selected by default -ACCOUNTING_SELL_JOURNAL=Sell journal -ACCOUNTING_PURCHASE_JOURNAL=Purchase journal -ACCOUNTING_MISCELLANEOUS_JOURNAL=Miscellaneous journal +ACCOUNTING_SELL_JOURNAL=Sales journal (sales and returns) +ACCOUNTING_PURCHASE_JOURNAL=Purchase journal (purchase and returns) +ACCOUNTING_BANK_JOURNAL=Cash journal (receipts and disbursements) ACCOUNTING_EXPENSEREPORT_JOURNAL=Expense report journal -ACCOUNTING_SOCIAL_JOURNAL=Social journal +ACCOUNTING_MISCELLANEOUS_JOURNAL=General journal ACCOUNTING_HAS_NEW_JOURNAL=Has new Journal +ACCOUNTING_INVENTORY_JOURNAL=Inventory journal +ACCOUNTING_SOCIAL_JOURNAL=Social journal ACCOUNTING_RESULT_PROFIT=Result accounting account (Profit) ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) @@ -402,7 +404,11 @@ Calculated=Calculated Formula=Formula ## Reconcile +LetteringAuto=Reconcile auto +LetteringManual=Reconcile manual Unlettering=Unreconcile +UnletteringAuto=Unreconcile auto +UnletteringManual=Unreconcile manual AccountancyNoLetteringModified=No reconcile modified AccountancyOneLetteringModifiedSuccessfully=One reconcile successfully modified AccountancyLetteringModifiedSuccessfully=%s reconcile successfully modified @@ -411,8 +417,9 @@ AccountancyOneUnletteringModifiedSuccessfully=One unreconcile successfully modif AccountancyUnletteringModifiedSuccessfully=%s unreconcile successfully modified ## Confirm box -ConfirmMassUnlettering=Bulk Unreconcile confirmation -ConfirmMassUnletteringQuestion=Are you sure you want to Unreconcile the %s selected record(s)? +ConfirmMassUnletteringAuto=Bulk auto unreconcile confirmation +ConfirmMassUnletteringManual=Bulk manual unreconcile confirmation +ConfirmMassUnletteringQuestion=Are you sure you want to unreconcile the %s selected record(s)? ConfirmMassDeleteBookkeepingWriting=Bulk Delete confirmation ConfirmMassDeleteBookkeepingWritingQuestion=This will delete the transaction from the accounting (all lines related to the same transaction will be deleted) Are you sure you want to delete the %s selected record(s)? @@ -458,6 +465,5 @@ FECFormatMulticurrencyCode=Multicurrency code (Idevise) DateExport=Date export WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate. ExpenseReportJournal=Expense Report Journal -InventoryJournal=Inventory Journal NAccounts=%s accounts diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 502953f0140..90ca6c15362 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -501,7 +501,8 @@ WarningPHPMail=WARNING: The setup to send emails from the application is using t WarningPHPMailA=- Using the server of the Email Service Provider increases the trustability of your email, so it increases the deliverablity without being flagged as SPAM WarningPHPMailB=- Some Email Service Providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted for delivery (be careful also of your email provider's sending quota). WarningPHPMailC=- Using the SMTP server of your own Email Service Provider to send emails is also interesting so all emails sent from application will also be saved into your "Sent" directory of your mailbox. -WarningPHPMailD=Also, it is therefore recommended to change the sending method of e-mails to the value "SMTP". If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by setting the MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP constant to 1 in Home - Setup - Other. +WarningPHPMailD=It is therefore recommended to change the sending method of e-mails to the value "SMTP". +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: %s. WarningPHPMailSPF=If the domain name in your sender email address is protected by a SPF record (ask your domain name registar), you must add the following IPs in the SPF record of the DNS of your domain: %s. ActualMailSPFRecordFound=Actual SPF record found (for email %s) : %s @@ -645,9 +646,9 @@ Module2400Name=Events/Agenda Module2400Desc=Track events. Log automatic events for tracking purposes or record manual events or meetings. This is the principal module for good Customer or Vendor Relationship Management. Module2500Name=DMS / ECM Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need. -Module2600Name=API/Web services (SOAP server) +Module2600Name=API / Web services (SOAP server) Module2600Desc=Enable the Dolibarr SOAP server providing API services -Module2610Name=API/Web services (REST server) +Module2610Name=API / Web services (REST server) Module2610Desc=Enable the Dolibarr REST server providing API services Module2660Name=Call WebServices (SOAP client) Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Purchase orders are currently supported.) @@ -1746,8 +1747,8 @@ ActivateFCKeditor=Activate advanced editor for: FCKeditorForNotePublic=WYSIWIG creation/edition of the field "public notes" of elements FCKeditorForNotePrivate=WYSIWIG creation/edition of the field "private notes" of elements FCKeditorForCompany=WYSIWIG creation/edition of the field description of elements (except products/services) -FCKeditorForProduct=WYSIWIG creation/edition of the field description of products/services -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files. +FCKeditorForProductDetails=WYSIWIG creation/edition of products description or lines for objects (lines of proposals, orders, invoices, etc...). +FCKeditorForProductDetails2=Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files. FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing) FCKeditorForUserSignature=WYSIWIG creation/edition of user signature FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing) @@ -2269,7 +2270,7 @@ LateWarningAfter="Late" warning after TemplateforBusinessCards=Template for a business card in different size InventorySetup= Inventory Setup ExportUseLowMemoryMode=Use a low memory mode -ExportUseLowMemoryModeHelp=Use the low memory mode to execute the exec of the dump (compression is done through a pipe instead of into the PHP memory). This method does not allow to check that file is completed and error message can't be reported if it fails. +ExportUseLowMemoryModeHelp=Use the low memory mode to generate the dump file (compression is done through a pipe instead of into the PHP memory). This method does not allow to check that the file is complete and error message can't be reported if it fails. Use it if you experience not enough memory errors. ModuleWebhookName = Webhook ModuleWebhookDesc = Interface to catch dolibarr triggers and send it to an URL @@ -2311,7 +2312,6 @@ MAIN_MAIL_SMTPS_AUTH_TYPE=Authentification method UsePassword=Use a password UseOauth=Use a OAUTH token Images=Images -Posts=Posts MaxNumberOfImagesInGetPost=Max number of images allowed in a HTML field submitted in a form MaxNumberOfPostOnPublicPagesByIP=Max number of posts on public pages with an IP Address CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a thirdparty or contact from its phone number. URL to use is: @@ -2329,3 +2329,7 @@ HelpCssOnViewDesc=The Css used when viewing the field. HelpCssOnListDesc=The Css used when field is inside a list table.
    Example: "tdoverflowmax200" RECEPTION_PDF_HIDE_ORDERED=Hide the quantity ordered on the generated documents for receptions MAIN_PDF_RECEPTION_DISPLAY_AMOUNT_HT=Show the price on the generated documents for receptions +WarningDisabled=Warning disabled +LimitsAndMitigation=Access limits and mitigation +DesktopsOnly=Desktops only +DesktopsAndSmartphones=Desktops et smartphones \ No newline at end of file diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index 71a80406ae4..10ba859e71f 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -185,4 +185,3 @@ AlreadyOneBankAccount=Already one bank account defined SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation=SEPA transfer: 'Payment Type' at 'Credit Transfer' level SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=When generatin a SEPA XML file for Credit transfers, the section "PaymentTypeInformation" can now be placed inside the "CreditTransferTransactionInformation" section (instead of "Payment" section). We strongly recommend to keep this unchecked to place PaymentTypeInformation at Payment level, as all banks will not necessarily accept it at CreditTransferTransactionInformation level. Contact your bank before placing PaymentTypeInformation at CreditTransferTransactionInformation level. ToCreateRelatedRecordIntoBank=To create missing related bank record -BanklineExtraFields=Bank Line Extrafields diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 7ea8295a346..f13baf06446 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -13,6 +13,7 @@ BillsStatistics=Customers invoices statistics BillsStatisticsSuppliers=Vendors invoices statistics DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter. +DisabledBecauseNotLastSituationInvoice=Disabled because invoice is not erasable. This invoice is not the last one in situation invoice cycle. DisabledBecauseNotErasable=Disabled because cannot be erased InvoiceStandard=Standard invoice InvoiceStandardAsk=Standard invoice diff --git a/htdocs/langs/en_US/blockedlog.lang b/htdocs/langs/en_US/blockedlog.lang index a1046827559..9fdef53260f 100644 --- a/htdocs/langs/en_US/blockedlog.lang +++ b/htdocs/langs/en_US/blockedlog.lang @@ -14,28 +14,6 @@ OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to prev AddedByAuthority=Stored into remote authority NotAddedByAuthorityYet=Not yet stored into remote authority ShowDetails=Show stored details -logPAYMENT_VARIOUS_CREATE=Payment (not assigned to an invoice) created -logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to an invoice) modified -logPAYMENT_VARIOUS_DELETE=Payment (not assigned to an invoice) logical deletion -logPAYMENT_ADD_TO_BANK=Payment added to bank -logPAYMENT_CUSTOMER_CREATE=Customer payment created -logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion -logDONATION_PAYMENT_CREATE=Donation payment created -logDONATION_PAYMENT_DELETE=Donation payment logical deletion -logBILL_PAYED=Customer invoice paid -logBILL_UNPAYED=Customer invoice set unpaid -logBILL_VALIDATE=Customer invoice validated -logBILL_SENTBYMAIL=Customer invoice send by mail -logBILL_DELETE=Customer invoice logically deleted -logMODULE_RESET=Module BlockedLog was disabled -logMODULE_SET=Module BlockedLog was enabled -logDON_VALIDATE=Donation validated -logDON_MODIFY=Donation modified -logDON_DELETE=Donation logical deletion -logMEMBER_SUBSCRIPTION_CREATE=Member subscription created -logMEMBER_SUBSCRIPTION_MODIFY=Member subscription modified -logMEMBER_SUBSCRIPTION_DELETE=Member subscription logical deletion -logCASHCONTROL_VALIDATE=Cash desk closing recording BlockedLogBillDownload=Customer invoice download BlockedLogBillPreview=Customer invoice preview BlockedlogInfoDialog=Log Details @@ -54,4 +32,30 @@ TooManyRecordToScanRestrictFilters=Too many records to scan/analyze. Please rest RestrictYearToExport=Restrict month / year to export BlockedLogEnabled=System to track events into unalterable logs has been enabled BlockedLogDisabled=System to track events into unalterable logs has been disabled after some recording were done. We saved a special Fingerprint to track the chain as broken -BlockedLogDisabledBis=System to track events into unalterable logs has been disabled. This is possible because no record were done yet. \ No newline at end of file +BlockedLogDisabledBis=System to track events into unalterable logs has been disabled. This is possible because no record were done yet. + +## logTypes +logBILL_DELETE=Customer invoice logically deleted +logBILL_PAYED=Customer invoice paid +logBILL_SENTBYMAIL=Customer invoice send by mail +logBILL_UNPAYED=Customer invoice set unpaid +logBILL_VALIDATE=Customer invoice validated +logCASHCONTROL_VALIDATE=Cash desk closing recording +logDOC_DOWNLOAD=Download of a validated document in order to print or send +logDOC_PREVIEW=Preview of a validated document in order to print or download +logDONATION_PAYMENT_CREATE=Donation payment created +logDONATION_PAYMENT_DELETE=Donation payment logical deletion +logDON_DELETE=Donation logical deletion +logDON_MODIFY=Donation modified +logDON_VALIDATE=Donation validated +logMEMBER_SUBSCRIPTION_CREATE=Member subscription created +logMEMBER_SUBSCRIPTION_DELETE=Member subscription logical deletion +logMEMBER_SUBSCRIPTION_MODIFY=Member subscription modified +logMODULE_RESET=Module BlockedLog was disabled +logMODULE_SET=Module BlockedLog was enabled +logPAYMENT_ADD_TO_BANK=Payment added to bank +logPAYMENT_CUSTOMER_CREATE=Customer payment created +logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion +logPAYMENT_VARIOUS_CREATE=Payment (not assigned to an invoice) created +logPAYMENT_VARIOUS_DELETE=Payment (not assigned to an invoice) logical deletion +logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to an invoice) modified diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang index af816e362e4..ae3d31b6f12 100644 --- a/htdocs/langs/en_US/categories.lang +++ b/htdocs/langs/en_US/categories.lang @@ -42,6 +42,7 @@ MemberHasNoCategory=This member is not in any tags/categories ContactHasNoCategory=This contact is not in any tags/categories ProjectHasNoCategory=This project is not in any tags/categories ClassifyInCategory=Add to tag/category +RemoveCategory=Remove category NotCategorized=Without tag/category CategoryExistsAtSameLevel=This category already exists with this ref ContentsVisibleByAllShort=Contents visible by all diff --git a/htdocs/langs/en_US/commercial.lang b/htdocs/langs/en_US/commercial.lang index 9978118f763..eba95a8aabb 100644 --- a/htdocs/langs/en_US/commercial.lang +++ b/htdocs/langs/en_US/commercial.lang @@ -76,10 +76,14 @@ NoLimit=No limit ToOfferALinkForOnlineSignature=Link for online signature WelcomeOnOnlineSignaturePageProposal=Welcome to the page to accept commercial proposals from %s WelcomeOnOnlineSignaturePageContract=Welcome to %s Contract PDF Signing Page +WelcomeOnOnlineSignaturePageFichinter=Welcome to %s Intervention PDF Signing Page ThisScreenAllowsYouToSignDocFromProposal=This screen allow you to accept and sign, or refuse, a quote/commercial proposal ThisScreenAllowsYouToSignDocFromContract=This screen allow you to sign contract on PDF format online. +ThisScreenAllowsYouToSignDocFromFichinter=This screen allow you to sign intervention on PDF format online. ThisIsInformationOnDocumentToSignProposal=This is information on document to accept or refuse ThisIsInformationOnDocumentToSignContract=This is information on contract to sign +ThisIsInformationOnDocumentToSignFichinter=This is information on intervention to sign SignatureProposalRef=Signature of quote/commercial proposal %s SignatureContractRef=Signature of contract %s +SignatureFichinterRef=Signature of intervention %s FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang index 70fb9e387b9..5e4da60f0f2 100644 --- a/htdocs/langs/en_US/cron.lang +++ b/htdocs/langs/en_US/cron.lang @@ -84,6 +84,7 @@ MakeLocalDatabaseDumpShort=Local database backup MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep MakeSendLocalDatabaseDumpShort=Send local database backup MakeSendLocalDatabaseDump=Send local database backup by email. Parameters are: to, from, subject, message, filename (Name of file sent), filter ('sql' for backup of database only) +BackupIsTooLargeSend=Sorry, last backup file is too large to be send by email CleanUnfinishedCronjobShort=Clean unfinished cronjob CleanUnfinishedCronjob=Clean cronjob stuck in processing when the process is no longer running WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 830b6bd0974..860ae75e604 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -14,6 +14,7 @@ ErrorLoginAlreadyExists=Login %s already exists. ErrorGroupAlreadyExists=Group %s already exists. ErrorEmailAlreadyExists=Email %s already exists. ErrorRecordNotFound=Record not found. +ErrorRecordNotFoundShort=Not found ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. @@ -48,6 +49,7 @@ ErrorBadImageFormat=Image file has not a supported format (Your PHP does not sup ErrorBadDateFormat=Value '%s' has wrong date format ErrorWrongDate=Date is not correct! ErrorFailedToWriteInDir=Failed to write in directory %s +ErrorFailedToBuildArchive=Failed to build archive file %s ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities. ErrorFieldsRequired=Some required fields have been left blank. @@ -95,6 +97,7 @@ ErrorWrongValueForField=Field %s: '%s' does not match regex rule < ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref +ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s errors found ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the file (file might be infected by a virus) ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module. @@ -297,6 +300,7 @@ ErrorCharPlusNotSupportedByImapForSearch=IMAP search is not able to search into ErrorTableNotFound=Table %s not found ErrorValueForTooLow=Value for %s is too low ErrorValueCantBeNull=Value for %s can't be null +ErrorDateOfMovementLowerThanDateOfFileTransmission=The date of the bank transaction can't be lower than the date of the file transmission # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. diff --git a/htdocs/langs/en_US/eventorganization.lang b/htdocs/langs/en_US/eventorganization.lang index b4179b04be6..f9531260c97 100644 --- a/htdocs/langs/en_US/eventorganization.lang +++ b/htdocs/langs/en_US/eventorganization.lang @@ -122,7 +122,7 @@ ViewAndVote = View and vote for suggested events PublicAttendeeSubscriptionGlobalPage = Public link for registration to the event PublicAttendeeSubscriptionPage = Public link for registration to this event only MissingOrBadSecureKey = The security key is invalid or missing -EvntOrgWelcomeMessage = This form allows you to register as a new participant to the event : %s +EvntOrgWelcomeMessage = This form allows you to register as a new participant to the event EvntOrgDuration = This conference starts on %s and ends on %s. ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s @@ -132,7 +132,7 @@ LabelOfconference=Conference label ConferenceIsNotConfirmed=Registration not available, conference is not confirmed yet DateMustBeBeforeThan=%s must be before %s DateMustBeAfterThan=%s must be after %s - +MaxNbOfAttendeesReached=The maximum number of participants has been reached NewSubscription=Registration OrganizationEventConfRequestWasReceived=Your suggestion for a conference has been received OrganizationEventBoothRequestWasReceived=Your request for a booth has been received @@ -157,7 +157,7 @@ VoteOk = Your vote has been accepted. AlreadyVoted = You have already voted for this event. VoteError = An error has occurred during the vote, please try again. -SubscriptionOk = Your registration has been validated +SubscriptionOk=Your registration has been recorded ConfAttendeeSubscriptionConfirmation = Confirmation of your subscription to an event Attendee = Attendee PaymentConferenceAttendee = Conference attendee payment @@ -165,6 +165,7 @@ PaymentBoothLocation = Booth location payment DeleteConferenceOrBoothAttendee=Remove attendee RegistrationAndPaymentWereAlreadyRecorder=A registration and a payment were already recorded for the email %s EmailAttendee=Attendee email +EmailCompany=Company email EmailCompanyForInvoice=Company email (for invoice, if different of attendee email) ErrorSeveralCompaniesWithEmailContactUs=Several companies with this email has been found so we can't validate automaticaly your registration. Please contact us at %s for a manual validation ErrorSeveralCompaniesWithNameContactUs=Several companies with this name has been found so we can't validate automaticaly your registration. Please contact us at %s for a manual validation diff --git a/htdocs/langs/en_US/expensereports.lang b/htdocs/langs/en_US/expensereports.lang index 6a305e43ad7..f3b5f07f241 100644 --- a/htdocs/langs/en_US/expensereports.lang +++ b/htdocs/langs/en_US/expensereports.lang @@ -1,3 +1,160 @@ +# Dolibarr language file - Source file is en_US - expensereports.lang +# copied from trips.lang + +AUTHOR=Recorded by +AUTHORPAIEMENT=Paid by +AddTrip=Create expense report +AllExpenseReport=All type of expense report +AllExpenseReports=All expense reports +AnyOtherInThisListCanValidate=Person to be informed for validating the request. +AttachTheNewLineToTheDocument=Attach the line to an uploaded document +AucuneLigne=There is no expense report declared yet +BrouillonnerTrip=Move back expense report to status "Draft" +byEX_DAY=by day (limitation to %s) +byEX_EXP=by line (limitation to %s) +byEX_MON=by month (limitation to %s) +byEX_YEA=by year (limitation to %s) +CANCEL_USER=Deleted by +CarCategory=Vehicle category +ClassifyRefunded=Classify 'Refunded' +CompanyVisited=Company/organization visited +ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? +ConfirmCancelTrip=Are you sure you want to cancel this expense report? +ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? +ConfirmDeleteTrip=Are you sure you want to delete this expense report? +ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? +ConfirmRefuseTrip=Are you sure you want to deny this expense report? +ConfirmSaveTrip=Are you sure you want to validate this expense report? +ConfirmValideTrip=Are you sure you want to approve this expense report? +DATE_CANCEL=Cancelation date +DATE_PAIEMENT=Payment date +DATE_REFUS=Deny date +DATE_SAVE=Validation date +DefaultCategoryCar=Default transportation mode +DefaultRangeNumber=Default range number +DeleteTrip=Delete expense report +ErrorDoubleDeclaration=You have declared another expense report into a similar date range. +Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' +ExpenseRangeOffset=Offset amount: %s +expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary +expenseReportCoef=Coefficient +expenseReportCoefUndefined=(value not defined) +expenseReportOffset=Offset +expenseReportPrintExample=offset + (d x coef) = %s +expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay +expenseReportRangeFromTo=from %d to %d +expenseReportRangeMoreThan=more than %d +expenseReportTotalForFive=Example with d = 5 +ExpenseReportApplyTo=Apply to +ExpenseReportApproved=An expense report was approved +ExpenseReportApprovedMessage=The expense report %s was approved.
    - User: %s
    - Approved by: %s
    Click here to show the expense report: %s +ExpenseReportCanceled=An expense report was canceled +ExpenseReportCanceledMessage=The expense report %s was canceled.
    - User: %s
    - Canceled by: %s
    - Motive for cancellation: %s
    Click here to show the expense report: %s +ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) +ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) +ExpenseReportDateEnd=Date end +ExpenseReportDateStart=Date start +ExpenseReportDomain=Domain to apply +ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers +ExpenseReportLimitAmount=Max amount +ExpenseReportLimitOn=Limit on +ExpenseReportLine=Expense report line +ExpenseReportPaid=An expense report was paid +ExpenseReportPaidMessage=The expense report %s was paid.
    - User: %s
    - Paid by: %s
    Click here to show the expense report: %s +ExpenseReportPayment=Expense report payment +ExpenseReportRef=Ref. expense report +ExpenseReportRefused=An expense report was refused +ExpenseReportRefusedMessage=The expense report %s was refused.
    - User: %s
    - Refused by: %s
    - Motive for refusal: %s
    Click here to show the expense report: %s +ExpenseReportRestrictive=Exceeding forbidden +ExpenseReportRuleErrorOnSave=Error: %s +ExpenseReportRuleSave=Expense report rule saved +ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report +ExpenseReportWaitingForApproval=A new expense report has been submitted for approval +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
    - User: %s
    - Period: %s
    Click here to validate: %s +ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval +ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
    The %s, you refused to approve the expense report for this reason: %s.
    A new version has been proposed and waiting for your approval.
    - User: %s
    - Period: %s
    Click here to validate: %s +ExpenseReportsIk=Configuration of mileage charges +ExpenseReportsRules=Expense report rules +ExpenseReportsToApprove=Expense reports to approve +ExpenseReportsToPay=Expense reports to pay +ExpensesArea=Expense reports area +FeesKilometersOrAmout=Amount or kilometers +LastExpenseReports=Latest %s expense reports +ListOfFees=List of fees +ListOfTrips=List of expense reports +ListToApprove=Waiting for approval +ListTripsAndExpenses=List of expense reports +MOTIF_CANCEL=Reason +MOTIF_REFUS=Reason +ModePaiement=Payment mode +NewTrip=New expense report +nolimitbyEX_DAY=by day (no limitation) +nolimitbyEX_EXP=by line (no limitation) +nolimitbyEX_MON=by month (no limitation) +nolimitbyEX_YEA=by year (no limitation) +NoTripsToExportCSV=No expense report to export for this period. +NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. +OnExpense=Expense line +PDFStandardExpenseReports=Standard template to generate a PDF document for expense report +PaidTrip=Pay an expense report +REFUSEUR=Denied by +RangeIk=Mileage range +RangeNum=Range %d +SaveTrip=Validate expense report +ShowExpenseReport=Show expense report +ShowTrip=Show expense report +TripCard=Expense report card +TripId=Id expense report +TripNDF=Informations expense report +TripSociete=Information company +Trips=Expense reports +TripsAndExpenses=Expenses reports +TripsAndExpensesStatistics=Expense reports statistics +TypeFees=Types of fees +UploadANewFileNow=Upload a new document now +VALIDATOR=User responsible for approval +VALIDOR=Approved by +ValidateAndSubmit=Validate and submit for approval +ValidatedWaitingApproval=Validated (waiting for approval) +ValideTrip=Approve expense report + +## Dictionary +EX_BRE=Breakfast +EX_CAM=CV maintenance and repair +EX_CAM_VP=PV maintenance and repair +EX_CAR=Car rental +EX_CUR=Customers receiving +EX_DOC=Documentation +EX_EMM=Employees meal +EX_FUE=Fuel CV +EX_FUE_VP=Fuel PV +EX_GUM=Guests meal +EX_HOT=Hotel +EX_IND=Indemnity transportation subscription +EX_KME=Mileage costs +EX_OTR=Other receiving +EX_PAR=Parking CV +EX_PAR_VP=Parking PV +EX_POS=Postage +EX_SUM=Maintenance supply +EX_SUO=Office supplies +EX_TAX=Various Taxes +EX_TOL=Toll CV +EX_TOL_VP=Toll PV +TF_BUS=Bus +TF_CAR=Car +TF_ESSENCE=Fuel +TF_HOTEL=Hotel +TF_LUNCH=Lunch +TF_METRO=Metro +TF_OTHER=Other +TF_PEAGE=Toll +TF_TAXI=Taxi +TF_TRAIN=Train +TF_TRIP=Transportation + + +## add new (not from trips.lang) ExpenseReportPayments=Expense report payments # # error diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang index cbd3dc91663..966f2399a13 100644 --- a/htdocs/langs/en_US/hrm.lang +++ b/htdocs/langs/en_US/hrm.lang @@ -26,8 +26,8 @@ HRM_DEFAULT_SKILL_DESCRIPTION=Default description of ranks when skill is created deplacement=Shift DateEval=Evaluation date JobCard=Job card -JobPosition=Job -JobsPosition=Jobs +JobPosition=Job profile +JobsPosition=Job profiles NewSkill=New Skill SkillType=Skill type Skilldets=List of ranks for this skill diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index ad8217153be..d0c841fe802 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -214,3 +214,4 @@ Loaded=Loaded FunctionTest=Function test NodoUpgradeAfterDB=No action requested by external modules after upgrade of database NodoUpgradeAfterFiles=No action requested by external modules after upgrade of files or directories +MigrationContractLineRank=Migrate Contract Line to use Rank (and enable Reorder) diff --git a/htdocs/langs/en_US/interventions.lang b/htdocs/langs/en_US/interventions.lang index 767688a4ce8..7524439f3ec 100644 --- a/htdocs/langs/en_US/interventions.lang +++ b/htdocs/langs/en_US/interventions.lang @@ -69,3 +69,5 @@ GenerateInter=Generate intervention FichinterNoContractLinked=Intervention %s has been created without a linked contract. ErrorFicheinterCompanyDoesNotExist=Company does not exist. Intervention has not been created. NextDateToIntervention=Date for next intervention generation +AllowOnlineSign=Allow online signing +AllowExternalDownload=Allow external download \ No newline at end of file diff --git a/htdocs/langs/en_US/knowledgemanagement.lang b/htdocs/langs/en_US/knowledgemanagement.lang index 1746b0671ce..38c1624afad 100644 --- a/htdocs/langs/en_US/knowledgemanagement.lang +++ b/htdocs/langs/en_US/knowledgemanagement.lang @@ -47,7 +47,7 @@ KnowledgeRecord = Article KnowledgeRecordExtraFields = Extrafields for Article GroupOfTicket=Group of tickets YouCanLinkArticleToATicketCategory=You can link the article to a ticket group (so the article will be highlighted on any tickets in this group) -SuggestedForTicketsInGroup=Suggested for tickets when group is +SuggestedForTicketsInGroup=Suggested on ticket creation SetObsolete=Set as obsolete ConfirmCloseKM=Do you confirm the closing of this article as obsolete ? diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang index 4e4b2cfafe7..b6368a7d374 100644 --- a/htdocs/langs/en_US/languages.lang +++ b/htdocs/langs/en_US/languages.lang @@ -23,6 +23,7 @@ Language_da_DK=Danish Language_de_DE=German Language_de_AT=German (Austria) Language_de_CH=German (Switzerland) +Language_de_LU=German (Luxembourg) Language_el_GR=Greek Language_el_CY=Greek (Cyprus) Language_en_AE=English (United Arab Emirates) @@ -35,6 +36,7 @@ Language_en_SA=English (Saudi Arabia) Language_en_SG=English (Singapore) Language_en_US=English (United States) Language_en_ZA=English (South Africa) +Language_en_ZW=English (Zimbabwe) Language_es_ES=Spanish Language_es_AR=Spanish (Argentina) Language_es_BO=Spanish (Bolivia) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 3b116565075..325e27b6606 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -34,6 +34,7 @@ NoTemplateDefined=No template available for this email type AvailableVariables=Available substitution variables NoTranslation=No translation Translation=Translation +Translations=Translations CurrentTimeZone=TimeZone PHP (server) EmptySearchString=Enter non empty search criterias EnterADateCriteria=Enter a date criteria @@ -1145,10 +1146,14 @@ UpdateForAllLines=Update for all lines OnHold=On hold Civility=Civility AffectTag=Affect Tag +SetSupervisor=Set Supervisor CreateExternalUser=Create external user ConfirmAffectTag=Bulk Tag Affect +ConfirmSetSupervisor=Bulk Supervisor Set ConfirmAffectTagQuestion=Are you sure you want to affect tags to the %s selected record(s)? +ConfirmSetSupervisorQuestion=Are you sure you want to set supervisor to the %s selected record(s)? CategTypeNotFound=No tag type found for type of records +SupervisorNotFound=Supervisor not found CopiedToClipboard=Copied to clipboard InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration. ConfirmCancel=Are you sure you want to cancel diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index aebe3affdae..d774a8e7434 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -36,6 +36,7 @@ DateEndSubscription=End date of membership EndSubscription=End of membership SubscriptionId=Contribution ID WithoutSubscription=Without contribution +WaitingSubscription=Waiting contribution MemberId=Member Id MemberRef=Member Ref NewMember=New member diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 0e11bef2bf1..6de9ada7e4d 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -56,6 +56,8 @@ RegenerateMissingFiles=Generate missing files SpecificationFile=File of documentation LanguageFile=File for language ObjectProperties=Object Properties +Property=Propery +PropertyDesc=A property is an attribute that characterizes an object. This attribute has a code, a label and a type with several options. ConfirmDeleteProperty=Are you sure you want to delete the property %s? This will change code in PHP class but also remove column from table definition of object. NotNull=Not NULL NotNullDesc=1=Set database to NOT NULL, 0=Allow null values, -1=Allow null values by forcing value to NULL if empty ('' or 0) @@ -90,7 +92,8 @@ ListOfDictionariesEntries=List of dictionaries entries ListOfPermissionsDefined=List of defined permissions SeeExamples=See examples here EnabledDesc=Condition to have this field active.

    Examples:
    1
    isModEnabled('MAIN_MODULE_MYMODULE')
    getDolGlobalString('MYMODULE_OPTION')==2 -VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create), 5=Visible on list end view form only (not create, not update).

    Using a negative value means field is not shown by default on list but can be selected for viewing).

    It can be an expression, for example:
    preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
    $user->hasRight('holiday', 'define_holiday')?1:5 +VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create), 5=Visible on list end view form only (not create, not update).

    Using a negative value means field is not shown by default on list but can be selected for viewing). +ItCanBeAnExpression=It can be an expression. Example:
    preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
    $user->hasRight('holiday', 'define_holiday')?1:5 DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
    For document :
    0 = not displayed
    1 = display
    2 = display only if not empty

    For document lines :
    0 = not displayed
    1 = displayed in a column
    3 = display in line description column after the description
    4 = display in description column after the description only if not empty DisplayOnPdf=On PDF IsAMeasureDesc=Can the value of field be cumulated to get a total into list? (Examples: 1 or 0) @@ -144,13 +147,15 @@ CSSViewClass=CSS for read form CSSListClass=CSS for list NotEditable=Not editable ForeignKey=Foreign key -TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]
    '1' means we add a + button after the combo to create the record
    'filter' is a sql condition, example: 'status=1 AND fk_user=__USER_ID__ AND entity IN (__SHARED_ENTITIES__)' +ForeignKeyDesc=If the value of this field must be guaranted to exists into another table. Enter here a value matching syntax: tablename.parentfieldtocheck +TypeOfFieldsHelp=Example:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]
    '1' means we add a + button after the combo to create the record
    'filter' is a sql condition, example: 'status=1 AND fk_user=__USER_ID__ AND entity IN (__SHARED_ENTITIES__)' +TypeOfFieldsHelpIntro=This is the type of the field/attribute. AsciiToHtmlConverter=Ascii to HTML converter AsciiToPdfConverter=Ascii to PDF converter TableNotEmptyDropCanceled=Table not empty. Drop has been canceled. ModuleBuilderNotAllowed=The module builder is available but not allowed to your user. ImportExportProfiles=Import and export profiles -ValidateModBuilderDesc=Set this to 1 if you want to have the method $this->validateField() of object being called to validate the content of the field during insert or upadate. Set 0 if there is no validation required. +ValidateModBuilderDesc=Set this to 1 if you want to have the method $this->validateField() of object being called to validate the content of the field during insert or update. Set 0 if there is no validation required. WarningDatabaseIsNotUpdated=Warning: The database is not updated automatically, you must destroy tables and disable-enable the module to have tables recreated LinkToParentMenu=Parent menu (fk_xxxxmenu) ListOfTabsEntries=List of tab entries diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 44fb4457999..82196b584bd 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -114,3 +114,4 @@ MoChildGenerate=Generate Child Mo ParentMo=MO Parent MOChild=MO Child BomCantAddChildBom=The nomenclature %s is already present in the tree leading to the nomenclature %s +BOMNetNeeds = BOM Net Needs diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index bf2dabf5a0a..fa2ed9669d9 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -399,7 +399,7 @@ ActionAvailableOnVariantProductOnly=Action only available on the variant of prod ProductsPricePerCustomer=Product prices per customers ProductSupplierExtraFields=Additional Attributes (Supplier Prices) DeleteLinkedProduct=Delete the child product linked to the combination -AmountUsedToUpdateWAP=Amount to use to update the Weighted Average Price +AmountUsedToUpdateWAP=Unit amount to use to update the Weighted Average Price PMPValue=Weighted average price PMPValueShort=WAP mandatoryperiod=Mandatory periods diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 037ddd1c4e1..b6001b2b27b 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -37,7 +37,9 @@ OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status OpportunitiesStatusForProjects=Leads amount of projects by status ShowProject=Show project ShowTask=Show task +SetThirdParty=Set third party SetProject=Set project +OutOfProject=Out of project NoProject=No project defined or owned NbOfProjects=Number of projects NbOfTasks=Number of tasks diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang index d07d6d2efba..7e9afd4e27c 100644 --- a/htdocs/langs/en_US/propal.lang +++ b/htdocs/langs/en_US/propal.lang @@ -104,6 +104,7 @@ IdProduct=Product ID LineBuyPriceHT=Buy Price Amount net of tax for line SignPropal=Accept proposal SignContract=Sign contract +SignFichinter=Sign intervention RefusePropal=Refuse proposal Sign=Sign NoSign=Refuse @@ -111,5 +112,6 @@ PropalAlreadySigned=Proposal already accepted PropalAlreadyRefused=Proposal already refused PropalSigned=Proposal accepted ContractSigned=Contract signed +FichinterSigned=Intervention signed PropalRefused=Proposal refused ConfirmRefusePropal=Are you sure you want to refuse this commercial proposal? diff --git a/htdocs/langs/en_US/recruitment.lang b/htdocs/langs/en_US/recruitment.lang index 1f80ecf1082..686722a48c5 100644 --- a/htdocs/langs/en_US/recruitment.lang +++ b/htdocs/langs/en_US/recruitment.lang @@ -66,7 +66,7 @@ ContractRefused=Contract refused RecruitmentCandidature=Application JobPositions=Job positions RecruitmentCandidatures=Applications -InterviewToDo=Interview to do +InterviewToDo=Contacts to follow AnswerCandidature=Application answer YourCandidature=Your application YourCandidatureAnswerMessage=Thanks you for your application.
    ... diff --git a/htdocs/langs/en_US/stripe.lang b/htdocs/langs/en_US/stripe.lang index 3ea0cf2354b..2a3f988cebf 100644 --- a/htdocs/langs/en_US/stripe.lang +++ b/htdocs/langs/en_US/stripe.lang @@ -61,6 +61,7 @@ DeleteACard=Delete Card ConfirmDeleteCard=Are you sure you want to delete this Credit or Debit card? CreateCustomerOnStripe=Create customer on Stripe CreateCardOnStripe=Create card on Stripe +CreateBANOnStripe=Create bank on Stripe ShowInStripe=Show in Stripe StripeUserAccountForActions=User account to use for email notification of some Stripe events (Stripe payouts) StripePayoutList=List of Stripe payouts @@ -69,4 +70,5 @@ ToOfferALinkForLiveWebhook=Link to setup Stripe WebHook to call the IPN (live mo PaymentWillBeRecordedForNextPeriod=Payment will be recorded for the next period. ClickHereToTryAgain=Click here to try again... CreationOfPaymentModeMustBeDoneFromStripeInterface=Due to Strong Customer Authentication rules, creation of a card must be done from Stripe backoffice. You can click here to switch on Stripe customer record: %s -TERMINAL_LOCATION=Location (address) for terminals \ No newline at end of file +TERMINAL_LOCATION=Location (address) for terminals +RequestDirectDebitWithStripe=Request Direct Debit with Stripe \ No newline at end of file diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index 3e1415c3625..1696018db89 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -194,8 +194,7 @@ TicketAssigned=Ticket is now assigned TicketChangeType=Change type TicketChangeCategory=Change analytic code TicketChangeSeverity=Change severity -TicketAddMessage=Add a message -AddMessage=Add a message +TicketAddMessage=Add private message MessageSuccessfullyAdded=Ticket added TicketMessageSuccessfullyAdded=Message successfully added TicketMessagesList=Message list diff --git a/htdocs/langs/en_US/trips.lang b/htdocs/langs/en_US/trips.lang index 9f51df0bf56..b37233a526f 100644 --- a/htdocs/langs/en_US/trips.lang +++ b/htdocs/langs/en_US/trips.lang @@ -1,120 +1,120 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Show expense report -Trips=Expense reports -TripsAndExpenses=Expenses reports -TripsAndExpensesStatistics=Expense reports statistics -TripCard=Expense report card +AUTHOR=Recorded by +AUTHORPAIEMENT=Paid by AddTrip=Create expense report -ListOfTrips=List of expense reports -ListOfFees=List of fees -TypeFees=Types of fees -ShowTrip=Show expense report -NewTrip=New expense report -LastExpenseReports=Latest %s expense reports +AllExpenseReport=All type of expense report AllExpenseReports=All expense reports -CompanyVisited=Company/organization visited -FeesKilometersOrAmout=Amount or kilometers -DeleteTrip=Delete expense report -ConfirmDeleteTrip=Are you sure you want to delete this expense report? -ListTripsAndExpenses=List of expense reports -ListToApprove=Waiting for approval -ExpensesArea=Expense reports area +AnyOtherInThisListCanValidate=Person to be informed for validating the request. +AttachTheNewLineToTheDocument=Attach the line to an uploaded document +AucuneLigne=There is no expense report declared yet +BrouillonnerTrip=Move back expense report to status "Draft" +byEX_DAY=by day (limitation to %s) +byEX_EXP=by line (limitation to %s) +byEX_MON=by month (limitation to %s) +byEX_YEA=by year (limitation to %s) +CANCEL_USER=Deleted by +CarCategory=Vehicle category ClassifyRefunded=Classify 'Refunded' +CompanyVisited=Company/organization visited +ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? +ConfirmCancelTrip=Are you sure you want to cancel this expense report? +ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? +ConfirmDeleteTrip=Are you sure you want to delete this expense report? +ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? +ConfirmRefuseTrip=Are you sure you want to deny this expense report? +ConfirmSaveTrip=Are you sure you want to validate this expense report? +ConfirmValideTrip=Are you sure you want to approve this expense report? +DATE_CANCEL=Cancelation date +DATE_PAIEMENT=Payment date +DATE_REFUS=Deny date +DATE_SAVE=Validation date +DefaultCategoryCar=Default transportation mode +DefaultRangeNumber=Default range number +DeleteTrip=Delete expense report +ErrorDoubleDeclaration=You have declared another expense report into a similar date range. +Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' +ExpenseRangeOffset=Offset amount: %s +expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary +expenseReportCoef=Coefficient +expenseReportCoefUndefined=(value not defined) +expenseReportOffset=Offset +expenseReportPrintExample=offset + (d x coef) = %s +expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay +expenseReportRangeFromTo=from %d to %d +expenseReportRangeMoreThan=more than %d +expenseReportTotalForFive=Example with d = 5 +ExpenseReportApplyTo=Apply to +ExpenseReportApproved=An expense report was approved +ExpenseReportApprovedMessage=The expense report %s was approved.
    - User: %s
    - Approved by: %s
    Click here to show the expense report: %s +ExpenseReportCanceled=An expense report was canceled +ExpenseReportCanceledMessage=The expense report %s was canceled.
    - User: %s
    - Canceled by: %s
    - Motive for cancellation: %s
    Click here to show the expense report: %s +ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) +ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) +ExpenseReportDateEnd=Date end +ExpenseReportDateStart=Date start +ExpenseReportDomain=Domain to apply +ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers +ExpenseReportLimitAmount=Max amount +ExpenseReportLimitOn=Limit on +ExpenseReportLine=Expense report line +ExpenseReportPaid=An expense report was paid +ExpenseReportPaidMessage=The expense report %s was paid.
    - User: %s
    - Paid by: %s
    Click here to show the expense report: %s +ExpenseReportPayment=Expense report payment +ExpenseReportRef=Ref. expense report +ExpenseReportRefused=An expense report was refused +ExpenseReportRefusedMessage=The expense report %s was refused.
    - User: %s
    - Refused by: %s
    - Motive for refusal: %s
    Click here to show the expense report: %s +ExpenseReportRestrictive=Exceeding forbidden +ExpenseReportRuleErrorOnSave=Error: %s +ExpenseReportRuleSave=Expense report rule saved +ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report ExpenseReportWaitingForApproval=A new expense report has been submitted for approval ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
    - User: %s
    - Period: %s
    Click here to validate: %s ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
    The %s, you refused to approve the expense report for this reason: %s.
    A new version has been proposed and waiting for your approval.
    - User: %s
    - Period: %s
    Click here to validate: %s -ExpenseReportApproved=An expense report was approved -ExpenseReportApprovedMessage=The expense report %s was approved.
    - User: %s
    - Approved by: %s
    Click here to show the expense report: %s -ExpenseReportRefused=An expense report was refused -ExpenseReportRefusedMessage=The expense report %s was refused.
    - User: %s
    - Refused by: %s
    - Motive for refusal: %s
    Click here to show the expense report: %s -ExpenseReportCanceled=An expense report was canceled -ExpenseReportCanceledMessage=The expense report %s was canceled.
    - User: %s
    - Canceled by: %s
    - Motive for cancellation: %s
    Click here to show the expense report: %s -ExpenseReportPaid=An expense report was paid -ExpenseReportPaidMessage=The expense report %s was paid.
    - User: %s
    - Paid by: %s
    Click here to show the expense report: %s -TripId=Id expense report -AnyOtherInThisListCanValidate=Person to be informed for validating the request. -TripSociete=Information company -TripNDF=Informations expense report -PDFStandardExpenseReports=Standard template to generate a PDF document for expense report -ExpenseReportLine=Expense report line -DefaultCategoryCar=Default transportation mode -DefaultRangeNumber=Default range number -UploadANewFileNow=Upload a new document now -Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' -ErrorDoubleDeclaration=You have declared another expense report into a similar date range. -AucuneLigne=There is no expense report declared yet -ModePaiement=Payment mode -VALIDATOR=User responsible for approval -VALIDOR=Approved by -AUTHOR=Recorded by -AUTHORPAIEMENT=Paid by -REFUSEUR=Denied by -CANCEL_USER=Deleted by -MOTIF_REFUS=Reason -MOTIF_CANCEL=Reason -DATE_REFUS=Deny date -DATE_SAVE=Validation date -DATE_CANCEL=Cancelation date -DATE_PAIEMENT=Payment date -ExpenseReportRef=Ref. expense report -ValidateAndSubmit=Validate and submit for approval -ValidatedWaitingApproval=Validated (waiting for approval) -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. -ConfirmRefuseTrip=Are you sure you want to deny this expense report? -ValideTrip=Approve expense report -ConfirmValideTrip=Are you sure you want to approve this expense report? -PaidTrip=Pay an expense report -ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? -ConfirmCancelTrip=Are you sure you want to cancel this expense report? -BrouillonnerTrip=Move back expense report to status "Draft" -ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? -SaveTrip=Validate expense report -ConfirmSaveTrip=Are you sure you want to validate this expense report? -NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment -ExpenseReportsToApprove=Expense reports to approve -ExpenseReportsToPay=Expense reports to pay -ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? ExpenseReportsIk=Configuration of mileage charges ExpenseReportsRules=Expense report rules -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers -ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report -expenseReportOffset=Offset -expenseReportCoef=Coefficient -expenseReportTotalForFive=Example with d = 5 -expenseReportRangeFromTo=from %d to %d -expenseReportRangeMoreThan=more than %d -expenseReportCoefUndefined=(value not defined) -expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay -expenseReportPrintExample=offset + (d x coef) = %s -ExpenseReportApplyTo=Apply to -ExpenseReportDomain=Domain to apply -ExpenseReportLimitOn=Limit on -ExpenseReportDateStart=Date start -ExpenseReportDateEnd=Date end -ExpenseReportLimitAmount=Max amount -ExpenseReportRestrictive=Exceeding forbidden -AllExpenseReport=All type of expense report -OnExpense=Expense line -ExpenseReportRuleSave=Expense report rule saved -ExpenseReportRuleErrorOnSave=Error: %s -RangeNum=Range %d -ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) -byEX_DAY=by day (limitation to %s) -byEX_MON=by month (limitation to %s) -byEX_YEA=by year (limitation to %s) -byEX_EXP=by line (limitation to %s) -ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) +ExpenseReportsToApprove=Expense reports to approve +ExpenseReportsToPay=Expense reports to pay +ExpensesArea=Expense reports area +FeesKilometersOrAmout=Amount or kilometers +LastExpenseReports=Latest %s expense reports +ListOfFees=List of fees +ListOfTrips=List of expense reports +ListToApprove=Waiting for approval +ListTripsAndExpenses=List of expense reports +MOTIF_CANCEL=Reason +MOTIF_REFUS=Reason +ModePaiement=Payment mode +NewTrip=New expense report nolimitbyEX_DAY=by day (no limitation) +nolimitbyEX_EXP=by line (no limitation) nolimitbyEX_MON=by month (no limitation) nolimitbyEX_YEA=by year (no limitation) -nolimitbyEX_EXP=by line (no limitation) -CarCategory=Vehicle category -ExpenseRangeOffset=Offset amount: %s +NoTripsToExportCSV=No expense report to export for this period. +NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. +OnExpense=Expense line +PDFStandardExpenseReports=Standard template to generate a PDF document for expense report +PaidTrip=Pay an expense report +REFUSEUR=Denied by RangeIk=Mileage range -AttachTheNewLineToTheDocument=Attach the line to an uploaded document +RangeNum=Range %d +SaveTrip=Validate expense report +ShowExpenseReport=Show expense report +ShowTrip=Show expense report +TripCard=Expense report card +TripId=Id expense report +TripNDF=Informations expense report +TripSociete=Information company +Trips=Expense reports +TripsAndExpenses=Expenses reports +TripsAndExpensesStatistics=Expense reports statistics +TypeFees=Types of fees +UploadANewFileNow=Upload a new document now +VALIDATOR=User responsible for approval +VALIDOR=Approved by +ValidateAndSubmit=Validate and submit for approval +ValidatedWaitingApproval=Validated (waiting for approval) +ValideTrip=Approve expense report ## Dictionary EX_BRE=Breakfast diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index c6b5c2fe106..3f2c7f5f53a 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -47,7 +47,7 @@ RemoveFromGroup=Remove from group PasswordChangedAndSentTo=Password changed and sent to %s. PasswordChangeRequest=Request to change password for %s PasswordChangeRequestSent=Request to change password for %s sent to %s. -IfLoginExistPasswordRequestSent=If this login is a valid account, an email to reset password has been sent. +IfLoginExistPasswordRequestSent=If this login is a valid account (with a valid email), an email to reset password has been sent. IfEmailExistPasswordRequestSent=If this email is a valid account, an email to reset password has been sent. ConfirmPasswordReset=Confirm password reset MenuUsersAndGroups=Users & Groups diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 379eadef08f..874cdc76f28 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -140,7 +140,7 @@ PagesRegenerated=%s page(s)/container(s) regenerated RegenerateWebsiteContent=Regenerate web site cache files AllowedInFrames=Allowed in Frames DefineListOfAltLanguagesInWebsiteProperties=Define list of all available languages into web site properties. -GenerateSitemaps=Generate website sitemap file +GenerateSitemaps=Generate website sitemap.xml file ConfirmGenerateSitemaps=If you confirm, you will erase the existing sitemap file... ConfirmSitemapsCreation=Confirm sitemap generation SitemapGenerated=Sitemap file %s generated @@ -150,4 +150,6 @@ ErrorFaviconSize=Favicon must be sized 16x16, 32x32 or 64x64 FaviconTooltip=Upload an image which needs to be a png (16x16, 32x32 or 64x64) NextContainer=Next page/container PreviousContainer=Previous page/container -WebsiteMustBeDisabled=The website must have the status "Disabled" +WebsiteMustBeDisabled=The website must have the status "%s" +WebpageMustBeDisabled=The web page must have the status "%s" +SetWebsiteOnlineBefore=When website is offline, all pages are offline. Change status of website first. diff --git a/htdocs/langs/en_US/workflow.lang b/htdocs/langs/en_US/workflow.lang index 803a31c9646..a2b6b4c1f95 100644 --- a/htdocs/langs/en_US/workflow.lang +++ b/htdocs/langs/en_US/workflow.lang @@ -22,7 +22,7 @@ descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked sourc descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Classify linked source purchase order as received when a reception is validated (and if the quantity received by all receptions is the same as in the purchase order to update) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Classify linked source purchase order as received when a reception is closed (and if the quantity received by all rceptions is the same as in the purchase order to update) # Autoclassify purchase invoice -descWORKFLOW_BILL_ON_RECEPTION=Classify receptions to "billed" when a linked supplier order is validated +descWORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE=Classify receptions to "billed" when a linked purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) # Automatically link ticket to contract descWORKFLOW_TICKET_LINK_CONTRACT=When creating a ticket, link available contracts of matching thirdparty descWORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS=When linking contracts, search among those of parents companies @@ -31,6 +31,6 @@ descWORKFLOW_TICKET_CLOSE_INTERVENTION=Close all interventions linked to the tic AutomaticCreation=Automatic creation AutomaticClassification=Automatic classification # Autoclassify shipment -descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when customer invoice is validated +descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) AutomaticClosing=Automatic closing AutomaticLinking=Automatic linking diff --git a/htdocs/langs/en_ZA/members.lang b/htdocs/langs/en_ZA/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/en_ZA/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/en_ZA/projects.lang b/htdocs/langs/en_ZA/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/en_ZA/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_AR/admin.lang b/htdocs/langs/es_AR/admin.lang index 76c93629d16..beedcee5010 100644 --- a/htdocs/langs/es_AR/admin.lang +++ b/htdocs/langs/es_AR/admin.lang @@ -252,7 +252,6 @@ UpdateServerOffline=Actualizar servidor fuera de línea WithCounter=Administrar un contador AddCRIfTooLong=No hay ajuste de texto automático. El texto que es demasiado largo no será mostrado en el documento. Por favor agregar saltos de línea en el área de texto si es necesario. String=Cuerda -InitEmptyBarCode=Init value for the %s empty barcodes Module30Name=Facturas Module40Desc=Gestión de proveedores y compras (órdenes de compra y facturas de proveedores) Module52Name=Inventarios(Stocks) diff --git a/htdocs/langs/es_AR/commercial.lang b/htdocs/langs/es_AR/commercial.lang index d85913580a1..b8b70ff7a01 100644 --- a/htdocs/langs/es_AR/commercial.lang +++ b/htdocs/langs/es_AR/commercial.lang @@ -60,6 +60,5 @@ Stats=Estadísticas de ventas StatusProsp=Estado del cliente potencial DraftPropals=Presupuestos en borrador ToOfferALinkForOnlineSignature=Vínculo para firma digital -ThisScreenAllowsYouToSignDocFrom=Esta pantalla te permitirá aceptar, firmar o rechazar un presupuesto SignatureProposalRef=Firma del presupuesto %s FeatureOnlineSignDisabled=La funcionalidad para la firma digital está deshabilitada o el documento fue generado antes de habilitar la función diff --git a/htdocs/langs/es_AR/mailmanspip.lang b/htdocs/langs/es_AR/mailmanspip.lang index 700cfd3bb70..840c7e7dd58 100644 --- a/htdocs/langs/es_AR/mailmanspip.lang +++ b/htdocs/langs/es_AR/mailmanspip.lang @@ -7,7 +7,6 @@ MailmanCreationSuccess=La prueba de suscripción se ha ejecutado correctamente MailmanDeletionSuccess=La prueba de desuscripción se ha ejecutado correctamente SynchroMailManEnabled=Será realizada una actualización en la lista de envío de correos SynchroSpipEnabled=Será realizada una actualización en el módulo SPIP -DescADHERENT_MAILMAN_ADMINPW=Contraseña de administrador de Envío de Correos DescADHERENT_MAILMAN_URL=URL para suscripciones a la lista de envío de correos DescADHERENT_MAILMAN_UNSUB_URL=URL para desuscripciones a la lista de envío de correos DescADHERENT_MAILMAN_LISTS=Lista(s) para inscripción automática de nuevos miembros (separados por una coma) diff --git a/htdocs/langs/es_BO/members.lang b/htdocs/langs/es_BO/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_BO/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_BO/projects.lang b/htdocs/langs/es_BO/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_BO/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_CL/accountancy.lang b/htdocs/langs/es_CL/accountancy.lang index 2bff8d60933..9a12ca9824b 100644 --- a/htdocs/langs/es_CL/accountancy.lang +++ b/htdocs/langs/es_CL/accountancy.lang @@ -217,4 +217,3 @@ ToBind=Líneas para enlazar UseMenuToSetBindindManualy=Líneas aún no enlazadas, use el menú %s para hacer el enlace manualmente WarningReportNotReliable=Advertencia, este informe no se basa en el Libro mayor, por lo que no contiene la transacción modificada manualmente en el Libro mayor. Si su publicación está actualizada, la vista de contabilidad es más precisa. ExpenseReportJournal=Diario del informe de gastos -InventoryJournal=Revista de inventario diff --git a/htdocs/langs/es_CL/admin.lang b/htdocs/langs/es_CL/admin.lang index aa792dc23db..7e7c5a27736 100644 --- a/htdocs/langs/es_CL/admin.lang +++ b/htdocs/langs/es_CL/admin.lang @@ -340,7 +340,6 @@ DefaultLink=Enlace predeterminado ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la configuración específica del usuario (cada usuario puede establecer su propia URL de clicktodial) BarcodeInitForProductsOrServices=Inicialización o reinicio masivo del código de barras para productos o servicios CurrentlyNWithoutBarCode=Actualmente, tiene %s registros en %s %s sin código de barras definido. -InitEmptyBarCode=Init value for the %s empty barcodes EraseAllCurrentBarCode=Borrar todos los valores actuales del código de barras ConfirmEraseAllCurrentBarCode=¿Seguro que quieres borrar todos los valores actuales del código de barras? AllBarcodeReset=Todos los valores del código de barras han sido eliminados @@ -574,7 +573,6 @@ Permission281=Leer contactos Permission291=Tarifas de lectura Permission292=Establecer permisos sobre las tarifas Permission293=Modificar las tarifas del cliente. -Permission300=Leer codigos de barras Permission301=Crear / modificar códigos de barras Permission311=Leer Servicios Permission312=Asignar servicio / suscripción al contrato diff --git a/htdocs/langs/es_CL/commercial.lang b/htdocs/langs/es_CL/commercial.lang index 33c14696715..2308c317fae 100644 --- a/htdocs/langs/es_CL/commercial.lang +++ b/htdocs/langs/es_CL/commercial.lang @@ -57,6 +57,4 @@ ActionAC_AUTO=Eventos insertados automáticamente Stats=Estadísticas de ventas StatusProsp=Estado de la perspectiva DraftPropals=Cotizaciones borrador -WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar propuestas comerciales de %s -ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, un presupuesto/propuesta comercial SignatureProposalRef=Firma de cotización / propuesta comercial %s diff --git a/htdocs/langs/es_CL/errors.lang b/htdocs/langs/es_CL/errors.lang index 8c45fd1469b..93bfc615ce6 100644 --- a/htdocs/langs/es_CL/errors.lang +++ b/htdocs/langs/es_CL/errors.lang @@ -69,7 +69,6 @@ ErrorFieldValueNotIn=El campo %s : ' %s ' no es un valor e ErrorFieldRefNotIn=Campo %s : ' %s ' no es una referencia %s existente ErrorsOnXLines=Se encontraron errores %s ErrorFileIsInfectedWithAVirus=El programa antivirus no pudo validar el archivo (el archivo podría estar infectado por un virus) -ErrorSpecialCharNotAllowedForField=Los caracteres especiales no están permitidos para el campo "%s" ErrorNumRefModel=Existe una referencia en la base de datos (%s) y no es compatible con esta regla de numeración. Elimine la referencia de registro o renombrada para activar este módulo. ErrorQtyTooLowForThisSupplier=Cantidad demasiado baja para este proveedor o ningún precio definido en este producto para este proveedor ErrorOrdersNotCreatedQtyTooLow=Algunos pedidos no se han creado debido a cantidades demasiado bajas diff --git a/htdocs/langs/es_CL/mailmanspip.lang b/htdocs/langs/es_CL/mailmanspip.lang index 34a39aa742a..fdbf3c00d12 100644 --- a/htdocs/langs/es_CL/mailmanspip.lang +++ b/htdocs/langs/es_CL/mailmanspip.lang @@ -6,7 +6,6 @@ MailmanCreationSuccess=La prueba de suscripción se ejecutó con éxito MailmanDeletionSuccess=La prueba de cancelación se ejecutó con éxito SynchroMailManEnabled=Se realizará una actualización de Mailman SynchroSpipEnabled=Se realizará una actualización de Spip -DescADHERENT_MAILMAN_ADMINPW=Contraseña de administrador de Mailman DescADHERENT_MAILMAN_URL=URL para las suscripciones de Mailman DescADHERENT_MAILMAN_UNSUB_URL=URL para la cancelación de suscripciones de Mailman DescADHERENT_MAILMAN_LISTS=Lista (s) para la inscripción automática de nuevos miembros (separados por una coma) diff --git a/htdocs/langs/es_CL/members.lang b/htdocs/langs/es_CL/members.lang index a226d236563..d8ea715ef45 100644 --- a/htdocs/langs/es_CL/members.lang +++ b/htdocs/langs/es_CL/members.lang @@ -53,7 +53,6 @@ YourMembershipWasValidated=Su membresía fue validada YourMembershipWasCanceled=Su membresía fue cancelada CardContent=Contenido de su tarjeta de miembro ThisIsContentOfYourMembershipRequestWasReceived=Queremos informarle que se recibió su solicitud de membresía.

    -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    ThisIsContentOfSubscriptionReminderEmail=Queremos informarle que su suscripción está a punto de caducar o ya ha caducado (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). Esperamos que lo renueven.

    ThisIsContentOfYourCard=Este es un resumen de la información que tenemos sobre usted. Por favor, póngase en contacto con nosotros si algo es incorrecto.

    DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Asunto de la notificación por correo electrónico recibida en caso de autoinscripción de un invitado @@ -85,7 +84,6 @@ MenuMembersStats=Estadística NewMemberbyWeb=Nuevo miembro agregado. Esperando aprobacion NewMemberForm=Nueva forma de miembro TurnoverOrBudget=Volumen de ventas (empresa) o Cotización (asociación o colectivo) -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type MEMBER_NEWFORM_PAYONLINE=Salte en la página integrada de pago en línea MembersStatisticsByProperties=Estadísticas de miembros por naturaleza NoEmailSentToMember=No se envió ningún correo electrónico al miembro diff --git a/htdocs/langs/es_CL/projects.lang b/htdocs/langs/es_CL/projects.lang index aaae5a794c4..7afb36f5a70 100644 --- a/htdocs/langs/es_CL/projects.lang +++ b/htdocs/langs/es_CL/projects.lang @@ -156,6 +156,5 @@ ModuleSalaryToDefineHourlyRateMustBeEnabled=El módulo 'Salarios' debe e NewTaskRefSuggested=Referencia de tarea ya utilizada, se requiere una nueva referencia de tarea TimeSpentForIntervention=Tiempo dedicado TimeSpentForInvoice=Tiempo dedicado -ServiceToUseOnLines=Service to use on lines by default InvoiceGeneratedFromTimeSpent=La factura %s se ha generado desde el tiempo invertido en el proyecto UsageBillTimeShort=Uso: Bill time diff --git a/htdocs/langs/es_CL/ticket.lang b/htdocs/langs/es_CL/ticket.lang index c1f9984feda..5a4f2f39b72 100644 --- a/htdocs/langs/es_CL/ticket.lang +++ b/htdocs/langs/es_CL/ticket.lang @@ -73,8 +73,6 @@ TicketDurationAutoInfos=Duración calculada automáticamente a partir de interve SendMessageByEmail=Enviar mensaje por correo electrónico ErrorMailRecipientIsEmptyForSendTicketMessage=El destinatario está vacío. Sin enviar correo electrónico TicketMessageMailIntroHelp=Este texto se agrega solo al comienzo del correo electrónico y no se guardará. -TicketMessageMailSignatureHelp=Este texto se agrega solo al final del correo electrónico y no se guardará. -TicketMessageMailSignatureLabelAdmin=Firma del correo electrónico de respuesta TicketMessageHelp=Solo este texto se guardará en la lista de mensajes en la tarjeta de Tickets. TicketTimeToRead=Tiempo transcurrido antes de leer TicketContacts=Ticket de contactos diff --git a/htdocs/langs/es_CO/accountancy.lang b/htdocs/langs/es_CO/accountancy.lang index 8e9afa1c3f8..43dd8df9360 100644 --- a/htdocs/langs/es_CO/accountancy.lang +++ b/htdocs/langs/es_CO/accountancy.lang @@ -33,7 +33,6 @@ GroupIsEmptyCheckSetup=El grupo está vacío, verifique la configuración del gr DetailByAccount=Mostrar detalle por cuenta AccountWithNonZeroValues=Cuentas con valores distintos de cero. CountriesInEECExceptMe=Países en EEC excepto %s -ExportAccountingSourceDocHelp=With this tool, you can search and export the source events that are used to generate your accountancy.
    The exported ZIP file will contain the lists of requested items in CSV, as well as their attached files in their original format (PDF, ODT, DOCX...). MainAccountForCustomersNotDefined=Cuenta contable principal para clientes no definidos en la configuración. MainAccountForSuppliersNotDefined=Cuenta de contabilidad principal para proveedores no definidos en la configuración. MainAccountForUsersNotDefined=Cuenta de contabilidad principal para usuarios no definidos en la configuración. @@ -215,7 +214,6 @@ AccountingAccountForSalesTaxAreDefinedInto=Nota: la cuenta contable del impuesto NumberOfAccountancyMovements=Numero de movimientos ACCOUNTING_DISABLE_BINDING_ON_SALES=Deshabilitar la vinculación y la transferencia en la contabilidad de las ventas (las facturas de los clientes no se tendrán en cuenta en la contabilidad) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Deshabilite la vinculación y transferencia en contabilidad en compras (las facturas de proveedores no se tendrán en cuenta en la contabilidad) -NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "%s" feature, modification and deletion of the lines will DEFINITELY not be possible) ExportDraftJournal=Exportar borrador de revista Selectmodelcsv=Selecciona un modelo de exportación. Modelcsv_CEGID=Exportación para CEGID Expert Comptabilité @@ -277,4 +275,3 @@ FECFormatCredit=Crédito (crédito) DateExport=Exportación de fecha WarningReportNotReliable=Advertencia, este informe no se basa en el Libro mayor, por lo que no contiene la transacción modificada manualmente en el Libro mayor. Si su publicación está actualizada, la vista de contabilidad es más precisa. ExpenseReportJournal=Diario de informe de gastos -InventoryJournal=Diario de inventario diff --git a/htdocs/langs/es_CO/admin.lang b/htdocs/langs/es_CO/admin.lang index d6fec62304b..af4d57d1984 100644 --- a/htdocs/langs/es_CO/admin.lang +++ b/htdocs/langs/es_CO/admin.lang @@ -362,7 +362,6 @@ ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la BarcodeInitForThirdparties=init para código de barras masivo para terceros BarcodeInitForProductsOrServices=Código de barras masivo de inicio o reinicio para productos o servicios. CurrentlyNWithoutBarCode=Actualmente, tienes el registro %s en %s %s sin un código de barras definido. -InitEmptyBarCode=Init value for the %s empty barcodes EraseAllCurrentBarCode=Borrar todos los valores de código de barras actuales ConfirmEraseAllCurrentBarCode=¿Está seguro de que desea borrar todos los valores de código de barras actuales? AllBarcodeReset=Todos los valores de código de barras han sido eliminados diff --git a/htdocs/langs/es_CO/commercial.lang b/htdocs/langs/es_CO/commercial.lang index 4ecf1bf3338..a682aab5fd4 100644 --- a/htdocs/langs/es_CO/commercial.lang +++ b/htdocs/langs/es_CO/commercial.lang @@ -53,8 +53,5 @@ Stats=Estadísticas de ventas StatusProsp=Estado cliente potencial DraftPropals=Borrador de propuestas comerciales ToOfferALinkForOnlineSignature=Enlace para firma en línea -WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar propuestas comerciales de %s -ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, una cotización / propuesta comercial -ThisIsInformationOnDocumentToSign=Esta es información en el documento para aceptar o rechazar SignatureProposalRef=Firma de cotización / propuesta comercial %s FeatureOnlineSignDisabled=Característica para la firma en línea deshabilitada o documento generado antes de que se habilitara la característica diff --git a/htdocs/langs/es_CO/errors.lang b/htdocs/langs/es_CO/errors.lang index 2e958b678d9..23b931b6d88 100644 --- a/htdocs/langs/es_CO/errors.lang +++ b/htdocs/langs/es_CO/errors.lang @@ -73,7 +73,6 @@ ErrorWrongValueForField=El campo %s: '%s' no coincide con la regla ErrorFieldValueNotIn=El campo %s : ' %s ' no es un valor que se encuentra en el campo %s de %s ErrorFieldRefNotIn=El campo%s: '%s' no es una referia existente %s ErrorFileIsInfectedWithAVirus=El programa antivirus no pudo validar el archivo (el archivo podría estar infectado por un virus) -ErrorSpecialCharNotAllowedForField=No se permiten caracteres especiales para el campo "%s" ErrorNumRefModel=Existe una referencia en la base de datos (%s) y no es compatible con esta regla de numeración. Elimine el registro o la referencia renombrada para activar este módulo. ErrorQtyTooLowForThisSupplier=Cantidad demasiado baja para este proveedor o ningún precio definido en este producto para este proveedor ErrorOrdersNotCreatedQtyTooLow=Algunos pedidos no se han creado debido a cantidades demasiado bajas. diff --git a/htdocs/langs/es_CO/mailmanspip.lang b/htdocs/langs/es_CO/mailmanspip.lang index 98090117641..eaf04c1a531 100644 --- a/htdocs/langs/es_CO/mailmanspip.lang +++ b/htdocs/langs/es_CO/mailmanspip.lang @@ -6,7 +6,6 @@ MailmanCreationSuccess=La prueba de suscripción se ejecutó con éxito MailmanDeletionSuccess=La prueba de cancelación de suscripción se ejecutó con éxito SynchroMailManEnabled=Se realizará una actualización de Mailman SynchroSpipEnabled=Se realizará una actualización de Spip -DescADHERENT_MAILMAN_ADMINPW=Contraseña de administrador de Mailman DescADHERENT_MAILMAN_URL=URL de las suscripciones de Mailman DescADHERENT_MAILMAN_UNSUB_URL=URL para darse de baja de Mailman DescADHERENT_MAILMAN_LISTS=Lista(s) para la inscripción automática de nuevos miembros (separados por coma) diff --git a/htdocs/langs/es_CO/projects.lang b/htdocs/langs/es_CO/projects.lang index d7d0f29d616..2535094af83 100644 --- a/htdocs/langs/es_CO/projects.lang +++ b/htdocs/langs/es_CO/projects.lang @@ -186,7 +186,6 @@ NewTaskRefSuggested=La referencia de tarea ya se usó, se requiere una nueva ref TimeSpentInvoiced=Tiempo invertido facturado TimeSpentForIntervention=Tiempo usado TimeSpentForInvoice=Tiempo usado -ServiceToUseOnLines=Service to use on lines by default InvoiceGeneratedFromTimeSpent=La factura %s se ha generado a partir del tiempo dedicado al proyecto InterventionGeneratedFromTimeSpent=La intervención %s se ha generado a partir del tiempo dedicado al proyecto ProjectBillTimeDescription=Verifique si ingresa la hoja de tiempo en las tareas del proyecto Y planea generar factura(s) a partir de la hoja de tiempo para facturar al cliente del proyecto (no verifique si planea crear una factura que no se base en las hojas de tiempo ingresadas). Nota: Para generar factura, vaya a la pestaña 'Tiempo invertido' del proyecto y seleccione las líneas para incluir. diff --git a/htdocs/langs/es_CO/ticket.lang b/htdocs/langs/es_CO/ticket.lang index 02301c15de2..3f6313f135e 100644 --- a/htdocs/langs/es_CO/ticket.lang +++ b/htdocs/langs/es_CO/ticket.lang @@ -93,8 +93,6 @@ SendMessageByEmail=Enviar mensaje por correo electrónico ErrorMailRecipientIsEmptyForSendTicketMessage=El destinatario está vacío. No enviar correo electrónico TicketGoIntoContactTab=Vaya a la pestaña "Contactos" para seleccionarlos. TicketMessageMailIntroHelp=Este texto se agrega solo al comienzo del correo electrónico y no se guardará. -TicketMessageMailSignatureHelp=Este texto se agrega solo al final del correo electrónico y no se guardará. -TicketMessageMailSignatureLabelAdmin=Firma del correo electrónico de respuesta TicketMessageHelp=Solo este texto se guardará en la lista de mensajes de la tarjeta del ticket. TicketTimeToRead=Tiempo transcurrido antes de leer TicketContacts=Ticket de contactos diff --git a/htdocs/langs/es_DO/members.lang b/htdocs/langs/es_DO/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_DO/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_DO/projects.lang b/htdocs/langs/es_DO/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_DO/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_EC/accountancy.lang b/htdocs/langs/es_EC/accountancy.lang index 56a5c3e928d..b24e09e5bb2 100644 --- a/htdocs/langs/es_EC/accountancy.lang +++ b/htdocs/langs/es_EC/accountancy.lang @@ -229,4 +229,3 @@ ToBind=Líneas para atar UseMenuToSetBindindManualy=Líneas aún no enlazadas, use el menú %s para hacer el enlace manualmente. WarningReportNotReliable=Advertencia, este informe no se basa en el Libro mayor, por lo que no contiene la transacción modificada manualmente en el Libro mayor. Si su publicación está actualizada, la vista de contabilidad es más precisa. ExpenseReportJournal=Diario del informe de gastos -InventoryJournal=Diario de inventario diff --git a/htdocs/langs/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang index 96820c4587e..6286debaffd 100644 --- a/htdocs/langs/es_EC/admin.lang +++ b/htdocs/langs/es_EC/admin.lang @@ -335,7 +335,6 @@ ValueOverwrittenByUserSetup=Advertencia: este valor puede ser sobrescrito por la BarcodeInitForThirdparties=Inicio masivo de código de barras para terceros. BarcodeInitForProductsOrServices=Inicio de código de barras masivo o restablecimiento de productos o servicios CurrentlyNWithoutBarCode=Actualmente, tiene %s registrado en %s %s sin código de barras definido. -InitEmptyBarCode=Init value for the %s empty barcodes EraseAllCurrentBarCode=Borrar todos los valores de códigos de barras actuales ConfirmEraseAllCurrentBarCode=¿Está seguro de que desea borrar todos los valores de códigos de barras actuales? AllBarcodeReset=Todos los valores de código de barras se han eliminado @@ -586,7 +585,6 @@ Permission282=Crear / modificar contactos Permission291=Leer tarifas Permission292=Establecer permisos en las tarifas Permission293=Modificar las tarifas del cliente. -Permission300=Leer codigos de barras Permission301=Crear / modificar códigos de barras Permission311=Leer servicios Permission312=Asignar servicio / suscripción al contrato. diff --git a/htdocs/langs/es_EC/commercial.lang b/htdocs/langs/es_EC/commercial.lang index 85789b47b39..ee890081cfd 100644 --- a/htdocs/langs/es_EC/commercial.lang +++ b/htdocs/langs/es_EC/commercial.lang @@ -60,6 +60,4 @@ ActionAC_OTH_AUTOShort=Automático Stats=Estadísticas de ventas StatusProsp=Estado del prospecto DraftPropals=Proyecto de propuestas comerciales -WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar propuestas comerciales de %s -ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, una propuesta de cotización/comercial SignatureProposalRef=Firma de cotización/propuesta comercial %s. diff --git a/htdocs/langs/es_EC/errors.lang b/htdocs/langs/es_EC/errors.lang index 87dd8507320..ae701afac8d 100644 --- a/htdocs/langs/es_EC/errors.lang +++ b/htdocs/langs/es_EC/errors.lang @@ -64,7 +64,6 @@ ErrorWrongValueForField=El campo %s: '%s' no coincide con la expre ErrorFieldValueNotIn=El campo %s: '%s' no es un valor que se encuentra en el campo %s de %s ErrorFieldRefNotIn=Campo %s: '%s' no es una %s referencia existente ErrorFileIsInfectedWithAVirus=El programa antivirus no pudo validar el archivo (el archivo podría estar infectado por un virus) -ErrorSpecialCharNotAllowedForField=No se permiten caracteres especiales para el campo "%s" ErrorNumRefModel=Existe una referencia en la base de datos (%s) y no es compatible con esta regla de numeración. Elimine la referencia de registro o renombrado para activar este módulo. ErrorQtyTooLowForThisSupplier=Cantidad demasiado baja para este proveedor o ningún precio definido en este producto para este proveedor ErrorOrdersNotCreatedQtyTooLow=Algunos pedidos no se han creado debido a cantidades demasiado bajas diff --git a/htdocs/langs/es_EC/mailmanspip.lang b/htdocs/langs/es_EC/mailmanspip.lang index 6b8fb02ecff..dc6431a176e 100644 --- a/htdocs/langs/es_EC/mailmanspip.lang +++ b/htdocs/langs/es_EC/mailmanspip.lang @@ -6,7 +6,6 @@ MailmanCreationSuccess=La prueba de suscripción se ejecutó correctamente MailmanDeletionSuccess=La prueba de cancelación de la suscripción se ejecutó correctamente SynchroMailManEnabled=Se realizará una actualización Mailman SynchroSpipEnabled=Se realizará una actualización de Spip -DescADHERENT_MAILMAN_ADMINPW=Contraseña del administrador de Mailman DescADHERENT_MAILMAN_URL=URL para las suscripciones de Mailman DescADHERENT_MAILMAN_UNSUB_URL=URL para cancelación de suscripciones de Mailman DescADHERENT_MAILMAN_LISTS=Lista(s) para la inscripción automática de nuevos miembros (separados por una coma) diff --git a/htdocs/langs/es_EC/projects.lang b/htdocs/langs/es_EC/projects.lang index 7ac28478c77..c87a5444272 100644 --- a/htdocs/langs/es_EC/projects.lang +++ b/htdocs/langs/es_EC/projects.lang @@ -165,7 +165,6 @@ NewTaskRefSuggested=Referencia de tarea ya utilizada, se requiere una nueva refe TimeSpentInvoiced=Tiempo gastado facturado TimeSpentForIntervention=Tiempo usado TimeSpentForInvoice=Tiempo usado -ServiceToUseOnLines=Service to use on lines by default InvoiceGeneratedFromTimeSpent=La factura %s se ha generado a partir del tiempo dedicado al proyecto ProjectBillTimeDescription=Verifique si ingresa la hoja de tiempo en las tareas del proyecto Y planea generar factura(s) de la hoja de tiempo para facturar al cliente del proyecto (no verifique si planea crear una factura que no se base en las hojas de tiempo ingresadas). Nota: Para generar la factura, vaya a la pestaña 'Tiempo empleado' del proyecto y seleccione las líneas para incluir. UsageBillTimeShort=Uso: Tiempo a facturar diff --git a/htdocs/langs/es_EC/ticket.lang b/htdocs/langs/es_EC/ticket.lang index 657aba67728..29b388752e1 100644 --- a/htdocs/langs/es_EC/ticket.lang +++ b/htdocs/langs/es_EC/ticket.lang @@ -65,9 +65,6 @@ TicketDurationAutoInfos=Duración calculada automáticamente a partir de interve SendMessageByEmail=Enviar mensaje por correo electrónico ErrorMailRecipientIsEmptyForSendTicketMessage=El destinatario está vacío. No se envio el correo electrónico TicketMessageMailIntroHelp=Este texto se agrega solo al comienzo del correo electrónico y no se guardará. -TicketMessageMailSignatureHelp=Este texto se agrega solo al final del correo electrónico y no se guardará. -TicketMessageMailSignatureLabelAdmin=Firma del correo electrónico de respuesta -TicketMessageMailSignatureHelpAdmin=Este texto se inserta después del mensaje de respuesta. TicketMessageHelp=Solo este texto se guardará en la lista de mensajes en la tarjeta de tickets. TicketTimeToRead=Tiempo transcurrido antes de leer TicketContacts=Boleto de contactos diff --git a/htdocs/langs/es_ES/commercial.lang b/htdocs/langs/es_ES/commercial.lang index 5fe49a5b4f4..8292b6391d6 100644 --- a/htdocs/langs/es_ES/commercial.lang +++ b/htdocs/langs/es_ES/commercial.lang @@ -68,13 +68,22 @@ ActionAC_OTH_AUTO=Eventos creados automáticamente ActionAC_MANUAL=Eventos creados manualmente ActionAC_AUTO=Eventos creados automáticamente ActionAC_OTH_AUTOShort=Auto +ActionAC_EVENTORGANIZATION=Eventos de organización Stats=Estadísticas de venta StatusProsp=Estado prospección DraftPropals=Presupuestos borrador NoLimit=Sin límite ToOfferALinkForOnlineSignature=Enlace para la firma en línea -WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar presupuestos de %s -ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, una presupuesto/propuesta comercial -ThisIsInformationOnDocumentToSign=Esta es la información del documento para aceptar o rechazar +WelcomeOnOnlineSignaturePageProposal=Bienvenido a la página para firmar presupuestos de %s +WelcomeOnOnlineSignaturePageContract=Bienvenido a la página para firmar contratos de %s +WelcomeOnOnlineSignaturePageFichinter=Bienvenido a la página para firmar intervenciones de %s +ThisScreenAllowsYouToSignDocFromProposal=Esta página permite aceptar y firmar o rechazar un presupuesto o propuesta comercial. +ThisScreenAllowsYouToSignDocFromContract=Esta página permite aceptar y firmar el contrato PDF online. +ThisScreenAllowsYouToSignDocFromFichinter=Esta página permite aceptar y firmar una intervención en formato PDF online. +ThisIsInformationOnDocumentToSignProposal=Esta es la información del presupuesto para aceptar o rechazar +ThisIsInformationOnDocumentToSignContract=Esta es la información del contrato a firmar +ThisIsInformationOnDocumentToSignFichinter=Esta es la información de la intervención a firmar SignatureProposalRef=Firma del presupuesto/propuesta comercial %s +SignatureContractRef=Firma del contrato %s +SignatureFichinterRef=Firma de la intervención %s FeatureOnlineSignDisabled=Característica para la firma en línea inhabilitada o documento generado antes de que se habilitara la característica diff --git a/htdocs/langs/es_ES/interventions.lang b/htdocs/langs/es_ES/interventions.lang index 83471928031..b335c533713 100644 --- a/htdocs/langs/es_ES/interventions.lang +++ b/htdocs/langs/es_ES/interventions.lang @@ -66,3 +66,8 @@ RepeatableIntervention=Plantilla de intervención ToCreateAPredefinedIntervention=Para crear una intervención predefinida o recurrente, cree una intervención común y conviértala en plantilla de intervención ConfirmReopenIntervention=¿Está seguro de querer volver a abrir la intervención %s ? GenerateInter=Generar intervención +FichinterNoContractLinked=La intervención %s se ha creado sin un contacto vinculado. +ErrorFicheinterCompanyDoesNotExist=La compañía no existe, la intervención no se ha creado. +NextDateToIntervention=Fecha para la próxima generación de intervención +AllowOnlineSign=Permitir firma online +AllowExternalDownload=Permitir descarga externa \ No newline at end of file diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang index 2af1c00c5cf..00488783f8a 100644 --- a/htdocs/langs/es_ES/main.lang +++ b/htdocs/langs/es_ES/main.lang @@ -926,6 +926,7 @@ DirectDownloadInternalLink=Enlace de descarga privado PrivateDownloadLinkDesc=Debe iniciar sesión y necesita permisos para ver o descargar el archivo Download=Descargar DownloadDocument=Descargar el documento +DownloadSignedDocument=Descargar el documento firmado ActualizeCurrency=Actualizar el tipo de cambio Fiscalyear=Año fiscal ModuleBuilder=Módulo Builder diff --git a/htdocs/langs/es_ES/propal.lang b/htdocs/langs/es_ES/propal.lang index 2f31aab4e89..159daf31178 100644 --- a/htdocs/langs/es_ES/propal.lang +++ b/htdocs/langs/es_ES/propal.lang @@ -103,11 +103,15 @@ IdProposal=ID de Presupuesto IdProduct=ID del Producto LineBuyPriceHT=Precio de compra Importe neto de impuestos por línea SignPropal=Aceptar presupuesto +SignContract=Firmar contrato +SignFichinter=Firmar intervención RefusePropal=Rechazar presupuesto Sign=Firma NoSign=Establecer no firmado PropalAlreadySigned=Presupuesto ya aceptado PropalAlreadyRefused=Presupuesto ya rechazado PropalSigned=Presupuesto aceptado +ContractSigned=Contrato firmado +FichinterSigned=Intervención firmada PropalRefused=Presupuesto rechazado ConfirmRefusePropal=¿Está seguro de querer rechazar este presupuesto? diff --git a/htdocs/langs/es_GT/members.lang b/htdocs/langs/es_GT/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_GT/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_GT/projects.lang b/htdocs/langs/es_GT/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_GT/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_HN/members.lang b/htdocs/langs/es_HN/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_HN/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_HN/projects.lang b/htdocs/langs/es_HN/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_HN/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_MX/accountancy.lang b/htdocs/langs/es_MX/accountancy.lang index 1ae2423f16f..ef79a5fabff 100644 --- a/htdocs/langs/es_MX/accountancy.lang +++ b/htdocs/langs/es_MX/accountancy.lang @@ -125,4 +125,3 @@ ExportDraftJournal=Exportar borrador de diario SomeMandatoryStepsOfSetupWereNotDone=Algunos pasos obligatorios de la instalación no se realizaron, favor de completar ExportNotSupported=El formato de exportación configurado no se admite en esta página NoJournalDefined=Ningún diario definido -InventoryJournal=Diario de inventario diff --git a/htdocs/langs/es_MX/admin.lang b/htdocs/langs/es_MX/admin.lang index 8c57272b7ea..4097de49b9f 100644 --- a/htdocs/langs/es_MX/admin.lang +++ b/htdocs/langs/es_MX/admin.lang @@ -238,7 +238,6 @@ ExtrafieldSelectList =Seleccionar de la tabla ComputedFormula=Campo calculado Computedpersistent=Almacenar campo calculado SetAsDefault=Establecer como predeterminado -InitEmptyBarCode=Init value for the %s empty barcodes ClickToShowDescription=Haga clic para mostrar la descripción DependsOn=Este módulo necesita los módulo(s) WarningSettingSortOrder=Advertencia, establecer un orden predeterminado puede resultar en un error técnico al pasar a la página de lista si "campo" es un campo desconocido. Si experimenta un error de este tipo, vuelva a esta página para eliminar el orden predeterminado y restaurar el comportamiento predeterminado. diff --git a/htdocs/langs/es_PA/members.lang b/htdocs/langs/es_PA/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_PA/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_PA/projects.lang b/htdocs/langs/es_PA/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_PA/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_PE/members.lang b/htdocs/langs/es_PE/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_PE/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_PY/members.lang b/htdocs/langs/es_PY/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_PY/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_PY/projects.lang b/htdocs/langs/es_PY/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_PY/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_US/members.lang b/htdocs/langs/es_US/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_US/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_US/projects.lang b/htdocs/langs/es_US/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_US/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_UY/members.lang b/htdocs/langs/es_UY/members.lang deleted file mode 100644 index 5f7a2ff4020..00000000000 --- a/htdocs/langs/es_UY/members.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - members -ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded. Please find your invoice here enclosed.

    -CanEditAmount=Visitor can choose/edit amount of its contribution regardless of the member type diff --git a/htdocs/langs/es_UY/projects.lang b/htdocs/langs/es_UY/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_UY/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang index 33ac1c8513d..5ac3d8e921b 100644 --- a/htdocs/langs/es_VE/admin.lang +++ b/htdocs/langs/es_VE/admin.lang @@ -5,7 +5,6 @@ ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto descone SetupArea=Parametrizaje NotConfigured=Módulo / Aplicación no configurada GenericMaskCodes3=Cualquier otro carácter en la máscara se quedará sin cambios.
    No se permiten espacios
    -InitEmptyBarCode=Init value for the %s empty barcodes Module1780Desc=Crear etiquetas/Categoría (Productos, clientes, proveedores, contactos y miembros) Permission254=Modificar la contraseña de otros usuarios Permission255=Eliminar o desactivar otros usuarios diff --git a/htdocs/langs/es_VE/projects.lang b/htdocs/langs/es_VE/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/es_VE/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index a04f84af674..d9c277fcdf6 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -72,7 +72,6 @@ ExtrafieldCheckBoxFromList=Les cases à cocher du tableau ExtrafieldLink=Lier à un objet LibraryToBuildPDF=Bibliothèque utilisée pour la génération de PDF CurrentlyNWithoutBarCode=Actuellement, vous avez %s enregistrements sur %s %s sans code à barres défini. -InitEmptyBarCode=Init value for the %s empty barcodes ConfirmEraseAllCurrentBarCode=Êtes-vous sûr de vouloir effacer toutes les valeurs actuelles du code-barres? EnableFileCache=Activer le cache de fichiers DisplayCompanyManagers=Afficher les noms des gestionnaires diff --git a/htdocs/langs/fr_CA/commercial.lang b/htdocs/langs/fr_CA/commercial.lang index fe52f49e25d..0f68fbd09db 100644 --- a/htdocs/langs/fr_CA/commercial.lang +++ b/htdocs/langs/fr_CA/commercial.lang @@ -9,5 +9,3 @@ SaleRepresentativesOfThirdParty=Représentants commerciaux de tiers LastDoneTasks=Dernières %s actions complétées LastActionsToDo=Le plus ancien %s actions non complétées ActionAC_OTH_AUTO=Événements insérés automatiquement -ThisScreenAllowsYouToSignDocFrom=Cet écran vous permet d'accepter et signer ou de refuser le devis ou la proposition commerciale -ThisIsInformationOnDocumentToSign=Ceci est une information sur le document à accepter ou à refuser diff --git a/htdocs/langs/fr_CA/errors.lang b/htdocs/langs/fr_CA/errors.lang index 86d639a66e5..2560a86fb1b 100644 --- a/htdocs/langs/fr_CA/errors.lang +++ b/htdocs/langs/fr_CA/errors.lang @@ -51,7 +51,6 @@ ErrorLDAPMakeManualTest=Un fichier .ldif a été généré dans le répertoire % ErrorModuleRequireJavascript=Javascript ne doit pas être désactivé pour que cette fonction fonctionne. Pour activer / désactiver Javascript, accédez au menu Accueil-> Configuration-> Affichage. ErrorPasswordsMustMatch=Les deux mots de passe dactylographiés doivent correspondre les uns aux autres ErrorFileIsInfectedWithAVirus=Le programme antivirus n'a pas pu valider le fichier (le fichier peut être infecté par un virus) -ErrorSpecialCharNotAllowedForField=Les caractères spéciaux ne sont pas autorisés pour le champ "%s" ErrorNumRefModel=Une référence existe dans la base de données (%s) et n'est pas compatible avec cette règle de numérotation. Supprimez l'enregistrement ou la renommée référence pour activer ce module. ErrorBadMaskBadRazMonth=Erreur, mauvaise valeur de réinitialisation ErrorCounterMustHaveMoreThan3Digits=Le compteur doit avoir plus de 3 chiffres diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index 83d10982ca2..53edef4c0a1 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -59,6 +59,7 @@ MainAccountForSuppliersNotDefined=Compte comptable général pour les fournisseu MainAccountForUsersNotDefined=Compte comptable général pour les utilisateurs non défini dans la configuration MainAccountForVatPaymentNotDefined=Compte comptable général pour les paiements de TVA non défini dans la configuration MainAccountForSubscriptionPaymentNotDefined=Le compte comptable général des paiements de cotisations n'est pas défini dans la configuration +UserAccountNotDefined=Compte comptable pour l'utilisateur non défini dans la configuration AccountancyArea=Espace comptabilité AccountancyAreaDescIntro=L'utilisation du module de comptabilité se fait en plusieurs étapes: @@ -185,7 +186,7 @@ ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Compte comptable pour enregistrer les ad ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT=Compte comptable par défaut pour les acomptes clients UseAuxiliaryAccountOnCustomerDeposit=Enregistrer le compte client comme compte individuel dans le grand livre auxiliaire pour les lignes d'acompte (si désactivé, le compte individuel pour les lignes d'acompte restera vide) ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT=Compte comptable par défaut pour enregistrer l'acompte fournisseur -UseAuxiliaryAccountOnSupplierDeposit=Store supplier account as individual account in subsidiary ledger for lines of down payments (if disabled, individual account for down payment lines will remain empty) +UseAuxiliaryAccountOnSupplierDeposit=Stocker le compte fournisseur comme compte individuel dans le grand livre auxiliaire pour les lignes d'acomptes (si désactivé, le compte individuel pour les lignes d'acompte restera vide) ACCOUNTING_PRODUCT_BUY_ACCOUNT=Compte comptable par défaut pour les produits achetés (utilisé si non défini dans la fiche produit) ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT=Compte comptable par défaut pour les produits achetés dans la CEE (utilisé si non défini dans la fiche produit) @@ -286,7 +287,7 @@ DescClosure=Consultez ici le nombre de mouvements par mois non encore validés & OverviewOfMovementsNotValidated=Aperçu des mouvements non validés et verrouillés AllMovementsWereRecordedAsValidated=Tous les mouvements ont été enregistrés comme validés et ont été verrouillés NotAllMovementsCouldBeRecordedAsValidated=Certains mouvements n'ont pas pu être enregistrés comme validés et n'ont pas été verrouillés -ValidateMovements=Valider et verrouiller l'enregistrement... +ValidateMovements=Valider et verrouiller les mouvements... DescValidateMovements=Toute modification ou suppression d'écriture, de lettrage et de suppression sera interdite. Toutes les entrées pour un exercice doivent être validées, sinon la fermeture ne sera pas possible ValidateHistory=Lier automatiquement @@ -401,7 +402,11 @@ Calculated=Calculé Formula=Formule ## Reconcile +LetteringAuto=Rapprocher automatiquement +LetteringManual=Rapprocher manuel Unlettering=Annuler le rapprochement +UnletteringAuto=Annuler le rapprochement automatique +UnletteringManual=Annuler rapprochement manuel AccountancyNoLetteringModified=Pas de rapprochement modifié AccountancyOneLetteringModifiedSuccessfully=Un rapprochement modifié avec succès AccountancyLetteringModifiedSuccessfully=%s rapprochements modifiés avec succès @@ -410,8 +415,9 @@ AccountancyOneUnletteringModifiedSuccessfully=Une annulation de rapprochement mo AccountancyUnletteringModifiedSuccessfully=%s annulations de rapprochement modifiées avec succès ## Confirm box -ConfirmMassUnlettering=Confirmation d'annulation de rapprochement en masse -ConfirmMassUnletteringQuestion=Êtes-vous sûr de vouloir annuler le rapprochement de(s) %s enregistrement(s) sélectionné(s) ? +ConfirmMassUnletteringAuto=Confirmation d'annulation de rapprochement automatique +ConfirmMassUnletteringManual=Confirmation de dé-rapprochement manuel +ConfirmMassUnletteringQuestion=Voulez-vous vraiment annuler le rapprochement des %s enregistrements sélectionnés ? ConfirmMassDeleteBookkeepingWriting=Confirmation de suppression en masse ConfirmMassDeleteBookkeepingWritingQuestion=Cela supprimera la transaction de la comptabilité (toutes les lignes liées à la même transaction seront supprimées). Êtes-vous sûr de vouloir supprimer le(s) %s enregistrement(s) sélectionné(s) ? diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 313e151a044..8edc331780b 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -51,8 +51,6 @@ ClientSortingCharset=Jeu de caractère de tri du client WarningModuleNotActive=Le module %s doit être activé pour utiliser cette fonction. WarningOnlyPermissionOfActivatedModules=Attention, seules les permissions en rapport avec les modules activés sont affichées ici. Vous pouvez activer d'autres modules sur la page Accueil->Configuration->Modules. DolibarrSetup=Installation ou mise à jour de Dolibarr -InternalUser=Utilisateur interne -ExternalUser=Utilisateur externe InternalUsers=Utilisateurs internes ExternalUsers=Utilisateurs externes UserInterface=Interface utilisateur @@ -190,7 +188,7 @@ Compression=Compression CommandsToDisableForeignKeysForImport=Commande pour désactiver les clés étrangères à l'importation CommandsToDisableForeignKeysForImportWarning=Requis si vous voulez être en mesure de restaurer votre « dump » SQL plus tard ExportCompatibility=Compatibilité du fichier d'exportation généré -ExportUseMySQLQuickParameter=Utiliser le paramètre --quick +ExportUseMySQLQuickParameter=Utiliser le paramètre --quick ExportUseMySQLQuickParameterHelp=Le paramètre '--quick' aide à réduire la consommation de RAM pour les longues listes MySqlExportParameters=Paramètres de l'exportation MySQL PostgreSqlExportParameters= Paramètres de l'exportation PostgreSQL @@ -285,7 +283,7 @@ ContentForLines=Contenu à afficher pour chaque produit ou service (à partir de NoticePeriod=Délai de prévenance NewByMonth=Mois suivant Emails=Emails -EMailsSetup=Configuration Emails +EMailsSetup=Configuration des mails EMailsDesc=Cette page permet de définir les paramètres et options d'envoi des e-mails. EmailSenderProfiles=Expéditeur des e-mails EMailsSenderProfileDesc=Vous pouvez garder cette section vide. Si vous entrez des emails ici, ils seront ajoutés à la liste des expéditeurs possibles dans la liste déroulante lorsque vous écrivez un nouvel email. @@ -338,7 +336,7 @@ MenuHandlers=Gestionnaires de menu MenuAdmin=Édition menu DoNotUseInProduction=Ne pas utiliser en production ThisIsProcessToFollow=Procédure de mise à jour: -ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative +ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative StepNb=Étape %s FindPackageFromWebSite=Rechercher le paquet qui répond à votre besoin (par exemple sur le site web %s). DownloadPackageFromWebSite=Télécharger le package (par exemple depuis le site web officiel %s) @@ -439,8 +437,10 @@ Unique=Unique Boolean=Boolean (case à cocher unique) ExtrafieldPhone = Téléphone ExtrafieldPrice = Prix +ExtrafieldPriceWithCurrency=Prix avec devise ExtrafieldMail = Email ExtrafieldUrl = Url +ExtrafieldIP = IP ExtrafieldSelect = Liste de sélection ExtrafieldSelectList = Liste issue d'une table ExtrafieldSeparator=Séparateur (il ne s'agit pas d'un champ de saisie) @@ -501,7 +501,7 @@ WarningPHPMail=AVERTISSEMENT: la configuration pour envoyer des e-mails à parti WarningPHPMailA= - L'utilisation des serveurs de prestataires de messagerie augmente le niveau confiance des e-mails, cela augmente donc les chances de délivrabilité en n'étant pas considéré comme spam. WarningPHPMailB=- Certains fournisseurs de services de messagerie (comme Yahoo) ne vous permettent pas d'envoyer un e-mail à partir d'un autre serveur que leur propre serveur. Votre configuration actuelle utilise le serveur de l'application pour envoyer des e-mails et non le serveur de votre fournisseur de messagerie, donc certains destinataires (ceux compatibles avec le protocole DMARC restrictif), demanderont à votre fournisseur de messagerie si ils peuvent accepter votre message et ce fournisseur de messagerie (comme Yahoo) peut répondre «non» parce que le serveur d'envoi n'est pas le leur, aussi une partie de vos e-mails envoyés peuvent ne pas être acceptés pour la livraison (faites également attention au quota d'envoi de votre fournisseur de messagerie). WarningPHPMailC=- Utiliser le serveur SMTP de votre propre fournisseur de services de messagerie pour envoyer des e-mails est également intéressant afin que tous les e-mails envoyés depuis l'application soient également enregistrés dans votre répertoire "Envoyés" de votre boîte aux lettres. -WarningPHPMailD=Aussi, il est recommandé de changer le mode d'envoi des e-mails à la valeur "SMTP". Si vous souhaitez vraiment conserver la méthode "PHP" par défaut pour envoyer des e-mails, ignorez simplement cet avertissement ou supprimez-le en définissant la constante MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP sur 1 dans Accueil - Configuration - Autre. +WarningPHPMailD=Aussi, il est recommandé de changer le mode d'envoi des e-mails à la valeur "SMTP". Si vous souhaitez vraiment conserver la méthode "PHP" par défaut pour envoyer des e-mails, ignorez simplement cet avertissement ou supprimez-le en définissant la constante MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP sur 1 dans Accueil - Configuration - Divers. WarningPHPMail2=Si votre fournisseur de messagerie SMTP a besoin de restreindre le client de messagerie à certaines adresses IP (très rare), voici l'adresse IP du mail user agent (MUA) de votre application CRM ERP : %s . WarningPHPMailSPF=Si le nom de domaine de votre adresse e-mail d'expéditeur est protégé par un enregistrement SPF (demandez à votre fournisseur de nom de domaine), vous devez inclure les adresses IP suivantes dans l'enregistrement SPF du DNS de votre domaine: %s. ActualMailSPFRecordFound=Enregistrement SPF réel trouvé (pour l'e-mail %s) : %s @@ -842,9 +842,9 @@ Permission286=Exporter les contacts Permission291=Consulter les tarifs Permission292=Définir les permissions sur les tarifs Permission293=Modifier les tarifs clients -Permission300=Consulter les codes-barres -Permission301=Créer/modifier les codes-barres -Permission302=Supprimer les codes-barres +Permission301=Générer le PDF du code barre +Permission304=Créer/modifier les codes-barres +Permission305=Supprimer les codes-barres Permission311=Consulter les services Permission312=Affecter le service/abonnement au contrat Permission331=Lire les marque-pages @@ -1081,9 +1081,9 @@ DictionaryAssetDisposalType=Type de cession d'actifs TypeOfUnit=Type d'unité SetupSaved=Configuration sauvegardée SetupNotSaved=Configuration non enregistrée -OAuthServiceConfirmDeleteTitle=Suprresion d'entrée OAuth -OAuthServiceConfirmDeleteMessage=Êtes vous sur de vouloir supprimer cette entrée OAuth? Tous les jetons existants associés seront supprimés. -ErrorInEntryDeletion=Erreur dans la suppression +OAuthServiceConfirmDeleteTitle=Supprimer l'entrée OAuth +OAuthServiceConfirmDeleteMessage=Voulez-vous vraiment supprimer cette entrée OAuth ? Tous les jetons existants pour celui-ci seront également supprimés. +ErrorInEntryDeletion=Erreur lors de la suppression de l'entrée EntryDeleted=Entrée supprimée BackToModuleList=Retour liste des modules BackToDictionaryList=Retour liste des dictionnaires @@ -1242,7 +1242,7 @@ BrowserName=Nom du navigateur BrowserOS=OS du navigateur ListOfSecurityEvents=Liste des événements de sécurité Dolibarr SecurityEventsPurged=Evenement de sécurité purgés -TrackableSecurityEvents=Trackable security events +TrackableSecurityEvents=événement de sécurité traçable LogEventDesc=Vous pouvez activer ici l'historique des événements d'audit de sécurité. Cet historique est consultable par les administrateurs dans le menu %s - %s. Attention, cette fonctionnalité peut générer un gros volume de données. AreaForAdminOnly=Les paramètres d'installation ne peuvent être remplis que par les utilisateurs administrateurs uniquement. SystemInfoDesc=Les informations systèmes sont des informations techniques diverses accessibles en lecture seule aux administrateurs uniquement. @@ -1385,7 +1385,7 @@ NumberingModules=Modèles de numérotation DocumentModules=Modèles de documents ##### Module password generation PasswordGenerationStandard=Renvoie un mot de passe généré selon l'algorythme interne de Dolibarr :%s caractères contenant chiffres et minuscules -PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. +PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. PasswordGenerationPerso=Renvoie un mot de passe en fonction d'une configuration personnalisée. SetupPerso=Selon votre configuration PasswordPatternDesc=Description du masque du mot de passe @@ -1463,7 +1463,7 @@ OrdersNumberingModules=Modèles de numérotation des commandes OrdersModelModule=Modèles de document des commandes FreeLegalTextOnOrders=Mention complémentaire sur les commandes WatermarkOnDraftOrders=Filigrane sur les brouillons de commandes (aucun si vide) -ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. +ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. BANK_ASK_PAYMENT_BANK_DURING_ORDER=Demander le compte bancaire cible durant la commande ##### Interventions ##### InterventionsSetup=Configuration du module Interventions @@ -1618,7 +1618,7 @@ LDAPFieldUserid=Id utilisateur LDAPFieldUseridExample=Exemple: uidnumber LDAPFieldHomedirectory=Répertoire racine LDAPFieldHomedirectoryExample=Exemple: homedirectory -LDAPFieldHomedirectoryprefix=Répertoire racine +LDAPFieldHomedirectoryprefix=Préfixe du répertoire racine LDAPSetupNotComplete=Configuration LDAP incomplète (à compléter sur les autres onglets) LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Administrateur ou mot de passe non renseigné. Les accès LDAP seront donc anonymes et en lecture seule. LDAPDescContact=Cette page permet de définir le nom des attributs de l'arbre LDAP pour chaque information des contacts Dolibarr. @@ -1653,7 +1653,7 @@ TestNotPossibleWithCurrentBrowsers=Une détection automatique n'est pas possible DefaultValuesDesc=Vous pouvez définir/forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et/ou les filtres par défaut ou ordre de tri des listes. DefaultCreateForm=Valeurs par défaut (sur les formulaires de création) DefaultSearchFilters=Filtres de recherche par défaut -DefaultSortOrder=Ordre de tri par défaut +DefaultSortOrder=Ordre de tri par défaut DefaultFocus=Champs par défaut ayant le focus DefaultMandatory=Champs de formulaire obligatoires ##### Products ##### @@ -1747,7 +1747,8 @@ FCKeditorForNotePublic=Création/édition WYSIWIG du champ notes publiques des FCKeditorForNotePrivate=Création/édition WYSIWIG du champ notes privées des éléments FCKeditorForCompany=Création/édition WYSIWIG de la description des éléments (autre que produits/services) FCKeditorForProduct=Création/édition WYSIWIG du champ description des produits/services -FCKeditorForProductDetails=Création/édition WYSIWYG des lignes de détails produits sur tous les éléments (commandes, propales, factures, etc...). Attention: L'utilisation pour ce cas est fortement déconseillée car peut créer des problèmes dans la gestion de caractères et mise en page des fichiers PDF générés. +FCKeditorForProductDetails=Création/édition WYSIWYG des lignes de détails produits sur tous les éléments (commandes, propales, factures, etc...). +FCKeditorForProductDetails2=Attention: L'utilisation pour ce cas est fortement déconseillée car peut créer des problèmes dans la gestion de caractères et mise en page des fichiers PDF générés. FCKeditorForMailing= Création/édition WYSIWIG des emailings (Outils->Emailings) FCKeditorForUserSignature=Création/édition WYSIWIG de la signature des utilisateurs FCKeditorForMail=Création/édition WYSIWIG tous les emails (sauf Outils->Emailings) @@ -1770,7 +1771,7 @@ DetailMenuHandler=Nom du gestionnaire menu dans lequel faire apparaitre le nouve DetailMenuModule=Nom du module si l'entrée menu est issue d'un module DetailType=Type de menu (top ou left) DetailTitre=Libellé du menu ou code libellé à traduire -DetailUrl=URL vers laquelle le menu pointe (Lien URL absolu ou lien externe avec http://) +DetailUrl=URL où le menu vous envoie (lien URL relatif ou lien externe avec https://) DetailEnabled=Condition d'affichage ou non DetailRight=Condition d'affichage plein ou grisé DetailLangs=Fichier .lang pour la traduction du code libellé @@ -1872,7 +1873,7 @@ ChequeReceiptsNumberingModule=Module de numérotation des bordereaux de remises MultiCompanySetup=Configuration du module Multi-société ##### Suppliers ##### SuppliersSetup=Configuration du module Fournisseurs -SuppliersCommandModel=Modèle de commande fournisseur complet +SuppliersCommandModel=Modèle de commande fournisseur complet SuppliersCommandModelMuscadet=Modèle de commande fournisseur complet (ancienne implémentation du modèle Cornas) SuppliersInvoiceModel=Modèle de facture fournisseur complet SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur @@ -1907,7 +1908,7 @@ NbMajMin=Nombre minimal de caractères majuscules NbNumMin=Nombre minimal de caractères numériques NbSpeMin=Nombre minimal de caractères spéciaux NbIteConsecutive=Nombre maximal de répétition des mêmes caractères -NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique +NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique SalariesSetup=Configuration du module salaires SortOrder=Ordre de tri Format=Format @@ -1928,7 +1929,7 @@ GoOntoContactCardToAddMore=Rendez-vous sur l'onglet "Notifications" d'un tiers p Threshold=Seuil BackupDumpWizard=Assistant pour créer le fichier dump de la base de données BackupZipWizard=Assistant pour générer l'archive du répertoire documents -SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : +SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : SomethingMakeInstallFromWebNotPossible2=Pour cette raison, le processus de mise à jour décrit ici est une processus manuel que seul un utilisateur ayant des droits privilégiés peut réaliser. InstallModuleFromWebHasBeenDisabledByFile=L'installation de module externe depuis l'application a été désactivé par l'administrator. Vous devez lui demander de supprimer le fichier %s pour permettre cette fonctionnalité. ConfFileMustContainCustom=Installer ou créer un module externe à partir de l'application nécessite de sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit reconnu par Dolibarr, vous devez paramétrer le fichier de configuration conf/conf.php en ajoutant les 2 lignes suivantes :
    $dolibarr_main_url_root_alt='/custom'
    $dolibarr_main_document_root_alt='%s/custom'; @@ -2078,12 +2079,13 @@ loginPassword=Mot de passe oauthToken=Jeton Oauth2 accessType=Type d'accès oauthService=Service Oauth -TokenMustHaveBeenCreated=Module OAuth2 must be enabled and an oauth2 token must have been created with the correct permissions (for example scope "gmail_full" with OAuth for Gmail). +TokenMustHaveBeenCreated=Le module OAuth2 doit être activé et un token oauth2 doit avoir été créé avec les bonnes permissions (par exemple scope "gmail_full" avec OAuth pour Gmail). MailboxSourceDirectory=Répertoire source de la boîte aux lettres MailboxTargetDirectory=Répertoire cible de la boîte aux lettres EmailcollectorOperations=Opérations à effectuer par le collecteur EmailcollectorOperationsDesc=Les opérations sont exécutées de haut en bas MaxEmailCollectPerCollect=Nombre maximum d'emails collectés par collecte +TestCollectNow=Tester la collecte CollectNow=Collecter maintenant ConfirmCloneEmailCollector=Voulez-vous vraiment cloner le collecteur d'e-mails %s ? DateLastCollectResult=Date de la dernière tentative de collecte @@ -2107,7 +2109,7 @@ NoNewEmailToProcess=Aucun nouvel email (correspondants aux filtres) à traiter NothingProcessed=Aucune action faite XEmailsDoneYActionsDone=%s e-mails pré-qualifiés, %s e-mails traités avec succès (pour %s enregistrement/actions effectuées) RecordEvent=Enregistrer un événement dans l'agenda (avec le type Email envoyé ou reçu) -CreateLeadAndThirdParty=Créer un prospect (et un tiers si nécessaire) +CreateLeadAndThirdParty=Créer une opportunité (et un tiers si nécessaire) CreateTicketAndThirdParty=Créer un ticket (lié à un tiers si le tiers a été chargé par une opération précédente ou a été deviné à partir d'un tracker en en-tête d'email, sans tiers sinon) CodeLastResult=Dernier code de retour NbOfEmailsInInbox=Nombre de courriels dans le répertoire source @@ -2228,7 +2230,7 @@ NoExternalModuleWithUpdate=Aucune mise à jour trouvée pour les modules externe SwaggerDescriptionFile=Fichier de description de l’API Swagger (à utiliser avec redoc par exemple) YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Vous avez activé l'API WS qui est dépréciée. Vous devriez utiliser l'API REST à la place. RandomlySelectedIfSeveral=Sélectionnée au hasard si plusieurs images sont disponibles -SalesRepresentativeInfo=For Proposals, Orders, Invoices. +SalesRepresentativeInfo=Pour Propositions, Commandes, Factures DatabasePasswordObfuscated=Le mot de passe de la base de données est masqué dans le fichier de configuration DatabasePasswordNotObfuscated=Le mot de passe de la base de données n'est PAS masqué dans le fichier de configuration APIsAreNotEnabled=Les modules API ne sont pas activés @@ -2310,4 +2312,21 @@ MAIN_MAIL_SMTPS_AUTH_TYPE=Méthode d'authentification UsePassword=Utiliser mot de passe UseOauth=Utiliser un token OAUTH Images=Images +Posts=publications MaxNumberOfImagesInGetPost=Nombre maximum d'images autorisées dans un champ HTML soumis dans un formulaire +MaxNumberOfPostOnPublicPagesByIP=Nombre maximum de publications sur des pages publiques avec une adresse IP +CIDLookupURL=Le module apporte une URL qui peut être utilisée par un outil externe pour obtenir le nom d'un tiers ou d'un contact à partir de son numéro de téléphone. L'URL à utiliser est : +ScriptIsEmpty=Le script est manquant +ShowHideTheNRequests=Afficher/Cacher les %s requête(s) SQL. +DefinedAPathForAntivirusCommandIntoSetup=Définir un chemin pour un programme antivirus dans %s +TriggerCodes=Événements déclenchables +TriggerCodeInfo=Saisissez ici le(s) code(s) déclencheur(s) qui doivent générer la publication d'une requête web (seules les URL externes sont autorisées). Vous pouvez entrer plusieurs codes déclencheurs séparés par une virgule. +EditableWhenDraftOnly=Si décochée, la valeur ne peut être modifiée que lorsque l'objet a un état de brouillon +CssOnEdit=CSS sur les pages d'édition +CssOnView=CSS sur les pages de visualisation +CssOnList=CSS sur les pages de liste +HelpCssOnEditDesc=Le CSS utilisé lors de la modification du champ.
    Exemple : "minwidth100 maxwidth500 widthcentpercentminusx" +HelpCssOnViewDesc=Le CSS utilisé lors de l'affichage du champ. +HelpCssOnListDesc=Le CSS utilisé lorsque le champ est à l'intérieur du tableau d'une liste.
    Exemple : "tdoverflowmax200" +RECEPTION_PDF_HIDE_ORDERED=Masquer la quantité commandée sur les documents générés pour les réceptions +MAIN_PDF_RECEPTION_DISPLAY_AMOUNT_HT=Afficher le prix sur les documents générés pour les réceptions diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang index 1ac6cb60597..62dbae7233e 100644 --- a/htdocs/langs/fr_FR/agenda.lang +++ b/htdocs/langs/fr_FR/agenda.lang @@ -87,6 +87,7 @@ SupplierInvoiceSentByEMail=Facture fournisseur %s envoyée par email ShippingSentByEMail=Bon d'expédition %s envoyé par email ShippingValidated= Expédition %s validée InterventionSentByEMail=Intervention %s envoyé par email +ProjectSentByEMail=Projet %s envoyé par email ProposalDeleted=Proposition commerciale supprimée OrderDeleted=Commande supprimée InvoiceDeleted=Facture supprimée @@ -99,7 +100,7 @@ PRODUCT_MODIFYInDolibarr=Produit %s modifié PRODUCT_DELETEInDolibarr=Produit%ssupprimé HOLIDAY_CREATEInDolibarr=Demande de congé %s créée HOLIDAY_MODIFYInDolibarr=Demande de congé %s modifiée -HOLIDAY_APPROVEInDolibarr=Demande de congé %s approuvée +HOLIDAY_APPROVEInDolibarr=Demande de congé %s approuvée HOLIDAY_VALIDATEInDolibarr=Demande de congé %s validée HOLIDAY_DELETEInDolibarr=Demande de congé %s supprimée EXPENSE_REPORT_CREATEInDolibarr=Note de frais %s créée diff --git a/htdocs/langs/fr_FR/banks.lang b/htdocs/langs/fr_FR/banks.lang index af88349f585..35de9806932 100644 --- a/htdocs/langs/fr_FR/banks.lang +++ b/htdocs/langs/fr_FR/banks.lang @@ -185,4 +185,4 @@ AlreadyOneBankAccount=un compte bancaire est déjà défini SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation=Virement SEPA : 'Type de paiement' au niveau 'Virement' SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=A la génération d'un fichier SEPA XML pour les virements, la section "PaymentTypeInformation" peut maintenant être placée dans la section "CreditTransferTransactionInformation" (à la place de la section "Payment").\nNous recommandons fortement de ne pas cocher cette case pour conserver "PaymentTypeInformation" dans "Payment level" car toutes les banques ne l'accepterons pas obligatoirement au niveau de "CreditTransferTransactionInformation". Contactez votre banque avant de modifier ce paramètre. ToCreateRelatedRecordIntoBank=Pour créer un enregistrement bancaire associé manquant -BanklineExtraFields=Bank Line Extrafields +BanklineExtraFields=Extrait de la ligne bancaire diff --git a/htdocs/langs/fr_FR/bookmarks.lang b/htdocs/langs/fr_FR/bookmarks.lang index b449ca7110a..355b1b351e4 100644 --- a/htdocs/langs/fr_FR/bookmarks.lang +++ b/htdocs/langs/fr_FR/bookmarks.lang @@ -20,3 +20,4 @@ ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choisir si le raccourci doit ouv BookmarksManagement=Gestion des marque-pages BookmarksMenuShortCut=Ctrl + Maj + m NoBookmarks=Aucun marque page enregistré +NoBookmarkFound=Pas de marque-page trouvé. diff --git a/htdocs/langs/fr_FR/boxes.lang b/htdocs/langs/fr_FR/boxes.lang index 75c6ccb9ed9..4cb9011885d 100644 --- a/htdocs/langs/fr_FR/boxes.lang +++ b/htdocs/langs/fr_FR/boxes.lang @@ -46,6 +46,7 @@ BoxMyLastBookmarks=Mes %s derniers marque-pages BoxOldestExpiredServices=Plus anciens services expirés BoxLastExpiredServices=Les %s plus anciens contrats avec services actifs expirés BoxTitleLastActionsToDo=Les %s derniers événements à réaliser +BoxTitleOldestActionsToDo=Les %s plus anciens événement non terminés BoxTitleLastContracts=Les %s derniers contrats modifiés BoxTitleLastModifiedDonations=Les %s derniers dons modifiés BoxTitleLastModifiedExpenses=Les %s dernières notes de frais modifiées diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index 244718df17d..049ee169cef 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -136,10 +136,12 @@ PrintWithoutDetails=Générer sans les détails YearNotDefined=L'année n'est pas définie TakeposBarcodeRuleToInsertProduct=Règle de lecture du code barre des produits TakeposBarcodeRuleToInsertProductDesc=Règle pour extraire la référence produit + une quantité d'un code barre scanné.
    Si vide (valeur par défaut), l'application utilisera le code-barres complet scanné pour trouver le produit.

    Si elle est définie, la syntaxe doit être:
    ref: NB + Qu: NB + QD: NB + autres: NB
    où NB est le nombre de caractères à utiliser pour extraire les données du code à barres scannés avec:
    • ref : référence produit
    • qu : quantité de jeu lors de l'insertion article (unités)
    • qd: quantité de jeu lors de l'insertion article (décimaux)
    • autre : autres caractères
    -HideCategories=Masquer les catégories -HideStockOnLine=Masquer le stock en ligne -ShowOnlyProductInStock=Affficher les produits en stock -ShowCategoryDescription=Afficher la description des catégories -ShowProductReference=Afficher la référence des produits -UsePriceHT= Utiliser le prix HT et non en TTC AlreadyPrinted=Déjà imprimé +HideCategories=Cacher catégories +HideStockOnLine=Cacher les stocks sur les lignes +ShowOnlyProductInStock=Afficher les produits en stock +ShowCategoryDescription=Afficher la description de la catégorie +ShowProductReference=Afficher la référence des produits +UsePriceHT=Utiliser le prix HT et non le prix TTC +TerminalName=Terminal %s +TerminalNameDesc=Nom du terminal diff --git a/htdocs/langs/fr_FR/categories.lang b/htdocs/langs/fr_FR/categories.lang index 5f478aabc7f..641cf97bacf 100644 --- a/htdocs/langs/fr_FR/categories.lang +++ b/htdocs/langs/fr_FR/categories.lang @@ -42,6 +42,7 @@ MemberHasNoCategory=Ce membre n'appartient à aucun(e) tag/catégorie ContactHasNoCategory=Ce contact n'appartient à aucun(e) tag/catégorie ProjectHasNoCategory=Ce projet n'est classé dans aucune catégorie ClassifyInCategory=Ajouter tag/catégorie +RemoveCategory=Supprimer la catégorie NotCategorized=Sans tag/catégorie CategoryExistsAtSameLevel=Ce tag existe déjà avec cette référence ContentsVisibleByAllShort=Contenu visible par tous @@ -67,6 +68,7 @@ StockCategoriesShort=Tags/catégories d’entrepôt ThisCategoryHasNoItems=Cette catégorie ne contient aucun élément. CategId=ID du(de la) tag/catégorie ParentCategory=Catégorie parente +ParentCategoryID=ID de la balise/catégorie parent ParentCategoryLabel=Libellé du tag/catégorie parent CatSupList=Liste des tags/catégories des fournisseurs CatCusList=Liste des tags/catégories des clients/prospects diff --git a/htdocs/langs/fr_FR/commercial.lang b/htdocs/langs/fr_FR/commercial.lang index 84bb1364386..924059a1262 100644 --- a/htdocs/langs/fr_FR/commercial.lang +++ b/htdocs/langs/fr_FR/commercial.lang @@ -75,11 +75,11 @@ DraftPropals=Propositions brouillons NoLimit=Pas de limite ToOfferALinkForOnlineSignature=Lien pour signature en ligne WelcomeOnOnlineSignaturePageProposal=Bienvenue sur la page pour accepter les propositions commerciales de %s -WelcomeOnOnlineSignaturePageContract=Bienvenue sur la page de signature en ligne de contrats au format PDF de %s +WelcomeOnOnlineSignaturePageContract=Bienvenue sur la page de signature du contrat PDF %s ThisScreenAllowsYouToSignDocFromProposal=Cet écran vous permet d'accepter et signer en ligne, ou de refuser, le devis ou la proposition commerciale -ThisScreenAllowsYouToSignDocFromContract=Cet écran vous permet de signer en ligne des contrats au format PDF. +ThisScreenAllowsYouToSignDocFromContract=Cet écran vous permet de signer en ligne un contrat au format PDF. ThisIsInformationOnDocumentToSignProposal=Voici les informations sur le document à accepter ou refuser -ThisIsInformationOnDocumentToSignContract=Voici les informations sur le contrat a signer +ThisIsInformationOnDocumentToSignContract=Voici les informations sur le contrat à signer SignatureProposalRef=Signature du devis ou proposition commerciale %s SignatureContractRef=Signature du contrat %s FeatureOnlineSignDisabled=Fonctionnalité pour la signature en ligne désactivée ou document généré avant l'activation de la fonctionnalité diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index e875ef168fd..f66d2005c73 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -313,11 +313,11 @@ CustomerAbsoluteDiscountShort=Remise fixe CompanyHasRelativeDiscount=Ce client a une remise par défaut de %s%% CompanyHasNoRelativeDiscount=Ce client n'a pas de remise relative par défaut HasRelativeDiscountFromSupplier=Vous avez une réduction par défaut de %s%% chez ce fournisseur -HasNoRelativeDiscountFromSupplier=Vous n'avez pas de remise relative par défaut chez ce fournisseur +HasNoRelativeDiscountFromSupplier=Aucune remise relative par défaut de ce fournisseur CompanyHasAbsoluteDiscount=Ce client dispose de crédits disponibles (avoirs ou acomptes) pour un montant de %s %s CompanyHasDownPaymentOrCommercialDiscount=Ce client a une réduction disponible (commercial, acompte) pour %s%s CompanyHasCreditNote=Ce client a %s %s d'avoirs disponibles -HasNoAbsoluteDiscountFromSupplier=Vous n'avez aucun crédit de réduction disponible auprès de ce fournisseur +HasNoAbsoluteDiscountFromSupplier=Aucun rabais/crédit disponible auprès de ce fournisseur HasAbsoluteDiscountFromSupplier=Vous avez des crédits disponibles (avoirs ou acomptes) pour %s %s chez ce fournisseur HasDownPaymentOrCommercialDiscountFromSupplier=Vous avez des crédits disponibles (bon de réductions, acomptes) pour %s %s chez ce fournisseur HasCreditNoteFromSupplier=Vous avez des avoirs pour %s %s chez ce fournisseur @@ -444,7 +444,7 @@ AddAddress=Créer adresse SupplierCategory=Catégorie du fournisseur JuridicalStatus200=Indépendant DeleteFile=Suppression d'un fichier -ConfirmDeleteFile=Êtes-vous sûr de vouloir supprimer ce fichier %s? +ConfirmDeleteFile=Êtes-vous sûr de vouloir supprimer ce fichier %s ? AllocateCommercial=Affecter un commercial Organization=Organisme FiscalYearInformation=Exercice fiscal @@ -467,7 +467,7 @@ UniqueThirdParties=Nombre total des tiers InActivity=Ouvert ActivityCeased=Clos ThirdPartyIsClosed=Le tiers est clôturé -ProductsIntoElements=Liste des produits/services jusqu'à %s +ProductsIntoElements=Liste des produits/services présents dans %s CurrentOutstandingBill=Montant encours OutstandingBill=Montant encours autorisé OutstandingBillReached=Montant encours autorisé dépassé @@ -498,3 +498,5 @@ RestOfEurope=Reste de l'Union Européenne (UE) OutOfEurope=Hors Union Européenne (UE) CurrentOutstandingBillLate=Montant impayé arrivé à échéance BecarefullChangeThirdpartyBeforeAddProductToInvoice=Attention : selon votre configuration des prix des produits/services, vous devriez changer le tiers avant d'ajouter le produit +EmailAlreadyExistsPleaseRewriteYourCompanyName=l'e-mail existe déjà, veuillez réécrire le nom de votre entreprise +TwoRecordsOfCompanyName=plusieurs fiches existent pour cette entreprise merci de nous contacter pour compléter votre demande de partenariat" diff --git a/htdocs/langs/fr_FR/contracts.lang b/htdocs/langs/fr_FR/contracts.lang index bb7bf18da67..3c3d5620d1a 100644 --- a/htdocs/langs/fr_FR/contracts.lang +++ b/htdocs/langs/fr_FR/contracts.lang @@ -20,6 +20,7 @@ ContractsSubscriptions=Contrats/Abonnements ContractsAndLine=Contrats et lignes de contrats Contract=Contrat ContractLine=Ligne de contrat +ContractLines=Lignes du contrat Closing=Fermé NoContracts=Pas de contrats MenuServices=Services @@ -79,7 +80,7 @@ ConfirmDeleteContractLine=Êtes-vous sûr de vouloir supprimer cette ligne de co MoveToAnotherContract=Déplacer le service vers un autre contrat de ce tiers. ConfirmMoveToAnotherContract=J'ai choisi le contrat cible et confirme le déplacement du service dans ce contrat. ConfirmMoveToAnotherContractQuestion=Choisissez vers quel autre contrat (du même tiers), vous voulez déplacer ce service ? -PaymentRenewContractId=Renouvellement service (numéro %s) +PaymentRenewContractId=Renouveler le contrat %s (service %s) ExpiredSince=Expiré le NoExpiredServices=Pas de services actifs expirés ListOfServicesToExpireWithDuration=Liste des services actifs expirant dans %s jours @@ -104,3 +105,5 @@ AllowOnlineSign=Autoriser la signature en ligne AllowExternalDownload=Autoriser le téléchargement externe ShowClosedServices=Afficher les services fermés HideClosedServices=Masquer les services fermés +UserStartingService=Utilisateur démarrant le service +UserClosingService=Utilisateur stoppant le service diff --git a/htdocs/langs/fr_FR/cron.lang b/htdocs/langs/fr_FR/cron.lang index 64bf5493285..e851fd5a13a 100644 --- a/htdocs/langs/fr_FR/cron.lang +++ b/htdocs/langs/fr_FR/cron.lang @@ -82,10 +82,18 @@ UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils JobDisabled=Travail désactivé MakeLocalDatabaseDumpShort=Sauvegarde locale de base MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nombre de fichiers de sauvegarde à garder +MakeSendLocalDatabaseDumpShort=Envoyer la sauvegarde de la base de données locale +MakeSendLocalDatabaseDump=Envoyez la sauvegarde de la base de données locale par e-mail. Les paramètres sont : to, from, subject, message, filename (nom du fichier envoyé), filter ('sql' pour la sauvegarde de la base de données uniquement) +CleanUnfinishedCronjobShort=Nettoyer la tâche planifiée inachevée +CleanUnfinishedCronjob=Nettoyer la tâche planifiée bloquée dans le traitement lorsque le processus n'est plus en cours d'exécution WarningCronDelayed=Attention, à des fins de performance, quelle que soit la prochaine date d'exécution des travaux activés, vos travaux peuvent être retardés jusqu'à %s heures avant d'être exécutés. DATAPOLICYJob=Nettoyeur de données et anonymiseur JobXMustBeEnabled=La tâche planifiée %s doit être activée +EmailIfError=E-mail d'avertissement en cas d'erreur +ErrorInBatch=Erreur lors de l'exécution du travail %s + # Cron Boxes LastExecutedScheduledJob=Dernier travail planifié exécuté NextScheduledJobExecute=Prochaine travail planifié à exécuter NumberScheduledJobError=Nombre de travaux planifiées en erreur +NumberScheduledJobNeverFinished=Nombre de tâches planifiées jamais terminées diff --git a/htdocs/langs/fr_FR/datapolicy.lang b/htdocs/langs/fr_FR/datapolicy.lang new file mode 100644 index 00000000000..16ed7ca5933 --- /dev/null +++ b/htdocs/langs/fr_FR/datapolicy.lang @@ -0,0 +1,92 @@ +# Copyright (C) 2018 Nicolas ZABOURI +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Module label 'ModuledatapolicyName' +Module4100Name = Politique de confidentialité des données +# Module description 'ModuledatapolicyDesc' +Module4100Desc = Module de gestion de la confidentialité des données (conformité avec le RGPD) + +# +# Administration page +# +datapolicySetup = Configuration de la politique de confidentialité des données du module +Deletion = Suppression de données +datapolicySetupPage = En fonction des législations de vos pays (Exemple Article 5 du RGPD), les données personnelles doivent être conservées pendant une durée n'excédant pas celle nécessaire aux finalités pour lesquelles elles ont été collectées, sauf à des fins d'archivage.
    La suppression se fera automatiquement après une certaine durée sans événement (la durée que vous aurez indiquée ci-dessous). +NB_MONTHS = %s mois +ONE_YEAR = 1 an +NB_YEARS = %s ans +DATAPOLICY_TIERS_CLIENT = Client +DATAPOLICY_TIERS_PROSPECT = Prospect +DATAPOLICY_TIERS_PROSPECT_CLIENT = Prospect/Client +DATAPOLICY_TIERS_NIPROSPECT_NICLIENT = Ni prospect/Ni client +DATAPOLICY_TIERS_FOURNISSEUR = Fournisseur +DATAPOLICY_CONTACT_CLIENT = Client +DATAPOLICY_CONTACT_PROSPECT = Prospect +DATAPOLICY_CONTACT_PROSPECT_CLIENT = Prospect/Client +DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT = Ni prospect/Ni client +DATAPOLICY_CONTACT_FOURNISSEUR = Fournisseur +DATAPOLICY_ADHERENT = Adhérent +DATAPOLICY_Tooltip_SETUP = Type de contact - Indiquez vos choix pour chaque type. +DATAPOLICYMail = Configuration des e-mails +DATAPOLICYSUBJECTMAIL = Objet du courriel +DATAPOLICYCONTENTMAIL = Contenu de l'e-mail +DATAPOLICYSUBSITUTION = Vous pouvez utiliser les variables suivantes dans votre email (LINKACCEPT permet de créer un lien enregistrant l'accord de la personne, LINKREFUSED permet d'enregistrer le refus de la personne) : +DATAPOLICYACCEPT = Message après accord +DATAPOLICYREFUSE = Message après désaccord +SendAgreementText = Vous pouvez envoyer un e-mail RGPD à tous vos contacts concernés (qui n'ont pas encore reçu d'e-mail et pour lesquels vous n'avez rien enregistré concernant leur accord RGPD). Pour ce faire, utilisez le bouton suivant. +SendAgreement = Envoyer des emails +AllAgreementSend = Tous les e-mails ont été envoyés +TXTLINKDATAPOLICYACCEPT = Texte pour le lien "accord" +TXTLINKDATAPOLICYREFUSE = Texte pour le lien "désaccord" + + +# +# Extrafields +# +DATAPOLICY_BLOCKCHECKBOX = RGPD : Traitement des données personnelles +DATAPOLICY_consentement = Consentement obtenu pour le traitement des données personnelles +DATAPOLICY_opposition_traitement = S'oppose au traitement de ses données personnelles +DATAPOLICY_opposition_prospection = S'oppose au traitement de ses données personnelles à des fins de prospection + +# +# Popup +# +DATAPOLICY_POPUP_ANONYME_TITLE = Anonymiser un tiers +DATAPOLICY_POPUP_ANONYME_TEXTE = Vous ne pouvez pas supprimer ce contact de Dolibarr car il y a des éléments liés. Conformément au RGPD, vous rendrez toutes ces données anonymes pour respecter vos obligations. Voulez-vous continuer ? + +# +# Button for portability +# +DATAPOLICY_PORTABILITE = Portabilité RGPD +DATAPOLICY_PORTABILITE_TITLE = Exportation de données personnelles +DATAPOLICY_PORTABILITE_CONFIRMATION = Vous souhaitez exporter les données personnelles de ce contact. Êtes-vous sûr ? + +# +# Notes added during an anonymization +# +ANONYMISER_AT = Anonymisé le %s + +# V2 +DATAPOLICYReturn = Validation RGPD +DATAPOLICY_date = Date d'accord/désaccord RGPD +DATAPOLICY_send = Date d'envoi de l'e-mail d'accord +DATAPOLICYReturn = Validation RGPD +DATAPOLICY_SEND = Envoyer un e-mail RGPD +MailSent = L'email a été envoyé + +# ERROR +ErrorSubjectIsRequired = Erreur : L'objet de l'email est obligatoire. Indiquez-le dans la configuration du module +=Suite à un problème technique, nous n'avons pas pu enregistrer votre choix. Nous nous en excusons. Contactez-nous pour nous faire part de votre choix. +NUMBER_MONTH_BEFORE_DELETION = Nombre de mois avant la suppression diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index f043c5b5afc..d407d7c91b8 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -48,6 +48,7 @@ ErrorBadImageFormat=Cet image est dans un format non pris en charge (Votre PHP n ErrorBadDateFormat=La valeur '%s' a un format de date non reconnu ErrorWrongDate=La date est incorrecte ErrorFailedToWriteInDir=Impossible d'écrire dans le répertoire %s +ErrorFailedToBuildArchive=Échec de la création du fichier d'archive %s ErrorFoundBadEmailInFile=Syntaxe d'email incorrecte trouvée pour %s lignes dans le fichier (exemple ligne %s avec email=%s) ErrorUserCannotBeDelete=L'utilisateur ne peut pas être supprimé. Peut-être est-il associé à des éléments de Dolibarr. ErrorFieldsRequired=Des champs obligatoire n'ont pas été remplis. @@ -76,7 +77,7 @@ ErrorNoValueForCheckBoxType=Les valeurs de la liste de case à cochées doivent ErrorNoValueForRadioType=Les valeurs de la liste d'options doivent être renseignées ErrorBadFormatValueList=Les valeurs de la liste ne peuvent pas avoir plus d'une virgule: %s mais il en faut au moins une: clé, valeur ErrorFieldCanNotContainSpecialCharacters=Le champ %s ne peut contenir de caractères spéciaux. -ErrorFieldCanNotContainSpecialNorUpperCharacters=Le champ %s ne doit contenir ni caractères spéciaux ni majuscules et ne peut contenir que des chiffres. +ErrorFieldCanNotContainSpecialNorUpperCharacters=Le champ %s ne doit pas contenir de caractères spéciaux, ni de majuscules, et doit commencer par un caractère alphabétique (a-z) ErrorFieldMustHaveXChar=Le champ %s doit comporter au moins %s caractères. ErrorNoAccountancyModuleLoaded=Aucun module de comptabilité activé ErrorExportDuplicateProfil=Ce nom de profil existe déjà pour ce lot d'export. @@ -97,7 +98,6 @@ ErrorFieldValueNotIn=Champ %s: '%s' n'est pas une valeur disponibl ErrorFieldRefNotIn=Champ %s: '%s' n'est pas une référence existante comme %s ErrorsOnXLines=Erreurs sur %s enregistrement(s) source ErrorFileIsInfectedWithAVirus=L'antivirus n'a pas pu valider ce fichier (il est probablement infecté par un virus) ! -ErrorSpecialCharNotAllowedForField=Les caractères spéciaux ne sont pas admis pour le champ "%s" ErrorNumRefModel=Une référence existe en base (%s) et est incompatible avec cette numérotation. Supprimez la ligne ou renommez la référence pour activer ce module. ErrorQtyTooLowForThisSupplier=Quantité insuffisante pour ce fournisseur ou aucun tarif défini sur ce produit pour ce fournisseur ErrorOrdersNotCreatedQtyTooLow=Certaines commandes n'ont pas été créées en raison de quantités trop faibles @@ -291,6 +291,13 @@ ErrorAjaxRequestFailed=Demande échouée ErrorThirpdartyOrMemberidIsMandatory=Définir un tiers ou un adhérent dans le partenariat est obligatoire ErrorFailedToWriteInTempDirectory=Impossible d'écrire dans le répertoire temporaire ErrorQuantityIsLimitedTo=La quantité est limitée à %s +ErrorFailedToLoadThirdParty=Impossible de trouver/charger un tiers à partir de id=%s, email=%s, name=%s +ErrorThisPaymentModeIsNotSepa=Ce mode de paiement n'est pas un compte bancaire +ErrorStripeCustomerNotFoundCreateFirst=Le client Stripe n'est pas défini pour ce tiers (ou défini sur une valeur supprimée du côté Stripe). Créez (ou rattachez) d'abord. +ErrorCharPlusNotSupportedByImapForSearch=La recherche IMAP n'est pas en mesure de rechercher dans l'expéditeur ou le destinataire une chaîne contenant le caractère + +ErrorTableNotFound=Table %s introuvable +ErrorValueForTooLow=La valeur pour %s est trop faible +ErrorValueCantBeNull=La valeur pour %s ne peut pas être nulle # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Votre paramètre PHP upload_max_filesize (%s) est supérieur au paramètre PHP post_max_size (%s). Ceci n'est pas une configuration cohérente. @@ -326,6 +333,8 @@ WarningAvailableOnlyForHTTPSServers=Disponible uniquement si une connexion sécu WarningModuleXDisabledSoYouMayMissEventHere=Le module %s n’a pas été activé. Par conséquent, il se peut que vous manquiez beaucoup d’événements ici. WarningPaypalPaymentNotCompatibleWithStrict=La valeur 'Strict' fait que les fonctionnalités de paiement en ligne ne fonctionnent pas correctement. Utilisez plutôt 'Lax'. WarningThemeForcedTo=Attention, le choix du thème a été forcé à %s par la constante cachée MAIN_FORCETHEME +WarningPagesWillBeDeleted=Attention, cela supprimera également toutes les pages/conteneurs existants du site. Vous devriez exporter votre site Web avant, afin d'avoir une sauvegarde pour le réimporter plus tard. +WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=La validation automatique est désactivée lorsque l'option de diminution du stock est définie sur "Validation de la facture". # Validate RequireValidValue = Valeur non valide diff --git a/htdocs/langs/fr_FR/exports.lang b/htdocs/langs/fr_FR/exports.lang index 665173fd58e..260bcebda1d 100644 --- a/htdocs/langs/fr_FR/exports.lang +++ b/htdocs/langs/fr_FR/exports.lang @@ -95,8 +95,8 @@ NbOfLinesOK=Nombre de lignes sans erreur ni avertissement : %s. NbOfLinesImported=Nombre de lignes importées avec succès : %s. DataComeFromNoWhere=La valeur à insérer n'est issue d'aucun champ du fichier source. DataComeFromFileFieldNb=La valeur à insérer provient de la colonne %s dans le fichier source. -DataComeFromIdFoundFromRef=La valeur provenant du fichier source sera utilisée pour trouver l'identifiant de l'objet parent à utiliser (donc l'objet %s qui a la référence du fichier source doit exister dans la base de données). -DataComeFromIdFoundFromCodeId=Le valeur du code provenant du fichier source sera utilisé pour trouver l'id de l'objet parent à utiliser (donc le code du fichier source doit exister dans le dictionnaire %s ). Notez que si vous connaissez l'identifiant, vous pouvez également l'utiliser dans le fichier source à la place du code. L'importation devrait fonctionner dans les deux cas. +DataComeFromIdFoundFromRef=La valeur qui vient du fichier source sera utilisée pour trouver l'id de l'objet parent à utiliser (donc l'objet %s qui a la réf. du fichier source doit exister dans la base de données). +DataComeFromIdFoundFromCodeId=La valeur du code provenant du fichier source sera utilisée pour trouver l'identifiant de l'objet parent à utiliser (donc le code du fichier source doit exister dans le dictionnaire %s). Notez que si vous connaissez l'identifiant, vous pouvez également l'utiliser dans le fichier source à la place du code. L'importation devrait fonctionner dans les deux cas. DataIsInsertedInto=La donnée issue du fichier source sera insérée dans le champ suivant: DataIDSourceIsInsertedInto=L'identifiant de l'objet père, retrouvé à partir de la donnée dans le fichier source, sera inséré dans le champ suivant : DataCodeIDSourceIsInsertedInto=L'identifiant de la ligne père, retrouvé à partir du code, sera inséré dans le champ suivant : @@ -134,7 +134,9 @@ FormatControlRule=Règle de contrôle de format ## imports updates KeysToUseForUpdates=Clé à utiliser pour mettre à jour les données NbInsert=Nombre de lignes insérées: %s +NbInsertSim=Nombre de lignes qui seront insérées : %s NbUpdate=Nombre de lignes mises à jour: %s +NbUpdateSim=Nombre de lignes qui seront mises à jour : %s MultipleRecordFoundWithTheseFilters=Plusieurs enregistrements ont été trouvés avec ces filtres: %s StocksWithBatch=Stocks et entrepôts des produits avec numéro de lot/série WarningFirstImportedLine=La ou les premières lignes ne seront pas importées avec la sélection actuelle diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang index 22720779eaf..27439f66c27 100644 --- a/htdocs/langs/fr_FR/holiday.lang +++ b/htdocs/langs/fr_FR/holiday.lang @@ -1,10 +1,11 @@ # Dolibarr language file - Source file is en_US - holiday HRM=GRH -Holidays=Congés -Holiday=Congé +Holidays=Feuilles +Holiday=Demande de congés CPTitreMenu=Demande de congés MenuReportMonth=État mensuel MenuAddCP=Créer demande de congés +MenuCollectiveAddCP=Nouvelle demande de congé collectif NotActiveModCP=Vous devez activer le module Congés pour afficher cette page. AddCP=Créer une demande de congés DateDebCP=Date Début @@ -57,6 +58,7 @@ ConfirmDeleteCP=Confirmer la suppression de cette demande de congés ? ErrorCantDeleteCP=Erreur, vous n'avez pas le droit de supprimer cette demande de congés. CantCreateCP=Erreur, vous n'avez pas le droit de créer une demande de congés. InvalidValidatorCP=Vous devez choisir un approbateur pour votre demande de congés. +InvalidValidator=L'utilisateur choisi n'est pas un approbateur. NoDateDebut=Vous devez choisir une date de début. NoDateFin=Vous devez choisir une date de fin. ErrorDureeCP=Votre demande de congés payés ne contient aucun jour ouvré. @@ -80,6 +82,8 @@ MotifCP=Motif UserCP=Utilisateur ErrorAddEventToUserCP=Une erreur est survenue durant l'ajout du congé exceptionnel. AddEventToUserOkCP=L'ajout du congé exceptionnel à bien été effectué. +ErrorFieldRequiredUserOrGroup=Le champ "groupe" ou le champ "utilisateur" doivent être remplis +fusionGroupsUsers=Le champ "groupes" et le champ "utilisateur" seront fusionnés MenuLogCP=Voir historique modif. LogCP=Historique des mises à jour de jours de congés disponibles ActionByCP=Réalisée par @@ -87,6 +91,13 @@ UserUpdateCP=Mis à jour pour PrevSoldeCP=Précédent Solde NewSoldeCP=Nouveau Solde alreadyCPexist=Une demande de congés a déjà été faite sur cette période. +UseralreadyCPexist=Une demande de congé a déjà été faite pour cette période pour %s. +groups=Groupes +users=Utilisateurs +AutoSendMail=Envoi automatique d'email +NewHolidayForGroup=Nouvelle demande de congé collectif +SendRequestCollectiveCP=Envoyer la demande de congé collectif +AutoValidationOnCreate=Validation automatique FirstDayOfHoliday=Premier jour de congés LastDayOfHoliday=Dernier jour de congés BoxTitleLastLeaveRequests=Les %s dernières demandes de congés modifiées @@ -138,3 +149,10 @@ XIsAUsualNonWorkingDay=%s est généralement un jour NON ouvrable BlockHolidayIfNegative=Bloqué lorsque le solde est négatif LeaveRequestCreationBlockedBecauseBalanceIsNegative=La création de cette demande de congé est bloquée car votre solde est négatif ErrorLeaveRequestMustBeDraftCanceledOrRefusedToBeDeleted=La demande de congé %s doit être brouillon, annulée ou refusée pour être supprimée +IncreaseHolidays=Augmenter le nombre de jours de vacances +HolidayRecordsIncreased= %s registres de vacances augmentés +HolidayRecordIncreased=Registre de vacances augmenté +ConfirmMassIncreaseHoliday=Augmentation en masse des vacances +NumberDayAddMass=Nombre de jours à ajouter à la sélection +ConfirmMassIncreaseHolidayQuestion=Êtes-vous sûr de vouloir augmenter les vacances du ou des enregistrement(s) sélectionnés %s ? +HolidayQtyNotModified=Le solde des jours restants pour %s n'a pas été modifié diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index 5e520547352..0888db3aca6 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -28,6 +28,7 @@ ErrorPHPVersionTooLow=Version PHP trop ancienne. La version %s ou supérieure es ErrorPHPVersionTooHigh=Version PHP trop élevée. La version %s ou inférieure est requise. ErrorConnectedButDatabaseNotFound=Connexion au serveur réussie mais base '%s' introuvable. ErrorDatabaseAlreadyExists=La base de données '%s' existe déjà. +ErrorNoMigrationFilesFoundForParameters=Aucun fichier de migration trouvé pour les versions sélectionnées IfDatabaseNotExistsGoBackAndUncheckCreate=Si la base n'existe pas, revenez en arrière et cochez l'option "Créer la base de données". IfDatabaseExistsGoBackAndCheckCreate=Si la base existe déjà, revenez en arrière et désactiver l'option "Créer la base de données". WarningBrowserTooOld=Version du navigateur trop ancienne. Nous vous recommandons de mettre à jour vers une version récente de Firefox, Chrome ou Opera. @@ -50,7 +51,6 @@ DatabaseName=Nom de la base de données DatabasePrefix=Préfixe des tables DatabasePrefixDescription=Préfixe de table de base de données. Si vide, la valeur par défaut est llx_. AdminLogin=Identifiant du propriétaire de la base de données Dolibarr. -PasswordAgain=Vérification du mot de passe AdminPassword=Mot de passe du propriétaire de la base de données Dolibarr. CreateDatabase=Créer la base de données CreateUser=Créer le propriétaire ou lui affecter les droits à la base @@ -212,3 +212,5 @@ ClickHereToGoToApp=Cliquez ici pour aller sur votre application ClickOnLinkOrRemoveManualy=Si une mise à niveau est en cours, veuillez patienter. Si non, cliquez sur le lien suivant. Si vous atteignez toujours cette page, vous devez supprimer manuellement le fichier install.lock dans le répertoire documents Loaded=Chargé FunctionTest=Fonction test +NodoUpgradeAfterDB=Aucune action demandée par les modules externes après la mise à jour de la base de données +NodoUpgradeAfterFiles=Aucune action demandée par les modules externes après la mise à jour des fichiers ou des répertoires diff --git a/htdocs/langs/fr_FR/interventions.lang b/htdocs/langs/fr_FR/interventions.lang index 50e6ff1d9d1..c09f8431498 100644 --- a/htdocs/langs/fr_FR/interventions.lang +++ b/htdocs/langs/fr_FR/interventions.lang @@ -68,3 +68,4 @@ ConfirmReopenIntervention=Êtes-vous sur de vouloir ré-ouvrir l'intervention %s, i ErrorUserPermissionAllowsToLinksToItselfOnly=Pour des raisons de sécurité, il faut posséder les droits de modification de tous les utilisateurs pour pouvoir lier un adhérent à un utilisateur autre que vous même. SetLinkToUser=Lier à un utilisateur Dolibarr SetLinkToThirdParty=Lier à un tiers Dolibarr +MemberCountersArePublic=Les compteurs de membres valides sont publics MembersCards=Génération de cartes pour les membres MembersList=Liste des adhérents MembersListToValid=Liste des adhérents brouillons (à valider) @@ -72,6 +73,12 @@ MemberTypeCanNotBeDeleted=Ce type d'adhérent ne peut pas être supprimé NewSubscription=Nouvelle cotisation NewSubscriptionDesc=Ce formulaire permet de vous inscrire comme nouvel adhérent de l'association. Pour un renouvellement (si vous êtes déjà adhérent), contactez plutôt l'association par email %s. Subscription=Adhésion / cotisation +AnyAmountWithAdvisedAmount=Tout montant avec une quantité recommandée de %s%s +AnyAmountWithoutAdvisedAmount=Tout montant +CanEditAmountShort=Tout montant +CanEditAmountShortForValues=recommandé, tout montant +MembershipDuration=Durée +GetMembershipButtonLabel=Obtenir l'adhésion Subscriptions=Adhésions / cotisations SubscriptionLate=En retard SubscriptionNotReceived=Cotisation non reçue @@ -136,7 +143,7 @@ CardContent=Contenu de votre fiche adhérent # Text of email templates ThisIsContentOfYourMembershipRequestWasReceived=Nous vous informons que votre demande d'adhésion a bien été reçue.

    ThisIsContentOfYourMembershipWasValidated=Nous vous informons que votre adhésion a été validé avec les informations suivantes:

    -ThisIsContentOfYourSubscriptionWasRecorded=Nous vous informons que votre nouvelle cotisation a été enregistrée.

    +ThisIsContentOfYourSubscriptionWasRecorded=Nous voulons vous informer que votre nouvelle cotisation a été enregistrée. Veuillez trouver votre facture ci-jointe.

    ThisIsContentOfSubscriptionReminderEmail=Nous voulons vous informer que votre adhésion est sur le point d'expirer ou a déjà expiré (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). Nous espérons que vous pourrez la renouveler, votre soutien nous est précieux.

    ThisIsContentOfYourCard=Ceci est un rappel des informations que nous avons vous concernant. N'hésitez pas à nous contacter en cas d'erreur.

    DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Sujet de l'email reçu en cas d'auto-inscription d'un invité @@ -199,14 +206,8 @@ NbOfSubscriptions=Nombre de cotisations AmountOfSubscriptions=Montant des cotisations TurnoverOrBudget=Chiffre affaire (pour société) ou Budget (asso ou collectivité) DefaultAmount=Montant par défaut de la cotisation -CanEditAmount=Le visiteur peut modifier / choisir le montant de sa cotisation quel que soit le type d'adhésion -AmountIsLowerToMinimumNotice=sur un dû total de %s -AnyAmountWithAdvisedAmount=Montant libre avec un montant recommandé de %s %s -AnyAmountWithoutAdvisedAmount=Montant libre -CanEditAmountShortForValues=conseillé, montant libre -MembershipDuration=Durée -GetMembershipButtonLabel=Adhérer -CanEditAmountShort=Montant libre +CanEditAmount=Le visiteur peut choisir/modifier le montant de sa contribution quel que soit le type d'adhérent +AmountIsLowerToMinimumNotice=Le montant est inférieur au montant minimum de %s MEMBER_NEWFORM_PAYONLINE=Rediriger sur la page intégrée de paiement en ligne ByProperties=Par nature MembersStatisticsByProperties=Statistiques des adhérents par nature diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang index d29c9f2164b..2bd50f4225b 100644 --- a/htdocs/langs/fr_FR/modulebuilder.lang +++ b/htdocs/langs/fr_FR/modulebuilder.lang @@ -1,7 +1,8 @@ # Dolibarr language file - Source file is en_US - loan +IdModule= ID module ModuleBuilderDesc=Cet outil ne doit être utilisé que par des utilisateurs ou des développeurs expérimentés. Il fournit des utilitaires pour construire ou éditer votre propre module. La documentation pour le développement manuel alternatif est ici . EnterNameOfModuleDesc=Entrez le nom du module/application à créer sans espaces. Utilisez des majuscules pour séparer les mots (Par exemple: MyModule, EcommerceForShop, SyncWithMySystem...) -EnterNameOfObjectDesc=Entrez le nom de l'objet à créer sans espaces. Utilisez des majuscules pour séparer les mots (par exemple: MyObject, Student, Teacher...). Le fichier de classe CRUD, mais aussi le fichier d'API, les pages pour lister/ajouter/modifier/supprimer l'objet et les fichiers SQL seront générés. +EnterNameOfObjectDesc=Renseignez le nom de l'objet à créer, sans utiliser d'espace. Utilisez des majuscules pour séparer les termes (par exemple : MyObject, Student, Teacher...). Le fichier de classe CRUD, les pages pour lister/ajouter/modifier/supprimer l'objet et les fichiers SQL seront générés. EnterNameOfDictionaryDesc=Entrez le nom du dictionnaire à créer sans espaces. Utilisez des majuscules pour séparer les mots (Par exemple : MyDico...). Le fichier de classe, mais aussi le fichier SQL seront générés. ModuleBuilderDesc2=Chemin ou les modules sont générés/modifiés (premier répertoire pour les modules externes défini dans %s):%s ModuleBuilderDesc3=Modules générés/éditables trouvés : %s @@ -9,6 +10,7 @@ ModuleBuilderDesc4=Un module est détecté comme 'modifiable' quand le fichier < NewModule=Nouveau module NewObjectInModulebuilder=Nouvel objet NewDictionary=Nouveau dictionnaire +ModuleName=Nom du module ModuleKey=Clé du module ObjectKey=Clé de l'objet DicKey=Clé du dictionnaire @@ -48,6 +50,7 @@ PathToModulePackage=Chemin du zip du package du module/application PathToModuleDocumentation=Chemin d'accès au fichier de documentation du module (%s) SpaceOrSpecialCharAreNotAllowed=Les espaces et les caractères spéciaux ne sont pas autorisés. FileNotYetGenerated=Fichier non encore généré +GenerateCode=Générer le code RegenerateClassAndSql=Forcer la mise à jour des fichiers .class et .sql RegenerateMissingFiles=Générer les fichiers manquant SpecificationFile=Fichier de documentation @@ -86,10 +89,10 @@ ListOfMenusEntries=Liste des entrées du menu ListOfDictionariesEntries=Liste des entrées de dictionnaires ListOfPermissionsDefined=Liste des permissions SeeExamples=Voir des exemples ici -EnabledDesc=Condition pour que ce champ soit actif (Exemples: 1 ou $conf->global->MYMODULE_MYOPTION) -VisibleDesc=Le champ est-il visible ? (Exemples: 0 = Jamais visible, 1 = Visible sur les listes et formulaires de création/mise à jour/visualisation, 2 = Visible uniquement sur la liste, 3 = Visible uniquement sur le formulaire de création/mise à jour/affichage (pas les listes), 4=Visible sur les listes et formulaire de mise à jour et affichage uniquement (pas en création), 5=Visible sur les listes et formulaire en lecture (pas en création ni modification).

    Utiliser une valeur négative signifie que le champ n'est pas affiché par défaut sur la liste mais peut être sélectionné pour l'affichage).

    Il peut s'agir d'une expression, par exemple :
    preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
    ($user->rights->holiday->define_holiday ? 1 : 0) -DisplayOnPdfDesc=Afficher ce champ sur les documents PDF compatibles, vous pouvez gérer la position avec le champ "Position.
    Actuellement, les modèles compatibles PDF connus sont : eratostene (commande), espadon (expédition), sponge (factures), cyan (devis/propositions commerciales), cornas (commande fournisseur)

    Pour le document :
    0 = non affiché
    1 = affiché
    2 = affiché uniquement si non vide

    Pour les lignes de document :
    0 = non affiché
    1 = affiché dans une colonne
    3 = affiché dans la colonne description après la description
    4 = affiché dans la colonne description après la description uniquement si non vide -DisplayOnPdf=Afficher sur PDF +EnabledDesc=Condition pour que ce champs soit actif.

    Exemples:
    1
    isModEnabled('MAIN_MODULE_MYMODULE')
    getDolGlobalString('MYMODULE_OPTION')==2 +VisibleDesc=Le champ est-il visible ? (Exemples: 0=Jamais visible, 1=Visible sur les listes et formulaires de création/mise à jour/visualisation, 2=Visible uniquement sur les listes, 3=Visible uniquement sur le formulaire de création/mise à jour/affichage (pas les listes), 4=Visible sur les listes et formulaire de mise à jour et affichage uniquement (pas en création), 5=Visible sur les listes et formulaire en lecture (pas en création ni modification).

    Utiliser une valeur négative signifie que le champ n'est pas affiché par défaut sur la liste mais peut être sélectionné pour l'affichage).

    Il peut s'agir d'une expression, par exemple :
    preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
    $user->hasRight('holiday', 'define_holiday')?1:5 +DisplayOnPdfDesc=Affichez ce champ sur les documents PDF compatibles, vous pouvez gérer la position avec le champ "Position".
    Pour le document :
    0 = non affiché
    1 = affiché
    2 = affiché uniquement si non vide

    Pour les lignes de document :
    0 = non affiché
    1 = affiché dans une colonne
    3 = affiché dans la colonne description après la description
    4 = affiché dans la colonne description après la description uniquement si non vide +DisplayOnPdf=Sur les PDF IsAMeasureDesc=Peut-on cumuler la valeur du champ pour obtenir un total dans les listes ? (Exemples: 1 ou 0) SearchAllDesc=Le champ doit-il être utilisé pour effectuer une recherche à partir de l'outil de recherche rapide ? (Exemples: 1 ou 0) SpecDefDesc=Entrez ici toute la documentation que vous souhaitez joindre au module et qui n'a pas encore été définis dans d'autres onglets. Vous pouvez utiliser .md ou, mieux, la syntaxe enrichie .asciidoc. @@ -105,7 +108,7 @@ TriggerDefDesc=Définissez dans le fichier trigger le code que vous souhaitez ex SeeIDsInUse=Voir les IDs utilisés dans votre installation SeeReservedIDsRangeHere=Voir la plage des ID réservés ToolkitForDevelopers=Boîte à outils pour développeurs Dolibarr -TryToUseTheModuleBuilder=Si vous connaissez SQL et PHP, vous pouvez utiliser l'assistant de création de module natif.
    Activez le module %s et utilisez l'assistant en cliquant sur la . dans le menu en haut à droite.
    Avertissement: Il s'agit d'une fonctionnalité avancée pour les développeurs. Ne pas expérimenter sur votre site de production! +TryToUseTheModuleBuilder=Si vous connaissez SQL et PHP, vous pouvez utiliser l'assistant de création de module natif.
    Activez le module %s et utilisez l'assistant en cliquant sur la dans le menu en haut à droite.
    Avertissement: Il s'agit d'une fonctionnalité avancée pour les développeurs. Ne pas expérimenter sur votre site de production! SeeTopRightMenu=Voir à droite de votre barre de menu principal AddLanguageFile=Ajouter le fichier de langue YouCanUseTranslationKey=Vous pouvez utiliser ici une clé qui est la clé de traduction trouvée dans le fichier de langue (voir l'onglet "Langues") @@ -132,9 +135,9 @@ UseSpecificAuthor = Utiliser un auteur spécifique UseSpecificVersion = Utiliser une version initiale spécifique IncludeRefGeneration=La référence de l'objet doit être générée automatiquement par des règles de numérotation personnalisées IncludeRefGenerationHelp=Cochez cette case si vous souhaitez inclure du code pour gérer automatiquement la génération de la référence à l'aide de règles de numérotation personnalisées -IncludeDocGeneration=Je souhaite générer des documents à partir de modèles pour l'objet +IncludeDocGeneration=Je souhaite la fonctionnalité pour générer des documents (PDF, ODT) à partir de modèles pour cet objet IncludeDocGenerationHelp=Si vous cochez cette case, du code sera généré pour ajouter une section "Générer un document" sur la fiche de l'objet. -ShowOnCombobox=Afficher la valeur dans la liste déroulante +ShowOnCombobox=Afficher la valeur dans les listes déroulantes KeyForTooltip=Clé pour l'info-bulle CSSClass=CSS pour le formulaire d'édition / création CSSViewClass=CSS pour le formulaire de lecture @@ -154,3 +157,6 @@ ListOfTabsEntries=Liste des entrées d'onglet TabsDefDesc=Définissez ici les onglets proposés par votre module TabsDefDescTooltip=Les onglets fournis par votre module/application sont définis dans le tableau $this->tabs dans le fichier descripteur de module. Vous pouvez modifier manuellement ce fichier ou utiliser l'éditeur intégré. BadValueForType=Mauvaise valeur pour le type %s +DefinePropertiesFromExistingTable=Définir des propriétés à partir d'une table existante +DefinePropertiesFromExistingTableDesc=Si une table dans la base de données (pour l'objet à créer) existe déjà, vous pouvez l'utiliser pour définir les propriétés de l'objet. +DefinePropertiesFromExistingTableDesc2=Laisser vide si la table n'existe pas encore. Le générateur de code utilisera différents types de champs pour créer un exemple de table que vous pourrez modifier ultérieurement. diff --git a/htdocs/langs/fr_FR/mrp.lang b/htdocs/langs/fr_FR/mrp.lang index b9730cdb7f8..3cab2476a09 100644 --- a/htdocs/langs/fr_FR/mrp.lang +++ b/htdocs/langs/fr_FR/mrp.lang @@ -82,9 +82,7 @@ ProductsToProduce=Produits à produire UnitCost=Coût unitaire TotalCost=Coût total BOMTotalCost=Le coût de production de cette nomenclature basé sur chaque quantité et produit à consommer (utilise le prix de revient si défini, sinon le PMP si défini, sinon le meilleur prix d'achat) -BOMTotalCostService=Si le module "Poste de travail" est activé et qu'un poste de travail est défini par défaut sur la ligne, alors le calcul est "quantité (convertie en heures) x thm du poste de travail", sinon "quantité (convertie en heures) x prix de revient du service" -BOMProductsList=Liste des composants -BOMServicesList=Liste des services +BOMTotalCostService=Si le module "Poste de travail" est activé et qu'un poste de travail est défini par défaut sur la ligne, alors le calcul est "quantité (convertie en heures) x poste de travail ahr", sinon "quantité (convertie en heures) x prix de revient de la prestation" GoOnTabProductionToProduceFirst=Vous devez avoir la production pour clôturer un Ordre de Fabrication (voir onglet '%s'). Mais vous pouvez l'annuler. ErrorAVirtualProductCantBeUsedIntoABomOrMo=Un kit ne peut pas être utilisé dans une Nomenclature ou un Ordre de fabrication. Workstation=Poste de travail @@ -94,7 +92,6 @@ WorkstationSetup = Configuration du module Poste de travail WorkstationSetupPage = Configuration du module Poste de travail WorkstationList=Liste des postes de travail WorkstationCreate=Ajouter un nouveau poste de travail -DefaultWorkstation=Poste de travail par défaut ConfirmEnableWorkstation=Voulez-vous vraiment activer le poste de travail %s? EnableAWorkstation=Activer le module Poste de travail ConfirmDisableWorkstation=Voulez-vous vraiment désactiver la station de travail %s? @@ -113,7 +110,7 @@ THMEstimatedHelp=Ce taux permet de définir un coût prévisionnel de l'article BOM=Nomenclature CollapseBOMHelp=Vous pouvez définir l'affichage par défaut des détails de la nomenclature dans la configuration du module BOM MOAndLines=Ordres de fabrication et lignes -MoChildGenerate=Generate Child Mo -ParentMo=MO Parent -MOChild=MO Child -BomCantAddChildBom=La nomenclature %s est déjà présente dans l'arborescence qui mène à la nomenclature %s +MoChildGenerate=Générer OF enfant +ParentMo=OF parent +MOChild=OF Enfant +BomCantAddChildBom=La nomenclature %s est déjà présente dans l'arbre menant à la nomenclature %s diff --git a/htdocs/langs/fr_FR/oauth.lang b/htdocs/langs/fr_FR/oauth.lang index 95cb2958bcb..e884f616f39 100644 --- a/htdocs/langs/fr_FR/oauth.lang +++ b/htdocs/langs/fr_FR/oauth.lang @@ -9,8 +9,9 @@ HasAccessToken=Un jeton a été généré et sauvegardé dans la base de donnée NewTokenStored=Jeton reçu et sauvegardé ToCheckDeleteTokenOnProvider=Cliquer ici pour vérifier/effacer les autorisations sauvées par le fournisseur OAuth %s TokenDeleted=Jeton effacé +GetAccess=Cliquez ici pour obtenir un token RequestAccess=Cliquez ici pour demander/renouveler l'accès et recevoir un nouveau jeton -DeleteAccess=Cliquez ici pour effacer le jeton +DeleteAccess=Cliquez ici pour supprimer le jeton UseTheFollowingUrlAsRedirectURI=Utilisez l'URL suivante comme URI de redirection quand vous créez des identifiants d'accès chez votre fournisseur OAuth : ListOfSupportedOauthProviders=Ajoutez vos fournisseurs de jetons OAuth2. Ensuite, rendez-vous sur la page d'administration de votre fournisseur OAuth pour créer/obtenir un identifiant et un secret OAuth et enregistrez-les ici. Une fois cela fait, basculez sur l'autre onglet pour générer votre jeton. OAuthSetupForLogin=Page pour gérer (générer/supprimer) les jetons OAuth @@ -34,5 +35,6 @@ OAUTH_ID=ID OAuth OAUTH_SECRET=Code secret OAuth OAuthProviderAdded=Fournisseur OAuth ajouté AOAuthEntryForThisProviderAndLabelAlreadyHasAKey=Une entrée OAuth pour ce fournisseur et ce libellé existe déjà -ScopeUndefined=Permissions (Scopes) non définies (voir onglet précédent) -Scopes=Portées \ No newline at end of file +URLOfServiceForAuthorization=URL fournie par le service OAuth pour l'authentification +Scopes=Permissions ("Scopes" OAuth) +ScopeUndefined=Permissions (Cibles) non définies (voir onglet précédent) diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 7617085348e..6c714be2c4d 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -311,10 +311,10 @@ ExternalSiteURL=URL du site externe du contenu iFrame HTML ExternalSiteModuleNotComplete=La configuration du module "Site externe" est incomplète. ExampleMyMenuEntry=Mon entrée de menu -# FTP +# ftp FTPClientSetup=Connexion client FTP/FTPS NewFTPClient=Nouvelle connexion FTP/FTPS -FTPArea=Zone des connexions FTP/FTPS +FTPArea=Zone FTP/SFTP FTPAreaDesc=Vue d'un serveur FTP/FTPS SetupOfFTPClientModuleNotComplete=La configuration du client FTP/FTPS semble incomplète FTPFeatureNotSupportedByYourPHP=Votre version de PHP ne supporte pas les fonctions FTP/FTPS @@ -325,3 +325,9 @@ FTPFailedToRemoveDir=Échec suppression répertoire %s (Vérifiez les per FTPPassiveMode=Mode passif ChooseAFTPEntryIntoMenu=Sélection d'un site FTP/FTPS depuis le menu FailedToGetFile=Echec à la récupération du fichier %s +ErrorFTPNodisconnect=Erreur de déconnexion du serveur FTP/SFTP +FileWasUpload=Le fichier %s a été téléchargé +FTPFailedToUploadFile=Impossible de télécharger le fichier %s. +AddFolder=Créer un dossier +FileWasCreateFolder=Le dossier %s a été créé +FTPFailedToCreateFolder=Échec de la création du dossier %s. diff --git a/htdocs/langs/fr_FR/partnership.lang b/htdocs/langs/fr_FR/partnership.lang index 845bf4ff36c..41849e2812e 100644 --- a/htdocs/langs/fr_FR/partnership.lang +++ b/htdocs/langs/fr_FR/partnership.lang @@ -28,6 +28,7 @@ PartnershipCheckBacklink=Partenariat : Vérifiez le backlink référent # Menu # NewPartnership=Nouveau partenariat +NewPartnershipbyWeb= Votre partenariat a été ajouté avec succès. ListOfPartnerships=Listes des partenariats # @@ -42,6 +43,7 @@ PARTNERSHIP_BACKLINKS_TO_CHECK=Liens de retour à vérifier PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=Nb de jours avant l'annulation de l'état d'un partenariat lorsque la cotisation a expiré ReferingWebsiteCheck=Vérification du site référent ReferingWebsiteCheckDesc=Vous pouvez activer une fonctionnalité pour vérifier que vos partenaires ont ajouté un rétrolien vers les domaines de votre site Web sur leur propre site Web. +PublicFormRegistrationPartnerDesc=Dolibarr peut vous fournir une URL/un site Web public pour permettre aux visiteurs externes de demander à faire partie du programme de partenariat. # # Object @@ -59,6 +61,12 @@ BacklinkNotFoundOnPartnerWebsite=Lien de retour non trouvé sur le site web part ConfirmClosePartnershipAsk=Êtes-vous sûr de vouloir annuler ce partenariat ? PartnershipType=Type de partenariat PartnershipRefApproved=Partenariat %s approuvé +KeywordToCheckInWebsite=Si vous souhaitez vérifier qu'un mot-clé donné est présent dans le site de chaque partenaire, définissez ce mot-clé ici +PartnershipDraft=Brouillon +PartnershipAccepted=Accepté +PartnershipRefused=Refusé +PartnershipCanceled=Annulé +PartnershipManagedFor=Les partenaires sont # # Template Mail @@ -82,11 +90,6 @@ CountLastUrlCheckError=Nombre d'erreurs lors de la dernière vérification d'URL LastCheckBacklink=Date de la dernière vérification d'URL ReasonDeclineOrCancel=Raison du refus -# -# Status -# -PartnershipDraft=Brouillon -PartnershipAccepted=Accepté -PartnershipRefused=Refusé -PartnershipCanceled=Annulé -PartnershipManagedFor=Les partenaires sont +NewPartnershipRequest=Nouvelle demande de partenariat +NewPartnershipRequestDesc=Ce formulaire vous permet de demander à faire partie de l'un de nos programmes de partenariat. Si vous avez besoin d'aide pour remplir ce formulaire, veuillez contacter par email %s . + diff --git a/htdocs/langs/fr_FR/paypal.lang b/htdocs/langs/fr_FR/paypal.lang index 0fdb3e38d20..be600a2671b 100644 --- a/htdocs/langs/fr_FR/paypal.lang +++ b/htdocs/langs/fr_FR/paypal.lang @@ -34,3 +34,4 @@ ARollbackWasPerformedOnPostActions=Une annulation a été effectuée sur toutes ValidationOfPaymentFailed=La validation du paiement a échoué CardOwner=Titulaire de la carte PayPalBalance=Crédit Paypal +OnlineSubscriptionPaymentLine=Cotisation en ligne enregistrée sur %s
    Payé via %s
    Adresse IP d'origine : %s
    ID de transaction : %s diff --git a/htdocs/langs/fr_FR/productbatch.lang b/htdocs/langs/fr_FR/productbatch.lang index 68b5e928084..8493e419384 100644 --- a/htdocs/langs/fr_FR/productbatch.lang +++ b/htdocs/langs/fr_FR/productbatch.lang @@ -1,8 +1,8 @@ # ProductBATCH language file - Source file is en_US - ProductBATCH ManageLotSerial=Utiliser les numéros de lots/série -ProductStatusOnBatch=Oui (Lot/Série requis) +ProductStatusOnBatch=Oui (lot/série requis) ProductStatusOnSerial=Oui (numéro de série unique requis) -ProductStatusNotOnBatch=Non (Lot/Série non utilisé) +ProductStatusNotOnBatch=Non (lot/série non utilisé) ProductStatusOnBatchShort=Lot ProductStatusOnSerialShort=Numéro Série ProductStatusNotOnBatchShort=Non @@ -17,6 +17,7 @@ printBatch=Lot/Série: %s printEatby=DMD/DLUO: %s printSellby=DLC: %s printQty=Qté: %d +printPlannedWarehouse=Entrepôt : %s AddDispatchBatchLine=Ajouter une ligne pour la répartition par durée de conservation WhenProductBatchModuleOnOptionAreForced=Quand le module Lot/Série est activé, le mode de décrémentation automatique des stocks est forcé sur 'Décrémenter les stocks réel sur validation d'expédition' et le mode d'incrémentation automatique de stocks est forcé sur 'Incrémenter les stocks réels sur ventilation manuels dans les entrepôts' et ne peut pas être édité. Les autres options peuvent être définies comme vous le voulez. ProductDoesNotUseBatchSerial=Ce produit n'utilise pas les numéros de lot/série @@ -43,4 +44,4 @@ HideLots=Masquer les lots OutOfOrder=Hors d'usage InWorkingOrder=En état de marche ToReplace=Remplacer -CantMoveNonExistantSerial=Erreur : Vous avez demandé un mouvement sur un numéro de série qui n’existe plus. Peut-être avez-vous requis le même numéro de série plusieurs fois dans une même expédition, ou il a déjà servi dans une autre expédition. Supprimez cette expédition et préparez-en une autre. +CantMoveNonExistantSerial=Erreur : un numéro de série sur lequel vous avez demandé un mouvement n'existe plus. Peut-être avez-vous utilisé plusieurs fois le même numéro de série depuis le même entrepôt sur la même expédition, ou peut-être était-il utilisé sur une autre expédition. Supprimez cette expédition et préparez-en une autre. diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index 3e7eece5d0e..9061f0498fc 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -140,7 +140,7 @@ PriceQtyMin=Prix quantité min. PriceQtyMinCurrency=Prix (devise) pour cette quantité. WithoutDiscount=Sans remise VATRateForSupplierProduct=Taux TVA (pour ce produit/fournisseur) -DiscountQtyMin=Remise par défaut quantité min. +DiscountQtyMin=Remise pour cette qté. NoPriceDefinedForThisSupplier=Aucun prix/qté défini pour ce fournisseur/produit NoSupplierPriceDefinedForThisProduct=Aucun prix/qté fournisseur défini pour ce produit PredefinedItem=Article prédéfini @@ -345,7 +345,7 @@ PossibleValues=Valeurs possibles GoOnMenuToCreateVairants=Allez sur le menu %s - %s pour ajouter les attributs de variantes (comme les couleurs, tailles, ...) UseProductFournDesc=Ajouter une fonctionnalité pour définir la description produit définie par les vendeurs (pour chaque référence vendeur) en plus de la description pour les clients ProductSupplierDescription=Description du fournisseur du produit -UseProductSupplierPackaging=Utiliser le conditionnement/emballage sur les prix fournisseur (recalculer les quantités en fonction de l'emballage défini sur le prix fournisseur lors de l'ajout / mise à jour de la ligne dans les documents fournisseurs) +UseProductSupplierPackaging=Utiliser l'emballage pour les prix arrondis aux multiples pour les prix d'achat (recalculer les quantités en fonction des multiples définis sur les prix d'achat lors de l'ajout/de la mise à jour d'une ligne dans les documents d'un fournisseur) PackagingForThisProduct=Conditionnement PackagingForThisProductDesc=Vous achèterez automatiquement un multiple de cette quantité. QtyRecalculatedWithPackaging=La quantité de la ligne a été recalculée en fonction de l'emballage du fournisseur @@ -417,7 +417,6 @@ ErrorsProductsMerge=Erreur lors de la fusion des produits SwitchOnSaleStatus=Basculer le statut En vente SwitchOnPurchaseStatus=Basculer le statut En achat StockMouvementExtraFields= Champs supplémentaires (mouvement de stock) -OrProductsWithCategories=Ou produits avec tags/categories InventoryExtraFields= Attributs supplémentaires (inventaire) ScanOrTypeOrCopyPasteYourBarCodes=Scannez ou tapez ou copiez/collez vos codes-barres PuttingPricesUpToDate=Mise à jour des prix avec les prix connus actuels @@ -428,3 +427,4 @@ RealValuation=Valorisation réelle ConfirmEditExtrafield = Sélectionnez l'extrafield que vous souhaitez modifier ConfirmEditExtrafieldQuestion = Voulez-vous vraiment modifier cet extrafield ? ModifyValueExtrafields = Modifier la valeur d'un extrafield +OrProductsWithCategories=Ou des produits avec des tags/catégories diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index af97ce451bb..90fe82c2ffb 100644 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -167,7 +167,7 @@ OpportunityAmount=Montant opportunité OpportunityAmountShort=Montant opportunité OpportunityWeightedAmount=Montant pondéré des opportunités OpportunityWeightedAmountShort=Montant pondéré opp. -OpportunityAmountAverageShort=montant moyen des opportunités +OpportunityAmountAverageShort=Montant moyen des opportunités OpportunityAmountWeigthedShort=Montant pondéré des opportunités WonLostExcluded=hors opportunités remportées/perdues ##### Types de contacts ##### @@ -259,7 +259,7 @@ TimeSpentInvoiced=Temps passé facturé TimeSpentForIntervention=Temps consommé TimeSpentForInvoice=Temps consommés OneLinePerUser=Une ligne par utilisateur -ServiceToUseOnLines=Service à utiliser sur les lignes +ServiceToUseOnLines=Service à utiliser sur les lignes par défaut InvoiceGeneratedFromTimeSpent=La facture %s a été générée à partir du temps passé sur le projet InterventionGeneratedFromTimeSpent=L'intervention %s a été générée à partir du temps consacré au projet ProjectBillTimeDescription=Cochez si vous saisissez du temps sur les tâches du projet ET prévoyez de générer des factures à partir des temps pour facturer le client du projet (ne cochez pas si vous comptez créer une facture qui n'est pas basée sur la saisie des temps). Note: Pour générer une facture, aller sur l'onglet 'Temps consommé' du project et sélectionnez les lignes à inclure. @@ -294,3 +294,4 @@ EnablePublicLeadForm=Activer le formulaire public de contact NewLeadbyWeb=Votre message ou votre demande a été enregistré. Nous vous répondrons ou vous contacterons bientôt. NewLeadForm=Nouveau formulaire de contact LeadFromPublicForm=Lead en ligne à partir d'un formulaire public +ExportAccountingReportButtonLabel=Obtenir un rapport diff --git a/htdocs/langs/fr_FR/propal.lang b/htdocs/langs/fr_FR/propal.lang index 4c44d0691c3..93bfd82a24e 100644 --- a/htdocs/langs/fr_FR/propal.lang +++ b/htdocs/langs/fr_FR/propal.lang @@ -47,7 +47,7 @@ SendPropalByMail=Envoyer proposition commerciale par email DatePropal=Date de proposition DateEndPropal=Date de fin de validité ValidityDuration=Durée de validité -SetAcceptedRefused=Accepter/Refuser +SetAcceptedRefused=Accepter/Refuser ErrorPropalNotFound=Propale %s inexistante AddToDraftProposals=Ajouter à proposition brouillon NoDraftProposals=Pas de propositions brouillons diff --git a/htdocs/langs/fr_FR/receiptprinter.lang b/htdocs/langs/fr_FR/receiptprinter.lang index 6c313e08dd8..6964eb61308 100644 --- a/htdocs/langs/fr_FR/receiptprinter.lang +++ b/htdocs/langs/fr_FR/receiptprinter.lang @@ -7,7 +7,7 @@ TestSentToPrinter=Test envoyé à l'imprimante %s ReceiptPrinter=Imprimantes Tickets ReceiptPrinterDesc=Réglage des imprimantes de tickets ReceiptPrinterTemplateDesc=Réglage des modèles -ReceiptPrinterTypeDesc=Description des types d'imprimantes de tickets +ReceiptPrinterTypeDesc=Exemple de valeurs possibles pour le champ "Paramètres" selon le type de driver ReceiptPrinterProfileDesc=Description des imprimantes de tickets ListPrinters=Liste des imprimantes SetupReceiptTemplate=Réglage des modèles @@ -54,7 +54,9 @@ DOL_DOUBLE_WIDTH=Double la taille en largeur DOL_DEFAULT_HEIGHT_WIDTH=Hauteur et largeur par défaut  DOL_UNDERLINE=Activer le souligné DOL_UNDERLINE_DISABLED=Désactiver le souligné -DOL_BEEP=Bruit de fond +DOL_BEEP=Notification sonore +DOL_BEEP_ALTERNATIVE=Bip sonore (mode alternatif) +DOL_PRINT_CURR_DATE=Imprimer la date/l'heure actuelle DOL_PRINT_TEXT=Imprimer le texte DateInvoiceWithTime=Date et heure de facturation YearInvoice=Année de facturation diff --git a/htdocs/langs/fr_FR/receptions.lang b/htdocs/langs/fr_FR/receptions.lang index 30ac8e985bc..5411fc7142f 100644 --- a/htdocs/langs/fr_FR/receptions.lang +++ b/htdocs/langs/fr_FR/receptions.lang @@ -48,7 +48,6 @@ ReceptionsNumberingModules=Module de numérotation pour les réceptions ReceptionsReceiptModel=Modèles de document pour les réceptions NoMorePredefinedProductToDispatch=Plus de produits prédéfinis à expédier ReceptionExist=Une réception existe -ByingPrice=Prix d'achat ReceptionBackToDraftInDolibarr=Réception %s retourné en brouillon ReceptionClassifyClosedInDolibarr=Reception %s classée Fermée ReceptionUnClassifyCloseddInDolibarr=Réception %s ré-ouverte diff --git a/htdocs/langs/fr_FR/recruitment.lang b/htdocs/langs/fr_FR/recruitment.lang index f2d8df78aa3..1525b06d5b3 100644 --- a/htdocs/langs/fr_FR/recruitment.lang +++ b/htdocs/langs/fr_FR/recruitment.lang @@ -57,8 +57,9 @@ EmailRecruiter=Email recruteur ToUseAGenericEmail=Pour utiliser un e-mail générique. S'il n'est pas défini, l'email du responsable du recrutement sera utilisé NewCandidature=Nouvelle candidature ListOfCandidatures=Liste des candidatures -RequestedRemuneration=Rémunération demandée -ProposedRemuneration=Rémunération proposée +Remuneration=Salaire +RequestedRemuneration=Salaire demandé +ProposedRemuneration=Salaire proposé ContractProposed=Contrat proposé ContractSigned=Contrat signé ContractRefused=Contrat refusé @@ -74,3 +75,5 @@ JobClosedTextCanceled=Le poste n'est plus ouvert. ExtrafieldsJobPosition=Attributs complémentaires (postes) ExtrafieldsApplication=Attributs complémentaires (candidature) MakeOffer=Faire un offre +WeAreRecruiting=Nous recrutons. Voici une liste de postes à pourvoir... +NoPositionOpen=Aucun poste ouvert pour le moment diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 2b3559787d3..a0d91884279 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -24,6 +24,7 @@ StockAtDateInFuture=Date dans le futur StocksByLotSerial=Stocks par lot/série LotSerial=Lots/séries LotSerialList=Liste des numéros de lots/séries +SubjectToLotSerialOnly=Produits soumis au lot/série uniquement Movements=Mouvements ErrorWarehouseRefRequired=Le nom de référence de l'entrepôt est obligatoire ListOfWarehouses=Liste des entrepôts @@ -234,7 +235,7 @@ StockIncrease=Augmentation du stock StockDecrease=Diminution du stock InventoryForASpecificWarehouse=Inventaire pour un entrepôt spécifique InventoryForASpecificProduct=Inventaire pour un produit spécifique -StockIsRequiredToChooseWhichLotToUse=Un stock existant est requis pour pouvoir choisir un lot +StockIsRequiredToChooseWhichLotToUse=Un stock existant est nécessaire pour pouvoir choisir le lot à utiliser ForceTo=Forcer à AlwaysShowFullArbo=Afficher l'arborescence complète de l'entrepôt sur la popup du lien entrepôt (Avertissement: cela peut réduire considérablement les performances) StockAtDatePastDesc=Vous pouvez voir ici le stock (stock réel) à une date donnée dans le passé diff --git a/htdocs/langs/fr_FR/suppliers.lang b/htdocs/langs/fr_FR/suppliers.lang index 0998191b0a2..f73df3434c9 100644 --- a/htdocs/langs/fr_FR/suppliers.lang +++ b/htdocs/langs/fr_FR/suppliers.lang @@ -4,6 +4,7 @@ SuppliersInvoice=Facture fournisseur SupplierInvoices=Factures fournisseur ShowSupplierInvoice=Montrer la facture fournisseur NewSupplier=Nouveau fournisseur +NewSupplierInvoice = Nouvelle facture du vendeur History=Historique ListOfSuppliers=Liste des fournisseurs ShowSupplier=Afficher fournisseur diff --git a/htdocs/langs/fr_FR/ticket.lang b/htdocs/langs/fr_FR/ticket.lang index 3f5be72e1d9..be78d74f2a8 100644 --- a/htdocs/langs/fr_FR/ticket.lang +++ b/htdocs/langs/fr_FR/ticket.lang @@ -149,6 +149,8 @@ TicketsAutoNotifyCloseHelp=Lors de la clôture d'un ticket, il vous sera propos TicketWrongContact=Le contact fourni ne fait pas partie des contacts actuels du ticket. E-mail non envoyé. TicketChooseProductCategory=Catégorie de produit pour les tickets TicketChooseProductCategoryHelp=Sélectionnez la catégorie de produit du support de ticket. Celui-ci sera utilisé pour lier automatiquement un contrat à un ticket. +TicketUseCaptchaCode=Utiliser le code graphique (CAPTCHA) lors de la création d'un ticket +TicketUseCaptchaCodeHelp=Ajoute la vérification CAPTCHA lors de la création d'un nouveau ticket. # # Index & list page @@ -204,8 +206,8 @@ TicketSeverity=Sévérité ShowTicket=Voir le ticket RelatedTickets=Tickets liés TicketAddIntervention=Créer intervention -CloseTicket=Fermer|Résoudre ticket -AbandonTicket=Abandonner le ticket +CloseTicket=Fermer|Résoudre +AbandonTicket=Abandonner CloseATicket=Fermer|Résoudre un ticket ConfirmCloseAticket=Confirmer la fermeture du ticket ConfirmAbandonTicket=Confirmez-vous la fermeture du ticket au statut 'Abandonné' @@ -219,18 +221,17 @@ SendMessageByEmail=Envoyer ce message par email TicketNewMessage=Nouveau message ErrorMailRecipientIsEmptyForSendTicketMessage=Le destinataire est vide. Aucun e-mail envoyé TicketGoIntoContactTab=Rendez-vous dans le tableau "Contacts" pour les sélectionner -TicketMessageMailIntro=Introduction +TicketMessageMailIntro=Entête de message TicketMessageMailIntroHelp=Ce texte est ajouté seulement au début de l'email et ne sera pas sauvegardé. -TicketMessageMailIntroLabelAdmin=Texte d'introduction à toutes les réponses aux tickets TicketMessageMailIntroText=Bonjour,
    Une nouvelle réponse a été ajoutée à un ticket que vous suivez. Voici le message :
    TicketMessageMailIntroHelpAdmin=Ce texte sera inséré avant la réponse lors d'une réponse à un ticket depuis Dolibarr -TicketMessageMailSignature=Signature -TicketMessageMailSignatureHelp=Ce texte est ajouté seulement à la fin de l'email et ne sera pas sauvegardé. -TicketMessageMailSignatureText=Message envoyé par %s via Dolibarr -TicketMessageMailSignatureLabelAdmin=Signature de l'email de réponse -TicketMessageMailSignatureHelpAdmin=Ce texte sera inséré après le message de réponse. +TicketMessageMailFooter=Pied de page des messages +TicketMessageMailFooterHelp=Ce texte est ajouté uniquement à la fin du message envoyé par e-mail et ne sera pas enregistré. +TicketMessageMailFooterText=Message envoyé par %s via Dolibarr +TicketMessageMailFooterHelpAdmin=Ce texte sera inséré après le message de réponse. TicketMessageHelp=Seul ce texte sera sauvegardé dans la liste des messages sur la fiche ticket. TicketMessageSubstitutionReplacedByGenericValues=Les variables de substitution sont remplacées par des valeurs génériques. +ForEmailMessageWillBeCompletedWith=Pour les e-mails envoyés à des utilisateurs externes, le message sera complété par TimeElapsedSince=Temps écoulé depuis TicketTimeToRead=Temps écoulé avant la lecture TicketTimeElapsedBeforeSince=Temps écoulé avant / depuis @@ -296,7 +297,7 @@ TicketNewEmailBodyInfosTrackUrlCustomer=Vous pouvez voir la progression du ticke TicketCloseEmailBodyInfosTrackUrlCustomer=Vous pouvez consulter l'historique de ce ticket en cliquant sur le lien suivant TicketEmailPleaseDoNotReplyToThisEmail=Merci de ne pas répondre directement à ce courriel ! Utilisez le lien pour répondre via l'interface. TicketPublicInfoCreateTicket=Ce formulaire vous permet d'enregistrer un ticket dans notre système de gestion. -TicketPublicPleaseBeAccuratelyDescribe=Veuillez décrire avec précision le problème. Fournissez le plus d'informations possibles pour nous permettre d'identifier correctement votre demande. +TicketPublicPleaseBeAccuratelyDescribe=Veuillez décrire précisément votre question. Fournissez le plus d'informations possible pour nous permettre d'identifier correctement votre demande. TicketPublicMsgViewLogIn=Merci d'entrer le code de suivi du ticket TicketTrackId=ID de suivi publique OneOfTicketTrackId=Un de vos ID de suivi diff --git a/htdocs/langs/fr_FR/users.lang b/htdocs/langs/fr_FR/users.lang index 5888332a820..4840c05740a 100644 --- a/htdocs/langs/fr_FR/users.lang +++ b/htdocs/langs/fr_FR/users.lang @@ -68,7 +68,6 @@ CreateDolibarrLogin=Créer un compte utilisateur CreateDolibarrThirdParty=Créer un tiers LoginAccountDisableInDolibarr=Le compte est désactivé sur Dolibarr. UsePersonalValue=Utiliser valeur personnalisée -InternalUser=Utilisateur interne ExportDataset_user_1=Utilisateurs et attributs DomainUser=Utilisateur du domaine %s Reactivate=Réactiver diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index 53e07d0dd2e..c46c3b33e37 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - website Shortname=Code +WebsiteName=Nom du site web WebsiteSetupDesc=Créez ici les sites Web que vous souhaitez utiliser. Ensuite, allez dans le menu Sites Web pour les éditer. DeleteWebsite=Effacer site web ConfirmDeleteWebsite=Êtes-vous sûr de vouloir supprimer ce site web. Toutes les pages et le contenu seront également supprimés. Les fichiers téléversés (comme ceux dans le répertoire medias, dans le module GED, ...) seront conservés. @@ -15,9 +16,9 @@ WEBSITE_HTML_HEADER=Ajout en bas de l'en-tête HTML (commun à toutes les pages) WEBSITE_ROBOT=Fichier robot (robots.txt) WEBSITE_HTACCESS=Fichier .htaccess du site web WEBSITE_MANIFEST_JSON=Fichier manifest.json de site Web -WEBSITE_README=Fichier README.md WEBSITE_KEYWORDSDesc=Utiliser une virgule pour séparer les valeurs -EnterHereLicenseInformation=Entrez ici les métadonnées ou les informations de licence pour créer un fichier README.md. Si vous distribuez votre site Web en tant que modèle, le fichier sera inclus dans le package. +EnterHereReadmeInformation=Entrez ici une description du site Web. Si vous distribuez votre site Web en tant que modèle, le fichier sera inclus dans le package de modèles. +EnterHereLicenseInformation=Entrez ici la LICENCE du code du site Web. Si vous distribuez votre site Web en tant que modèle, le fichier sera inclus dans le package de modèles. HtmlHeaderPage=En-tête HTML (spécifique pour la page uniquement) PageNameAliasHelp=Nom ou alias de la page.
    Cet alias est également utilisé pour forger une URL SEO lorsque le site Web est exécuté à partir d'un hôte virtuel d'un serveur Web (comme Apache, Nginx, ...). Utilisez le bouton "%s" pour modifier cet alias. EditTheWebSiteForACommonHeader=Remarque: Si vous souhaitez définir un en-tête personnalisé pour toutes les pages, modifiez l'en-tête au niveau du site plutôt qu'au niveau page/container. @@ -42,6 +43,8 @@ ViewPageInNewTab=Pré-visualiser la page dans un nouvel onglet SetAsHomePage=Définir comme page d'accueil RealURL=URL réelle ViewWebsiteInProduction=Pré-visualiser le site web en utilisant l'URL de la page d'accueil +Virtualhost=Hôte virtuel ou nom de domaine +VirtualhostDesc=Le nom de l'hôte virtuel ou du domaine (par exemple : www.mywebsite.com, mybigcompany.net, ...) SetHereVirtualHost= Utilisation avec Apache/NGinx/...
    Créez sur votre serveur Web (Apache, Nginx, ...) un hôte virtuel dédié avec PHP activé et un répertoire racine sur
    %s ExampleToUseInApacheVirtualHostConfig=Exemple à utiliser dans la configuration de l'hôte virtuel Apache: YouCanAlsoTestWithPHPS= Utilisation avec un serveur PHP incorporé
    Sous environnement de développement, vous pouvez préférer tester le site avec le serveur Web PHP intégré (PHP 5.5 requis) en exécutant
    php -S 0.0.0.0:8080 -t %s @@ -145,3 +148,6 @@ ImportFavicon=Favicon ErrorFaviconType=Le Favicon doit être en png ErrorFaviconSize=Le Favicon doit être de taille 16x16, 32x32 ou 64x64 FaviconTooltip=Téléverser une image qui doit être au format png (16x16, 32x32 ou 64x64) +NextContainer=Page/conteneur suivant(e) +PreviousContainer=Page/conteneur précédent(e) +WebsiteMustBeDisabled=Le site Web doit avoir le statut "désactivé" diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang index f91ffbd55f3..8b6e6aa317e 100644 --- a/htdocs/langs/fr_FR/withdrawals.lang +++ b/htdocs/langs/fr_FR/withdrawals.lang @@ -42,6 +42,7 @@ CreditTransferStatistics=Statistiques sur les virements Rejects=Rejets LastWithdrawalReceipt=Les %s derniers bons de prélèvements MakeWithdrawRequest=Faire une demande de prélèvement +MakeWithdrawRequestStripe=Faire une demande de paiement par prélèvement automatique via Stripe MakeBankTransferOrder=Faire une demande de virement WithdrawRequestsDone=%s demandes de prélèvements enregistrées BankTransferRequestsDone=%s demandes de prélèvements enregistrées @@ -100,8 +101,11 @@ CreditDate=Crédité le WithdrawalFileNotCapable=Impossible de générer le fichier de reçu des prélèvement pour votre pays %s (Votre pays n'est pas supporté) ShowWithdraw=Afficher ordre de prélèvement IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Toutefois, si la facture a au moins une demande de prélèvement non traité, elle ne sera pas classée payée afin de permettre le prélèvement d'abord. -DoStandingOrdersBeforePayments=Cet onglet vous permet de demander un prélèvement. Une fois la demande faite, allez dans le menu Banque->Paiement par prélèvement pour générer l'ordre de prélèvement. Lorsque l'ordre de paiement est clos, le paiement sur les factures seront automatiquement enregistrés, et les factures fermées si le reste à payer est nul. -DoCreditTransferBeforePayments=Cet onglet vous permet de demander un ordre de virement. Une fois fait, allez dans le menu Banque ->Paiements par virement pour gérer l'ordre de virement. Lorsque le virement est clôturé, le paiement des factures fournisseurs sera automatiquement enregistré et les factures clôturées si le solde à payer est nul. +DoStandingOrdersBeforePayments=Cet onglet vous permet de demander un ordre de prélèvement automatique. Une fois cela fait, vous pouvez vous rendre dans le menu "Banque->Paiement par prélèvement" pour générer et gérer un fichier d'ordre de prélèvement. +DoStandingOrdersBeforePayments2=Vous pouvez également envoyer une demande directement à un processeur de paiement SEPA comme Stripe, ... +DoStandingOrdersBeforePayments3=Lors de la clôture d'un ordre de prélèvement, le règlement des factures sera automatiquement enregistré, et les factures clôturées si le reste à payer est nul. +DoCreditTransferBeforePayments=Cet onglet vous permet de demander un ordre de virement. Une fois cela fait, allez dans le menu "Banque->Paiement par virement" pour générer et gérer un fichier d'ordre de virement. +DoCreditTransferBeforePayments3=A la clôture de l'ordre de virement, le règlement des factures sera automatiquement enregistré, et les factures clôturées si le reste à payer est nul. WithdrawalFile=Fichier de prélèvement CreditTransferFile=Fichier de virement SetToStatusSent=Mettre au statut "Fichier envoyé" @@ -118,7 +122,7 @@ WithdrawRequestErrorNilAmount=Impossible de créer une demande de prélèvement SepaMandate=Mandat prélèvement SEPA SepaMandateShort=Mandat SEPA PleaseReturnMandate=Merci de retourner ce formulaire mandat par email à %s ou par courrier à -SEPALegalText=En signant ce formulaire de mandat, vous autorisez (A) %s à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément aux instructions de %s. Dans le cadre de vos droits, vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Vos droits concernant le mandat ci-dessus sont expliqués dans une déclaration que vous pouvez obtenir auprès de votre banque. +SEPALegalText=En signant ce formulaire de mandat, vous autorisez (A) %s et son prestataire de services de paiement à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément aux instructions de %s. Dans le cadre de vos droits, vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Vos droits concernant le mandat ci-dessus sont expliqués dans une déclaration que vous pouvez obtenir auprès de votre banque. CreditorIdentifier=Identifiant créditeur CreditorName=Nom du créditeur SEPAFillForm=(B) Remplir tous les champs marqués * @@ -137,7 +141,7 @@ SEPAFRST=SEPA FRST ExecutionDate=Date d'éxecution CreateForSepa=Créer fichier de prélèvement automatique ICS=Identifiant du créancier - ICS -IDS=Debitor Identifier +IDS=Identifiant débiteur END_TO_END=Balise XML SEPA "EndToEndId" - Identifiant unique attribué par transaction USTRD=Balise XML SEPA "Non structurée" ADDDAYS=Ajouter des jours à la date d'exécution @@ -156,4 +160,4 @@ ErrorICSmissing=ICS manquant pour le compte bancaire %s TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Le montant total de l'ordre de prélèvement diffère de la somme des lignes WarningSomeDirectDebitOrdersAlreadyExists=Attention : Il y a déjà des ordres de prélèvement automatique en attente (%s) demandés pour un montant de %s WarningSomeCreditTransferAlreadyExists=Attention : Il y a déjà des virements en attente (%s) demandés pour un montant de %s -UsedFor=Used for %s +UsedFor=Utilisé pour %s diff --git a/htdocs/langs/it_CH/accountancy.lang b/htdocs/langs/it_CH/accountancy.lang deleted file mode 100644 index 44c4229cd8b..00000000000 --- a/htdocs/langs/it_CH/accountancy.lang +++ /dev/null @@ -1,3 +0,0 @@ -# Dolibarr language file - Source file is en_US - accountancy -ExportAccountingSourceDocHelp=With this tool, you can search and export the source events that are used to generate your accountancy.
    The exported ZIP file will contain the lists of requested items in CSV, as well as their attached files in their original format (PDF, ODT, DOCX...). -NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "%s" feature, modification and deletion of the lines will DEFINITELY not be possible) diff --git a/htdocs/langs/nl_BE/admin.lang b/htdocs/langs/nl_BE/admin.lang index 29adcec7d4d..96a2c46c4ed 100644 --- a/htdocs/langs/nl_BE/admin.lang +++ b/htdocs/langs/nl_BE/admin.lang @@ -192,7 +192,6 @@ LibraryToBuildPDF=Bibliotheek om PDF bestanden te genereren. RefreshPhoneLink=Herladen link SetAsDefault=Instellen als standaard BarcodeInitForProductsOrServices=Mass barcode init of reset voor producten of diensten -InitEmptyBarCode=Init value for the %s empty barcodes NoDetails=Geen aanvullende details in voettekst DisplayCompanyInfo=Bedrijfsadres weergeven DisplayCompanyManagers=Namen van beheerders weergeven diff --git a/htdocs/langs/nl_BE/commercial.lang b/htdocs/langs/nl_BE/commercial.lang index d949aad6bac..fae3f5e6ae7 100644 --- a/htdocs/langs/nl_BE/commercial.lang +++ b/htdocs/langs/nl_BE/commercial.lang @@ -11,8 +11,5 @@ ActionAC_COM=Verzend verkooporder per mail ActionAC_SUP_ORD=Verzend bestelling per mail ActionAC_SUP_INV=Stuur leveranciersfactuur per mail ToOfferALinkForOnlineSignature=Link voor online handtekening -WelcomeOnOnlineSignaturePage=Welkom op deze pagina om commerciële voorstellen van %s te accepteren -ThisScreenAllowsYouToSignDocFrom=Met dit scherm kunt u een offerte / commercieel voorstel accepteren en ondertekenen of weigeren -ThisIsInformationOnDocumentToSign=In dit document is informatie om te accepteren of te weigeren SignatureProposalRef=Handtekening van offerte / commercieel voorstel %s FeatureOnlineSignDisabled=Functie voor online ondertekenen uitgeschakeld of het document is gegenereerd voordat de functie was ingeschakeld diff --git a/htdocs/langs/nl_BE/ticket.lang b/htdocs/langs/nl_BE/ticket.lang index 37e0550685c..30a0241a7d4 100644 --- a/htdocs/langs/nl_BE/ticket.lang +++ b/htdocs/langs/nl_BE/ticket.lang @@ -67,7 +67,6 @@ SendMessageByEmail=Stuur bericht per e-mail ErrorMailRecipientIsEmptyForSendTicketMessage=Ontvanger is leeg. Geen e-mail verzonden TicketMessageMailIntro=Inleiding TicketMessageMailIntroHelp=Deze tekst wordt alleen aan het begin van de e-mail toegevoegd en wordt niet opgeslagen. -TicketMessageMailSignatureLabelAdmin=Handtekening van reactie-e-mail TicketMessageHelp=Alleen deze tekst wordt opgeslagen in de berichtenlijst van het ticket. TicketMessageSubstitutionReplacedByGenericValues=Vervangingenvariabelen worden vervangen door generieke waarden. TimeElapsedSince=tijd verstreken sinds diff --git a/htdocs/langs/pt_AO/projects.lang b/htdocs/langs/pt_AO/projects.lang deleted file mode 100644 index f5f817beac1..00000000000 --- a/htdocs/langs/pt_AO/projects.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - projects -ServiceToUseOnLines=Service to use on lines by default diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang index d2ab3e033a9..80684c463d4 100644 --- a/htdocs/langs/pt_BR/admin.lang +++ b/htdocs/langs/pt_BR/admin.lang @@ -47,8 +47,6 @@ ClientSortingCharset=Conferência de Clientes WarningModuleNotActive=Módulo %s deve ser Ativado! WarningOnlyPermissionOfActivatedModules=Somente as permissões relacionadas com os módulos ativados que aparecem aqui. DolibarrSetup=Instalação/Atualização do Dolibarr -InternalUser=Usuário Interno -ExternalUser=Usuário Externo InternalUsers=Usuários Internos ExternalUsers=Usuários Externos UploadNewTemplate=Carregar novo(s) tema(s) @@ -652,7 +650,6 @@ Permission283=Deletar Contatos Permission286=Exportar Contatos Permission291=Ler Tarifas Permission292=Definir Permissões das Tarifas -Permission300=Ler códigos de barras Permission301=Criar/modificar códigos de barras Permission311=Ler Serviços Permission312=Atribuir Serviço no Contrato diff --git a/htdocs/langs/pt_BR/commercial.lang b/htdocs/langs/pt_BR/commercial.lang index a70dde7954c..d7296bed8f8 100644 --- a/htdocs/langs/pt_BR/commercial.lang +++ b/htdocs/langs/pt_BR/commercial.lang @@ -54,7 +54,5 @@ Stats=Estatísticas de vendas StatusProsp=Status de prospecto de cliente DraftPropals=Minutas de orçamentos ToOfferALinkForOnlineSignature=Link para assinatura on-line -WelcomeOnOnlineSignaturePage=Bem-vindo à página para aceitar propostas comerciais de %s -ThisScreenAllowsYouToSignDocFrom=Esta tela permite que você aceite e assine ou recuse um orçamento / proposta comercial SignatureProposalRef=Assinatura da cotação / proposta comercial %s FeatureOnlineSignDisabled=Recurso para assinatura online desabilitado ou documento gerado antes que o recurso fosse ativado diff --git a/htdocs/langs/pt_BR/errors.lang b/htdocs/langs/pt_BR/errors.lang index 03f3d75a362..517027dde8c 100644 --- a/htdocs/langs/pt_BR/errors.lang +++ b/htdocs/langs/pt_BR/errors.lang @@ -64,7 +64,6 @@ ErrorFieldValueNotIn=Campo %s : '%s' não é um valor encontrado n ErrorFieldRefNotIn=Campo %s : '%s' não é uma referência existente %s ErrorsOnXLines=%s erros encontrados ErrorFileIsInfectedWithAVirus=O antivírus não foi capaz de atestar o arquivo (o arquivo pode estar infectado por um vírus) -ErrorSpecialCharNotAllowedForField=O campo "%s" não aceita caracteres especiais ErrorNumRefModel=Uma referência existe no banco de dados (% s) e não é compatível com esta regra de numeração. Remover registro ou referência renomeado para ativar este módulo. ErrorQtyTooLowForThisSupplier=Quantidade muito baixa para este fornecedor ou nenhum preço definido neste produto para este fornecedor ErrorOrdersNotCreatedQtyTooLow=Algumas encomendas não foram criadas por causa de quantidades muito baixas diff --git a/htdocs/langs/pt_BR/mailmanspip.lang b/htdocs/langs/pt_BR/mailmanspip.lang index bbea232c4ef..9e0a707c3eb 100644 --- a/htdocs/langs/pt_BR/mailmanspip.lang +++ b/htdocs/langs/pt_BR/mailmanspip.lang @@ -7,7 +7,6 @@ MailmanCreationSuccess=O teste da assinatura foi realizado com sucesso MailmanDeletionSuccess=O teste de cancelamento da assinatura foi realizado com sucesso SynchroMailManEnabled=O Mailman sera atualizado SynchroSpipEnabled=O SPIP sera atualizado -DescADHERENT_MAILMAN_ADMINPW=Senha do administrador Mailman DescADHERENT_MAILMAN_URL=URL para inscriçoes Mailman DescADHERENT_MAILMAN_UNSUB_URL=URL para desenscriçoes Mailman DescADHERENT_MAILMAN_LISTS=Lista(s) para inscriçao automatica de novos membros (separado por virgula) diff --git a/htdocs/langs/pt_BR/ticket.lang b/htdocs/langs/pt_BR/ticket.lang index 2a751f5516a..df070b1eced 100644 --- a/htdocs/langs/pt_BR/ticket.lang +++ b/htdocs/langs/pt_BR/ticket.lang @@ -97,8 +97,6 @@ TicketUpdated=Bilhete atualizado SendMessageByEmail=Enviar mensagem por e-mail ErrorMailRecipientIsEmptyForSendTicketMessage=O destinatário está vazio. Nenhum e-mail enviado TicketMessageMailIntroHelp=Este texto é adicionado apenas no início do e-mail e não será salvo. -TicketMessageMailSignatureHelp=Este texto é adicionado somente no final do e-mail e não será salvo. -TicketMessageMailSignatureLabelAdmin=Assinatura do e-mail de resposta TicketTimeElapsedBeforeSince=Tempo decorrido antes / desde TicketContacts=Bilhete de contatos TicketDocumentsLinked=Documentos vinculados ao ticket diff --git a/htdocs/langs/pt_BR/website.lang b/htdocs/langs/pt_BR/website.lang index a5781ea5a75..e2afc369eb2 100644 --- a/htdocs/langs/pt_BR/website.lang +++ b/htdocs/langs/pt_BR/website.lang @@ -9,7 +9,6 @@ WEBSITE_CSS_URL=URL do arquivo CSS externo. WEBSITE_HTML_HEADER=Adição na parte inferior do cabeçalho HTML (comum a todas as páginas) WEBSITE_ROBOT=Arquivo robô (robots.txt) WEBSITE_MANIFEST_JSON=Arquivo manifest.json do site -WEBSITE_README=Arquivo README.md EnterHereLicenseInformation=Digite aqui metadados ou informações de licença para arquivar num arquivo README.md. Se você distribuir seu site como modelo, o arquivo será incluído no pacote tentado. HtmlHeaderPage=Cabeçalho HTML (específico apenas para esta página) PageNameAliasHelp=Nome ou alias da página.
    Esse alias também é usado para forjar uma URL de SEO quando o site é executado a partir de um host virtual de um servidor da Web (como Apacke, Nginx, ...). Use o botão %s para editar este alias. diff --git a/htdocs/langs/pt_MZ/accountancy.lang b/htdocs/langs/pt_MZ/accountancy.lang index 90584e4bd28..b99e895d7c0 100644 --- a/htdocs/langs/pt_MZ/accountancy.lang +++ b/htdocs/langs/pt_MZ/accountancy.lang @@ -27,7 +27,6 @@ ConfirmDeleteCptCategory=Tem certeza de que deseja remover essa conta contábil JournalizationInLedgerStatus=Situação do registro do diário GroupIsEmptyCheckSetup=O grupo está vazio, verifique a configuração do grupo de contabilidade personalizado AccountantFiles=Exportar documentos de origem -ExportAccountingSourceDocHelp=With this tool, you can search and export the source events that are used to generate your accountancy.
    The exported ZIP file will contain the lists of requested items in CSV, as well as their attached files in their original format (PDF, ODT, DOCX...). VueByAccountAccounting=Ver por conta contábil MainAccountForCustomersNotDefined=Conta contábil principal para clientes não definidos na configuração MainAccountForUsersNotDefined=Conta contábil principal para usuários não definidos na configuração @@ -185,7 +184,6 @@ AccountingJournalType9=Novo ErrorAccountingJournalIsAlreadyUse=Esta Livro de Registro já está sendo usado NumberOfAccountancyEntries=Número de entradas NumberOfAccountancyMovements=Número de movimentos -NotifiedValidationDate=Validate and Lock the exported entries (same effect than the "%s" feature, modification and deletion of the lines will DEFINITELY not be possible) ExportDraftJournal=Livro de Registro de rascunho de exportação Selectmodelcsv=Escolha um modelo de exportação Modelcsv_CEGID=Exportar para CEGID Expert Comptable diff --git a/htdocs/langs/pt_MZ/admin.lang b/htdocs/langs/pt_MZ/admin.lang index e805a0c6120..f499ad97ebf 100644 --- a/htdocs/langs/pt_MZ/admin.lang +++ b/htdocs/langs/pt_MZ/admin.lang @@ -47,8 +47,6 @@ ClientSortingCharset=Conferência de Clientes WarningModuleNotActive=Módulo %s deve ser Ativado! WarningOnlyPermissionOfActivatedModules=Somente as permissões relacionadas com os módulos ativados que aparecem aqui. DolibarrSetup=Instalação/Atualização do Dolibarr -InternalUser=Usuário Interno -ExternalUser=Usuário Externo InternalUsers=Usuários Internos ExternalUsers=Usuários Externos SetupArea=Conf. @@ -647,7 +645,6 @@ Permission283=Deletar Contatos Permission286=Exportar Contatos Permission291=Ler Tarifas Permission292=Definir Permissões das Tarifas -Permission300=Ler códigos de barras Permission301=Criar/modificar códigos de barras Permission311=Ler Serviços Permission312=Atribuir Serviço no Contrato diff --git a/htdocs/langs/pt_MZ/commercial.lang b/htdocs/langs/pt_MZ/commercial.lang index 493791da89d..4e15f6d6895 100644 --- a/htdocs/langs/pt_MZ/commercial.lang +++ b/htdocs/langs/pt_MZ/commercial.lang @@ -56,7 +56,5 @@ Stats=Estatísticas de vendas StatusProsp=Status de prospecto de cliente DraftPropals=Minutas de orçamentos ToOfferALinkForOnlineSignature=Link para assinatura on-line -WelcomeOnOnlineSignaturePage=Bem-vindo à página para aceitar propostas comerciais de %s -ThisScreenAllowsYouToSignDocFrom=Esta tela permite que você aceite e assine ou recuse um orçamento / proposta comercial SignatureProposalRef=Assinatura da cotação / proposta comercial %s FeatureOnlineSignDisabled=Recurso para assinatura online desabilitado ou documento gerado antes que o recurso fosse ativado diff --git a/htdocs/langs/pt_MZ/errors.lang b/htdocs/langs/pt_MZ/errors.lang index 03f3d75a362..517027dde8c 100644 --- a/htdocs/langs/pt_MZ/errors.lang +++ b/htdocs/langs/pt_MZ/errors.lang @@ -64,7 +64,6 @@ ErrorFieldValueNotIn=Campo %s : '%s' não é um valor encontrado n ErrorFieldRefNotIn=Campo %s : '%s' não é uma referência existente %s ErrorsOnXLines=%s erros encontrados ErrorFileIsInfectedWithAVirus=O antivírus não foi capaz de atestar o arquivo (o arquivo pode estar infectado por um vírus) -ErrorSpecialCharNotAllowedForField=O campo "%s" não aceita caracteres especiais ErrorNumRefModel=Uma referência existe no banco de dados (% s) e não é compatível com esta regra de numeração. Remover registro ou referência renomeado para ativar este módulo. ErrorQtyTooLowForThisSupplier=Quantidade muito baixa para este fornecedor ou nenhum preço definido neste produto para este fornecedor ErrorOrdersNotCreatedQtyTooLow=Algumas encomendas não foram criadas por causa de quantidades muito baixas diff --git a/htdocs/langs/pt_MZ/mailmanspip.lang b/htdocs/langs/pt_MZ/mailmanspip.lang index bbea232c4ef..9e0a707c3eb 100644 --- a/htdocs/langs/pt_MZ/mailmanspip.lang +++ b/htdocs/langs/pt_MZ/mailmanspip.lang @@ -7,7 +7,6 @@ MailmanCreationSuccess=O teste da assinatura foi realizado com sucesso MailmanDeletionSuccess=O teste de cancelamento da assinatura foi realizado com sucesso SynchroMailManEnabled=O Mailman sera atualizado SynchroSpipEnabled=O SPIP sera atualizado -DescADHERENT_MAILMAN_ADMINPW=Senha do administrador Mailman DescADHERENT_MAILMAN_URL=URL para inscriçoes Mailman DescADHERENT_MAILMAN_UNSUB_URL=URL para desenscriçoes Mailman DescADHERENT_MAILMAN_LISTS=Lista(s) para inscriçao automatica de novos membros (separado por virgula) diff --git a/htdocs/langs/pt_MZ/projects.lang b/htdocs/langs/pt_MZ/projects.lang index 8d0c1cedae8..065ddf804d6 100644 --- a/htdocs/langs/pt_MZ/projects.lang +++ b/htdocs/langs/pt_MZ/projects.lang @@ -6,6 +6,5 @@ LinkToElementShort=Link para ProjectReferers=Itens correlatos OppStatusPROPO=Proposta OppStatusPENDING=Pedente -ServiceToUseOnLines=Service to use on lines by default NewInter=Nova Intervenção StartDateCannotBeAfterEndDate=A data final não pode ser anterior a data de início diff --git a/htdocs/langs/pt_MZ/website.lang b/htdocs/langs/pt_MZ/website.lang index a5781ea5a75..e2afc369eb2 100644 --- a/htdocs/langs/pt_MZ/website.lang +++ b/htdocs/langs/pt_MZ/website.lang @@ -9,7 +9,6 @@ WEBSITE_CSS_URL=URL do arquivo CSS externo. WEBSITE_HTML_HEADER=Adição na parte inferior do cabeçalho HTML (comum a todas as páginas) WEBSITE_ROBOT=Arquivo robô (robots.txt) WEBSITE_MANIFEST_JSON=Arquivo manifest.json do site -WEBSITE_README=Arquivo README.md EnterHereLicenseInformation=Digite aqui metadados ou informações de licença para arquivar num arquivo README.md. Se você distribuir seu site como modelo, o arquivo será incluído no pacote tentado. HtmlHeaderPage=Cabeçalho HTML (específico apenas para esta página) PageNameAliasHelp=Nome ou alias da página.
    Esse alias também é usado para forjar uma URL de SEO quando o site é executado a partir de um host virtual de um servidor da Web (como Apacke, Nginx, ...). Use o botão %s para editar este alias. diff --git a/htdocs/loan/payment/card.php b/htdocs/loan/payment/card.php index 6c302feddac..309e0d99f4a 100644 --- a/htdocs/loan/payment/card.php +++ b/htdocs/loan/payment/card.php @@ -223,9 +223,9 @@ print '
    '; if (empty($action) && !empty($user->rights->loan->delete)) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("CantRemovePaymentWithOneInvoicePaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 0214202957a..32d442008eb 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -518,7 +518,7 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && getDolGlobalInt( $sensitiveget = false; if ((GETPOSTISSET('massaction') || GETPOST('action', 'aZ09')) && getDolGlobalInt('MAIN_SECURITY_CSRF_WITH_TOKEN') >= 3) { // All GET actions and mass actions are processed as sensitive. - if (GETPOSTISSET('massaction') || !in_array(GETPOST('action', 'aZ09'), array('create', 'createsite', 'edit', 'editvalidator', 'file_manager', 'presend', 'presend_addmessage', 'specimen'))) { // We exclude the case action='create' and action='file_manager' that are legitimate + if (GETPOSTISSET('massaction') || !in_array(GETPOST('action', 'aZ09'), array('create', 'createsite', 'createcard', 'edit', 'editvalidator', 'file_manager', 'presend', 'presend_addmessage', 'preview', 'specimen'))) { // We exclude the case action='create' and action='file_manager' that are legitimate $sensitiveget = true; } } elseif (getDolGlobalInt('MAIN_SECURITY_CSRF_WITH_TOKEN') >= 2) { @@ -1207,14 +1207,22 @@ if (GETPOST('dol_no_mouse_hover', 'int') || !empty($_SESSION['dol_no_mouse_hover if (GETPOST('dol_use_jmobile', 'int') || !empty($_SESSION['dol_use_jmobile'])) { $conf->dol_use_jmobile = 1; } +// If not on Desktop if (!empty($conf->browser->layout) && $conf->browser->layout != 'classic') { $conf->dol_no_mouse_hover = 1; } + +// If on smartphone or optmized for small screen if ((!empty($conf->browser->layout) && $conf->browser->layout == 'phone') || (!empty($_SESSION['dol_screenwidth']) && $_SESSION['dol_screenwidth'] < 400) - || (!empty($_SESSION['dol_screenheight']) && $_SESSION['dol_screenheight'] < 400) + || (!empty($_SESSION['dol_screenheight']) && $_SESSION['dol_screenheight'] < 400 + || !empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) ) { $conf->dol_optimize_smallscreen = 1; + + if (isset($conf->global->PRODUIT_DESC_IN_FORM) && $conf->global->PRODUIT_DESC_IN_FORM == 1) { + $conf->global->PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE = 0; + } } // Replace themes bugged with jmobile with eldy if (!empty($conf->dol_use_jmobile) && in_array($conf->theme, array('bureau2crea', 'cameleo', 'amarok'))) { @@ -2469,7 +2477,7 @@ function printDropdownQuickadd() "title" => "NewPropal@propal", "name" => "Proposal@propal", "picto" => "object_propal", - "activation" => isModEnabled("propal") && $user->hasRight("propale", "write"), // vs hooking + "activation" => isModEnabled("propal") && $user->hasRight("propal", "write"), // vs hooking "position" => 30, ), @@ -3005,7 +3013,7 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ } print ''; } diff --git a/htdocs/modulebuilder/admin/setup.php b/htdocs/modulebuilder/admin/setup.php index 50c86e38cc0..4c7e597e889 100644 --- a/htdocs/modulebuilder/admin/setup.php +++ b/htdocs/modulebuilder/admin/setup.php @@ -132,21 +132,23 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { } } print ''; +} - print ''; - print ''.$langs->trans("UseSpecificEditorName").''; - print ''; - print ''; - print ''; - print ''; +print ''; +print ''.$langs->trans("UseSpecificEditorName").''; +print ''; +print ''; +print ''; +print ''; - print ''; - print ''.$langs->trans("UseSpecificEditorURL").''; - print ''; - print ''; - print ''; - print ''; +print ''; +print ''.$langs->trans("UseSpecificEditorURL").''; +print ''; +print ''; +print ''; +print ''; +if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; print ''.$langs->trans("UseSpecificFamily").''; print ''; diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 1c30d709576..705dc202932 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1771,7 +1771,7 @@ if ($dirins && $action == 'generatepackage') { $arrayversion = explode('.', $moduleobj->version, 3); if (count($arrayversion)) { - $FILENAMEZIP = "module_".$modulelowercase.'-'.$arrayversion[0].(empty($arrayversion[1]) ? '.0' : '.'.$arrayversion[1]).($arrayversion[2] ? '.'.$arrayversion[2] : '').'.zip'; + $FILENAMEZIP = "module_".$modulelowercase.'-'.$arrayversion[0].(empty($arrayversion[1]) ? '.0' : '.'.$arrayversion[1]).(empty($arrayversion[2]) ? '' : '.'.$arrayversion[2]).'.zip'; $dirofmodule = dol_buildpath($modulelowercase, 0).'/bin'; $outputfilezip = $dirofmodule.'/'.$FILENAMEZIP; @@ -1780,7 +1780,7 @@ if ($dirins && $action == 'generatepackage') { dol_mkdir($dirofmodule); } // Note: We exclude /bin/ to not include the already generated zip - $result = dol_compress_dir($dir, $outputfilezip, 'zip', '/\/bin\//', $modulelowercase); + $result = dol_compress_dir($dir, $outputfilezip, 'zip', '/\/bin\/|\.git/', $modulelowercase); } else { $result = -1; } @@ -2161,25 +2161,30 @@ if ($module == 'initmodule') { print '
    '; print ''.$langs->trans("Version").''; print '
    '; - print ''; + print ''; print '
    '; print '
    '; print ''.$langs->trans("Family").''; print '
    '; print ''; print ajax_combobox("family"); print '
    '; @@ -2187,20 +2192,20 @@ if ($module == 'initmodule') { print '
    '; print ''.$langs->trans("Picto").''; print '
    '; - print ''; + print ''; print $form->textwithpicto('', $langs->trans("Example").': fa-generic, fa-globe, ... any font awesome code.
    Advanced syntax is fa-fakey[_faprefix[_facolor[_fasize]]]'); print '
    '; print '
    '; print ''.$langs->trans("EditorName").''; print '
    '; - print '
    '; + print '
    '; print '
    '; print '
    '; print ''.$langs->trans("EditorUrl").''; print '
    '; - print '
    '; + print '
    '; print '
    '; print '
    '; @@ -2337,15 +2342,15 @@ if ($module == 'initmodule') { print ''; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print ''; print ' '.$langs->trans("ReadmeFile").' : '.$pathtofilereadme.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print ''; print ' '.$langs->trans("ChangeLog").' : '.$pathtochangelog.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print ''; print ''; @@ -2416,7 +2421,7 @@ if ($module == 'initmodule') { print $langs->trans("EditorUrl"); print ''; if (!empty($moduleobj->editor_url)) { - print ''.$moduleobj->editor_url.' '.img_picto('', 'globe').''; + print ''.$moduleobj->editor_url.' '.img_picto('', 'globe').''; } print ''; @@ -2527,8 +2532,8 @@ if ($module == 'initmodule') { $pathtofile = 'langs/'.$langfile['relativename']; } print ' '.$langs->trans("LanguageFile").' '.basename(dirname($pathtofile)).' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } print ''; @@ -2810,12 +2815,12 @@ if ($module == 'initmodule') { print '
    '; // Main DAO class file print ' '.$langs->trans("ClassFile").' : '.(dol_is_file($realpathtoclass) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtoclass).(dol_is_file($realpathtoclass) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; // Image if (dol_is_file($realpathtopicto)) { print ' '.$langs->trans("Image").' : '.(dol_is_file($realpathtopicto) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtopicto).(dol_is_file($realpathtopicto) ? '' : '').''; - //print ' '.img_picto($langs->trans("Edit"), 'edit').''; + //print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; } elseif (!empty($tmpobject)) { print ' '.$langs->trans("Image").' : '.img_picto('', $tmpobject->picto, 'class="pictofixedwidth"'); @@ -2826,9 +2831,9 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("ApiClassFile").' : '.(dol_is_file($realpathtoapi) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtoapi).(dol_is_file($realpathtoapi)?'':'').''; if (dol_is_file($realpathtoapi)) { - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print '   '; if (empty($conf->global->$const_name)) { // If module is not activated print ''.$langs->trans("GoToApiExplorer").''; @@ -2836,107 +2841,107 @@ if ($module == 'initmodule') { print ''.$langs->trans("GoToApiExplorer").''; } } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } // PHPUnit print '
    '; print ' '.$langs->trans("TestClassFile").' : '.(dol_is_file($realpathtophpunit) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtophpunit).(dol_is_file($realpathtophpunit)?'':'').''; if (dol_is_file($realpathtophpunit)) { - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; print '
    '; print ' '.$langs->trans("PageForLib").' : '.(dol_is_file($realpathtolib) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtolib).(dol_is_file($realpathtolib) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print ' '.$langs->trans("PageForObjLib").' : '.(dol_is_file($realpathtoobjlib) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtoobjlib).(dol_is_file($realpathtoobjlib) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; print ' '.$langs->trans("SqlFile").' : '.(dol_is_file($realpathtosql) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtosql).(dol_is_file($realpathtosql) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print '   '.$langs->trans("DropTableIfEmpty").''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print '   '.$langs->trans("DropTableIfEmpty").''; //print '   '.$langs->trans("RunSql").''; print '
    '; print ' '.$langs->trans("SqlFileKey").' : '.(dol_is_file($realpathtosqlkey) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtosqlkey).(dol_is_file($realpathtosqlkey) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; //print '   '.$langs->trans("RunSql").''; print '
    '; print ' '.$langs->trans("SqlFileExtraFields").' : '.(dol_is_file($realpathtosqlextra) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtosqlextra).(dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey) ? '' : '').''; if (dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey)) { - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print '   '; - print ''.$langs->trans("DropTableIfEmpty").''; + print ''.$langs->trans("DropTableIfEmpty").''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } //print '   '.$langs->trans("RunSql").''; print '
    '; print ' '.$langs->trans("SqlFileKeyExtraFields").' : '.(dol_is_file($realpathtosqlextrakey) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtosqlextrakey).(dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey) ? '' : '').''; if (dol_is_file($realpathtosqlextra) && dol_is_file($realpathtosqlextrakey)) { - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; print '
    '; print '
    '; print ' '.$langs->trans("PageForList").' : '.(dol_is_file($realpathtolist) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtolist).(dol_is_file($realpathtolist) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print ' '.$langs->trans("PageForCreateEditView").' : '.(dol_is_file($realpathtocard) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtocard).(dol_is_file($realpathtocard) ? '' : '').'?action=create'; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; // Page contact print ' '.$langs->trans("PageForContactTab").' : '.(dol_is_file($realpathtocontact) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtocontact).(dol_is_file($realpathtocontact) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; if (dol_is_file($realpathtocontact)) { print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; // Page document print ' '.$langs->trans("PageForDocumentTab").' : '.(dol_is_file($realpathtodocument) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtodocument).(dol_is_file($realpathtodocument) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; if (dol_is_file($realpathtodocument)) { print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; // Page notes print ' '.$langs->trans("PageForNoteTab").' : '.(dol_is_file($realpathtonote) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtonote).(dol_is_file($realpathtonote) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; if (dol_is_file($realpathtonote)) { print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; // Page agenda print ' '.$langs->trans("PageForAgendaTab").' : '.(dol_is_file($realpathtoagenda) ? '' : '').preg_replace('/^'.strtolower($module).'\//', '', $pathtoagenda).(dol_is_file($realpathtoagenda) ? '' : '').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; if (dol_is_file($realpathtoagenda)) { print ' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; } print '
    '; print '
    '; @@ -2969,21 +2974,24 @@ if ($module == 'initmodule') { print '
    '; print ''; print ''; - print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; print ''; - print ''; + print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; print ''; @@ -3091,7 +3099,9 @@ if ($module == 'initmodule') { print ''; print ''; print ''; - print ''; - print ''; - print ''; print ''; - print ''; - print ''; - print ''; - print ''; print ''; print ''; - print ''; + print ''; } else { print ''.$langs->trans("FileNotYetGenerated").''; - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; print ''; } print ''; @@ -3867,7 +3882,7 @@ if ($module == 'initmodule') { print ''; if (!empty($triggers)) { @@ -3876,15 +3891,15 @@ if ($module == 'initmodule') { print ''; - print ''; + print ''; + print ''; print ''; } } else { print ''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; print ''; print ''; } @@ -3929,11 +3944,11 @@ if ($module == 'initmodule') { print ' '.$langs->trans("CSSFile").' : '; if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; - print ''; - print ''; + print ''; + print ''; } else { print ''.$langs->trans("FileNotYetGenerated").''; - print ''; + print ''; } print ''; } else { @@ -3975,11 +3990,11 @@ if ($module == 'initmodule') { print ' '.$langs->trans("JSFile").' : '; if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; - print ''; - print ''; + print ''; + print ''; } else { print ''.$langs->trans("FileNotYetGenerated").''; - print ''; + print ''; } print ''; } else { @@ -4024,13 +4039,13 @@ if ($module == 'initmodule') { $pathtofile = $widget['relpath']; print ''; + print ''; print ''; } } else { print ''; } print '
    '.$langs->trans("Property"); - print ' ('.$langs->trans("SeeExamples").')'; + print ''; + + $htmltext = $langs->trans("PropertyDesc").'

    '.$langs->trans("SeeExamples").''; + print $form->textwithpicto($langs->trans("Code"), $htmltext, 1, 'help', 'extracss', 0, 3, 'propertyhelp'); + print '
    '; print $form->textwithpicto($langs->trans("Label"), $langs->trans("YouCanUseTranslationKey")); print ''.$form->textwithpicto($langs->trans("Type"), $langs->trans("TypeOfFieldsHelp")).''.$form->textwithpicto($langs->trans("Type"), $langs->trans("TypeOfFieldsHelpIntro").'

    '.$langs->trans("TypeOfFieldsHelp"), 1, 'help', 'extracss', 0, 3, 'typehelp').'
    '.$form->textwithpicto($langs->trans("ArrayOfKeyValues"), $langs->trans("ArrayOfKeyValuesDesc")).''.$form->textwithpicto($langs->trans("NotNull"), $langs->trans("NotNullDesc")).''.$langs->trans("DefaultValue").''.$langs->trans("DatabaseIndex").''.$langs->trans("ForeignKey").''.$form->textwithpicto($langs->trans("ForeignKey"), $langs->trans("ForeignKeyDesc"), 1, 'help', 'extracss', 0, 3, 'foreignkeyhelp').''.$langs->trans("Position").''.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc")).''.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).''.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc"), 1, 'help', 'extracss', 0, 3, 'enabledhelp').''.$form->textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc").'

    '.$langs->trans("ItCanBeAnExpression"), 1, 'help', 'extracss', 0, 3, 'visiblehelp').'
    '.$langs->trans("NotEditable").''.$langs->trans("AlwaysEditable").''.$form->textwithpicto($langs->trans("SearchAll"), $langs->trans("SearchAllDesc")).''; print ''; print ''; @@ -3106,7 +3116,7 @@ if ($module == 'initmodule') { print ''; print ''; - print ''; + print ''; print ''; print ''; @@ -3180,13 +3190,15 @@ if ($module == 'initmodule') { print ''; print dol_escape_htmltag($propposition); print ''; + print ''; print $propenabled ? dol_escape_htmltag($propenabled) : ''; print ''; + // Visibility + print ''; print $propvisible ? dol_escape_htmltag($propvisible) : '0'; print ''; + // Readonly + print ''; print $propnoteditable ? dol_escape_htmltag($propnoteditable) : ''; print ''; @@ -3198,16 +3210,17 @@ if ($module == 'initmodule') { print ''; print $propisameasure ? dol_escape_htmltag($propisameasure) : ''; print ''; + print ''; print $propcss ? dol_escape_htmltag($propcss) : ''; print ''; + print ''; print $propcssview ? dol_escape_htmltag($propcssview) : ''; print ''; + print ''; print $propcsslist ? dol_escape_htmltag($propcsslist) : ''; print ''; + // Key for tooltop + print ''; print $prophelp ? dol_escape_htmltag($prophelp) : ''; print ''; @@ -3248,7 +3261,7 @@ if ($module == 'initmodule') { $format = 'markdown'; } print ' '.$langs->trans("SpecificationFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; } } else { @@ -3341,7 +3354,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; if (is_array($dicts) && !empty($dicts)) { print ' '.$langs->trans("LanguageFile").' : '; @@ -3365,18 +3378,20 @@ if ($module == 'initmodule') { //$listofobject = dol_dir_list($dir, 'files', 0, '\.class\.php$'); $firstdicname = ''; - foreach ($dicts['tabname'] as $key => $dic) { - $dicname = $dic; - $diclabel = $dicts['tablib'][$key]; + if (!empty($dicts['tabname'])) { + foreach ($dicts['tabname'] as $key => $dic) { + $dicname = $dic; + $diclabel = $dicts['tablib'][$key]; - if (empty($firstdicname)) { - $firstdicname = $dicname; + if (empty($firstdicname)) { + $firstdicname = $dicname; + } + + $head3[$h][0] = $_SERVER["PHP_SELF"].'?tab=dictionaries&module='.$module.($forceddirread ? '@'.$dirread : '').'&tabdic='.$dicname; + $head3[$h][1] = $diclabel; + $head3[$h][2] = $dicname; + $h++; } - - $head3[$h][0] = $_SERVER["PHP_SELF"].'?tab=dictionaries&module='.$module.($forceddirread ? '@'.$dirread : '').'&tabdic='.$dicname; - $head3[$h][1] = $diclabel; - $head3[$h][2] = $dicname; - $h++; } if ($h > 1) { @@ -3566,7 +3581,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -3716,7 +3731,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -3807,7 +3822,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; print ''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; @@ -3816,11 +3831,11 @@ if ($module == 'initmodule') { if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; print ''.img_picto($langs->trans("Edit"), 'edit').' '; - print ''.img_picto($langs->trans("Delete"), 'delete').''.img_picto($langs->trans("Edit"), 'edit').' '; + print ''.img_picto($langs->trans("Delete"), 'delete').'
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; print ''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print ' '.$langs->trans("TriggersFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').''.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').'
    '; print ' '.$langs->trans("TriggersFile"); print ' : '.$langs->trans("FileNotYetGenerated").''; - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').'
    '.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').''.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').''.img_picto('Generate', 'generate', 'class="paddingleft"').''.img_picto('Generate', 'generate', 'class="paddingleft"').'
    '.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').''.img_picto($langs->trans("Edit"), 'edit').''.img_picto($langs->trans("Delete"), 'delete').''.img_picto('Generate', 'generate', 'class="paddingleft"').''.img_picto('Generate', 'generate', 'class="paddingleft"').'
    '.$langs->trans("WidgetFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').'
    '.$langs->trans("WidgetFile").' : '.$langs->trans("NoWidget").''; - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; print '
    '; @@ -4072,7 +4087,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; } else { $fullpathoffile = dol_buildpath($file, 0); @@ -4143,13 +4158,13 @@ if ($module == 'initmodule') { $pathtofile = $clifile['relpath']; print ' '.$langs->trans("CLIFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } else { print ' '.$langs->trans("CLIFile").' : '.$langs->trans("FileNotYetGenerated"); ''; - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; print ''; } print ''; @@ -4190,7 +4205,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -4319,14 +4334,14 @@ if ($module == 'initmodule') { } print ''; print ' '.$langs->trans("SpecificationFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } else { print ''; print ' '.$langs->trans("SpecificationFile").' : '.$langs->trans("FileNotYetGenerated").''; - print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; + print ''.img_picto('Generate', 'generate', 'class="paddingleft"').''; print ''; } print ''; @@ -4381,7 +4396,7 @@ if ($module == 'initmodule') { print ''; print ''; print ' ('.$langs->trans("GeneratedOn").' '.dol_print_date(dol_filemtime($outputfiledoc), 'dayhour').')'; - print ' '.img_picto($langs->trans("Delete"), 'delete').''; + print ' '.img_picto($langs->trans("Delete"), 'delete').''; } print '
    '; @@ -4396,7 +4411,7 @@ if ($module == 'initmodule') { print ''; print ''; print ' ('.$langs->trans("GeneratedOn").' '.dol_print_date(dol_filemtime($outputfiledocpdf), 'dayhour').')'; - print ' '.img_picto($langs->trans("Delete"), 'delete').''; + print ' '.img_picto($langs->trans("Delete"), 'delete').''; } print '
    '; @@ -4451,7 +4466,7 @@ if ($module == 'initmodule') { $arrayversion = explode('.', $moduleobj->version, 3); if (count($arrayversion)) { - $FILENAMEZIP = "module_".$modulelowercase.'-'.$arrayversion[0].(empty($arrayversion[1]) ? '.0' : '.'.$arrayversion[1]).($arrayversion[2] ? ".".$arrayversion[2] : '').".zip"; + $FILENAMEZIP = "module_".$modulelowercase.'-'.$arrayversion[0].(empty($arrayversion[1]) ? '.0' : '.'.$arrayversion[1]).(empty($arrayversion[2]) ? '' : ".".$arrayversion[2]).".zip"; $outputfilezip = dol_buildpath($modulelowercase, 0).'/bin/'.$FILENAMEZIP; } @@ -4464,7 +4479,7 @@ if ($module == 'initmodule') { $relativepath = $modulelowercase.'/bin/'.$FILENAMEZIP; print ''.$outputfilezip.''; print ' ('.$langs->trans("GeneratedOn").' '.dol_print_date(dol_filemtime($outputfilezip), 'dayhour').')'; - print ' '.img_picto($langs->trans("Delete"), 'delete').''; + print ' '.img_picto($langs->trans("Delete"), 'delete').''; } print ''; @@ -4495,7 +4510,7 @@ if ($module == 'initmodule') { print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index b30391becc7..97c4e9ba646 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -450,7 +450,7 @@ class MyObject extends CommonObject $sql = "SELECT "; $sql .= $this->getFieldList('t'); - $sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element." as t"; + $sql .= " FROM ".$this->db->prefix().$this->table_element." as t"; if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) { $sql .= " WHERE t.entity IN (".getEntity($this->element).")"; } else { diff --git a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php index 212f02aa4b3..99cd900b512 100644 --- a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php +++ b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php @@ -188,7 +188,7 @@ class modMyModule extends DolibarrModules // 'invoice_supplier' to add a tab in supplier invoice view // 'member' to add a tab in fundation member view // 'opensurveypoll' to add a tab in opensurvey poll view - // 'order' to add a tab in customer order view + // 'order' to add a tab in sale order view // 'order_supplier' to add a tab in supplier order view // 'payment' to add a tab in payment view // 'payment_supplier' to add a tab in supplier payment view diff --git a/htdocs/modulebuilder/template/core/modules/mymodule/doc/pdf_standard_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mymodule/doc/pdf_standard_myobject.modules.php index 9bb21dd7322..66e2b4dfa82 100644 --- a/htdocs/modulebuilder/template/core/modules/mymodule/doc/pdf_standard_myobject.modules.php +++ b/htdocs/modulebuilder/template/core/modules/mymodule/doc/pdf_standard_myobject.modules.php @@ -206,7 +206,7 @@ class pdf_standard_myobject extends ModelePDFMyObject if (empty($object->lines[$i]->fk_product)) continue; //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { diff --git a/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php index 61186a3b4f3..cce647de224 100644 --- a/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php +++ b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php @@ -30,7 +30,7 @@ dol_include_once('/mymodule/core/modules/mymodule/modules_myobject.php'); /** - * Class to manage customer Bom numbering rules advanced + * Class to manage the Advanced numbering rule for MyObject */ class mod_myobject_advanced extends ModeleNumRefMyObject { diff --git a/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php index 75068cf8d57..f21ffe880d0 100644 --- a/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php +++ b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php @@ -26,7 +26,7 @@ dol_include_once('/mymodule/core/modules/mymodule/modules_myobject.php'); /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for MyObject */ class mod_myobject_standard extends ModeleNumRefMyObject { diff --git a/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php b/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php index 2c76818ab84..8f7764ad100 100644 --- a/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php +++ b/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php @@ -155,7 +155,7 @@ class InterfaceMyModuleTriggers extends DolibarrTriggers //case 'MYECMDIR_MODIFY': //case 'MYECMDIR_DELETE': - // Customer orders + // Sales orders //case 'ORDER_CREATE': //case 'ORDER_MODIFY': //case 'ORDER_VALIDATE': diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 16a471ac51d..95f10b5b90c 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -126,11 +126,11 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be includ // Set $enablepermissioncheck to 1 to enable a minimum low level of checks $enablepermissioncheck = 0; if ($enablepermissioncheck) { - $permissiontoread = $user->rights->mymodule->myobject->read; - $permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php - $permissiontodelete = $user->rights->mymodule->myobject->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); - $permissionnote = $user->rights->mymodule->myobject->write; // Used by the include of actions_setnotes.inc.php - $permissiondellink = $user->rights->mymodule->myobject->write; // Used by the include of actions_dellink.inc.php + $permissiontoread = $user->hasRight('mymodule', 'myobject', 'read'); + $permissiontoadd = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php + $permissiontodelete = $user->hasRight('mymodule', 'myobject', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); + $permissionnote = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_setnotes.inc.php + $permissiondellink = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_dellink.inc.php } else { $permissiontoread = 1; $permissiontoadd = 1; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php @@ -356,6 +356,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea }*/ $formquestion = array(); + /* $forcecombo=0; if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy @@ -535,7 +536,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - print dolGetButtonAction('', $langs->trans('ToClone'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.(!empty($object->socid)?'&socid='.$object->socid:'').'&action=clone&token='.newToken(), '', $permissiontoadd); + if ($permissiontoadd) { + print dolGetButtonAction('', $langs->trans('ToClone'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.(!empty($object->socid)?'&socid='.$object->socid:'').'&action=clone&token='.newToken(), '', $permissiontoadd); + } /* if ($permissiontoadd) { @@ -554,8 +557,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } */ - // Delete (need delete permission, or if draft, just need create/modify permission) - print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&token='.newToken(), '', $permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd)); + // Delete + $params = array(); + print dolGetButtonAction('', $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete, $params); } print '
    '."\n"; } diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 8ab14a190c1..30ccdd22e44 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -136,7 +136,7 @@ if (!$sortorder) { } // Initialize array of search criterias -$search_all = GETPOST('search_all', 'alphanohtml'); +$search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'); $search = array(); foreach ($object->fields as $key => $val) { if (GETPOST('search_'.$key, 'alpha') !== '') { @@ -198,7 +198,7 @@ if ($user->socid > 0) accessforbidden(); //$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); //restrictedArea($user, $object->element, 0, $object->table_element, '', 'fk_soc', 'rowid', $isdraft); if (!isModEnabled("mymodule")) { - accessforbidden(); + accessforbidden('Module mymodule not enabled'); } if (!$permissiontoread) accessforbidden(); @@ -378,7 +378,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { } }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index fde5811547a..4142693b172 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -678,7 +678,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Clone if ($permissiontoadd) { - print ''.$langs->trans("ToClone").''; + print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=mo', 'clone', $permissiontoadd); } // Cancel - Reopen @@ -703,12 +703,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - // Delete (need delete permission, or if draft, just need create/modify permission) - if ($permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd)) { - print ''.$langs->trans('Delete').''."\n"; - } else { - print ''.$langs->trans('Delete').''."\n"; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print '
    '."\n"; } diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 7f0cc15f873..f7a6ed88571 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -84,7 +84,7 @@ if (!$sortorder) { } // Initialize array of search criterias -$search_all = GETPOST('search_all', 'alphanohtml'); +$search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'); $search = array(); foreach ($object->fields as $key => $val) { if (GETPOST('search_'.$key, 'alpha') !== '') { @@ -230,8 +230,8 @@ $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; } -$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."mrp_production lineparent ON t.fk_parent_line = lineparent.rowid"; -$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."mrp_mo moparent ON lineparent.fk_mo = moparent.rowid"; +$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."mrp_production as lineparent ON t.fk_parent_line = lineparent.rowid"; +$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."mrp_mo as moparent ON lineparent.fk_mo = moparent.rowid"; // Add table from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -266,17 +266,17 @@ foreach ($search as $key => $val) { $mode_search = 2; } if ($search[$key] != '') { - $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search)); + $sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); } } else { if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { $columnName = preg_replace('/(_dtstart|_dtend)$/', '', $key); if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) { if (preg_match('/_dtstart$/', $key)) { - $sql .= " AND t.".$columnName." >= '".$db->idate($search[$key])."'"; + $sql .= " AND t.".$db->escape($columnName)." >= '".$db->idate($search[$key])."'"; } if (preg_match('/_dtend$/', $key)) { - $sql .= " AND t." . $columnName . " <= '" . $db->idate($search[$key]) . "'"; + $sql .= " AND t.".$db->escape($columnName)." <= '".$db->idate($search[$key])."'"; } } } diff --git a/htdocs/mrp/mo_production.php b/htdocs/mrp/mo_production.php index 24b3516684e..64ae11909ef 100644 --- a/htdocs/mrp/mo_production.php +++ b/htdocs/mrp/mo_production.php @@ -814,6 +814,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Lines to consume + $bomcostupdated = 0; // We will recalculate the unitary cost to produce a product using the real "products to consume into MO" + if (!empty($object->lines)) { $nblinetoconsume = 0; foreach ($object->lines as $line) { @@ -832,7 +834,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $linecost = price2num($tmpproduct->pmp, 'MT'); if ($object->qty > 0) { - // add free consume line cost to bomcost + // add free consume line cost to $bomcostupdated $costprice = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp); if (empty($costprice)) { require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; @@ -843,12 +845,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $costprice = 0; } } - $linecost = price2num(($line->qty * $costprice) / $object->qty, 'MT'); - $bomcost += $linecost; + $linecost = price2num(($line->qty * $costprice) / $object->qty, 'MT'); // price for line for all quantities + $bomcostupdated += price2num(($line->qty * $costprice) / $object->qty, 'MU'); // same but with full accuracy } - $bomcost = price2num($bomcost, 'MU'); - + $bomcostupdated = price2num($bomcostupdated, 'MU'); $arrayoflines = $object->fetchLinesLinked('consumed', $line->id); $alreadyconsumed = 0; foreach ($arrayoflines as $line2) { @@ -1136,7 +1137,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans("Product").''; print ''.$langs->trans("Qty").''; if ($permissiontoupdatecost) { - if (empty($bomcost)) { + if (empty($bomcostupdated)) { print ''.$form->textwithpicto($langs->trans("UnitCost"), $langs->trans("AmountUsedToUpdateWAP")).''; } else { print ''.$form->textwithpicto($langs->trans("ManufacturingPrice"), $langs->trans("AmountUsedToUpdateWAP")).''; @@ -1230,17 +1231,25 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if ($permissiontoupdatecost) { // Defined $manufacturingcost $manufacturingcost = 0; - if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble" - $manufacturingcost = $bomcost; + $manufacturingcostsrc = ''; + if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble") + $manufacturingcost = $bomcostupdated; + $manufacturingcostsrc = $langs->trans("CalculatedFromProductsToConsume"); + if (empty($manufacturingcost)) { + $manufacturingcost = $bomcost; + $manufacturingcostsrc = $langs->trans("ValueFromBom"); + } if (empty($manufacturingcost)) { $manufacturingcost = price2num($tmpproduct->cost_price, 'MU'); + $manufacturingcostsrc = $langs->trans("CostPrice"); } if (empty($manufacturingcost)) { $manufacturingcost = price2num($tmpproduct->pmp, 'MU'); + $manufacturingcostsrc = $langs->trans("PMPValue"); } } - print ''; + print ''; if ($manufacturingcost) { print price($manufacturingcost); } @@ -1344,19 +1353,27 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if ($permissiontoupdatecost) { // Defined $manufacturingcost $manufacturingcost = 0; - if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble" - $manufacturingcost = $bomcost; + $manufacturingcostsrc = ''; + if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble") + $manufacturingcost = $bomcostupdated; + $manufacturingcostsrc = $langs->trans("CalculatedFromProductsToConsume"); + if (empty($manufacturingcost)) { + $manufacturingcost = $bomcost; + $manufacturingcostsrc = $langs->trans("ValueFromBom"); + } if (empty($manufacturingcost)) { $manufacturingcost = price2num($tmpproduct->cost_price, 'MU'); + $manufacturingcostsrc = $langs->trans("CostPrice"); } if (empty($manufacturingcost)) { $manufacturingcost = price2num($tmpproduct->pmp, 'MU'); + $manufacturingcostsrc = $langs->trans("PMPValue"); } } if ($tmpproduct->type == Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) { $preselected = (GETPOSTISSET('pricetoproduce-'.$line->id.'-'.$i) ? GETPOST('pricetoproduce-'.$line->id.'-'.$i) : ($manufacturingcost ? price($manufacturingcost) : '')); - print ''; + print ''; } else { print ''; } diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php index 2fa2f6d9f31..b243b8c8342 100644 --- a/htdocs/opensurvey/card.php +++ b/htdocs/opensurvey/card.php @@ -61,6 +61,10 @@ $hookmanager->initHooks(array('surveycard', 'globalcard')); $expiredate = dol_mktime(0, 0, 0, GETPOST('expiremonth'), GETPOST('expireday'), GETPOST('expireyear')); +$permissiontoread = $user->rights->opensurvey->read; +$permissiontoadd = $user->rights->opensurvey->write; +// permission delete doesn't exists +$permissiontodelete = $user->rights->opensurvey->write; /* @@ -364,26 +368,25 @@ print ''."\n"; -/* - * Action bar - */ +// Action bar + print '
    '; if ($action != 'edit' && $user->rights->opensurvey->write) { - //Modify button + // Modify button print ''.$langs->trans("Modify").''; if ($object->status == Opensurveysondage::STATUS_VALIDATED) { - //Close button + // Close button print ''.$langs->trans("Close").''; } if ($object->status == Opensurveysondage::STATUS_CLOSED) { - //Opened button + // Re-Open print ''.$langs->trans("ReOpen").''; } - //Delete button - print ''.$langs->trans('Delete').''; + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?suppressionsondage=1&id='.urlencode($numsondage).'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print '
    '; diff --git a/htdocs/partnership/class/partnership_type.class.php b/htdocs/partnership/class/partnership_type.class.php index 0074d2e80ee..0c42dae87d2 100644 --- a/htdocs/partnership/class/partnership_type.class.php +++ b/htdocs/partnership/class/partnership_type.class.php @@ -129,9 +129,6 @@ class PartnershipType extends CommonObject public function create(User $user, $notrigger = false) { $resultcreate = $this->createCommon($user, $notrigger); - - //$resultvalidate = $this->validate($user, $notrigger); - return $resultcreate; } @@ -145,9 +142,6 @@ class PartnershipType extends CommonObject public function fetch($id, $ref = null) { $result = $this->fetchCommon($id, $ref); - if ($result > 0 && !empty($this->table_element_line)) { - $this->fetchLines(); - } return $result; } @@ -253,79 +247,6 @@ class PartnershipType extends CommonObject public function delete(User $user, $notrigger = false) { return $this->deleteCommon($user, $notrigger); - //return $this->deleteCommon($user, $notrigger, 1); - } - - /** - * Set draft status - * - * @param User $user Object user that modify - * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers - * @return int <0 if KO, >0 if OK - */ - public function setDraft($user, $notrigger = 0) - { - // Protection - if ($this->status <= self::STATUS_DRAFT) { - return 0; - } - - /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->write)) - || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->mymodule_advance->validate)))) - { - $this->error='Permission denied'; - return -1; - }*/ - - return $this->setStatusCommon($user, self::STATUS_DRAFT, $notrigger, 'PARTNERSHIPTYPE_UNVALIDATE'); - } - - /** - * Set cancel status - * - * @param User $user Object user that modify - * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers - * @return int <0 if KO, 0=Nothing done, >0 if OK - */ - public function cancel($user, $notrigger = 0) - { - // Protection - if ($this->status != self::STATUS_VALIDATED) { - return 0; - } - - /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->write)) - || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->mymodule_advance->validate)))) - { - $this->error='Permission denied'; - return -1; - }*/ - - return $this->setStatusCommon($user, self::STATUS_CANCELED, $notrigger, 'PARTNERSHIPTYPE_CANCEL'); - } - - /** - * Set back to validated status - * - * @param User $user Object user that modify - * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers - * @return int <0 if KO, 0=Nothing done, >0 if OK - */ - public function reopen($user, $notrigger = 0) - { - // Protection - if ($this->status != self::STATUS_CANCELED) { - return 0; - } - - /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->write)) - || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->mymodule->mymodule_advance->validate)))) - { - $this->error='Permission denied'; - return -1; - }*/ - - return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'PARTNERSHIPTYPE_REOPEN'); } /** @@ -445,59 +366,6 @@ class PartnershipType extends CommonObject return $result; } - /** - * Return the label of the status - * - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto - * @return string Label of status - */ - public function getLabelStatus($mode = 0) - { - return $this->LibStatut($this->status, $mode); - } - - /** - * Return the label of the status - * - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto - * @return string Label of status - */ - public function getLibStatut($mode = 0) - { - return $this->LibStatut($this->status, $mode); - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** - * Return the status - * - * @param int $status Id status - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto - * @return string Label of status - */ - public function LibStatut($status, $mode = 0) - { - // phpcs:enable - if (empty($this->labelStatus) || empty($this->labelStatusShort)) { - global $langs; - //$langs->load("mymodule@mymodule"); - $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft'); - $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Enabled'); - $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Disabled'); - $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft'); - $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Enabled'); - $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Disabled'); - } - - $statusType = 'status'.$status; - //if ($status == self::STATUS_VALIDATED) $statusType = 'status1'; - if ($status == self::STATUS_CANCELED) { - $statusType = 'status6'; - } - - return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); - } - /** * Load the info information in the object * diff --git a/htdocs/partnership/core/modules/partnership/mod_partnership_advanced.php b/htdocs/partnership/core/modules/partnership/mod_partnership_advanced.php index d717bdc49bf..676de032659 100644 --- a/htdocs/partnership/core/modules/partnership/mod_partnership_advanced.php +++ b/htdocs/partnership/core/modules/partnership/mod_partnership_advanced.php @@ -30,7 +30,7 @@ dol_include_once('/partnership/core/modules/partnership/modules_partnership.php' /** - * Class to manage customer Bom numbering rules advanced + * Class to manage the Advanced numbering rule for Partnership */ class mod_partnership_advanced extends ModeleNumRefPartnership { diff --git a/htdocs/partnership/core/modules/partnership/mod_partnership_standard.php b/htdocs/partnership/core/modules/partnership/mod_partnership_standard.php index d5a2bb326b2..5de4b07f215 100644 --- a/htdocs/partnership/core/modules/partnership/mod_partnership_standard.php +++ b/htdocs/partnership/core/modules/partnership/mod_partnership_standard.php @@ -26,7 +26,7 @@ dol_include_once('/partnership/core/modules/partnership/modules_partnership.php' /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Partnership */ class mod_partnership_standard extends ModeleNumRefPartnership { diff --git a/htdocs/partnership/partnership_list.php b/htdocs/partnership/partnership_list.php index bc99655efa3..838969e745e 100644 --- a/htdocs/partnership/partnership_list.php +++ b/htdocs/partnership/partnership_list.php @@ -359,13 +359,16 @@ foreach ($search as $key => $val) { } if ($managedfor == 'member') { if ($search_filter == 'withoutsubscription') { - $sql .= " AND (d.datefin IS NULL OR dty.subscription = 0)"; + $sql .= " AND (d.datefin IS NULL)"; + } + if ($search_filter == 'waitingsubscription') { + $sql .= " AND (d.datefin IS NULL AND t.subscription = '1')"; } if ($search_filter == 'uptodate') { - $sql .= " AND (d.datefin >= '".$db->idate($now)."' OR dty.subscription = 0)"; + $sql .= " AND (d.datefin >= '".$db->idate($now)."' OR dty.subscription = '0')"; } if ($search_filter == 'outofdate') { - $sql .= " AND (d.datefin < '".$db->idate($now)."' AND dty.subscription = 1)"; + $sql .= " AND (d.datefin < '".$db->idate($now)."' AND dty.subscription = '1')"; } } if ($search_all) { @@ -401,7 +404,7 @@ $sql=preg_replace('/,\s*$/','', $sql); $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); @@ -682,7 +685,7 @@ print ''."\n"; $needToFetchEachLine = 0; if (isset($extrafields->attributes[$object->table_element]['computed']) && is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) { foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { - if (preg_match('/\$object/', $val)) { + if ($val && preg_match('/\$object/', $val)) { $needToFetchEachLine++; // There is at least one compute field that use $object } } diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 7462431d087..a8106a9ae88 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -133,7 +133,7 @@ if ($action == 'other') { /*$value = GETPOST('PRODUIT_SOUSPRODUITS', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_SOUSPRODUITS", $value, 'chaine', 0, '', $conf->entity);*/ - $value = GETPOST('activate_viewProdDescInForm', 'alpha'); + $value = GETPOST('PRODUIT_DESC_IN_FORM', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_DESC_IN_FORM", $value, 'chaine', 0, '', $conf->entity); $value = GETPOST('activate_viewProdTextsInThirdpartyLanguage', 'alpha'); @@ -689,7 +689,8 @@ print ''; print ''; print ''.$langs->trans("ViewProductDescInFormAbility").''; print ''; -print $form->selectyesno("activate_viewProdDescInForm", $conf->global->PRODUIT_DESC_IN_FORM, 1); +$arrayofchoices = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes").' ('.$langs->trans("DesktopsOnly").')', '2' => $langs->trans("Yes").' ('.$langs->trans("DesktopsAndSmartphones").')'); +print $form->selectarray("PRODUIT_DESC_IN_FORM", $arrayofchoices, getDolGlobalInt('PRODUIT_DESC_IN_FORM'), 0); print ''; print ''; diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 25cbf623c8d..c1be61741bb 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -147,7 +147,7 @@ if ($id > 0 || !empty($ref)) { $upload_dir = $conf->service->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref); } - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { // For backward compatiblity, we scan also old dirs + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { // For backward compatiblity, we scan also old dirs if (isModEnabled("product")) { $upload_dirold = $conf->product->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2), 1, 1).'/'.substr(substr("000".$object->id, -2), 0, 1).'/'.$object->id."/photos"; } else { @@ -1444,9 +1444,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Description (used in invoice, propal...) print ''.$langs->trans("Description").''; - $doleditor = new DolEditor('desc', GETPOST('desc', 'restricthtml'), '', 160, 'dolibarr_details', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%'); + $doleditor = new DolEditor('desc', GETPOST('desc', 'restricthtml'), '', 160, 'dolibarr_details', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_DETAILS'), ROWS_4, '90%'); $doleditor->Create(); - print ""; if (empty($conf->global->PRODUCT_DISABLE_PUBLIC_URL)) { @@ -1620,7 +1619,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''.$langs->trans("NoteNotVisibleOnBill").''; // We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF. - $doleditor = new DolEditor('note_private', GETPOST('note_private', 'restricthtml'), '', 140, 'dolibarr_details', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_8, '90%'); + $doleditor = new DolEditor('note_private', GETPOST('note_private', 'restricthtml'), '', 140, 'dolibarr_details', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_NOTE_PRIVATE'), ROWS_8, '90%'); $doleditor->Create(); print ""; @@ -1866,7 +1865,12 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''; // Ref - print ''; + if (empty($conf->global->MAIN_PRODUCT_REF_NOT_EDITABLE)) { + print ''; + } else { + print ''; + } + // Label print ''; @@ -2002,7 +2006,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print '"; @@ -2193,7 +2197,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) { print '"; @@ -2831,7 +2835,7 @@ if (!empty($conf->global->PRODUCT_ADD_FORM_ADD_TO) && $object->id && ($action == //print '
    '; // Propals - if (isModEnabled("propal") && $user->rights->propale->creer) { + if (isModEnabled("propal") && $user->rights->propal->creer) { $propal = new Propal($db); $langs->load("propal"); diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index fc8b852edf6..aba48b939be 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -3525,7 +3525,7 @@ class Product extends CommonObject global $db, $conf, $user, $hookmanager; $sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_customers, COUNT(DISTINCT f.rowid) as nb,"; - $sql .= " COUNT(fd.rowid) as nb_rows, SUM('fd.qty') as qty"; + $sql .= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty"; $sql .= " FROM ".MAIN_DB_PREFIX."facturedet_rec as fd"; $sql .= ", ".MAIN_DB_PREFIX."facture_rec as f"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; @@ -5630,7 +5630,7 @@ class Product extends CommonObject $result = 0; $dir = $sdir; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $dir .= '/'.get_exdir($this->id, 2, 0, 0, $this, 'product').$this->id."/photos"; } else { $dir .= '/'.get_exdir(0, 0, 0, 0, $this, 'product').dol_sanitizeFileName($this->ref); @@ -5675,7 +5675,7 @@ class Product extends CommonObject global $conf; $dir = $sdir; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $dir .= '/'.get_exdir($this->id, 2, 0, 0, $this, 'product').$this->id."/photos/"; } else { $dir .= '/'.get_exdir(0, 0, 0, 0, $this, 'product'); diff --git a/htdocs/product/document.php b/htdocs/product/document.php index bfb5978406d..c24082ae6e6 100644 --- a/htdocs/product/document.php +++ b/htdocs/product/document.php @@ -90,7 +90,7 @@ if ($id > 0 || !empty($ref)) { $upload_dir = $conf->service->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'product'); } - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { // For backward compatiblity, we scan also old dirs + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { // For backward compatiblity, we scan also old dirs if (isModEnabled("product")) { $upload_dirold = $conf->product->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2), 1, 1).'/'.substr(substr("000".$object->id, -2), 0, 1).'/'.$object->id."/photos"; } else { @@ -228,7 +228,7 @@ if ($object->id) { // Build file list $filearray = dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { // For backward compatiblity, we scan also old dirs + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { // For backward compatiblity, we scan also old dirs $filearrayold = dol_dir_list($upload_dirold, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1); $filearray = array_merge($filearray, $filearrayold); } @@ -283,7 +283,7 @@ if ($object->id) { $filearray = dol_dir_list($upload_dir, "files", 0, '', '\.meta$', 'name', SORT_ASC, 1); - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { // For backward compatiblity, we scan also old dirs + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { // For backward compatiblity, we scan also old dirs $filearray = array_merge($filearray, dol_dir_list($upload_dirold, "files", 0, '', '\.meta$', 'name', SORT_ASC, 1)); } diff --git a/htdocs/product/dynamic_price/class/price_parser.class.php b/htdocs/product/dynamic_price/class/price_parser.class.php index 764ff919cc7..412d015f8b9 100644 --- a/htdocs/product/dynamic_price/class/price_parser.class.php +++ b/htdocs/product/dynamic_price/class/price_parser.class.php @@ -150,6 +150,8 @@ class PriceParser "length" => $product->length, "surface" => $product->surface, "price_min" => $product->price_min, + "cost_price" => $product->cost_price, + "pmp" => $product->pmp, )); //Retrieve all extrafield for product and add it to values diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 034fa97f86f..2ccdc7409f3 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -821,7 +821,7 @@ END; print '
    '; print ''; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 6e1bb1e8a2e..fb9803dd23b 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -417,17 +417,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - /*if ($permissiontoadd) - { - print ''.$langs->trans("ToClone").''."\n"; - }*/ - - // Delete (need delete permission, or if draft, just need create/modify permission) - if ($permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd)) { - print ''.$langs->trans('Delete').''."\n"; - } else { - print ''.$langs->trans('Delete').''."\n"; + if ($permissiontoadd) { + //print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=inventory', 'clone', $permissiontoadd); } + + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print ''."\n"; } diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 281d58ea99e..9acc4232490 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -104,10 +104,10 @@ class Inventory extends CommonObject 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'InventoryForASpecificWarehouse', 'picto'=>'stock', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'get_name_url_params' => '0::0:-1:0::1', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), 'categories_product' => array('type'=>'chkbxlst:categorie:label:rowid::type=0:0:', 'label'=>'OrProductsWithCategories', 'visible'=>3, 'enabled'=>1, 'position'=>33, 'help'=>'', 'picto'=>'category', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx'), - 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35), // This date is not used so disabled by default. - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), - 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502), + 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35, 'csslist'=>'nowraponall'), // This date is not used so disabled by default. + 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500, 'csslist'=>'nowraponall'), + 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501, 'csslist'=>'nowraponall'), + 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502, 'csslist'=>'nowraponall'), 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'user.rowid', 'csslist'=>'tdoverflowmax200'), 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511, 'csslist'=>'tdoverflowmax200'), 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>512, 'csslist'=>'tdoverflowmax200'), diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index 793fedd3a2d..d9ed8a37c5e 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -270,6 +270,7 @@ foreach ($search as $key => $val) { if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } +// Search for tag/category $searchCategoryProductSqlList = array(); if ($searchCategoryProductOperator == 1) { $existsCategoryProductList = array(); @@ -314,7 +315,6 @@ if ($searchCategoryProductOperator == 1) { $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; } } -//$sql.= dolSqlDateFilter("t.field", $search_xxxday, $search_xxxmonth, $search_xxxyear); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 3561388709d..26f6a3a410c 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -77,12 +77,15 @@ if (GETPOSTISSET('formfilteraction')) { $searchCategoryProductOperator = $conf->global->MAIN_SEARCH_CAT_OR_BY_DEFAULT; } $searchCategoryProductList = GETPOST('search_category_product_list', 'array'); +$catid = GETPOST('catid', 'int'); +if (!empty($catid) && empty($searchCategoryProductList)) { + $searchCategoryProductList = array($catid); +} $search_tosell = GETPOST("search_tosell", 'int'); $search_tobuy = GETPOST("search_tobuy", 'int'); $search_country = GETPOST("search_country", 'int'); $search_state = GETPOST("state_id", 'int'); $fourn_id = GETPOST("fourn_id", 'int'); -$catid = GETPOST('catid', 'int'); $search_tobatch = GETPOST("search_tobatch", 'int'); $search_accountancy_code_sell = GETPOST("search_accountancy_code_sell", 'alpha'); $search_accountancy_code_sell_intra = GETPOST("search_accountancy_code_sell_intra", 'alpha'); @@ -296,6 +299,7 @@ if ($search_type == '0') { $result = restrictedArea($user, 'produit|service', '', '', '', '', '', 0); } + /* * Actions */ @@ -439,9 +443,6 @@ if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) { if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_extrafields as ef on (p.rowid = ef.fk_object)"; } -if (!empty($searchCategoryProductList) || !empty($catid)) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_product as cp ON p.rowid = cp.fk_product"; // We'll need this table joined to the select in order to filter by categ -} $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product"; // multilang if (getDolGlobalInt('MAIN_MULTILANGS')) { @@ -455,7 +456,6 @@ if (!empty($conf->global->PRODUCT_USE_UNITS)) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_units cu ON cu.rowid = p.fk_unit"; } - $sql .= ' WHERE p.entity IN ('.getEntity('product').')'; if ($sall) { $sql .= natural_search(array_keys($fieldstosearchall), $sall); @@ -500,34 +500,28 @@ if ($search_vatrate) { if (dol_strlen($canvas) > 0) { $sql .= " AND p.canvas = '".$db->escape($canvas)."'"; } -if ($catid > 0) { - $sql .= " AND cp.fk_categorie = ".((int) $catid); -} -if ($catid == -2) { - $sql .= " AND cp.fk_categorie IS NULL"; -} -$searchCategoryProductSqlList = array(); -if ($searchCategoryProductOperator == 1) { +// Search for tag/category ($searchCategoryProductList is an array of ID) +if (!empty($searchCategoryProductList)) { + $searchCategoryProductSqlList = array(); + $listofcategoryid = ''; foreach ($searchCategoryProductList as $searchCategoryProduct) { if (intval($searchCategoryProduct) == -2) { - $searchCategoryProductSqlList[] = "cp.fk_categorie IS NULL"; + $searchCategoryProductSqlList[] = "NOT EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product)"; } elseif (intval($searchCategoryProduct) > 0) { - $searchCategoryProductSqlList[] = "cp.fk_categorie = ".$db->escape($searchCategoryProduct); + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProduct); } } - if (!empty($searchCategoryProductSqlList)) { - $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + if ($listofcategoryid) { + $searchCategoryProductSqlList[] = " EXISTS (SELECT ck.fk_product FROM ".MAIN_DB_PREFIX."categorie_product as ck WHERE p.rowid = ck.fk_product AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; } -} else { - foreach ($searchCategoryProductList as $searchCategoryProduct) { - if (intval($searchCategoryProduct) == -2) { - $searchCategoryProductSqlList[] = "cp.fk_categorie IS NULL"; - } elseif (intval($searchCategoryProduct) > 0) { - $searchCategoryProductSqlList[] = "p.rowid IN (SELECT fk_product FROM ".MAIN_DB_PREFIX."categorie_product WHERE fk_categorie = ".((int) $searchCategoryProduct).")"; + if ($searchCategoryProductOperator == 1) { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + } + } else { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; } - } - if (!empty($searchCategoryProductSqlList)) { - $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; } } if ($fourn_id > 0) { @@ -693,7 +687,6 @@ if ($resql) { if ($fourn_id > 0) { $param .= "&fourn_id=".urlencode($fourn_id); } - //if ($seach_categ) $param.=($search_categ?"&search_categ=".urlencode($search_categ):""); if ($show_childproducts) { $param .= ($show_childproducts ? "&search_show_childproducts=".urlencode($show_childproducts) : ""); } diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 1dda1f4c89a..2171ef4aab3 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -2249,7 +2249,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { } print ''; - print ''; + print ''; print ''; // Print the search button print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -2298,6 +2298,8 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { print ''; print '"; + + // VAT Rate print '"; - print '"; + print '"; - print '"; + print '"; if ($mysoc->localtax1_assuj == "1" || $mysoc->localtax2_assuj == "1") { //print '"; - print ''; + print ''; } print ''; @@ -2376,6 +2378,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { print ''; print ""; print '"; + // VAT Rate print '"; + print '"; print '"; if ($mysoc->localtax1_assuj == "1" || $mysoc->localtax2_assuj == "1") { //print '"; - print ''; + print ''; } print ''; diff --git a/htdocs/product/stats/bom.php b/htdocs/product/stats/bom.php index 707549655e0..66e673567a6 100644 --- a/htdocs/product/stats/bom.php +++ b/htdocs/product/stats/bom.php @@ -259,12 +259,11 @@ if ($id > 0 || !empty($ref)) { } $db->free($result); + $option .= '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index d2f3e2358d9..b0d06f15701 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -375,7 +375,7 @@ if ($result || !($id > 0)) { $morefilters = ' AND d.fk_product IN ('.$db->sanitize((is_array($listofprodids) && count($listofprodids)) ? join(',', $listofprodids) : '0').')'; } if ($search_categ == -2) { - $morefilters = ' AND d.fk_product NOT IN (SELECT cp.fk_product from '.MAIN_DB_PREFIX.'categorie_product as cp)'; + $morefilters = ' AND NOT EXISTS (SELECT cp.fk_product FROM '.MAIN_DB_PREFIX.'categorie_product as cp WHERE d.fk_product = cp.fk_product)'; } if ($key == 'propal') { @@ -440,7 +440,7 @@ if ($result || !($id > 0)) { continue; } - if ($graphfiles == 'propal' && !$user->rights->propale->lire) { + if ($graphfiles == 'propal' && !$user->rights->propal->lire) { continue; } if ($graphfiles == 'order' && !$user->rights->commande->lire) { diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php index ed5216f85d1..5559eaf8413 100644 --- a/htdocs/product/stats/commande.php +++ b/htdocs/product/stats/commande.php @@ -185,13 +185,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); - $option = ''; + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php index f3353fa3d5d..6ae1d7881ef 100644 --- a/htdocs/product/stats/commande_fournisseur.php +++ b/htdocs/product/stats/commande_fournisseur.php @@ -185,13 +185,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); - $option = ''; + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } @@ -228,7 +226,7 @@ if ($id > 0 || !empty($ref)) { $i = 0; print '
    '; - print '
    '.$langs->trans("Ref").'
    '.$langs->trans("Ref").'
    '.$langs->trans("Ref").'
    '.$langs->trans("Label").'
    '.$langs->trans("Description").''; // We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF. - $doleditor = new DolEditor('desc', GETPOSTISSET('desc') ? GETPOST('desc', 'restricthtml') : $object->description, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%'); + $doleditor = new DolEditor('desc', GETPOSTISSET('desc') ? GETPOST('desc', 'restricthtml') : $object->description, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_4, '90%'); $doleditor->Create(); print "
    '.$langs->trans("NoteNotVisibleOnBill").''; - $doleditor = new DolEditor('note_private', $object->note_private, '', 140, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%'); + $doleditor = new DolEditor('note_private', $object->note_private, '', 140, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_NOTE_PRIVATE'), ROWS_4, '90%'); $doleditor->Create(); print "
    '.$langs->trans('ProductSupplierDescription').''; - $doleditor = new DolEditor('supplier_description', $object->desc_supplier, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%'); + $doleditor = new DolEditor('supplier_description', $object->desc_supplier, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_4, '90%'); $doleditor->Create(); print '
     '; @@ -2261,7 +2261,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { print '
    '.$langs->trans("ThirdParty").'' . $langs->trans('RefCustomer') . ''.$langs->trans('RefCustomer').''.$langs->trans("AppliedPricesFrom").''.$langs->trans("PriceBase").''.$langs->trans("DefaultTaxRate").'' . $langs->trans('Default') . ''.$langs->trans($object->price_base_type)."'; $positiverates = ''; @@ -2319,12 +2321,12 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { //print $object->default_vat_code?' ('.$object->default_vat_code.')':''; print "'.price($object->price)."'.price($object->price)."'.price($object->price_ttc)."'.price($object->price_ttc)."' . price($object->price_ttc) . "'.price($resultarray[2]).''.price($resultarray[2]).''.price($object->price_min).''.dol_escape_htmltag($line->ref_customer).'".dol_print_date($line->datec, "dayhour", 'tzuserrel')."'.$langs->trans($line->price_base_type)."'; $positiverates = ''; @@ -2395,12 +2398,13 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { echo vatrate($positiverates.($line->default_vat_code ? ' ('.$line->default_vat_code.')' : ''), '%', ($line->tva_npr ? $line->tva_npr : $line->recuperableonly)); print "'.price($line->price)."'.price($line->price_ttc)."' . price($line->price_ttc) . "'.price($resultarray[2]).''.price($resultarray[2]).''.price($line->price_min).'
    '; + print '
    '; print ''; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "c.rowid", "", $option, '', $sortfield, $sortorder); print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder); diff --git a/htdocs/product/stats/contrat.php b/htdocs/product/stats/contrat.php index 196831a5466..bcf9c8c0737 100644 --- a/htdocs/product/stats/contrat.php +++ b/htdocs/product/stats/contrat.php @@ -170,12 +170,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 4ee1e4f95b2..3ff0b00d56a 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -201,12 +201,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option .= '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 6e5ed524ad9..20bb56a3c19 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -184,12 +184,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option .= '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/facturerec.php b/htdocs/product/stats/facturerec.php index 9415f2d6546..9b982407825 100644 --- a/htdocs/product/stats/facturerec.php +++ b/htdocs/product/stats/facturerec.php @@ -202,12 +202,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/mo.php b/htdocs/product/stats/mo.php index a4947db1085..085a6687f5c 100644 --- a/htdocs/product/stats/mo.php +++ b/htdocs/product/stats/mo.php @@ -163,12 +163,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php index 42467368b91..b70d2e08161 100644 --- a/htdocs/product/stats/propal.php +++ b/htdocs/product/stats/propal.php @@ -138,7 +138,7 @@ if ($id > 0 || !empty($ref)) { print dol_get_fiche_end(); - if ($user->rights->propale->lire) { + if ($user->rights->propal->lire) { $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,"; $sql .= " p.ref_client,"; $sql .= "p.datep, p.fk_statut as statut, d.rowid, d.qty"; @@ -186,12 +186,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stats/supplier_proposal.php b/htdocs/product/stats/supplier_proposal.php index ff14c764af6..50b17b0ac06 100644 --- a/htdocs/product/stats/supplier_proposal.php +++ b/htdocs/product/stats/supplier_proposal.php @@ -137,7 +137,7 @@ if ($id > 0 || !empty($ref)) { print dol_get_fiche_end(); - if ($user->rights->propale->lire) { + if ($user->rights->propal->lire) { $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,"; //$sql .= " p.ref_supplier,"; $sql .= "p.date_valid, p.fk_statut as statut, d.rowid, d.qty"; @@ -185,12 +185,11 @@ if ($id > 0 || !empty($ref)) { if ($result) { $num = $db->num_rows($result); + $option = '&id='.$product->id; + if ($limit > 0 && $limit != $conf->liste_limit) { $option .= '&limit='.urlencode($limit); } - if (!empty($id)) { - $option .= '&id='.$product->id; - } if (!empty($search_month)) { $option .= '&search_month='.urlencode($search_month); } diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index 26f35a1a94e..ff88a93dca9 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -980,10 +980,9 @@ class MouvementStock extends CommonObject // Separate originetype with "@" : left part is class name, right part is module name $origin_type_array = explode('@', $origin_type); $classname = ucfirst($origin_type_array[0]); - $modulename = empty($origin_type_array[1]) ? $classname : $origin_type_array[1]; + $modulename = empty($origin_type_array[1]) ? strtolower($classname) : $origin_type_array[1]; $result = dol_include_once('/'.$modulename.'/class/'.strtolower($classname).'.class.php'); if ($result) { - $classname = ucfirst($classname); $origin = new $classname($this->db); } } diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index d2f21ac372e..7009d0d55fc 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -101,7 +101,7 @@ class Productlot extends CommonObject 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'llx_user.rowid'), 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), + 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000) ); /** @@ -295,7 +295,9 @@ class Productlot extends CommonObject $sql .= " t.tms,"; $sql .= " t.fk_user_creat,"; $sql .= " t.fk_user_modif,"; - $sql .= " t.import_key"; + $sql .= " t.import_key,"; + $sql .= " t.note_public,"; + $sql .= " t.note_private"; $sql .= " FROM ".$this->db->prefix().$this->table_element." as t"; if ($product_id > 0 && $batch != '') { $sql .= " WHERE t.batch = '".$this->db->escape($batch)."' AND t.fk_product = ".((int) $product_id); @@ -329,6 +331,8 @@ class Productlot extends CommonObject $this->fk_user_creat = $obj->fk_user_creat; $this->fk_user_modif = $obj->fk_user_modif; $this->import_key = $obj->import_key; + $this->note_public = $obj->note_public; + $this->note_private = $obj->note_private; // Retrieve all extrafield // fetch optionals attributes and labels diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index 496a2720e97..af2bb49b05e 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -227,9 +227,6 @@ $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $obje $sql .= $hookmanager->resPrint; $sql = preg_replace('/,\s*$/', '', $sql); $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterJoinQuery(Categorie::TYPE_WAREHOUSE, "t.rowid"); -} if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; } @@ -240,12 +237,7 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as ccount ON ccount.rowid = t.fk if ($separatedPMP) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_perentity as pa ON pa.fk_product = p.rowid AND pa.fk_product = ps.fk_product AND pa.entity = ". (int) $conf->entity; } - $sql .= " WHERE t.entity IN (".getEntity('stock').")"; - -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterSelectQuery(Categorie::TYPE_WAREHOUSE, "t.rowid", $search_category_list); -} foreach ($search as $key => $val) { $class_key = $key; if ($class_key == 'status') { @@ -268,6 +260,33 @@ foreach ($search as $key => $val) { if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } +// Search for tag/category ($searchCategoryWarehouseList is an array of ID) +$searchCategoryWarehouseList = $search_category_list; +$searchCategoryWarehouseOperator = 0; +if (!empty($searchCategoryWarehouseList)) { + $searchCategoryWarehouseSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryWarehouseList as $searchCategoryWarehouse) { + if (intval($searchCategoryWarehouse) == -2) { + $searchCategoryWarehouseSqlList[] = "NOT EXISTS (SELECT ck.fk_warehouse FROM ".MAIN_DB_PREFIX."categorie_warehouse as ck WHERE p.rowid = ck.fk_warehouse)"; + } elseif (intval($searchCategoryWarehouse) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryWarehouse); + } + } + if ($listofcategoryid) { + $searchCategoryWarehouseSqlList[] = " EXISTS (SELECT ck.fk_warehouse FROM ".MAIN_DB_PREFIX."categorie_warehouse as ck WHERE p.rowid = ck.fk_warehouse AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryWarehouseOperator == 1) { + if (!empty($searchCategoryWarehouseSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryWarehouseSqlList).")"; + } + } else { + if (!empty($searchCategoryWarehouseSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryWarehouseSqlList).")"; + } + } +} + // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 7e34931f9a8..171ee79be9d 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -730,7 +730,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $nbtotalofrecords++; }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); $nbtotalofrecords = $objforcount->nbtotalofrecords; diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index c7503bb957f..faaf7e346fa 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -761,7 +761,7 @@ if ($id > 0 || $ref) { $found = 0; $helpondiff = ''.$langs->trans("StockDiffPhysicTeoric").':
    '; - // Number of customer orders running + // Number of sales orders running if (isModEnabled('commande')) { if ($found) { $helpondiff .= '
    '; @@ -776,7 +776,7 @@ if ($id > 0 || $ref) { $helpondiff .= ' ('.$langs->trans("ProductQtyInDraft").': '.$object->stats_commande['qty'].')'; } - // Number of product from customer order already sent (partial shipping) + // Number of product from sales order already sent (partial shipping) if (isModEnabled("expedition")) { require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; $filterShipmentStatus = ''; diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 5219897ed61..acf2f526773 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -540,10 +540,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''."\n"; } - if ($user->rights->stock->supprimer) - { - print ''."\n"; - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $user->rights->stock->supprimer); */ } diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index c15479b1f4f..8981d1cff56 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -315,7 +315,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { } }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); diff --git a/htdocs/product/stock/productlot_note.php b/htdocs/product/stock/productlot_note.php new file mode 100644 index 00000000000..c8cd43f2091 --- /dev/null +++ b/htdocs/product/stock/productlot_note.php @@ -0,0 +1,113 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file productlot_note.php + * \ingroup productlot + * \brief Tab for notes on productlot + */ + + + +require '../../main.inc.php'; +dol_include_once('/product/stock/class/productlot.class.php'); +dol_include_once('/core/lib/product.lib.php'); + +// Load translation files required by the page +$langs->loadLangs(array('other', 'products')); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'aZ09'); + +// Initialize technical objects +$object = new Productlot($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction = $conf->productlot->dir_output.'/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('productlotnote')); // Note that conf->hooks_modules contains array +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +if ($id > 0 || !empty($ref)) { + $upload_dir = $conf->productlot->multidir_output[!empty($object->entity) ? $object->entity : $conf->entity]."/".$object->id; +} + +$permissionnote = $user->rights->produit->lire; // Used by the include of actions_setnotes.inc.php + +// Security check (enable the most restrictive one) +//if ($user->socid > 0) accessforbidden(); +//if ($user->socid > 0) $socid = $user->socid; +//$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); +//restrictedArea($user, $object->element, $object->id, $object->table_element, '', 'fk_soc', 'rowid', $isdraft); +//if (empty($conf->calibration->enabled)) accessforbidden(); +//if (!$permissiontoread) accessforbidden(); + + +/* + * Actions + */ + +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} + + +/* + * View + */ + +$form = new Form($db); + +$help_url = ''; +llxHeader('', $langs->trans('productlot'), $help_url); + +if ($id > 0 || !empty($ref)) { + $object->fetch_thirdparty(); + + $head = productlot_prepare_head($object); + + print dol_get_fiche_head($head, 'note', '', -1, $object->picto); + + // Object card + // ------------------------------------------------------------ + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'batch'); + + print '
    '; + print '
    '; + + $cssclass = "titlefield"; + include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php'; + + print '
    '; + + + print dol_get_fiche_end(); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index 6ec5c1d0b9b..be7f006d5a0 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -849,8 +849,8 @@ while ($i < ($limit ? min($num, $limit) : $num)) { $desiredstock = $objp->desiredstock; $alertstock = $objp->seuil_stock_alerte; - $desiredstockwarehouse = ($objp->desiredstockpse ? $objp->desiredstockpse : 0); - $alertstockwarehouse = ($objp->seuil_stock_alertepse ? $objp->seuil_stock_alertepse : 0); + $desiredstockwarehouse = (!empty($objp->desiredstockpse) ? $objp->desiredstockpse : 0); + $alertstockwarehouse = (!empty($objp->seuil_stock_alertepse) ? $objp->seuil_stock_alertepse : 0); $warning = ''; if ($alertstock && ($stock < $alertstock)) { diff --git a/htdocs/product/stock/replenishorders.php b/htdocs/product/stock/replenishorders.php index d077c1d0ba8..c3c031b14bd 100644 --- a/htdocs/product/stock/replenishorders.php +++ b/htdocs/product/stock/replenishorders.php @@ -51,6 +51,7 @@ $search_dateyear = GETPOST('search_dateyear', 'int'); $search_datemonth = GETPOST('search_datemonth', 'int'); $search_dateday = GETPOST('search_dateday', 'int'); $search_date = dol_mktime(0, 0, 0, $search_datemonth, $search_dateday, $search_dateyear); +$optioncss = GETPOST('optioncss', 'alpha'); $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); @@ -130,9 +131,9 @@ if (empty($user->rights->societe->client->voir) && !$socid) { } $sql .= ' WHERE cf.fk_soc = s.rowid '; $sql .= ' AND cf.entity = '.$conf->entity; -if ($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) { +if (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER)) { $sql .= ' AND cf.fk_statut < 3'; -} elseif ($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) { +} elseif (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) { $sql .= ' AND cf.fk_statut < 6'; // We want also status 5, we will keep them visible if dispatching is not yet finished (tested with function dolDispatchToDo). } else { $sql .= ' AND cf.fk_statut < 5'; diff --git a/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php b/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php index a71098fc2bf..5ffb56ced44 100644 --- a/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php +++ b/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2021 Gauthier VERDOL - * Copyright (C) ---Put here your own copyright and developer email--- + * Copyright (C) 2022 Frédéric France * * 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 @@ -229,7 +229,7 @@ class StockTransfer extends CommonObject // Translate some data of arrayofkeyval if (is_object($langs)) { foreach ($this->fields as $key => $val) { - if (is_array($val['arrayofkeyval'])) { + if (isset($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { foreach ($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2] = $langs->trans($val2); } diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_card.php b/htdocs/product/stock/stocktransfer/stocktransfer_card.php index ce8b045a6cd..54384ae0b3f 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_card.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_card.php @@ -84,7 +84,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be includ $permissiontoread = $user->rights->stocktransfer->stocktransfer->read; $permissiontoadd = $user->rights->stocktransfer->stocktransfer->write; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php $permissionnote = $user->rights->stocktransfer->stocktransfer->write; // Used by the include of actions_setnotes.inc.php -$permissiontodelete = $user->rights->stocktransfer->stocktransfer->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); +$permissiontodelete = $user->rights->stocktransfer->stocktransfer->delete || ($permissiontoadd && isset($object->status) && $object->status < $object::STATUS_TRANSFERED); $permissiondellink = $user->rights->stocktransfer->stocktransfer->write; // Used by the include of actions_dellink.inc.php $upload_dir = $conf->stocktransfer->multidir_output[isset($object->entity) ? $object->entity : 1]; @@ -964,7 +964,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Clone if ($permissiontoadd) { - print ''.$langs->trans("ToClone").''."\n"; + print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=stocktransfer', 'clone', $permissiontoadd); } /* @@ -992,14 +992,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } */ - // Delete (need delete permission, or if draft, just need create/modify permission) - if ($object->status < $object::STATUS_TRANSFERED && $permissiontodelete) { - print ''.$langs->trans('Delete').''."\n"; - } - /*else - { - print ''.$langs->trans('Delete').''."\n"; - }*/ + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print ''."\n"; } diff --git a/htdocs/product/stock/tpl/extrafields_add.tpl.php b/htdocs/product/stock/tpl/extrafields_add.tpl.php index 62921f0a6e0..144c638a1cf 100644 --- a/htdocs/product/stock/tpl/extrafields_add.tpl.php +++ b/htdocs/product/stock/tpl/extrafields_add.tpl.php @@ -38,13 +38,13 @@ if (empty($conf) || !is_object($conf)) { // Other attributes if (!isset($parameters)) $parameters = array(); -$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $movement, $action); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (empty($reshook)) { $params = array(); if (isset($tpl_context)) $params['tpl_context'] = $tpl_context; $params['cols'] = $parameters['colspanvalue']; - print $movement->showOptionals($extrafields, 'create', $params); + print $object->showOptionals($extrafields, 'create', $params); } ?> diff --git a/htdocs/product/stock/tpl/stockcorrection.tpl.php b/htdocs/product/stock/tpl/stockcorrection.tpl.php index 40181167baa..69ae5eda5e0 100644 --- a/htdocs/product/stock/tpl/stockcorrection.tpl.php +++ b/htdocs/product/stock/tpl/stockcorrection.tpl.php @@ -109,7 +109,7 @@ if ($object->element == 'product') { if (empty($ident) && !empty($conf->global->MAIN_DEFAULT_WAREHOUSE)) { $ident = $conf->global->MAIN_DEFAULT_WAREHOUSE; } - print img_picto('', 'stock').$formproduct->selectWarehouses($ident, 'id_entrepot', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'minwidth100'); + print img_picto('', 'stock', 'class="pictofixedwidth"').$formproduct->selectWarehouses($ident, 'id_entrepot', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'minwidth100 maxwidth300 widthcentpercentminusx'); print ''; } if ($object->element == 'stock') { @@ -155,10 +155,11 @@ if (ismodEnabled('productbatch') && print ''; print ''; } else { - print ''; + print img_picto('', 'barcode', 'class="pictofixedwidth"').''; } print ''; print '
    '; + print ''; if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) { print ''; print ''; diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php index 3f536b6761a..ba4dc956d08 100644 --- a/htdocs/product/traduction.php +++ b/htdocs/product/traduction.php @@ -265,12 +265,12 @@ if ($action == 'edit') { print '
    '.$langs->trans("SellByDate").''; diff --git a/htdocs/product/stock/tpl/stocktransfer.tpl.php b/htdocs/product/stock/tpl/stocktransfer.tpl.php index 819fa404d52..7d08f2014a0 100644 --- a/htdocs/product/stock/tpl/stocktransfer.tpl.php +++ b/htdocs/product/stock/tpl/stocktransfer.tpl.php @@ -104,7 +104,7 @@ if (isModEnabled('productbatch') && print ''; print ''; } else { - print ''; + print img_picto('', 'barcode', 'class="pictofixedwidth"').''; } print '
    '; print ''; print ''; if (!empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { print ''; @@ -336,13 +336,13 @@ if ($action == 'add' && ($user->rights->produit->creer || $user->rights->service print ''; print ''; print ''; // Other field (not used) if (!empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { print ''; } diff --git a/htdocs/projet/info.php b/htdocs/projet/agenda.php similarity index 74% rename from htdocs/projet/info.php rename to htdocs/projet/agenda.php index bef020d9a38..a3c120d0a23 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/agenda.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/projet/info.php + * \file htdocs/projet/agenda.php * \ingroup project * \brief Page with events on project */ @@ -132,7 +132,7 @@ $morehtmlref = '
    '; $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= '
    '; @@ -166,18 +166,40 @@ if ($permok) { } -//print '
    '; -$morehtmlcenter = ''; -if (isModEnabled('agenda')) { - $addActionBtnRight = !empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create); - $morehtmlcenter .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'&socid='.$object->socid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $addActionBtnRight); -} //print '
    '; if (!empty($object->id)) { print '
    '; + //print '
    '; + $morehtmlcenter = ''; + + // Show link to change view in message + $messagingUrl = DOL_URL_ROOT.'/projet/messaging.php?id='.$object->id; + $morehtmlcenter .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1); + + // Show link to change view in agenda + $messagingUrl = DOL_URL_ROOT.'/projet/info.php?id='.$object->id; + $morehtmlcenter .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2); + + + // // Show link to send an email (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&private_message=0&send_email=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('SendMail'), '', 'fa fa-paper-plane', $url, 'email-title-button', $btnstatus); + + // // Show link to add a private message (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('TicketAddMessage'), '', 'fa fa-comment-dots', $url, 'add-new-ticket-title-button', $btnstatus); + + // Show link to add event + if (isModEnabled('agenda')) { + $addActionBtnRight = !empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create); + $morehtmlcenter .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'&socid='.$object->socid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $addActionBtnRight); + } + $param = '&id='.$object->id; if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.$contextpage; diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index a308476ae50..718aeecec82 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -55,13 +55,15 @@ $dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09'); $status = GETPOST('status', 'int'); $opp_status = GETPOST('opp_status', 'int'); -$opp_percent = price2num(GETPOST('opp_percent', 'alpha')); -$objcanvas = GETPOST("objcanvas", "alpha"); -$comefromclone = GETPOST("comefromclone", "alpha"); +$opp_percent = price2num(GETPOST('opp_percent', 'alphanohtml')); +$objcanvas = GETPOST("objcanvas", "alphanohtml"); +$comefromclone = GETPOST("comefromclone", "alphanohtml"); +$date_start = dol_mktime(0, 0, 0, GETPOST('projectstartmonth', 'int'), GETPOST('projectstartday', 'int'), GETPOST('projectstartyear', 'int')); +$date_end = dol_mktime(0, 0, 0, GETPOST('projectendmonth', 'int'), GETPOST('projectendday', 'int'), GETPOST('projectendyear', 'int')); +$date_start_event = dol_mktime(GETPOST('date_start_eventhour', 'int'), GETPOST('date_start_eventmin', 'int'), GETPOST('date_start_eventsec', 'int'), GETPOST('date_start_eventmonth', 'int'), GETPOST('date_start_eventday', 'int'), GETPOST('date_start_eventyear', 'int')); +$date_end_event = dol_mktime(GETPOST('date_end_eventhour', 'int'), GETPOST('date_end_eventmin', 'int'), GETPOST('date_end_eventsec', 'int'), GETPOST('date_end_eventmonth', 'int'), GETPOST('date_end_eventday', 'int'), GETPOST('date_end_eventyear', 'int')); +$location = GETPOST('location', 'alphanohtml'); -if ($id == '' && $ref == '' && ($action != "create" && $action != "add" && $action != "update" && !GETPOST("cancel"))) { - accessforbidden(); -} $mine = GETPOST('mode') == 'mine' ? 1 : 0; //if (! $user->rights->projet->all->lire) $mine=1; // Special for projects @@ -88,14 +90,15 @@ if ($id > 0 || !empty($ref)) { // fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); -$date_start = dol_mktime(0, 0, 0, GETPOST('projectstartmonth', 'int'), GETPOST('projectstartday', 'int'), GETPOST('projectstartyear', 'int')); -$date_end = dol_mktime(0, 0, 0, GETPOST('projectendmonth', 'int'), GETPOST('projectendday', 'int'), GETPOST('projectendyear', 'int')); - // Security check $socid = GETPOST('socid', 'int'); //if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. restrictedArea($user, 'projet', $object->id, 'projet&project'); +if ($id == '' && $ref == '' && ($action != "create" && $action != "add" && $action != "update" && !GETPOST("cancel"))) { + accessforbidden(); +} + $permissiondellink = $user->rights->projet->creer; // Used by the include of actions_dellink.inc.php @@ -187,6 +190,9 @@ if (empty($reshook)) { $object->date_c = dol_now(); $object->date_start = $date_start; $object->date_end = $date_end; + $object->date_start_event = $date_start_event; + $object->date_end_event = $date_end_event; + $object->location = $location; $object->statut = $status; $object->opp_status = $opp_status; $object->opp_percent = $opp_percent; @@ -281,6 +287,9 @@ if (empty($reshook)) { $object->public = GETPOST('public', 'alpha'); $object->date_start = (!GETPOST('projectstart')) ? '' : $date_start; $object->date_end = (!GETPOST('projectend')) ? '' : $date_end; + $object->date_start_event = (!GETPOST('date_start_event')) ? '' : $date_start_event; + $object->date_end_event = (!GETPOST('date_end_event')) ? '' : $date_end_event; + $object->location = $location; if (GETPOSTISSET('opp_amount')) { $object->opp_amount = price2num(GETPOST('opp_amount', 'alpha')); } @@ -603,6 +612,23 @@ if ($action == 'create' && $user->rights->projet->creer) { print ' '; $htmltext = $langs->trans("EventOrganizationDescriptionLong"); print ''; + print ''; } print ''; print ''; @@ -673,16 +699,6 @@ if ($action == 'create' && $user->rights->projet->creer) { } print ''; - // Date start - print '
    '; - - // Date end - print ''; - if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { // Opportunity status print ''; @@ -708,6 +724,27 @@ if ($action == 'create' && $user->rights->projet->creer) { print ''; print ''; + // Date project + print ''; + + if (isModEnabled('eventorganization')) { + // Date event + print ''; + + // Location + print ''; + print ''; + print ''; + } + // Description print ''; print ''; // Usage @@ -902,6 +940,21 @@ if ($action == 'create' && $user->rights->projet->creer) { print 'usage_organize_event ? ' checked="checked"' : '')) . '"> '; $htmltext = $langs->trans("EventOrganizationDescriptionLong"); print ''; + print ''; } print ''; } @@ -981,9 +1034,18 @@ if ($action == 'create' && $user->rights->projet->creer) { print ''; } - // Date start - print ''; + print ''; + print ''; + + // Date project + print ''; - // Date end - print ''; + if (isModEnabled('eventorganization')) { + // Date event + print ''; - // Budget - print ''; - print ''; - print ''; + // Location + print ''; + print ''; + print ''; + } // Description print ''; @@ -1043,7 +1107,7 @@ if ($action == 'create' && $user->rights->projet->creer) { // Title $morehtmlref .= dol_escape_htmltag($object->title); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '; + $morehtmlref .= '
    '; if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { $morehtmlref .= $object->thirdparty->getNomUrl(1, 'project'); } @@ -1143,18 +1207,6 @@ if ($action == 'create' && $user->rights->projet->creer) { */ } - // Date start - end - print ''; - // Budget print ''; + // Date start - end project + print ''; + // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; @@ -1401,7 +1465,7 @@ if ($action == 'create' && $user->rights->projet->creer) { // Delete if ($user->rights->projet->supprimer || ($object->statut == Project::STATUS_DRAFT && $user->rights->projet->creer)) { if ($userDelete > 0 || ($object->statut == Project::STATUS_DRAFT && $user->rights->projet->creer)) { - print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&id='.$object->id, ''); + print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&id='.$object->id, ''); } else { print dolGetButtonAction($langs->trans('NotOwnerOfProject'), $langs->trans('Delete'), 'default', $_SERVER['PHP_SELF']. '#', '', false); } diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 9987f9bc4f0..c5dcf0d4bb4 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -87,29 +87,44 @@ class Project extends CommonObject public $title; /** - * @var int Date start + * @var int Date start * @deprecated * @see $date_start */ public $dateo; /** - * @var int Date start + * @var int Date start */ public $date_start; /** - * @var int Date end + * @var int Date end * @deprecated * @see $date_end */ public $datee; /** - * @var int Date end + * @var int Date end */ public $date_end; + /** + * @var int Date start event + */ + public $date_start_event; + + /** + * @var int Date end event + */ + public $date_end_event; + + /** + * @var string Location + */ + public $location; + /** * @var int Date close */ @@ -264,30 +279,35 @@ class Project extends CommonObject 'datee' =>array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>1, 'visible'=>1, 'position'=>35), 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>3, 'position'=>55, 'searchall'=>1), 'public' =>array('type'=>'integer', 'label'=>'Visibility', 'enabled'=>1, 'visible'=>1, 'position'=>65), - 'fk_opp_status' =>array('type'=>'integer', 'label'=>'OpportunityStatusShort', 'enabled'=>'!empty($conf->global->PROJECT_USE_OPPORTUNITIES)', 'visible'=>1, 'position'=>75), - 'opp_percent' =>array('type'=>'double(5,2)', 'label'=>'OpportunityProbabilityShort', 'enabled'=>'!empty($conf->global->PROJECT_USE_OPPORTUNITIES)', 'visible'=>1, 'position'=>80), + 'fk_opp_status' =>array('type'=>'integer', 'label'=>'OpportunityStatusShort', 'enabled'=>'getDolGlobalString("PROJECT_USE_OPPORTUNITIES")', 'visible'=>1, 'position'=>75), + 'opp_percent' =>array('type'=>'double(5,2)', 'label'=>'OpportunityProbabilityShort', 'enabled'=>'getDolGlobalString("PROJECT_USE_OPPORTUNITIES")', 'visible'=>1, 'position'=>80), 'note_private' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>85, 'searchall'=>1), 'note_public' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>90, 'searchall'=>1), 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'ModelPdf', 'enabled'=>1, 'visible'=>0, 'position'=>95), 'date_close' =>array('type'=>'datetime', 'label'=>'DateClosing', 'enabled'=>1, 'visible'=>0, 'position'=>105), 'fk_user_close' =>array('type'=>'integer', 'label'=>'UserClosing', 'enabled'=>1, 'visible'=>0, 'position'=>110), - 'opp_amount' =>array('type'=>'double(24,8)', 'label'=>'OpportunityAmountShort', 'enabled'=>1, 'visible'=>'!empty($conf->global->PROJECT_USE_OPPORTUNITIES)', 'position'=>115), + 'opp_amount' =>array('type'=>'double(24,8)', 'label'=>'OpportunityAmountShort', 'enabled'=>1, 'visible'=>'getDolGlobalString("PROJECT_USE_OPPORTUNITIES")', 'position'=>115), 'budget_amount' =>array('type'=>'double(24,8)', 'label'=>'Budget', 'enabled'=>1, 'visible'=>1, 'position'=>119), 'usage_bill_time' =>array('type'=>'integer', 'label'=>'UsageBillTimeShort', 'enabled'=>1, 'visible'=>-1, 'position'=>130), 'usage_opportunity' =>array('type'=>'integer', 'label'=>'UsageOpportunity', 'enabled'=>1, 'visible'=>-1, 'position'=>135), 'usage_task' =>array('type'=>'integer', 'label'=>'UsageTasks', 'enabled'=>1, 'visible'=>-1, 'position'=>140), 'usage_organize_event' =>array('type'=>'integer', 'label'=>'UsageOrganizeEvent', 'enabled'=>1, 'visible'=>-1, 'position'=>145), - 'accept_conference_suggestions' =>array('type'=>'integer', 'label'=>'AllowUnknownPeopleSuggestConf', 'enabled'=>1, 'visible'=>-1, 'position'=>146), - 'accept_booth_suggestions' =>array('type'=>'integer', 'label'=>'AllowUnknownPeopleSuggestBooth', 'enabled'=>1, 'visible'=>-1, 'position'=>147), - 'price_registration' =>array('type'=>'double(24,8)', 'label'=>'PriceOfRegistration', 'enabled'=>1, 'visible'=>-1, 'position'=>148), - 'price_booth' =>array('type'=>'double(24,8)', 'label'=>'PriceOfBooth', 'enabled'=>1, 'visible'=>-1, 'position'=>149), - 'max_attendees' =>array('type'=>'integer', 'label'=>'MaxNbOfAttendees', 'enabled'=>1, 'visible'=>-1, 'position'=>150), - 'datec' =>array('type'=>'datetime', 'label'=>'DateCreationShort', 'enabled'=>1, 'visible'=>-2, 'position'=>200), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModificationShort', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>205), - 'fk_user_creat' =>array('type'=>'integer', 'label'=>'UserCreation', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>210), - 'fk_user_modif' =>array('type'=>'integer', 'label'=>'UserModification', 'enabled'=>1, 'visible'=>0, 'position'=>215), - 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>0, 'position'=>220), - 'email_msgid'=>array('type'=>'varchar(255)', 'label'=>'EmailMsgID', 'enabled'=>1, 'visible'=>-1, 'position'=>250, 'help'=>'EmailMsgIDWhenSourceisEmail'), + // Properties for event organization + 'date_start_event' =>array('type'=>'date', 'label'=>'DateStartEvent', 'enabled'=>1, 'visible'=>1, 'position'=>200), + 'date_end_event' =>array('type'=>'date', 'label'=>'DateEndEvent', 'enabled'=>1, 'visible'=>1, 'position'=>201), + 'location' =>array('type'=>'text', 'label'=>'Location', 'enabled'=>1, 'visible'=>3, 'position'=>55, 'searchall'=>202), + 'accept_conference_suggestions' =>array('type'=>'integer', 'label'=>'AllowUnknownPeopleSuggestConf', 'enabled'=>1, 'visible'=>-1, 'position'=>210), + 'accept_booth_suggestions' =>array('type'=>'integer', 'label'=>'AllowUnknownPeopleSuggestBooth', 'enabled'=>1, 'visible'=>-1, 'position'=>211), + 'price_registration' =>array('type'=>'double(24,8)', 'label'=>'PriceOfRegistration', 'enabled'=>1, 'visible'=>-1, 'position'=>212), + 'price_booth' =>array('type'=>'double(24,8)', 'label'=>'PriceOfBooth', 'enabled'=>1, 'visible'=>-1, 'position'=>215), + 'max_attendees' =>array('type'=>'integer', 'label'=>'MaxNbOfAttendees', 'enabled'=>1, 'visible'=>-1, 'position'=>215), + // Generic + 'datec' =>array('type'=>'datetime', 'label'=>'DateCreationShort', 'enabled'=>1, 'visible'=>-2, 'position'=>400), + 'tms' =>array('type'=>'timestamp', 'label'=>'DateModificationShort', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>405), + 'fk_user_creat' =>array('type'=>'integer', 'label'=>'UserCreation', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>410), + 'fk_user_modif' =>array('type'=>'integer', 'label'=>'UserModification', 'enabled'=>1, 'visible'=>0, 'position'=>415), + 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>0, 'position'=>420), + 'email_msgid'=>array('type'=>'varchar(255)', 'label'=>'EmailMsgID', 'enabled'=>1, 'visible'=>-1, 'position'=>450, 'help'=>'EmailMsgIDWhenSourceisEmail'), 'fk_statut' =>array('type'=>'smallint(6)', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'position'=>500) ); // END MODULEBUILDER PROPERTIES @@ -408,6 +428,9 @@ class Project extends CommonObject $sql .= ", price_registration"; $sql .= ", price_booth"; $sql .= ", max_attendees"; + $sql .= ", date_start_event"; + $sql .= ", date_end_event"; + $sql .= ", location"; $sql .= ", email_msgid"; $sql .= ", note_private"; $sql .= ", note_public"; @@ -436,6 +459,9 @@ class Project extends CommonObject $sql .= ", ".(strcmp($this->price_registration, '') ? price2num($this->price_registration) : 'null'); $sql .= ", ".(strcmp($this->price_booth, '') ? price2num($this->price_booth) : 'null'); $sql .= ", ".(strcmp($this->max_attendees, '') ? ((int) $this->max_attendees) : 'null'); + $sql .= ", ".($this->date_start_event != '' ? "'".$this->db->idate($this->date_start_event)."'" : 'null'); + $sql .= ", ".($this->date_end_event != '' ? "'".$this->db->idate($this->date_end_event)."'" : 'null'); + $sql .= ", ".($this->location ? "'".$this->db->escape($this->location)."'" : 'null'); $sql .= ", ".($this->email_msgid ? "'".$this->db->escape($this->email_msgid)."'" : 'null'); $sql .= ", ".($this->note_private ? "'".$this->db->escape($this->note_private)."'" : 'null'); $sql .= ", ".($this->note_public ? "'".$this->db->escape($this->note_public)."'" : 'null'); @@ -530,11 +556,11 @@ class Project extends CommonObject $sql .= ", fk_opp_status = ".((is_numeric($this->opp_status) && $this->opp_status > 0) ? $this->opp_status : 'null'); $sql .= ", opp_percent = ".((is_numeric($this->opp_percent) && $this->opp_percent != '') ? $this->opp_percent : 'null'); $sql .= ", public = ".($this->public ? 1 : 0); - $sql .= ", datec=".($this->date_c != '' ? "'".$this->db->idate($this->date_c)."'" : 'null'); - $sql .= ", dateo=".($this->date_start != '' ? "'".$this->db->idate($this->date_start)."'" : 'null'); - $sql .= ", datee=".($this->date_end != '' ? "'".$this->db->idate($this->date_end)."'" : 'null'); - $sql .= ", date_close=".($this->date_close != '' ? "'".$this->db->idate($this->date_close)."'" : 'null'); - $sql .= ", fk_user_close=".($this->fk_user_close > 0 ? $this->fk_user_close : "null"); + $sql .= ", datec = ".($this->date_c != '' ? "'".$this->db->idate($this->date_c)."'" : 'null'); + $sql .= ", dateo = ".($this->date_start != '' ? "'".$this->db->idate($this->date_start)."'" : 'null'); + $sql .= ", datee = ".($this->date_end != '' ? "'".$this->db->idate($this->date_end)."'" : 'null'); + $sql .= ", date_close = ".($this->date_close != '' ? "'".$this->db->idate($this->date_close)."'" : 'null'); + $sql .= ", fk_user_close = ".($this->fk_user_close > 0 ? $this->fk_user_close : "null"); $sql .= ", opp_amount = ".(strcmp($this->opp_amount, '') ? price2num($this->opp_amount) : "null"); $sql .= ", budget_amount = ".(strcmp($this->budget_amount, '') ? price2num($this->budget_amount) : "null"); $sql .= ", fk_user_modif = ".$user->id; @@ -547,6 +573,9 @@ class Project extends CommonObject $sql .= ", price_registration = ".(strcmp($this->price_registration, '') ? price2num($this->price_registration) : "null"); $sql .= ", price_booth = ".(strcmp($this->price_booth, '') ? price2num($this->price_booth) : "null"); $sql .= ", max_attendees = ".(strcmp($this->max_attendees, '') ? price2num($this->max_attendees) : "null"); + $sql .= ", date_start_event = ".($this->date_start_event != '' ? "'".$this->db->idate($this->date_start_event)."'" : 'null'); + $sql .= ", date_end_event = ".($this->date_end_event != '' ? "'".$this->db->idate($this->date_end_event)."'" : 'null'); + $sql .= ", location = '".$this->db->escape($this->location)."'"; $sql .= ", entity = ".((int) $this->entity); $sql .= " WHERE rowid = ".((int) $this->id); @@ -631,9 +660,9 @@ class Project extends CommonObject } $sql = "SELECT rowid, entity, ref, title, description, public, datec, opp_amount, budget_amount,"; - $sql .= " tms, dateo, datee, date_close, fk_soc, fk_user_creat, fk_user_modif, fk_user_close, fk_statut as status, fk_opp_status, opp_percent,"; + $sql .= " tms, dateo as date_start, datee as date_end, date_close, fk_soc, fk_user_creat, fk_user_modif, fk_user_close, fk_statut as status, fk_opp_status, opp_percent,"; $sql .= " note_private, note_public, model_pdf, usage_opportunity, usage_task, usage_bill_time, usage_organize_event, email_msgid,"; - $sql .= " accept_conference_suggestions, accept_booth_suggestions, price_registration, price_booth, max_attendees"; + $sql .= " accept_conference_suggestions, accept_booth_suggestions, price_registration, price_booth, max_attendees, date_start_event, date_end_event, location"; $sql .= " FROM ".MAIN_DB_PREFIX."projet"; if (!empty($id)) { $sql .= " WHERE rowid = ".((int) $id); @@ -665,8 +694,8 @@ class Project extends CommonObject $this->datec = $this->db->jdate($obj->datec); // TODO deprecated $this->date_m = $this->db->jdate($obj->tms); $this->datem = $this->db->jdate($obj->tms); // TODO deprecated - $this->date_start = $this->db->jdate($obj->dateo); - $this->date_end = $this->db->jdate($obj->datee); + $this->date_start = $this->db->jdate($obj->date_start); + $this->date_end = $this->db->jdate($obj->date_end); $this->date_close = $this->db->jdate($obj->date_close); $this->note_private = $obj->note_private; $this->note_public = $obj->note_public; @@ -692,6 +721,9 @@ class Project extends CommonObject $this->price_registration = $obj->price_registration; $this->price_booth = $obj->price_booth; $this->max_attendees = $obj->max_attendees; + $this->date_start_event = $this->db->jdate($obj->date_start_event); + $this->date_end_event = $this->db->jdate($obj->date_end_event); + $this->location = $obj->location; $this->email_msgid = $obj->email_msgid; $this->db->free($resql); @@ -1247,7 +1279,7 @@ class Project extends CommonObject $label .= ($label ? '
    ' : '').''.$langs->trans('Label').': '.$this->title; // The space must be after the : to not being explode when showing the title in img_picto if (isset($this->public)) { $label .= '
    '.$langs->trans("Visibility").": "; - $label .= ($this->public ? img_picto($langs->trans('SharedProject'), 'world', 'class="paddingrightonly"').$langs->trans("SharedProject") : img_picto($langs->trans('PrivateProject'), 'private', 'class="paddingrightonly"').$langs->trans("PrivateProject")); + $label .= ($this->public ? img_picto($langs->trans('SharedProject'), 'world', 'class="pictofixedwidth"').$langs->trans("SharedProject") : img_picto($langs->trans('PrivateProject'), 'private', 'class="pictofixedwidth"').$langs->trans("PrivateProject")); } if (!empty($this->thirdparty_name)) { $label .= ($label ? '
    ' : '').''.$langs->trans('ThirdParty').': '.$this->thirdparty_name; // The space must be after the : to not being explode when showing the title in img_picto @@ -1308,14 +1340,14 @@ class Project extends CommonObject $result .= $linkstart; if ($withpicto) { - $result .= img_object(($notooltip ? '' : $label), $picto, ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip pictofixedwidth em088"'), 0, 0, $notooltip ? 0 : 1); + $result .= img_object(($notooltip ? '' : $label), $picto, ($notooltip ? (($withpicto != 2) ? 'class="pictofixedwidth"' : '') : 'class="'.(($withpicto != 2) ? 'pictofixedwidth ' : '').'classfortooltip pictofixedwidth em088"'), 0, 0, $notooltip ? 0 : 1); } if ($withpicto != 2) { $result .= $this->ref; } $result .= $linkend; if ($withpicto != 2) { - $result .= (($addlabel && $this->title) ? $sep.dol_trunc($this->title, ($addlabel > 1 ? $addlabel : 0)) : ''); + $result .= (($addlabel && $this->title) ? ''.$sep.dol_trunc($this->title, ($addlabel > 1 ? $addlabel : 0)).'' : ''); } global $action; diff --git a/htdocs/projet/comment.php b/htdocs/projet/comment.php index 5ea5b920f8c..024dce3abc9 100644 --- a/htdocs/projet/comment.php +++ b/htdocs/projet/comment.php @@ -105,7 +105,7 @@ $morehtmlref = '
    '; $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= '
    '; @@ -134,15 +134,6 @@ if ($object->public) { } print ''; -// Date start - end -print ''; - // Budget print ''; +// Date start - end project +print ''; + // Other attributes $cols = 2; // include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index ee37aa68fdd..f6827fc19b3 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -296,7 +296,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -385,8 +385,15 @@ if ($id > 0 || !empty($ref)) { print ''; } - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 0a2acc4c3bc..bb50bf0def6 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -138,7 +138,7 @@ if ($object->id > 0) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 01ffe38cc0d..f96f5737cf4 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -218,7 +218,7 @@ $morehtmlref = '
    '; $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= '
    '; @@ -307,8 +307,15 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { print ''; } -// Date start - end -print ''; + +// Date start - end project +print ''; -// Budget -print ''; - // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; @@ -388,7 +388,7 @@ $listofreferent = array( 'lang'=>'propal', 'buttonnew'=>'AddProp', 'testnew'=>$user->rights->propal->creer, - 'test'=>$conf->propal->enabled && $user->rights->propale->lire), + 'test'=>$conf->propal->enabled && $user->rights->propal->lire), 'order'=>array( 'name'=>"CustomersOrders", 'title'=>"ListOrdersAssociatedProject", diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index c5549429edb..f2889d7c469 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -117,7 +117,7 @@ if (($id > 0 && is_numeric($id)) || !empty($ref)) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -179,8 +179,15 @@ if (($id > 0 && is_numeric($id)) || !empty($ref)) { } print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/graph_opportunities.inc.php b/htdocs/projet/graph_opportunities.inc.php index ae0542d8b4b..8c6fc512509 100644 --- a/htdocs/projet/graph_opportunities.inc.php +++ b/htdocs/projet/graph_opportunities.inc.php @@ -43,7 +43,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { $valsnb = array(); $valsamount = array(); $dataseries = array(); - // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Sent/Received, billed or not) + // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for sale orders), 3=Closed (Sent/Received, billed or not) while ($i < $num) { $obj = $db->fetch_object($resql); if ($obj) { diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 29078c054a5..696888a75dd 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -143,15 +143,12 @@ $search_date_end_endmonth = GETPOST('search_date_end_endmonth', 'int'); $search_date_end_endyear = GETPOST('search_date_end_endyear', 'int'); $search_date_end_endday = GETPOST('search_date_end_endday', 'int'); $search_date_end_end = dol_mktime(23, 59, 59, $search_date_end_endmonth, $search_date_end_endday, $search_date_end_endyear); // Use tzserver - +$search_category_array = GETPOST("search_category_".Categorie::TYPE_PROJECT."_list", "array"); if ($search_status == '') { $search_status = -1; // -1 or 1 } -if (isModEnabled('categorie')) { - $search_category_array = GETPOST("search_category_".Categorie::TYPE_PROJECT."_list", "array"); -} // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $object = new Project($db); @@ -424,9 +421,6 @@ $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $obje $sql .= preg_replace('/^,/', '', $hookmanager->resPrint); $sql = preg_replace('/,\s*$/', '', $sql); $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as p"; -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterJoinQuery(Categorie::TYPE_PROJECT, "p.rowid"); -} if (!empty($extrafields->attributes[$object->table_element]['label']) &&is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (p.rowid = ef.fk_object)"; } @@ -447,9 +441,6 @@ if ($search_project_contact > 0) { $sql .= ", ".MAIN_DB_PREFIX."element_contact as ecp_contact"; } $sql .= " WHERE p.entity IN (".getEntity('project').')'; -if (isModEnabled('categorie')) { - $sql .= Categorie::getFilterSelectQuery(Categorie::TYPE_PROJECT, "p.rowid", $search_category_array); -} if (empty($user->rights->projet->all->lire)) { $sql .= " AND p.rowid IN (".$db->sanitize($projectsListId).")"; // public and assigned to, or restricted to company for external users } @@ -569,6 +560,32 @@ if ($search_price_booth != '') { if ($search_login) { $sql .= natural_search(array('u.login', 'u.firstname', 'u.lastname'), $search_login); } +// Search for tag/category ($searchCategoryProjectList is an array of ID) +$searchCategoryProjectList = $search_category_array; +$searchCategoryProjectOperator = 0; +if (!empty($searchCategoryProjectList)) { + $searchCategoryProjectSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryProjectList as $searchCategoryProject) { + if (intval($searchCategoryProject) == -2) { + $searchCategoryProjectSqlList[] = "NOT EXISTS (SELECT ck.fk_project FROM ".MAIN_DB_PREFIX."categorie_project as ck WHERE p.rowid = ck.fk_project)"; + } elseif (intval($searchCategoryProject) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProject); + } + } + if ($listofcategoryid) { + $searchCategoryProjectSqlList[] = " EXISTS (SELECT ck.fk_project FROM ".MAIN_DB_PREFIX."categorie_project as ck WHERE p.rowid = ck.fk_project AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryProjectOperator == 1) { + if (!empty($searchCategoryProjectSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProjectSqlList).")"; + } + } else { + if (!empty($searchCategoryProjectSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProjectSqlList).")"; + } + } +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -1338,7 +1355,8 @@ while ($i < $imaxinloop) { $totalarray['nbfield']++; } } - // Date start + + // Date start project if (!empty($arrayfields['p.dateo']['checked'])) { print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; @@ -750,12 +750,12 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third } print ''; - // Date start + // Date start task print ''; - // Date end + // Date end task print ''; @@ -774,18 +774,14 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third print ''; print ''; diff --git a/htdocs/projet/tasks/comment.php b/htdocs/projet/tasks/comment.php index 1f5628bb050..4540112f4c3 100644 --- a/htdocs/projet/tasks/comment.php +++ b/htdocs/projet/tasks/comment.php @@ -132,7 +132,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -221,8 +221,15 @@ if ($id > 0 || !empty($ref)) { print ''; } - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 14a87b375e8..4bbc48900af 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -196,7 +196,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -257,8 +257,15 @@ if ($id > 0 || !empty($ref)) { } print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index 3e569cd557f..6a62e973a62 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -153,7 +153,7 @@ if ($object->id > 0) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -214,8 +214,15 @@ if ($object->id > 0) { } print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 2c84872bb38..76261480ffe 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -46,7 +46,7 @@ $mode = GETPOST('mode', 'aZ'); $id = GETPOST('id', 'int'); $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$search_categ = GETPOST("search_categ", 'alpha'); +$search_categ = GETPOST("search_categ", 'int'); $search_projectstatus = GETPOST('search_projectstatus'); if (!isset($search_projectstatus) || $search_projectstatus === '') { @@ -332,13 +332,9 @@ $distinct = 'DISTINCT'; // We add distinct until we are added a protection to be $sql = "SELECT ".$distinct." p.rowid as projectid, p.ref as projectref, p.title as projecttitle, p.fk_statut as projectstatus, p.datee as projectdatee, p.fk_opp_status, p.public, p.fk_user_creat as projectusercreate, p.usage_bill_time,"; $sql .= " s.nom as name, s.name_alias as alias, s.rowid as socid,"; $sql .= " t.datec as date_creation, t.dateo as date_start, t.datee as date_end, t.tms as date_update,"; -$sql .= " t.rowid as id, t.ref, t.label, t.planned_workload, t.duration_effective, t.progress, t.fk_statut, "; +$sql .= " t.rowid as id, t.ref, t.label, t.planned_workload, t.duration_effective, t.progress, t.fk_statut,"; $sql .= " t.description, t.fk_task_parent"; $sql .= " ,t.budget_amount"; -// We'll need these fields in order to filter by categ -if ($search_categ > 0) { - $sql .= ", cs.fk_categorie, cs.fk_project"; -} // Add sum fields if (!empty($arrayfields['t.tobill']['checked']) || !empty($arrayfields['t.billed']['checked'])) { $sql .= " , SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "0", "1").") as billed"; @@ -355,10 +351,6 @@ $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // N $sql .= $hookmanager->resPrint; $sql .= " FROM ".MAIN_DB_PREFIX."projet as p"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; -// We'll need this table joined to the select in order to filter by categ -if ($search_categ > 0) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_project as cs ON p.rowid = cs.fk_project"; // We'll need this table joined to the select in order to filter by categ -} $sql .= ", ".MAIN_DB_PREFIX."projet_task as t"; if (!empty($arrayfields['t.tobill']['checked']) || !empty($arrayfields['t.billed']['checked'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tt ON tt.fk_task = t.rowid"; @@ -384,12 +376,6 @@ if (is_object($projectstatic) && $projectstatic->id > 0) { if ($socid) { $sql .= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".((int) $socid).")"; } -if ($search_categ > 0) { - $sql .= " AND cs.fk_categorie = ".((int) $search_categ); -} -if ($search_categ == -2) { - $sql .= " AND cs.fk_categorie IS NULL"; -} if ($search_project_ref) { $sql .= natural_search('p.ref', $search_project_ref); } @@ -448,6 +434,32 @@ if ($search_project_user > 0) { if ($search_task_user > 0) { $sql .= " AND ect.fk_c_type_contact IN (".$db->sanitize(join(',', array_keys($listoftaskcontacttype))).") AND ect.element_id = t.rowid AND ect.fk_socpeople = ".((int) $search_task_user); } +// Search for tag/category ($searchCategoryProjectList is an array of ID) +$searchCategoryProjectList = array($search_categ); +$searchCategoryProjectOperator = 0; +if (!empty($searchCategoryProjectList)) { + $searchCategoryProjectSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryProjectList as $searchCategoryProject) { + if (intval($searchCategoryProject) == -2) { + $searchCategoryProjectSqlList[] = "NOT EXISTS (SELECT ck.fk_project FROM ".MAIN_DB_PREFIX."categorie_project as ck WHERE p.rowid = ck.fk_project)"; + } elseif (intval($searchCategoryProject) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProject); + } + } + if ($listofcategoryid) { + $searchCategoryProjectSqlList[] = " EXISTS (SELECT ck.fk_project FROM ".MAIN_DB_PREFIX."categorie_project as ck WHERE p.rowid = ck.fk_project AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryProjectOperator == 1) { + if (!empty($searchCategoryProjectSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProjectSqlList).")"; + } + } else { + if (!empty($searchCategoryProjectSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProjectSqlList).")"; + } + } +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -459,9 +471,6 @@ if (!empty($arrayfields['t.tobill']['checked']) || !empty($arrayfields['t.billed $sql .= " s.nom, s.rowid,"; $sql .= " t.datec, t.dateo, t.datee, t.tms,"; $sql .= " t.rowid, t.ref, t.label, t.planned_workload, t.duration_effective, t.progress,t.budget_amount, t.fk_statut"; - if ($search_categ) { - $sql .= ", cs.fk_categorie, cs.fk_project"; - } // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { @@ -675,7 +684,7 @@ if (isModEnabled('categorie') && $user->rights->categorie->lire) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
    '; $tmptitle = $langs->trans('ProjectCategories'); - $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('project', $search_categ, 'search_categ', 0, $tmptitle, 'maxwidth300'); + $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('project', $search_categ, 'search_categ', 1, $tmptitle, 'maxwidth300'); $moreforfilter .= '
    '; } @@ -1108,7 +1117,8 @@ while ($i < $imaxinloop) { $totalarray['nbfield']++; } } - // Date start + + // Date start project if (!empty($arrayfields['t.dateo']['checked'])) { print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index ef00a85a0d4..8b19c8c0519 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -100,8 +100,11 @@ if ($action == 'update' && !GETPOST("cancel") && $user->rights->projet->creer) { $object->ref = $taskref ? $taskref : GETPOST("ref", 'alpha', 2); $object->label = GETPOST("label", "alphanohtml"); - if (empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) $object->description = GETPOST('description', "alphanohtml"); - else $object->description = GETPOST('description', "restricthtml"); + if (empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) { + $object->description = GETPOST('description', "alphanohtml"); + } else { + $object->description = GETPOST('description', "restricthtml"); + } $object->fk_task_parent = $task_parent; $object->planned_workload = $planned_workload; $object->date_start = dol_mktime(GETPOST('dateohour', 'int'), GETPOST('dateomin', 'int'), 0, GETPOST('dateomonth', 'int'), GETPOST('dateoday', 'int'), GETPOST('dateoyear', 'int')); @@ -264,7 +267,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $projectstatic->title; // Thirdparty if (!empty($projectstatic->thirdparty->id) &&$projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -325,8 +328,15 @@ if ($id > 0 || !empty($ref)) { } print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; @@ -491,18 +494,14 @@ if ($id > 0 || !empty($ref)) { print ''; print ''; print ''; @@ -578,7 +577,7 @@ if ($id > 0 || !empty($ref)) { } print ''; - // Date start - Date end + // Date start - Date end task print ''; - // Date start - end - print ''; + + // Date start - end project + print ''; - // Budget - print ''; - // Other attributes $cols = 2; - //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + $savobject = $object; + $object = $projectstatic; + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + $object = $savobject; print '
    '.$langs->trans('Label').'
    '.$langs->trans('Description').''; - $doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_3, '90%'); $doleditor->Create(); print '
    '.$langs->trans('Other').' ('.$langs->trans("NotUsed").')'; - $doleditor = new DolEditor("other-$key", $object->multilangs[$key]["other"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor("other-$key", $object->multilangs[$key]["other"], '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_3, '90%'); $doleditor->Create(); } print '
    '.$langs->trans('Label').'
    '.$langs->trans('Description').''; - $doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_3, '90%'); $doleditor->Create(); print '
    '.$langs->trans('Other').' ('.$langs->trans("NotUsed").''; - $doleditor = new DolEditor('other', '', '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_3, '90%'); + $doleditor = new DolEditor('other', '', '', 160, 'dolibarr_notes', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_DETAILS'), ROWS_3, '90%'); $doleditor->Create(); print '
    '.$langs->trans("DateStart").''; - print $form->selectDate(($date_start ? $date_start : ''), 'projectstart', 0, 0, 0, '', 1, 0); - print '
    '.$langs->trans("DateEnd").''; - print $form->selectDate(($date_end ? $date_end : -1), 'projectend', 0, 0, 0, '', 1, 0); - print '
    '.$langs->trans("OpportunityStatus").'
    '.$langs->trans("Date").(isModEnabled('eventorganization') ? ' ('.$langs->trans("Project").')' : '').''; + print $form->selectDate(($date_start ? $date_start : ''), 'projectstart', 0, 0, 0, '', 1, 0); + print ' '.$langs->trans("to").' '; + print $form->selectDate(($date_end ? $date_end : -1), 'projectend', 0, 0, 0, '', 1, 0); + print '
    '.$langs->trans("Date").' ('.$langs->trans("Event").')'; + print $form->selectDate(($date_start_event ? $date_start_event : -1), 'date_start_event', 1, 1, 1, '', 1, 0); + print ' '.$langs->trans("to").' '; + print $form->selectDate(($date_end_event ? $date_end_event : -1), 'date_end_event', 1, 1, 1, '', 1, 0); + print '
    '.$langs->trans("Location").'
    '.$langs->trans("Description").''; @@ -852,11 +889,12 @@ if ($action == 'create' && $user->rights->projet->creer) { // Status print '
    '.$langs->trans("Status").''; - print ''; foreach ($object->statuts_short as $key => $val) { - print ''; + print ''; } print ''; + print ajax_combobox('status'); print '
    '.$langs->trans("DateStart").''; + // Budget + print '
    '.$langs->trans("Budget").''; + print $langs->getCurrencySymbol($conf->currency); + print '
    '.$langs->trans("Date").(isModEnabled('eventorganization') ? ' ('.$langs->trans("Project").')' : '').''; print $form->selectDate($object->date_start ? $object->date_start : -1, 'projectstart', 0, 0, 0, '', 1, 0); + print ' '.$langs->trans("to").' '; + print $form->selectDate($object->date_end ? $object->date_end : -1, 'projectend', 0, 0, 0, '', 1, 0); print '     rights->projet->creer) { print '/>'; print '
    '.$langs->trans("DateEnd").''; - print $form->selectDate($object->date_end ? $object->date_end : -1, 'projectend', 0, 0, 0, '', 1, 0); - print '
    '.$langs->trans("Date").' ('.$langs->trans("Event").')'; + print $form->selectDate(($date_start_event ? $date_start_event : ($object->date_start_event ? $object->date_start_event : -1)), 'date_start_event', 1, 1, 1, '', 1, 0); + print ' '.$langs->trans("to").' '; + print $form->selectDate(($date_end_event ? $date_end_event : ($object->date_end_event ? $object->date_end_event : -1)), 'date_end_event', 1, 1, 1, '', 1, 0); + print '
    '.$langs->trans("Budget").''; - print $langs->getCurrencySymbol($conf->currency); - print '
    '.$langs->trans("Location").'
    '.$langs->trans("Description").'
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - $start = dol_print_date($object->date_start, 'day'); - print ($start ? $start : '?'); - $end = dol_print_date($object->date_end, 'day'); - print ' - '; - print ($end ? $end : '?'); - if ($object->hasDelay()) { - print img_warning("Late"); - } - print '
    '.$langs->trans("Budget").''; if (strcmp($object->budget_amount, '')) { @@ -1162,6 +1214,18 @@ if ($action == 'create' && $user->rights->projet->creer) { } print '
    '.$langs->trans("Dates").''; + $start = dol_print_date($object->date_start, 'day'); + print ($start ? $start : '?'); + $end = dol_print_date($object->date_end, 'day'); + print ' - '; + print ($end ? $end : '?'); + if ($object->hasDelay()) { + print img_warning("Late"); + } + print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; -print dol_print_date($object->date_start, 'day'); -$end = dol_print_date($object->date_end, 'day'); -if ($end) { - print ' - '.$end; -} -print '
    '.$langs->trans("Budget").''; if (strcmp($object->budget_amount, '')) { @@ -150,6 +141,15 @@ if (strcmp($object->budget_amount, '')) { } print '
    '.$langs->trans("Dates").''; +print dol_print_date($object->date_start, 'day'); +$end = dol_print_date($object->date_end, 'day'); +if ($end) { + print ' - '.$end; +} +print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($object->budget_amount, '')) { + print ''.price($object->budget_amount, '', $langs, 0, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($object->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($object->date_end, 'day'); @@ -397,13 +404,6 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($object->budget_amount, '')) { - print ''.price($object->budget_amount, '', $langs, 0, 0, 0, $conf->currency).''; - } - print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; +// Budget +print '
    '.$langs->trans("Budget").''; +if (strcmp($object->budget_amount, '')) { + print ''.price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; +} +print '
    '.$langs->trans("Dates").''; $start = dol_print_date($object->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($object->date_end, 'day'); @@ -319,13 +326,6 @@ if ($object->hasDelay()) { } print '
    '.$langs->trans("Budget").''; -if (strcmp($object->budget_amount, '')) { - print ''.price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; -} -print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($object->budget_amount, '')) { + print price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($object->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($object->date_end, 'day'); @@ -191,13 +198,6 @@ if (($id > 0 && is_numeric($id)) || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($object->budget_amount, '')) { - print price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency); - } - print '
    '; print dol_print_date($db->jdate($obj->date_start), 'day'); @@ -1347,7 +1365,7 @@ while ($i < $imaxinloop) { $totalarray['nbfield']++; } } - // Date end + // Date end project if (!empty($arrayfields['p.datee']['checked'])) { print ''; print dol_print_date($db->jdate($obj->date_end), 'day'); @@ -1356,6 +1374,7 @@ while ($i < $imaxinloop) { $totalarray['nbfield']++; } } + // Visibility if (!empty($arrayfields['p.public']['checked'])) { print ''; diff --git a/htdocs/projet/messaging.php b/htdocs/projet/messaging.php new file mode 100644 index 00000000000..7fe5b4a0b9d --- /dev/null +++ b/htdocs/projet/messaging.php @@ -0,0 +1,221 @@ + + * Copyright (C) 2005-2009 Regis Houssin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/projet/messaging.php + * \ingroup project + * \brief Page with events on project + */ + +// Load Dolibarr environment +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + +// Load translation files required by the page +$langs->load("projects"); + +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$socid = GETPOST('socid', 'int'); +$action = GETPOST('action', 'aZ09'); + +$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; +$sortfield = GETPOST("sortfield", "aZ09comma"); +$sortorder = GETPOST("sortorder", 'aZ09comma'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = is_numeric($page) ? $page : 0; +$page = $page == -1 ? 0 : $page; +if (!$sortfield) { + $sortfield = "a.datep,a.id"; +} +if (!$sortorder) { + $sortorder = "DESC"; +} +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; + +if (GETPOST('actioncode', 'array')) { + $actioncode = GETPOST('actioncode', 'array', 3); + if (!count($actioncode)) { + $actioncode = '0'; + } +} else { + $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} +$search_agenda_label = GETPOST('search_agenda_label'); + +$hookmanager->initHooks(array('projectcardinfo')); + +// Security check +$id = GETPOST("id", 'int'); +$socid = 0; +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. +$result = restrictedArea($user, 'projet', $id, 'projet&project'); + +if (!$user->rights->projet->lire) { + accessforbidden(); +} + + + +/* + * Actions + */ + +$parameters = array('id'=>$socid); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} + +// Purge search criteria +if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All test are required to be compatible with all browsers + $actioncode = ''; + $search_agenda_label = ''; +} + + + +/* + * View + */ + +$form = new Form($db); +$object = new Project($db); + +if ($id > 0 || !empty($ref)) { + $object->fetch($id, $ref); + $object->fetch_thirdparty(); + if (!empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($object, 'fetchComments') && empty($object->comments)) { + $object->fetchComments(); + } + $object->info($object->id); +} +$agenda = (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) ? '/'.$langs->trans("Agenda") : ''; +$title = $langs->trans('Events').$agenda.' - '.$object->ref.' '.$object->name; +if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/projectnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { + $title = $object->ref.' '.$object->name.' - '.$langs->trans("Info"); +} +$help_url = "EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; +llxHeader("", $title, $help_url); + +$head = project_prepare_head($object); + +print dol_get_fiche_head($head, 'agenda', $langs->trans("Project"), -1, ($object->public ? 'projectpub' : 'project')); + + +// Project card + +$linkback = ''.$langs->trans("BackToList").''; + +$morehtmlref = '
    '; +// Title +$morehtmlref .= $object->title; +// Thirdparty +if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); +} +$morehtmlref .= '
    '; + +// Define a complementary filter for search of next/prev ref. +if (empty($user->rights->projet->all->lire)) { + $objectsListId = $object->getProjectsAuthorizedForUser($user, 0, 0); + $object->next_prev_filter = " rowid IN (".$db->sanitize(count($objectsListId) ?join(',', array_keys($objectsListId)) : '0').")"; +} + +dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + +print '
    '; +print '
    '; + +dol_print_object_info($object, 1); + +print '
    '; + +print '
    '; + +print dol_get_fiche_end(); + + +// Actions buttons + +$out = ''; +$permok = $user->rights->agenda->myactions->create; +if ($permok) { + $out .= '&projectid='.$object->id; +} + + + +//print ''; + +if (!empty($object->id)) { + print '
    '; + + //print '
    '; + $morehtmlcenter = ''; + + // Show link to change view in message + $messagingUrl = DOL_URL_ROOT.'/projet/messaging.php?id='.$object->id; + $morehtmlcenter .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 2); + + // Show link to change view in agenda + $messagingUrl = DOL_URL_ROOT.'/projet/agenda.php?id='.$object->id; + $morehtmlcenter .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 1); + + + // // Show link to send an email (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&private_message=0&send_email=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('SendMail'), '', 'fa fa-paper-plane', $url, 'email-title-button', $btnstatus); + + // // Show link to add a private message (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('TicketAddMessage'), '', 'fa fa-comment-dots', $url, 'add-new-ticket-title-button', $btnstatus); + + // Show link to add event + if (isModEnabled('agenda')) { + $addActionBtnRight = !empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create); + $morehtmlcenter .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'&socid='.$object->socid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $addActionBtnRight); + } + + $param = '&id='.$object->id; + if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { + $param .= '&contextpage='.$contextpage; + } + if ($limit > 0 && $limit != $conf->liste_limit) { + $param .= '&limit='.$limit; + } + + print_barre_liste($langs->trans("ActionsOnProject"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlcenter, '', 0, 1, 1); + + // List of all actions + $filters = array(); + $filters['search_agenda_label'] = $search_agenda_label; + show_actions_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index ce099c04745..3ca7949b35a 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -102,7 +102,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= '
    '; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 73d3c238026..951406b4275 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -553,7 +553,7 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -614,8 +614,15 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($object->budget_amount, '')) { + print ''.price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($object->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($object->date_end, 'day'); @@ -626,13 +633,6 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($object->budget_amount, '')) { - print ''.price($object->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; - } - print '
    '.$langs->trans("DateStart").''; print $form->selectDate((!empty($date_start) ? $date_start : ''), 'dateo', 1, 1, 0, '', 1, 1); print '
    '.$langs->trans("DateEnd").''; print $form->selectDate((!empty($date_end) ? $date_end : -1), 'datee', -1, 1, 0, '', 1, 1); print '
    '.$langs->trans("Description").''; - if (empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) { - print ''; - } else { - // WYSIWYG editor - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0); - if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) { - $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT; - } - $doleditor = new DolEditor('description', $object->description, '', 80, 'dolibarr_details', '', false, true, $cked_enabled, $nbrows); - print $doleditor->Create(); + // WYSIWYG editor + include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_SOCIETE) ? $conf->global->FCKEDITOR_ENABLE_SOCIETE : 0); + if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) { + $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT; } + $doleditor = new DolEditor('description', $object->description, '', 80, 'dolibarr_details', '', false, true, $cked_enabled, $nbrows); + print $doleditor->Create(); print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -233,13 +240,6 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); - } - print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -269,13 +276,6 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); - } - print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -226,13 +233,6 @@ if ($object->id > 0) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); - } - print '
    '; print dol_print_date($db->jdate($obj->date_start), 'day'); @@ -1117,7 +1127,7 @@ while ($i < $imaxinloop) { $totalarray['nbfield']++; } } - // Date end + // Date end project if (!empty($arrayfields['t.datee']['checked'])) { print ''; print dol_print_date($db->jdate($obj->date_end), 'day'); diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index 40f8f636e72..01c39c990f4 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -142,7 +142,7 @@ if ($object->id > 0) { $morehtmlref .= $projectstatic->title; // Thirdparty if ($projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -203,8 +203,15 @@ if ($object->id > 0) { } print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -215,13 +222,6 @@ if ($object->id > 0) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency); - } - print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print ''.price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -337,13 +347,6 @@ if ($id > 0 || !empty($ref)) { } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print ''.price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; - } - print '
    '.$langs->trans("Description").''; - if (empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) { - print ''; - } else { - // WYSIWYG editor - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0); - if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) { - $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT; - } - $doleditor = new DolEditor('description', $object->description, '', 80, 'dolibarr_details', '', false, true, $cked_enabled, $nbrows); - print $doleditor->Create(); + // WYSIWYG editor + include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_SOCIETE) ? $conf->global->FCKEDITOR_ENABLE_SOCIETE : 0); + if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) { + $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT; } + $doleditor = new DolEditor('description', $object->description, '', 80, 'dolibarr_details', '', false, true, $cked_enabled, $nbrows); + print $doleditor->Create(); print '
    '.$langs->trans("Budget").'
    '.$langs->trans("DateStart").' - '.$langs->trans("Deadline").''; $start = dol_print_date($object->date_start, 'dayhour'); print ($start ? $start : '?'); @@ -674,14 +673,15 @@ if ($id > 0 || !empty($ref)) { } // Delete - if ($user->rights->projet->supprimer) { + $permissiontodelete = $user->hasRight('projet', 'supprimer'); + if ($permissiontodelete) { if (!$object->hasChildren() && !$object->hasTimeSpent()) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().'&withproject='.((int) $withproject), 'delete', $permissiontodelete); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("TaskHasChild"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().'&withproject='.((int) $withproject), 'delete', 0); } } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().'&withproject='.((int) $withproject), 'delete', $permissiontodelete); } print ''; diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index b25ad6fa202..8e30664232b 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -432,6 +432,9 @@ if ($action == 'confirm_generateinvoice') { $tmpinvoice->socid = $projectstatic->thirdparty->id; $tmpinvoice->date = dol_mktime(GETPOST('rehour', 'int'), GETPOST('remin', 'int'), GETPOST('resec', 'int'), GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); $tmpinvoice->fk_project = $projectstatic->id; + $tmpinvoice->cond_reglement_id = $projectstatic->thirdparty->cond_reglement_id; + $tmpinvoice->mode_reglement_id = $projectstatic->thirdparty->mode_reglement_id; + $tmpinvoice->fk_account = $projectstatic->thirdparty->fk_account; if ($invoiceToUse) { $tmpinvoice->fetch($invoiceToUse); @@ -903,7 +906,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $morehtmlref .= $projectstatic->title; // Thirdparty if (!empty($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; @@ -964,8 +967,15 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } print '
    '.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; + // Budget + print '
    '.$langs->trans("Budget").''; + if (strcmp($projectstatic->budget_amount, '')) { + print ''.price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; + } + print '
    '.$langs->trans("Dates").''; $start = dol_print_date($projectstatic->date_start, 'day'); print ($start ? $start : '?'); $end = dol_print_date($projectstatic->date_end, 'day'); @@ -976,16 +986,12 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } print '
    '.$langs->trans("Budget").''; - if (strcmp($projectstatic->budget_amount, '')) { - print ''.price($projectstatic->budget_amount, '', $langs, 1, 0, 0, $conf->currency).''; - } - print '
    '; @@ -1124,7 +1130,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser } print ''; - // Date start - Date end + // Date start - Date end task print ''.$langs->trans("DateStart").' - '.$langs->trans("Deadline").''; $start = dol_print_date($object->date_start, 'dayhour'); print ($start ? $start : '?'); @@ -1985,7 +1991,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.note']['checked'])) { print ''; if ($action == 'editline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } else { print dol_nl2br($task_time->note); } @@ -1994,7 +2000,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser $totalarray['nbfield']++; } } elseif ($action == 'editline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } // Time spent @@ -2216,13 +2222,13 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.note']['checked'])) { print ''; if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } else { print dol_nl2br($task_time->note); } print ''; } elseif ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } // Time spent @@ -2354,13 +2360,13 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser if (!empty($arrayfields['t.note']['checked'])) { print ''; if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } else { print dol_nl2br($task_time->note); } print ''; } elseif ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) { - print ''; + print ''; } // Time spent diff --git a/htdocs/public/eventorganization/attendee_new.php b/htdocs/public/eventorganization/attendee_new.php index 589bf2c8dac..8d7e4503c6b 100644 --- a/htdocs/public/eventorganization/attendee_new.php +++ b/htdocs/public/eventorganization/attendee_new.php @@ -475,7 +475,7 @@ if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conferen $resultprod = $productforinvoicerow->fetch($conf->global->SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION); } - // Create invoice + // Create the draft invoice for the payment if ($resultprod < 0) { $error++; $errmsg .= $productforinvoicerow->error; @@ -524,12 +524,19 @@ if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conferen $vattouse = get_default_tva($mysoc, $thirdparty, $productforinvoicerow->id); $labelforproduct = $outputlangs->trans("EventFee", $project->title); - $date_start = $project->date_start; - $date_end = $project->date_end; + if ($project->location) { + $labelforproduct .= ' - '.$project->location; + } + $date_start = $project->date_start_event; + $date_end = $project->date_end_event; // If there is no lines yet, we add one if (empty($facture->lines)) { - $result = $facture->addline($labelforproduct, floatval($project->price_registration), 1, $vattouse, 0, 0, $productforinvoicerow->id, 0, $date_start, $date_end, 0, 0, '', 'HT', 0, 1); + $pu_ttc = floatval($project->price_registration); + $pu_ht = 0; + $price_base_type = 'TTC'; + + $result = $facture->addline($labelforproduct, $pu_ht, 1, $vattouse, 0, 0, $productforinvoicerow->id, 0, $date_start, $date_end, 0, 0, '', $price_base_type, $pu_ttc, 1); if ($result <= 0) { $confattendee->error = $facture->error; $confattendee->errors = $facture->errors; @@ -642,28 +649,60 @@ print load_fiche_titre($langs->trans("NewRegistration"), '', '', 0, 0, 'center') print '
    '; print '
    '; -print '
    '; +print '
    '; // Welcome message -print $langs->trans("EvntOrgWelcomeMessage", $project->title . ' '. $conference->label); +print ''.$langs->trans("EvntOrgWelcomeMessage").''; print '
    '; +print ''.$project->title . ' '. $conference->label.'
    '; +if ($project->date_start_event || $project->date_end_event) { + print ''; +} +if ($project->date_start_event) { + $format = 'day'; + $tmparray = dol_getdate($project->date_start_event, false, ''); + if ($tmparray['hours'] || $tmparray['minutes'] || $tmparray['minutes']) { + $format = 'dayhour'; + } + print dol_print_date($project->date_start_event, $format); +} +if ($project->date_start_event && $project->date_end_event) { + print ' - '; +} +if ($project->date_end_event) { + $format = 'day'; + $tmparray = dol_getdate($project->date_end_event, false, ''); + if ($tmparray['hours'] || $tmparray['minutes'] || $tmparray['minutes']) { + $format = 'dayhour'; + } + print dol_print_date($project->date_end_event, $format); +} +if ($project->date_start_event || $project->date_end_event) { + print '
    '; +} +if ($project->location) { + print ''.$project->location.'
    '; +} + $maxattendees = 0; -if ($conference->id) { +if ($conference->id > 0) { + /* date of project is not date of event so commented print $langs->trans("Date").': '; print dol_print_date($conference->datep); if ($conference->date_end) { print ' - '; print dol_print_date($conference->datef); - } + }*/ } else { + /* date of project is not date of event so commented print $langs->trans("Date").': '; print dol_print_date($project->date_start); if ($project->date_end) { print ' - '; print dol_print_date($project->date_end); - } - $maxattendees = $project->max_attendees; + }*/ + $maxattendees = $project->max_attendees; // Max attendeed for the project/event } print '
    '; @@ -674,7 +713,6 @@ if ($maxattendees && $currentnbofattendees >= $maxattendees) { } -print '
    '; dol_htmloutput_errors($errmsg, $errors); @@ -691,8 +729,8 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS print ''; print '
    '; - - print '
    ' . $langs->trans("FieldsWithAreMandatory", '*') . '
    '; + print '
    '; + //print '' . $langs->trans("FieldsWithAreMandatory", '*') . '
    '; //print $langs->trans("FieldsWithIsForPublic",'**').'
    '; print dol_get_fiche_head(''); @@ -711,22 +749,26 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS print '' . "\n"; // Email - print '' . "\n"; + print '' . "\n"; // Company - print '' . "\n"; + print 'price_registration)) ? '' : ' required').'>' . "\n"; // Email company for invoice if ($project->price_registration) { - print '' . "\n"; } @@ -743,7 +785,7 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS print ''; // Country - print ''; } @@ -801,8 +843,8 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS } print ''; - print "\n"; + print "
    "; print ''; } diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php index 91c3ec2ce73..10cb5e4354f 100644 --- a/htdocs/public/onlinesign/newonlinesign.php +++ b/htdocs/public/onlinesign/newonlinesign.php @@ -78,6 +78,9 @@ $message = GETPOST('message', 'aZ09'); $suffix = GETPOST("suffix", 'aZ09'); $source = GETPOST("source", 'alpha'); $ref = $REF = GETPOST("ref", 'alpha'); +$urlok = ''; +$urlko = ''; + if (empty($source)) { $source = 'proposal'; @@ -130,6 +133,8 @@ if ($source == 'proposal') { $securekeyseed = getDolGlobalString('PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN'); } elseif ($source == 'contract') { $securekeyseed = getDolGlobalString('CONTRACT_ONLINE_SIGNATURE_SECURITY_TOKEN'); +} elseif ($source == 'fichinter') { + $securekeyseed = getDolGlobalString('FICHINTER_ONLINE_SIGNATURE_SECURITY_TOKEN'); } if (!dol_verifyHash($securekeyseed.$type.$ref.(isModEnabled('multicompany') ? $entity : ''), $SECUREKEY, '0')) { httponly_accessforbidden('Bad value for securitykey. Value provided '.dol_escape_htmltag($SECUREKEY).' does not match expected value for ref='.dol_escape_htmltag($ref), 403, 1); @@ -143,6 +148,10 @@ if ($source == 'proposal') { require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $object = new Contrat($db); $result= $object->fetch(0, $ref); +} elseif ($source == 'fichinter') { + require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; + $object = new Fichinter($db); + $result= $object->fetch(0, $ref); } else { httponly_accessforbidden($langs->trans('ErrorBadParameters')." - Bad value for source", 400, 1); } @@ -289,6 +298,9 @@ if (empty($text)) { } elseif ($source == 'contract') { $text .= ''."\n"; $text .= ''."\n"; + } elseif ($source == 'fichinter') { + $text .= ''."\n"; + $text .= ''."\n"; } } print $text; @@ -300,6 +312,8 @@ if ($source == 'proposal') { print ''."\n"; } elseif ($source == 'contract') { print ''."\n"; +} elseif ($source == 'fichinter') { + print ''."\n"; } $found = false; $error = 0; @@ -430,6 +444,55 @@ if ($source == 'proposal') { } + print ''; + print ''; + print ''."\n"; +} elseif ($source == 'fichinter') { // Signature on fichinter + $found = true; + $langs->load("fichinter"); + + $result = $object->fetch_thirdparty($object->socid); + // Proposer + print ''."\n"; + + // Target + print ''."\n"; + + // Object + $text = ''.$langs->trans("SignatureFichinterRef", $object->ref).''; + print ''."\n"; @@ -542,6 +605,12 @@ if ($action == "dosign" && empty($cancel)) { } else { print ''; } + } elseif ($source == 'fichinter') { + if ($message == 'signed') { + print ''.$langs->trans("FichinterSigned").''; + } else { + print ''; + } } } print ''."\n"; diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php index bd49b6afbe4..f11f8aea918 100644 --- a/htdocs/public/opensurvey/studs.php +++ b/htdocs/public/opensurvey/studs.php @@ -116,9 +116,9 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) { // bo if (GETPOST('nom', 'alphanohtml')) { $nouveauchoix = ''; for ($i = 0; $i < $nbcolonnes; $i++) { - if (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '1') { + if (GETPOSTISSET("choix".$i) && GETPOST("choix".$i) == '1') { $nouveauchoix .= "1"; - } elseif (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '2') { + } elseif (GETPOSTISSET("choix".$i) && GETPOST("choix".$i) == '2') { $nouveauchoix .= "2"; } else { $nouveauchoix .= "0"; diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index d3b08e9672b..0a70c6c5204 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -342,9 +342,9 @@ $creditor = $mysoc->name; $paramcreditor = 'ONLINE_PAYMENT_CREDITOR'; $paramcreditorlong = 'ONLINE_PAYMENT_CREDITOR_'.$suffix; if (!empty($conf->global->$paramcreditorlong)) { - $creditor = $conf->global->$paramcreditorlong; + $creditor = $conf->global->$paramcreditorlong; // use label long of the seller to show } elseif (!empty($conf->global->$paramcreditor)) { - $creditor = $conf->global->$paramcreditor; + $creditor = $conf->global->$paramcreditor; // use label short of the seller to show } $mesg = ''; @@ -356,6 +356,8 @@ $mesg = ''; // Action dopayment is called after clicking/choosing the payment mode if ($action == 'dopayment') { + dol_syslog("--- newpayment.php Execute action = ".$action." paymentmethod=".$paymentmethod.' amount='.$amount.' newamount='.GETPOST("newamount", 'alpha'), LOG_DEBUG, 0, '_payment'); + if ($paymentmethod == 'paypal') { $PAYPAL_API_PRICE = price2num(GETPOST("newamount", 'alpha'), 'MT'); $PAYPAL_PAYMENT_TYPE = 'Sale'; @@ -491,9 +493,9 @@ if ($action == 'charge' && isModEnabled('stripe')) { $amountstripe = $amountstripe * 100; } - dol_syslog("--- newpayment.php Execute action = ".$action." STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0, '_stripe'); - dol_syslog("GET=".var_export($_GET, true), LOG_DEBUG, 0, '_stripe'); - dol_syslog("POST=".var_export($_POST, true), LOG_DEBUG, 0, '_stripe'); + dol_syslog("--- newpayment.php Execute action = ".$action." STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0, '_payment'); + dol_syslog("GET=".var_export($_GET, true), LOG_DEBUG, 0, '_payment'); + dol_syslog("POST=".var_export($_POST, true), LOG_DEBUG, 0, '_payment'); $stripeToken = GETPOST("stripeToken", 'alpha'); $email = GETPOST("email", 'alpha'); @@ -503,10 +505,10 @@ if ($action == 'charge' && isModEnabled('stripe')) { $vatnumber = GETPOST('vatnumber', 'alpha'); $savesource = GETPOSTISSET('savesource') ? GETPOST('savesource', 'int') : 1; - dol_syslog("POST stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe'); - dol_syslog("POST email = ".$email, LOG_DEBUG, 0, '_stripe'); - dol_syslog("POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_stripe'); - dol_syslog("POST vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_stripe'); + dol_syslog("POST stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_payment'); + dol_syslog("POST email = ".$email, LOG_DEBUG, 0, '_payment'); + dol_syslog("POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_payment'); + dol_syslog("POST vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_payment'); $error = 0; $errormessage = ''; @@ -527,7 +529,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { } if ($thirdparty_id > 0) { - dol_syslog("Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0, '_stripe'); + dol_syslog("Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0, '_payment'); $service = 'StripeTest'; $servicestatus = 0; @@ -546,7 +548,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); if (empty($customer)) { $error++; - dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_stripe'); + dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_payment'); setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); $action = ''; } @@ -561,7 +563,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { if (empty($card)) { $error++; - dol_syslog('Failed to create card record', LOG_WARNING, 0, '_stripe'); + dol_syslog('Failed to create card record', LOG_WARNING, 0, '_payment'); setEventMessages('Failed to create card record', null, 'errors'); $action = ''; } else { @@ -575,7 +577,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { $metadata["dol_type"] = $dol_type; } - dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); + dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_payment'); $charge = \Stripe\Charge::create(array( 'amount' => price2num($amountstripe, 'MU'), 'currency' => $currency, @@ -589,7 +591,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) if (empty($charge)) { $error++; - dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); + dol_syslog('Failed to charge card', LOG_WARNING, 0, '_payment'); setEventMessages('Failed to charge card', null, 'errors'); $action = ''; } @@ -607,7 +609,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { if (empty($vatcleaned)) $taxinfo=null; */ - dol_syslog("Create anonymous customer card profile", LOG_DEBUG, 0, '_stripe'); + dol_syslog("Create anonymous customer card profile", LOG_DEBUG, 0, '_payment'); $customer = \Stripe\Customer::create(array( 'email' => $email, @@ -644,7 +646,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { // The customer was just created with a source, so we can make a charge // with no card defined, the source just used for customer creation will be used. - dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe'); + dol_syslog("Create charge", LOG_DEBUG, 0, '_payment'); $charge = \Stripe\Charge::create(array( 'customer' => $customer->id, 'amount' => price2num($amountstripe, 'MU'), @@ -657,7 +659,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) if (empty($charge)) { $error++; - dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); + dol_syslog('Failed to charge card', LOG_WARNING, 0, '_payment'); setEventMessages('Failed to charge card', null, 'errors'); $action = ''; } @@ -676,21 +678,21 @@ if ($action == 'charge' && isModEnabled('stripe')) { $error++; $errormessage = "ErrorCard ".$e->getMessage()." err=".var_export($err, true); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (\Stripe\Error\RateLimit $e) { // Too many requests made to the API too quickly $error++; $errormessage = "ErrorRateLimit ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (\Stripe\Error\InvalidRequest $e) { // Invalid parameters were supplied to Stripe's API $error++; $errormessage = "ErrorInvalidRequest ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (\Stripe\Error\Authentication $e) { @@ -698,14 +700,14 @@ if ($action == 'charge' && isModEnabled('stripe')) { // (maybe you changed API keys recently) $error++; $errormessage = "ErrorAuthentication ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (\Stripe\Error\ApiConnection $e) { // Network communication with Stripe failed $error++; $errormessage = "ErrorApiConnection ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (\Stripe\Error\Base $e) { @@ -713,14 +715,14 @@ if ($action == 'charge' && isModEnabled('stripe')) { // yourself an email $error++; $errormessage = "ErrorBase ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } catch (Exception $e) { // Something else happened, completely unrelated to Stripe $error++; $errormessage = "ErrorException ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } @@ -755,7 +757,7 @@ if ($action == 'charge' && isModEnabled('stripe')) { } catch (Exception $e) { $error++; $errormessage = "CantRetrievePaymentIntent ".$e->getMessage(); - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($e->getMessage(), null, 'errors'); $action = ''; } @@ -763,13 +765,13 @@ if ($action == 'charge' && isModEnabled('stripe')) { if ($paymentintent->status != 'succeeded') { $error++; $errormessage = "StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status; - dol_syslog($errormessage, LOG_WARNING, 0, '_stripe'); + dol_syslog($errormessage, LOG_WARNING, 0, '_payment'); setEventMessages($paymentintent->status, null, 'errors'); $action = ''; } else { // TODO We can also record the payment mode into llx_societe_rib with stripe $paymentintent->payment_method // Note that with other old Stripe architecture (using Charge API), the payment mode was not recorded, so it is not mandatory to do it here. - //dol_syslog("Create payment_method for ".$paymentintent->payment_method, LOG_DEBUG, 0, '_stripe'); + //dol_syslog("Create payment_method for ".$paymentintent->payment_method, LOG_DEBUG, 0, '_payment'); // Get here amount and currency used for payment and force value into $amount and $currency so the real amount is saved into session instead // of the amount and currency retreived from the POST. @@ -799,11 +801,11 @@ if ($action == 'charge' && isModEnabled('stripe')) { $_SESSION['TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id : '')); $_SESSION['errormessage'] = $errormessage; - dol_syslog("Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')." ip=".$remoteip, LOG_DEBUG, 0, '_stripe'); - dol_syslog("onlinetoken=".$_SESSION["onlinetoken"]." FinalPaymentAmt=".$_SESSION["FinalPaymentAmt"]." currencyCodeType=".$_SESSION["currencyCodeType"]." payerID=".$_SESSION['payerID']." TRANSACTIONID=".$_SESSION['TRANSACTIONID'], LOG_DEBUG, 0, '_stripe'); - dol_syslog("FULLTAG=".$FULLTAG, LOG_DEBUG, 0, '_stripe'); - dol_syslog("error=".$error." errormessage=".$errormessage, LOG_DEBUG, 0, '_stripe'); - dol_syslog("Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0, '_stripe'); + dol_syslog("Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')." ip=".$remoteip, LOG_DEBUG, 0, '_payment'); + dol_syslog("onlinetoken=".$_SESSION["onlinetoken"]." FinalPaymentAmt=".$_SESSION["FinalPaymentAmt"]." currencyCodeType=".$_SESSION["currencyCodeType"]." payerID=".$_SESSION['payerID']." TRANSACTIONID=".$_SESSION['TRANSACTIONID'], LOG_DEBUG, 0, '_payment'); + dol_syslog("FULLTAG=".$FULLTAG, LOG_DEBUG, 0, '_payment'); + dol_syslog("error=".$error." errormessage=".$errormessage, LOG_DEBUG, 0, '_payment'); + dol_syslog("Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0, '_payment'); if ($error) { header("Location: ".$urlko); @@ -832,6 +834,8 @@ $conf->dol_hide_leftmenu = 1; $replacemainarea = (empty($conf->dol_hide_leftmenu) ? '
    ' : '').'
    '; llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody', $replacemainarea); +dol_syslog("newpayment.php show page paymentmethod=".$paymentmethod.' amount='.$amount.' newamount='.GETPOST("newamount", 'alpha'), LOG_DEBUG, 0, '_payment'); + // Check link validity if ($source && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', 'donation_ref', ''))) { $langs->load("errors"); @@ -1005,7 +1009,7 @@ if (!$source) { } -// Payment on customer order +// Payment on sales order if ($source == 'order') { $found = true; $langs->load("orders"); @@ -1361,10 +1365,6 @@ if ($source == 'contractline') { if ($contractline->description) { $text .= '
    '.dol_htmlentitiesbr($contractline->description); } - //if ($contractline->date_fin_validite) { - // $text.='
    '.$langs->trans("DateEndPlanned").': '; - // $text.=dol_print_date($contractline->date_fin_validite); - //} if ($contractline->date_end) { $text .= '
    '.$langs->trans("ExpiredSince").': '.dol_print_date($contractline->date_end); } diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php index 29adb2947d0..2504260cbc5 100644 --- a/htdocs/public/payment/paymentko.php +++ b/htdocs/public/payment/paymentko.php @@ -136,6 +136,10 @@ foreach ($_POST as $k => $v) { dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_payment'); +// Set $appli for emails title +$appli = $mysoc->name; + + if (!empty($_SESSION['ipaddress'])) { // To avoid to make action twice // Get on url call $fulltag = $FULLTAG; @@ -173,21 +177,6 @@ if (!empty($_SESSION['ipaddress'])) { // To avoid to make action twice $from = $conf->global->MAILING_EMAIL_FROM; $sendto = $sendemail; - // Define link to login card - $appli = constant('DOL_APPLICATION_TITLE'); - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $appli = $conf->global->MAIN_APPLICATION_TITLE; - if (preg_match('/\d\.\d/', $appli)) { - if (!preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) { - $appli .= " (".DOL_VERSION.")"; // If new title contains a version that is different than core - } - } else { - $appli .= " ".DOL_VERSION; - } - } else { - $appli .= " ".DOL_VERSION; - } - $urlback = $_SERVER["REQUEST_URI"]; $topic = '['.$appli.'] '.$companylangs->transnoentitiesnoconv("NewOnlinePaymentFailed"); $content = ""; diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php index 4d1336351b3..c56732f5938 100644 --- a/htdocs/public/payment/paymentok.php +++ b/htdocs/public/payment/paymentok.php @@ -1266,7 +1266,7 @@ if ($ispaymentok) { $thirdparty = new Societe($db); $resultthirdparty = $thirdparty->fetch($attendeetovalidate->fk_soc); if ($resultthirdparty < 0) { - setEventMessages(null, $attendeetovalidate->errors, "errors"); + setEventMessages($resultthirdparty->error, $resultthirdparty->errors, "errors"); } else { require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; @@ -1289,11 +1289,10 @@ if ($ispaymentok) { $subject = $arraydefaultmessage->topic; $msg = $arraydefaultmessage->content; } else { - $subject = '['.$object->ref.' - '.$outputlangs->trans("NewRegistration").']'; + $subject = '['.$appli.'] '.$object->ref.' - '.$outputlangs->trans("NewRegistration").']'; $msg = $outputlangs->trans("OrganizationEventPaymentOfRegistrationWasReceived"); } - $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $thirdparty); complete_substitutions_array($substitutionarray, $outputlangs, $object); @@ -1301,6 +1300,13 @@ if ($ispaymentok) { $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs); $sendto = $attendeetovalidate->email; + $cc = ''; + if ($thirdparty->email) { + $cc = $thirdparty->email; + } + if ($attendeetovalidate->email_company && $attendeetovalidate->email_company != $thirdparty->email) { + $cc = ($cc ? ', ' : '').$attendeetovalidate->email_company; + } $from = $conf->global->MAILING_EMAIL_FROM; $urlback = $_SERVER["REQUEST_URI"]; @@ -1321,7 +1327,7 @@ if ($ispaymentok) { $listofmimes = array(dol_mimetype($file)); } - $mailfile = new CMailFile($subjecttosend, $sendto, $from, $texttosend, $listofpaths, $listofmimes, $listofnames, '', '', 0, $ishtml); + $mailfile = new CMailFile($subjecttosend, $sendto, $from, $texttosend, $listofpaths, $listofmimes, $listofnames, $cc, '', 0, $ishtml); $result = $mailfile->sendfile(); if ($result) { @@ -1493,7 +1499,7 @@ if ($ispaymentok) { $subject = $arraydefaultmessage->topic; $msg = $arraydefaultmessage->content; } else { - $subject = '['.$booth->ref.' - '.$outputlangs->trans("NewRegistration").']'; + $subject = '['.$appli.'] '.$booth->ref.' - '.$outputlangs->trans("NewRegistration").']'; $msg = $outputlangs->trans("OrganizationEventPaymentOfBoothWasReceived"); } @@ -1542,6 +1548,11 @@ if ($ispaymentok) { } } + +// Set $appli for emails title +$appli = $mysoc->name; + + if ($ispaymentok) { // Get on url call $onlinetoken = empty($PAYPALTOKEN) ? $_SESSION['onlinetoken'] : $PAYPALTOKEN; @@ -1600,19 +1611,6 @@ if ($ispaymentok) { //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current // Define link to login card - $appli = constant('DOL_APPLICATION_TITLE'); - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $appli = $conf->global->MAIN_APPLICATION_TITLE; - if (preg_match('/\d\.\d/', $appli)) { - if (!preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) { - $appli .= " (".DOL_VERSION.")"; // If new title contains a version that is different than core - } - } else { - $appli .= " ".DOL_VERSION; - } - } else { - $appli .= " ".DOL_VERSION; - } $urlback = $_SERVER["REQUEST_URI"]; $topic = '['.$appli.'] '.$companylangs->transnoentitiesnoconv("NewOnlinePaymentReceived"); @@ -1740,21 +1738,6 @@ if ($ispaymentok) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - // Define link to login card - $appli = constant('DOL_APPLICATION_TITLE'); - if (!empty($conf->global->MAIN_APPLICATION_TITLE)) { - $appli = $conf->global->MAIN_APPLICATION_TITLE; - if (preg_match('/\d\.\d/', $appli)) { - if (!preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) { - $appli .= " (".DOL_VERSION.")"; // If new title contains a version that is different than core - } - } else { - $appli .= " ".DOL_VERSION; - } - } else { - $appli .= " ".DOL_VERSION; - } - $urlback = $_SERVER["REQUEST_URI"]; $topic = '['.$appli.'] '.$companylangs->transnoentitiesnoconv("ValidationOfPaymentFailed"); $content = ""; diff --git a/htdocs/public/recruitment/view.php b/htdocs/public/recruitment/view.php index 24c0eaf6088..57cb82d9b08 100644 --- a/htdocs/public/recruitment/view.php +++ b/htdocs/public/recruitment/view.php @@ -94,7 +94,7 @@ if ($cancel) { $action = 'view'; } -if ($action == "view" || $action == "presend" || $action == "close" || $action == "confirm_public_close" || $action == "add_message") { +if ($action == "view" || $action == "presend" || $action == "dosubmit") { $error = 0; $display_ticket = false; if (!strlen($ref)) { @@ -119,11 +119,11 @@ if ($action == "view" || $action == "presend" || $action == "close" || $action = } /* - if (!$error && $action == "add_message" && $display_ticket && GETPOSTISSET('btn_add_message')) + if (!$error && $action == "dosubmit") { - // TODO Add message... - $ret = $object->newMessage($user, $action, 0, 1); + // Test MAIN_SECURITY_MAX_POST_ON_PUBLIC_PAGES_BY_IP_ADDRESS + // TODO Create job application @@ -136,7 +136,7 @@ if ($action == "view" || $action == "presend" || $action == "close" || $action = if ($error || $errors) { setEventMessages($object->error, $object->errors, 'errors'); - if ($action == "add_message") { + if ($action == "dosubmit") { $action = 'presend'; } else { $action = ''; @@ -185,7 +185,7 @@ print ''."\n"; print '
    '."\n"; print '
    '."\n"; print ''."\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''."\n"; print ''."\n"; diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 3f137148a89..bab3c501ca3 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -371,7 +371,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) { // New message - print ''; + print ''; // Close ticket if ($object->dao->fk_statut >= Ticket::STATUS_NOT_READ && $object->dao->fk_statut < Ticket::STATUS_CLOSED) { diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index d69806f2517..9afa6ec57d8 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -51,10 +51,8 @@ if (isModEnabled("product") || isModEnabled("service")) { if (isModEnabled("propal")) { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; } -if ((isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || isModEnabled("supplier_order")) { - require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; - require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; -} +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; if (isModEnabled('productbatch')) { require_once DOL_DOCUMENT_ROOT.'/product/class/productbatch.class.php'; } @@ -1102,14 +1100,14 @@ if ($action == 'create') { $text = $product_static->getNomUrl(1); $text .= ' - '.(!empty($line->label) ? $line->label : $line->product_label); - $description = ($conf->global->PRODUIT_DESC_IN_FORM ? '' : dol_htmlentitiesbr($line->desc)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($line->desc)); print $form->textwithtooltip($text, $description, 3, '', '', $i); // Show range print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end)); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print ($line->desc && $line->desc != $line->product_label) ? '
    '.dol_htmlentitiesbr($line->desc) : ''; } } @@ -1380,39 +1378,25 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (!empty($conf->project->enabled)) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; + $morehtmlref .= '
    '; if (0) { // Do not change on reception - if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $permissiontoadd) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on reception, so we will use the project or source object instead - // TODO Add project on reception - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -1825,10 +1809,10 @@ if ($action == 'create') { if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) { $text = $lines[$i]->product->getNomUrl(1); $text .= ' - '.$label; - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($lines[$i]->product->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($lines[$i]->product->description)); print $form->textwithtooltip($text, $description, 3, '', '', $i); print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0); - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ? '
    '.dol_htmlentitiesbr($lines[$i]->description) : ''; } } diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 47b4bcdeb0d..1abfb49fb4c 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -1641,23 +1641,8 @@ class Reception extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Classify the reception as invoiced (used when WORKFLOW_BILL_ON_RECEPTION is on) - * - * @deprecated - * @see setBilled() - * @return int <0 if ko, >0 if ok - */ - public function set_billed() - { - // phpcs:enable - dol_syslog(get_class($this)."::set_billed is deprecated, use setBilled instead", LOG_NOTICE); - return $this->setBilled(); - } - - /** - * Classify the reception as invoiced (used when WORKFLOW_BILL_ON_RECEPTION is on) + * Classify the reception as invoiced (used when WORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE is on) * * @return int <0 if ko, >0 if ok */ diff --git a/htdocs/reception/class/receptionstats.class.php b/htdocs/reception/class/receptionstats.class.php index a27f458d01a..7a8562b706d 100644 --- a/htdocs/reception/class/receptionstats.class.php +++ b/htdocs/reception/class/receptionstats.class.php @@ -69,7 +69,7 @@ class ReceptionStats extends Stats $this->where .= " c.fk_statut > 0"; // Not draft and not cancelled //$this->where.= " AND c.fk_soc = s.rowid AND c.entity = ".$conf->entity; - $this->where .= " AND c.entity = ".$conf->entity; + $this->where .= " AND c.entity IN (".getEntity('reception').")"; if (empty($user->rights->societe->client->voir) && !$this->socid) { $this->where .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } @@ -128,6 +128,54 @@ class ReceptionStats extends Stats return $this->_getNbByYear($sql); } + /** + * Return the orders amount by month for a year + * + * @param int $year Year to scan + * @param int $format 0=Label of abscissa is a translated text, 1=Label of abscissa is month number, 2=Label of abscissa is first letter of month + * @return array Array with amount by month + */ + public function getAmountByMonth($year, $format = 0) + { + global $user; + + $sql = "SELECT date_format(c.date_valid,'%m') as dm, SUM(c.".$this->field.")"; + $sql .= " FROM ".$this->from; + if (empty($user->rights->societe->client->voir) && !$this->socid) { + $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + } + $sql .= " WHERE c.date_valid BETWEEN '".$this->db->idate(dol_get_first_day($year))."' AND '".$this->db->idate(dol_get_last_day($year))."'"; + $sql .= " AND ".$this->where; + $sql .= " GROUP BY dm"; + $sql .= $this->db->order('dm', 'DESC'); + + $res = $this->_getAmountByMonth($year, $sql, $format); + return $res; + } + + /** + * Return the orders amount average by month for a year + * + * @param int $year year for stats + * @return array array with number by month + */ + public function getAverageByMonth($year) + { + global $user; + + $sql = "SELECT date_format(c.date_valid,'%m') as dm, AVG(c.".$this->field.")"; + $sql .= " FROM ".$this->from; + if (empty($user->rights->societe->client->voir) && !$this->socid) { + $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + } + $sql .= " WHERE c.date_valid BETWEEN '".$this->db->idate(dol_get_first_day($year))."' AND '".$this->db->idate(dol_get_last_day($year))."'"; + $sql .= " AND ".$this->where; + $sql .= " GROUP BY dm"; + $sql .= $this->db->order('dm', 'DESC'); + + return $this->_getAverageByMonth($year, $sql); + } + /** * Return nb, total and average * diff --git a/htdocs/reception/contact.php b/htdocs/reception/contact.php index 442657ecf43..a03460b1e49 100644 --- a/htdocs/reception/contact.php +++ b/htdocs/reception/contact.php @@ -35,6 +35,8 @@ if (!empty($conf->project->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; $langs->loadLangs(array("orders", "receptions", "companies")); @@ -75,6 +77,20 @@ if ($origin == 'reception') { } } +if (isModEnabled("reception")) { + $permissiontoread = $user->rights->reception->lire; + $permissiontoadd = $user->rights->reception->creer; + $permissiondellink = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))); + $permissiontodelete = $user->rights->reception->supprimer; +} else { + $permissiontoread = $user->rights->fournisseur->commande->receptionner; + $permissiontoadd = $user->rights->fournisseur->commande->receptionner; + $permissiondellink = $user->rights->fournisseur->commande->receptionner; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande_advance->check))); + $permissiontodelete = $user->rights->fournisseur->commande->receptionner; +} + /* * Actions @@ -146,39 +162,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (!empty($conf->project->enabled)) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; + $morehtmlref .= '
    '; if (0) { // Do not change on reception - if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $permissiontoadd) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on reception, so we will use the project or source object instead - // TODO Add project on reception - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } @@ -191,7 +193,7 @@ if ($id > 0 || !empty($ref)) { //print '
    '; print '
    '; - print '
    ' . $langs->trans("EmailAttendee") . '*'; + print '
    ' . $langs->trans("EmailAttendee") . ''; print img_picto('', 'email', 'class="pictofixedwidth"'); - print '
    ' . $langs->trans("Company"); + print '
    '; if (!empty(floatval($project->price_registration))) { - print '*'; + print ''; } - print ' '; + print $langs->trans("Company"); + if (!empty(floatval($project->price_registration))) { + print ''; + } + print ''; print img_picto('', 'company', 'class="pictofixedwidth"'); - print '
    ' . $langs->trans("EmailCompanyForInvoice") . ''; + print '
    ' . $form->textwithpicto($langs->trans("EmailCompany"), $langs->trans("EmailCompanyForInvoice")) . ''; print img_picto('', 'email', 'class="pictofixedwidth"'); print '
    ' . $langs->trans('Country') . '*'; + print '
    trans('Country') . ''; print img_picto('', 'country', 'class="pictofixedwidth"'); $country_id = GETPOST('country_id'); if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { @@ -777,7 +819,7 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS if ($project->price_registration) { print '
    ' . $langs->trans('Price') . ''; - print price($project->price_registration, 1, $langs, 1, -1, -1, $conf->currency); + print ''.price($project->price_registration, 1, $langs, 1, -1, -1, $conf->currency).''; print '

    '.$langs->trans("WelcomeOnOnlineSignaturePageContract", $mysoc->name).'
    '.$langs->trans("ThisScreenAllowsYouToSignDocFromContract", $creditor).'


    '.$langs->trans("WelcomeOnOnlineSignaturePageFichinter", $mysoc->name).'
    '.$langs->trans("ThisScreenAllowsYouToSignDocFromFichinter", $creditor).'

    '.$langs->trans("ThisIsInformationOnDocumentToSignProposal").' :
    '.$langs->trans("ThisIsInformationOnDocumentToSignContract").' :
    '.$langs->trans("ThisIsInformationOnDocumentToSignFichinter").' :
    '.$langs->trans("Proposer"); + print ''; + print img_picto('', 'company', 'class="pictofixedwidth"'); + print ''.$creditor.''; + print ''; + print '
    '.$langs->trans("ThirdParty"); + print ''; + print img_picto('', 'company', 'class="pictofixedwidth"'); + print ''.$object->thirdparty->name.''; + print '
    '.$langs->trans("Designation"); + print ''.$text; + + $last_main_doc_file = $object->last_main_doc; + + if (empty($last_main_doc_file) || !dol_is_file(DOL_DATA_ROOT.'/'.$object->last_main_doc)) { + // It seems document has never been generated, or was generated and then deleted. + // So we try to regenerate it with its default template. + $defaulttemplate = ''; // We force the use an empty string instead of $object->model_pdf to be sure to use a "main" default template and not the last one used. + $object->generateDocument($defaulttemplate, $langs); + } + + $directdownloadlink = $object->getLastMainDocLink('fichinter'); + if ($directdownloadlink) { + print '
    '; + print img_mime($object->last_main_doc, ''); + if ($message == "signed") { + print $langs->trans("DownloadSignedDocument").''; + } else { + print $langs->trans("DownloadDocument").''; + } + } + + print ''; print ''; print '
    '; + print '
    '; // Linked documents if ($origin == 'order_supplier' && $object->$typeobject->id && (isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || isModEnabled("supplier_order"))) { print ''; if ($action != 'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) { - print ''; + print ''; } print '
    '; diff --git a/htdocs/reception/document.php b/htdocs/reception/document.php index 10227373015..980b5e50a33 100644 --- a/htdocs/reception/document.php +++ b/htdocs/reception/document.php @@ -37,6 +37,8 @@ require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php'; if (!empty($conf->project->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; } +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'other')); @@ -65,19 +67,48 @@ if (!$sortfield) { } $object = new Reception($db); - -if ($object->fetch($id, $ref)) { +if ($id > 0 || !empty($ref)) { + $object->fetch($id, $ref); $object->fetch_thirdparty(); + + if (!empty($object->origin)) { + $origin = $object->origin; + + $object->fetch_origin(); + $typeobject = $object->origin; + } + + // Linked documents + if ($origin == 'order_supplier' && $object->$typeobject->id && (isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || isModEnabled("supplier_order"))) { + $objectsrc = new CommandeFournisseur($db); + $objectsrc->fetch($object->$typeobject->id); + } + $upload_dir = $conf->reception->dir_output."/".dol_sanitizeFileName($object->ref); } +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('receptiondocument')); + // Security check -if ($user->socid) { +if ($user->socid > 0) { $socid = $user->socid; } $result = restrictedArea($user, 'reception', $object->id, ''); -$permissiontoadd = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php +if (isModEnabled("reception")) { + $permissiontoread = $user->rights->reception->lire; + $permissiontoadd = $user->rights->reception->creer; + $permissiondellink = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))); + $permissiontodelete = $user->rights->reception->supprimer; +} else { + $permissiontoread = $user->rights->fournisseur->commande->receptionner; + $permissiontoadd = $user->rights->fournisseur->commande->receptionner; + $permissiondellink = $user->rights->fournisseur->commande->receptionner; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande_advance->check))); + $permissiontodelete = $user->rights->fournisseur->commande->receptionner; +} /* @@ -117,41 +148,30 @@ if ($id > 0 || !empty($ref)) { $morehtmlref = '
    '; + // Ref customer reception + $morehtmlref .= $form->editfieldkey("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', 0, 1); + $morehtmlref .= $form->editfieldval("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (!empty($conf->project->enabled)) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if (0) { // Do not change on shipment - if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= '
    '; + if (0) { // Do not change on reception + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $permissiontoadd) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on shipment, so we will use the project or source object instead - // TODO Add project on shipment - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/reception/note.php b/htdocs/reception/note.php index 617d260e643..d916099b872 100644 --- a/htdocs/reception/note.php +++ b/htdocs/reception/note.php @@ -28,11 +28,12 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/reception.lib.php'; -dol_include_once('/fourn/class/fournisseur.commande.class.php'); if (!empty($conf->project->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; $langs->loadLangs(array("receptions", "companies", "bills", 'deliveries', 'orders', 'stocks', 'other', 'propal')); @@ -46,32 +47,41 @@ if ($id > 0 || !empty($ref)) { $object->fetch_thirdparty(); if (!empty($object->origin)) { - $typeobject = $object->origin; $origin = $object->origin; + $object->fetch_origin(); + $typeobject = $object->origin; } // Linked documents - if ($typeobject == 'commande' && $object->$typeobject->id && isModEnabled('commande')) { - $objectsrc = new Commande($db); - $objectsrc->fetch($object->$typeobject->id); - } - if ($typeobject == 'propal' && $object->$typeobject->id && isModEnabled("propal")) { - $objectsrc = new Propal($db); + if ($origin == 'order_supplier' && $object->$typeobject->id && (isModEnabled("fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || isModEnabled("supplier_order"))) { + $objectsrc = new CommandeFournisseur($db); $objectsrc->fetch($object->$typeobject->id); } } -$permissionnote = $user->rights->reception->creer; // Used by the include of actions_setnotes.inc.php +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('receptionnote')); // Security check if ($user->socid > 0) { $socid = $user->socid; } - -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('receptionnote')); +if (isModEnabled("reception")) { + $permissiontoread = $user->rights->reception->lire; + $permissiontoadd = $user->rights->reception->creer; + $permissiondellink = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))); + $permissiontodelete = $user->rights->reception->supprimer; +} else { + $permissiontoread = $user->rights->fournisseur->commande->receptionner; + $permissiontoadd = $user->rights->fournisseur->commande->receptionner; + $permissiondellink = $user->rights->fournisseur->commande->receptionner; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande_advance->check))); + $permissiontodelete = $user->rights->fournisseur->commande->receptionner; +} +$permissionnote = $user->rights->reception->creer; // Used by the include of actions_setnotes.inc.php if ($origin == 'reception') { $result = restrictedArea($user, $origin, $object->id); @@ -106,7 +116,7 @@ if (empty($reshook)) { * View */ -llxHeader('', 'Reception'); +llxHeader('', $langs->trans('Reception')); $form = new Form($db); @@ -123,39 +133,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", '', $object->ref_supplier, $object, $user->rights->reception->creer, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (!empty($conf->project->enabled)) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; + $morehtmlref .= '
    '; if (0) { // Do not change on reception - if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; - } - if ($action == 'classify') { - // $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify' && $permissiontoadd) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - // We don't have project on reception, so we will use the project or source object instead - // TODO Add project on reception - $morehtmlref .= ' : '; - if (!empty($objectsrc->fk_project)) { + if (!empty($objectsrc) && !empty($objectsrc->fk_project)) { $proj = new Project($db); $proj->fetch($objectsrc->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/recruitment/class/recruitmentcandidature.class.php b/htdocs/recruitment/class/recruitmentcandidature.class.php index 5aab9d1b391..2ece5dbe217 100644 --- a/htdocs/recruitment/class/recruitmentcandidature.class.php +++ b/htdocs/recruitment/class/recruitmentcandidature.class.php @@ -127,7 +127,7 @@ class RecruitmentCandidature extends CommonObject 'remuneration_requested' => array('type'=>'integer', 'label'=>'RequestedRemuneration', 'enabled'=>'1', 'position'=>80, 'notnull'=>0, 'visible'=>-1,), 'remuneration_proposed' => array('type'=>'integer', 'label'=>'ProposedRemuneration', 'enabled'=>'1', 'position'=>81, 'notnull'=>0, 'visible'=>-1,), 'description' => array('type'=>'html', 'label'=>'Description', 'enabled'=>'1', 'position'=>300, 'notnull'=>0, 'visible'=>3, 'cssview'=>'wordbreak'), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>1, 'csslist'=>'nowraponall'), + 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-4, 'csslist'=>'nowraponall'), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2, 'csslist'=>'nowraponall'), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), diff --git a/htdocs/recruitment/core/modules/recruitment/doc/pdf_standard_recruitmentjobposition.modules.php b/htdocs/recruitment/core/modules/recruitment/doc/pdf_standard_recruitmentjobposition.modules.php index a883cf8c144..199513993f2 100644 --- a/htdocs/recruitment/core/modules/recruitment/doc/pdf_standard_recruitmentjobposition.modules.php +++ b/htdocs/recruitment/core/modules/recruitment/doc/pdf_standard_recruitmentjobposition.modules.php @@ -217,7 +217,7 @@ class pdf_standard_recruitmentjobposition extends ModelePDFRecruitmentJobPositio $objphoto->fetch($object->lines[$i]->fk_product); //var_dump($objphoto->ref);exit; - if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { + if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) { $pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/"; $pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/'; } else { diff --git a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_advanced.php b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_advanced.php index 8772e97bf77..9635eba3e58 100644 --- a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_advanced.php +++ b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_advanced.php @@ -30,7 +30,7 @@ dol_include_once('/recruitment/core/modules/recruitment/modules_recruitmentcandi /** - * Class to manage customer Bom numbering rules advanced + * Class to manage the Advanced numbering rule for Job application */ class mod_recruitmentcandidature_advanced extends ModeleNumRefRecruitmentCandidature { diff --git a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_standard.php b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_standard.php index ce96d1cd67b..4221915eb29 100644 --- a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_standard.php +++ b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_standard.php @@ -26,7 +26,7 @@ dol_include_once('/recruitment/core/modules/recruitment/modules_recruitmentcandi /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Job application */ class mod_recruitmentcandidature_standard extends ModeleNumRefRecruitmentCandidature { diff --git a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_advanced.php b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_advanced.php index c280153f9c8..4f781a18214 100644 --- a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_advanced.php +++ b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_advanced.php @@ -30,7 +30,7 @@ dol_include_once('/recruitment/core/modules/recruitment/modules_recruitmentjobpo /** - * Class to manage customer Bom numbering rules advanced + * Class to manage the Advanced numbering rule for Job position */ class mod_recruitmentjobposition_advanced extends ModeleNumRefRecruitmentJobPosition { diff --git a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_standard.php b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_standard.php index b2b413ee508..260ee510c5b 100644 --- a/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_standard.php +++ b/htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_standard.php @@ -26,7 +26,7 @@ dol_include_once('/recruitment/core/modules/recruitment/modules_recruitmentjobpo /** - * Class to manage customer order numbering rules standard + * Class to manage the Standard numbering rule for Job positions */ class mod_recruitmentjobposition_standard extends ModeleNumRefRecruitmentJobPosition { diff --git a/htdocs/recruitment/recruitmentcandidature_card.php b/htdocs/recruitment/recruitmentcandidature_card.php index b5b32fc26db..4226e016e73 100644 --- a/htdocs/recruitment/recruitmentcandidature_card.php +++ b/htdocs/recruitment/recruitmentcandidature_card.php @@ -526,7 +526,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Back to draft if ($object->status == $object::STATUS_VALIDATED) { if ($permissiontoadd) { - print ''.$langs->trans("SetToDraft").''; + print ''.$langs->trans("SetToDraft").''; } } @@ -565,7 +565,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Clone if ($permissiontoadd) { - print ''.$langs->trans("ToClone").''."\n"; + print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=recruitmentcandidature', 'clone', $permissiontoadd); } // Button to convert into a user @@ -592,12 +592,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - // Delete (need delete permission, or if draft, just need create/modify permission) - if ($permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd)) { - print ''.$langs->trans('Delete').''."\n"; - } else { - print ''.$langs->trans('Delete').''."\n"; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print '
    '."\n"; } diff --git a/htdocs/recruitment/recruitmentcandidature_list.php b/htdocs/recruitment/recruitmentcandidature_list.php index 34b852574f6..0489d68bffb 100644 --- a/htdocs/recruitment/recruitmentcandidature_list.php +++ b/htdocs/recruitment/recruitmentcandidature_list.php @@ -303,7 +303,7 @@ $sql = preg_replace('/,\s*$/', '', $sql); $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); diff --git a/htdocs/recruitment/recruitmentjobposition_card.php b/htdocs/recruitment/recruitmentjobposition_card.php index a23888fd8a9..88424f1b06d 100644 --- a/htdocs/recruitment/recruitmentjobposition_card.php +++ b/htdocs/recruitment/recruitmentjobposition_card.php @@ -435,7 +435,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Clone if ($permissiontoadd) { - print ''.$langs->trans("ToClone").''."\n"; + print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=recruitmentjobposition', 'clone', $permissiontoadd); } /* @@ -452,12 +452,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - // Delete (need delete permission, or if draft, just need create/modify permission) - if ($permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd)) { - print ''.$langs->trans('Delete').''."\n"; - } else { - print ''.$langs->trans('Delete').''."\n"; - } + // Delete + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } print ''."\n"; } diff --git a/htdocs/recruitment/recruitmentjobposition_list.php b/htdocs/recruitment/recruitmentjobposition_list.php index 5b1bee43e56..b2edac8dd4d 100644 --- a/htdocs/recruitment/recruitmentjobposition_list.php +++ b/htdocs/recruitment/recruitmentjobposition_list.php @@ -300,7 +300,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ /* - $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); print $sqlforcount; $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index cf4b4b8e110..1816528b854 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -63,7 +63,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be includ $result = restrictedArea($user, 'resource', $object->id, 'resource'); $permissiontoadd = $user->rights->resource->write; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php - +$permissiontodelete = $user->rights->resource->delete; /* @@ -349,12 +349,7 @@ if ($action == 'create' || $object->fetch($id, $ref) > 0) { } } if ($action != "delete" && $action != "create" && $action != "edit") { - // Delete resource - if ($user->rights->resource->delete) { - print '
    '; - print ''.$langs->trans('Delete').''; - print '
    '; - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete); } } print ''; diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index a5ca456310e..c063e049f44 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -350,21 +350,29 @@ if (!$ret) { // Thirdparty //$morehtmlref.='
    '.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); // Project + $savobject = $object; + $object = $act; if (isModEnabled('project')) { $langs->load("projects"); - //$morehtmlref.='
    '.$langs->trans('Project') . ' '; - $morehtmlref .= $langs->trans('Project').': '; - if (!empty($act->fk_project)) { - $proj = new Project($db); - $proj->fetch($act->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); - if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + //$morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); + if ($action != 'classify') { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { - $morehtmlref .= ''; + if (!empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref .= $proj->getNomUrl(1); + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } + } } } + $object = $savobject; $morehtmlref .= ''; dol_banner_tab($act, 'element_id', $linkback, ($user->socid ? 0 : 1), 'id', 'ref', $morehtmlref, '&element='.$element, 0, '', ''); diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index 639879f8e17..e0efb53915b 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -403,10 +403,10 @@ print ''; // Ref print ''; // Label -print ''; +print ''; // Date start print ''; // Type print ''; // Bank account if (isModEnabled("banque")) { print ''; } @@ -546,7 +546,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { } // Label payment - print "\n"; + print '\n"; if (!$i) { $totalarray['nbfield']++; } @@ -564,7 +564,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { } // Employee - print "\n"; + print '\n"; if (!$i) { $totalarray['nbfield']++; } diff --git a/htdocs/salaries/payment_salary/card.php b/htdocs/salaries/payment_salary/card.php index 2d295a23131..c9f0a151901 100644 --- a/htdocs/salaries/payment_salary/card.php +++ b/htdocs/salaries/payment_salary/card.php @@ -251,9 +251,9 @@ print '
    '; if ($action == '') { if ($user->rights->salaries->delete) { if (!$disable_delete) { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1); } else { - print ''.$langs->trans('Delete').''; + print dolGetButtonAction($langs->trans("CantRemovePaymentSalaryPaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0); } } } diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 550d8ca772d..9e6c10a0ccd 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -160,10 +160,26 @@ if ($socid > 0) { $out .= '&datep='.dol_print_date(dol_now(), 'dayhourlog'); } - $newcardbutton = ''; + $morehtmlright = ''; + + $messagingUrl = DOL_URL_ROOT.'/societe/messaging.php?socid='.$object->id; + $morehtmlright .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1); + $messagingUrl = DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id; + $morehtmlright .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2); + + // // Show link to send an email (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&private_message=0&send_email=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('SendMail'), '', 'fa fa-paper-plane', $url, 'email-title-button', $btnstatus); + + // // Show link to add a private message (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('TicketAddMessage'), '', 'fa fa-comment-dots', $url, 'add-new-ticket-title-button', $btnstatus); + if (isModEnabled('agenda')) { if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) { - $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out); + $morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out); } } @@ -178,8 +194,8 @@ if ($socid > 0) { $param .= '&limit='.urlencode($limit); } - print load_fiche_titre($langs->trans("ActionsOnCompany"), $newcardbutton, ''); - //print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 1); + // print load_fiche_titre($langs->trans("ActionsOnCompany"), $newcardbutton, ''); + print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1); // List of all actions $filters = array(); diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index c01f83401cf..66f7cb6ee79 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2268,14 +2268,15 @@ class Societe extends CommonObject /** * Add a discount for third party * - * @param float $remise Amount of discount - * @param User $user User adding discount - * @param string $desc Reason of discount - * @param string $vatrate VAT rate (may contain the vat code too). Exemple: '1.23', '1.23 (ABC)', ... - * @param int $discount_type 0 => customer discount, 1 => supplier discount - * @return int <0 if KO, id of discount record if OK + * @param float $remise Amount of discount + * @param User $user User adding discount + * @param string $desc Reason of discount + * @param string $vatrate VAT rate (may contain the vat code too). Exemple: '1.23', '1.23 (ABC)', ... + * @param int $discount_type 0 => customer discount, 1 => supplier discount + * @param string $price_base_type Price base type 'HT' or 'TTC' + * @return int <0 if KO, id of discount record if OK */ - public function set_remise_except($remise, User $user, $desc, $vatrate = '', $discount_type = 0) + public function set_remise_except($remise, User $user, $desc, $vatrate = '', $discount_type = 0, $price_base_type = 'HT') { // phpcs:enable global $langs; @@ -2310,9 +2311,15 @@ class Societe extends CommonObject $discount->discount_type = $discount_type; - $discount->amount_ht = $discount->multicurrency_amount_ht = price2num($remise, 'MT'); - $discount->amount_tva = $discount->multicurrency_amount_tva = price2num($remise * $vatrate / 100, 'MT'); - $discount->amount_ttc = $discount->multicurrency_amount_ttc = price2num($discount->amount_ht + $discount->amount_tva, 'MT'); + if ($price_base_type == 'TTC') { + $discount->amount_ttc = $discount->multicurrency_amount_ttc = price2num($remise, 'MT'); + $discount->amount_ht = $discount->multicurrency_amount_ht = price2num($remise / (1 + $vatrate / 100), 'MT'); + $discount->amount_tva = $discount->multicurrency_amount_tva = price2num($discount->amount_ttc - $discount->amount_ht, 'MT'); + } else { + $discount->amount_ht = $discount->multicurrency_amount_ht = price2num($remise, 'MT'); + $discount->amount_tva = $discount->multicurrency_amount_tva = price2num($remise * $vatrate / 100, 'MT'); + $discount->amount_ttc = $discount->multicurrency_amount_ttc = price2num($discount->amount_ht + $discount->amount_tva, 'MT'); + } $discount->tva_tx = price2num($vatrate); $discount->vat_src_code = $vat_src_code; diff --git a/htdocs/societe/consumption.php b/htdocs/societe/consumption.php index 0ddbe7f2ad5..c74b5e68985 100644 --- a/htdocs/societe/consumption.php +++ b/htdocs/societe/consumption.php @@ -564,7 +564,7 @@ if ($sql_select) { } $text .= ' - '.(!empty($objp->label) ? $objp->label : $label); - $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($objp->description)); + $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($objp->description)); } if (($objp->info_bits & 2) == 2) { ?> @@ -619,7 +619,7 @@ if ($sql_select) { echo get_date_range($objp->date_start, $objp->date_end); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) { + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { print (!empty($objp->description) && $objp->description != $objp->product_label) ? '
    '.dol_htmlentitiesbr($objp->description) : ''; } } else { @@ -656,7 +656,7 @@ if ($sql_select) { // Show range $prodreftxt .= get_date_range($objp->date_start, $objp->date_end); // Add description in form - if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) + if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) { $prodreftxt .= (!empty($objp->description) && $objp->description!=$objp->product_label)?'
    '.dol_htmlentitiesbr($objp->description):''; } diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 96e22d4d0b7..f32317163ad 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -478,13 +478,6 @@ $sql .= " region.code_region as region_code, region.nom as region_name"; if ($search_sale && $search_sale != '-1') { $sql .= ", sc.fk_soc, sc.fk_user"; } -// We'll need these fields in order to filter by categ -if ($search_categ_cus && $search_categ_cus != -1) { - $sql .= ", cc.fk_categorie, cc.fk_soc"; -} -if ($search_categ_sup && $search_categ_sup != -1) { - $sql .= ", cs.fk_categorie, cs.fk_soc"; -} // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { @@ -505,13 +498,6 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_ty $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_effectif as staff on (staff.id = s.fk_effectif)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.code_region = state.fk_region)"; -// We'll need this table joined to the select in order to filter by categ -if (!empty($search_categ_cus) && $search_categ_cus != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cc ON s.rowid = cc.fk_soc"; // We'll need this table joined to the select in order to filter by categ -} -if (!empty($search_categ_sup) && $search_categ_sup != '-1') { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_fournisseur as cs ON s.rowid = cs.fk_soc"; // We'll need this table joined to the select in order to filter by categ -} $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."c_stcomm as st ON s.fk_stcomm = st.id"; // We'll need this table joined to the select in order to filter by sale if ($search_sale == -2) { @@ -540,26 +526,64 @@ if ($search_sale == -2) { } elseif ($search_sale > 0) { $sql .= " AND sc.fk_user = ".((int) $search_sale); } -if ($search_categ_cus > 0) { - $sql .= " AND cc.fk_categorie = ".((int) $search_categ_cus); +$searchCategoryCustomerList = $search_categ_cus ? array($search_categ_cus) : array();; +$searchCategoryCustomerOperator = 0; +// Search for tag/category ($searchCategoryCustomerList is an array of ID) +if (!empty($searchCategoryCustomerList)) { + $searchCategoryCustomerSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryCustomerList as $searchCategoryCustomer) { + if (intval($searchCategoryCustomer) == -2) { + $searchCategoryCustomerSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategoryCustomer) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryCustomer); + } + } + if ($listofcategoryid) { + $searchCategoryCustomerSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryCustomerOperator == 1) { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryCustomerSqlList).")"; + } + } else { + if (!empty($searchCategoryCustomerSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryCustomerSqlList).")"; + } + } } -if ($search_categ_sup > 0) { - $sql .= " AND cs.fk_categorie = ".((int) $search_categ_sup); +$searchCategorySupplierList = $search_categ_sup ? array($search_categ_sup) : array(); +$searchCategorySupplierOperator = 0; +// Search for tag/category ($searchCategorySupplierList is an array of ID) +if (!empty($searchCategorySupplierList)) { + $searchCategorySupplierSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategorySupplierList as $searchCategorySupplier) { + if (intval($searchCategorySupplier) == -2) { + $searchCategorySupplierSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc)"; + } elseif (intval($searchCategorySupplier) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategorySupplier); + } + } + if ($listofcategoryid) { + $searchCategorySupplierSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategorySupplierOperator == 1) { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategorySupplierSqlList).")"; + } + } else { + if (!empty($searchCategorySupplierSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategorySupplierSqlList).")"; + } + } } -if ($search_categ_cus == -2) { - $sql .= " AND cc.fk_categorie IS NULL"; -} -if ($search_categ_sup == -2) { - $sql .= " AND cs.fk_categorie IS NULL"; -} - if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } if (strlen($search_cti)) { $sql .= natural_search('s.phone', $search_cti); } - if ($search_id > 0) { $sql .= natural_search("s.rowid", $search_id, 1); } @@ -698,7 +722,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { dol_print_error($db); }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); diff --git a/htdocs/societe/messaging.php b/htdocs/societe/messaging.php new file mode 100644 index 00000000000..c73d6ffe0b1 --- /dev/null +++ b/htdocs/societe/messaging.php @@ -0,0 +1,211 @@ + + * Copyright (C) 2005 Brice Davoleau + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2006-2019 Laurent Destailleur + * Copyright (C) 2007 Patrick Raguin + * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2015 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/societe/messaging.php + * \ingroup societe + * \brief Page of third party events + */ + +// Load Dolibarr environment +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + +// Load translation files required by the page +$langs->loadLangs(array('agenda', 'bills', 'companies', 'orders', 'propal')); + + +if (GETPOST('actioncode', 'array')) { + $actioncode = GETPOST('actioncode', 'array', 3); + if (!count($actioncode)) { + $actioncode = '0'; + } +} else { + $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} + +$search_agenda_label = GETPOST('search_agenda_label'); + +// Security check +$socid = GETPOST('socid', 'int'); +if ($user->socid) { + $socid = $user->socid; +} +$result = restrictedArea($user, 'societe', $socid, '&societe'); + +$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; +$sortfield = GETPOST('sortfield', 'aZ09comma'); +$sortorder = GETPOST('sortorder', 'aZ09comma'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +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 (!$sortfield) { + $sortfield = 'a.datep,a.id'; +} +if (!$sortorder) { + $sortorder = 'DESC,DESC'; +} + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('agendathirdparty')); + + +/* + * Actions + */ + +$parameters = array('id'=>$socid); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} + +if (empty($reshook)) { + // Cancel + if (GETPOST('cancel', 'alpha') && !empty($backtopage)) { + header("Location: ".$backtopage); + exit; + } + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers + $actioncode = ''; + $search_agenda_label = ''; + } +} + + + +/* + * View + */ + +$form = new Form($db); + +if ($socid > 0) { + require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; + + $object = new Societe($db); + $result = $object->fetch($socid); + + $title = $langs->trans("Agenda"); + if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { + $title = $object->name." - ".$title; + } + llxHeader('', $title); + + if (isModEnabled('notification')) { + $langs->load("mails"); + } + $head = societe_prepare_head($object); + + print dol_get_fiche_head($head, 'agenda', $langs->trans("ThirdParty"), -1, 'company'); + + $linkback = ''.$langs->trans("BackToList").''; + + dol_banner_tab($object, 'socid', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom'); + + print '
    '; + + print '
    '; + + $object->info($socid); + dol_print_object_info($object, 1); + + print '
    '; + + print dol_get_fiche_end(); + + + + // Actions buttons + + $objthirdparty = $object; + $objcon = new stdClass(); + + $out = ''; + $permok = $user->hasRight('agenda', 'myactions', 'create'); + if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { + if (is_object($objthirdparty) && get_class($objthirdparty) == 'Societe') { + $out .= '&originid='.$objthirdparty->id.($objthirdparty->id > 0 ? '&socid='.$objthirdparty->id : '').'&backtopage='.urlencode($_SERVER['PHP_SELF'].($objthirdparty->id > 0 ? '?socid='.$objthirdparty->id : '')); + } + $out .= (!empty($objcon->id) ? '&contactid='.$objcon->id : '').'&percentage=-1'; + $out .= '&datep='.dol_print_date(dol_now(), 'dayhourlog'); + } + + $morehtmlright = ''; + + $messagingUrl = DOL_URL_ROOT.'/societe/messaging.php?socid='.$object->id; + $morehtmlright .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 2); + $messagingUrl = DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id; + $morehtmlright .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 1); + + // // Show link to send an email (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&private_message=0&send_email=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('SendMail'), '', 'fa fa-paper-plane', $url, 'email-title-button', $btnstatus); + + // // Show link to add a private message (if read and not closed) + // $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; + // $url = 'card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id).'#formmailbeforetitle'; + // $morehtmlright .= dolGetButtonTitle($langs->trans('TicketAddMessage'), '', 'fa fa-comment-dots', $url, 'add-new-ticket-title-button', $btnstatus); + + if (isModEnabled('agenda')) { + if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) { + $morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out); + } + } + + if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) { + print '
    '; + + $param = '&socid='.urlencode($socid); + if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { + $param .= '&contextpage='.urlencode($contextpage); + } + if ($limit > 0 && $limit != $conf->liste_limit) { + $param .= '&limit='.urlencode($limit); + } + + // print load_fiche_titre($langs->trans("ActionsOnCompany"), $newcardbutton, ''); + print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1); + + // List of all actions + $filters = array(); + $filters['search_agenda_label'] = $search_agenda_label; + + // TODO Replace this with same code than into list.php + show_actions_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + } +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 2ba271cd936..a7a7cd44972 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1591,16 +1591,16 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if ($permissiontoaddupdatepaymentinformation) { if (empty($rib->stripe_card_ref)) { // Add link to create BAN on Stripe - print ''; + print ''; print img_picto($langs->trans("CreateBANOnStripe"), 'stripe'); print ''; } - print ''; + print ''; print img_picto($langs->trans("Modify"), 'edit'); print ''; - print ''; + print ''; print img_picto($langs->trans("Delete"), 'delete'); print ''; } diff --git a/htdocs/societe/price.php b/htdocs/societe/price.php index a75a194a0e8..b4e60cf0051 100644 --- a/htdocs/societe/price.php +++ b/htdocs/societe/price.php @@ -158,7 +158,7 @@ if (empty($reshook)) { if ($result < 0) { setEventMessages($prodcustprice->error, $prodcustprice->errors, 'mesgs'); } else { - setEventMessages($langs->trans('Delete'), null, 'errors'); + setEventMessages($langs->trans('RecordDeleted'), null, 'errors'); } $action = ''; } diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index cc8178d2a01..25a4edb6123 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -908,7 +908,7 @@ class Stripe extends CommonObject $sql = "SELECT sa.stripe_card_ref, sa.proprio, sa.iban_prefix"; // stripe_card_ref is src_ for sepa $sql .= " FROM ".MAIN_DB_PREFIX."societe_rib as sa"; - $sql .= " WHERE sa.rowid = '".$this->db->escape($object->id)."'"; // We get record from ID, no need for filter on entity + $sql .= " WHERE sa.rowid = ".((int) $object->id); // We get record from ID, no need for filter on entity $sql .= " AND sa.type = 'ban'"; //type ban to get normal bank account of customer (prelevement) $soc = new Societe($this->db); diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 49f0fc408ce..37853d1488a 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1613,7 +1613,7 @@ if ($action == 'create') { print '
    '; -print ''; +print ''; print ''; @@ -435,13 +435,13 @@ print ''; -print $form->select_types_paiements($search_type_id, 'search_type_id', '', 0, 1, 1, 16, 1, '', 1); +print $form->select_types_paiements($search_type_id, 'search_type_id', '', 0, 1, 1, 16, 1, 'maxwidth125', 1); print ''; - $form->select_comptes($search_account, 'search_account', 0, '', 1); + print $form->select_comptes($search_account, 'search_account', 0, '', 1, '', 0, 'maxwidth125', 1); print '".dol_trunc($obj->label, 40)."'.dol_escape_htmltag($obj->label)."".$userstatic->getNomUrl(1)."'.$userstatic->getNomUrl(1)."
    '; // Relative and absolute discounts - if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) { $filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice } else { @@ -2003,10 +2003,7 @@ if ($action == 'create') { } // Delete - if (($object->statut == SupplierProposal::STATUS_DRAFT && $usercancreate) || $usercandelete) { - print ''; - } + print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', ($object->statut == SupplierProposal::STATUS_DRAFT && $usercancreate) || $usercandelete); } } diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index fde016c78c4..1fa344cbb5e 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -31,6 +31,8 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/supplier_proposal.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.dispatch.class.php'; // Load translation files required by the page $langs->loadLangs(array("propal", "supplier_proposal", "facture", "orders", "sendings", "companies")); @@ -133,37 +135,25 @@ if ($id > 0 || !empty($ref)) { $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); // Thirdparty - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1); // Project if (!empty($conf->project->enabled)) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; + $morehtmlref .= '
    '; if ($permissiontoedit) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); - $morehtmlref .= ' : '.$proj->getNomUrl(1); + $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { - $morehtmlref .= ' - '.$proj->title; + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } - } else { - $morehtmlref .= ''; } } } diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php index a77c4eac47d..40cca19a8b1 100644 --- a/htdocs/supplier_proposal/index.php +++ b/htdocs/supplier_proposal/index.php @@ -90,7 +90,7 @@ if ($resql) { $dataseries = array(); $colorseries = array(); $vals = array(); - // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Sent/Received, billed or not) + // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for sales orders), 3=Closed (Sent/Received, billed or not) while ($i < $num) { $row = $db->fetch_row($resql); if ($row) { diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index 9cd1a5fd5f0..c511d3e0529 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -414,7 +414,7 @@ $htmltext .= ''; print '
    '; print load_fiche_titre($langs->trans('FreeLegalTextOnInvoices'), '', ''); -print '
    '; +print '
    '; print '
    '; print ''; print ''; diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 1ee27c51f8b..671ef27ba96 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -84,6 +84,7 @@ if ($action == 'getProducts') { } unset($prod->fields); unset($prod->db); + $prod->price_formated=price(price2num($prod->price, 'MU'), 1, $langs, 1, -1, -1, $conf->currency); $res[] = $prod; } } @@ -301,7 +302,7 @@ if ($action == 'getProducts') { 'object' => 'product', 'img' => $ig, 'qty' => 1, - //'price_formated' => price(price2num($obj->price, 'MU'), 1, $langs, 1, -1, -1, $conf->currency) + 'price_formated' => price(price2num($obj->price, 'MU'), 1, $langs, 1, -1, -1, $conf->currency) ); // Add entries to row from hooks $parameters=array(); diff --git a/htdocs/takepos/css/pos.css.php b/htdocs/takepos/css/pos.css.php index 1ffe5c63db3..f4a130dc5f1 100644 --- a/htdocs/takepos/css/pos.css.php +++ b/htdocs/takepos/css/pos.css.php @@ -825,3 +825,108 @@ div#moreinfo, div#infowarehouse { display: table; clear: both; } + +.div5 .imgadd { + display: none; +} + +@media screen and (max-width: 767px) { + .div4 { + height: auto; + width: 100%; + float: left; + box-sizing: border-box; + font-size: 6px; + padding-top: 10px; + padding-bottom: 2px; + margin-left: 2px; + } + + .div4 .wrapper.divempty, .div4 img, .div4 .wrapper:nth-last-child(1), .div4 .wrapper:nth-last-child(2), #prodiv22, #prodiv23, .catwatermark { + display: none!important; + } + + .tab-category { + float: left; + position: relative; + width: 25%; + height: 33%; + margin: 0; + padding: 1px; + border: 2px solid #EEE; + text-align: center; + box-sizing: border-box; + background-color: #fff; + } + + .div4 .wrapper, .tab-category { + width: auto; + height: auto; + padding: 6px; + text-align: center; + cursor: pointer; + border: 1px solid #FFF!important; + border-top: 3px solid #FFF!important; + } + + .div4 .tab-category.active { + border-right: 1px solid #CCC !important; + border-left: 1px solid #CCC !important; + border-top: 3px solid var(--colorbackhmenu1) !important; + } + + .div5 { + height: 100%; + width: 100%; + padding-top: 0px; + } + + div.description { + position: initial; + width: auto; + background-color: black; + opacity: 1; + text-align: center; + padding-top: 0px; + background: -webkit-linear-gradient(top, rgba(250,250,250,0), rgba(250,250,250,0.5), rgba(250,250,250,0.95), rgba(250,250,250,1)); + } + + .div5 .description .description_content { + font-weight: bold; + font-size: 14px; + padding-left: 10px; + } + + .div5 .wrapper2 { + width: 100%; + display: inline-flex; + align-items: center; + padding: 10px; + } + + .div5 .wrapper2.divempty { + display: none; + } + + div.wrapper2 { + float: none; + } + + .div5 .arrow { + width: auto; + height: auto; + display: none!important; + } + + .div5 .arrow .centerinmiddle { + transform: translate(0, 0); + } + + .div5 .imgadd { + display: flex; + } + + div.wrapper2{ + height:10%; + } +} \ No newline at end of file diff --git a/htdocs/takepos/index.php b/htdocs/takepos/index.php index c43d0ec092f..8be5a97e465 100644 --- a/htdocs/takepos/index.php +++ b/htdocs/takepos/index.php @@ -587,7 +587,9 @@ function New() { * return {void} */ function Search2(keyCodeForEnter, moreorless) { - console.log("Search2 Call ajax search to replace products keyCodeForEnter="+keyCodeForEnter); + var eventKeyCode = window.event.keyCode; + + console.log("Search2 Call ajax search to replace products keyCodeForEnter="+keyCodeForEnter+", eventKeyCode="+eventKeyCode); var search_term = $('#search').val(); var search_start = 0; @@ -610,20 +612,19 @@ function Search2(keyCodeForEnter, moreorless) { } var search = false; - var eventKeyCode = window.event.keyCode; - if (keyCodeForEnter == '' || eventKeyCode == keyCodeForEnter) { + if (keyCodeForEnter != '' || eventKeyCode == keyCodeForEnter) { search = true; } if (search === true) { - - // temporization time to give time to type + // if a timer has been already started (search2_timer is a global js variable), we cancel it now + // we click onto another key, we will restart another timer just after if (search2_timer) { clearTimeout(search2_timer); } + // temporization time to give time to type search2_timer = setTimeout(function(){ - pageproducts = 0; jQuery(".wrapper2 .catwatermark").hide(); var nbsearchresults = 0; @@ -695,8 +696,8 @@ function Search2(keyCodeForEnter, moreorless) { if (data.length == 0) { $('#search').val('load('errors'); - echo dol_escape_js($langs->trans("ErrorRecordNotFound")); - ?>'); + echo dol_escape_js($langs->transnoentitiesnoconv("ErrorRecordNotFoundShort")); + ?> ('+search_term+')'); $('#search').select(); } else ClearSearch(); @@ -1345,7 +1346,7 @@ if (!empty($conf->global->TAKEPOS_WEIGHING_SCALE)) { onclick="MoreProducts('less');" : 4px; } +.paddingleftimp { + padding-: 4px !important; +} .paddingleft2 { padding-: 2px; } @@ -854,6 +858,9 @@ textarea.centpercent { .paddingright { padding-: 4px; } +.paddingrightimp { + padding-: 4px !important; +} .paddingright2 { padding-: 2px; } @@ -1294,6 +1301,10 @@ select.flat.selectlimit { text-overflow: ellipsis; white-space: nowrap; } +.spanoverflow { + overflow-x: clip; + text-overflow: ellipsis; +} .tdoverflowmax50 { /* For tdoverflow, the max-midth become a minimum ! */ max-width: 50px; overflow: hidden; @@ -1382,6 +1393,7 @@ select.flat.selectlimit { -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; + height: auto !important; } .tablelistofcalendars { @@ -1571,6 +1583,7 @@ table[summary="list_of_modules"] .fa-cog { .widthauto { width: auto; } .width20 { width: 20px; } .width25 { width: 25px; } +.width40 { width: 40px; } .width50 { width: 50px; } .width75 { width: 75px; } .width100 { width: 100px; } @@ -3317,7 +3330,14 @@ li.expanded > a.fmdirlia.jqft.ecmjqft { font-weight: bold !important; } +.divfmdirlia { + width: calc(100% - 100px); +} +a.fmdirlia { + white-space: break-spaces; + word-break: break-all; +} /* ============================================================================== */ @@ -4317,9 +4337,9 @@ div.tabBar .noborder { /* Prepare to remove class pair - impair */ -.noborder:not(.editmode) > tbody > tr:nth-child(even):not(.liste_titre), .liste > tbody > tr:nth-child(even):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(even):not(.liste_titre), .liste > tbody > tr:nth-of-type(even):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(even):not(.liste_titre) +.noborder:not(.editmode) > tbody > tr:nth-child(even):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-child(even):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(even):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-of-type(even):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(even):not(.liste_titre):not(.nooddeven) { background: linear-gradient(bottom, var(----colorbacklineimpair2) 0%, var(--colorbacklineimpair2) 100%); background: -o-linear-gradient(bottom, var(--colorbacklineimpair2) 0%, var(--colorbacklineimpair2) 100%); @@ -4332,9 +4352,9 @@ div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nt border-bottom: 1px solid #e0e0e0; } -.noborder:not(.editmode) > tbody > tr:nth-child(odd):not(.liste_titre), .liste > tbody > tr:nth-child(odd):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(odd):not(.liste_titre), .liste > tbody > tr:nth-of-type(odd):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(odd):not(.liste_titre) +.noborder:not(.editmode) > tbody > tr:nth-child(odd):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-child(odd):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(odd):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-of-type(odd):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(odd):not(.liste_titre):not(.nooddeven) { background: linear-gradient(bottom, var(--colorbacklinepair2) 0%, var(--colorbacklinepair2) 100%); background: -o-linear-gradient(bottom, var(--colorbacklinepair2) 0%, var(--colorbacklinepair2) 100%); @@ -4857,8 +4877,13 @@ input#cardholder-name { } .divmainbodylarge { margin-left: 40px; margin-right: 40px; } +.publicnewmemberform div.titre { font-size: 2em; } #divsubscribe { max-width: 900px; } +#divsubscribe .eventlabel { font-size: 1.5em; } #tablesubscribe { width: 100%; } +#tablesubscribe tr td { font-size: 1.15em; } +#tablesubscribe .price-registration { font-size: 1.5em; } + div#card-element { border: 1px solid #ccc; @@ -5141,7 +5166,7 @@ tr.visible { .websiteformtoolbar { position: sticky; top: ; - z-index: 1000; + z-index: 1002; /* Dolibarr menu is 1001, Website menu is 1002 */ } .exampleapachesetup { @@ -5588,7 +5613,13 @@ a.cke_dialog_ui_button } .cke_dialog_ui_hbox_last { - vertical-align: bottom ! important; + vertical-align: bottom !important; +} +.cke_dialog_ui_hbox_first { + vertical-align: middle !important; +} +.cke_combo_text { + width: 40px !important; } /* .cke_editable @@ -5882,6 +5913,12 @@ ul.ecmjqft a { font-weight:normal; display: inline-block !important; } +ul.ecmjqft > a { + width: calc(100% - 100px); + overflow: hidden; + white-space: break-spaces; + word-break: break-all; +} ul.ecmjqft a:active { font-weight: bold !important; } @@ -6405,9 +6442,14 @@ ul.select2-results__options li { @media only screen and (min-width: 767px) { + /* CSS to have the dropdown boxes larger that the input search area */ .select2-container.select2-container--open .select2-dropdown.ui-dialog { - min-width: 200px !important; + min-width: 220px !important; } + .select2-container.select2-container--open .select2-dropdown--below { + min-width: 220px !important; + } + .select2-container--open .select2-dropdown--below { border-top: 1px solid var(--inputbordercolor); /* border-top: 1px solid #aaaaaa; */ @@ -6582,6 +6624,7 @@ dl.dropdown { max-height: 264px; overflow: auto; border-radius: 2px; + z-index: 1; } .dropdown dd ul.selectedfieldsleft { right: auto; diff --git a/htdocs/theme/md/badges.inc.php b/htdocs/theme/md/badges.inc.php index 4a36177e852..cfa1afbc9f2 100644 --- a/htdocs/theme/md/badges.inc.php +++ b/htdocs/theme/md/badges.inc.php @@ -69,6 +69,7 @@ span.badgeneutral { background-color: #e4e4e4; color: #666; border-radius: 10px; + white-space: nowrap; } diff --git a/htdocs/theme/md/ckeditor/config.js b/htdocs/theme/md/ckeditor/config.js index 06fa5746e7f..c7e10f9a123 100644 --- a/htdocs/theme/md/ckeditor/config.js +++ b/htdocs/theme/md/ckeditor/config.js @@ -46,8 +46,8 @@ CKEDITOR.editorConfig = function( config ) ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], ['BidiLtr', 'BidiRtl'], - ['Link','Unlink','Anchor'], - ['Image','Table','HorizontalRule','Smiley','SpecialChar'], + ['Link','Unlink'], + ['Image','Table','HorizontalRule','Smiley'], ['Styles','Format','Font','FontSize'], ['TextColor','BGColor'], ['Source'] @@ -64,7 +64,7 @@ CKEDITOR.editorConfig = function( config ) ['Bold','Italic','Underline','Strike','-','TextColor','RemoveFormat'], ['NumberedList','BulletedList','Outdent','Indent'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], - ['Link','Unlink','Anchor','Image','Table','HorizontalRule','SpecialChar'], + ['Link','Unlink','Image','Table','HorizontalRule'], ['Source'] ]; @@ -78,7 +78,7 @@ CKEDITOR.editorConfig = function( config ) ['Bold','Italic','Underline','Strike','-','TextColor','RemoveFormat'], ['NumberedList','BulletedList','Outdent','Indent'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], - ['Link','Unlink','Image','Table','HorizontalRule','SpecialChar'], + ['Link','Unlink','Image','Table','HorizontalRule'], ['Source'] ]; @@ -91,7 +91,7 @@ CKEDITOR.editorConfig = function( config ) ['Bold','Italic','Underline','Strike','-','TextColor','RemoveFormat'], // ,'Subscript','Superscript' useless ['NumberedList','BulletedList','Outdent','Indent'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], - ['Link','Unlink','SpecialChar'], + ['Link','Unlink'], ['Source'] ]; @@ -100,6 +100,7 @@ CKEDITOR.editorConfig = function( config ) [ ['Maximize'], ['Find'], + ['Image'], ['Source'] ]; }; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9141a0d3f3c..002166968cd 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -997,6 +997,9 @@ textarea.centpercent { .paddingleft { padding-: 4px; } +.paddingleftimp { + padding-: 4px !important; +} .paddingleft2 { padding-: 2px; } @@ -1006,6 +1009,9 @@ textarea.centpercent { .paddingright { padding-: 4px; } +.paddingrightimp { + padding-: 4px !important; +} .paddingright2 { padding-: 2px; } @@ -1405,12 +1411,19 @@ select.flat.selectlimit { width: 130px; } /* using a tdoverflowxxx make the min-width not working */ +.tdnooverflowimp { + text-overflow: none; +} .tdoverflow { max-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.spanoverflow { + overflow-x: clip; + text-overflow: ellipsis; +} .tdoverflowmax50 { /* For tdoverflow, the max-midth become a minimum ! */ max-width: 50px; overflow: hidden; @@ -1499,6 +1512,7 @@ select.flat.selectlimit { -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; + height: auto !important; } .tablelistofcalendars { @@ -1663,6 +1677,7 @@ tr.nobottom td { .widthauto { width: auto; } .width20 { width: 20px; } .width25 { width: 25px; } +.width40 { width: 40px; } .width50 { width: 50px; } .width75 { width: 75px; } .width100 { width: 100px; } @@ -3303,6 +3318,11 @@ li.expanded > a.fmdirlia.jqft.ecmjqft { font-weight: bold !important; } +a.fmdirlia { + white-space: break-spaces; + word-break: break-all; +} + /* ============================================================================== */ /* Onglets */ @@ -4262,9 +4282,9 @@ div .tdtop:not(.tagtdnote) { /* Prepare to remove class pair - impair */ -.noborder > tbody > tr:nth-child(even):not(.liste_titre), .liste > tbody > tr:nth-child(even):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(even):not(.liste_titre), .liste > tbody > tr:nth-of-type(even):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(even):not(.liste_titre) +.noborder > tbody > tr:nth-child(even):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-child(even):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(even):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-of-type(even):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(even):not(.liste_titre):not(.nooddeven) { background: linear-gradient(to bottom, var(--colorbacklineimpair2) 0%, var(--colorbacklineimpair2) 100%); background: -o-linear-gradient(bottom, var(--colorbacklineimpair2) 0%, var(--colorbacklineimpair2) 100%); @@ -4277,9 +4297,9 @@ div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nt border-bottom: 1px solid #ddd; } -.noborder > tbody > tr:nth-child(odd):not(.liste_titre), .liste > tbody > tr:nth-child(odd):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(odd):not(.liste_titre), .liste > tbody > tr:nth-of-type(odd):not(.liste_titre), -div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(odd):not(.liste_titre) +.noborder > tbody > tr:nth-child(odd):not(.liste_titre), .liste > tbody > tr:nth-child(odd):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) > .border > tbody > tr:nth-of-type(odd):not(.liste_titre):not(.nooddeven), .liste > tbody > tr:nth-of-type(odd):not(.liste_titre):not(.nooddeven), +div:not(.fichecenter):not(.fichehalfleft):not(.fichehalfright) .oddeven.tagtr:nth-of-type(odd):not(.liste_titre):not(.nooddeven) { background: linear-gradient(to bottom, var(--colorbacklinepair1) 0%, var(--colorbacklinepair2) 100%); background: -o-linear-gradient(bottom, var(--colorbacklinepair1) 0%, var(--colorbacklinepair2) 100%); @@ -4710,8 +4730,13 @@ span.buttonpaymentsmall { #tablepublicpayment tr.liste_total td { border-top: none; } .divmainbodylarge { margin-left: 40px; margin-right: 40px; } +.publicnewmemberform div.titre { font-size: 2em; } #divsubscribe { max-width: 900px; } +#divsubscribe .eventlabel { font-size: 1.5em; } #tablesubscribe { width: 100%; } +#tablesubscribe tr td { font-size: 1.15em; } +#tablesubscribe .price-registration { font-size: 1.5em; } + div#card-element { border: 1px solid #ccc; @@ -4996,7 +5021,7 @@ tr.visible { .websiteformtoolbar { position: sticky; top: ; - z-index: 1000; + z-index: 1002; /* Dolibarr menu is 1001, Website menu is 1002 */ } .exampleapachesetup { @@ -5430,7 +5455,14 @@ a.cke_dialog_ui_button } .cke_dialog_ui_hbox_last { - vertical-align: bottom ! important; + vertical-align: bottom !important; +} +.cke_dialog_ui_hbox_last +{ + vertical-align: bottom !important; +} +.cke_combo_text { + width: 40px !important; } /* .cke_editable @@ -5718,6 +5750,12 @@ ul.ecmjqft a { font-weight:normal; display: inline-block !important; } +ul.ecmjqft > a { + width: calc(100% - 100px); + overflow: hidden; + white-space: break-spaces; + word-break: break-all; +} ul.ecmjqft a:active { font-weight: bold !important; } @@ -6171,9 +6209,14 @@ ul.select2-results__options li { @media only screen and (min-width: 767px) { + /* CSS to have the dropdown boxes larger that the input search area */ .select2-container.select2-container--open .select2-dropdown.ui-dialog { - min-width: 200px !important; + min-width: 220px !important; } + .select2-container.select2-container--open .select2-dropdown--below { + min-width: 220px !important; + } + .select2-container--open .select2-dropdown--below { border-top: 1px solid var(--inputbordercolor); /* border-top: 1px solid #aaaaaa; */ @@ -6341,6 +6384,7 @@ dl.dropdown { list-style:none; max-height: 264px; overflow: auto; + z-index: 1; } .dropdown dd ul.selectedfieldsleft { right: auto; diff --git a/htdocs/ticket/agenda.php b/htdocs/ticket/agenda.php index 9adffdfd720..9111faedcb7 100644 --- a/htdocs/ticket/agenda.php +++ b/htdocs/ticket/agenda.php @@ -30,6 +30,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +if (isModEnabled('project')) { + include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +} // Load translation files required by the page $langs->loadLangs(array('companies', 'other', 'ticket')); @@ -94,6 +99,7 @@ if (!$user->socid && (!empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) && accessforbidden(); } +$permissiontoadd = $user->rights->ticket->write; /* @@ -177,45 +183,33 @@ if ($object->fk_user_create > 0) { // Thirdparty if (isModEnabled("societe")) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; - }*/ - $morehtmlref .= ' : '; - if ($action == 'editcustomer') { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); - } else { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("ThirdParty"), 'company', 'class="pictofixedwidth"'); + if ($action != 'editcustomer' && 0) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty'), 0).' '; } + $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, $action == 'editcustomer' ? 'editcustomer' : 'none', '', 1, 0, 0, array(), 1); } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project'); - if ($user->rights->ticket->write) { + if (0) { + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { + $morehtmlref .= '
    '; $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= $proj->getNomUrl(1); - } else { - $morehtmlref .= ''; + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } } } } @@ -259,7 +253,7 @@ if (!empty($object->id)) { // Show link to add event (if read and not closed) $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; - $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&datep='.date('YmdHi').'&origin=ticket&originid='.$object->id.'&projectid='.$object->fk_project.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id); + $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&datep=now&origin=ticket&originid='.$object->id.'&projectid='.$object->fk_project.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id); $morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', $url, 'add-new-ticket-even-button', $btnstatus); print_barre_liste($langs->trans("ActionsOnTicket"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1); diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index 841f810e5ec..20cee1a2cfa 100755 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -126,6 +126,8 @@ $permissiontoadd = $user->rights->ticket->write; $actionobject = new ActionsTicket($db); +$upload_dir = $conf->ticket->dir_output; + $now = dol_now(); @@ -444,11 +446,7 @@ if (empty($reshook)) { if ($ret > 0) { if (!empty($backtopage)) { - if (empty($id)) { - $url = $backtopage; - } else { - $url = 'card.php?track_id='.urlencode($object->track_id); - } + $url = $backtopage; } else { $url = 'card.php?track_id='.urlencode($object->track_id); } @@ -456,7 +454,7 @@ if (empty($reshook)) { header("Location: ".$url); exit; } else { - setEventMessages($object->error, null, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); $action = 'presend'; } } @@ -686,10 +684,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once // Actions to build doc - $upload_dir = $conf->ticket->dir_output; $permissiontoadd = $user->rights->ticket->write; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; //var_dump($action);exit; + // Actions to send emails $triggersendname = 'TICKET_SENTBYMAIL'; $paramname = 'id'; @@ -943,53 +941,47 @@ if ($action == 'create' || $action == 'presend') { } elseif (!empty($object->email_msgid)) { $morehtmlref .= '
    '.$langs->trans("CreatedBy").' : '; $morehtmlref .= img_picto('', 'email', 'class="paddingrightonly"'); - $morehtmlref .= dol_escape_htmltag($object->origin_email).' ('.$form->textwithpicto($langs->trans("CreatedByEmailCollector"), $langs->trans("EmailMsgID").': '.$object->email_msgid).')'; + $htmltooltip = $langs->trans("EmailMsgID").': '.$object->email_msgid; + $htmltooltip .= '
    '.$langs->trans("EmailDate").': '.dol_print_date($object->email_date, 'dayhour'); + $morehtmlref .= dol_escape_htmltag($object->origin_email).' - '.$form->textwithpicto($langs->trans("CreatedByEmailCollector"), $htmltooltip, 1, 'help', '', 0, 3, 'tooltip').''; } elseif (!empty($object->origin_email)) { $morehtmlref .= '
    '.$langs->trans("CreatedBy").' : '; $morehtmlref .= img_picto('', 'email', 'class="paddingrightonly"'); - $morehtmlref .= dol_escape_htmltag($object->origin_email).' ('.$langs->trans("CreatedByPublicPortal").')'; + $htmltooptip = $langs->trans("IP").': '.$object->ip; + $morehtmlref .= dol_escape_htmltag($object->origin_email).' - '.$form->textwithpicto($langs->trans("CreatedByPublicPortal"), $htmltooptip, 1, 'help', '', 0, 3, 'tooltip').''; } + $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write; + //$permissiontoedit = 0; + // Thirdparty if (isModEnabled("societe")) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' '; - if ($action != 'editcustomer' && $object->status < 8 && !$user->socid && $user->rights->ticket->write) { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('Edit'), 0).' : '; - } - if ($action == 'editcustomer') { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); - } else { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("ThirdParty"), 'company', 'class="pictofixedwidth"'); + if ($action != 'editcustomer' && $permissiontoedit) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty'), 0).' '; } + $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, $action == 'editcustomer' ? 'editcustomer' : 'none', '', 1, 0, 0, array(), 1); } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->ticket->write) { + $morehtmlref .= '
    '; + if ($permissiontoedit) { + $object->fetch_project(); + $morehtmlref .= img_picto($langs->trans("Project"), 'project'.((is_object($object->project) && $object->project->public) ? 'pub' : ''), 'class="pictofixedwidth"'); if ($action != 'classify') { - $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).''; - } - $morehtmlref .= ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1, 0, 'maxwidth500'); - $morehtmlref .= ''; - $morehtmlref .= ''; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref .= $proj->getNomUrl(1); - } else { - $morehtmlref .= ''; + $object->fetch_project(); + $morehtmlref .= $object->project->getNomUrl(1); + if ($object->project->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($object->project->title).''; + } } } } @@ -1071,7 +1063,7 @@ if ($action == 'create' || $action == 'presend') { print '
    '.$langs->trans("Parameters").''.$langs->trans('Value').'
    '; print $langs->trans("AssignedTo"); if (isset($object->status) && $object->status < $object::STATUS_CLOSED && GETPOST('set', 'alpha') != "assign_ticket" && $user->rights->ticket->manage) { - print ''.img_edit($langs->trans('Modify'), '').''; + print ''.img_edit($langs->trans('Modify'), '').''; } print '
    '; print '
    '; @@ -1099,7 +1091,7 @@ if ($action == 'create' || $action == 'presend') { print $langs->trans('Progression').''; print ''.img_edit($langs->trans('Modify')).''.img_edit($langs->trans('Modify')).'
    '; print ''; @@ -1564,7 +1556,7 @@ if ($action == 'create' || $action == 'presend') { // List of all actions $filters = array(); $filters['search_agenda_label'] = $search_agenda_label; - show_ticket_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + show_actions_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); } if ($action != 'presend' && $action != 'presend_addmessage' && $action != 'add_message') { diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index 9a01c5cf7d2..133fb72e7f2 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -164,7 +164,7 @@ class ActionsTicket } elseif ($action == 'view') { return $langs->trans("TicketCard"); } elseif ($action == 'add_message') { - return $langs->trans("AddMessage"); + return $langs->trans("TicketAddMessage"); } else { return $langs->trans("TicketsManagement"); } diff --git a/htdocs/ticket/class/api_tickets.class.php b/htdocs/ticket/class/api_tickets.class.php index 2fd77693984..e7930569bdd 100644 --- a/htdocs/ticket/class/api_tickets.class.php +++ b/htdocs/ticket/class/api_tickets.class.php @@ -181,36 +181,6 @@ class Tickets extends DolibarrApi $this->ticket->messages = $messages; } - // History - $history = array(); - $this->ticket->loadCacheLogsTicket(); - if (is_array($this->ticket->cache_logs_ticket) && count($this->ticket->cache_logs_ticket) > 0) { - $num = count($this->ticket->cache_logs_ticket); - $i = 0; - $user_action = new User($this->db); - - while ($i < $num) { - $userstring = ''; - if ($this->ticket->cache_logs_ticket[$i]['fk_user_create'] > 0) { - $user_action->fetch($this->ticket->cache_logs_ticket[$i]['fk_user_create']); - - $userstring = dolGetFirstLastname($user_action->firstname, $user_action->lastname); - } - - // Now define messages - $history[] = array( - 'id' => $this->ticket->cache_logs_ticket[$i]['id'], - 'fk_user_author' => $this->ticket->cache_msgs_ticket[$i]['fk_user_author'], - 'fk_user_action' => $this->ticket->cache_logs_ticket[$i]['fk_user_create'], - 'fk_user_action_string' => $userstring, - 'message' => $this->ticket->cache_logs_ticket[$i]['message'], - 'datec' => $this->ticket->cache_logs_ticket[$i]['datec'], - ); - $i++; - } - $this->ticket->history = $history; - } - if (!DolibarrApi::_checkAccessToResource('ticket', $this->ticket->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } @@ -246,6 +216,7 @@ class Tickets extends DolibarrApi $socid = DolibarrApiAccess::$user->socid; } + $search_sale = null; // If the internal user must only see his customers, force searching by him $search_sale = 0; if (!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) { diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 42ffa662246..3a6adeb6c20 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1580,144 +1580,6 @@ class Ticket extends CommonObject } } - - /** - * Send notification of changes by email - * - * @param User $user User that create - * @param string $message Log message - * @return int <0 if KO, >0 if OK (number of emails sent) - */ - private function sendLogByEmail($user, $message) - { - global $conf, $langs; - - $nb_sent = 0; - - $langs->load('ticket'); - - // Retrieve email of all contacts (internal and external) - $contacts = $this->listeContact(-1, 'internal'); - $contacts = array_merge($contacts, $this->listeContact(-1, 'external')); - - /* If origin_email and no socid, we add email to the list * */ - if (!empty($this->origin_email) && empty($this->fk_soc)) { - $array_ext = array(array('firstname' => '', 'lastname' => '', 'email' => $this->origin_email, 'libelle' => $langs->transnoentities('TicketEmailOriginIssuer'), 'socid' => "-1")); - $contacts = array_merge($contacts, $array_ext); - } - - if (!empty($this->fk_soc)) { - $this->fetch_thirdparty($this->fk_soc); - $array_company = array(array('firstname' => '', 'lastname' => $this->client->name, 'email' => $this->client->email, 'libelle' => $langs->transnoentities('Customer'), 'socid' => $this->client->id)); - $contacts = array_merge($contacts, $array_company); - } - - // foreach contact send email with notification message - if (count($contacts) > 0) { - foreach ($contacts as $key => $info_sendto) { - $tmpmessage = ''; - $subject = '['.$conf->global->MAIN_INFO_SOCIETE_NOM.'] '.$langs->transnoentities('TicketNotificationEmailSubject', $this->track_id); - $tmpmessage .= $langs->transnoentities('TicketNotificationEmailBody', $this->track_id)."\n\n"; - $tmpmessage .= $langs->transnoentities('Title').' : '.$this->subject."\n"; - - $recipient_name = dolGetFirstLastname($info_sendto['firstname'], $info_sendto['lastname'], '-1'); - $recipient = (!empty($recipient_name) ? $recipient_name : $info_sendto['email']).' ('.strtolower($info_sendto['libelle']).')'; - $tmpmessage .= $langs->transnoentities('TicketNotificationRecipient').' : '.$recipient."\n"; - $tmpmessage .= "\n"; - $tmpmessage .= '* '.$langs->transnoentities('TicketNotificationLogMessage').' *'."\n"; - $tmpmessage .= dol_html_entity_decode($message, ENT_QUOTES | ENT_HTML5)."\n"; - - if ($info_sendto['source'] == 'internal') { - $url_internal_ticket = dol_buildpath('/ticket/card.php', 2).'?track_id='.$this->track_id; - $tmpmessage .= "\n".$langs->transnoentities('TicketNotificationEmailBodyInfosTrackUrlinternal').' : '.$this->track_id.''."\n"; - } else { - $url_public_ticket = ($conf->global->TICKET_URL_PUBLIC_INTERFACE ? $conf->global->TICKET_URL_PUBLIC_INTERFACE.'/view.php' : dol_buildpath('/public/ticket/view.php', 2)).'?track_id='.$this->track_id; - $tmpmessage .= "\n".$langs->transnoentities('TicketNewEmailBodyInfosTrackUrlCustomer').' : '.$this->track_id.''."\n"; - } - - $tmpmessage .= "\n"; - $tmpmessage .= $langs->transnoentities('TicketEmailPleaseDoNotReplyToThisEmail')."\n"; - - $from = $conf->global->MAIN_INFO_SOCIETE_NOM.'<'.$conf->global->TICKET_NOTIFICATION_EMAIL_FROM.'>'; - $replyto = $from; - - // Init to avoid errors - $filepath = array(); - $filename = array(); - $mimetype = array(); - - $tmpmessage = dol_nl2br($tmpmessage); - - if (!empty($conf->global->TICKET_DISABLE_MAIL_AUTOCOPY_TO)) { - $old_MAIN_MAIL_AUTOCOPY_TO = $conf->global->MAIN_MAIL_AUTOCOPY_TO; - $conf->global->MAIN_MAIL_AUTOCOPY_TO = ''; - } - include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; - $sendtocc = ''; - $deliveryreceipt = 0; - $mailfile = new CMailFile($subject, $info_sendto['email'], $from, $tmpmessage, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, 0); - if ($mailfile->error || !empty($mailfile->errors)) { - setEventMessages($mailfile->error, $mailfile->errors, 'errors'); - } else { - $result = $mailfile->sendfile(); - if ($result > 0) { - $nb_sent++; - } - } - if (!empty($conf->global->TICKET_DISABLE_MAIL_AUTOCOPY_TO)) { - $conf->global->MAIN_MAIL_AUTOCOPY_TO = $old_MAIN_MAIL_AUTOCOPY_TO; - } - } - - setEventMessages($langs->trans('TicketNotificationNumberEmailSent', $nb_sent), null, 'mesgs'); - } - - return $nb_sent; - } - - /** - * Charge la liste des actions sur le ticket - * - * @return int Number of lines loaded, 0 if already loaded, <0 if KO - */ - public function loadCacheLogsTicket() - { - global $langs; - - if (is_array($this->cache_logs_ticket) && count($this->cache_logs_ticket)) { - return 0; - } - // Cache deja charge - - // TODO Read the table llx_actioncomm - /* - $sql = "SELECT rowid, fk_user_create, datec, message"; - $sql .= " FROM " . MAIN_DB_PREFIX . "ticket_logs"; - $sql .= " WHERE fk_track_id ='" . $this->db->escape($this->track_id) . "'"; - $sql .= " ORDER BY datec DESC"; - - $resql = $this->db->query($sql); - if ($resql) { - $num = $this->db->num_rows($resql); - $i = 0; - while ($i < $num) { - $obj = $this->db->fetch_object($resql); - $this->cache_logs_ticket[$i]['id'] = $obj->rowid; - $this->cache_logs_ticket[$i]['fk_user_create'] = $obj->fk_user_create; - $this->cache_logs_ticket[$i]['datec'] = $this->db->jdate($obj->datec); - $this->cache_logs_ticket[$i]['message'] = $obj->message; - $i++; - } - return $num; - } else { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::loadCacheLogsTicket " . $this->error, LOG_ERR); - return -1; - }*/ - - return 0; - } - /** * Add message into database * @@ -2791,8 +2653,8 @@ class Ticket extends CommonObject $result = $this->sendTicketMessageByEmail($subject, $message, '', $sendto, $listofpaths, $listofmimes, $listofnames); if ($result) { // update last_msg_sent date - $object->date_last_msg_sent = dol_now(); - $object->update($user); + $this->date_last_msg_sent = dol_now(); + $this->update($user, 1); // disable trigger when updatin date_last_msg_sent. sendTicketMessageByEmail already create an event in actioncomm table. } } } @@ -2800,8 +2662,8 @@ class Ticket extends CommonObject } } - // Set status to "answered" if not set yet, but only if internal user - if ($object->fk_statut < 3 && !$user->socid) { + // Set status to "answered" if not set yet, but only if internal user and not private message + if ($object->status < 3 && !$user->socid && !$private) { $object->setStatut(3); } return 1; @@ -2869,9 +2731,11 @@ class Ticket extends CommonObject $conf->global->MAIN_MAIL_AUTOCOPY_TO = ''; } + $upload_dir_tmp = $conf->user->dir_output."/".$user->id.'/temp'; + include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; $trackid = "tic".$this->id; - $mailfile = new CMailFile($subject, $receiver, $from, $message, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, -1, '', '', $trackid, '', 'ticket'); + $mailfile = new CMailFile($subject, $receiver, $from, $message, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, -1, '', '', $trackid, '', 'ticket', '', $upload_dir_tmp); if ($mailfile->error) { setEventMessages($mailfile->error, null, 'errors'); } else { diff --git a/htdocs/ticket/contact.php b/htdocs/ticket/contact.php index bf39f123708..7f5a36faf1b 100644 --- a/htdocs/ticket/contact.php +++ b/htdocs/ticket/contact.php @@ -34,6 +34,11 @@ require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +if (isModEnabled('project')) { + include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +} // Load translation files required by the page $langs->loadLangs(array('companies', 'ticket')); @@ -212,45 +217,33 @@ if ($id > 0 || !empty($track_id) || !empty($ref)) { // Thirdparty if (isModEnabled("societe")) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; - }*/ - $morehtmlref .= ' : '; - if ($action == 'editcustomer') { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); - } else { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("ThirdParty"), 'company', 'class="pictofixedwidth"'); + if ($action != 'editcustomer' && 0) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty'), 0).' '; } + $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, $action == 'editcustomer' ? 'editcustomer' : 'none', '', 1, 0, 0, array(), 1); } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->ticket->write) { + if (0) { + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { + $morehtmlref .= '
    '; $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= $proj->getNomUrl(1); - } else { - $morehtmlref .= ''; + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } } } } diff --git a/htdocs/ticket/document.php b/htdocs/ticket/document.php index 5a7d46540c4..8015cb32145 100644 --- a/htdocs/ticket/document.php +++ b/htdocs/ticket/document.php @@ -33,6 +33,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; require_once DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +if (isModEnabled('project')) { + include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +} // Load translation files required by the page $langs->loadLangs(array("companies", "other", "ticket", "mails")); @@ -147,45 +152,33 @@ if ($object->id) { // Thirdparty if (isModEnabled("societe")) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; - }*/ - $morehtmlref .= ' : '; - if ($action == 'editcustomer') { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); - } else { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("ThirdParty"), 'company', 'class="pictofixedwidth"'); + if ($action != 'editcustomer' && 0) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty'), 0).' '; } + $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, $action == 'editcustomer' ? 'editcustomer' : 'none', '', 1, 0, 0, array(), 1); } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project').' '; - if ($user->rights->ticket->write) { + if (0) { + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { + $morehtmlref .= '
    '; $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= $proj->getNomUrl(1); - } else { - $morehtmlref .= ''; + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } } } } diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index fd4d7f15f9e..66bda452ccf 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -397,6 +397,12 @@ foreach ($search as $key => $val) { $sql .= natural_search($key, $search[$key], 2); } continue; + } elseif ($key == 'type_code') { + $newarrayoftypecodes = is_array($search[$key]) ? $search[$key] : (!empty($search[$key]) ? explode(',', $search[$key]) : array()); + if (count($newarrayoftypecodes)) { + $sql .= natural_search($key, join(',', $newarrayoftypecodes), 3); + } + continue; } $mode_search = ((!empty($object->fields[$key]) && ($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key]))) ? 1 : 0); @@ -452,7 +458,7 @@ $sql .= $hookmanager->resPrint; $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); $objforcount = $db->fetch_object($resql); $nbtotalofrecords = $objforcount->nbtotalofrecords; @@ -572,7 +578,7 @@ if ($projectid > 0 || $project_ref) { $morehtmlref .= $object->title; // Thirdparty if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1, 'project'); + $morehtmlref .= '
    '.$object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= '
    '; @@ -587,7 +593,7 @@ if ($projectid > 0 || $project_ref) { print '
    '; print '
    '; - print ''; + print '
    '; // Visibility print ''; } elseif ($key == 'type_code') { print ''; } elseif ($key == 'category_code') { print '\n"; - // Signature print ''; print ''; + // Note private + print '\n"; + + // Note private + print '\n"; print '
    '.$langs->trans("Visibility").''; @@ -814,7 +820,7 @@ foreach ($object->fields as $key => $val) { print ''; - $formTicket->selectTypesTickets(dol_escape_htmltag(empty($search[$key]) ? '' : $search[$key]), 'search_'.$key.'', '', 2, 1, 1, 0, (!empty($val['css']) ? $val['css'] : 'maxwidth150')); + $formTicket->selectTypesTickets(dol_escape_htmltag(empty($search[$key]) ? '' : $search[$key]), 'search_'.$key.'', '', 2, 1, 1, 0, (!empty($val['css']) ? $val['css'] : 'maxwidth150'), 1); print ''; diff --git a/htdocs/ticket/messaging.php b/htdocs/ticket/messaging.php index 88ac4ef686c..bd06bd32e94 100644 --- a/htdocs/ticket/messaging.php +++ b/htdocs/ticket/messaging.php @@ -30,6 +30,11 @@ require_once DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +if (isModEnabled('project')) { + include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + include_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +} // Load translation files required by the page $langs->loadLangs(array('companies', 'other', 'ticket')); @@ -173,46 +178,34 @@ if ($object->fk_user_create > 0) { // Thirdparty if (isModEnabled("societe")) { - $morehtmlref .= '
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; - }*/ - $morehtmlref .= ' : '; - if ($action == 'editcustomer') { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); - } else { - $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + if (isModEnabled("societe")) { + $morehtmlref .= '
    '; + $morehtmlref .= img_picto($langs->trans("ThirdParty"), 'company', 'class="pictofixedwidth"'); + if ($action != 'editcustomer' && 0) { + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetThirdParty'), 0).' '; + } + $morehtmlref .= $form->form_thirdparty($url_page_current.'?track_id='.$object->track_id, $object->socid, $action == 'editcustomer' ? 'editcustomer' : 'none', '', 1, 0, 0, array(), 1); } } // Project if (isModEnabled('project')) { $langs->load("projects"); - $morehtmlref .= '
    '.$langs->trans('Project'); - if ($user->rights->ticket->write) { + $morehtmlref .= '
    '; + if (0) { + $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; - $morehtmlref .= ' : '; - } - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref .= '
    '; - $morehtmlref .= ''; - $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref .= ''; - $morehtmlref .= '
    '; - } else { - $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } + $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, ($action == 'classify' ? 1 : 0), 0, 1, ''); } else { if (!empty($object->fk_project)) { - require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= $proj->getNomUrl(1); - } else { - $morehtmlref .= ''; + if ($proj->title) { + $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; + } } } } @@ -256,7 +249,7 @@ if (!empty($object->id)) { // Show link to add event (if read and not closed) $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; - $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&datep='.date('YmdHi').'&origin=ticket&originid='.$object->id.'&projectid='.$object->fk_project.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id); + $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&datep=now&origin=ticket&originid='.$object->id.'&projectid='.$object->fk_project.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?track_id='.$object->track_id); $morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', $url, 'add-new-ticket-even-button', $btnstatus); @@ -265,7 +258,7 @@ if (!empty($object->id)) { // List of all actions $filters = array(); $filters['search_agenda_label'] = $search_agenda_label; - show_ticket_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + show_actions_messaging($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); } // End of page diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 3c65d018e6b..905be457810 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -276,8 +276,8 @@ if (empty($reshook)) { $object->job = GETPOST("job", 'alphanohtml'); $object->signature = GETPOST("signature", 'restricthtml'); $object->accountancy_code = GETPOST("accountancy_code", 'alphanohtml'); - $object->note = GETPOST("note", 'restricthtml'); - $object->note_private = GETPOST("note", 'restricthtml'); + $object->note_public = GETPOST("note_public", 'restricthtml'); + $object->note_private = GETPOST("note_private", 'restricthtml'); $object->ldap_sid = GETPOST("ldap_sid", 'alphanohtml'); $object->fk_user = GETPOST("fk_user", 'int') > 0 ? GETPOST("fk_user", 'int') : 0; $object->fk_user_expense_validator = GETPOST("fk_user_expense_validator", 'int') > 0 ? GETPOST("fk_user_expense_validator", 'int') : 0; @@ -1205,15 +1205,6 @@ if ($action == 'create' || $action == 'adduserldap') { $parameters = array(); include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; - // Note - print '
    '; - print $langs->trans("Note"); - print ''; - require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('note', GETPOSTISSET('note') ? GETPOST('note', 'restricthtml') : '', '', 120, 'dolibarr_notes', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_SOCIETE'), ROWS_3, '90%'); - $doleditor->Create(); - print "
    '.$langs->trans("Signature").''; @@ -1222,6 +1213,23 @@ if ($action == 'create' || $action == 'adduserldap') { print $doleditor->Create(1); print '
    '; + print $langs->trans("NotePublic"); + print ''; + require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor = new DolEditor('note_public', GETPOSTISSET('note_public') ? GETPOST('note_public', 'restricthtml') : '', '', 100, 'dolibarr_notes', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_NOTE_PUBLIC'), ROWS_3, '90%'); + $doleditor->Create(); + print "
    '; + print $langs->trans("NotePrivate"); + print ''; + require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor = new DolEditor('note_private', GETPOSTISSET('note_private') ? GETPOST('note_private', 'restricthtml') : '', '', 100, 'dolibarr_notes', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_NOTE_PRIVATE'), ROWS_3, '90%'); + $doleditor->Create(); + print "

    '; @@ -2829,7 +2837,7 @@ if ($action == 'create' || $action == 'adduserldap') { // List of actions on element include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; $formactions = new FormActions($db); - $somethingshown = $formactions->showactions($object, 'user', $socid, 1); + $somethingshown = $formactions->showactions($object, 'user', $socid, 1, 'listactions', 0, '', '', $object->id); print ''; } diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index c17893e7eb4..a9a16826ee3 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -418,6 +418,7 @@ if ($action == 'create') { print ''."\n"; print ''; print ''; + print '
    '; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '
    '."\n"; print ''."\n"; print ''."\n"; - print '
    '.$langs->trans("NonAffectedUsers").''; @@ -426,8 +427,10 @@ if ($action == 'create') { print ''; print ''; print '
    '."\n"; - print '
    '; + print ''; + print '
    '; + print ''."\n"; + //print '
    '; } /* diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 04f8e5679fd..05d2f88c035 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -163,9 +163,11 @@ $search_statut = GETPOST('search_statut', 'intcomma'); $search_thirdparty = GETPOST('search_thirdparty', 'alpha'); $search_warehouse = GETPOST('search_warehouse', 'alpha'); $search_supervisor = GETPOST('search_supervisor', 'intcomma'); -$optioncss = GETPOST('optioncss', 'alpha'); $search_categ = GETPOST("search_categ", 'int'); $catid = GETPOST('catid', 'int'); +if (!empty($catid) && empty($search_categ)) { + $search_categ = $catid; +} // Default search if ($search_statut == '') { @@ -368,9 +370,6 @@ if (isset($extrafields->attributes[$object->table_element]['label']) && is_array } $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON u.fk_soc = s.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u2 ON u.fk_user = u2.rowid"; -if (!empty($search_categ) || !empty($catid)) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_user as cu ON u.rowid = cu.fk_user"; // We'll need this table joined to the select in order to filter by categ -} // Add table from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -428,17 +427,31 @@ if ($search_statut != '' && $search_statut >= 0) { if ($sall) { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } -if ($catid > 0) { - $sql .= " AND cu.fk_categorie = ".((int) $catid); -} -if ($catid == -2) { - $sql .= " AND cu.fk_categorie IS NULL"; -} -if ($search_categ > 0) { - $sql .= " AND cu.fk_categorie = ".((int) $search_categ); -} -if ($search_categ == -2) { - $sql .= " AND cu.fk_categorie IS NULL"; + +// Search for tag/category ($searchCategoryProductList is an array of ID) +$searchCategoryProductList = array($search_categ); +if (!empty($searchCategoryProductList)) { + $searchCategoryProductSqlList = array(); + $listofcategoryid = ''; + foreach ($searchCategoryProductList as $searchCategoryProduct) { + if (intval($searchCategoryProduct) == -2) { + $searchCategoryProductSqlList[] = "NOT EXISTS (SELECT ck.fk_user FROM ".MAIN_DB_PREFIX."categorie_user as ck WHERE u.rowid = ck.fk_user)"; + } elseif (intval($searchCategoryProduct) > 0) { + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryProduct); + } + } + if ($listofcategoryid) { + $searchCategoryProductSqlList[] = " EXISTS (SELECT ck.fk_user FROM ".MAIN_DB_PREFIX."categorie_user as ck WHERE u.rowid = ck.fk_user AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; + } + if ($searchCategoryProductOperator == 1) { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryProductSqlList).")"; + } + } else { + if (!empty($searchCategoryProductSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryProductSqlList).")"; + } + } } if ($search_warehouse > 0) { $sql .= " AND u.fk_warehouse = ".((int) $search_warehouse); @@ -470,7 +483,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { } }*/ /* The fast and low memory method to get and count full list converts the sql into a sql count */ - $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); + $sqlforcount = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/Ui', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql); $resql = $db->query($sqlforcount); if ($resql) { $objforcount = $db->fetch_object($resql); @@ -591,9 +604,12 @@ if ($permissiontoadd) { if (isModEnabled('category') && $permissiontoadd) { $arrayofmassactions['preaffecttag'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("AffectTag"); } +if ($permissiontoadd) { + $arrayofmassactions['presetsupervisor'] = img_picto('', 'user', 'class="pictofixedwidth"').$langs->trans("SetSupervisor"); +} //if ($permissiontodelete) $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete', 'preaffecttag'))) { +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete', 'preaffecttag', 'presetsupervisor'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php index eee3816ca67..658c45a3753 100644 --- a/htdocs/user/passwordforgotten.php +++ b/htdocs/user/passwordforgotten.php @@ -128,36 +128,34 @@ if (empty($reshook)) { $result = $edituser->fetch('', '', '', 1, -1, $username); } + // Set the message to show (must be the same if login/email exists or not + // to avoid to guess them. + $messagewarning = ''; + if ($result <= 0 && $edituser->error == 'USERNOTFOUND') { - $message = ''; + $message .= $messagewarning; $username = ''; } else { - if (!$edituser->email) { - $message = '
    '.$langs->trans("ErrorLoginHasNoEmail").'
    '; + if (empty($edituser->email)) { + $message .= $messagewarning; } else { $newpassword = $edituser->setPassword($user, '', 1); if ($newpassword < 0) { - // Failed + // Technical failure $message = '
    '.$langs->trans("ErrorFailedToChangePassword").'
    '; } else { // Success if ($edituser->send_password($user, $newpassword, 1) > 0) { - $message = ''; + $message .= $messagewarning; $username = ''; } else { + // Technical failure $message .= '
    '.$edituser->error.'
    '; } } diff --git a/htdocs/variants/ajax/get_attribute_values.php b/htdocs/variants/ajax/get_attribute_values.php index 8f522bb8107..1867eb368de 100644 --- a/htdocs/variants/ajax/get_attribute_values.php +++ b/htdocs/variants/ajax/get_attribute_values.php @@ -74,7 +74,7 @@ if ($prodattr->fetch($id) < 0) { $prodattrval = new ProductAttributeValue($db); -$res = $prodattrval->fetchAllByProductAttribute($id); +$res = $prodattrval->fetchAllByProductAttribute($id, false, 1); if ($res == -1) { print json_encode(array( diff --git a/htdocs/variants/class/ProductAttributeValue.class.php b/htdocs/variants/class/ProductAttributeValue.class.php index d6da6bcd95a..734e82b7c27 100644 --- a/htdocs/variants/class/ProductAttributeValue.class.php +++ b/htdocs/variants/class/ProductAttributeValue.class.php @@ -259,11 +259,12 @@ class ProductAttributeValue extends CommonObjectLine /** * Returns all product attribute values of a product attribute * - * @param int $prodattr_id Product attribute id - * @param bool $only_used Fetch only used attribute values - * @return ProductAttributeValue[] + * @param int $prodattr_id Product attribute id + * @param bool $only_used Fetch only used attribute values + * @param int $returnonlydata 0: return object, 1: return only data + * @return ProductAttributeValue[] Array of object */ - public function fetchAllByProductAttribute($prodattr_id, $only_used = false) + public function fetchAllByProductAttribute($prodattr_id, $only_used = false, $returnonlydata = 0) { $return = array(); @@ -290,7 +291,12 @@ class ProductAttributeValue extends CommonObjectLine $query = $this->db->query($sql); while ($result = $this->db->fetch_object($query)) { - $tmp = new ProductAttributeValue($this->db); + if (empty($returnonlydata)) { + $tmp = new ProductAttributeValue($this->db); + } else { + $tmp = new stdClass(); + } + $tmp->fk_product_attribute = $result->fk_product_attribute; $tmp->id = $result->rowid; $tmp->ref = $result->ref; diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php index 0f149a4dd6a..64a18cf2a74 100644 --- a/htdocs/variants/combinations.php +++ b/htdocs/variants/combinations.php @@ -496,7 +496,7 @@ if (!empty($id) || !empty($ref)) { } if ($action == 'add') { - $prodattr_all = $prodattr->fetchAll(); + $prodattr_all = $prodattr->fetchAll(1); if (!$selected) { $selected = $prodattr_all[key($prodattr_all)]->id; @@ -507,7 +507,6 @@ if (!empty($id) || !empty($ref)) { foreach ($prodattr_all as $each) { $prodattr_alljson[$each->id] = $each; } - ?> '."\n"; $htmlheadercontentdefault .= ''."\n"; -$htmlheadercontentdefault .= ''."\n"; -$htmlheadercontentdefault .= ''."\n"; -$htmlheadercontentdefault .= ''."\n"; $htmlheadercontentdefault .= ''; + print ''; if ($action != 'file_manager') { - print ''; + print '
    '; print $langs->trans("Website").': '; + print '
    '; + + // Button Add new website + $urltocreatenewwebsite = $_SERVER["PHP_SELF"].'?action=createsite'; + print ''; + print ''; print ''; - $urltocreatenewwebsite = $_SERVER["PHP_SELF"].'?action=createsite'; - if (empty($conf->use_javascript_ajax)) { - print ''; - print ''; - print ''; - } - // List of website - print ''; + print ''; + $out = ''; $out .= ''; + print ''; + + // Switch offline/onine + if (!empty($conf->use_javascript_ajax)) { + print ''; + // Do not use ajax, we need a refresh of full page when we change status of a website + //print '
    '; + //print ajax_object_onoff($object, 'status', 'status', 'Online', 'Offline', array(), 'valignmiddle', 'statuswebsite'); + //print '
    '; + if ($website->status == $website::STATUS_DRAFT) { + $text_off = 'Offline'; + print 'ref).'&websitepage='.((int) $websitepage->id).'">'.img_picto($langs->trans($text_off), 'switch_off').''; + } else { + $text_off = 'Online'; + print 'ref).'&websitepage='.((int) $websitepage->id).'">'.img_picto($langs->trans($text_off), 'switch_on').''; + } + print '
    '; } + // Refresh / Reload web site (for non javascript browers) + if (empty($conf->use_javascript_ajax)) { + print ''; + print ''; + print ''; + } + + + print ''; + if ($websitekey && $websitekey != '-1' && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite')) { - print '   '; - - //print ''; - print ''.dol_escape_htmltag($langs->trans("EditCss")).''; + // Edit website properties + print ''.dol_escape_htmltag($langs->trans("EditCss")).''; + // Import web site $importlabel = $langs->trans("ImportSite"); $exportlabel = $langs->trans("ExportSite"); if (!empty($conf->dol_optimize_smallscreen)) { @@ -2781,17 +2883,23 @@ if (!GETPOST('hide_websitemenu')) { print ''; } - //print ''; + // Export web site print ''; + // Clone web site print ''; // Delete website if ($website->status == $website::STATUS_VALIDATED) { - print ''; + $disabled = ' disabled="disabled"'; + $title = $langs->trans("WebsiteMustBeDisabled", $langs->transnoentitiesnoconv($website->LibStatut(0, 0))); + $url = '#'; } else { - print ''; + $disabled = ''; + $title = $langs->trans("Delete"); + $url = $_SERVER["PHP_SELF"].'?action=deletesite&token='.newToken().'&website='.urlencode($website->ref); } + print ''.img_picto('', 'delete', 'class=""').''.$langs->trans("Delete").''; // Regenerate all pages print 'ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("RegenerateWebsiteContent")).'">'; @@ -2799,7 +2907,8 @@ if (!GETPOST('hide_websitemenu')) { // Generate site map print 'ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("GenerateSitemaps")).'">'; - print 'ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; + // Find / replace tool + print 'ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; } print ''; @@ -2879,7 +2988,7 @@ if (!GETPOST('hide_websitemenu')) { print '
    '; } - if (in_array($action, array('editcss', 'editmenu', 'file_manager', 'replacesite', 'replacesiteconfirm'))) { + if (in_array($action, array('editcss', 'editmenu', 'file_manager', 'replacesiteconfirm')) || in_array($mode, array('replacesite'))) { if ($action == 'editcss') { print ''; } @@ -2900,59 +3009,69 @@ if (!GETPOST('hide_websitemenu')) { // Toolbar for pages // - if ($websitekey && $websitekey != '-1' && !in_array($action, array('editcss', 'editmenu', 'importsite', 'file_manager', 'replacesite', 'replacesiteconfirm')) && !$file_manager) { + if ($websitekey && $websitekey != '-1' && (!in_array($action, array('editcss', 'editmenu', 'importsite', 'file_manager', 'replacesiteconfirm'))) && (!in_array($mode, array('replacesite'))) && !$file_manager) { print '
    '; // Close current websitebar to open a new one - print ''; + print ''; print '
    '; - print ''; + print '
    '; print $langs->trans("PageContainer").': '; + print '
    '; + + // Button Add new web page + print ''; + print 'ref).'" class=""'.$disabled.' title="'.dol_escape_htmltag($langs->trans("AddPage")).'">'; print ''; - print ''; - print 'ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("AddPage")).'">'; - print ''; - //print ''; + $out = ''; - if ($action != 'addcontainer') { - $out = ''; + $s = $formwebsite->selectContainer($website, 'pageid', $pageid, 0, $action, 'minwidth100 maxwidth200onsmartphone'); - $s = $formwebsite->selectContainer($website, 'pageid', $pageid, 0, $action, 'maxwidth200onsmartphone'); + $out .= ''; + $out .= $s; + $out .= ''; - if ($formwebsite->num > 0) { - $out .= ''; - $out .= $s; - $out .= ''; + $urltocreatenewpage = $_SERVER["PHP_SELF"].'?action=createcontainer&token='.newToken().'&website='.urlencode($website->ref); - $urltocreatenewpage = $_SERVER["PHP_SELF"].'?action=createcontainer&token='.newToken().'&website='.urlencode($website->ref); - - if (!empty($conf->use_javascript_ajax)) { - $out .= ''; - } - } - - print $out; - } else { - print $langs->trans("New"); + if (!empty($conf->use_javascript_ajax)) { + $out .= ''; } + print $out; + + if (!empty($conf->use_javascript_ajax)) { + print ''; + //print '
    '; + if ($object->status == $object::STATUS_DRAFT) { // website is off, we do not allow to change status of page + $text_off = 'SetWebsiteOnlineBefore'; + if ($websitepage->status == $websitepage::STATUS_DRAFT) { // page is off + print ''.img_picto($langs->trans($text_off), 'switch_off').''; + } else { + print ''.img_picto($langs->trans($text_off), 'switch_on').''; + } + } else { + print ajax_object_onoff($websitepage, 'status', 'status', 'Online', 'Offline', array(), 'valignmiddle'.(empty($websitepage->id) ? ' opacitymedium disabled' : ''), 'statuswebsitepage'); + } + //print '
    '; + print '
    '; + } print ''; - print ''; + print ''; // Print nav arrows $pagepreviousid = 0; @@ -2981,23 +3100,18 @@ if (!GETPOST('hide_websitemenu')) { } if ($pagepreviousid) { - print ''.img_previous($langs->trans("PreviousContainer")).''; + print ''.img_previous($langs->trans("PreviousContainer")).''; } else { print ''.img_previous($langs->trans("PreviousContainer")).''; } if ($pagenextid) { - print ''.img_next($langs->trans("NextContainer")).''; + print ''.img_next($langs->trans("NextContainer")).''; } else { print ''.img_next($langs->trans("NextContainer")).''; } print ''; - $websitepage = new WebSitePage($db); - if ($pageid > 0 && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')) { - $websitepage->fetch($pageid); - } - if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite') { $disabled = ''; if (empty($user->rights->website->write)) { @@ -3075,15 +3189,15 @@ if (!GETPOST('hide_websitemenu')) { print ''; - print '   '; - - //print ''; + // Edit web page properties print ''.dol_escape_htmltag($langs->trans("EditPageMeta")).''; - //print ''; + // Edit HTML content print ''.dol_escape_htmltag($langs->trans($conf->dol_optimize_smallscreen ? "HTML" : "EditHTMLSource")).''; print ''; + + // Switch include dynamic content / edit inline print ''."\n"; print '
    '; @@ -3176,7 +3290,19 @@ if (!GETPOST('hide_websitemenu')) { print 'ref).'&pageid='.((int) $pageid).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; } print ''; - print ''; + + // Delete + //print ''; + if ($websitepage->status == $websitepage::STATUS_DRAFT || !$atleastonepage) { + $disabled = ' disabled="disabled"'; + $title = $langs->trans("WebpageMustBeDisabled", $langs->transnoentitiesnoconv($websitepage->LibStatut(0, 0))); + $url = '#'; + } else { + $disabled = ''; + $title = ''; + $url = $_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&website='.urlencode($website->ref); + } + print ''.img_picto('', 'delete', 'class=""').''.$langs->trans("Delete").''; } } @@ -3220,7 +3346,7 @@ if (!GETPOST('hide_websitemenu')) { // TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext } - if (!in_array($action, array('editcss', 'editmenu', 'file_manager', 'replacesite', 'replacesiteconfirm', 'createsite', 'createcontainer', 'createfromclone', 'createpagefromclone', 'deletesite'))) { + if (!in_array($mode, array('replacesite')) && !in_array($action, array('editcss', 'editmenu', 'file_manager', 'replacesiteconfirm', 'createsite', 'createcontainer', 'createfromclone', 'createpagefromclone', 'deletesite'))) { if ($action == 'editsource' || $action == 'editmeta') { print ''; } @@ -3432,13 +3558,16 @@ if ($action == 'editcss') { print ''; // Status of web site - print ''."\n"; - print ''; - print $langs->trans('Status'); - print ''; - print ajax_object_onoff($object, 'status', 'status', 'Enabled', 'Disabled'); - //print dol_print_date($pagedatecreation, 'dayhour'); - print ''; + if ($action != 'createcontainer') { + if (empty($conf->use_javascript_ajax)) { + print ''."\n"; + print ''; + print $langs->trans('Status'); + print ''; + print $form->selectyesno('status', $object->status); + print ''; + } + } // Main language print ''; @@ -3817,7 +3946,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') { // Edit properties $pageusermodifid = $objectpage->fk_user_modif; $pageauthoralias = $objectpage->author_alias; $pagestatus = $objectpage->status; - } else { + } else { // $action = 'createcontainer' $type_container = 'page'; $pageurl = ''; $pagealiasalt = ''; @@ -3864,13 +3993,14 @@ if ($action == 'editmeta' || $action == 'createcontainer') { // Edit properties } if ($action != 'createcontainer') { - print ''."\n"; - print ''; - print $langs->trans('Status'); - print ''; - print ajax_object_onoff($objectpage, 'status', 'status', 'Enabled', 'Disabled'); - //print dol_print_date($pagedatecreation, 'dayhour'); - print ''; + if (empty($conf->use_javascript_ajax)) { + print ''."\n"; + print ''; + print $langs->trans('Status'); + print ''; + print $form->selectyesno('status', $objectpage->status); + print ''; + } } // Type of container @@ -3881,6 +4011,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') { // Edit properties $formwebsite->selectTypeOfContainer('WEBSITE_TYPE_CONTAINER', (GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha') ? GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha') : $type_container), 0, '', 1); print ''; + // Example/templates of page if ($action == 'createcontainer') { print ''; print $langs->trans('WEBSITE_PAGE_EXAMPLE'); @@ -4115,6 +4246,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') { // Edit properties print ''; print ''; + if ($action == 'createcontainer') { print '
    '; @@ -4143,7 +4275,10 @@ if ($action == 'editmeta' || $action == 'createcontainer') { // Edit properties $arraygrabimagesinto = array('root'=>$langs->trans("WebsiteRootOfImages"), 'subpage'=>$langs->trans("SubdirOfPage")); print $form->selectarray('grabimagesinto', $arraygrabimagesinto, GETPOSTISSET('grabimagesinto') ? GETPOST('grabimagesinto') : 'root', 0, 0, 0, '', 0, 0, 0, '', '', 1); print '
    '; - print ''; + + print ''; + print ''; + print ''; print ''; } @@ -4283,10 +4418,11 @@ print "
    \n"; print "\n"; -if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction == 'replace') { +if ($mode == 'replacesite' || $massaction == 'replace') { print '
    '; print ''; print ''; + print ''; print ''; @@ -4364,7 +4500,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction = print '
    '; - if ($action == 'replacesiteconfirm') { + if ($mode == 'replacesite') { print ''."\n"; print '
    '; @@ -4376,18 +4512,21 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction = $param = ''; $nbtotalofrecords = count($listofpages['list']); $num = $limit; - $permissiontodelete = $user->rights->website->delete; + $permissiontodelete = $user->hasRight('website', 'delete'); // List of mass actions available $arrayofmassactions = array(); - if ($user->rights->website->writephp && $searchkey) { - $arrayofmassactions['replace'] = $langs->trans("Replace"); + if ($user->hasRight('website', 'writephp') && $searchkey) { + $arrayofmassactions['replace'] = img_picto('', 'replacement', 'class="pictofixedwidth"').$langs->trans("Replace"); } - if ($user->rights->website->write) { - $arrayofmassactions['setcategory'] = $langs->trans("ClassifyInCategory"); + if ($user->hasRight('website', 'write')) { + $arrayofmassactions['setcategory'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("ClassifyInCategory"); + } + if ($user->hasRight('website', 'write')) { + $arrayofmassactions['delcategory'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("RemoveCategory"); } if ($permissiontodelete) { - $arrayofmassactions['predelete'] = ''.$langs->trans("Delete"); + $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); @@ -4398,8 +4537,8 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm' || $massaction = $massactionbutton .= $langs->trans("ReplaceString"); $massactionbutton .= ' '; $massactionbutton .= '
    '; - $massactionbutton .= ''."\n"; } diff --git a/scripts/emailings/mailing-send.php b/scripts/emailings/mailing-send.php index f427e42d8cb..78e4488ec46 100755 --- a/scripts/emailings/mailing-send.php +++ b/scripts/emailings/mailing-send.php @@ -307,7 +307,8 @@ if ($resql) { } // Fabrication du mail $trackid = 'emailing-'.$obj->fk_mailing.'-'.$obj->rowid; - $mail = new CMailFile($newsubject, $sendto, $from, $newmessage, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $errorsto, $arr_css, $trackid, $moreinheader, 'emailing'); + $upload_dir_tmp = $upload_dir; + $mail = new CMailFile($newsubject, $sendto, $from, $newmessage, $arr_file, $arr_mime, $arr_name, '', '', 0, $msgishtml, $errorsto, $arr_css, $trackid, $moreinheader, 'emailing', '', $upload_dir_tmp); if ($mail->error) { $res = 0; diff --git a/test/phpunit/CodingPhpTest.php b/test/phpunit/CodingPhpTest.php index 6af80a304ae..e0f36279437 100644 --- a/test/phpunit/CodingPhpTest.php +++ b/test/phpunit/CodingPhpTest.php @@ -178,6 +178,9 @@ class CodingPhpTest extends PHPUnit\Framework\TestCase if (preg_match('/\/htdocs\/includes\//', $file['fullname'])) { continue; } + if (preg_match('/\/htdocs\/install\/doctemplates\/websites\//', $file['fullname'])) { + continue; + } if (preg_match('/\/htdocs\/custom\//', $file['fullname'])) { continue; } diff --git a/test/phpunit/CodingSqlTest.php b/test/phpunit/CodingSqlTest.php index b04f6ed4737..00c7a5aebae 100644 --- a/test/phpunit/CodingSqlTest.php +++ b/test/phpunit/CodingSqlTest.php @@ -193,10 +193,10 @@ class CodingSqlTest extends PHPUnit\Framework\TestCase $result=strpos($filecontent, '"'); if ($result) { - $result=(! strpos($filecontent, '["') && ! strpos($filecontent, '{"')); + $result=(! strpos($filecontent, '["') && ! strpos($filecontent, '{"') && ! strpos($filecontent, '("')); } //print __METHOD__." Result for checking we don't have double quote = ".$result."\n"; - $this->assertTrue($result===false, 'Found double quote that is not [" neither {" (used for json content) into '.$file.'. Bad.'); + $this->assertTrue($result===false, 'Found double quote that is not [" neither {" (used for json content) neither (" (used for content with string like isModEnabled("")) into '.$file.'. Bad.'); $result=strpos($filecontent, 'int('); //print __METHOD__." Result for checking we don't have 'int(' instead of 'integer' = ".$result."\n"; diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php index 9e7fc91fc7a..6f50e5b3085 100644 --- a/test/phpunit/DateLibTest.php +++ b/test/phpunit/DateLibTest.php @@ -362,6 +362,12 @@ class DateLibTest extends PHPUnit\Framework\TestCase $langs=$this->savlangs; $db=$this->savdb; + // Check %Y-%m-%d %H:%M:%S format + $result=dol_print_date('1970-01-01', '%Y-%m-%d %H:%M:%S', true); // A case for compatibility check + print __METHOD__." result=".$result."\n"; + $this->assertEquals('1970-01-01 00:00:00', $result); + + // Check %Y-%m-%d %H:%M:%S format $result=dol_print_date(0, '%Y-%m-%d %H:%M:%S', true); print __METHOD__." result=".$result."\n";