diff --git a/packages/table-rate-shipping/resources/lang/en/relationmanagers.php b/packages/table-rate-shipping/resources/lang/en/relationmanagers.php index 26eae22285..8cef642d8c 100644 --- a/packages/table-rate-shipping/resources/lang/en/relationmanagers.php +++ b/packages/table-rate-shipping/resources/lang/en/relationmanagers.php @@ -39,6 +39,7 @@ ], 'min_weight' => [ 'label' => 'Min. Weight', + 'helper_text' => 'Enter in kg', ], 'price' => [ 'label' => 'Price', diff --git a/packages/table-rate-shipping/resources/lang/hu/relationmanagers.php b/packages/table-rate-shipping/resources/lang/hu/relationmanagers.php index a65667e819..584592e2e8 100644 --- a/packages/table-rate-shipping/resources/lang/hu/relationmanagers.php +++ b/packages/table-rate-shipping/resources/lang/hu/relationmanagers.php @@ -39,6 +39,7 @@ ], 'min_weight' => [ 'label' => 'Min. súly', + 'helper_text' => 'Kg-ban adja meg', ], 'price' => [ 'label' => 'Ár', diff --git a/packages/table-rate-shipping/resources/lang/ro/relationmanagers.php b/packages/table-rate-shipping/resources/lang/ro/relationmanagers.php index d80c48d523..a39721a70c 100644 --- a/packages/table-rate-shipping/resources/lang/ro/relationmanagers.php +++ b/packages/table-rate-shipping/resources/lang/ro/relationmanagers.php @@ -39,6 +39,7 @@ ], 'min_weight' => [ 'label' => 'Greutate min.', + 'helper_text' => 'Introduceți în kg', ], 'price' => [ 'label' => 'Preț', diff --git a/packages/table-rate-shipping/src/Drivers/ShippingMethods/ShipBy.php b/packages/table-rate-shipping/src/Drivers/ShippingMethods/ShipBy.php index cabcb98acc..9ff350f228 100644 --- a/packages/table-rate-shipping/src/Drivers/ShippingMethods/ShipBy.php +++ b/packages/table-rate-shipping/src/Drivers/ShippingMethods/ShipBy.php @@ -2,6 +2,7 @@ namespace Lunar\Shipping\Drivers\ShippingMethods; +use Cartalyst\Converter\Laravel\Facades\Converter; use Lunar\DataTypes\ShippingOption; use Lunar\Facades\Pricing; use Lunar\Models\Product; @@ -71,7 +72,17 @@ public function resolve(ShippingOptionRequest $shippingOptionRequest): ?Shipping if ($chargeBy == 'weight') { $tier = $cart->lines->sum(function ($line) { - return $line->purchasable->weight_value * $line->quantity; + try { + $unitWeightKg = Converter::from("weight.{$line->purchasable->weight_unit}") + ->to('weight.kg') + ->value($line->purchasable->weight_value) + ->convert() + ->getValue(); + } catch (\Exception $e) { + return 0; + } + + return $unitWeightKg * $line->quantity; }); } diff --git a/packages/table-rate-shipping/src/Filament/Resources/ShippingZoneResource/Pages/ManageShippingRates.php b/packages/table-rate-shipping/src/Filament/Resources/ShippingZoneResource/Pages/ManageShippingRates.php index 41e7fb8438..523adb41c1 100644 --- a/packages/table-rate-shipping/src/Filament/Resources/ShippingZoneResource/Pages/ManageShippingRates.php +++ b/packages/table-rate-shipping/src/Filament/Resources/ShippingZoneResource/Pages/ManageShippingRates.php @@ -120,6 +120,24 @@ function (Get $get) { return __('lunarpanel.shipping::relationmanagers.shipping_rates.form.prices.repeater.min_spend.label'); } ) + ->helperText( + function (Get $get) { + if (static::getShippingChargeBy($get('../../shipping_method_id')) == 'weight') { + return __('lunarpanel.shipping::relationmanagers.shipping_rates.form.prices.repeater.min_weight.helper_text'); + } + + return null; + } + ) + ->suffix( + function (Get $get) { + if (static::getShippingChargeBy($get('../../shipping_method_id')) == 'weight') { + return 'kg'; + } + + return null; + } + ) ->numeric() ->required(), ])->afterStateHydrated( @@ -136,7 +154,7 @@ static function (Forms\Components\Repeater $component, ?Model $record = null): v 'customer_group_id' => $price->customer_group_id, 'price' => $price->price->decimal, 'currency_id' => $price->currency_id, - 'min_quantity' => $chargeBy == 'cart_total' ? $price->min_quantity / $currency->factor : $price->min_quantity / 100, + 'min_quantity' => $chargeBy == 'cart_total' ? $price->min_quantity / $currency->factor : $price->min_quantity, ]; })->toArray() ); @@ -241,7 +259,7 @@ function ($price) use ($chargeBy, $currencies) { if ($chargeBy == 'cart_total') { $price['min_quantity'] = (int) ($price['min_quantity'] * $currency->factor); } else { - $price['min_quantity'] = (int) ($price['min_quantity'] * 100); + $price['min_quantity'] = (int) $price['min_quantity']; } $price['price'] = (int) ($price['price'] * $currency->factor);