pdv.backend/app/Services/ProductService.php

65 lines
2.2 KiB
PHP

<?php namespace App\Services;
use App\Models\CatalogItem;
use App\Models\Price;
use Illuminate\Support\Facades\DB;
class ProductService
{
public function createProduct(array $data)
{
return DB::transaction(function () use ($data) {
$catalogItem = CatalogItem::create([
'name' => $data['name'],
'sku' => $data['sku'],
'barcode' => $data['barcode'] ?? null,
'category_id' => $data['category_id'],
'stock' => $data['stock'] ?? 0,
]);
$price = Price::create([
'catalog_item_id' => $catalogItem->id,
'cost' => $data['cost'],
'retail_price' => $data['retail_price'],
'tax' => $data['tax'] ?? 16.00,
]);
return $catalogItem->load(['category', 'price']);
});
}
public function updateProduct(CatalogItem $catalogItem, array $data)
{
return DB::transaction(function () use ($catalogItem, $data) {
// Actualizar campos de CatalogItem solo si están presentes
$catalogItemData = array_filter([
'name' => $data['name'] ?? null,
'sku' => $data['sku'] ?? null,
'barcode' => $data['barcode'] ?? null,
'category_id' => $data['category_id'] ?? null,
'stock' => $data['stock'] ?? null,
], fn($value) => $value !== null);
if (!empty($catalogItemData)) {
$catalogItem->update($catalogItemData);
}
// Actualizar campos de Price solo si están presentes
$priceData = array_filter([
'cost' => $data['cost'] ?? null,
'retail_price' => $data['retail_price'] ?? null,
'tax' => $data['tax'] ?? null,
], fn($value) => $value !== null);
if (!empty($priceData)) {
$catalogItem->price()->updateOrCreate(
['catalog_item_id' => $catalogItem->id],
$priceData
);
}
return $catalogItem->fresh(['category', 'price']);
});
}
}