store/app/Services/Manage/CuttingResultPriceResolver.php
Yoga Pangestu 9539ff7042 refactor: remove StockController and related stock verification logic
- Deleted `data-table-actions.vue` component as it is no longer needed.
- Removed `CuttingResultPriceItem` type and related properties from `cutting.ts`.
- Updated routes in `web.php` to eliminate stock verification routes and permissions.
- Removed `StockTest.php` file and its associated tests for stock verification and management.
- Adjusted `CuttingTest.php` to reflect changes in cutting results handling and removed references to product variants.
2026-07-19 17:29:19 +07:00

71 lines
2.4 KiB
PHP

<?php
namespace App\Services\Manage;
use App\Enums\PriceType;
use App\Models\ProductPrice;
use App\Services\Concerns\CachesQuery;
use Illuminate\Support\Collection;
class CuttingResultPriceResolver
{
use CachesQuery;
public function resolve(int $productVariantId, PriceType $priceType): ?ProductPrice
{
return ProductPrice::query()
->where('variant_id', $productVariantId)
->where('type', $priceType)
->first();
}
public function latestPricesForVariant(int $productVariantId): Collection
{
return $this->cacheRemember("prices:variant:{$productVariantId}", 900, function () use ($productVariantId) {
return ProductPrice::query()
->where('variant_id', $productVariantId)
->get()
->map(fn (ProductPrice $price) => (object) [
'price_type' => $price->type,
'price' => $price->price,
'price_formatted' => $price->price_formatted,
'cost_per_unit' => 0,
'cost_per_unit_formatted' => 'Rp 0',
]);
});
}
public function latestPricesForVariants(array $variantIds): Collection
{
$cached = $this->cacheRemember('prices:variants:'.md5(implode(',', $variantIds)), 900, function () use ($variantIds) {
if (empty($variantIds)) {
return [];
}
$productPrices = ProductPrice::query()
->whereIn('variant_id', $variantIds)
->get()
->groupBy(fn (ProductPrice $price) => $price->variant_id.'-'.$price->type->value);
$results = [];
foreach ($variantIds as $variantId) {
foreach (PriceType::cases() as $priceType) {
$key = $variantId.'-'.$priceType->value;
if ($productPrices->has($key)) {
$pp = $productPrices->get($key)->first();
$results[$variantId][] = [
'price_type' => $pp->type->value,
'price' => (int) $pp->price,
'price_formatted' => $pp->price_formatted,
];
}
}
}
return $results;
});
return collect(is_array($cached) ? $cached : [])->map(fn ($prices) => collect($prices));
}
}