Files
backend-mm/app/Models/Ecommerce/Product/Order/Shipping/OrderShipping.php
2025-09-25 03:03:31 +05:00

202 lines
3.9 KiB
PHP

<?php
namespace App\Models\Ecommerce\Product\Order\Shipping;
use App\Models\Ecommerce\Product\Order\Order;
use App\Models\System\Settings\Location\Province;
use App\Models\System\Settings\Location\Region;
class OrderShipping
{
/*
* Shipping methods
*
* standart - basic
* express - fast
* self_pickup - self pickup
* region - deliver to regions (mr, ah, dz, lb, bn)
*/
/**
* Standart shipping
*/
public const STANDART = 'standart';
/**
* Express shipping
*/
public const EXPRESS = 'express';
/**
* On own - self pickup
*/
public const SELF_PICKUP = 'self_pickup';
/**
* Region - shipping to regions (mr, ah, ...)
*/
public const REGION = 'region';
/*
* Shipping method prices
*
* standart - 20
* express - 30
* self pickup - 0
* region - 40
*/
/**
* Standart shipping price
*/
public const STANDART_PRICE = 20;
/**
* Express shipping price
*/
public const EXPRESS_PRICE = 30;
/**
* Self pickup shipping price
*/
public const SELF_PICKUP_PRICE = 0;
/**
* Region shipping price
*/
public const REGION_PRICE = 40;
/**
* Order delivery times
*
* morning
* evening
*/
/**
* Morning time 09 - 12:00
*/
public const MORNING = '09:00 - 12:00';
/**
* Evening time 13:00 - 18:00
*/
public const EVENING = '13:00 - 18:00';
/**
* Default shipping value
*/
public static function default(): string
{
return static::STANDART;
}
/**
* Default shipping time value
*/
public static function defaultTime(): string
{
return static::EVENING;
}
/**
* Shipping values
*/
public static function values(): array
{
return [
self::STANDART => __('Standart'),
self::EXPRESS => __('Express'),
self::SELF_PICKUP => __('Self Pickup'),
self::REGION => __('Region'),
];
}
/**
* Prices
*/
public static function prices(): array
{
return [
self::STANDART => self::STANDART_PRICE,
self::EXPRESS => self::EXPRESS_PRICE,
self::SELF_PICKUP => self::SELF_PICKUP_PRICE,
self::REGION => self::REGION_PRICE,
];
}
/**
* Shipping times
*/
public static function times(): array
{
return [
self::MORNING => self::MORNING,
self::EVENING => self::EVENING,
];
}
/**
* Get price for specific shipping
*/
public static function priceFor(string $type): int
{
return static::prices()[$type] ?? self::STANDART_PRICE;
}
/**
* Order shipping price
*
* @param Order $order
*/
public static function orderShippingPrice($order): int
{
if ($order->region === Region::AG) {
return static::priceFor($order->shipping_method);
}
if (in_array($order->province_id, [
12,
43,
45,
83,
56,
22,
])) {
return 30;
}
return static::REGION_PRICE;
}
/**
* Formatted shipping method
*/
public static function formattedShippingMethod(string $shippingMethod): string
{
return static::values()[$shippingMethod] ?? __('Standart');
}
/**
* Get full address
*/
public static function fullAddress($region, $province, $customer_address): string
{
$address = '';
if ($region) {
$address .= Region::labelFor($region);
}
if ($province = Province::where('id', $province)->first('name')) {
$address .= ', '.$province->name;
}
if ($customer_address) {
$address .= ','.$customer_address;
}
return $address;
}
}