This commit is contained in:
philippe grand 2016-03-12 20:52:09 +01:00
commit adc552d5ff
9 changed files with 162 additions and 26 deletions

103
ChangeLog
View File

@ -171,6 +171,109 @@ This is list of hooks modified:
***** ChangeLog for 3.8.4 compared to 3.8.3 *****
FIX: #3694
FIX: #3798 #2519 Cron jobs would never be executed
FIX: #4155 Search Categories error
FIX: #4239
FIX: #4272 Error when trying to print the page "Linked objects" of a Thirdparty
FIX: #4291 Correctly filter bank card GETPOSTs
FIX: #4291 Correctly filter external calendar GETPOSTs
FIX: #4341
FIX: #4394 Untranslated label in list of expense reports
FIX: #4414 Supplier invoices use FAC_FORCE_DATE_VALIDATION client invoices property
FIX: #4418
FIX: #4425 Missing "VAT" translation in supplier order popup
FIX: #4434 Weird behaviour when enabling multiprices
FIX: #4440 Wrong price is filled by Product::fetch into multiprices arrays
FIX: #4453 SEPA Direct Debit generated XML shows a trailing comma in RmtInf field
FIX: #4528
FIX: #4556 desiredstock and seuil_stock_alerte cleared on modify product card
FIX: #4580
FIX: #4583 Incorrect call of Categories::containing throws a DoliDB error
FIX: #4649 Wrong parameters order
FIX: #4768
FIX: #4785
FIX: Add a test to show bugged module with a bad declaration of dictionaries to avoid to see clean module to be breaked.
FIX: add Croatia into list of country in EEC
FIX: add missing global def for ttc column
FIX: ajax error with multicompany module
FIX: Avoid errors when batch stock is negative
FIX: bad field in select
FIX: bad path
FIX: bad transaction level due to code of situation invoices
FIX: best sql request
FIX: bookmark's user change after update if the user hasn't superadmin right
FIX: call trigger LINEBILL_SUPPLIER_CREATE
FIX: Can not disabled an opened service line in a contract
FIX: can't clone event
FIX: can't send mail to thirdparty contact if no mail defined on thirdparty card
FIX: Check stock of batch on shippment
FIX: code corrupting database
FIX: compatibility with multicompany transversal mode
FIX: compatibility with multicompany transversal mode and more security issue
FIX: Contrat card don't consider user permissions to show active/unactive service button
FIX: CVE CVE-2015-8685
FIX: Deadlock situation. Can't edit anymore contract. FIX: List of automatic events was not visible.
FIX: disable main.inc.php hooks
FIX: do not show warning if account defined
FIX: don't see the sales representative of anothers entities
FIX: duration format
FIX: Correct problem of rights beetween tax and salaries module
FIX: Email templates not compatible with Multicompany
FIX: $fileparams is not defined
FIX: filter by socid if from customer card
FIX: for avoid conflict with "global $m" in memory.lib.php
FIX: for avoid division by 0
FIX: hover css
FIX: If option to hide automatic ECM is on, dont show menu.
FIX: if we dont use SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE the hour is displayed on pdf
FIX: Introduce hidden option to disable feature than hangs when too much data
FIX: ISSUE #4506 : make working the PROPAL_CLONE_ON_CREATE_PAGE hidden constant
FIX: issue when bank module is disabled FIX: missing entity filter for lines of payment
FIX: list of leave request was not showing label correctly.
FIX: MAIN_THIRDPARTY_CREATION_INDIVIDUAL syntax error in name
FIX: markRate can be 100
FIX: minor css error (pixel size must have "px"). Compatibility with old behaviour.
FIX: missing field "label"
FIX: missing signature and uniformize code between card and script
FIX: missing traduction
FIX: missing translation
FIX: missing translation key
FIX: nblignes not calculated after hook and hook can't modify this value. Usefull for modules
FIX: no database structure change is allowed into minor versions
FIX: no transaction in this place
FIX: Noway to validate a leave request for some uer even if they have permission for.
FIX: Option to disable meteo was not set correctly in edit mode
FIX: $outputlangs is not defined (dolibarr 3.7, 3.8, 3.9)
FIX: path to copyrighted files
FIX: php unit to work both with old and new setup
FIX: Purge of temp files was broken
FIX: Relative discount decimals are not saved
FIX: Removed a bugged list. Fixed another one to not count data of previous year.
FIX: retrieve correct pu_ttc (set by printObjectLine function) like in 3.7
FIX: search product in customer product prices doesn't work
FIX: Some filters are lost when paging
FIX: sql injection #4341
FIX: sql injection even when code is on several lines
FIX: sql request and total for time spen for current month
FIX: Sql syntax error in doc_generic_task_odt
FIX: Status filter don't work
FIX: Strict Standards: Only variables should be passed by reference
FIX: The part added with hidden option MAIN_DOC_USE_TIMING was included with a . instead of -. This make os think it is part of extension instead of file name.
FIX: The third dashboard don't consider user permissions
FIX: the view my task must show only task you are assigned to
FIX: to allow phpunit of migration process for 3.4 to 3.5
FIX: to allow phpunit of migration process for 3.5 to 3.6
FIX: userlocaltax
FIX: view of product image when using old path
FIX: size of image uploaded on user.
FIX: We must ue the "small" size of imge to show on card pages.
FIX: When we make a direct assignement on a task to a user, we must check he is also assigned to project (and if not assign it)
FIX: wrong fk_parent_line in credit note with invoiceAvoirWithLines option
FIX: wrong modelpdf var name
FIX: wrong object name
***** ChangeLog for 3.8.3 compared to 3.8.2 ***** ***** ChangeLog for 3.8.3 compared to 3.8.2 *****
FIX: #3805 FIX: #3805
FIX: #3231 [Members] Public subscription page displays GeoIP error FIX: #3231 [Members] Public subscription page displays GeoIP error

View File

@ -1108,6 +1108,14 @@ if ($nboftargetok) {
"$DESTI/standard/$FILENAMETGZ.tgz"=>'Dolibarr ERP-CRM', "$DESTI/standard/$FILENAMETGZ.tgz"=>'Dolibarr ERP-CRM',
"$DESTI/standard/$FILENAMETGZ.zip"=>'Dolibarr ERP-CRM' "$DESTI/standard/$FILENAMETGZ.zip"=>'Dolibarr ERP-CRM'
); );
%filestoscanstableasso=(
"$DESTI/package_rpm_generic/$FILENAMERPM"=>'package_rpm_generic',
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb"=>'package_debian-ubuntu',
"$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe"=>'package_windows',
"$DESTI/standard/$FILENAMETGZ.tgz"=>'standard',
"$DESTI/standard/$FILENAMETGZ.zip"=>'standard'
);
use POSIX qw/strftime/; use POSIX qw/strftime/;
foreach my $file (sort keys %filestoscansf) foreach my $file (sort keys %filestoscansf)
{ {
@ -1150,7 +1158,9 @@ if ($nboftargetok) {
if ($target eq 'SF') { if ($target eq 'SF') {
$destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD; $destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD;
print "Publish file ".$file." to $NEWPUBLISH/".$filestoscan{$file}."/".$MAJOR.'.'.$MINOR.'.'.$BUILD."\n"; }
elsif ($target eq 'ASSO' && $NEWPUBLISH =~ /stable/) {
$destFolder="$NEWPUBLISH/$filestoscanstableasso{$file}";
} }
else else
{ {
@ -1159,8 +1169,8 @@ if ($nboftargetok) {
$filenameonly=$file; $filenameonly=$file;
$filenameonly =~ s/.*\/[^\/]+\/([^\/])+$/$1/; $filenameonly =~ s/.*\/[^\/]+\/([^\/])+$/$1/;
$destFolder="$NEWPUBLISH/$dirnameonly"; $destFolder="$NEWPUBLISH/$dirnameonly";
print "Publish file ".$file." to $NEWPUBLISH/".$dirnameonly."\n";
} }
print "Publish file ".$file." to ".$destFolder."\n";
# mkdir # mkdir
#my $ssh = Net::SSH::Perl->new("frs.sourceforge.net"); #my $ssh = Net::SSH::Perl->new("frs.sourceforge.net");

View File

@ -171,6 +171,8 @@ then
fi fi
#echo "mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile" #echo "mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile"
#mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile #mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile
#echo "drop old table"
echo "drop table llx_accounting_account;" | mysql -P$port -u$admin $passwd $base
echo "mysql -P$port -u$admin -p***** $base < $mydir/$dumpfile" echo "mysql -P$port -u$admin -p***** $base < $mydir/$dumpfile"
mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile
export res=$? export res=$?

View File

@ -141,8 +141,8 @@ if ($result) {
// Situation invoices handling // Situation invoices handling
$line = new FactureLigne($db); $line = new FactureLigne($db);
$line->fetch($obj->rowid); $line->fetch($obj->fdid); // id of line
$prev_progress = $line->get_prev_progress(); $prev_progress = $line->get_prev_progress($obj->rowid); // id of invoice
if ($obj->type == Facture::TYPE_SITUATION) { if ($obj->type == Facture::TYPE_SITUATION) {
// Avoid divide by 0 // Avoid divide by 0
if ($obj->situation_percent == 0) { if ($obj->situation_percent == 0) {

View File

@ -758,10 +758,17 @@ if (empty($reshook))
$facture_source = new Facture($db); // fetch origin object $facture_source = new Facture($db); // fetch origin object
if ($facture_source->fetch($object->fk_facture_source)>0) if ($facture_source->fetch($object->fk_facture_source)>0)
{ {
$fk_parent_line = 0;
foreach($facture_source->lines as $line) foreach($facture_source->lines as $line)
{ {
// Reset fk_parent_line for no child products and special product
if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
$fk_parent_line = 0;
}
$line->fk_facture = $object->id; $line->fk_facture = $object->id;
$line->fk_parent_line = $fk_parent_line;
$line->subprice =-$line->subprice; // invert price for object $line->subprice =-$line->subprice; // invert price for object
$line->pa_ht = -$line->pa_ht; $line->pa_ht = -$line->pa_ht;
@ -771,9 +778,14 @@ if (empty($reshook))
$line->total_localtax1=-$line->total_localtax1; $line->total_localtax1=-$line->total_localtax1;
$line->total_localtax2=-$line->total_localtax2; $line->total_localtax2=-$line->total_localtax2;
$line->insert(); $result = $line->insert();
$object->lines[] = $line; // insert new line in current object $object->lines[] = $line; // insert new line in current object
// Defined the new fk_parent_line
if ($result > 0 && $line->product_type == 9) {
$fk_parent_line = $result;
}
} }
$object->update_price(1); $object->update_price(1);
@ -1552,7 +1564,7 @@ if (empty($reshook))
$line = new FactureLigne($db); $line = new FactureLigne($db);
$line->fetch(GETPOST('lineid')); $line->fetch(GETPOST('lineid'));
$percent = $line->get_prev_progress(); $percent = $line->get_prev_progress($object->id);
if (GETPOST('progress') < $percent) if (GETPOST('progress') < $percent)
{ {
@ -1670,7 +1682,7 @@ if (empty($reshook))
{ {
foreach ($object->lines as $line) foreach ($object->lines as $line)
{ {
$percent = $line->get_prev_progress(); $percent = $line->get_prev_progress($object->id);
if (GETPOST('all_progress') < $percent) { if (GETPOST('all_progress') < $percent) {
$mesg = '<div class="warning">' . $langs->trans("CantBeLessThanMinPercent") . '</div>'; $mesg = '<div class="warning">' . $langs->trans("CantBeLessThanMinPercent") . '</div>';
$result = -1; $result = -1;

View File

@ -4256,15 +4256,22 @@ class FactureLigne extends CommonInvoiceLine
} }
/** /**
* Returns situation_percent of the previous line * Returns situation_percent of the previous line.
* Warning: If invoice is a replacement invoice, this->fk_prev_id is id of the replaced line.
* *
* @return int >= 0 * @param int $invoiceid Invoice id
* @return int >= 0
*/ */
function get_prev_progress() function get_prev_progress($invoiceid)
{ {
if (is_null($this->fk_prev_id) || empty($this->fk_prev_id) || $this->fk_prev_id == "") { if (is_null($this->fk_prev_id) || empty($this->fk_prev_id) || $this->fk_prev_id == "") {
return 0; return 0;
} else { } else {
// If invoice is a not a situation invoice, this->fk_prev_id is used for something else
$tmpinvoice=new Facture($this->db);
$tmpinvoice->fetch($invoiceid);
if ($tmpinvoice->type != Facture::TYPE_SITUATION) return 0;
$sql = 'SELECT situation_percent FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE rowid=' . $this->fk_prev_id; $sql = 'SELECT situation_percent FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE rowid=' . $this->fk_prev_id;
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql && $resql->num_rows > 0) { if ($resql && $resql->num_rows > 0) {

View File

@ -166,8 +166,8 @@ if ($result)
// Situation invoices handling // Situation invoices handling
$line = new FactureLigne($db); $line = new FactureLigne($db);
$line->fetch($obj->id); $line->fetch($obj->id); // id of line
$prev_progress = $line->get_prev_progress(); $prev_progress = $line->get_prev_progress($obj->rowid); // id on invoice
if ($obj->type==Facture::TYPE_SITUATION) { if ($obj->type==Facture::TYPE_SITUATION) {
// Avoid divide by 0 // Avoid divide by 0
if ($obj->situation_percent == 0) { if ($obj->situation_percent == 0) {

View File

@ -540,13 +540,14 @@ class pdf_crabe extends ModelePDFFactures
$pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0); $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0);
// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
$prev_progress = $object->lines[$i]->get_prev_progress(); $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
if ($prev_progress > 0) // Compute progress from previous situation if ($prev_progress > 0) // Compute progress from previous situation
{ {
$tvaligne = $object->lines[$i]->total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent; $tvaligne = $object->lines[$i]->total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent;
} else { } else {
$tvaligne = $object->lines[$i]->total_tva; $tvaligne = $object->lines[$i]->total_tva;
} }
$localtax1ligne=$object->lines[$i]->total_localtax1; $localtax1ligne=$object->lines[$i]->total_localtax1;
$localtax2ligne=$object->lines[$i]->total_localtax2; $localtax2ligne=$object->lines[$i]->total_localtax2;
$localtax1_rate=$object->lines[$i]->localtax1_tx; $localtax1_rate=$object->lines[$i]->localtax1_tx;
@ -1103,7 +1104,8 @@ class pdf_crabe extends ModelePDFFactures
} }
} }
} }
//}
//}
// VAT // VAT
foreach($this->tva as $tvakey => $tvaval) foreach($this->tva as $tvakey => $tvaval)
{ {