fixed kilo in metals 3

This commit is contained in:
2026-06-23 21:28:49 +03:30
parent 6c15ff1830
commit f271df9cd6
2 changed files with 100 additions and 2 deletions
+30 -2
View File
@@ -5,26 +5,54 @@ namespace App\Http\Controllers\Admin;
use App\DB\Te\TableEngine;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Services\BalanceReportService;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function table(Request $request){
$records = Order::with(['customer','transactions']);
$balanceReport = app(BalanceReportService::class);
$records = Order::with([
'customer',
'transactions.product:id,title,unit,metal_id,group_type,amount,trade_by_quantity,direct_price',
]);
TableEngine::create($records, $request->all())
->initSearch(['customer.name'])
->select([
'*',Order::$SELECT_STS_STR
])->export($records);
if (isset($records['rows'])) {
foreach ($records['rows'] as &$row) {
$balanceReport->enrichOrderTableRow($row);
}
unset($row);
}
return response()->json($records);
}
public function singleOrderTable(Request $request){
$records = Order::with(['customer'])->where('type',2);
$balanceReport = app(BalanceReportService::class);
$records = Order::with([
'customer',
'transactions.product:id,title,unit,metal_id,group_type,amount,trade_by_quantity,direct_price',
])->where('type',2);
TableEngine::create($records, $request->all())
->initSearch(['customer.name'])
->select([
'*',Order::$SELECT_STS_STR
])->export($records);
if (isset($records['rows'])) {
foreach ($records['rows'] as &$row) {
$balanceReport->enrichOrderTableRow($row);
}
unset($row);
}
return response()->json($records);
}
}
+70
View File
@@ -355,6 +355,76 @@ class BalanceReportService
return null;
}
public function enrichOrderTableRow(mixed &$row): void
{
$product = $this->resolveOrderProduct($row);
$unit = $this->resolveOrderAmountUnit($product);
$amount = (float) ($this->lineValue($row, 'amount') ?? 0);
$displayAmount = $this->resolveOrderDisplayAmount($amount, $product);
if (is_array($row)) {
$row['amount_unit'] = $unit;
$row['amount_display'] = $displayAmount;
return;
}
if (is_object($row)) {
$row->amount_unit = $unit;
$row->amount_display = $displayAmount;
}
}
public function resolveOrderAmountUnit(?object $product): string
{
if ($product === null) {
return Controller::tradeWeightUnit();
}
return Controller::productQuantityUnit(Controller::productUnitPayload($product));
}
private function resolveOrderDisplayAmount(float $amount, ?object $product): float
{
if ($product === null || abs($amount) < 0.0000001) {
return round($amount, 3);
}
$payload = Controller::productUnitPayload($product);
$productUnit = trim((string) ($payload['unit'] ?? ''));
if (!Controller::isWeightBasedProductUnit($productUnit)) {
return round($amount, 3);
}
$tradeUnit = Controller::tradeWeightUnit();
if ($productUnit !== $tradeUnit) {
return round(Controller::convertWeight($amount, $tradeUnit, $productUnit), 3);
}
return round($amount, 3);
}
private function resolveOrderProduct(mixed $order): ?object
{
$transactions = $this->lineValue($order, 'transactions');
if ($transactions instanceof \Illuminate\Support\Collection) {
$transactions = $transactions->all();
}
if (!is_array($transactions)) {
return null;
}
foreach ($transactions as $tx) {
$product = is_object($tx) ? ($tx->product ?? null) : ($tx['product'] ?? null);
if ($product) {
return is_object($product) ? $product : (object) $product;
}
}
return null;
}
private function lineValue(mixed $line, string $key): mixed
{
if (is_array($line)) {