better management of shipping and basket summary display

This commit is contained in:
ludo
2023-12-03 00:40:47 +01:00
parent 4bcfc7bc6d
commit ec509df665
26 changed files with 317 additions and 477 deletions

View File

@@ -6,19 +6,19 @@ use App\Repositories\Core\User\ShopCart;
class Baskets
{
public static function addBasket($offer_id, $quantity = 1, $update = false)
public static function addBasket($offerId, $quantity = 1, $update = false)
{
if (ShopCart::has($offer_id) && ! $quantity) {
$ret = ShopCart::remove($offer_id);
if (ShopCart::has($offerId) && ! $quantity) {
$ret = ShopCart::remove($offerId);
}
$data = $quantity ? self::getBasketData($offer_id, $quantity) : false;
$data = $quantity ? self::getBasketData($offerId, $quantity) : false;
return $data ? ShopCart::add($data, $update) : false;
}
public static function getBasketTotal($deliveryId = false, $deliveryTypeId = false)
{
$saleChannelId = $deliveryId ? Deliveries::getField($deliveryId, 'sale_channel_id') : SaleChannels::getDefaultID();
$saleChannelId = Deliveries::getSaleChannelId($deliveryId);
return self::getBasketSummary($saleChannelId, $deliveryTypeId);
}
@@ -36,8 +36,8 @@ class Baskets
$prices = Offers::getPrice($item->id, $item->quantity, $saleChannelId);
$weight = $offer->weight * $item->quantity;
$detail[] = self::getRowDetail($item, $offer, $prices, $weight);
$total += self::getTotal($item->quantity, $prices->price);
$totalTaxed += self::getTotal($item->quantity, $prices->price_taxed);
$total += $prices ? self::getTotal($item->quantity, $prices->price) : false;
$totalTaxed += $prices ? self::getTotal($item->quantity, $prices->price_taxed) : false;
$totalWeight += $weight;
}
$shipping = DeliveryTypeCalculations::getPriceByDeliveryType($deliveryTypeId, $totalWeight);
@@ -52,6 +52,7 @@ class Baskets
'count' => ShopCart::count(),
'quantity' => ShopCart::getTotalQuantity(),
'weight' => $totalWeight,
'sale_channel' => SaleChannels::getArray($saleChannelId),
];
return $data ?? false;
@@ -63,12 +64,12 @@ class Baskets
'offer_id' => (int) $item->id,
'name' => $offer->article->name.' ('.$offer->variation->name.')',
'quantity' => (int) $item->quantity,
'price' => (float) $prices->price,
'tax' => $prices->price_taxed - $prices->price,
'price_taxed' => (float) $prices->price_taxed,
'total' => self::getTotal($item->quantity, $prices->price),
'total_tax' => self::getTotal($item->quantity, $prices->price_taxed - $prices->price),
'total_taxed' => self::getTotal($item->quantity, $prices->price_taxed),
'price' => $prices ? (float) $prices->price : false,
'tax' => $prices ? $prices->price_taxed - $prices->price : false,
'price_taxed' => $prices ? (float) $prices->price_taxed : false,
'total' => $prices ? self::getTotal($item->quantity, $prices->price) : false,
'total_tax' => $prices ? self::getTotal($item->quantity, $prices->price_taxed - $prices->price) : false,
'total_taxed' => $prices ? self::getTotal($item->quantity, $prices->price_taxed) : false,
'weight' => $weight,
];
}
@@ -110,6 +111,7 @@ class Baskets
'latin' => $offer->article->product->specie->latin ?? false,
];
}
$data['sale_channel'] = Customers::getSaleChannel();
return $data ?? false;
}

View File

@@ -14,6 +14,18 @@ class Customers
{
use Basic;
public static function getSaleChannel()
{
return SaleChannels::getDefault();
}
public static function getDeliveries()
{
$customer = self::getAuth();
return $customer ? $customer->deliveries : Deliveries::getDefault();
}
public static function getOptions()
{
return Customer::pluck('last_name', 'id');
@@ -23,13 +35,13 @@ class Customers
{
$id = $id ? $id : self::getId();
$datatableOrders = new CustomerOrdersDataTable();
$data = [
return [
'customer' => self::get($id, ['addresses', 'deliveries'])->toArray(),
'deliveries' => Deliveries::getAllWithSaleChannel()->toArray(),
'orders' => $datatableOrders->html(),
];
return $data;
}
public static function getAvatar($id = false)
@@ -48,7 +60,8 @@ class Customers
$filename = self::makeAvatarFilename($customer);
$name = $customer->first_name.' '.$customer->last_name;
$avatar = new Avatar();
$ret = $avatar->create($name)
return $avatar->create($name)
->setBackground('#F2B90F')
->setForeground('#335012')
->setBorder(1, '#28a745')
@@ -56,8 +69,6 @@ class Customers
->setDimension(36)
->setFontSize(16)
->save($filename);
return $ret;
}
public static function makeAvatarFilename($customer)
@@ -93,7 +104,7 @@ class Customers
{
$user = $id ? self::get($id) : self::getAuth();
return $user ? $user->first_name.' '.$user->last_name : '';
return $user ? $user->name : '';
}
public static function getAuth()
@@ -162,7 +173,7 @@ class Customers
public static function create($data)
{
$user = Customer::create([
return Customer::create([
'uuid' => Str::uuid(),
'active' => true,
'first_name' => $data['first_name'],
@@ -177,8 +188,6 @@ class Customers
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
return $user;
}
public static function getStorage($filename = false)

View File

@@ -9,6 +9,16 @@ class Deliveries
{
use Basic;
public static function getSaleChannelId($deliveryId)
{
return $deliveryId ? Deliveries::getField($deliveryId, 'sale_channel_id') : SaleChannels::getDefaultID();
}
public static function getDefault()
{
return Delivery::active()->atHouse()->first();
}
public static function getOptions()
{
return Delivery::orderBy('name', 'asc')->pluck('name', 'id')->toArray();

View File

@@ -3,9 +3,12 @@
namespace App\Repositories\Shop;
use App\Models\Shop\Homepage;
use App\Traits\Model\Basic;
class Homepages
{
use Basic;
public static function getLast()
{
$model = Homepage::latest('id')->first();
@@ -28,34 +31,8 @@ class Homepages
return self::get(3)->text ?? '';
}
public static function get($id)
public static function getModel()
{
return Homepage::find($id);
}
public static function store($data)
{
$item = ($data['id'] ?? false) ? self::update($data) : self::create($data);
return $item->id;
}
public static function create($data)
{
return Homepage::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return Homepage::destroy($id);
return Homepage::query();
}
}

View File

@@ -28,6 +28,7 @@ class InvoicePayments
'CB',
'CHEQUE',
'VIREMENT',
'PRELEVEMENT',
];
}

View File

@@ -3,6 +3,7 @@
namespace App\Repositories\Shop;
use App\Models\Shop\Offer;
use App\Models\Shop\PriceList;
use App\Traits\Model\Basic;
class Offers
@@ -36,7 +37,7 @@ class Offers
return Offer::with([
'variation',
'article.article_nature',
'article.product.Specie',
'article.product',
'article.image',
'price_lists.price_list_values',
])->withPriceListsBySaleChannel($saleChannelId)->byIds($ids)->get();
@@ -67,8 +68,9 @@ class Offers
{
$saleChannelId = $saleChannelId ? $saleChannelId : SaleChannels::getDefaultID();
$offer = Offer::withPriceBySaleChannelByQuantity($saleChannelId, $quantity)->find($id);
return $offer->price_lists->first()->price_list_values->first();
$priceList = $offer->price_lists->first();
return $priceList ? $priceList->price_list_values->first() : false;
}
public static function getOffersByArticles($article_ids, $saleChannelId = false)

View File

@@ -3,9 +3,12 @@
namespace App\Repositories\Shop;
use App\Models\Shop\OrderDetail;
use App\Traits\Model\Basic;
class OrderDetails
{
use Basic;
public static function saveBasket($order_id, $data)
{
foreach ($data as $item) {
@@ -16,32 +19,8 @@ class OrderDetails
return true;
}
public static function get($id, $relations = false)
public static function getModel()
{
return $relations ? OrderDetail::with($relations)->findOrFail($id) : OrderDetail::findOrFail($id);
}
public static function store($data)
{
return ($data['id'] ?? false) ? self::update($data) : self::create($data);
}
public static function create($data)
{
return OrderDetail::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function delete($id)
{
return OrderDetail::destroy($id);
return OrderDetail::query();
}
}

View File

@@ -3,9 +3,12 @@
namespace App\Repositories\Shop;
use App\Models\Shop\Package;
use App\Traits\Model\Basic;
class Packages
{
use Basic;
public static function getOptions()
{
return Package::orderBy('value', 'asc')->pluck('value', 'id')->toArray();
@@ -21,35 +24,8 @@ class Packages
return self::get($id)->value;
}
public static function get($id)
public static function getModel()
{
return Package::find($id);
}
public static function store($data)
{
$id = isset($data['id']) ? $data['id'] : false;
$item = $id ? self::update($data) : self::create($data);
return $item->id;
}
public static function create($data)
{
return Package::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return Package::destroy($id);
return Package::query();
}
}

View File

@@ -4,9 +4,12 @@ namespace App\Repositories\Shop;
use App\Models\Shop\Offer;
use App\Models\Shop\PriceListValue;
use App\Traits\Model\Basic;
class PriceListValues
{
use Basic;
public static function getPriceByOffer($offer_id, $quantity = 1, $sale_channel_id = false)
{
$prices = self::getPricesByOffer($offer_id, $sale_channel_id);
@@ -31,16 +34,6 @@ class PriceListValues
return PriceListValue::byPriceList($id)->get();
}
public static function getAll()
{
return PriceListValue::orderBy('name', 'asc')->get();
}
public static function get($id)
{
return PriceListValue::find($id);
}
public static function storePrices($price_list_id, $values)
{
foreach ($values as $value) {
@@ -51,30 +44,8 @@ class PriceListValues
}
}
public static function store($data)
public static function getModel()
{
$id = isset($data['id']) ? $data['id'] : false;
$price = $id ? self::update($data) : self::create($data);
return $price;
}
public static function create($data)
{
return PriceListValue::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return PriceListValue::destroy($id);
return PriceListValue::query();
}
}

View File

@@ -3,9 +3,25 @@
namespace App\Repositories\Shop;
use App\Models\Shop\PriceList;
use App\Traits\Model\Basic;
class PriceLists
{
use Basic;
public static function init($tariffId = false)
{
return [
'sale_channels' => SaleChannels::getOptions(),
'statuses' => Tariffs::getStatuses(),
'taxes' => Taxes::getOptions(),
'price_list' => [
'tariff_id' => $tariffId,
'price_list_values' => array_fill(0, 3, ''),
],
];
}
public static function getByOfferAndSaleChannel($offer_id, $sale_channel_id)
{
return PriceList::bySaleChannel($sale_channel_id)->byOffer($offer_id)->get();
@@ -31,15 +47,6 @@ class PriceLists
return PriceList::byTariff($id)->get();
}
public static function getOptions()
{
return PriceList::pluck('name', 'id')->toArray();
}
public static function getAll()
{
return PriceList::orderBy('name', 'asc')->get();
}
public static function edit($id)
{
@@ -52,11 +59,6 @@ class PriceLists
return $price_list;
}
public static function get($id)
{
return PriceList::find($id);
}
public static function getPrices($id)
{
return PriceList::with('price_list_values')->find($id);
@@ -78,22 +80,8 @@ class PriceLists
return $price_list;
}
public static function create($data)
public static function getModel()
{
return PriceList::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return PriceList::destroy($id);
return PriceList::query();
}
}

View File

@@ -3,9 +3,12 @@
namespace App\Repositories\Shop;
use App\Models\Shop\SaleChannel;
use App\Traits\Model\Basic;
class SaleChannels
{
use Basic;
public static function getDefaultID()
{
$default = self::getDefault();
@@ -23,45 +26,8 @@ class SaleChannels
return SaleChannel::byCode($code)->first();
}
public static function getOptions()
public static function getModel()
{
return SaleChannel::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
}
public static function getAll()
{
return SaleChannel::orderBy('name', 'asc')->get();
}
public static function get($id)
{
return SaleChannel::findOrFail($id);
}
public static function store($data)
{
$id = isset($data['id']) ? $data['id'] : false;
$item = $id ? self::update($data) : self::create($data);
return $item->id;
}
public static function create($data)
{
return SaleChannel::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return SaleChannel::destroy($id);
return SaleChannel::query();
}
}

View File

@@ -2,10 +2,27 @@
namespace App\Repositories\Shop;
use App\Datatables\Admin\Shop\PriceListsDataTable;
use App\Models\Shop\Tariff;
use App\Traits\Model\Basic;
class Tariffs
{
use Basic;
public static function init()
{
$model = new PriceListsDataTable();
return [
'sale_channels' => SaleChannels::getOptions(),
'statuses' => Tariffs::getStatuses(),
'tariff_unities' => TariffUnities::getOptions(),
'datatables' => [
'price_lists' => $model->html(),
],
];
}
public static function autocomplete($str)
{
$data = Tariff::byAutocomplete($str)->orderBy('name')->limit(30)->get()->pluck('name', 'id');
@@ -27,11 +44,6 @@ class Tariffs
return Tariff::with(['price_lists.price_list_values', 'price_lists.sale_channel'])->find($id);
}
public static function getOptions()
{
return Tariff::orderBy('name', 'asc')->get()->pluck('name', 'id')->toArray();
}
public static function getStatus($status_id)
{
return self::getStatuses()[$status_id];
@@ -42,40 +54,8 @@ class Tariffs
return ['Actif', 'Suspendu', 'Invisible', 'Obsolete'];
}
public static function getAll()
public static function getModel()
{
return Tariff::orderBy('name', 'asc')->get();
}
public static function get($id)
{
return Tariff::find($id);
}
public static function store($data)
{
$id = isset($data['id']) ? $data['id'] : false;
$item = $id ? self::update($data, $id) : self::create($data);
return $item->id;
}
public static function create($data)
{
return Tariff::create($data);
}
public static function update($data, $id = false)
{
$id = $id ? $id : $data['id'];
$item = self::get($id);
$item->update($data);
return $item;
}
public static function destroy($id)
{
return Tariff::destroy($id);
return Tariff::query();
}
}