diff --git a/ChangeLog b/ChangeLog index 13346d43763..20c79c28ce7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 ***** FIX: #3805 FIX: #3231 [Members] Public subscription page displays GeoIP error diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index db61a84d133..58f1514b632 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -1108,6 +1108,14 @@ if ($nboftargetok) { "$DESTI/standard/$FILENAMETGZ.tgz"=>'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/; foreach my $file (sort keys %filestoscansf) { @@ -1150,8 +1158,10 @@ if ($nboftargetok) { if ($target eq 'SF') { $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 { $dirnameonly=$file; @@ -1159,8 +1169,8 @@ if ($nboftargetok) { $filenameonly=$file; $filenameonly =~ s/.*\/[^\/]+\/([^\/])+$/$1/; $destFolder="$NEWPUBLISH/$dirnameonly"; - print "Publish file ".$file." to $NEWPUBLISH/".$dirnameonly."\n"; } + print "Publish file ".$file." to ".$destFolder."\n"; # mkdir #my $ssh = Net::SSH::Perl->new("frs.sourceforge.net"); diff --git a/dev/initdata/initdemo.sh b/dev/initdata/initdemo.sh index e8ea47c71b2..10dc671e09d 100755 --- a/dev/initdata/initdemo.sh +++ b/dev/initdata/initdemo.sh @@ -171,6 +171,8 @@ then fi #echo "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" mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile export res=$? diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index d8ac0b6d63d..e13381677c0 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1262,7 +1262,7 @@ if ($action == 'create' && $user->rights->commande->creer) $projectid = 0; $remise_absolue = 0; - + if (! empty($origin) && ! empty($originid)) { // Parse element/subelement (ex: project_task) $element = $subelement = $origin; @@ -1273,7 +1273,7 @@ if ($action == 'create' && $user->rights->commande->creer) if ($element == 'project') { $projectid = $originid; - + if (!$cond_reglement_id) { $cond_reglement_id = $soc->cond_reglement_id; } @@ -1590,7 +1590,7 @@ if ($action == 'create' && $user->rights->commande->creer) default: $newclassname = $classname; } - + print '' . $langs->trans($newclassname) . '' . $objectsrc->getNomUrl(1) . ''; print '' . $langs->trans('TotalHT') . '' . price($objectsrc->total_ht) . ''; print '' . $langs->trans('TotalVAT') . '' . price($objectsrc->total_tva) . ""; @@ -2446,6 +2446,7 @@ if ($action == 'create' && $user->rights->commande->creer) $ref = dol_sanitizeFileName($object->ref); include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + $fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref, '/').'[^\-]+'); $file = $fileparams['fullname']; // Define output language diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 55e5b1e063b..951270c19fe 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -758,10 +758,17 @@ if (empty($reshook)) $facture_source = new Facture($db); // fetch origin object if ($facture_source->fetch($object->fk_facture_source)>0) { + $fk_parent_line = 0; 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_parent_line = $fk_parent_line; $line->subprice =-$line->subprice; // invert price for object $line->pa_ht = -$line->pa_ht; @@ -771,9 +778,14 @@ if (empty($reshook)) $line->total_localtax1=-$line->total_localtax1; $line->total_localtax2=-$line->total_localtax2; - $line->insert(); + $result = $line->insert(); $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); @@ -1873,7 +1885,7 @@ if ($action == 'create') if ($element == 'project') { $projectid = $originid; - + if (!$cond_reglement_id) { $cond_reglement_id = $soc->cond_reglement_id; } @@ -1886,7 +1898,7 @@ if ($action == 'create') if (!$dateinvoice) { // Do not set 0 here (0 for a date is 1970) $dateinvoice = (empty($dateinvoice)?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$dateinvoice); - } + } } else { // For compatibility if ($element == 'order' || $element == 'commande') { @@ -2591,7 +2603,7 @@ else if ($id > 0 || ! empty($ref)) $qualified_for_stock_change = $object->hasProductsOrServices(1); } - if ($object->type != Facture::TYPE_DEPOSIT && ! empty($conf->global->STOCK_CALCULATE_ON_BILL) && $qualified_for_stock_change && $object->statut >= 1) + if ($object->type != Facture::TYPE_DEPOSIT && ! empty($conf->global->STOCK_CALCULATE_ON_BILL) && $qualified_for_stock_change && $object->statut >= 1) { $langs->load("stocks"); require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php'; @@ -2782,7 +2794,7 @@ else if ($id > 0 || ! empty($ref)) } // Clone confirmation - if ($action == 'clone') + if ($action == 'clone') { // Create an array for form $formquestion = array( @@ -2793,7 +2805,7 @@ else if ($id > 0 || ! empty($ref)) $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?facid=' . $object->id, $langs->trans('CloneInvoice'), $langs->trans('ConfirmCloneInvoice', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } - if (! $formconfirm) + if (! $formconfirm) { $parameters = array('lineid' => $lineid); $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook @@ -3587,14 +3599,14 @@ else if ($id > 0 || ! empty($ref)) // modified by hook if (empty($reshook)) { // Editer une facture deja validee, sans paiement effectue et pas exporte en compta - if ($object->statut == 1) + if ($object->statut == 1) { // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees $ventilExportCompta = $object->getVentilExportCompta(); - if ($resteapayer == $object->total_ttc && empty($object->paye) && $ventilExportCompta == 0) + if ($resteapayer == $object->total_ttc && empty($object->paye) && $ventilExportCompta == 0) { - if (! $objectidnext && $object->is_last_in_cycle()) + if (! $objectidnext && $object->is_last_in_cycle()) { if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer)) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))