public function canculate_fifo_profit ($ commodity_id, $ warehouse_id, $ sale_quantity, $ sale_price) {
$ ci = & get_instance (); < /p>
$CI->db->select('*');
$CI->db->from(db_prefix() . 'goods_transaction_detail');
$CI->db->where('commodity_id', $commodity_id);
$CI->db->where('warehouse_id', $warehouse_id);
$CI->db->where('status', 1); // Only goods receipt
$CI->db->where('quantity >', 0);
$CI->db->order_by('date_add', 'ASC');
$batches = $CI->db->get()->result();
$remaining_qty = $sale_quantity;
$total_purchase_cost = 0;
foreach ($batches as $batch) {
if ($remaining_qty quantity, $remaining_qty);
$cost = $consume_qty * floatval($batch->purchase_price);
// This line doesn't seem to work
$total_purchase_cost += $cost;
// Even this line doesn't work:
// $total_purchase_cost += 10;
// This line works perfectly
$CI->db->set('quantity', 'quantity - ' . $consume_qty, false);
$CI->db->where('id', $batch->id);
$CI->db->update(db_prefix() . 'goods_transaction_detail');
$remaining_qty -= $consume_qty;
}
}
$total_sales_value = $sale_quantity * $sale_price;
$profit = $total_sales_value - $total_purchase_cost;
return [
'cost' => $total_purchase_cost,
'revenue' => $total_sales_value,
'profit' => $profit
];
< /code>
} < /p>
Цикл выполняется правильно, потому что запрос на обновление работает и уменьшает количество, как и ожидалось. Измените значение переменной. < /p>
Вне цикла, оно всегда возвращает 0. < /p>
Проверенный результат запроса CodeIgniter - $ партии содержит допустимые данные.
подтверждено, что это не является проблемой Scoping - Variable объявлено вне и модифицирована внутри. Но это остается 0.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ter-even-w
Мобильная версия