| 12345678910111213141516171819202122232425262728293031323334353637 | <?php
namespace App\DTO;
use App\Models\Accounting\DocumentLineItem;
use App\Utilities\Currency\CurrencyConverter;
readonly class LineItemDTO
{
    public function __construct(
        public string $name,
        public string $description,
        public int $quantity,
        public string $unitPrice,
        public string $subtotal,
    ) {}
    public static function fromModel(DocumentLineItem $lineItem): self
    {
        return new self(
            name: $lineItem->offering->name ?? '',
            description: $lineItem->description ?? '',
            quantity: $lineItem->quantity,
            unitPrice: self::formatToMoney($lineItem->unit_price, $lineItem->documentable->currency_code),
            subtotal: self::formatToMoney($lineItem->subtotal, $lineItem->documentable->currency_code),
        );
    }
    protected static function formatToMoney(float | string | int $value, ?string $currencyCode): string
    {
        if (is_int($value)) {
            return CurrencyConverter::formatCentsToMoney($value, $currencyCode);
        }
        return CurrencyConverter::formatToMoney($value, $currencyCode);
    }
}
 |