+//-----------------------------------------------------------------------------------------
+
+function handle_negative_inventory($stock_id, $quantity, $standard_cost, $date_)
+{
+ //If negative adjustment result in negative or zero inventory
+ //then difference should be adjusted
+ $qoh = get_qoh_on_date($stock_id);
+
+ if ($qoh + $quantity <= 0 && $qoh > 0) //Positive inventory turning zero/negative
+ {
+ global $Refs;
+
+ $id = get_next_trans_no(ST_JOURNAL);
+ $ref = $Refs->get_next(ST_JOURNAL);
+ $diff = round($qoh*get_standard_cost($stock_id) + $quantity*$standard_cost, user_price_dec());
+
+ if ($diff != 0)
+ {
+ begin_transaction();
+ add_journal(ST_JOURNAL, $id, $diff, $date_, get_company_currency(), $ref);
+ $Refs->save(ST_JOURNAL, $id, $ref);
+
+ $stock_gl_code = get_stock_gl_code($stock_id);
+ $memo = _("Zero/negative inventory handling");
+ //Reverse the inventory effect if $qoh <=0
+ add_gl_trans_std_cost(ST_JOURNAL, $id, $date_,
+ $stock_gl_code["inventory_account"],
+ $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,
+ -$diff);
+ //GL Posting to inventory adjustment account
+ add_gl_trans_std_cost(ST_JOURNAL, $id, $date_,
+ $stock_gl_code["adjustment_account"],
+ $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,
+ $diff);
+
+ add_audit_trail(ST_JOURNAL, $id, $date_);
+ add_comments(ST_JOURNAL, $id, $date_, $memo);
+ $Refs->save(ST_JOURNAL, $id, $ref);
+ commit_transaction();
+ }
+ }
+}
+