| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <?php
- declare(strict_types=1);
- namespace App\Services;
- use App\Models\CommonCatalogItem;
- use App\Models\Setting;
- class TechnicalDescriptionService
- {
- public const MODE_CHARACTERISTICS_SHORT = 'characteristics_short';
- public const MODE_CHARACTERISTICS_FULL = 'characteristics_full';
- public const MODE_SHORT = 'short';
- public const MODE_FULL = 'full';
- public const MODE_CHARACTERISTICS = 'characteristics';
- public const DESCRIPTION_MODES = [
- self::MODE_CHARACTERISTICS_SHORT => 'Характеристики + краткое описание',
- self::MODE_CHARACTERISTICS_FULL => 'Характеристики + полное описание',
- self::MODE_SHORT => 'Только краткое описание',
- self::MODE_FULL => 'Только полное описание',
- self::MODE_CHARACTERISTICS => 'Только характеристики',
- ];
- public function priceField(): string
- {
- return Setting::technicalDescriptionPriceField();
- }
- public function priceLabel(): string
- {
- return CommonCatalogItem::PRICE_FIELDS[$this->priceField()];
- }
- public function price(CommonCatalogItem $item): ?float
- {
- $value = $item->{$this->priceField()};
- return $value === null ? null : (float) $value;
- }
- public function formattedPrice(CommonCatalogItem $item): string
- {
- $price = $this->price($item);
- return $price === null ? '' : number_format($price, 2, '.', ' ');
- }
- public function description(CommonCatalogItem $item, string $mode): string
- {
- $parts = match ($mode) {
- self::MODE_CHARACTERISTICS_SHORT => [$item->characteristics, $item->technical_description_short],
- self::MODE_CHARACTERISTICS_FULL => [$item->characteristics, $item->technical_description],
- self::MODE_SHORT => [$item->technical_description_short],
- self::MODE_FULL => [$item->technical_description],
- default => [$item->characteristics],
- };
- return collect($parts)
- ->map(fn (mixed $value): string => trim((string) $value))
- ->filter()
- ->implode("\n");
- }
- }
|