From: Janusz Dobrowolski Date: Fri, 30 Apr 2010 13:08:38 +0000 (+0000) Subject: Reference recover afer voiding of last transaction in sequence. X-Git-Tag: v2.4.2~19^2~901 X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=c895b045c679a5295f40881f918114cfbd3ccf3f;p=fa-stable.git Reference recover afer voiding of last transaction in sequence. --- diff --git a/admin/db/voiding_db.inc b/admin/db/voiding_db.inc index 55a7308f..6bda4029 100644 --- a/admin/db/voiding_db.inc +++ b/admin/db/voiding_db.inc @@ -16,6 +16,7 @@ include_once($path_to_root . "/manufacturing/includes/manufacturing_db.inc"); function void_transaction($type, $type_no, $date_, $memo_) { + global $Refs; $void_entry = get_voided_entry($type, $type_no); if ($void_entry != null) @@ -108,6 +109,7 @@ function void_transaction($type, $type_no, $date_, $memo_) // only add an entry if it's actually been voided add_audit_trail($type, $type_no, $date_, _("Voided.")."\n".$memo_); add_voided_entry($type, $type_no, $date_, $memo_); + $Refs->restore_last($type, $type_no); return true; } diff --git a/includes/db/references_db.inc b/includes/db/references_db.inc index e5212c65..71314463 100644 --- a/includes/db/references_db.inc +++ b/includes/db/references_db.inc @@ -53,8 +53,12 @@ function delete_reference($type, $id) function find_reference($type, $reference) { - $sql = "SELECT id FROM ".TB_PREF."refs WHERE type=".db_escape($type) - ." AND reference=".db_escape($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"); diff --git a/includes/references.inc b/includes/references.inc index 420e960e..671db934 100644 --- a/includes/references.inc +++ b/includes/references.inc @@ -37,7 +37,7 @@ class references if ($reference != 'auto') $this->save_last($reference, $type); } - + // check if reference is used for any non voided transaction (used for ST_JOURNALENTRY type) function exists($type, $reference) { return (find_reference($type, $reference) != null); @@ -53,6 +53,17 @@ class references { return get_next_reference($type); } + // + // Restore previous reference if voided trans ref was the last one. + // + function restore_last($type, $id) + { + $reference = $this->get($type, $id); + $last = $this->increment($this->get_next($type), true); //decrement + if ($reference==$last) { + save_next_reference($type, $last); + } + } //------------------------------------ @@ -60,8 +71,10 @@ class references { return strlen(trim($reference)) > 0; } - - function increment($reference) + // + // Increments (or decrements if $back==true) reference template + // + function increment($reference, $back=false) { // New method done by Pete. So f.i. WA036 will increment to WA037 and so on. // If $reference contains at least one group of digits, @@ -74,14 +87,14 @@ class references list($all, $prefix, $number, $postfix) = $result; $dig_count = strlen($number); // How many digits? eg. 0003 = 4 $fmt = '%0' . $dig_count . 'd'; // Make a format string - leading zeroes - $nextval = sprintf($fmt, intval($number + 1)); // Add one on, and put prefix back on + $val = intval($number + ($back ? ($number<1 ? 0 : -1) : 1)); + $nextval = sprintf($fmt, $val); // Add one on, and put prefix back on return $prefix.$nextval.$postfix; } else return $reference; } - //------------------------------------ }