Merge branch 'develop' into 6.0-vat2
This commit is contained in:
commit
6837312041
24
ChangeLog
24
ChangeLog
@ -234,7 +234,29 @@ Dolibarr better:
|
|||||||
- Method commande->set_availability(user, availability_id) removed from commande class, use method commande->availability(availability_id, notrigger).
|
- Method commande->set_availability(user, availability_id) removed from commande class, use method commande->availability(availability_id, notrigger).
|
||||||
|
|
||||||
Dolibarr 5.0 was frozen before PHP 7.1 was released. Unit tests are successful on PHP 7.1 but we don't have enough
|
Dolibarr 5.0 was frozen before PHP 7.1 was released. Unit tests are successful on PHP 7.1 but we don't have enough
|
||||||
feedback to confirm all application is compatible. Current officiel supported PHP versions are PHP 5.3 to 7.0.
|
feedback to confirm whole application is compatible. Current officiel supported PHP versions are PHP 5.3 to 7.0.
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 4.0.6 to 4.0.5 *****
|
||||||
|
FIX: #6613 Default subject for Supplier proposal emails is filled with a non-existing key
|
||||||
|
FIX: #6623 User card shows "Return to list" link even if the user has no rights to list users
|
||||||
|
FIX: #6636 Complete fix
|
||||||
|
FIX: #6669 User with no permission to edit customer invoices can see a edit button in project entry
|
||||||
|
FIX: #6671 Cannot remove thirdparty type with "#" in its name
|
||||||
|
FIX: #6673 Missing "nature" table header in thirdparty list
|
||||||
|
FIX: #6675 Restricted user with no agenda permissions can see a button to create appointment in thirdparty contact list
|
||||||
|
FIX: #6677 Expired contracts dashboard box does not show the name of the thirdparty
|
||||||
|
FIX: #6679 User with restricted supplier invoice permissions can edit project, payment conditions, payment mode
|
||||||
|
FIX: #6680 User with restricted supplier invoice permissions sees "reopen" button even if he has no permission to do it
|
||||||
|
FIX: #6813
|
||||||
|
FIX: Correction with author and validator user on orders
|
||||||
|
FIX: doactions hook missing in invoice model page
|
||||||
|
FIX: dont get empty "Incoterms : - " string if no incoterm
|
||||||
|
FIX: dont lose supplier ref if no supplier price in database
|
||||||
|
FIX: forgotten parameter for right multicompany use
|
||||||
|
FIX: global $dateSelector isn't the good one, then date selector on objectline_create tpl was hidden
|
||||||
|
FIX: limit+1 dosn't show Total line
|
||||||
|
FIX: supplier order line were always created with rang = 0
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 4.0.5 to 4.0.4 *****
|
***** ChangeLog for 4.0.5 to 4.0.4 *****
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
use Cwd;
|
use Cwd;
|
||||||
|
use Term::ANSIColor;
|
||||||
|
|
||||||
# Change this to defined target for option 98 and 99
|
# Change this to defined target for option 98 and 99
|
||||||
$PROJECT="dolibarr";
|
$PROJECT="dolibarr";
|
||||||
@ -313,20 +313,6 @@ foreach my $target (sort keys %CHOOSEDTARGET) {
|
|||||||
|
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|
||||||
# Build xml check file
|
|
||||||
#-----------------------
|
|
||||||
if ($CHOOSEDTARGET{'-CHKSUM'})
|
|
||||||
{
|
|
||||||
print 'Create xml check file with md5 checksum with command php '.$SOURCE.'/build/generate_filecheck_xml.php release='.$MAJOR.'.'.$MINOR.'.'.$BUILD."\n";
|
|
||||||
$ret=`php $SOURCE/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD`;
|
|
||||||
print $ret."\n";
|
|
||||||
# Copy to final dir
|
|
||||||
$NEWDESTI=$DESTI;
|
|
||||||
print "Copy \"$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml\" to $NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml\n";
|
|
||||||
use File::Copy qw(copy);
|
|
||||||
copy "$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml", "$NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#print join(',',sort keys %CHOOSEDTARGET)."\n";
|
#print join(',',sort keys %CHOOSEDTARGET)."\n";
|
||||||
|
|
||||||
@ -335,7 +321,10 @@ if ($CHOOSEDTARGET{'-CHKSUM'})
|
|||||||
$nboftargetok=0;
|
$nboftargetok=0;
|
||||||
$nboftargetneedbuildroot=0;
|
$nboftargetneedbuildroot=0;
|
||||||
$nbofpublishneedtag=0;
|
$nbofpublishneedtag=0;
|
||||||
|
$nbofpublishneedchangelog=0;
|
||||||
|
|
||||||
foreach my $target (sort keys %CHOOSEDTARGET) {
|
foreach my $target (sort keys %CHOOSEDTARGET) {
|
||||||
|
if ($target eq '-CHKSUM') { $nbofpublishneedchangelog++; }
|
||||||
if ($CHOOSEDTARGET{$target} < 0) { next; }
|
if ($CHOOSEDTARGET{$target} < 0) { next; }
|
||||||
if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP' && $target ne '-CHKSUM')
|
if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP' && $target ne '-CHKSUM')
|
||||||
{
|
{
|
||||||
@ -345,34 +334,31 @@ foreach my $target (sort keys %CHOOSEDTARGET) {
|
|||||||
}
|
}
|
||||||
foreach my $target (sort keys %CHOOSEDPUBLISH) {
|
foreach my $target (sort keys %CHOOSEDPUBLISH) {
|
||||||
if ($CHOOSEDPUBLISH{$target} < 0) { next; }
|
if ($CHOOSEDPUBLISH{$target} < 0) { next; }
|
||||||
if ($target eq 'ASSO') { $nbofpublishneedtag++; }
|
if ($target eq 'ASSO') { $nbofpublishneedchangelog++; $nbofpublishneedtag++; }
|
||||||
if ($target eq 'SF') { $nbofpublishneedtag++; }
|
if ($target eq 'SF') { $nbofpublishneedchangelog++; $nbofpublishneedtag++; }
|
||||||
$nboftargetok++;
|
$nboftargetok++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($nboftargetok) {
|
if ($nboftargetok) {
|
||||||
|
|
||||||
# Update GIT tag if required
|
# Check Changelog
|
||||||
#---------------------------
|
#----------------
|
||||||
if ($nbofpublishneedtag)
|
if ($nbofpublishneedchangelog)
|
||||||
{
|
{
|
||||||
print "Go to directory $SOURCE\n";
|
|
||||||
$olddir=getcwd();
|
|
||||||
chdir("$SOURCE");
|
|
||||||
|
|
||||||
# Test that the ChangeLog is ok
|
# Test that the ChangeLog is ok
|
||||||
$TMPBUILDTOCHECKCHANGELOG=$BUILD;
|
$TMPBUILDTOCHECKCHANGELOG=$BUILD;
|
||||||
$TMPBUILDTOCHECKCHANGELOG =~ s/\-rc\d*//;
|
$TMPBUILDTOCHECKCHANGELOG =~ s/\-rc\d*//;
|
||||||
$TMPBUILDTOCHECKCHANGELOG =~ s/\-beta\d*//;
|
$TMPBUILDTOCHECKCHANGELOG =~ s/\-beta\d*//;
|
||||||
print "Check if ChangeLog is ok for version $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG\n";
|
print "\nCheck if ChangeLog is ok for version $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG\n";
|
||||||
$ret=`grep "ChangeLog for $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG" "$SOURCE/ChangeLog" 2>&1`;
|
$ret=`grep "ChangeLog for $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG" "$SOURCE/ChangeLog" 2>&1`;
|
||||||
if (! $ret)
|
if (! $ret)
|
||||||
{
|
{
|
||||||
print "Error: The ChangeLogFile was not updated. Run the following command before building package for $MAJOR.$MINOR.$BUILD:\n";
|
print color("yellow"), "Error: The ChangeLogFile was not updated. Run the following command before building package for $MAJOR.$MINOR.$BUILD:\n", color('reset');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print "ChangeLog for $MAJOR.$MINOR\.$BUILD was found into '$SOURCE/ChangeLog. But you can regenerate it with commande:'\n";
|
print "ChangeLog for $MAJOR.$MINOR\.$BUILD was found into '$SOURCE/ChangeLog. But you can regenerate it with command:'\n";
|
||||||
}
|
}
|
||||||
if (! $BUILD || $BUILD eq '0-rc') # For a major version
|
if (! $BUILD || $BUILD eq '0-rc') # For a major version
|
||||||
{
|
{
|
||||||
@ -385,8 +371,38 @@ if ($nboftargetok) {
|
|||||||
print "\n";
|
print "\n";
|
||||||
if (! $ret)
|
if (! $ret)
|
||||||
{
|
{
|
||||||
|
print "\nPress F to force and continue anyway (or other key to stop)... ";
|
||||||
|
my $WAITKEY=<STDIN>;
|
||||||
|
chomp($WAITKEY);
|
||||||
|
if ($WAITKEY ne 'F')
|
||||||
|
{
|
||||||
|
print "Canceled.\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build xml check file
|
||||||
|
#-----------------------
|
||||||
|
if ($CHOOSEDTARGET{'-CHKSUM'})
|
||||||
|
{
|
||||||
|
print 'Create xml check file with md5 checksum with command php '.$SOURCE.'/build/generate_filecheck_xml.php release='.$MAJOR.'.'.$MINOR.'.'.$BUILD."\n";
|
||||||
|
$ret=`php $SOURCE/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD`;
|
||||||
|
print $ret."\n";
|
||||||
|
# Copy to final dir
|
||||||
|
$NEWDESTI=$DESTI;
|
||||||
|
print "Copy \"$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml\" to $NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml\n";
|
||||||
|
use File::Copy qw(copy);
|
||||||
|
copy "$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml", "$NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update GIT tag if required
|
||||||
|
#---------------------------
|
||||||
|
if ($nbofpublishneedtag)
|
||||||
|
{
|
||||||
|
print "Go to directory $SOURCE\n";
|
||||||
|
$olddir=getcwd();
|
||||||
|
chdir("$SOURCE");
|
||||||
|
|
||||||
print 'Run git tag -a -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
|
print 'Run git tag -a -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
|
||||||
$ret=`git tag -a -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD" 2>&1`;
|
$ret=`git tag -a -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD" 2>&1`;
|
||||||
@ -517,6 +533,7 @@ if ($nboftargetok) {
|
|||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimed*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimed*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimod*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimod*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/factory*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/factory*`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/forceproject*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/lead*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/lead*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/management*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/management*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`;
|
||||||
|
|||||||
@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/compta/sociales/class/chargesociales.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/compta/sociales/class/chargesociales.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/don/class/don.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/don/class/paymentdonation.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/don/class/paymentdonation.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php';
|
||||||
@ -222,7 +223,7 @@ if ($result) {
|
|||||||
// Now loop on each link of record in bank.
|
// Now loop on each link of record in bank.
|
||||||
foreach ( $links as $key => $val ) {
|
foreach ( $links as $key => $val ) {
|
||||||
|
|
||||||
if (in_array($links[$key]['type'], array('sc', 'payment_sc', 'payment', 'payment_supplier', 'payment_vat', 'payment_expensereport', 'banktransfert'))) // So we excluded 'company' here
|
if (in_array($links[$key]['type'], array('sc', 'payment_sc', 'payment', 'payment_supplier', 'payment_vat', 'payment_expensereport', 'banktransfert', 'payment_donation'))) // So we excluded 'company' here
|
||||||
{
|
{
|
||||||
// We save tabtype for a future use, to remember what kind of payment it is
|
// We save tabtype for a future use, to remember what kind of payment it is
|
||||||
$tabtype[$obj->rowid] = $links[$key]['type'];
|
$tabtype[$obj->rowid] = $links[$key]['type'];
|
||||||
@ -278,7 +279,8 @@ if ($result) {
|
|||||||
} else if ($links[$key]['type'] == 'payment_donation') {
|
} else if ($links[$key]['type'] == 'payment_donation') {
|
||||||
$paymentdonstatic->id = $links[$key]['url_id'];
|
$paymentdonstatic->id = $links[$key]['url_id'];
|
||||||
$paymentdonstatic->fk_donation = $links[$key]['url_id'];
|
$paymentdonstatic->fk_donation = $links[$key]['url_id'];
|
||||||
$tabpay[$obj->rowid]["lib"] .= ' ' . $langs->trans("PaymentDonation");
|
$tabpay[$obj->rowid]["lib"] .= ' ' . $paymentdonstatic->getNomUrl(2);
|
||||||
|
$tabpay[$obj->rowid]["paymentdonationid"] = $paymentdonstatic->id;
|
||||||
$tabtp[$obj->rowid][$account_pay_donation] += $obj->amount;
|
$tabtp[$obj->rowid][$account_pay_donation] += $obj->amount;
|
||||||
} else if ($links[$key]['type'] == 'payment_vat') {
|
} else if ($links[$key]['type'] == 'payment_vat') {
|
||||||
$paymentvatstatic->id = $links[$key]['url_id'];
|
$paymentvatstatic->id = $links[$key]['url_id'];
|
||||||
@ -419,6 +421,9 @@ if (! $error && $action == 'writebookkeeping') {
|
|||||||
} else if ($tabtype[$key] == 'payment_vat') {
|
} else if ($tabtype[$key] == 'payment_vat') {
|
||||||
$bookkeeping->code_tiers = '';
|
$bookkeeping->code_tiers = '';
|
||||||
$bookkeeping->doc_ref = $langs->trans("PaymentVat") . ' (' . $val["paymentvatid"] . ')'; // Rowid of vat payment
|
$bookkeeping->doc_ref = $langs->trans("PaymentVat") . ' (' . $val["paymentvatid"] . ')'; // Rowid of vat payment
|
||||||
|
} else if ($tabtype[$key] == 'payment_donation') {
|
||||||
|
$bookkeeping->code_tiers = '';
|
||||||
|
$bookkeeping->doc_ref = $langs->trans("Donation") . ' (' . $val["paymentdonationid"] . ')'; // Rowid of donation
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $bookkeeping->create($user);
|
$result = $bookkeeping->create($user);
|
||||||
@ -479,7 +484,6 @@ if (! $error && $action == 'writebookkeeping') {
|
|||||||
$bookkeeping->code_tiers = $tabcompany[$key]['code_compta'];
|
$bookkeeping->code_tiers = $tabcompany[$key]['code_compta'];
|
||||||
$bookkeeping->numero_compte = $k;
|
$bookkeeping->numero_compte = $k;
|
||||||
} else if ($tabtype[$key] == 'payment_supplier') { // If payment is payment of supplier invoice, we get ref of invoice
|
} else if ($tabtype[$key] == 'payment_supplier') { // If payment is payment of supplier invoice, we get ref of invoice
|
||||||
|
|
||||||
$sqlmid = 'SELECT facf.ref_supplier,facf.ref';
|
$sqlmid = 'SELECT facf.ref_supplier,facf.ref';
|
||||||
$sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf ";
|
$sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf ";
|
||||||
$sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid";
|
$sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid";
|
||||||
@ -497,6 +501,10 @@ if (! $error && $action == 'writebookkeeping') {
|
|||||||
$bookkeeping->code_tiers = '';
|
$bookkeeping->code_tiers = '';
|
||||||
$bookkeeping->numero_compte = $k;
|
$bookkeeping->numero_compte = $k;
|
||||||
$bookkeeping->doc_ref = $langs->trans("PaymentVat") . ' (' . $val["paymentvatid"] . ')'; // Rowid of vat
|
$bookkeeping->doc_ref = $langs->trans("PaymentVat") . ' (' . $val["paymentvatid"] . ')'; // Rowid of vat
|
||||||
|
} else if ($tabtype[$key] == 'payment_donation') {
|
||||||
|
$bookkeeping->code_tiers = '';
|
||||||
|
$bookkeeping->numero_compte = $k;
|
||||||
|
$bookkeeping->doc_ref = $langs->trans("Donation") . ' (' . $val["paymentdonationid"] . ')'; // Rowid of donation
|
||||||
} else if ($tabtype[$key] == 'banktransfert') {
|
} else if ($tabtype[$key] == 'banktransfert') {
|
||||||
$bookkeeping->code_tiers = '';
|
$bookkeeping->code_tiers = '';
|
||||||
$bookkeeping->numero_compte = $k;
|
$bookkeeping->numero_compte = $k;
|
||||||
@ -733,6 +741,7 @@ if (empty($action) || $action == 'view') {
|
|||||||
$invoicesupplierstatic = new FactureFournisseur($db);
|
$invoicesupplierstatic = new FactureFournisseur($db);
|
||||||
$expensereportstatic = new ExpenseReport($db);
|
$expensereportstatic = new ExpenseReport($db);
|
||||||
$vatstatic = new Tva($db);
|
$vatstatic = new Tva($db);
|
||||||
|
$donationstatic = new Don($db);
|
||||||
|
|
||||||
llxHeader('', $langs->trans("FinanceJournal"));
|
llxHeader('', $langs->trans("FinanceJournal"));
|
||||||
|
|
||||||
@ -873,6 +882,21 @@ if (empty($action) || $action == 'view') {
|
|||||||
}
|
}
|
||||||
else dol_print_error($db);
|
else dol_print_error($db);
|
||||||
}
|
}
|
||||||
|
elseif ($tabtype[$key] == 'payment_donation')
|
||||||
|
{
|
||||||
|
$sqlmid = 'SELECT payd.fk_donation as id';
|
||||||
|
$sqlmid .= " FROM " . MAIN_DB_PREFIX . "payment_donation as payd";
|
||||||
|
$sqlmid .= " WHERE payd.fk_donation=" . $val["paymentdonationid"];
|
||||||
|
dol_syslog("accountancy/journal/bankjournal.php::sqlmid=" . $sqlmid, LOG_DEBUG);
|
||||||
|
$resultmid = $db->query($sqlmid);
|
||||||
|
if ($resultmid) {
|
||||||
|
$objmid = $db->fetch_object($resultmid);
|
||||||
|
$donationstatic->fetch($objmid->id);
|
||||||
|
$ref=$langs->trans("Donation").' '.$donationstatic->getNomUrl(1);
|
||||||
|
}
|
||||||
|
else dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*$invoicestatic->id = $key;
|
/*$invoicestatic->id = $key;
|
||||||
$invoicestatic->ref = $val["ref"];
|
$invoicestatic->ref = $val["ref"];
|
||||||
@ -893,7 +917,7 @@ if (empty($action) || $action == 'view') {
|
|||||||
else print $accountoshow;
|
else print $accountoshow;
|
||||||
print "</td>";
|
print "</td>";
|
||||||
if ($val['soclib'] == '') {
|
if ($val['soclib'] == '') {
|
||||||
print "<td>" . $bankstatic->label . " - " . $val["ref"] . "</td>";
|
print "<td>" . $bankstatic->label . " - " . $reflabel . "</td>";
|
||||||
} else {
|
} else {
|
||||||
print "<td>" . $bankstatic->label . " - " . $val['soclib'] . "</td>";
|
print "<td>" . $bankstatic->label . " - " . $val['soclib'] . "</td>";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,7 +24,18 @@
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parent class of graph classes
|
* Class to build graphs.
|
||||||
|
* Usage is:
|
||||||
|
* $dolgraph=new DolGraph();
|
||||||
|
* $dolgraph->SetTitle($langs->transnoentities('Tracking_Projects_Pourcent').'<br>'.$langs->transnoentities('Tracking_IndicatorDefGraph').'%');
|
||||||
|
* $dolgraph->SetMaxValue(50);
|
||||||
|
* $dolgraph->SetData($data);
|
||||||
|
* $dolgraph->setShowLegend(1);
|
||||||
|
* $dolgraph->setShowPercent(1);
|
||||||
|
* $dolgraph->SetType(array('pie'));
|
||||||
|
* $dolgraph->setWidth('100%');
|
||||||
|
* $dolgraph->draw('idofgraph');
|
||||||
|
* print $dolgraph->show();
|
||||||
*/
|
*/
|
||||||
class DolGraph
|
class DolGraph
|
||||||
{
|
{
|
||||||
@ -780,9 +791,9 @@ class DolGraph
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a graph using JFlot library. Input when calling this method should be:
|
* Build a graph using JFlot library. Input when calling this method should be:
|
||||||
* $this->data = array(array( 0=>'labelxA', 1=>yA), array('labelxB',yB)); or
|
* $this->data = array(array(0=>'labelxA',1=>yA), array('labelxB',yB));
|
||||||
|
* $this->data = array(array(0=>'labelxA',1=>yA1,...,n=>yAn), array('labelxB',yB1,...yBn)); // or when there is n series to show for each x
|
||||||
* $this->data = array(array('label'=>'labelxA','data'=>yA), array('labelxB',yB)); // TODO Syntax not supported. Removed when dol_print_graph_removed
|
* $this->data = array(array('label'=>'labelxA','data'=>yA), array('labelxB',yB)); // TODO Syntax not supported. Removed when dol_print_graph_removed
|
||||||
* $this->data = array(array(0=>'labelxA',1=>yA1,...,n=>yAn), array('labelxB',yB1,...yBn)); // when there is n series to show for each x
|
|
||||||
* $this->legend= array("Val1",...,"Valn"); // list of n series name
|
* $this->legend= array("Val1",...,"Valn"); // list of n series name
|
||||||
* $this->type = array('bars',...'lines'); or array('pie')
|
* $this->type = array('bars',...'lines'); or array('pie')
|
||||||
* $this->mode = 'depth' ???
|
* $this->mode = 'depth' ???
|
||||||
@ -798,7 +809,7 @@ class DolGraph
|
|||||||
{
|
{
|
||||||
global $artichow_defaultfont;
|
global $artichow_defaultfont;
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::draw_jflot this->type=".join(',',$this->type));
|
dol_syslog(get_class($this)."::draw_jflot this->type=".join(',',$this->type)." this->MaxValue=".$this->MaxValue);
|
||||||
|
|
||||||
if (empty($this->width) && empty($this->height))
|
if (empty($this->width) && empty($this->height))
|
||||||
{
|
{
|
||||||
@ -808,7 +819,7 @@ class DolGraph
|
|||||||
|
|
||||||
$legends=array();
|
$legends=array();
|
||||||
$nblot=count($this->data[0])-1; // -1 to remove legend
|
$nblot=count($this->data[0])-1; // -1 to remove legend
|
||||||
if ($nblot < 0) dol_print_error('Bad value for property ->data. Must be set by mydolgraph->SetData before callinf mydolgrapgh->draw');
|
if ($nblot < 0) dol_print_error('', 'Bad value for property ->data. Must be set by mydolgraph->SetData before calling mydolgrapgh->draw');
|
||||||
$firstlot=0;
|
$firstlot=0;
|
||||||
// Works with line but not with bars
|
// Works with line but not with bars
|
||||||
//if ($nblot > 2) $firstlot = ($nblot - 2); // We limit nblot to 2 because jflot can't manage more than 2 bars on same x
|
//if ($nblot > 2) $firstlot = ($nblot - 2); // We limit nblot to 2 because jflot can't manage more than 2 bars on same x
|
||||||
|
|||||||
@ -100,7 +100,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get list of entity id to use
|
* Get list of entity id to use.
|
||||||
*
|
*
|
||||||
* @param string $element Current element
|
* @param string $element Current element
|
||||||
* 'societe', 'socpeople', 'actioncomm', 'agenda', 'resource',
|
* 'societe', 'socpeople', 'actioncomm', 'agenda', 'resource',
|
||||||
@ -110,10 +110,10 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port)
|
|||||||
* 'commande', 'commande_fournisseur', 'expedition', 'intervention', 'survey',
|
* 'commande', 'commande_fournisseur', 'expedition', 'intervention', 'survey',
|
||||||
* 'contract', 'tax', 'expensereport', 'holiday', 'multicurrency', 'project',
|
* 'contract', 'tax', 'expensereport', 'holiday', 'multicurrency', 'project',
|
||||||
* 'email_template', 'event',
|
* 'email_template', 'event',
|
||||||
* @param int $shared 0=Return id of entity, 1=Return id entity + shared entities
|
* @param int $shared 1=Return id of current entity + shared entities (default), 0=Return id of current entity only
|
||||||
* @return mixed Entity id(s) to use
|
* @return mixed Entity id(s) to use
|
||||||
*/
|
*/
|
||||||
function getEntity($element=false, $shared=0)
|
function getEntity($element=false, $shared=1)
|
||||||
{
|
{
|
||||||
global $conf, $mc;
|
global $conf, $mc;
|
||||||
|
|
||||||
@ -4704,7 +4704,12 @@ function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8')
|
|||||||
$pattern = "/<[^<>]+>/";
|
$pattern = "/<[^<>]+>/";
|
||||||
$StringHtml = preg_replace('/<br[^>]*>/', "\n", $StringHtml);
|
$StringHtml = preg_replace('/<br[^>]*>/', "\n", $StringHtml);
|
||||||
$temp = dol_html_entity_decode($StringHtml,ENT_COMPAT,$pagecodeto);
|
$temp = dol_html_entity_decode($StringHtml,ENT_COMPAT,$pagecodeto);
|
||||||
$temp = preg_replace($pattern,"",$temp);
|
|
||||||
|
// Exemple of $temp: <a href="/myurl" title="<u>A title</u>">0000-021</a>
|
||||||
|
$temp = preg_replace($pattern,"",$temp); // pass 1
|
||||||
|
// $temp after pass 1: <a href="/myurl" title="A title">0000-021
|
||||||
|
$temp = preg_replace($pattern,"",$temp); // pass 2
|
||||||
|
// $temp after pass 2: 0000-021
|
||||||
|
|
||||||
// Supprime aussi les retours
|
// Supprime aussi les retours
|
||||||
if ($removelinefeed) $temp=str_replace(array("\r\n","\r","\n")," ",$temp);
|
if ($removelinefeed) $temp=str_replace(array("\r\n","\r","\n")," ",$temp);
|
||||||
|
|||||||
@ -570,14 +570,43 @@ if ($action == 'confirm_refuse')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Si Validation de la demande
|
||||||
|
if ($action == 'confirm_draft' && GETPOST('confirm') == 'yes')
|
||||||
|
{
|
||||||
|
$object = new Holiday($db);
|
||||||
|
$object->fetch($id);
|
||||||
|
|
||||||
|
$oldstatus = $object->statut;
|
||||||
|
$object->statut = 1;
|
||||||
|
|
||||||
|
$result = $object->update($user);
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
$error = $langs->trans('ErrorBackToDraft');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
|
||||||
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$db->rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Si Validation de la demande
|
// Si Validation de la demande
|
||||||
if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes')
|
if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes')
|
||||||
{
|
{
|
||||||
$object = new Holiday($db);
|
$object = new Holiday($db);
|
||||||
$object->fetch($id);
|
$object->fetch($id);
|
||||||
|
|
||||||
// Si statut en attente de validation et valideur = utilisateur
|
// Si statut en attente de validation et valideur = valideur ou utilisateur, ou droits de faire pour les autres
|
||||||
if (($object->statut == 2 || $object->statut == 3) && ($user->id == $object->fk_validator || $user->id == $object->fk_user))
|
if (($object->statut == 2 || $object->statut == 3) && ($user->id == $object->fk_validator || $user->id == $object->fk_user || ! empty($user->rights->holiday->write_all)))
|
||||||
{
|
{
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
@ -995,6 +1024,12 @@ else
|
|||||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("TitleCancelCP"),$langs->trans("ConfirmCancelCP"),"confirm_cancel", '', 1, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("TitleCancelCP"),$langs->trans("ConfirmCancelCP"),"confirm_cancel", '', 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Si back to draft
|
||||||
|
if ($action == 'backtodraft')
|
||||||
|
{
|
||||||
|
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("TitleSetToDraft"),$langs->trans("ConfirmSetToDraft"),"confirm_draft", '', 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
$head=holiday_prepare_head($object);
|
$head=holiday_prepare_head($object);
|
||||||
|
|
||||||
|
|
||||||
@ -1214,18 +1249,31 @@ else
|
|||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete" class="butActionDelete">'.$langs->trans("DeleteCP").'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete" class="butActionDelete">'.$langs->trans("DeleteCP").'</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->id == $object->fk_validator && $object->statut == 2)
|
if ($object->statut == 2)
|
||||||
|
{
|
||||||
|
if ($user->id == $object->fk_validator)
|
||||||
{
|
{
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=valid" class="butAction">'.$langs->trans("Approve").'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=valid" class="butAction">'.$langs->trans("Approve").'</a>';
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=refuse" class="butAction">'.$langs->trans("ActionRefuseCP").'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=refuse" class="butAction">'.$langs->trans("ActionRefuseCP").'</a>';
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<a href="#" class="butActionRefused" title="'.$langs->trans("NotTheAssignedApprover").'">'.$langs->trans("Approve").'</a>';
|
||||||
|
print '<a href="#" class="butActionRefused" title="'.$langs->trans("NotTheAssignedApprover").'">'.$langs->trans("ActionRefuseCP").'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (($user->id == $object->fk_validator || $user->id == $object->fk_user) && ($object->statut == 2 || $object->statut == 3)) // Status validated or approved
|
if (($user->id == $object->fk_validator || $user->id == $object->fk_user || ! empty($user->rights->holiday->write_all)) && ($object->statut == 2 || $object->statut == 3)) // Status validated or approved
|
||||||
{
|
{
|
||||||
if (($object->date_debut > dol_now()) || $user->admin) print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=cancel" class="butAction">'.$langs->trans("ActionCancelCP").'</a>';
|
if (($object->date_debut > dol_now()) || $user->admin) print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=cancel" class="butAction">'.$langs->trans("ActionCancelCP").'</a>';
|
||||||
else print '<a href="#" class="butActionRefused" title="'.$langs->trans("HolidayStarted").'">'.$langs->trans("ActionCancelCP").'</a>';
|
else print '<a href="#" class="butActionRefused" title="'.$langs->trans("HolidayStarted").'">'.$langs->trans("ActionCancelCP").'</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($canedit && $object->statut == 4)
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=backtodraft" class="butAction">'.$langs->trans("SetToDraft").'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,7 @@ ALTER TABLE llx_facture_fourn_det ADD INDEX idx_facture_fourn_det_fk_product (fk
|
|||||||
|
|
||||||
ALTER TABLE llx_facture_rec ADD COLUMN fk_user_modif integer;
|
ALTER TABLE llx_facture_rec ADD COLUMN fk_user_modif integer;
|
||||||
ALTER TABLE llx_expedition ADD COLUMN fk_user_modif integer;
|
ALTER TABLE llx_expedition ADD COLUMN fk_user_modif integer;
|
||||||
|
ALTER TABLE llx_projet ADD COLUMN fk_user_modif integer;
|
||||||
|
|
||||||
ALTER TABLE llx_adherent ADD COLUMN model_pdf varchar(255);
|
ALTER TABLE llx_adherent ADD COLUMN model_pdf varchar(255);
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ CancelCP=Canceled
|
|||||||
RefuseCP=Refused
|
RefuseCP=Refused
|
||||||
ValidatorCP=Approbator
|
ValidatorCP=Approbator
|
||||||
ListeCP=List of leaves
|
ListeCP=List of leaves
|
||||||
ReviewedByCP=Will be reviewed by
|
ReviewedByCP=Will be approved by
|
||||||
DescCP=Description
|
DescCP=Description
|
||||||
SendRequestCP=Create leave request
|
SendRequestCP=Create leave request
|
||||||
DelayToRequestCP=Leave requests must be made at least <b>%s day(s)</b> before them.
|
DelayToRequestCP=Leave requests must be made at least <b>%s day(s)</b> before them.
|
||||||
|
|||||||
@ -775,6 +775,8 @@ ClickToShowHelp=Click to show tooltip help
|
|||||||
HR=HR
|
HR=HR
|
||||||
HRAndBank=HR and Bank
|
HRAndBank=HR and Bank
|
||||||
AutomaticallyCalculated=Automatically calculated
|
AutomaticallyCalculated=Automatically calculated
|
||||||
|
TitleSetToDraft=Go back to draft
|
||||||
|
ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
|
||||||
# Week day
|
# Week day
|
||||||
Monday=Monday
|
Monday=Monday
|
||||||
Tuesday=Tuesday
|
Tuesday=Tuesday
|
||||||
|
|||||||
@ -377,6 +377,14 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
|
|||||||
$after=dol_string_nohtmltag($text,1);
|
$after=dol_string_nohtmltag($text,1);
|
||||||
$this->assertEquals("A string Another string",$after,"test5");
|
$this->assertEquals("A string Another string",$after,"test5");
|
||||||
|
|
||||||
|
$text='<a href="/myurl" title="<u>Afficher projet</u>">ABC</a>';
|
||||||
|
$after=dol_string_nohtmltag($text,1);
|
||||||
|
$this->assertEquals("ABC",$after,"test6");
|
||||||
|
|
||||||
|
$text='<a href="/myurl" title="<u>Afficher projet</u>">DEF</a>';
|
||||||
|
$after=dol_string_nohtmltag($text,1);
|
||||||
|
$this->assertEquals("DEF",$after,"test7");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user