pdv.backend/app/Http/Controllers/App/UnitEquivalenceController.php

70 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Http\Requests\App\UnitEquivalenceStoreRequest;
use App\Http\Requests\App\UnitEquivalenceUpdateRequest;
use App\Models\Inventory;
use App\Models\UnitEquivalence;
use Notsoweb\ApiResponse\Enums\ApiResponse;
class UnitEquivalenceController extends Controller
{
public function index(Inventory $inventory)
{
$equivalences = $inventory->unitEquivalences()
->with('unitOfMeasure')
->get()
->map(function ($eq) use ($inventory) {
$basePrice = $inventory->price?->retail_price ?? 0;
return [
'id' => $eq->id,
'unit_of_measure_id' => $eq->unit_of_measure_id,
'unit_name' => $eq->unitOfMeasure->name,
'unit_abbreviation' => $eq->unitOfMeasure->abbreviation,
'conversion_factor' => $eq->conversion_factor,
'retail_price' => $eq->retail_price ?? round($basePrice * $eq->conversion_factor, 2),
'is_active' => $eq->is_active,
'created_at' => $eq->created_at,
];
});
return ApiResponse::OK->response([
'equivalences' => $equivalences,
'base_unit' => $inventory->unitOfMeasure,
]);
}
public function store(UnitEquivalenceStoreRequest $request, Inventory $inventory)
{
$equivalence = $inventory->unitEquivalences()->create($request->validated());
$equivalence->load('unitOfMeasure');
return ApiResponse::CREATED->response([
'message' => 'Equivalencia creada correctamente.',
'equivalence' => $equivalence,
]);
}
public function update(UnitEquivalenceUpdateRequest $request, Inventory $inventory, UnitEquivalence $equivalencia)
{
$equivalencia->update($request->validated());
return ApiResponse::OK->response([
'message' => 'Equivalencia actualizada correctamente.',
'equivalence' => $equivalencia->fresh('unitOfMeasure'),
]);
}
public function destroy(Inventory $inventory, UnitEquivalence $equivalencia)
{
$equivalencia->delete();
return ApiResponse::OK->response([
'message' => 'Equivalencia eliminada correctamente.',
]);
}
}