Преглед изворни кода

Merge branch '9.0' of git@github.com:Dolibarr/dolibarr.git into develop

Conflicts:
	htdocs/compta/facture/card.php
Laurent Destailleur пре 6 година
родитељ
комит
ecc30b8ffe

+ 4 - 4
build/exe/doliwamp/Languages/MyEnglish.isl

@@ -11,9 +11,9 @@ LaunchProgram=Launch %1
 AssocFileExtension=&Associate %1 with the %2 file extension
 AssocingFileExtension=Associating %1 with the %2 file extension...
 
-YouWillInstallDoliWamp=You will install or upgrade DoliWamp (Apache+Mysql+PHP+Dolibarr) on your computer.
-ThisAssistantInstallOrUpgrade=This assistant installs or upgrades Dolibarr ERP-CRM and all required third party softwares (Apache, Mysql and PHP) optimized for a Dolibarr usage.
-IfYouHaveTechnicalKnowledge=If you are looking for a hosted version in the Cloud, you should look at https://saas.dolibarr.org. If you have technical knowledge and want to manage your Apache, Mysql and PHP yourself, you should not use this assistant and make a manual installation of Dolibarr on your existing Apache, Mysql and PHP installation.
+YouWillInstallDoliWamp=You will install or upgrade DoliWamp (so Dolibarr + all required third party softwares like Apache, Mysql and PHP) on your computer.
+ThisAssistantInstallOrUpgrade=WARNING: Using an ERP CRM installed on a local computer can be dangerous: if your computer break down, you can lose all your data. Do this if you are ready to manage backup yourself seriously. If not, use an installation in Saas instead (see https://saas.dolibarr.org).
+IfYouHaveTechnicalKnowledge=Moreover, if you have technical knowledges and want to manage your Apache, Mysql and PHP yourself, you should not use this assistant and make a manual installation of Dolibarr on your existing server with Apache, Mysql and PHP.
 ButIfYouLook=But if you look for an automatic setup on your local computer, you''re on the good way...
 DoYouWantToStart=Do you want to start installation/upgrade process ?
 
@@ -32,7 +32,7 @@ PortAlreadyInUse=Port %1 seems to be already in use. You should cancel to go bac
 
 FirefoxDetected=Firefox has been detected on your computer. Would you like to use it as the default browser for Dolibarr ?
 ChromeDetected=Chrome has been detected on your computer. Would you like to use it as the default browser for Dolibarr ?
-ChooseDefaultBrowser=Please choose your default browser. If you are not sure, just click Open :
+ChooseDefaultBrowser=Please choose your default browser (iexplore.exe, firefox.exe, chrome.exe, MicrosoftEdge.exe...). If you are not sure, just click Open :
 
 LaunchNow=Launch Dolibarr now
 

+ 27 - 27
build/exe/doliwamp/Languages/MyFrench.isl

@@ -2,47 +2,47 @@
 [CustomMessages]
 
 NameAndVersion=%1 version %2
-Additionalcons=Ic�nes suppl�mentaires :
-CreateDesktopIcon=Cr�er une ic�ne sur le &Bureau
-CreateQuickLaunchIcon=Cr�er une ic�ne dans la barre de &Lancement rapide
+AdditionalIcons=Icônes supplémentaires :
+CreateDesktopIcon=Créer une icône sur le &Bureau
+CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide
 ProgramOnTheWeb=Page d'accueil de %1
-UninstallProgram=D�sinstaller %1
-LaunchProgram=Ex�cuter %1
+UninstallProgram=Désinstaller %1
+LaunchProgram=Exécuter %1
 AssocFileExtension=&Associer %1 avec l'extension de fichier %2
 AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
 
-YouWillInstallDoliWamp=Vous allez installer ou mettre � jour DoliWamp (Apache+Mysql+PHP+Dolibarr) sur votre ordinateur.
-ThisAssistantInstallOrUpgrade=Cet assistant installe ou met � jour Dolibarr ERP-CRM et tous ses composants pr�requis (Apache, Mysql et PHP) optimis�s pour une utilisation de Dolibarr.
-IfYouHaveTechnicalKnowledge=Si vous cherchez un h�bergement dans le Cloud, aller voir sur https://saas.dolibarr.org. Si vous avez des comp�tences techniques et voulez g�rer vous m�me Apache, Mysql et PHP, vous ne devriez pas utiliser cet assistant mais faire plut�t une installation manuelle de Dolibarr sur votre socle Apache, Mysql et PHP existant.
-ButIfYouLook=Mais si vous recherchez une installation automatis�e locale sur votre ordinateur, cl� en main, vous �tes sur la bonne voie...
-DoYouWantToStart=Voulez-vous d�marrer le processus d'installation/mise � jour ?
+YouWillInstallDoliWamp=Vous allez installer ou mettre à jour DoliWamp sur votre ordinateur (donc Dolibarr + tous ses composants prérequis comme Apache, Mysql et PHP).
+ThisAssistantInstallOrUpgrade=AVERTISSEMENT: L'utilisation d'un ERP CRM installé sur un ordinateur local peut être dangereuse: si votre ordinateur tombe en panne, vous pouvez perdre toutes vos données. Faites-le si vous êtes prêt à gérer les sauvegardes vous-même sérieusement. Sinon, utilisez plutôt une installation en Saas (voir https://saas.dolibarr.org).
+IfYouHaveTechnicalKnowledge=De plus, si vous avez des compétences techniques et envisagez de partager votre Apache, Mysql et PHP avec d''autres applications que Dolibarr, vous ne devriez pas utiliser cet assistant mais faire plutôt une installation manuelle de Dolibarr sur un serveur existant équipé de Apache, Mysql et PHP.
+ButIfYouLook=Mais si vous recherchez une installation clé en main automatisée sur une poste local, vous êtes sur la bonne voie...
+DoYouWantToStart=Voulez-vous démarrer le processus d'installation/mise à jour ?
 
-TechnicalParameters=Param�tres techniques
-IfFirstInstall=S'il s'agit de la premi�re installation, merci de sp�cifier ces quelques param�tres techniques. Si vous ne les comprennez pas, �tes non s�r, ou proc�dez � une mise � jour, laissez les champs avec les valeurs propos�es par d�faut.
+TechnicalParameters=Paramètres techniques
+IfFirstInstall=S'il s'agit de la première installation, merci de spécifier ces quelques paramètres techniques. Si vous ne les comprennez pas, êtes non sûr, ou procédez à une mise à jour, laissez les champs avec les valeurs proposées par défaut.
 
 
 ; WARNING !!! STRINGS FOR THIS 4 STRINGS MUST BE LOWER THAN 70 CHARACTERS
-SMTPServer=Serveur SMTP (le votre ou de votre FAI, premi�re installation uniquement):
-ApachePort=Port Apache (premi�re installation uniquement, le choix standard est 80):
-MySqlPort=Port Mysql (premi�re installation uniquement, le choix standard est 3306):
-MySqlPassword=Mot de passe serveur+base MySql de root (premi�re installation uniquement):
+SMTPServer=Serveur SMTP (le votre ou de votre FAI, première installation uniquement):
+ApachePort=Port Apache (première installation uniquement, le choix standard est 80):
+MySqlPort=Port Mysql (première installation uniquement, le choix standard est 3306):
+MySqlPassword=Mot de passe serveur+base MySql de root (première installation uniquement):
 
-FailedToDeleteLock=Echec de la suppression du fichier %1/www/dolibarr/install.lock. Vous pouvez ignorer l'avertissement mais il est possible que vous deviez le supprimer manuellement plus tard. Dans ce cas, cela vous sera signal�. Cliquez sur OK pour continuer...
+FailedToDeleteLock=Echec de la suppression du fichier %1/www/dolibarr/install.lock. Vous pouvez ignorer l'avertissement mais il est possible que vous deviez le supprimer manuellement plus tard. Dans ce cas, cela vous sera signalé. Cliquez sur OK pour continuer...
 
-PortAlreadyInUse=Le port %1 semble d�j� utilis�. Il est recommand� d'annuler pour revenir en arri�re et sp�cifier une autre valeur pour le port %2. Annuler le choix et choisir une autre valeur ?
+PortAlreadyInUse=Le port %1 semble déjà utilisé. Il est recommandé d'annuler pour revenir en arrière et spécifier une autre valeur pour le port %2. Annuler le choix et choisir une autre valeur ?
 
-FirefoxDetected=Firefox a �t� d�tect� sur votre ordinateur. Voulez-vous en faire votre navigateur par d�faut pour Dolibarr ?
-ChromeDetected=Chrome a �t� d�tect� sur votre ordinateur. Voulez-vous en faire votre navigateur par d�faut pour Dolibarr ?
-ChooseDefaultBrowser=Merci de choisir votre navigateur par d�faut. Si vous n'�tes pas s�r, cliquez simplement sur Ouvrir :
+FirefoxDetected=Firefox a été détecté sur votre ordinateur. Voulez-vous en faire votre navigateur par défaut pour Dolibarr ?
+ChromeDetected=Chrome a été détecté sur votre ordinateur. Voulez-vous en faire votre navigateur par défaut pour Dolibarr ?
+ChooseDefaultBrowser=Merci de choisir votre navigateur par défaut (iexplore.exe, firefox.exe, chrome.exe, MicrosoftEdge.exe...). Si vous n'êtes pas sûr, cliquez simplement sur Ouvrir :
 
 LaunchNow=Lancer Dolibarr maintenant
 
-ProgramHasBeenRemoved=Les fichiers du programme Dolibarr ont �t� supprim�s. Toutefois, tous vos fichiers de donn�es sont toujours dans le r�pertoire %1. Vous devez supprimer ce r�pertoire manuellement pour avoir une d�sinstallation compl�te.
+ProgramHasBeenRemoved=Les fichiers du programme Dolibarr ont été supprimés. Toutefois, tous vos fichiers de données sont toujours dans le répertoire %1. Vous devez supprimer ce répertoire manuellement pour avoir une désinstallation complète.
 
-DoliWampWillStartApacheMysql=L'installeur DoliWamp va maintenant d�marrer ou red�marrer Apache et Mysql, ceci peut durer de quelques secondes � une minute apr�s cette confirmation. D�marrer l'installation ou mise � jour du serveur web et base de donn�es requis par Dolibarr ?
+DoliWampWillStartApacheMysql=L'installeur DoliWamp va maintenant démarrer ou redémarrer Apache et Mysql, ceci peut durer de quelques secondes à une minute après cette confirmation. Démarrer l'installation ou mise à jour du serveur web et base de données requis par Dolibarr ?
 
-OldVersionFoundAndMoveInNew=Une ancienne version de base a �t� trouv�e et d�plac�e pour fonctionner avec la nouvelle version de Dolibarr.
-OldVersionFoundButFailedToMoveInNew=Une ancienne version de base a �t� trouv�e mais ne peut �tre d�plac�e pour �tre utilis�e avec la nouvelle version de Dolibarr.
+OldVersionFoundAndMoveInNew=Une ancienne version de base a été trouvée et déplacée pour fonctionner avec la nouvelle version de Dolibarr.
+OldVersionFoundButFailedToMoveInNew=Une ancienne version de base a été trouvée mais ne peut être déplacée pour être utilisée avec la nouvelle version de Dolibarr.
 
-DLLMissing=L'installation de votre Windows est incompl�te. Il manque le composant "Micrsoft Visual C++ Redistributable for Visual Studio 2012". Installer la version 32-bit version (vcredist_x86.exe) d'abord (vous pourrez le trouver � https://www.microsoft.com/en-us/download/) puis relancer l'installation de DoliWamp après.
-ContinueAnyway=Continuer malgr� tout (le process d'installaton échouera)
+DLLMissing=L'installation de votre Windows est incomplète. Il manque le composant "Micrsoft Visual C++ Redistributable for Visual Studio 2012". Installer la version 32-bit (vcredist_x86.exe) d'abord (vous pourrez le trouver à https://www.microsoft.com/fr-fr/download/) puis relancer l'installation de DoliWamp après.
+ContinueAnyway=Continuer malgré tout (le process d'installaton échouera)

+ 1 - 1
build/exe/doliwamp/rundoliadmin.bat.install

@@ -3,4 +3,4 @@ REM Launch Dolibarr Admin center
 REM ----------------------------
 
 REM Go to admin center page
-start "DoliWamp admin" "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/
+start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/

+ 1 - 1
build/exe/doliwamp/rundolihelp.bat.install

@@ -4,4 +4,4 @@ REM ---------------------------
 
 REM Go to help center page
 echo Please wait...
-start "Dolibarr Help center" "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/support/
+start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/support/

+ 2 - 2
build/exe/doliwamp/rundoliwamp.bat.install

@@ -3,7 +3,7 @@ REM Launch Dolibarr
 REM ---------------
 
 REM If no lock file, we call install process
-IF NOT EXIST dolibarr_documents\install.lock start "Dolibarr" "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/install/
+IF NOT EXIST dolibarr_documents\install.lock start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/install/
 
 REM If lock file exists, we call home page
-IF EXIST dolibarr_documents\install.lock start "Dolibarr" "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/
+IF EXIST dolibarr_documents\install.lock start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/

+ 24 - 2
htdocs/admin/modules.php

@@ -142,6 +142,12 @@ if ($action=='install')
 			setEventMessages($langs->trans("ErrorFilenameDosNotMatchDolibarrPackageRules",$original_file, 'module_*-x.y*.zip'), null, 'errors');
 			$error++;
 		}
+		if (empty($_FILES['fileinstall']['tmp_name']))
+		{
+		    $langs->load("errors");
+		    setEventMessages($langs->trans("ErrorFileNotUploaded"), null, 'errors');
+		    $error++;
+		}
     }
 
     if (! $error)
@@ -152,14 +158,14 @@ if ($action=='install')
             dol_mkdir($conf->admin->dir_temp.'/'.$original_file);
         }
 
-        $tmpdir=preg_replace('/\.zip$/','',$original_file).'.dir';
+        $tmpdir=preg_replace('/\.zip$/i','',$original_file).'.dir';
         if ($tmpdir)
         {
             @dol_delete_dir_recursive($conf->admin->dir_temp.'/'.$tmpdir);
             dol_mkdir($conf->admin->dir_temp.'/'.$tmpdir);
         }
 
-        $result=dol_move_uploaded_file($_FILES['fileinstall']['tmp_name'],$newfile,1,0,$_FILES['fileinstall']['error']);
+        $result=dol_move_uploaded_file($_FILES['fileinstall']['tmp_name'], $newfile, 1, 0, $_FILES['fileinstall']['error']);
         if ($result > 0)
         {
             $result=dol_uncompress($newfile,$conf->admin->dir_temp.'/'.$tmpdir);
@@ -207,6 +213,7 @@ if ($action=='install')
         }
         else
         {
+            setEventMessages($langs->trans("ErrorFailToRenameFile", $_FILES['fileinstall']['tmp_name'], $newfile), null, 'errors');
             $error++;
         }
     }
@@ -1012,6 +1019,7 @@ if ($mode == 'deploy')
 			print '<br>';
 
 			print '<form enctype="multipart/form-data" method="POST" class="noborder" action="'.$_SERVER["PHP_SELF"].'" name="forminstall">';
+			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
 			print '<input type="hidden" name="action" value="install">';
 			print '<input type="hidden" name="mode" value="deploy">';
 
@@ -1047,6 +1055,20 @@ if ($mode == 'deploy')
 
 			print '<input type="submit" name="send" value="'.dol_escape_htmltag($langs->trans("Send")).'" class="button">';
 
+			if (! empty($conf->global->MAIN_UPLOAD_DOC))
+			{
+			    if ($user->admin)
+			    {
+			        $langs->load('other');
+			        print ' ';
+			        print info_admin($langs->trans("ThisLimitIsDefinedInSetup",$max,$maxphp),1);
+			    }
+			}
+			else
+			{
+			    print ' ('.$langs->trans("UploadDisabled").')';
+			}
+
 			print '</form>';
 
 			print '<br>';

+ 17 - 6
htdocs/compta/facture/card.php

@@ -733,20 +733,31 @@ if (empty($reshook))
 			{
 				// If we're on a standard invoice, we have to get excess received to create a discount in TTC without VAT
 
+				// Total payments
 				$sql = 'SELECT SUM(pf.amount) as total_paiements';
 				$sql.= ' FROM '.MAIN_DB_PREFIX.'paiement_facture as pf, '.MAIN_DB_PREFIX.'paiement as p';
 				$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as c ON p.fk_paiement = c.id';
 				$sql.= ' WHERE pf.fk_facture = '.$object->id;
 				$sql.= ' AND pf.fk_paiement = p.rowid';
-				$sql.= ' AND p.entity IN (' . getEntity('invoice').')';
-
+				$sql.= ' AND p.entity IN ('.getEntity('invoice').')';
 				$resql = $db->query($sql);
 				if (! $resql) dol_print_error($db);
 
 				$res = $db->fetch_object($resql);
 				$total_paiements = $res->total_paiements;
 
-				$discount->amount_ht = $discount->amount_ttc = $total_paiements - $object->total_ttc;
+				// Total credit note and deposit
+				$total_creditnote_and_deposit = 0;
+		                $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
+		                $sql .= " re.description, re.fk_facture_source";
+		                $sql .= " FROM " . MAIN_DB_PREFIX . "societe_remise_except as re";
+		                $sql .= " WHERE fk_facture = " . $object->id;
+		                $resql = $db->query($sql);
+		                if (!empty($resql)) {
+		                        while ($obj = $db->fetch_object($resql)) $total_creditnote_and_deposit += $obj->amount_ttc;
+		                } else dol_print_error($db);
+
+				$discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit - $object->total_ttc;
 				$discount->amount_tva = 0;
 				$discount->tva_tx = 0;
 
@@ -1777,16 +1788,16 @@ if (empty($reshook))
 
 				// Search the correct price into loaded array product_price_by_qty using id of array retrieved into POST['pqp'].
 				$pqp = (GETPOST('pbq','int') ? GETPOST('pbq','int') : 0);
-				
+
 				$datapriceofproduct = $prod->getSellPrice($mysoc, $object->thirdparty, $pqp);
-				
+
 				$pu_ht = $datapriceofproduct['pu_ht'];
 				$pu_ttc = $datapriceofproduct['pu_ttc'];
 				$price_min = $datapriceofproduct['price_min'];
 				$price_base_type = $datapriceofproduct['price_base_type'];
 				$tva_tx = $datapriceofproduct['tva_tx'];
 				$tva_npr = $datapriceofproduct['tva_npr'];
-				
+
 				$tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx));
 				$tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx));
 

+ 1 - 1
htdocs/core/menus/standard/eldy.lib.php

@@ -833,7 +833,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
 				$newmenu->add("/fichinter/index.php?leftmenu=ficheinter", $langs->trans("Interventions"), 0, $user->rights->ficheinter->lire, '', $mainmenu, 'ficheinter', 2200);
 				$newmenu->add("/fichinter/card.php?action=create&amp;leftmenu=ficheinter", $langs->trans("NewIntervention"), 1, $user->rights->ficheinter->creer, '', '', '', 201);
 				$newmenu->add("/fichinter/list.php?leftmenu=ficheinter", $langs->trans("List"), 1, $user->rights->ficheinter->lire, '', '', '', 202);
-				$newmenu->add("/fichinter/card-red.php?leftmenu=ficheinter", $langs->trans("ModelList"), 1, $user->rights->ficheinter->lire, '', '', '', 203);
+				$newmenu->add("/fichinter/card-rec.php?leftmenu=ficheinter", $langs->trans("ModelList"), 1, $user->rights->ficheinter->lire, '', '', '', 203);
 				$newmenu->add("/fichinter/stats/index.php?leftmenu=ficheinter", $langs->trans("Statistics"), 1, $user->rights->fournisseur->commande->lire);
 			}
 		}

+ 1 - 1
htdocs/core/tpl/contacts.tpl.php

@@ -208,7 +208,7 @@ if ($permission) {
 			if ($tab[$i]['source']=='external')
 			{
 				$contactstatic->fetch($tab[$i]['id']);
-				echo $contactstatic->getNomUrl(1, '', 0, 0, 0, 0, '', 'valignmiddle');
+				echo $contactstatic->getNomUrl(1, '', 0, '', 0, 0, '', 'valignmiddle');
 			}
 			?>
 		</div>

+ 3 - 3
htdocs/product/inventory/card.php

@@ -78,12 +78,12 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php';  // Must be inclu
 
 if (empty($conf->global->MAIN_USE_ADVANCED_PERMS))
 {
-	$permissiontoadd = $user->rights->stock->write;
-	$permissiontodelete = $user->rights->stock->write;
+	$permissiontoadd = $user->rights->stock->creer;
+	$permissiontodelete = $user->rights->stock->supprimer;
 }
 else
 {
-	$permissiontoadd = $user->rights->stock->inventory_advance->create;
+	$permissiontoadd = $user->rights->stock->inventory_advance->write;
 	$permissiontodelete = $user->rights->stock->inventory_advance->write;
 }
 

+ 1 - 1
htdocs/takepos/takepos.php

@@ -64,7 +64,7 @@ top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
 $categorie = new Categorie($db);
 $categories = $categorie->get_full_arbo('product');
 ?>
-var categories = JSON.parse( '<?php echo json_encode($categories);?>' );
+var categories = <?php echo json_encode($categories); ?>;
 var currentcat;
 var pageproducts=0;
 var pagecategories=0;

+ 14 - 3
htdocs/user/class/api_users.class.php

@@ -218,11 +218,22 @@ class Users extends DolibarrApi
 
 		foreach ($request_data as $field => $value)
 		{
-            if ($field == 'id') continue;
-		    $this->useraccount->$field = $value;
+			if ($field == 'id') continue;
+			// The status must be updated using setstatus() because it
+			// is not handled by the update() method.
+			if ($field == 'statut') {
+				$result = $this->useraccount->setstatus($value);
+				if ($result < 0) {
+				   throw new RestException(500, 'Error when updating status of user: '.$this->useraccount->error);
+				}
+			} else {
+			   $this->useraccount->$field = $value;
+			}
 		}
 
-		if ($this->useraccount->update(DolibarrApiAccess::$user) > 0)
+		// If there is no error, update() returns the number of affected
+		// rows so if the update is a no op, the return value is zezo.
+		if ($this->useraccount->update(DolibarrApiAccess::$user) >= 0)
 		{
 			return $this->get($id);
 		}