浏览代码

Better support of multicompany

Laurent Destailleur 8 年之前
父节点
当前提交
cef43bf4b6
共有 1 个文件被更改,包括 156 次插入114 次删除
  1. 156 114
      htdocs/accountancy/class/bookkeeping.class.php

+ 156 - 114
htdocs/accountancy/class/bookkeeping.class.php

@@ -110,7 +110,7 @@ class BookKeeping extends CommonObject
 	 * @return int                 <0 if KO, Id of created object if OK
 	 */
 	public function create(User $user, $notrigger = false) {
-	    global $langs;
+	    global $conf, $langs;
 	    
 		dol_syslog(__METHOD__, LOG_DEBUG);
 		
@@ -184,6 +184,9 @@ class BookKeeping extends CommonObject
 		$sql .= " WHERE doc_type = '" . $this->doc_type . "'";
 		$sql .= " AND fk_docdet = " . $this->fk_docdet;
 		$sql .= " AND numero_compte = '" . $this->numero_compte . "'";
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		
 		$resql = $this->db->query($sql);
 		
@@ -197,6 +200,9 @@ class BookKeeping extends CommonObject
 				$sqlnum .= " WHERE doc_type = '" . $this->doc_type . "'";
 				$sqlnum .= " AND fk_docdet = '" . $this->fk_docdet . "'";
 				$sqlnum .= " AND doc_ref = '" . $this->doc_ref . "'";
+				if (! empty($conf->multicompany->enabled)) {
+				    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+				}
 				
 				dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG);
 				$resqlnum = $this->db->query($sqlnum);
@@ -208,7 +214,10 @@ class BookKeeping extends CommonObject
 				if (empty($this->piece_num)) {
 					$sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum";
 					$sqlnum .= " FROM " . MAIN_DB_PREFIX . $this->table_element;
-					
+					if (! empty($conf->multicompany->enabled)) {
+					    $sql .= " WHERE entity IN (" . getEntity("accountancy", 1) . ")";
+					}
+						
 					dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG);
 					$resqlnum = $this->db->query($sqlnum);
 					if ($resqlnum) {
@@ -470,11 +479,12 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, 0 if not found, >0 if OK
 	 */
 	public function fetch($id, $ref = null) {
-		dol_syslog(__METHOD__, LOG_DEBUG);
+		global $conf;
+		
+	    dol_syslog(__METHOD__, LOG_DEBUG);
 		
 		$sql = 'SELECT';
 		$sql .= ' t.rowid,';
-		
 		$sql .= " t.doc_date,";
 		$sql .= " t.doc_type,";
 		$sql .= " t.doc_ref,";
@@ -491,7 +501,6 @@ class BookKeeping extends CommonObject
 		$sql .= " t.import_key,";
 		$sql .= " t.code_journal,";
 		$sql .= " t.piece_num";
-		
 		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
 		$sql .= ' WHERE 1 = 1';
 		if (! empty($conf->multicompany->enabled)) {
@@ -556,11 +565,12 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, >0 if OK
 	 */
 	public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
-		dol_syslog(__METHOD__, LOG_DEBUG);
+		global $conf;
+		
+	    dol_syslog(__METHOD__, LOG_DEBUG);
 		
 		$sql = 'SELECT';
 		$sql .= ' t.rowid,';
-		
 		$sql .= " t.doc_date,";
 		$sql .= " t.doc_type,";
 		$sql .= " t.doc_ref,";
@@ -577,9 +587,6 @@ class BookKeeping extends CommonObject
 		$sql .= " t.import_key,";
 		$sql .= " t.code_journal,";
 		$sql .= " t.piece_num";
-		
-		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
-		
 		// Manage filter
 		$sqlwhere = array ();
 		if (count($filter) > 0) {
@@ -601,7 +608,6 @@ class BookKeeping extends CommonObject
 				}
 			}
 		}
-		
 		$sql.= ' WHERE 1 = 1';
 		if (! empty($conf->multicompany->enabled)) {
 		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
@@ -672,11 +678,12 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, >0 if OK
 	 */
 	public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
-		dol_syslog(__METHOD__, LOG_DEBUG);
+		global $conf;
+		
+	    dol_syslog(__METHOD__, LOG_DEBUG);
 		
 		$sql = 'SELECT';
 		$sql .= ' t.rowid,';
-		
 		$sql .= " t.doc_date,";
 		$sql .= " t.doc_type,";
 		$sql .= " t.doc_ref,";
@@ -693,9 +700,7 @@ class BookKeeping extends CommonObject
 		$sql .= " t.import_key,";
 		$sql .= " t.code_journal,";
 		$sql .= " t.piece_num";
-		
 		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
-		
 		// Manage filter
 		$sqlwhere = array ();
 		if (count($filter) > 0) {
@@ -715,7 +720,6 @@ class BookKeeping extends CommonObject
 				}
 			}
 		}
-		
 		$sql.= ' WHERE 1 = 1';
 		if (! empty($conf->multicompany->enabled)) {
 		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
@@ -784,16 +788,15 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, >0 if OK
 	 */
 	public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
-		dol_syslog(__METHOD__, LOG_DEBUG);
+		global $conf;
+		
+	    dol_syslog(__METHOD__, LOG_DEBUG);
 	
 		$sql = 'SELECT';
 		$sql .= " t.numero_compte,";
 		$sql .= " SUM(t.debit) as debit,";
 		$sql .= " SUM(t.credit) as credit";
-		
-	
 		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
-	
 		// Manage filter
 		$sqlwhere = array ();
 		if (count($filter) > 0) {
@@ -813,11 +816,14 @@ class BookKeeping extends CommonObject
 				}
 			}
 		}
-	
+		$sql.= ' WHERE 1 = 1';
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		if (count($sqlwhere) > 0) {
-			$sql .= ' WHERE ' . implode(' ' . $filtermode . ' ', $sqlwhere);
+			$sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere);
 		}
-	
+		
 		$sql .= ' GROUP BY t.numero_compte';
 	
 		if (! empty($sortfield)) {
@@ -917,7 +923,6 @@ class BookKeeping extends CommonObject
 		
 		// Update request
 		$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
-		
 		$sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ',';
 		$sql .= ' doc_type = ' . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ',';
 		$sql .= ' doc_ref = ' . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ',';
@@ -934,7 +939,6 @@ class BookKeeping extends CommonObject
 		$sql .= ' import_key = ' . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . ',';
 		$sql .= ' code_journal = ' . (isset($this->code_journal) ? "'" . $this->db->escape($this->code_journal) . "'" : "null") . ',';
 		$sql .= ' piece_num = ' . (isset($this->piece_num) ? $this->piece_num : "null");
-		
 		$sql .= ' WHERE rowid=' . $this->id;
 		
 		$this->db->begin();
@@ -1049,11 +1053,13 @@ class BookKeeping extends CommonObject
 	/**
 	 * Delete bookkepping by year
 	 *
-	 * @param string $delyear      Year to delete
-	 * @param string $journal      Journal to delete
-	 * @return int                 Result
+	 * @param  string $delyear      Year to delete
+	 * @param  string $journal      Journal to delete
+	 * @return int                  <0 if KO, >0 if OK
 	 */
 	function deleteByYearAndJournal($delyear='', $journal='') {
+	    global $conf;
+	    
 	    if (empty($delyear) && empty($journal)) 
 	    {
 	        return -1;
@@ -1067,6 +1073,9 @@ class BookKeeping extends CommonObject
 		$sql.= " WHERE 1 = 1";
 		if (! empty($delyear)) $sql.= " AND YEAR(doc_date) = " . $delyear;         // FIXME Must use between
 		if (! empty($journal)) $sql.= " AND code_journal = '".$journal."'";
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		$resql = $this->db->query($sql);
 		
 		if (! $resql) {
@@ -1090,12 +1099,17 @@ class BookKeeping extends CommonObject
 	 * @return int Result
 	 */
 	function deleteMvtNum($piecenum) {
+	    global $conf;
+	    
 		$this->db->begin();
 		
 		// first check if line not yet in bookkeeping
 		$sql = "DELETE";
 		$sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element;
 		$sql .= " WHERE piece_num = " . $piecenum;
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		
 		$resql = $this->db->query($sql);
 		
@@ -1193,9 +1207,14 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, >0 if OK
 	 */
 	public function fetchPerMvt($piecenum) {
-		$sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type";
+		global $conf;
+		
+	    $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type";
 		$sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element;
 		$sql .= " WHERE piece_num = " . $piecenum;
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		
 		dol_syslog(get_class($this) . "::" . __METHOD__, LOG_DEBUG);
 		$result = $this->db->query($sql);
@@ -1223,8 +1242,13 @@ class BookKeeping extends CommonObject
 	 */
 	public function getNextNumMvt() 
 	{
+	    global $conf;
+	    
 		$sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . $this->table_element;
-
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " WHERE entity IN (" . getEntity("accountancy", 1) . ")";
+		}
+		
 		dol_syslog(get_class($this) . "getNextNumMvt sql=" . $sql, LOG_DEBUG);
 		$result = $this->db->query($sql);
 
@@ -1247,12 +1271,17 @@ class BookKeeping extends CommonObject
 	 * @return int <0 if KO, >0 if OK
 	 */
 	function fetch_all_per_mvt($piecenum) {
+	    global $conf;
+	    
 		$sql = "SELECT rowid, doc_date, doc_type,";
 		$sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,";
 		$sql .= " numero_compte, label_compte, debit, credit,";
 		$sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num";
 		$sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element;
 		$sql .= " WHERE piece_num = " . $piecenum;
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		
 		dol_syslog(get_class($this) . "::" . __METHOD__, LOG_DEBUG);
 		$result = $this->db->query($sql);
@@ -1297,11 +1326,16 @@ class BookKeeping extends CommonObject
 	 * @return int Result
 	 */
 	function export_bookkeping($model = 'ebp') {
+	    global $conf;
+	    
 		$sql = "SELECT rowid, doc_date, doc_type,";
 		$sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,";
 		$sql .= " numero_compte, label_compte, debit, credit,";
 		$sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num";
 		$sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element;
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " WHERE entity IN (" . getEntity("accountancy", 1) . ")";
+		}
 		
 		dol_syslog(get_class($this) . "::export_bookkeping", LOG_DEBUG);
 		
@@ -1345,75 +1379,76 @@ class BookKeeping extends CommonObject
   
   
   
-  /**
-   * Return list of accounts with label by chart of accounts
-   *
-   * @param string $selectid Preselected chart of accounts
-   * @param string $htmlname Name of field in html form
-   * @param int $showempty Add an empty field
-   * @param array $event Event options
-   * @param int $select_in $selectid value is a aa.rowid (0 default) or aa.account_number (1)
-   * @param int $select_out set value returned by select 0=rowid (default), 1=account_number
-   * @param int $aabase set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by this number
-   *
-   * @return string String with HTML select
-   */
-  function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') {
-          global $conf;
-
-          require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
-
-          $pcgver = $conf->global->CHARTOFACCOUNTS;
-          
-      		$sql  = "SELECT DISTINCT ab.numero_compte as account_number, aa.label as label, aa.rowid as rowid, aa.fk_pcg_version";
-      		$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as ab";
-          $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = ab.numero_compte"; 
-          $sql .= " AND aa.active = 1";
-      		$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
-          $sql .= " AND asy.rowid = " . $pcgver;
-          $sql .= " ORDER BY account_number ASC";
-
-          dol_syslog(get_class($this) . "::select_account", LOG_DEBUG);
-          $resql = $this->db->query($sql);
-
-          if (!$resql) {
-                  $this->error = "Error " . $this->db->lasterror();
-                  dol_syslog(get_class($this) . "::select_account " . $this->error, LOG_ERR);
-                  return -1;
-          }
-
-          $out = ajax_combobox($htmlname, $event);
-
-          $options = array();
-          $selected = null;
-
-          while ($obj = $this->db->fetch_object($resql)) {
-                  $label = length_accountg($obj->account_number) . ' - ' . $obj->label;
-                  $label = dol_trunc($label, $trunclength);
-
-                  $select_value_in = $obj->rowid;
-                  $select_value_out = $obj->rowid;
-
-                  if ($select_in == 1) {
-                          $select_value_in = $obj->account_number;
-                  }
-                  if ($select_out == 1) {
-                          $select_value_out = $obj->account_number;
-                  }
-
-                  // Remember guy's we store in database llx_facturedet the rowid of accounting_account and not the account_number
-                  // Because same account_number can be share between different accounting_system and do have the same meaning
-                  if (($selectid != '') && $selectid == $select_value_in) {
-                          $selected = $select_value_out;
-                  }
-
-                  $options[$select_value_out] = $label;
-          }
-
-          $out .= Form::selectarray($htmlname, $options, $selected, $showempty, 0, 0, '', 0, 0, 0, '', 'maxwidth300');
-          $this->db->free($resql);
-          return $out;
-  }
+    /**
+    * Return list of accounts with label by chart of accounts
+    *
+    * @param string  $selectid   Preselected chart of accounts
+    * @param string  $htmlname   Name of field in html form
+    * @param int     $showempty  Add an empty field
+    * @param array   $event      Event options
+    * @param int     $select_in  Value is a aa.rowid (0 default) or aa.account_number (1)
+    * @param int     $select_out Set value returned by select 0=rowid (default), 1=account_number
+    * @param int     $aabase     Set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by this number
+    * @return string String with HTML select
+    */
+    function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') {
+        global $conf;
+        
+        require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
+        
+        $pcgver = $conf->global->CHARTOFACCOUNTS;
+        
+        $sql = "SELECT DISTINCT ab.numero_compte as account_number, aa.label as label, aa.rowid as rowid, aa.fk_pcg_version";
+        $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as ab";
+        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = ab.numero_compte";
+        $sql .= " AND aa.active = 1";
+        $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
+        $sql .= " AND asy.rowid = " . $pcgver;
+    	if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " AND ab.entity IN (" . getEntity("accountancy", 1) . ")";
+		}
+        $sql .= " ORDER BY account_number ASC";
+        
+        dol_syslog(get_class($this) . "::select_account", LOG_DEBUG);
+        $resql = $this->db->query($sql);
+        
+        if (! $resql) {
+            $this->error = "Error " . $this->db->lasterror();
+            dol_syslog(get_class($this) . "::select_account " . $this->error, LOG_ERR);
+            return - 1;
+        }
+        
+        $out = ajax_combobox($htmlname, $event);
+        
+        $options = array();
+        $selected = null;
+        
+        while ($obj = $this->db->fetch_object($resql)) {
+            $label = length_accountg($obj->account_number) . ' - ' . $obj->label;
+            
+            $select_value_in = $obj->rowid;
+            $select_value_out = $obj->rowid;
+            
+            if ($select_in == 1) {
+                $select_value_in = $obj->account_number;
+            }
+            if ($select_out == 1) {
+                $select_value_out = $obj->account_number;
+            }
+            
+            // Remember guy's we store in database llx_facturedet the rowid of accounting_account and not the account_number
+            // Because same account_number can be share between different accounting_system and do have the same meaning
+            if (($selectid != '') && $selectid == $select_value_in) {
+                $selected = $select_value_out;
+            }
+            
+            $options[$select_value_out] = $label;
+        }
+        
+        $out .= Form::selectarray($htmlname, $options, $selected, $showempty, 0, 0, '', 0, 0, 0, '', 'maxwidth300');
+        $this->db->free($resql);
+        return $out;
+    }
 
   
 	
@@ -1421,25 +1456,26 @@ class BookKeeping extends CommonObject
 	* Description of a root accounting account 
 	*
 	* @param 	string 	$account	Accounting account
-	* @return 	string 	
+	* @return 	string 	            Root account
 	*/
 	function get_compte_racine($account = null)
 	{	
 		global $conf;
 		$pcgver = $conf->global->CHARTOFACCOUNTS;
-
-
-    $sql  = "SELECT root.account_number, root.label as label";
-    $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as aa";
-    $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
-    $sql .= " AND asy.rowid = " . $pcgver;
-    $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as parent ON aa.account_parent = parent.rowid";
-    $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as root ON parent.account_parent = root.rowid";
-    $sql .= " WHERE aa.account_number = '" . $account . "'";  
-    $sql .= " AND parent.active = 1";
-    $sql .= " AND root.active = 1";
-
-
+        
+        $sql  = "SELECT root.account_number, root.label as label";
+        $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as aa";
+        $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
+        $sql .= " AND asy.rowid = " . $pcgver;
+        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as parent ON aa.account_parent = parent.rowid";
+        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as root ON parent.account_parent = root.rowid";
+        $sql .= " WHERE aa.account_number = '" . $account . "'";  
+        $sql .= " AND parent.active = 1";
+        $sql .= " AND root.active = 1";
+        if (! empty($conf->multicompany->enabled)) {
+            $sql .= " AND aa.entity IN (" . getEntity("accountancy", 1) . ")";
+        }
+        
 		dol_syslog(get_class($this) . "::select_account sql=" . $sql, LOG_DEBUG);
 		$resql = $this->db->query($sql);
 		if ($resql) {
@@ -1463,11 +1499,12 @@ class BookKeeping extends CommonObject
 	* Description of accounting account
 	*
 	* @param 	string 	$account	Accounting account
-	* @return 	string 	
+	* @return 	string 	            Account desc
 	*/
 	function get_compte_desc($account = null)
 	{	
 		global $conf;
+		
 		$pcgver = $conf->global->CHARTOFACCOUNTS;
 		$sql  = "SELECT aa.account_number, aa.label, aa.rowid, aa.fk_pcg_version, cat.label as category";
 		$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as aa ";
@@ -1476,6 +1513,10 @@ class BookKeeping extends CommonObject
 		$sql .= " AND asy.rowid = " . $pcgver;
 		$sql .= " AND aa.active = 1";
 		$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_accounting_category as cat ON aa.fk_accounting_category = cat.rowid";
+		if (! empty($conf->multicompany->enabled)) {
+		    $sql .= " WHERE aa.entity IN (" . getEntity("accountancy", 1) . ")";
+		}
+		
 		dol_syslog(get_class($this) . "::select_account sql=" . $sql, LOG_DEBUG);
 		$resql = $this->db->query($sql);
 		if ($resql) {
@@ -1499,6 +1540,7 @@ class BookKeeping extends CommonObject
 	
 }
 
+
 /**
  * Class BookKeepingLine
  */