From 9e2eccbe4ca7a3c6f46bf84dd4ab96f50b049ab7 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Wed, 25 May 2011 18:16:58 +0000
Subject: [PATCH] Fix: Fix corrupted data on date of trips

---
 .../deplacement/class/deplacement.class.php   | 21 ++++++++++++++-----
 htdocs/compta/deplacement/fiche.php           | 15 ++++++++-----
 htdocs/compta/deplacement/stats/index.php     |  3 ++-
 htdocs/core/class/stats.class.php             | 15 +++++++------
 .../install/mysql/migration/3.0.0-3.1.0.sql   |  5 ++++-
 htdocs/install/mysql/migration/repair.sql     |  2 ++
 6 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/htdocs/compta/deplacement/class/deplacement.class.php b/htdocs/compta/deplacement/class/deplacement.class.php
index 279872b861f..85dd52a7573 100644
--- a/htdocs/compta/deplacement/class/deplacement.class.php
+++ b/htdocs/compta/deplacement/class/deplacement.class.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2009      Regis Houssin        <regis@dolibarr.fr>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -21,7 +21,7 @@
 /**
  *      \file       htdocs/compta/deplacement/class/deplacement.class.php
  *      \ingroup    deplacement
- *      \brief      Fichier de la classe des deplacements
+ *      \brief      File of class to manage trips
  *      \version    $Id$
  */
 
@@ -42,6 +42,9 @@ class Deplacement extends CommonObject
 	var $ismultientitymanaged = 0;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
 
 	var $id;
+
+	var $datec;         // Creation date
+	var $dated;
 	var $fk_user_author;
 	var $fk_user;
 	var $km;
@@ -85,10 +88,13 @@ class Deplacement extends CommonObject
 			return -1;
 		}
 
-		$this->db->begin();
+        $now=dol_now();
+
+        $this->db->begin();
 
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."deplacement (";
 		$sql.= "datec";
+		//$sql.= ", dated";
 		$sql.= ", entity";
 		$sql.= ", fk_user_author";
 		$sql.= ", fk_user";
@@ -98,7 +104,7 @@ class Deplacement extends CommonObject
 		$sql.= ", fk_projet";
 		$sql.= ", fk_soc";
 		$sql.= ") VALUES (";
-		$sql.= $this->db->idate(mktime());
+		$sql.= " '".$this->db->idate($now)."'";
 		$sql.= ", ".$conf->entity;
 		$sql.= ", ".$user->id;
 		$sql.= ", ".$this->fk_user;
@@ -147,7 +153,12 @@ class Deplacement extends CommonObject
 
 		// Check parameters
 		if (! is_numeric($this->km)) $this->km = 0;
-		if (empty($this->type) || $this->type < 0)
+        if (empty($this->date))
+        {
+            $this->error='ErrorBadParameter';
+            return -1;
+        }
+        if (empty($this->type) || $this->type < 0)
 		{
 			$this->error='ErrorBadParameter';
 			return -1;
diff --git a/htdocs/compta/deplacement/fiche.php b/htdocs/compta/deplacement/fiche.php
index c46c516d36d..21657ec6d3d 100644
--- a/htdocs/compta/deplacement/fiche.php
+++ b/htdocs/compta/deplacement/fiche.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -69,18 +69,23 @@ if ($_POST["action"] == 'add' && $user->rights->deplacement->creer)
 	{
 		$error=0;
 
-		$deplacement = new Deplacement($db);
-
-		$deplacement->date = dol_mktime(12, 0, 0,
+        $dated=dol_mktime(12, 0, 0,
 		$_POST["remonth"],
 		$_POST["reday"],
 		$_POST["reyear"]);
 
+        $deplacement = new Deplacement($db);
+		$deplacement->date = $dated;
 		$deplacement->km = $_POST["km"];
 		$deplacement->type = $_POST["type"];
 		$deplacement->socid = $_POST["socid"];
 		$deplacement->fk_user = $_POST["fk_user"];
 
+        if (! $deplacement->date)
+        {
+            $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Date"));
+            $error++;
+        }
 		if ($deplacement->type == '-1') 	// Otherwise it is TF_LUNCH,...
 		{
 			$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")).'</div>';
@@ -179,7 +184,7 @@ if ($_GET["action"] == 'create')
 {
 	print_fiche_titre($langs->trans("NewTrip"));
 
-	if ($mesg) print $mesg."<br>";
+	if ($mesg) dol_htmloutput_errors($mesg);
 
 	$datec = dol_mktime(12, 0, 0,
 	$_POST["remonth"],
diff --git a/htdocs/compta/deplacement/stats/index.php b/htdocs/compta/deplacement/stats/index.php
index 8c39ed507a4..f660e2eef7b 100755
--- a/htdocs/compta/deplacement/stats/index.php
+++ b/htdocs/compta/deplacement/stats/index.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (c) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (c) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -66,6 +66,7 @@ $stats = new DeplacementStats($db, $socid);
 
 // Build graphic number of object
 // $data = array(array('Lib',val1,val2,val3),...)
+//print "$endyear, $startyear";
 $data = $stats->getNbByMonthWithPrevYear($endyear,$startyear);
 //var_dump($data);
 
diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php
index ea55e00b01e..a08ec4ed2ab 100644
--- a/htdocs/core/class/stats.class.php
+++ b/htdocs/core/class/stats.class.php
@@ -39,17 +39,18 @@ class Stats
 
 	/**
 	 * Return nb of entity by month for several years
-	 *
 	 * @param 	endyear		Start year
 	 * @param 	startyear	End year
 	 * @return 	array		Array of values
 	 */
 	function getNbByMonthWithPrevYear($endyear,$startyear)
 	{
+	    if ($startyear > $endyear) return -1;
+
 		$datay=array();
 
 		$year=$startyear;
-		while($year <= $endyear)
+		while ($year <= $endyear)
 		{
 			$datay[$year] = $this->getNbByMonth($year);
 			$year++;
@@ -81,7 +82,9 @@ class Stats
 	 */
 	function getAmountByMonthWithPrevYear($endyear,$startyear)
 	{
-		$datay=array();
+        if ($startyear > $endyear) return -1;
+
+        $datay=array();
 
 		$year=$startyear;
 		while($year <= $endyear)
@@ -108,9 +111,9 @@ class Stats
 
 
 	/**
-	 * 	\brief  	Return nb of elements by year
-	 *	\param		sql		SQL request
-	 * 	\return		array
+	 * 	Return nb of elements by year
+	 *	@param		sql		SQL request
+	 * 	@return		array
 	 */
 	function _getNbByYear($sql)
 	{
diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
index 573833dddd5..070915e60ce 100755
--- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
+++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
@@ -10,6 +10,9 @@
 -- To change type of field: ALTER TABLE llx_table MODIFY name varchar(60);
 --
 
+-- Fix correupted data
+update llx_deplacement set dated='2010-01-01' where dated < '2000-01-01';
+
 RENAME TABLE llx_c_methode_commande_fournisseur TO llx_c_input_method;
 
 ALTER TABLE llx_adherent MODIFY login varchar(50);
@@ -122,7 +125,7 @@ ALTER TABLE llx_expedition ADD COLUMN ref_int varchar(30) AFTER ref_ext;
 ALTER TABLE llx_livraison ADD COLUMN ref_ext varchar(30) AFTER fk_soc;
 ALTER TABLE llx_livraison ADD COLUMN ref_int varchar(30) AFTER ref_ext;
 
-INSERT INTO llx_c_shipment_mode (rowid,code,libelle,description,active) VALUES (4,'LETTREMAX','Lettre max','Courrier suivi et lettre max',0);
+INSERT INTO llx_c_shipment_mode (rowid,code,libelle,description,active) VALUES (4,'LETTREMAX','Lettre Max','Courrier Suivi et Lettre Max',0);
 
 --Add Chile data (id pays=67)
 -- Regions Chile
diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql
index 26cc0d854c0..ffd1af7b3d7 100644
--- a/htdocs/install/mysql/migration/repair.sql
+++ b/htdocs/install/mysql/migration/repair.sql
@@ -20,3 +20,5 @@ delete from llx_facture where facnumber = '';
 delete from llx_commande where ref = '';
 -- V4.1 delete from llx_propaldet where fk_propal in (select rowid from llx_propal where ref = '');
 delete from llx_propal where ref = '';
+
+update llx_deplacement set dated='2010-01-01' where dated < '2000-01-01';
-- 
GitLab