$qty = 0;
$flag = 0;
- $negative_trans_id = 1;
+ $negative_trans_id = -1;
while ($myrow = db_fetch($result))
{
$negative_trans_id = $myrow['trans_id'];
}
if ($qty >= 0)
- $flag = 0;
+ $flag = 0;
}
-
- return $negative_trans_id;
+
+ if ($flag == 1)
+ return $negative_trans_id;
+ else
+ return false;
}
//-------------------------------------------------------------------
function get_deliveries_from_trans($stock_id, $from)
{
// -ve qty is delivery either by ST_CUSTDELIVERY or inventory adjustment
- $sql = "SELECT SUM(-qty), SUM(-qty*standard_cost) FROM ".TB_PREF."stock_moves
- WHERE stock_id=".db_escape($stock_id)." AND qty < 0 AND
- trans_id>='$from' GROUP BY stock_id";
+ //Price for GRN and SUPPCREDIT and std_cost for other trans_types
+ $sql = "SELECT SUM(-qty), SUM(-qty*IF(type=".ST_SUPPRECEIVE." OR type=".ST_SUPPCREDIT.", price, standard_cost))
+ FROM ".TB_PREF."stock_moves
+ WHERE stock_id=".db_escape($stock_id)." AND qty < 0 AND
+ trans_id>='$from' GROUP BY stock_id";
$result = db_query($sql, "The deliveries could not be updated");
$row = db_fetch_row($result);
- $sql = "SELECT standard_cost FROM ".TB_PREF."stock_moves
- WHERE stock_id=".db_escape($stock_id)
- ." AND trans_id ='$from'";
- $result = db_query($sql, "The deliveries could not be updated");
- $cost = db_fetch_row($result);
-
+ $sql = "SELECT IF(type=".ST_SUPPRECEIVE." OR type=".ST_SUPPCREDIT.", price, standard_cost)
+ FROM ".TB_PREF."stock_moves
+ WHERE stock_id=".db_escape($stock_id)
+ ." AND trans_id ='$from'";
+ $result = db_query($sql, "The deliveries could not be updated");
+ $cost = db_fetch_row($result);
+
// Adjusting QOH valuation
$sql = "SELECT SUM(qty) FROM ".TB_PREF."stock_moves
WHERE stock_id=".db_escape($stock_id)." AND
trans_id<'$from' GROUP BY stock_id";
$result = db_query($sql, "The deliveries could not be updated");
$qoh = db_fetch_row($result);
-
- $qty = $row[0] - $qoh[0]; //QOH prior to -ve stock is subtracted\r
+
+ $qty = $row[0] - $qoh[0]; //QOH prior to -ve stock is subtracted
$final_cost = $row[1] - $qoh[0]*$cost[0];
return array($qty,$final_cost);
return;
$from = last_negative_stock_trans_id($stock_id, $to);
- if ($from == false || $from == "")
+ if ($from == false || $from == -1)
return;
$row = get_deliveries_from_trans($stock_id, $from);
$new_purchase_cost = $row[0] * $material_cost;
$purchase_diff = $new_purchase_cost - $old_purchase_cost;
}
-
+
$diff = $sales_diff - $purchase_diff;
if ($diff != 0)
}
//-----------------------------------------------------------------------------------------
-\r
+
function handle_negative_inventory($stock_id, $quantity, $standard_cost, $date_)
{
- //If negative adjustment result in negative or zero inventory \r
+ //If negative adjustment result in negative or zero inventory
//then difference should be adjusted
$qoh = get_qoh_on_date($stock_id);
function void_stock_move($type, $type_no)
{
- \r
- $sql = "SELECT * from ".TB_PREF."stock_moves WHERE type=".db_escape($type)." AND trans_no=".db_escape($type_no);
+ $sql = "SELECT stock_id, standard_cost, loc_code, tran_date, reference, person_id, visible, discount_percent, price,
+ sum(qty) qty FROM ".TB_PREF."stock_moves WHERE type=".db_escape($type)." AND trans_no=".db_escape($type_no)."
+ GROUP BY stock_id, standard_cost, loc_code, tran_date, reference, person_id, visible, discount_percent, price HAVING sum(qty) <> 0";
+
$result = db_query($sql, "Could not void stock moves");
while ($row = db_fetch($result))
{
//Skip cost averaging of service items
if (is_inventory_item($row["stock_id"]))
- {
+ {
// The cost has to be adjusted.
- // Transaction rates are stored either as price or standard_cost depending on types\r
- $types = array(ST_SUPPCREDIT);
+ // Transaction rates are stored either as price or standard_cost depending on types
+ $types = array(ST_SUPPCREDIT, ST_SUPPRECEIVE);
if (in_array($type,$types))
$trans_rate = $row["price"];
else
update_average_material_cost(0, $row["stock_id"],
$trans_rate, -$row["qty"], sql2date($row["tran_date"]));
}
-
+
//Post stock move for service items also
add_stock_move($type, $row["stock_id"], $type_no, $row["loc_code"],
sql2date($row["tran_date"]), $row["reference"], -$row["qty"]
display_db_error("could not retreive the location name for $loc_code", $sql, true);
}
-
-//--------------------------------------------------------------------------------------------------
-
-
-?>
\ No newline at end of file