Inventory Adjustment: removed movement type, cleanups.
[fa-stable.git] / includes / db / references_db.inc
index 9b769859da7269053c91462100cb78fa56de1dab..4933d8dbad0174814707b4bb792c0b8ce77a2013 100644 (file)
@@ -1,29 +1,39 @@
 <?php
-
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
 //--------------------------------------------------------------------------------------------------
 
 function get_reference($type, $id)
 {
-       $sql = "SELECT * FROM ".TB_PREF."refs WHERE type=$type AND id=$id";
+       $sql = "SELECT * FROM ".TB_PREF."refs WHERE type=".db_escape($type)." AND id=".db_escape($id);
 
-       return db_query($sql, "could not query reference table");
+       $result = db_query($sql, "could not query reference table");
+    $row = db_fetch($result);
+    return $row['reference'];
 }
 
 //--------------------------------------------------------------------------------------------------
-
-function add_reference($type, $id, $reference)
+function update_reference($type, $id, $reference)
 {
-       $sql = "INSERT INTO ".TB_PREF."refs (type, id, reference)
-               VALUES ($type, $id, " . db_quote(trim($reference)) . ")";
-
-       db_query($sql, "could not add reference entry");
+    $sql = "REPLACE ".TB_PREF."refs SET reference=".db_escape($reference)
+                       .", type=".db_escape($type).", id=".db_escape($id);
+    db_query($sql, "could not update reference entry");
 }
 
 //--------------------------------------------------------------------------------------------------
 
 function delete_reference($type, $id)
 {
-       $sql = "DELETE FROM ".TB_PREF."refs WHERE type=$type AND id=$id";
+       $sql = "DELETE FROM ".TB_PREF."refs WHERE type=".db_escape($type)." AND id=".db_escape($id);
 
        return db_query($sql, "could not delete from reference table");
 }
@@ -32,7 +42,12 @@ function delete_reference($type, $id)
 
 function find_reference($type, $reference)
 {
-       $sql = "SELECT id FROM ".TB_PREF."refs WHERE type=$type AND reference='$reference'";
+       // ignore refs references for voided transactions
+       $sql = "SELECT r.id FROM ".TB_PREF."refs r LEFT JOIN ".TB_PREF."voided v ON"
+               ." r.type=v.type AND r.id=v.id"
+               ." WHERE r.type=".db_escape($type)
+               ." AND reference=".db_escape($reference)
+               ." AND ISNULL(`memo_`)";
 
        $result = db_query($sql, "could not query reference table");
 
@@ -43,7 +58,8 @@ function find_reference($type, $reference)
 
 function save_next_reference($type, $reference)
 {
-    $sql = "UPDATE ".TB_PREF."sys_types SET next_reference=" . db_quote(trim($reference)) . " WHERE type_id = $type";
+    $sql = "UPDATE ".TB_PREF."sys_types SET next_reference=" . db_escape(trim($reference)) 
+               . " WHERE type_id = ".db_escape($type);
 
        db_query($sql, "The next transaction ref for $type could not be updated");
 }
@@ -52,7 +68,7 @@ function save_next_reference($type, $reference)
 
 function get_next_reference($type)
 {
-    $sql = "SELECT next_reference FROM ".TB_PREF."sys_types WHERE type_id = $type";
+    $sql = "SELECT next_reference FROM ".TB_PREF."sys_types WHERE type_id = ".db_escape($type);
 
     $result = db_query($sql,"The last transaction ref for $type could not be retreived");
 
@@ -60,4 +76,47 @@ function get_next_reference($type)
     return $row[0];
 }
 
-?>
\ No newline at end of file
+//----------------------------------------------------------------------------
+//
+//     Check if reference was not used so far (for other transaction than $trans_no)
+//
+function is_new_reference($ref, $type, $trans_no=0)
+{
+       $db_info = get_systype_db_info($type);
+       $db_name = $db_info[0];
+       $db_type = $db_info[1];
+       $db_trans = $db_info[2];
+       $db_ref = $db_info[3];
+       
+       $ref = db_escape(trim($ref));
+       $type = db_escape($type);
+       
+       if ($db_ref == null) { // journal or bank trans store references in refs table
+               $db_name = TB_PREF."refs";
+               $db_type = 'type';
+               $db_trans = 'id';
+               $db_ref = 'reference';
+       }
+
+       if ($db_type != null) {
+               $sql = "SELECT $db_ref FROM $db_name tbl
+                       LEFT JOIN ".TB_PREF."voided v ON 
+                               tbl.$db_type=v.type AND tbl.$db_trans=v.id
+                       WHERE $db_ref=$ref AND ISNULL(v.id)
+                               AND tbl.$db_type=$type";
+       } else {
+               $sql = "SELECT $db_ref ref FROM $db_name tbl
+                       LEFT JOIN ".TB_PREF."voided v ON 
+                               v.type=$type AND tbl.$db_trans=v.id
+                       WHERE $db_ref=$ref AND ISNULL(v.id)";
+       }
+       if ($trans_no)
+                       $sql .= " AND tbl.`$db_trans` != ".db_escape($trans_no);
+
+       $result = db_query($sql, "could not test for unique reference");
+
+       return (db_num_rows($result) == 0);
+
+}
+
+