65 lines
2.2 KiB
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']);
|
|
});
|
|
}
|
|
}
|