@joe,
This commit needs one more commit in the function add_stock_adjustment_item on /inventory/includes/db/items_adjust_db.inc as follows
function add_stock_adjustment_item($adj_id, $stock_id, $location, $date_, $reference,
$quantity, $price, $memo_)
{
$mb_flag = get_mb_flag($stock_id);
if (is_service($mb_flag))
{
display_db_error("Cannot do inventory adjustment for Service item : $stock_id", "");
}
update_average_material_cost(null, $stock_id, $price, $quantity, $date_);
if (is_fixed_asset($mb_flag)) {
$sql = "UPDATE ".TB_PREF."stock_master SET inactive=1
WHERE stock_id=".db_escape($stock_id);
db_query($sql,"The inactive flag for the fixed asset could not be updated");
}
$standard_cost = get_unit_cost($stock_id); //added by faisal
add_stock_move(ST_INVADJUST, $stock_id, $adj_id, $location,
$date_, $reference, $quantity, $standard_cost, $price);
$inv_value = $price * $quantity;
$adj_value = $price * -($quantity);
if (is_fixed_asset($mb_flag)) {
// get the initial value of the fixed assset.
$row = get_fixed_asset_move($stock_id, ST_SUPPRECEIVE);
$inv_value = $row['price'] * $quantity;
$adj_value = (-($row['price']) + $price) * $quantity;
}
if ($price > 0 || is_fixed_asset($mb_flag))
{
$stock_gl_codes = get_stock_gl_code($stock_id);
add_gl_trans_std_cost(ST_INVADJUST, $adj_id, $date_,
$stock_gl_codes['adjustment_account'], $stock_gl_codes['dimension_id'], $stock_gl_codes['dimension2_id'], $memo_, $adj_value );
add_gl_trans_std_cost(ST_INVADJUST, $adj_id, $date_, $stock_gl_codes['inventory_account'], 0, 0, $memo_, $inv_value);
}
if (is_fixed_asset($mb_flag)) {
// Additional gl entry for fixed asset.
$grn_act = get_company_pref('default_loss_on_asset_disposal_act');
add_gl_trans_std_cost(ST_INVADJUST, $adj_id, $date_, $grn_act, 0, 0, $memo_, ($price * -($quantity)));
}
}
FOR LEGACY DATA ACCURACY
In order to keep rep301 and rep308 workable with older data than this commit one update query needs to be executed to bring standard_cost values in the price field for all transactions through inventory_adjustment.
UPDATE stock_moves SET price=standard_cost WHERE type=17
WORKAROUND FOR COST UPDATE
@itronics for logging Cost Update tracking in stock_moves I have a workaround solution. May be you endorse it. Just sharing the idea. If approved I can work on code.
We can execute 2 Inventory Adjustments per location for that particular item when cost update is executed.
#1. This will bring the QOH to ZERO even for -ve inventory on the prevailing cost price in the system.
#2. This will bring the QOH on the same position either +ve or -ve at the New Cost give through Cost Update.
With this workaround we will be able to bring correct results in rep301 and rep308 as well.
EXCHANGE RATE AFFECT
In this function get_domestic_price the exchange rate factor is applied when person_id > 0. But for Inventory Adjustments person_id is always 0
However you are right that there shall be a column to record Exchange Rate of that transaction so that any change in exchange_rates shall not affect the transaction.