Merge branch 'upstream/develop'

This commit is contained in:
aspangaro 2014-02-03 22:08:54 +01:00
commit 4e23a21225
25 changed files with 320 additions and 204 deletions

View File

@ -18,6 +18,7 @@ For users:
public votes public votes
- New: The box "balance of bank accounts" show all opened accounts. - New: The box "balance of bank accounts" show all opened accounts.
- New: Add option MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE. - New: Add option MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE.
- New: Add warning if supplier payment is higher that due amount.
TODO TODO
- New: Predefined product and free product use same form. - New: Predefined product and free product use same form.

View File

@ -10,7 +10,7 @@ dolibarr (3.5.0-3) unstable; urgency=low
[ Laurent Destailleur (eldy) ] [ Laurent Destailleur (eldy) ]
* New upstream release. * New upstream release.
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Mon, 30 Dec 2013 12:00:00 +0100 -- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Fri, 31 Jan 2014 12:00:00 +0100
dolibarr (3.4.2-3) unstable; urgency=low dolibarr (3.4.2-3) unstable; urgency=low
@ -24,7 +24,7 @@ dolibarr (3.4.1-3) unstable; urgency=low
[ Laurent Destailleur (eldy) ] [ Laurent Destailleur (eldy) ]
* Maintenance release. * Maintenance release.
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Mon, 22 Apr 2013 12:00:00 +0100 -- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Mon, 27 Apr 2013 12:00:00 +0100
dolibarr (3.4.0-3) unstable; urgency=low dolibarr (3.4.0-3) unstable; urgency=low

View File

@ -1,40 +1,47 @@
Source: dolibarr Source: dolibarr
Maintainer: Laurent Destailleur (eldy) <eldy@users.sourceforge.net>
Uploaders: Laurent Destailleur (eldy) <eldy@users.sourceforge.net>
Standards-Version: 3.9.2
Section: web Section: web
Priority: optional Priority: optional
Maintainer: Laurent Destailleur (eldy) <eldy@users.sourceforge.net>
Uploaders: Laurent Destailleur (eldy) <eldy@users.sourceforge.net>
Standards-Version: 3.9.4
Homepage: http://www.dolibarr.org Homepage: http://www.dolibarr.org
Build-Depends: debhelper (>= 7), po-debconf, dpatch Build-Depends: debhelper (>= 9), po-debconf, dpatch
Comments: This package need at least debian 7 or ubuntu 13.04 or any distribution based on this version Comments: This package need at least debian 7 or ubuntu 13.04 or any distribution based on this version
Package: dolibarr Package: dolibarr
Architecture: all
Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm | php5, Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm | php5,
php5-mysql | php5-mysqli, php5-cli,
php5-cli, php5-curl, php5-gd, php5-ldap, php-pear, php-mail-mime, php5-geoip, # Required PHP extensions
libphp-adodb, php5-mysql | php5-mysqli, php5-curl, php5-gd, php5-ldap, php5-geoip,
libnusoap-php, # Required PHP libraries
libphp-pclzip, php-pear, php-mail-mime,
libfpdi-php, libfpdf-tpl-php, php-fpdf, # libfpdi-php, libfpdf-tpl-php, php-fpdf,
libjs-jquery, libjs-jquery-ui, libjs-flot, ckeditor, # libphp-adodb,
ttf-dejavu-core, # libnusoap-php,
# libphp-pclzip,
# Required javascript libraries
# libjs-jquery, libjs-jquery-ui, libjs-flot, ckeditor,
# Misc dependencies
# fonts-dejavu-core | ttf-dejavu-core,
xdg-utils, xdg-utils,
mysql-server, mysql-server,
${misc:Depends}, ${misc:Depends},
${perl:Depends} ${perl:Depends}
Recommends: apache2 | lighttpd | httpd, mysql-client Recommends: mysql-client, apache2 | lighttpd | httpd
Suggests: www-browser Suggests: www-browser
Architecture: all
Description: Web based software to manage a small company or foundation Description: Web based software to manage a small company or foundation
Dolibarr ERP & CRM is an easy to use open source/free software for small Dolibarr ERP & CRM is an easy to use open source/free software for small
and medium companies, foundations or freelances. It includes different and medium companies, foundations or freelances. It includes different
features for Enterprise Resource Planning (ERP) and Customer Relationship features for Enterprise Resource Planning (ERP) and Customer Relationship
Management (CRM) but also for different other activities. Management (CRM) but also for different other activities.
.
It's a web software you can install as a standalone program or on any web It's a web software you can install as a standalone program or on any web
hosting provider to use it from anywhere with any web browser. hosting provider to use it from anywhere with any web browser.
. .
Dolibarr was designed to be easy to use. Only features you need are Dolibarr was designed to be easy to use. Only the features that you need are
visible, depending on which modules were activated. visible, depending on which modules were activated.
.
Most common used modules are: Most common used modules are:
. .
Customers, Suppliers or Prospects directory, Customers, Suppliers or Prospects directory,

View File

@ -6,7 +6,7 @@ debian/lighttpd/50-dolibarr.conf etc/lighttpd/conf-available/
debian/install.forced.php.install etc/dolibarr/ debian/install.forced.php.install etc/dolibarr/
htdocs usr/share/dolibarr/ htdocs usr/share/dolibarr/
scripts usr/share/dolibarr/ scripts usr/share/dolibarr/
ChangeLog usr/share/doc/dolibarr/ changelog usr/share/doc/dolibarr/
README usr/share/doc/dolibarr/ README usr/share/doc/dolibarr/
doc/install usr/share/doc/dolibarr/ doc/install usr/share/doc/dolibarr/
doc/user usr/share/doc/dolibarr/ doc/user usr/share/doc/dolibarr/

View File

@ -13,6 +13,11 @@ set -e
# <conflicting-package> <version> # <conflicting-package> <version>
# for details, see /usr/share/doc/packaging-manual/ # for details, see /usr/share/doc/packaging-manual/
if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then
# Needs to be run outside of functions to have access to parameters
. /usr/share/apache2/apache2-maintscript-helper
fi
setup_empty_conf() { setup_empty_conf() {
echo Create empty file $config echo Create empty file $config
mkdir -p /etc/dolibarr mkdir -p /etc/dolibarr
@ -37,20 +42,23 @@ enable_install_upgrade_wizard() {
apache_install() { apache_install() {
webserver=$1 webserver=$1
if [ -d /etc/$webserver/conf.d ] && [ ! -e /etc/$webserver/conf.d/dolibarr.conf ]; then if which a2enconf >/dev/null 2>&1 ;then
echo "Add link for Apache config file" # a2enconf exists for ubuntu only
ln -s /etc/$webserver/conf-available/dolibarr.conf /etc/$webserver/conf.d/dolibarr.conf a2enconf dolibarr
else
if [ -d /etc/$webserver/conf.d ] && [ ! -e /etc/$webserver/conf.d/dolibarr.conf ]; then
echo "Add link for Apache config file"
ln -s /etc/$webserver/conf-available/dolibarr.conf /etc/$webserver/conf.d/dolibarr.conf
fi
fi fi
} }
lighttpd_install() { lighttpd_install() {
if [ ! -f /etc/lighttpd/conf-available/50-dolibarr.conf ] ; then if which lighty-enable-mod >/dev/null 2>&1 ; then
if which lighty-enable-mod >/dev/null 2>&1 ; then echo "Enable lighttpd link for dolibarr config file"
echo "Enable lighttpd link for dolibarr config file" lighty-enable-mod dolibarr fastcgi-php
lighty-enable-mod dolibarr fastcgi-php else
else echo "Lighttpd not installed, skipping"
echo "Lighttpd not installed, skipping"
fi
fi fi
} }
@ -79,6 +87,12 @@ case "$1" in
else else
echo This is not a first install echo This is not a first install
fi fi
# Apache 2 setup
if which a2enmod >/dev/null 2>&1 ;then
a2enmod alias
fi
apache_install apache_install
lighttpd_install lighttpd_install

View File

@ -177,18 +177,19 @@ case "$1" in
passopt="--password='"`echo "$dbadmpass" | sed -e "s/'/'"'"'"'"'"'"'/g"`"'" passopt="--password='"`echo "$dbadmpass" | sed -e "s/'/'"'"'"'"'"'"'/g"`"'"
fi fi
mysqlcmd="mysql $hostopt $passopt -u $dbadmin" mysqlcmd="mysql $hostopt $passopt -u $dbadmin"
mysqlcmdnopass="mysql $hostopt -u $dbadmin"
# Now run the drop user # Now run the drop user
if eval $mysqlcmd -f -e "\"DROP USER '$dbuser'@'localhost';\"" ; then if eval $mysqlcmd -f -e "\"DROP USER '$dbuser'@'localhost';\"" ; then
echo postrm Database login $dbuser@localhost removed echo postrm Database login $dbuser@localhost removed
else else
error="Unable to run $mysqlcmd -f -e \"DROP USER '$dbuser'@'localhost';\"" error="Unable to run $mysqlcmdnopass -f -e \"DROP USER '$dbuser'@'localhost';\""
echo postrm $error echo postrm $error
fi fi
if eval $mysqlcmd -f -e "\"DROP USER '$dbuser'@'%';\"" ; then if eval $mysqlcmd -f -e "\"DROP USER '$dbuser'@'%';\"" ; then
echo postrm Database login $dbuser@% removed echo postrm Database login $dbuser@% removed
else else
error="Unable to run $mysqlcmd -f -e \"DROP USER '$dbuser'@'%';\"" error="Unable to run $mysqlcmdnopass -f -e \"DROP USER '$dbuser'@'%';\""
echo postrm $error echo postrm $error
fi fi

View File

@ -27,20 +27,20 @@ $force_install_lockinstall='444';
// Value to overwrite path to use shared libraries/fonts instead of embedded one. // Value to overwrite path to use shared libraries/fonts instead of embedded one.
// If we enable/disable libraries declaration during install, we must also check they are // If we enable/disable libraries declaration during install, we must also check they are
// not removed from package (see in rules file), // - not removed from package (see rm in rules file),
// declared into dependencies (see in control file) // - declared into dependencies (see Depends in control file)
$force_dolibarr_lib_TCPDF_PATH=''; //$force_dolibarr_lib_TCPDF_PATH='';
$force_dolibarr_lib_FPDF_PATH='/usr/share/php/fpdf'; //$force_dolibarr_lib_FPDF_PATH='/usr/share/php/fpdf';
$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; //$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; //$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb';
$force_dolibarr_lib_GEOIP_PATH=''; //$force_dolibarr_lib_GEOIP_PATH='';
$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; //$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip'; //$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip';
$force_dolibarr_lib_PHPEXCEL_PATH=''; //$force_dolibarr_lib_PHPEXCEL_PATH='';
$force_dolibarr_js_CKEDITOR='/javascript/ckeditor'; //$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
$force_dolibarr_js_JQUERY='/javascript/jquery'; //$force_dolibarr_js_JQUERY='/javascript/jquery';
$force_dolibarr_js_JQUERY_UI='/javascript/jquery-ui'; //$force_dolibarr_js_JQUERY_UI='/javascript/jquery-ui';
$force_dolibarr_js_JQUERY_FLOT='/javascript/flot'; //$force_dolibarr_js_JQUERY_FLOT='/javascript/flot';
$force_dolibarr_font_DOL_DEFAULT_TTF_BOLD='/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf'; //$force_dolibarr_font_DOL_DEFAULT_TTF_BOLD='/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf';
?> ?>

View File

@ -90,32 +90,33 @@ clean:
rm -fr build/rpm rm -fr build/rpm
rm -fr build/zip rm -fr build/zip
# clean from all embedded libraries (we use package dependencies instead) # clean from all PHP embedded libraries (we use package dependencies instead)
rm -fr htdocs/includes/adodbtime # rm -fr htdocs/includes/adodbtime
rm -fr htdocs/includes/ckeditor
# rm -fr htdocs/includes/fpdfi # rm -fr htdocs/includes/fpdfi
rm -fr htdocs/includes/fonts # rm -fr htdocs/includes/geoip
rm -fr htdocs/includes/geoip # rm -fr htdocs/includes/nusoap
rm -fr htdocs/includes/nusoap # rm -fr htdocs/includes/odtphp/zip/pclzip
rm -fr htdocs/includes/odtphp/zip/pclzip # clean from all JS-CSS embedded libraries (we use package dependencies instead)
rm -fr htdocs/includes/phpmailer # rm -fr htdocs/includes/ckeditor
rm -fr htdocs/includes/jquery/css # rm -fr htdocs/includes/jquery/js
rm -fr htdocs/includes/jquery/js # rm -fr htdocs/includes/jquery/css
rm -fr htdocs/includes/jquery/plugins/flot # rm -fr htdocs/includes/jquery/plugins/flot
rm -fr htdocs/includes/jquery/plugins/jstree # clean from all embedded fonts (we use package dependencies instead)
rm -fr htdocs/includes/jquery/plugins/lightbox # rm -fr htdocs/includes/fonts
# clean from useless files
rm -fr htdocs/includes/jquery/plugins/multiselect rm -fr htdocs/includes/jquery/plugins/multiselect
rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PDF rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PDF
rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PCLZip rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PCLZip
rm -fr htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-2.33 rm -fr htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-2.33
rm -fr htdocs/includes/tcpdf/fonts/freefont-20100919 rm -fr htdocs/includes/tcpdf/fonts/freefont-20100919
rm -fr htdocs/includes/tcpdf/fonts/utils rm -fr htdocs/includes/tcpdf/fonts/utils
# clean from files to avoid warning of missing dependencies # clean from files to avoid warning of missing dependencies
rm -fr htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.py rm -fr htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.py
# Licence files are included into copyright file. # Licence files are already included into copyright file.
rm -fr htdocs/includes/phpexcel/license.txt rm -f htdocs/includes/jquery/plugins/flot/LICENSE.txt
rm -f htdocs/includes/phpexcel/license.txt
rm -f htdocs/includes/tcpdf/LICENSE.TXT rm -f htdocs/includes/tcpdf/LICENSE.TXT
dh $@ dh $@

View File

@ -46,7 +46,7 @@ $FILENAMETGZ="$PROJECT-$MAJOR.$MINOR.$BUILD";
$FILENAMEZIP="$PROJECT-$MAJOR.$MINOR.$BUILD"; $FILENAMEZIP="$PROJECT-$MAJOR.$MINOR.$BUILD";
$FILENAMEXZ="$PROJECT-$MAJOR.$MINOR.$BUILD"; $FILENAMEXZ="$PROJECT-$MAJOR.$MINOR.$BUILD";
$FILENAMERPM="$PROJECT-$MAJOR.$MINOR.$BUILD-$RPMSUBVERSION"; $FILENAMERPM="$PROJECT-$MAJOR.$MINOR.$BUILD-$RPMSUBVERSION";
$FILENAMEDEB="${PROJECT}_${MAJOR}.${MINOR}.${BUILD}"; $FILENAMEDEB="see later";
$FILENAMEAPS="$PROJECT-$MAJOR.$MINOR.$BUILD.app"; $FILENAMEAPS="$PROJECT-$MAJOR.$MINOR.$BUILD.app";
$FILENAMEEXEDOLIWAMP="DoliWamp-$MAJOR.$MINOR.$BUILD"; $FILENAMEEXEDOLIWAMP="DoliWamp-$MAJOR.$MINOR.$BUILD";
if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat
@ -365,6 +365,8 @@ if ($nboftargetok) {
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.pl`; # Avoid errors into rpmlint $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.pl`; # Avoid errors into rpmlint
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/template`; # Package not valid for most linux distributions (errors reported into compile.js). Package should be embed by modules to avoid problems. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/template`; # Package not valid for most linux distributions (errors reported into compile.js). Package should be embed by modules to avoid problems.
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpmailer`; # Package not valid for most linux distributions (errors reported into file LICENSE). Package should be embed by modules to avoid problems. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpmailer`; # Package not valid for most linux distributions (errors reported into file LICENSE). Package should be embed by modules to avoid problems.
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # Keep this removal in case we embed libraries
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/adapters`; # Keep this removal in case we embed libraries
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`; $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`;
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`;
@ -613,8 +615,8 @@ if ($nboftargetok) {
$newbuild =~ s/(dev|alpha)/1/gi; # dev $newbuild =~ s/(dev|alpha)/1/gi; # dev
$newbuild =~ s/beta/2/gi; # beta $newbuild =~ s/beta/2/gi; # beta
$newbuild =~ s/rc./3/gi; # rc $newbuild =~ s/rc./3/gi; # rc
if ($newbuild !~ /-/) { $newbuild.='-4'; } # finale if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale is same than rc
# now newbuild is 0-1 or 0-4 for example # now newbuild is 0-1 or 0-3 for example
print "Version is $MAJOR.$MINOR.$newbuild\n"; print "Version is $MAJOR.$MINOR.$newbuild\n";
$build = $newbuild; $build = $newbuild;
$build =~ s/-.*$//g; $build =~ s/-.*$//g;
@ -622,6 +624,8 @@ if ($nboftargetok) {
# $build .= '+nmu1'; # $build .= '+nmu1';
# now build is 0+nmu1 for example # now build is 0+nmu1 for example
$FILENAMEDEB="${PROJECT}_${MAJOR}.${MINOR}.${newbuild}";
print "Remove target ${FILENAMEDEB}_all.deb...\n"; print "Remove target ${FILENAMEDEB}_all.deb...\n";
unlink("$NEWDESTI/${FILENAMEDEB}_all.deb"); unlink("$NEWDESTI/${FILENAMEDEB}_all.deb");
print "Remove target ${FILENAMEDEB}.dsc...\n"; print "Remove target ${FILENAMEDEB}.dsc...\n";
@ -676,11 +680,13 @@ if ($nboftargetok) {
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/rpm`; $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/rpm`;
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/zip`; $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/zip`;
# We remove embedded libraries or fonts (this is also inside rules file, target clean) # We remove embedded libraries or fonts (this is also inside rules file, target clean)
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor`; #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor`;
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/fonts`, #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/fonts`,
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/geoip`; #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/geoip`;
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/nusoap`; #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/nusoap`;
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/odtphp/zip/pclzip`; #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/odtphp/zip/pclzip`;
# Rename upstream changelog to match debian rules
$ret=`mv $BUILDROOT/$PROJECT.tmp/ChangeLog $BUILDROOT/$PROJECT.tmp/changelog`;
# Prepare source package (init debian dir) # Prepare source package (init debian dir)
print "Create directory $BUILDROOT/$PROJECT.tmp/debian\n"; print "Create directory $BUILDROOT/$PROJECT.tmp/debian\n";
@ -753,6 +759,8 @@ if ($nboftargetok) {
chdir("$olddir"); chdir("$olddir");
print "You can check package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}_all.deb\"\n";
# Move to final dir # Move to final dir
print "Move *_all.deb to $NEWDESTI\n"; print "Move *_all.deb to $NEWDESTI\n";
$ret=`mv $BUILDROOT/*_all.deb "$NEWDESTI/"`; $ret=`mv $BUILDROOT/*_all.deb "$NEWDESTI/"`;

View File

@ -88,7 +88,7 @@ print '<br>';
// Show info setup module // Show info setup module
print img_picto('','puce').' '.$langs->trans("SetupDescription4",DOL_URL_ROOT.'/admin/modules.php?mainmenu=home'); print img_picto('','puce').' '.$langs->trans("SetupDescription4",DOL_URL_ROOT.'/admin/modules.php?mainmenu=home');
if (count($conf->modules) <= (empty($conf->global->MAIN_MINNB_MODULE)?1:$conf->global->MAIN_MINNB_MODULE)) // If only user module enabled if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)?1:$conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) // If only user module enabled
{ {
$langs->load("errors"); $langs->load("errors");
$warnpicto=img_warning($langs->trans("WarningMandatorySetupNotComplete")); $warnpicto=img_warning($langs->trans("WarningMandatorySetupNotComplete"));
@ -97,6 +97,7 @@ if (count($conf->modules) <= (empty($conf->global->MAIN_MINNB_MODULE)?1:$conf->g
print '<br>'; print '<br>';
print '<br>'; print '<br>';
print '<br>'; print '<br>';
print '<br>';
// Add hook to add information // Add hook to add information
$reshook=$hookmanager->executeHooks('addHomeSetup',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('addHomeSetup',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks

View File

@ -103,7 +103,6 @@ print "</tr>\n";
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width=\"50%\">'.$langs->trans("CashDeskThirdPartyForSell").'</td>'; print '<tr '.$bc[$var].'><td width=\"50%\">'.$langs->trans("CashDeskThirdPartyForSell").'</td>';
print '<td colspan="2">'; print '<td colspan="2">';
//print $form->select_company($conf->global->CASHDESK_ID_THIRDPARTY,'socid','s.client in (1,3)',1,1);
print $form->select_thirdparty($conf->global->CASHDESK_ID_THIRDPARTY,'socid','s.client in (1,3)',0,array(),1); print $form->select_thirdparty($conf->global->CASHDESK_ID_THIRDPARTY,'socid','s.client in (1,3)',0,array(),1);
print '</td></tr>'; print '</td></tr>';
if (! empty($conf->banque->enabled)) if (! empty($conf->banque->enabled))

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be> * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
@ -21,8 +21,8 @@
/** /**
* \file htdocs/compta/paiement.php * \file htdocs/compta/paiement.php
* \ingroup compta * \ingroup facture
* \brief Page to create a payment * \brief Payment page for customers invoices
*/ */
require '../main.inc.php'; require '../main.inc.php';
@ -34,7 +34,7 @@ $langs->load('companies');
$langs->load('bills'); $langs->load('bills');
$langs->load('banks'); $langs->load('banks');
$action = GETPOST('action'); $action = GETPOST('action','alpha');
$confirm = GETPOST('confirm'); $confirm = GETPOST('confirm');
$facid = GETPOST('facid','int'); $facid = GETPOST('facid','int');
@ -66,40 +66,51 @@ if ($facid > 0)
} }
// Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array // Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array
$hookmanager = new HookManager($db);
$hookmanager->initHooks(array('paiementcard')); $hookmanager->initHooks(array('paiementcard'));
$parameters=array('socid'=>$socid); $parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
/* /*
* Action add_paiement et confirm_paiement * Actions
*/ */
if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes')) if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes'))
{ {
$error = 0; $error = 0;
$datepaye = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$paiement_id = 0; $paiement_id = 0;
$totalpaiement = 0; $totalpayment = 0;
$atleastonepaymentnotnull = 0; $atleastonepaymentnotnull = 0;
// Verifie si des paiements sont superieurs au montant facture // Generate payment array and check if there is payment higher than invoice and payment date before invoice date
$tmpinvoice=new Facture($db);
foreach ($_POST as $key => $value) foreach ($_POST as $key => $value)
{ {
if (substr($key,0,7) == 'amount_') if (substr($key,0,7) == 'amount_')
{ {
$cursorfacid = substr($key,7); $cursorfacid = substr($key,7);
$amounts[$cursorfacid] = price2num(trim($_POST[$key])); $amounts[$cursorfacid] = price2num(trim(GETPOST($key)));
$totalpaiement = $totalpaiement + $amounts[$cursorfacid]; $totalpayment = $totalpayment + $amounts[$cursorfacid];
if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++; if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++;
$tmpfacture=new Facture($db); $result=$tmpinvoice->fetch($cursorfacid);
$tmpfacture->fetch($cursorfacid); if ($result <= 0) dol_print_error($db);
$amountsresttopay[$cursorfacid]=price2num($tmpfacture->total_ttc-$tmpfacture->getSommePaiement()); $amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement());
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid]))) if ($amounts[$cursorfacid])
{ {
$addwarning=1; // Check amount
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPay")).' '.$langs->trans("HelpPaymentHigherThanReminderToPay"); if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
$addwarning=1;
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPay")).' '.$langs->trans("HelpPaymentHigherThanReminderToPay");
}
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date))
{
$langs->load("errors");
$error++;
setEventMessage($langs->transnoentities("ErrorPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'errors');
}
} }
$formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]); $formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]);
@ -109,7 +120,7 @@ if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='ye
// Check parameters // Check parameters
if (! GETPOST('paiementcode')) if (! GETPOST('paiementcode'))
{ {
$fiche_erreur_message = '<div class="error">'.$langs->trans('ErrorFieldRequired',$langs->transnoentities('PaymentMode')).'</div>'; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
$error++; $error++;
} }
@ -118,20 +129,20 @@ if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='ye
// If bank module is on, account is required to enter a payment // If bank module is on, account is required to enter a payment
if (GETPOST('accountid') <= 0) if (GETPOST('accountid') <= 0)
{ {
$fiche_erreur_message = '<div class="error">'.$langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')).'</div>'; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++; $error++;
} }
} }
if (empty($totalpaiement) && empty($atleastonepaymentnotnull)) if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{ {
$fiche_erreur_message = '<div class="error">'.$langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')).'</div>'; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
$error++; $error++;
} }
if (empty($datepaye)) if (empty($datepaye))
{ {
$fiche_erreur_message = '<div class="error">'.$langs->trans('ErrorFieldRequired',$langs->transnoentities('Date')).'</div>'; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
$error++; $error++;
} }
} }
@ -155,7 +166,7 @@ if ($action == 'confirm_paiement' && $confirm == 'yes')
{ {
$error=0; $error=0;
$datepaye = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$db->begin(); $db->begin();
@ -174,7 +185,7 @@ if ($action == 'confirm_paiement' && $confirm == 'yes')
// Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement // Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement
if (GETPOST('accountid') <= 0) if (GETPOST('accountid') <= 0)
{ {
$fiche_erreur_message = '<div class="error">'.$langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')).'</div>'; setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++; $error++;
} }
} }
@ -192,7 +203,7 @@ if ($action == 'confirm_paiement' && $confirm == 'yes')
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices')=='on'?1:0)); $paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices')=='on'?1:0));
if ($paiement_id < 0) if ($paiement_id < 0)
{ {
$errmsg=$paiement->error; setEventMessage($paiement->error, 'errors');
$error++; $error++;
} }
} }
@ -204,7 +215,7 @@ if ($action == 'confirm_paiement' && $confirm == 'yes')
$result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),GETPOST('chqemetteur'),GETPOST('chqbank')); $result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),GETPOST('chqemetteur'),GETPOST('chqbank'));
if ($result < 0) if ($result < 0)
{ {
$errmsg=$paiement->error; setEventMessage($paiement->error, 'errors');
$error++; $error++;
} }
} }
@ -259,8 +270,6 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
if ($facture->type == 2) $title.=$langs->trans("EnterPaymentDueToCustomer"); if ($facture->type == 2) $title.=$langs->trans("EnterPaymentDueToCustomer");
print_fiche_titre($title); print_fiche_titre($title);
dol_htmloutput_errors($errmsg);
// Initialize data for confirmation (this is used because data can be change during confirmation) // Initialize data for confirmation (this is used because data can be change during confirmation)
if ($action == 'add_paiement') if ($action == 'add_paiement')
{ {
@ -625,7 +634,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
$db->free($resql); $db->free($resql);
} }
else else
{ {
dol_print_error($db); dol_print_error($db);
} }
@ -649,21 +658,13 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
print '</center>'; print '</center>';
} }
// Message d'erreur
if ($fiche_erreur_message)
{
print $fiche_erreur_message;
}
// Form to confirm payment // Form to confirm payment
if ($action == 'add_paiement') if ($action == 'add_paiement')
{ {
$preselectedchoice=$addwarning?'no':'yes'; $preselectedchoice=$addwarning?'no':'yes';
print '<br>'; print '<br>';
$text=$langs->trans('ConfirmCustomerPayment',$totalpaiement,$langs->trans("Currency".$conf->currency)); $text=$langs->trans('ConfirmCustomerPayment',$totalpayment,$langs->trans("Currency".$conf->currency));
if (GETPOST('closepaidinvoices')) if (GETPOST('closepaidinvoices'))
{ {
$text.='<br>'.$langs->trans("AllCompletelyPayedInvoiceWillBeClosed"); $text.='<br>'.$langs->trans("AllCompletelyPayedInvoiceWillBeClosed");

View File

@ -667,7 +667,7 @@ class Form
/** /**
* Return list of company for customer in Ajax if Ajax activated or go to select_thirparty_list * Return HTML code to select a company.
* *
* @param int $selected Preselected products * @param int $selected Preselected products
* @param string $htmlname Name of HTML seletc field (must be unique in page) * @param string $htmlname Name of HTML seletc field (must be unique in page)
@ -675,12 +675,14 @@ class Form
* @param int $limit Limit on number of returned lines * @param int $limit Limit on number of returned lines
* @param array $ajaxoptions Options for ajax_autocompleter * @param array $ajaxoptions Options for ajax_autocompleter
* @param int $forcecombo Force to use combo box * @param int $forcecombo Force to use combo box
* @return void * @return string Return select box for thirdparty.
*/ */
function select_thirdparty($selected='', $htmlname='productid', $filter='', $limit=20, $ajaxoptions=array(), $forcecombo=0) function select_thirdparty($selected='', $htmlname='productid', $filter='', $limit=20, $ajaxoptions=array(), $forcecombo=0)
{ {
global $langs,$conf; global $langs,$conf;
$out='';
/* TODO Use ajax autocompletion (not finished) /* TODO Use ajax autocompletion (not finished)
if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->COMPANY_USE_SEARCH_TO_SELECT) && ! $forcecombo) if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->COMPANY_USE_SEARCH_TO_SELECT) && ! $forcecombo)
{ {
@ -711,8 +713,10 @@ class Form
} }
else else
{*/ {*/
print $this->select_thirdparty_list($selected,$htmlname,$filter,1,0,$forcecombo,array(),'',0,$limit); $out.=$this->select_thirdparty_list($selected,$htmlname,$filter,1,0,$forcecombo,array(),'',0,$limit);
//} //}
return $out;
} }
/** /**

View File

@ -305,6 +305,7 @@ function ajax_combobox($htmlname, $event=array(), $minLengthToAutocomplete=0)
global $conf; global $conf;
if (! empty($conf->browser->phone)) return ''; // combobox disabled for smartphones (does not works) if (! empty($conf->browser->phone)) return ''; // combobox disabled for smartphones (does not works)
if (! empty($conf->global->MAIN_DISABLE_AJAX_COMBOX)) return '';
/* Some properties for combobox: /* Some properties for combobox:
minLengthToAutocomplete: 2, minLengthToAutocomplete: 2,

View File

@ -132,7 +132,7 @@ function invoice_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{ {
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_cust_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_cust_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");

View File

@ -138,7 +138,7 @@ function order_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{ {
$head[$h][0] = DOL_URL_ROOT.'/admin/orderdet_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/admin/orderdet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");

View File

@ -136,7 +136,7 @@ function propal_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{ {
$head[$h][0] = DOL_URL_ROOT.'/comm/admin/propaldet_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/comm/admin/propaldet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");

View File

@ -155,7 +155,7 @@ if ($id > 0 || ! empty($ref))
// Third party // Third party
print "<tr><td>".$langs->trans("Supplier")."</td>"; print "<tr><td>".$langs->trans("Supplier")."</td>";
print '<td colspan="3">'.$object->client->getNomUrl(1,'compta').'</td></tr>'; print '<td colspan="3">'.$object->thirdparty->getNomUrl(1,'supplier').'</td></tr>';
print "</table>"; print "</table>";
print '</div>'; print '</div>';

View File

@ -120,7 +120,7 @@ if ($object->id > 0)
print "</tr>\n"; print "</tr>\n";
// Thirdparty // Thirdparty
print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="3">'.$object->thirdparty->getNomUrl(1).'</td></tr>'; print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="3">'.$object->thirdparty->getNomUrl(1,'supplier').'</td></tr>';
// Type // Type
print '<tr><td>'.$langs->trans('Type').'</td><td colspan="4">'; print '<tr><td>'.$langs->trans('Type').'</td><td colspan="4">';

View File

@ -1511,7 +1511,7 @@ else
print '</td></tr>'; print '</td></tr>';
// Third party // Third party
print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="4">'.$societe->getNomUrl(1); print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="4">'.$societe->getNomUrl(1,'supplier');
print ' &nbsp; (<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->socid.'">'.$langs->trans('OtherBills').'</a>)</td>'; print ' &nbsp; (<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->socid.'">'.$langs->trans('OtherBills').'</a>)</td>';
print '</tr>'; print '</tr>';

View File

@ -93,7 +93,7 @@ if ($object->id > 0)
print "</tr>\n"; print "</tr>\n";
// Company // Company
print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="3">'.$object->thirdparty->getNomUrl(1).'</td></tr>'; print '<tr><td>'.$langs->trans('Supplier').'</td><td colspan="3">'.$object->thirdparty->getNomUrl(1,'supplier').'</td></tr>';
// Type // Type
print '<tr><td>'.$langs->trans('Type').'</td><td colspan="4">'; print '<tr><td>'.$langs->trans('Type').'</td><td colspan="4">';

View File

@ -1,7 +1,7 @@
<?php <?php
/* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Christophe Combelles <ccomb@free.fr> * Copyright (C) 2004 Christophe Combelles <ccomb@free.fr>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
@ -35,8 +35,10 @@ $langs->load('companies');
$langs->load('bills'); $langs->load('bills');
$langs->load('banks'); $langs->load('banks');
$action = GETPOST('action','alpha');
$confirm = GETPOST('confirm');
$facid=GETPOST('facid','int'); $facid=GETPOST('facid','int');
$action=GETPOST('action','alpha');
$socid=GETPOST('socid','int'); $socid=GETPOST('socid','int');
$sortfield = GETPOST("sortfield",'alpha'); $sortfield = GETPOST("sortfield",'alpha');
@ -62,58 +64,106 @@ if ($user->societe_id > 0)
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('paymentsupplier')); $hookmanager->initHooks(array('paymentsupplier'));
$parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
/* /*
* Actions * Actions
*/ */
if ($action == 'add_paiement') if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes'))
{ {
$error = 0; $error = 0;
$datepaye = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$paiement_id = 0; $paiement_id = 0;
$total = 0; $totalpayment = 0;
$atleastonepaymentnotnull = 0;
// Genere tableau des montants amounts // Generate payment array and check if there is payment higher than invoice and payment date before invoice date
$tmpinvoice=new FactureFournisseur($db);
foreach ($_POST as $key => $value) foreach ($_POST as $key => $value)
{ {
if (substr($key,0,7) == 'amount_') if (substr($key,0,7) == 'amount_')
{ {
$other_facid = substr($key,7); $cursorfacid = substr($key,7);
$amounts[$other_facid] = price2num(GETPOST($key)); $amounts[$cursorfacid] = price2num(trim(GETPOST($key)));
$total = $total + $amounts[$other_facid]; $totalpayment = $totalpayment + $amounts[$cursorfacid];
if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++;
$result=$tmpinvoice->fetch($cursorfacid);
if ($result <= 0) dol_print_error($db);
$amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement());
if ($amounts[$cursorfacid])
{
// Check amount
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
$addwarning=1;
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPaySupplier")).' '.$langs->trans("HelpPaymentHigherThanReminderToPaySupplier");
}
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date))
{
$langs->load("errors");
$error++;
setEventMessage($langs->transnoentities("ErrorPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'errors');
}
}
$formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]);
} }
} }
// Effectue les verifications des parametres // Check parameters
if ($_POST['paiementid'] <= 0) if ($_POST['paiementid'] <= 0)
{ {
setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors'); setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
$error++; $error++;
} }
if (! empty($conf->banque->enabled)) if (! empty($conf->banque->enabled))
{ {
// Si module bank actif, un compte est obligatoire lors de la saisie // If bank module is on, account is required to enter a payment
// d'un paiement if (GETPOST('accountid') <= 0)
if (! $_POST['accountid'])
{ {
setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors'); setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++; $error++;
} }
} }
if ($total == 0) if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{ {
setEventMessage($langs->trans('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors'); setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
$error++; $error++;
} }
if (empty($datepaye)) if (empty($datepaye))
{ {
setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors'); setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
$error++; $error++;
} }
}
/*
* Action add_paiement
*/
if ($action == 'add_paiement')
{
if ($error)
{
$action = 'create';
}
// Le reste propre a cette action s'affiche en bas de page.
}
/*
* Action confirm_paiement
*/
if ($action == 'confirm_paiement' && $confirm == 'yes')
{
$error=0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
if (! $error) if (! $error)
{ {
@ -174,6 +224,7 @@ if ($action == 'add_paiement')
} }
/* /*
* View * View
*/ */
@ -185,7 +236,7 @@ llxHeader();
$form=new Form($db); $form=new Form($db);
if ($action == 'create' || $action == 'add_paiement') if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paiement')
{ {
$object = new FactureFournisseur($db); $object = new FactureFournisseur($db);
$object->fetch($facid); $object->fetch($facid);
@ -212,7 +263,7 @@ if ($action == 'create' || $action == 'add_paiement')
print_fiche_titre($langs->trans('DoPayment')); print_fiche_titre($langs->trans('DoPayment'));
print '<form name="addpaiement" action="paiement.php" method="post">'; print '<form id="payment_form" name="addpaiement" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="add_paiement">'; print '<input type="hidden" name="action" value="add_paiement">';
print '<input type="hidden" name="facid" value="'.$facid.'">'; print '<input type="hidden" name="facid" value="'.$facid.'">';
@ -298,13 +349,16 @@ if ($action == 'create' || $action == 'add_paiement')
$objp = $db->fetch_object($resql); $objp = $db->fetch_object($resql);
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
print '<td><a href="fiche.php?facid='.$objp->facid.'">'.img_object($langs->trans('ShowBill'),'bill').' '.$objp->ref; print '<td>';
print '</a></td>'; $invoicesupplierstatic->ref=$objp->ref;
$invoicesupplierstatic->id=$objp->facid;
print $invoicesupplierstatic->getNomUrl(1);
print '</td>';
print '<td>'.$objp->ref_supplier.'</td>'; print '<td>'.$objp->ref_supplier.'</td>';
if ($objp->df > 0 ) if ($objp->df > 0 )
{ {
print '<td align="center">'; print '<td align="center">';
print dol_print_date($db->jdate($objp->df)).'</td>'; print dol_print_date($db->jdate($objp->df), 'day').'</td>';
} }
else else
{ {
@ -343,10 +397,27 @@ if ($action == 'create' || $action == 'add_paiement')
} }
} }
// print '<tr><td colspan="3" align="center">'; // Bouton Enregistrer
print '<center><br><input type="checkbox" checked="checked" name="closepaidinvoices"> '.$langs->trans("ClosePaidInvoicesAutomatically"); if ($action != 'add_paiement')
print '<br><input type="submit" class="button" value="'.$langs->trans('Save').'"></center>'; {
// print '</td></tr>'; print '<center><br><input type="checkbox" checked="checked" name="closepaidinvoices"> '.$langs->trans("ClosePaidInvoicesAutomatically");
print '<br><input type="submit" class="button" value="'.$langs->trans('Save').'"></center>';
}
// Form to confirm payment
if ($action == 'add_paiement')
{
$preselectedchoice=$addwarning?'no':'yes';
print '<br>';
$text=$langs->trans('ConfirmSupplierPayment',$totalpayment,$langs->trans("Currency".$conf->currency));
if (GETPOST('closepaidinvoices'))
{
$text.='<br>'.$langs->trans("AllCompletelyPayedInvoiceWillBeClosed");
print '<input type="hidden" name="closepaidinvoices" value="'.GETPOST('closepaidinvoices').'">';
}
$form->form_confirm($_SERVER['PHP_SELF'].'?facid='.$facture->id.'&socid='.$facture->socid.'&type='.$facture->type,$langs->trans('PayedSuppliersPayments'),$text,'confirm_paiement',$formquestion,$preselectedchoice);
}
print '</form>'; print '</form>';
} }

View File

@ -64,6 +64,7 @@ ConfirmConvertToReduc=Do you want to convert this credit note or deposit into an
SupplierPayments=Suppliers payments SupplierPayments=Suppliers payments
ReceivedPayments=Received payments ReceivedPayments=Received payments
ReceivedCustomersPayments=Payments received from customers ReceivedCustomersPayments=Payments received from customers
PayedSuppliersPayments=Payments payed to suppliers
ReceivedCustomersPaymentsToValid=Received customers payments to validate ReceivedCustomersPaymentsToValid=Received customers payments to validate
PaymentsReportsForYear=Payments reports for %s PaymentsReportsForYear=Payments reports for %s
PaymentsReports=Payments reports PaymentsReports=Payments reports
@ -76,7 +77,8 @@ PaymentConditionsShort=Payment term
PaymentAmount=Payment amount PaymentAmount=Payment amount
ValidatePayment=Validate payment ValidatePayment=Validate payment
PaymentHigherThanReminderToPay=Payment higher than reminder to pay PaymentHigherThanReminderToPay=Payment higher than reminder to pay
HelpPaymentHigherThanReminderToPay= Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm and think about creating a credit note of the excess received for each overpaid invoices. HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm and think about creating a credit note of the excess received for each overpaid invoices.
HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm.
ClassifyPaid=Classify 'Paid' ClassifyPaid=Classify 'Paid'
ClassifyPaidPartially=Classify 'Paid partially' ClassifyPaidPartially=Classify 'Paid partially'
ClassifyCanceled=Classify 'Abandoned' ClassifyCanceled=Classify 'Abandoned'
@ -166,6 +168,7 @@ ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all other does no
ConfirmClassifyAbandonReasonOther=Other ConfirmClassifyAbandonReasonOther=Other
ConfirmClassifyAbandonReasonOtherDesc=This choice will be used in all other cases. For example because you plan to create a replacing invoice. ConfirmClassifyAbandonReasonOtherDesc=This choice will be used in all other cases. For example because you plan to create a replacing invoice.
ConfirmCustomerPayment=Do you confirm this payment input for <b>%s</b> %s ? ConfirmCustomerPayment=Do you confirm this payment input for <b>%s</b> %s ?
ConfirmSupplierPayment=Do you confirm this payment input for <b>%s</b> %s ?
ConfirmValidatePayment=Are you sure you want to validate this payment ? No change can be made once payment is validated. ConfirmValidatePayment=Are you sure you want to validate this payment ? No change can be made once payment is validated.
ValidateBill=Validate invoice ValidateBill=Validate invoice
UnvalidateBill=Unvalidate invoice UnvalidateBill=Unvalidate invoice

View File

@ -130,6 +130,7 @@ ErrorPHPNeedModule=Error, your PHP must have module <b>%s</b> installed to use t
ErrorOpenIDSetupNotComplete=You setup Dolibarr config file to allow OpenID authentication, but URL of OpenID service is not defined into constant %s ErrorOpenIDSetupNotComplete=You setup Dolibarr config file to allow OpenID authentication, but URL of OpenID service is not defined into constant %s
ErrorWarehouseMustDiffers=Source and target warehouses must differs ErrorWarehouseMustDiffers=Source and target warehouses must differs
ErrorBadFormat=Bad format! ErrorBadFormat=Bad format!
ErrorPaymentDateLowerThanInvoiceDate=Payment date (%s) cant' be before invoice date (%s) for invoice %s.
# Warnings # Warnings
WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined

View File

@ -68,33 +68,36 @@ if ($action == 'setcodecompta')
} }
} }
if ($action == 'COMPANY_USE_SEARCH_TO_SELECT') if ($action == 'updateoptions')
{ {
$companysearch = GETPOST('activate_COMPANY_USE_SEARCH_TO_SELECT','alpha'); if (GETPOST('COMPANY_USE_SEARCH_TO_SELECT'))
$res = dolibarr_set_const($db, "COMPANY_USE_SEARCH_TO_SELECT", $companysearch,'chaine',0,'',$conf->entity); {
if (! $res > 0) $error++; $companysearch = GETPOST('activate_COMPANY_USE_SEARCH_TO_SELECT','alpha');
if (! $error) $res = dolibarr_set_const($db, "COMPANY_USE_SEARCH_TO_SELECT", $companysearch,'chaine',0,'',$conf->entity);
{ if (! $res > 0) $error++;
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; if (! $error)
} {
else $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
{ }
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; else
{
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
}
} }
}
if ($action == 'CONTACT_USE_SEARCH_TO_SELECT') if (GETPOST('CONTACT_USE_SEARCH_TO_SELECT'))
{
$contactsearch = GETPOST('activate_CONTACT_USE_SEARCH_TO_SELECT','alpha');
$res = dolibarr_set_const($db, "CONTACT_USE_SEARCH_TO_SELECT", $contactsearch,'chaine',0,'',$conf->entity);
if (! $res > 0) $error++;
if (! $error)
{ {
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; $contactsearch = GETPOST('activate_CONTACT_USE_SEARCH_TO_SELECT','alpha');
} $res = dolibarr_set_const($db, "CONTACT_USE_SEARCH_TO_SELECT", $contactsearch,'chaine',0,'',$conf->entity);
else if (! $res > 0) $error++;
{ if (! $error)
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; {
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
}
else
{
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
}
} }
} }
@ -698,6 +701,11 @@ print_titre($langs->trans("Other"));
// Autres options // Autres options
$form=new Form($db); $form=new Form($db);
$var=true; $var=true;
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="updateoptions">';
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print "<td>".$langs->trans("Parameters")."</td>\n"; print "<td>".$langs->trans("Parameters")."</td>\n";
@ -706,9 +714,6 @@ print '<td width="80">&nbsp;</td></tr>'."\n";
// Utilisation formulaire Ajax sur choix societe // Utilisation formulaire Ajax sur choix societe
$var=!$var; $var=!$var;
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="COMPANY_USE_SEARCH_TO_SELECT">';
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
print '<td width="80%">'.$langs->trans("UseSearchToSelectCompany").'</td>'; print '<td width="80%">'.$langs->trans("UseSearchToSelectCompany").'</td>';
if (! $conf->use_javascript_ajax) if (! $conf->use_javascript_ajax)
@ -727,35 +732,13 @@ else
); );
print $form->selectarray("activate_COMPANY_USE_SEARCH_TO_SELECT",$arrval,$conf->global->COMPANY_USE_SEARCH_TO_SELECT); print $form->selectarray("activate_COMPANY_USE_SEARCH_TO_SELECT",$arrval,$conf->global->COMPANY_USE_SEARCH_TO_SELECT);
print '</td><td align="right">'; print '</td><td align="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'; print '<input type="submit" class="button" name="COMPANY_USE_SEARCH_TO_SELECT" value="'.$langs->trans("Modify").'">';
print "</td>"; print "</td>";
} }
print '</tr>'; print '</tr>';
print '</form>';
$var=!$var; $var=!$var;
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
print '<td width="80%">'.$langs->trans("AddRefInList").'</td>';
if (!empty($conf->global->SOCIETE_ADD_REF_IN_LIST))
{
print '<td align="center" colspan="2"><a href="'.$_SERVER['PHP_SELF'].'?action=setaddrefinlist&value=0">';
print img_picto($langs->trans("Activated"),'switch_on');
print '</a></td>';
}
else
{
print '<td align="center" colspan="2"><a href="'.$_SERVER['PHP_SELF'].'?action=setaddrefinlist&value=1">';
print img_picto($langs->trans("Disabled"),'switch_off');
print '</a></td>';
}
print '</tr>';
$var=!$var;
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="CONTACT_USE_SEARCH_TO_SELECT">';
print "<tr ".$bc[$var].">";
print '<td width="80%">'.$langs->trans("UseSearchToSelectContact").'</td>'; print '<td width="80%">'.$langs->trans("UseSearchToSelectContact").'</td>';
if (! $conf->use_javascript_ajax) if (! $conf->use_javascript_ajax)
{ {
@ -773,11 +756,30 @@ else
); );
print $form->selectarray("activate_CONTACT_USE_SEARCH_TO_SELECT",$arrval,$conf->global->CONTACT_USE_SEARCH_TO_SELECT); print $form->selectarray("activate_CONTACT_USE_SEARCH_TO_SELECT",$arrval,$conf->global->CONTACT_USE_SEARCH_TO_SELECT);
print '</td><td align="right">'; print '</td><td align="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'; print '<input type="submit" class="button" name="CONTACT_USE_SEARCH_TO_SELECT" value="'.$langs->trans("Modify").'">';
print "</td>"; print "</td>";
} }
print '</tr>'; print '</tr>';
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="80%">'.$langs->trans("AddRefInList").'</td>';
if (!empty($conf->global->SOCIETE_ADD_REF_IN_LIST))
{
print '<td align="center" colspan="2"><a href="'.$_SERVER['PHP_SELF'].'?action=setaddrefinlist&value=0">';
print img_picto($langs->trans("Activated"),'switch_on');
print '</a></td>';
}
else
{
print '<td align="center" colspan="2"><a href="'.$_SERVER['PHP_SELF'].'?action=setaddrefinlist&value=1">';
print img_picto($langs->trans("Disabled"),'switch_off');
print '</a></td>';
}
print '</tr>';
/* /*
// COMPANY_USE_SEARCH_TO_SELECT // COMPANY_USE_SEARCH_TO_SELECT
$var=!$var; $var=!$var;
@ -800,6 +802,7 @@ print '</tr>';
print '</table>'; print '</table>';
print '</form>';
dol_fiche_end(); dol_fiche_end();