From 46ff62fc871948f00ef1dceea973c9c79bee58bb Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Sat, 6 May 2017 22:28:07 +0200
Subject: [PATCH] Work on inventory module debug

---
 htdocs/admin/stock.php                        |  2 +-
 htdocs/core/class/commonobject.class.php      | 34 +++++++++++-------
 htdocs/core/class/coreobject.class.php        |  2 --
 htdocs/core/menus/standard/eldy.lib.php       |  2 +-
 htdocs/core/modules/modStock.class.php        | 35 +++++++++++--------
 htdocs/install/mysql/tables/llx_fichinter.sql |  1 -
 htdocs/install/mysql/tables/llx_inventory.sql | 25 +++++++------
 htdocs/product/inventory/card.php             | 27 ++++++++------
 .../inventory/class/inventory.class.php       |  4 ++-
 .../product/inventory/tpl/inventory.tpl.php   |  4 +--
 10 files changed, 79 insertions(+), 57 deletions(-)

diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php
index 72ff0f17a1b..050e00e6278 100644
--- a/htdocs/admin/stock.php
+++ b/htdocs/admin/stock.php
@@ -434,7 +434,7 @@ if ($virtualdiffersfromphysical)
 
 
 print '<br />';
-if ($conf->global->MAIN_LEVEL_FEATURES >= 2)
+if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
 {
 	$var=false;
 	print '<table class="noborder" width="100%">';
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 29dcc413221..947d99af545 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -4938,25 +4938,33 @@ abstract class CommonObject
 		
 		if(!empty($id)) $sql.= ' WHERE rowid = '.$id;
 		else  $sql.= ' WHERE ref = \''.$this->quote($ref).'\'';
-		
+
 		$res = $this->db->query($sql);
-		if($obj = $this->db->fetch_object($res))
+		if ($res)
 		{
-			$this->id = $id;
-			$this->set_vars_by_db($obj);
-			
-			$this->datec = $this->db->idate($obj->datec);
-			$this->tms = $this->db->idate($obj->tms);
-			
-			return $this->id;
+    		if ($obj = $this->db->fetch_object($res))
+    		{
+    			$this->id = $id;
+    			$this->set_vars_by_db($obj);
+    			
+    			$this->datec = $this->db->idate($obj->datec);
+    			$this->tms = $this->db->idate($obj->tms);
+    			
+    			return $this->id;
+    		}
+    		else
+    		{
+    			$this->error = $this->db->lasterror();
+    			$this->errors[] = $this->error;
+    			return -1;
+    		}
 		}
 		else
 		{
-			$this->error = $this->db->lasterror();
-			$this->errors[] = $this->error;
-			return -1;
+		    $this->error = $this->db->lasterror();
+		    $this->errors[] = $this->error;
+		    return -1;
 		}
-		
 	}
 
 	/**
diff --git a/htdocs/core/class/coreobject.class.php b/htdocs/core/class/coreobject.class.php
index 021213594f7..1456fb991c2 100644
--- a/htdocs/core/class/coreobject.class.php
+++ b/htdocs/core/class/coreobject.class.php
@@ -106,14 +106,12 @@ class CoreObject extends CommonObject
      */
 	public function fetch($id, $loadChild = true)
     {
-		
     	$res = $this->fetchCommon($id);
     	if($res>0) {
     		if ($loadChild) $this->fetchChild();
     	}
     	
     	return $res;
-		
 	}
 
 
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index b51292a0bb8..b7a372e50bd 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -1265,7 +1265,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 			}
 
 			// Inventory
-			if ($conf->global->MAIN_LEVEL_FEATURES >= 2)
+			if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
 			{
     			if (! empty($conf->stock->enabled))
     			{
diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php
index e80966afb81..be6817062b6 100644
--- a/htdocs/core/modules/modStock.class.php
+++ b/htdocs/core/modules/modStock.class.php
@@ -117,32 +117,37 @@ class modStock extends DolibarrModules
 		$this->rights[4][4] = 'mouvement';
 		$this->rights[4][5] = 'creer';
 
-		if ($conf->global->MAIN_LEVEL_FEATURES >= 2) {
+		if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
 		
-		$this->rights[5][0] = 1006;
+		$this->rights[5][0] = 1011;
 		$this->rights[5][1] = 'inventoryReadPermission';	// Permission label
 		$this->rights[5][3] = 0; 					// Permission by default for new user (0/1)
-		$this->rights[5][4] = 'read';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[5][4] = 'advance_inventory';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[5][5] = 'read';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
 		
-		$this->rights[6][0] = 1007;
+		$this->rights[6][0] = 1012;
 		$this->rights[6][1] = 'inventoryCreatePermission';	// Permission label
 		$this->rights[6][3] = 0; 					// Permission by default for new user (0/1)
-		$this->rights[6][4] = 'create';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[6][4] = 'advance_inventory';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[6][5] = 'create';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
 		
-		$this->rights[7][0] = 1008;
+		$this->rights[7][0] = 1013;
 		$this->rights[7][1] = 'inventoryWritePermission';	// Permission label
 		$this->rights[7][3] = 0; 					// Permission by default for new user (0/1)
-		$this->rights[7][4] = 'write';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[7][4] = 'advance_inventory';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[7][5] = 'write';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
 		
-		$this->rights[7][0] = 1009;
-		$this->rights[7][1] = 'inventoryValidatePermission';	// Permission label
-		$this->rights[7][3] = 0; 					// Permission by default for new user (0/1)
-		$this->rights[7][4] = 'validate';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[8][0] = 1014;
+		$this->rights[8][1] = 'inventoryValidatePermission';	// Permission label
+		$this->rights[8][3] = 0; 					// Permission by default for new user (0/1)
+		$this->rights[8][4] = 'advance_inventory';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[8][5] = 'validate';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
 		
-		$this->rights[7][0] = 1010;
-		$this->rights[7][1] = 'inventoryChangePMPPermission';	// Permission label
-		$this->rights[7][3] = 0; 					// Permission by default for new user (0/1)
-		$this->rights[7][4] = 'changePMP';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[9][0] = 1015;
+		$this->rights[9][1] = 'inventoryChangePMPPermission';	// Permission label
+		$this->rights[9][3] = 0; 					// Permission by default for new user (0/1)
+		$this->rights[9][4] = 'advance_inventory';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
+		$this->rights[9][5] = 'changePMP';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
 		
 		}
 		
diff --git a/htdocs/install/mysql/tables/llx_fichinter.sql b/htdocs/install/mysql/tables/llx_fichinter.sql
index b3e2001f9c3..926a05a738e 100644
--- a/htdocs/install/mysql/tables/llx_fichinter.sql
+++ b/htdocs/install/mysql/tables/llx_fichinter.sql
@@ -43,5 +43,4 @@ create table llx_fichinter
   note_public		text,
   model_pdf			varchar(255),
   extraparams		varchar(255)				-- for stock other parameters with json format
-  
 )ENGINE=innodb;
diff --git a/htdocs/install/mysql/tables/llx_inventory.sql b/htdocs/install/mysql/tables/llx_inventory.sql
index f906699f5dd..ce1a2c93744 100644
--- a/htdocs/install/mysql/tables/llx_inventory.sql
+++ b/htdocs/install/mysql/tables/llx_inventory.sql
@@ -1,6 +1,6 @@
 -- ===================================================================
--- Copyright (C) 2012      Laurent Destailleur  <eldy@users.sourceforge.net>
--- Copyright (C) 2017	ATM Consulting		<support@atm-consulting.fr>
+-- Copyright (C) 2017   Laurent Destailleur  <eldy@users.sourceforge.net>
+-- Copyright (C) 2017	ATM Consulting		 <support@atm-consulting.fr>
 --
 -- 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
@@ -19,13 +19,18 @@
 
 CREATE TABLE llx_inventory 
 ( 
-rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, 
-datec datetime DEFAULT NULL,
-tms timestamp, 
-fk_warehouse integer DEFAULT 0, 
-entity integer DEFAULT 0, 
-status integer DEFAULT 0, 
-title varchar(255) NOT NULL, 
-date_inventory datetime DEFAULT NULL
+  rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, 
+  entity integer DEFAULT 0, 
+  ref varchar(48),
+  datec datetime DEFAULT NULL,
+  tms timestamp, 
+  fk_user_author	integer,					-- user making creation
+  fk_user_modif     integer,                   -- user making last change
+  fk_user_valid		integer,                   -- valideur de la fiche
+  fk_warehouse integer DEFAULT 0, 
+  status integer DEFAULT 0, 
+  title varchar(255) NOT NULL, 
+  date_inventory datetime DEFAULT NULL,
+  import_key               varchar(14)       	-- import key
 ) 
 ENGINE=InnoDB;
diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php
index 34e79da8a69..e47891a6d08 100644
--- a/htdocs/product/inventory/card.php
+++ b/htdocs/product/inventory/card.php
@@ -361,9 +361,9 @@ if ($action == 'create')
     dol_fiche_end();
     
     print '<div class="center">';
-    print '<input type="submit" class="button" value="'.$langs->trans('inventoryConfirmCreate').'" />';
+    print '<input type="submit" class="button" name="create" value="'.$langs->trans('inventoryConfirmCreate').'" />';
     print ' &nbsp; &nbsp; ';
-    print '<input type="submit" class="button" value="'.$langs->trans('inventoryConfirmCreate').'" />';
+    print '<input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'" />';
     print '</div>';
     
 	echo '</form>';
@@ -373,8 +373,14 @@ if ($action == 'create')
 if ($action == 'view' || $action == 'edit' ||  empty($action))
 {
     $object = new Inventory($db);
-    $object->fetch($id);
-
+    $result = $object->fetch($id);
+    if ($result < 0) dol_print_error($db, $object->error, $object->errors);
+    
+    $warehouse = new Entrepot($db);
+    $warehouse->fetch($object->fk_warehouse);
+    
+    
+    
 	if($action == 'changePMP')
 	{
 		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ApplyNewPMP'), $langs->trans('ConfirmApplyNewPMP', $object->getTitle()), 'confirm_changePMP', array(),'no',1);
@@ -396,18 +402,17 @@ if ($action == 'view' || $action == 'edit' ||  empty($action))
 		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans('RegulateStock'),$langs->trans('ConfirmRegulateStock',$object->getTitle()),'confirm_regulate',array(),'no',1);
 	}
 	
-	$warehouse = new Entrepot($db);
-	$warehouse->fetch($object->fk_warehouse);
-	
 	print dol_get_fiche_head(inventoryPrepareHead($object, $langs->trans('inventoryOfWarehouse', $warehouse->libelle), empty($action) ? '': '&action='.$action));
 	
 	$lines = array();
 	card_line($object, $lines, $action);
 	
-	print '<b>'.$langs->trans('inventoryOnDate')." ".$object->getDate('date_inventory').'</b><br><br>';
+	print $langs->trans('Ref')." ".$object->ref.'<br>';
+	print $langs->trans('Date')." ".$object->getDate('date_inventory').'<br><br>';
 	
 	$objectTPL = array(
-		'id'=> $object->id
+	    'id'=> $object->id
+	    ,'ref'=> $object->ref
 		,'date_cre' => $object->getDate('date_cre', 'd/m/Y')
 		,'date_maj' => $object->getDate('date_maj', 'd/m/Y H:i')
 		,'fk_warehouse' => $object->fk_warehouse
@@ -608,8 +613,8 @@ function _headerList($view)
 	
 	?>
 			<tr style="background-color:#dedede;">
-				<th align="left" width="20%">&nbsp;&nbsp;Produit</th>
-				<th align="center"><?php echo $langs->trans('Warehouse'); ?></th>
+				<th class="titlefield"><?php echo $langs->trans('Product'); ?></th>
+				<th><?php echo $langs->trans('Warehouse'); ?></th>
 				<?php if (! empty($conf->barcode->enabled)) { ?>
 					<th align="center"><?php echo $langs->trans('Barcode'); ?></th>
 				<?php } ?>
diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php
index 93bbb38f6e7..8cb1f56eb9d 100644
--- a/htdocs/product/inventory/class/inventory.class.php
+++ b/htdocs/product/inventory/class/inventory.class.php
@@ -69,6 +69,7 @@ class Inventory extends CoreObject
      */
 	protected $fields=array(
 		'fk_warehouse'=>array('type'=>'integer','index'=>true)
+	    ,'ref'=>array('type'=>'string','index'=>true)
 		,'entity'=>array('type'=>'integer','index'=>true)
 		,'status'=>array('type'=>'integer','index'=>true)
 		,'date_inventory'=>array('type'=>'date')
@@ -113,7 +114,8 @@ class Inventory extends CoreObject
         if(!$loadChild) $this->withChild = false;
         
 		$res = parent::fetch($id, $loadChild);
-		if($res > 0)
+
+		if ($res > 0)
 		{
 			$this->sortDet();
 			$this->amount = 0;
diff --git a/htdocs/product/inventory/tpl/inventory.tpl.php b/htdocs/product/inventory/tpl/inventory.tpl.php
index 2a1c3bc3ee4..05de0f4c002 100644
--- a/htdocs/product/inventory/tpl/inventory.tpl.php
+++ b/htdocs/product/inventory/tpl/inventory.tpl.php
@@ -80,7 +80,7 @@
 		<?php echo inventorySelectProducts($object); ?>
 		
 			<input class="button" type="submit" value="<?php echo $langs->trans('AddProduct'); ?>" />
-	</form>
+	</form><br>
 <?php } ?>
 
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
@@ -92,7 +92,7 @@
 	<input type="hidden" name="action" value="save" />
 	<input type="hidden" name="id" value="<?php echo $object->id; ?>" />
 	
-	<table width="100%" class="border workstation">
+	<table width="100%" class="noborder workstation">
 		<?php
 		
 		_headerList($view); 
-- 
GitLab