- Updating Dependencies
- The
Webkul\Checkout\Cart
class - The
Webkul\Product\Type\Configurable
class - Shop API Response Updates
- Admin Customized Datagrid Parameters Updated
- Admin Event Updates
- The System Configuration Updates
- The
Webkul\Checkout\Models\Cart
model - The Checkout Tables Schema Updates
- The
Webkul\DataGrid\DataGrid
class - The
Webkul\Product\Repositories\ElasticSearchRepository
Repository - The
Webkul\Product\Repositories\ProductRepository
Repository - The Sales Tables Schema Updates
- The
Webkul\Sales\Repositories\OrderItemRepository
Repository - The
Webkul\Tax\Helpers\Tax
Class Moved - Shop Event Updates
- Shop Customized Datagrid Parameters Updated
- Shop Class HTML Attribute updated
- Renamed Admin API Route Names
- Renamed Admin Controller Method Names
- Removed Cart Traits
- The Product Types Classes Updates
- Renamed
star-rating.blade.php
- Moved
coupon.blade.php
- Renamed Shop API Route Names
- Renamed Shop Controller Method Names
- Renamed Admin View Render Event Names
Note
We strive to document every potential breaking change. However, as some of these alterations occur in lesser-known sections of Bagisto, only a fraction of them may impact your application.
Impact Probability: High
Laravel now requires PHP 8.1.0 or greater.
Laravel's HTTP client now requires curl 7.34.0 or greater.
There is no dependency needed to be updated at for this upgrade.
Impact Probability: Medium
1: The tax configuration has been relocated to the sales configuration, and the respective path for retrieving configuration values has been updated accordingly.
- core()->getConfigData('taxes.catalogue.pricing.tax_inclusive')
+ core()->getConfigData('sales.taxes.calculation.product_prices')
+ core()->getConfigData('sales.taxes.calculation.shipping_prices')
- core()->getConfigData('taxes.catalogue.default_location_calculation.country')
+ core()->getConfigData('sales.taxes.default_destination_calculation.country')
- core()->getConfigData('taxes.catalogue.default_location_calculation.state')
+ core()->getConfigData('sales.taxes.default_destination_calculation.state')
- core()->getConfigData('taxes.catalogue.default_location_calculation.postcode')
+ core()->getConfigData('sales.taxes.default_destination_calculation.postcode')
2: The repository
option has been replaced with options
. Now, you can use options
as shown below to populate select field options from the database.
'key' => 'sales.taxes.categories',
'name' => 'admin::app.configuration.index.sales.taxes.categories.title',
'info' => 'admin::app.configuration.index.sales.taxes.categories.title-info',
'sort' => 1,
'fields' => [
[
'name' => 'shipping',
'title' => 'admin::app.configuration.index.sales.taxes.categories.shipping',
'type' => 'select',
'default' => 0,
- 'repository' => '\Webkul\Tax\Repositories\TaxCategoryRepository@getConfigOptions',
+ 'options' => '\Webkul\Tax\Repositories\TaxCategoryRepository@getConfigOptions',
}
- The Inventory Stock Options configuration has been relocated to the Order Settings configuration, and the respective path for retrieving configuration values has been updated accordingly
- core()->getConfigData('catalog.inventory.stock_options.back_orders')
+ core()->getConfigData('sales.order_settings.stock_options.back_orders')
Impact Probability: Low
- In the
packages/Webkul/Admin/src/Routes/sales-routes.php
route file, route names and controller methods have been renamed to provide clearer and more meaningful representations.
- Route::post('update-qty/{order_id}', 'updateQty')->name('admin.sales.refunds.update_qty');
+ Route::post('update-totals/{order_id}', 'updateTotals')->name('admin.sales.refunds.update_totals');
Impact Probability: High
- The event that was previously added in Admin has now been updated in the new format. You can now directly add your own custom elements inside the tag.
+ {!! view_render_event('bagisto.admin.layout.head.before') !!}
- {!! view_render_event('bagisto.admin.layout.head') !!}
+ {!! view_render_event('bagisto.admin.layout.head.after') !!}
Impact Probability: Low
- The View render event names have been updated for consistency in the
packages/Webkul/Admin/src/Resources/views/dashboard/index.blade.php
blade file.
- {!! view_render_event('bagisto.admin.dashboard.overall_detailes.before') !!}
+ {!! view_render_event('bagisto.admin.dashboard.overall_details.before') !!}
- {!! view_render_event('bagisto.admin.dashboard.overall_detailes.after') !!}
+ {!! view_render_event('bagisto.admin.dashboard.overall_details.after') !!}
- {!! view_render_event('bagisto.admin.dashboard.todays_detailes.before') !!}
+ {!! view_render_event('bagisto.admin.dashboard.todays_details.before') !!}
- {!! view_render_event('bagisto.admin.dashboard.todays_detailes.after') !!}
+ {!! view_render_event('bagisto.admin.dashboard.todays_details.after') !!}
Impact Probability: Medium
- Previously, the data grid
header
was customized using parameters such ascolumns
,records
,sortPage
,selectAllRecords
,applied
, andisLoading
. However, with the latest updates, the parameter names have been revised for clarity and consistency across components.
- <template #header="{ columns, records, sortPage, selectAllRecords, applied, isLoading}">
- <!-- Header customization code -->
- </template>
+ <template #header="{
+ isLoading,
+ available,
+ applied,
+ selectAll,
+ sort,
+ performAction
+ }">
+ <!-- Updated header customization code -->
+ </template>
- Previously, the data grid
body
was customized using parameters such ascolumns
,records
,setCurrentSelectionMode
,applied
, andisLoading
. However, with the latest updates, the parameter names have been revised for clarity and consistency across components.
- <template #body="{ columns, records, setCurrentSelectionMode, applied, isLoading }">
- <!-- Updated body customization code -->
- </template>
+ <template #body="{
+ isLoading,
+ available,
+ applied,
+ selectAll,
+ sort,
+ performAction
+ }">
+ <!-- Updated body customization code -->
+ </template>
Impact Probability: Medium
1: New columns related to managing inclusive tax have been added to the cart
table.
+ Schema::table('cart', function (Blueprint $table) {
+ $table->decimal('shipping_amount', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_shipping_amount', 12, 4)->default(0)->after('shipping_amount');
+
+ $table->decimal('shipping_amount_incl_tax', 12, 4)->default(0)->after('base_shipping_amount');
+ $table->decimal('base_shipping_amount_incl_tax', 12, 4)->default(0)->after('shipping_amount_incl_tax');
+
+ $table->decimal('sub_total_incl_tax', 12, 4)->default(0)->after('base_shipping_amount_incl_tax');
+ $table->decimal('base_sub_total_incl_tax', 12, 4)->default(0)->after('sub_total_incl_tax');
+ });
2: New columns related to managing inclusive tax have been added to the cart_items
table.
+ Schema::table('cart_items', function (Blueprint $table) {
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+
+ $table->decimal('total_incl_tax', 12, 4)->default(0)->after('base_price_incl_tax');
+ $table->decimal('base_total_incl_tax', 12, 4)->default(0)->after('total_incl_tax');
+
+ $table->string('applied_tax_rate')->nullable()->after('base_total_incl_tax');
+ });
3: New columns related to managing inclusive shipping tax have been added to the cart_shipping_rates
table.
+ Schema::table('cart_shipping_rates', function (Blueprint $table) {
+ $table->decimal('tax_percent', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('tax_amount', 12, 4)->default(0)->after('tax_percent');
+ $table->decimal('base_tax_amount', 12, 4)->default(0)->after('tax_amount');
+
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_tax_amount');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+
+ $table->string('applied_tax_rate')->nullable()->after('base_price_incl_tax');
+ });
Impact Probability: Medium
- The
addresses
method has been removed. It was previously utilized in thebilling_address
andshipping_address
methods. We have now revised both thebilling_address
andshipping_address
relationships, rendering the addresses method unnecessary.
- public function addresses(): \Illuminate\Database\Eloquent\Relations\HasMany
- {
- return $this->hasMany(CartAddressProxy::modelClass());
- }
- We have revised the
billing_address
method to return a HasOne object instead of a HasMany object. Additionally, we have removed thegetBillingAddressAttribute
accessor, as thebilling_address
method now methods identically to it.
- public function billing_address(): \Illuminate\Database\Eloquent\Relations\HasMany
- {
- return $this->addresses()
- ->where('address_type', CartAddress::ADDRESS_TYPE_BILLING);
- }
+ public function billing_address(): \Illuminate\Database\Eloquent\Relations\HasOne
+ {
+ return $this->hasOne(CartAddressProxy::modelClass())->where('address_type', CartAddress::ADDRESS_TYPE_BILLING);
+ }
- public function getBillingAddressAttribute()
- {
- return $this->billing_address()->first();
- }
- We have revised the
shipping_address
method to return a HasOne object instead of a HasMany object. Additionally, we have removed thegetShippingAddressAttribute
accessor, as theshipping_address
method now methods identically to it.
- public function shipping_address(): \Illuminate\Database\Eloquent\Relations\HasMany
- {
- return $this->addresses()
- ->where('address_type', CartAddress::ADDRESS_TYPE_SHIPPING);
- }
+ public function shipping_address(): \Illuminate\Database\Eloquent\Relations\HasOne
+ {
+ return $this->hasOne(CartAddressProxy::modelClass())->where('address_type', CartAddress::ADDRESS_TYPE_SHIPPING);
+ }
- public function getShippingAddressAttribute()
- {
- return $this->shipping_address()->first();
- }
- We have updated the
shipping_rates
method to return a HasMany object instead of a HasManyThrough object, as shipping rates are now directly associated with the cart.
- public function shipping_rates(): \Illuminate\Database\Eloquent\Relations\HasManyThrough
- {
- return $this->hasManyThrough(CartShippingRateProxy::modelClass(), CartAddressProxy::modelClass(), 'cart_id', 'cart_address_id');
- }
+ public function shipping_rates(): \Illuminate\Database\Eloquent\Relations\HasMany
+ {
+ return $this->hasMany(CartShippingRateProxy::modelClass());
+ }
Impact Probability: Low
All methods from the following traits have been relocated to the Webkul\Checkout\Cart
class, and the traits have been removed.
Webkul\Checkout\Traits\CartCoupons
traitWebkul\Checkout\Traits\CartTools
traitWebkul\Checkout\Traits\CartValidators
trait
Impact Probability: High
- The
initCart
method now accepts an optionalWebkul\Customer\Models\Customer
model instance and initializes the cart based on this parameter.
- public function initCart()
+ public function initCart(?CustomerContract $customer = null): void
-
The
getCart
method now exclusively returns the cart itself, meaning it will no longer retrieve the current cart. -
We have updated the
addProduct
method to accept theWebkul\Product\Models\Product
model instance as the first parameter instead of the product ID.
- public function addProduct($productId, $data)
+ public function addProduct(ProductContract $product, array $data): Contracts\Cart|\Exception
- We've renamed the
create
method tocreateCart
- public function create($data)
+ public function createCart(array $data): ?Contracts\Cart
- The
emptyCart
method has been renamed toremoveCart
, and it now accepts a cart model instance.
- public function emptyCart()
+ public function removeCart(Contracts\Cart $cart): void
- We have introduced a new method called
refreshCart
. This method retrieves a refreshed cart instance from the database.
+ public function refreshCart(): void
- The
putCart
method previously found in CartTools has been eliminated. It is now managed within the setCart method in theWebkul\Checkout\Cart
class.
- public function putCart($cart)
- We've enhanced the mergeCart method to now accept an instance of the
Webkul\Customer\Models\Customer
model. Previously, we merged the guest cart with the logged-in customer's cart by fetching the current customer within this method. However, it now directly accepts theWebkul\Customer\Models\Customer
model instance.
- public function mergeCart(): void
+ public function mergeCart(CustomerContract $customer): void
- The
saveCustomerDetails
method has been renamed tosetCustomerPersonnelDetails
- public function saveCustomerDetails(): void
+ public function setCustomerPersonnelDetails(): void
- We have removed the following methods and relocated the cart data transformation to a separate resource class named
Webkul\Sales\Transformers\OrderResource
.
- public function prepareDataForOrder(): array
- public function prepareDataForOrderItem(): array
- public function toArray(): array
- The
collectTotals
method now returns a self instance instead of void, allowing for chaining multiple methods with the Cart facade.
- public function collectTotals(): void
+ public function collectTotals(): self
Impact Probability: Medium
- We have made some of the methods in this class private. Here are the methods, please have a look.
- public function validatedRequest(): array
+ private function validatedRequest(): array
- public function processRequestedFilters(array $requestedFilters)
+ private function processRequestedFilters(array $requestedFilters)
- public function processRequestedSorting($requestedSort)
+ private function processRequestedSorting($requestedSort)
- public function processRequestedPagination($requestedPagination): LengthAwarePaginator
+ private function processRequestedPagination($requestedPagination): LengthAwarePaginator
- public function processRequest(): void
+ private function processRequest(): void
- public function sanitizeRow($row): \stdClass
+ private function sanitizeRow($row): \stdClass
- public function formatData(): array
+ private function formatData(): array
- public function prepare(): void
+ private function prepare(): void
- We have deprecated the 'toJson' method. Instead of 'toJson', please use the 'process' method.
- app(AttributeDataGrid::class)->toJson();
+ datagrid(AttributeDataGrid::class)->process();
Impact Probability: Medium
- We've made revisions to the
getAll
method to allow for optional parameters.
- public function getAll()
+ public function getAll(array $params = [])
Impact Probability: Medium
- We have enhanced the
search
method to accept two arguments. The first argument is an array containing the search parameters (e.g., category_id, etc.), while the second argument is an array containing the options.
- public function search($categoryId, $options)
+ public function search(array $params, array $options): array
- We've enhanced the
getFilters
method to now accept an array of parameters, as request parameters will originate from the search method itself.
- public function getFilters()
+ public function getFilters(array $params): array
Impact Probability: Medium
- We've made revisions to the
getAll
method to allow for optional search parameters.
- public function getAll()
+ public function getAll(array $params = [])
- We've made revisions to the
searchFromDatabase
method to allow for optional search parameters.
- public function searchFromDatabase()
+ public function searchFromDatabase(array $params = [])
- We've made revisions to the
searchFromElastic
method to allow for optional search parameters.
- public function searchFromElastic()
+ public function searchFromElastic(array $params = [])
If you've implemented your own product type or overridden existing type classes, you'll need to update the following methods to include inclusive tax management.
Impact Probability: Low
1: The evaluatePrice
and getTaxInclusiveRate
methods have been removed. Please update your getProductPrices
method accordingly to no longer use these methods.
- public function evaluatePrice($price)
- public function getTaxInclusiveRate($totalPrice)
2: Please update your prepareForCart
and validateCartItem
methods to include the *_incl_tax
columns for managing inclusive tax calculation for your product type. You can refer to the Webkul\Product\Type\AbstractType
class and adjust your class accordingly.
Impact Probability: High
- We've removed the following methods from the
Webkul\Product\Type\Configurable
class as we no longer support default configurable variants.
- public function getDefaultVariant()
- public function getDefaultVariantId()
- public function setDefaultVariantId()
- public function updateDefaultVariantId()
Impact Probability: Medium
1: New columns related to managing inclusive tax have been added to the orders
table.
+ Schema::table('orders', function (Blueprint $table) {
+ $table->decimal('shipping_tax_amount', 12, 4)->default(0)->after('base_shipping_discount_amount');
+ $table->decimal('base_shipping_tax_amount', 12, 4)->default(0)->after('shipping_tax_amount');
+
+ $table->decimal('shipping_tax_refunded', 12, 4)->default(0)->after('base_shipping_tax_amount');
+ $table->decimal('base_shipping_tax_refunded', 12, 4)->default(0)->after('shipping_tax_refunded');
+
+ $table->decimal('sub_total_incl_tax', 12, 4)->default(0)->after('base_shipping_tax_refunded');
+ $table->decimal('base_sub_total_incl_tax', 12, 4)->default(0)->after('sub_total_incl_tax');
+
+ $table->decimal('shipping_amount_incl_tax', 12, 4)->default(0)->after('base_sub_total_incl_tax');
+ $table->decimal('base_shipping_amount_incl_tax', 12, 4)->default(0)->after('shipping_amount_incl_tax');
+ });
2: New columns related to managing inclusive tax have been added to the order_items
table.
+ Schema::table('order_items', function (Blueprint $table) {
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_tax_amount_refunded');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+
+ $table->decimal('total_incl_tax', 12, 4)->default(0)->after('base_price_incl_tax');
+ $table->decimal('base_total_incl_tax', 12, 4)->default(0)->after('total_incl_tax');
+ });
3: New columns related to managing inclusive tax have been added to the invoices
table.
+ Schema::table('invoices', function (Blueprint $table) {
+ $table->decimal('shipping_tax_amount', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_shipping_tax_amount', 12, 4)->default(0)->after('shipping_tax_amount');
+
+ $table->decimal('sub_total_incl_tax', 12, 4)->default(0)->after('base_shipping_tax_amount');
+ $table->decimal('base_sub_total_incl_tax', 12, 4)->default(0)->after('sub_total_incl_tax');
+
+ $table->decimal('shipping_amount_incl_tax', 12, 4)->default(0)->after('base_sub_total_incl_tax');
+ $table->decimal('base_shipping_amount_incl_tax', 12, 4)->default(0)->after('shipping_amount_incl_tax');
+ });
4: New columns related to managing inclusive tax have been added to the invoice_items
table.
+ Schema::table('invoice_items', function (Blueprint $table) {
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+ $table->decimal('total_incl_tax', 12, 4)->default(0)->after('base_price_incl_tax');
+ $table->decimal('base_total_incl_tax', 12, 4)->default(0)->after('total_incl_tax');
+ });
5: New columns related to managing inclusive tax have been added to the refunds
table.
+ Schema::table('refunds', function (Blueprint $table) {
+ $table->decimal('shipping_tax_amount', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_shipping_tax_amount', 12, 4)->default(0)->after('shipping_tax_amount');
+
+ $table->decimal('sub_total_incl_tax', 12, 4)->default(0)->after('base_shipping_tax_amount');
+ $table->decimal('base_sub_total_incl_tax', 12, 4)->default(0)->after('sub_total_incl_tax');
+
+ $table->decimal('shipping_amount_incl_tax', 12, 4)->default(0)->after('base_sub_total_incl_tax');
+ $table->decimal('base_shipping_amount_incl_tax', 12, 4)->default(0)->after('shipping_amount_incl_tax');
+ });
6: New columns related to managing inclusive tax have been added to the refund_items
table.
+ Schema::table('refund_items', function (Blueprint $table) {
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_discount_amount');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+ $table->decimal('total_incl_tax', 12, 4)->default(0)->after('base_price_incl_tax');
+ $table->decimal('base_total_incl_tax', 12, 4)->default(0)->after('total_incl_tax');
+ });
7: New columns related to managing inclusive tax have been added to the shipment_items
table.
+ Schema::table('shipment_items', function (Blueprint $table) {
+ $table->decimal('price_incl_tax', 12, 4)->default(0)->after('base_total');
+ $table->decimal('base_price_incl_tax', 12, 4)->default(0)->after('price_incl_tax');
+ });
Impact Probability: Low
- The
create
method has been removed. Previously, it was overridden to set product_id and product_type for the polymorphic relation betweenWebkul\Sales\Models\OrderItem
andWebkul\Product\Models\Product
. Now, this information is obtained from the cart transformerWebkul\Sales\Transformers\OrderResource
.
- public function create(array $data)
Impact Probability: Medium
- Previously, the data grid
header
was customized using parameters such ascolumns
,records
,sortPage
,selectAllRecords
,applied
, andisLoading
. However, with the latest updates, the parameter names have been revised for clarity and consistency across components.
- <template #header="{ columns, records, sortPage, selectAllRecords, applied, isLoading}">
- <!-- Header customization code -->
- </template>
+ <template #header="{
+ isLoading,
+ available,
+ applied,
+ selectAll,
+ sort,
+ performAction
+ }">
+ <!-- Updated header customization code -->
+ </template>
- Previously, the data grid
body
was customized using parameters such ascolumns
,records
,setCurrentSelectionMode
,applied
, andisLoading
. However, with the latest updates, the parameter names have been revised for clarity and consistency across components.
- <template #body="{ columns, records, setCurrentSelectionMode, applied, isLoading }">
- <!-- Updated body customization code -->
- </template>
+ <template #body="{
+ isLoading,
+ available,
+ applied,
+ selectAll,
+ sort,
+ performAction
+ }">
+ <!-- Updated body customization code -->
+ </template>
Impact Probability: Medium
- The event data previously containing an email address has been updated to include an instance of the
Webkul\Customer\Models\Customer
model.
- Event::dispatch('customer.after.login', $loginRequest->get('email'));
+ Event::dispatch('customer.after.login', auth()->guard()->user());
Impact Probability: High
- The event that was previously added in Shop has now been updated in the new format. You can now directly add your own custom elements inside the tag.
+ {!! view_render_event('bagisto.shop.layout.head.before') !!}
- {!! view_render_event('bagisto.shop.layout.head') !!}
+ {!! view_render_event('bagisto.shop.layout.head.after') !!}
Impact Probability: Low
- The routes names have been renamed for consistency in the
packages/Webkul/Shop/src/Routes/api.php
route file.
- Route::get('', 'index')->name('api.shop.customers.account.addresses.index');
+ Route::get('', 'index')->name('shop.api.customers.account.addresses.index');
- Route::post('', 'store')->name('api.shop.customers.account.addresses.store');
+ Route::post('', 'store')->name('shop.api.customers.account.addresses.store');
- Route::put('edit/{id?}', 'update')->name('api.shop.customers.account.addresses.update');
+ Route::put('edit/{id?}', 'update')->name('shop.api.customers.account.addresses.update');
Impact Probability: Low
- The controller action names for the following routes have been renamed to ensure consistency with the
packages/Webkul/Shop/src/Routes/customer-routes.php
route file.
- Route::get('', 'show')->name('shop.customer.session.index');
+ Route::get('', 'index')->name('shop.customer.session.index');
- Route::post('', 'create')->name('shop.customer.session.create');
+ Route::post('', 'store')->name('shop.customer.session.create');
Impact Probability: High
- The response for the Shop route
shop.api.checkout.cart.index
or/api/checkout/cart
API has been updated. If you are consuming this API, please make the necessary changes to accommodate the updated response format.
{
data: {
"id": 243,
"is_guest": 0,
"customer_id": 1,
"items_count": 1,
"items_qty": 1,
- "base_tax_amounts": [
- "$0.00"
- ],
+ "applied_taxes": {
+ "US-AL (10%)": "$10.00"
+ },
- "base_tax_total": 10,
"tax_total": 10,
"formatted_tax_total": "$10.00",
- "base_sub_total": 100,
"sub_total": 100,
"formatted_sub_total": "$100.00",
+ "sub_total_incl_tax": 110,
+ "formatted_sub_total_incl_tax": "$110.00",
"coupon_code": null,
- "base_discount_amount": 0,
- "formatted_base_discount_amount": "$0.00",
"discount_amount": 0,
"formatted_discount_amount": "$0.00",
- "selected_shipping_rate_method": "",
- "selected_shipping_rate": "$0.00",
+ "shipping_method": "flatrate_flatrate",
+ "shipping_amount": 5,
+ "formatted_shipping_amount": "$5.00",
+ "shipping_amount_incl_tax": "5.0000",
+ "formatted_shipping_amount_incl_tax": "$5.00",
- "base_grand_total": 115,
"grand_total": 115,
"formatted_grand_total": "$115.00",
"have_stockable_items": true,
"payment_method": null,
"payment_method_title": null
"billing_address": null,
"shipping_address": null,
"items": [
{
"id": 544,
"quantity": 1,
"type": "configurable",
"name": "OmniHeat Men's Solid Hooded Puffer Jacket",
"price": "100.0000",
"formatted_price": "$100.00",
+ "price_incl_tax": "110.0000",
+ "formatted_price_incl_tax": "$110.00",
"total": "100.0000",
"formatted_total": "$100.00",
+ "total_incl_tax": "110.0000",
+ "formatted_total_incl_tax": "$110.00",
+ "discount_amount": "0.0000",
+ "formatted_discount_amount": "$0.00",
"options": [
{
"option_id": 7,
"option_label": "M",
"attribute_name": "Size"
},
{
"option_id": 2,
"option_label": "Green",
"attribute_name": "Color"
}
],
"base_image": {
"small_image_url": "http://localhost/laravel/bagisto/public/cache/small/product/10/CvW2Q3eP4HNUKpQCjyrMUvnwEypVQZCf1VcLAnH4.webp",
"medium_image_url": "http://localhost/laravel/bagisto/public/cache/medium/product/10/CvW2Q3eP4HNUKpQCjyrMUvnwEypVQZCf1VcLAnH4.webp",
"large_image_url": "http://localhost/laravel/bagisto/public/cache/large/product/10/CvW2Q3eP4HNUKpQCjyrMUvnwEypVQZCf1VcLAnH4.webp",
"original_image_url": "http://localhost/laravel/bagisto/public/cache/original/product/10/CvW2Q3eP4HNUKpQCjyrMUvnwEypVQZCf1VcLAnH4.webp"
},
"product_url_key": "omniheat-mens-solid-hooded-puffer-jacket"
}
]
}
}
- The response for the Shop route
shop.api.checkout.cart.store
API has been updated. If you are consuming this API, please make the necessary changes. we have refined the exception handling to provide more specific error responses and HTTP_BAD_REQUEST status code, ensuring better feedback for users.
- catch (\Exception $exception) {
- return new JsonResource([
- 'redirect_uri' => route('shop.product_or_category.index', $product->product->url_key),
- 'message' => $exception->getMessage(),
- ]);
- }
+ catch (\Exception $exception) {
+ return response()->json([
+ 'redirect_uri' => route('shop.product_or_category.index', $product->url_key),
+ 'message' => $exception->getMessage(),
+ ], Response::HTTP_BAD_REQUEST);
+ }
- The response for the Shop route
shop.api.categories.index
or/api/categories
API has been updated. If you are consuming this API, please make the necessary changes to accommodate the updated response format.
{
"data": [
{
"id": 2,
"parent_id": 1,
"name": "Men",
"slug": "men",
"status": 1,
"position": 1,
"display_mode": "products_and_description",
"description": "<p>Men</p>",
- "images": {
- "banner_url": null,
- "logo_url": "https://demo.bagisto.com/bagisto-common/storage/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp"
- },
+ "logo": {
+ "small_image_url": "http://localhost/laravel/bagisto/public/cache/small/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "medium_image_url": "http://localhost/laravel/bagisto/public/cache/medium/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "large_image_url": "http://localhost/laravel/bagisto/public/cache/large/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "original_image_url": "http://localhost/laravel/bagisto/public/cache/original/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp"
+ },
+ "banner": {
+ "small_image_url": "http://localhost/laravel/bagisto/public/cache/small/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "medium_image_url": "http://localhost/laravel/bagisto/public/cache/medium/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "large_image_url": "http://localhost/laravel/bagisto/public/cache/large/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp",
+ "original_image_url": "http://localhost/laravel/bagisto/public/cache/original/category/2/OYsuHioryn5KrOE7p8wQ2hQ3BReXY5CSbDzhvEk8.webp"
+ },
"meta": {
"title": "",
"keywords": "",
"description": ""
},
"translations": [
{
"id": 2,
"category_id": 2,
"name": "Men",
"slug": "men",
"url_path": "men",
"description": "<p>Men</p>",
"meta_title": "",
"meta_description": "",
"meta_keywords": "",
"locale_id": 1,
"locale": "en"
}
],
"additional": []
}
]
}
- The response for the Shop route
shop.api.products.index
or/api/products
API has been updated. If you are consuming this API, please make the necessary changes to accommodate the updated response format.
{
"data": [
{
"id": 174,
"sku": "COMPLETELOOKSET2023",
"name": "All-in-One Smart Casual Outfit Set",
"description": "All-in-One Smart Casual Outfit Set",
"url_key": "all-in-one-smart-casual-outfit-set",
"base_image": {
"small_image_url": "http://localhost/laravel/bagisto/public/cache/small/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"medium_image_url": "http://localhost/laravel/bagisto/public/cache/medium/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"large_image_url": "http://localhost/laravel/bagisto/public/cache/large/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"original_image_url": "http://localhost/laravel/bagisto/public/cache/original/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp"
},
"images": [
{
"small_image_url": "http://localhost/laravel/bagisto/public/cache/small/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"medium_image_url": "http://localhost/laravel/bagisto/public/cache/medium/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"large_image_url": "http://localhost/laravel/bagisto/public/cache/large/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp",
"original_image_url": "http://localhost/laravel/bagisto/public/cache/original/product/174/6zgmyY14TQ2WqCxEEdENs8tSfI6bAJbq0bjljQOq.webp"
}
],
"is_new": true,
"is_featured": true,
"on_sale": true,
"is_saleable": true,
"is_wishlist": true,
"min_price": "$168.96",
"prices": {
"from": {
"regular": {
"price": "176.9600",
"formatted_price": "$176.96"
},
"final": {
"price": "168.9600",
"formatted_price": "$168.96"
}
},
"to": {
"regular": {
"price": "176.9600",
"formatted_price": "$176.96"
},
"final": {
"price": "168.9600",
"formatted_price": "$168.96"
}
}
},
"price_html": "<div class=\"grid gap-1.5\">\n<p class=\"flex items-center gap-4 max-sm:text-lg\">\n<span\nclass=\"text-zinc-500 line-through max-sm:text-base\"\n aria-label=\"$176.96\"\n>\n$176.96\n</span>\n\n$168.96\n</p>\n\n</div>",
- "avg_ratings": 4.5,
+ "ratings": {
+ "average": "2.0",
+ "total": 2
+ }
}
]
}
Impact Probability: Low
- The file
packages/Webkul/Shop/src/Resources/views/components/products/star-rating.blade.php
has been renamed to thepackages/Webkul/Shop/src/Resources/views/components/products/ratings.blade.php
.
Impact Probability: Low
- The file
packages/Webkul/Shop/src/Resources/views/checkout/cart/coupon.blade.php
has been relocated to thepackages/Webkul/Shop/src/Resources/views/checkout/coupon.blade.php
directory. This move was made because the file is included on both the checkout and cart pages.
Impact Probability: Low
1: The Webkul\Tax\Helpers\Tax
class has been replaced with Webkul\Tax\Tax
. Now, the Webkul\Tax\Tax
class is bound to the Webkul\Tax\Facades\Tax
facade, and all static methods have been converted to normal methods. However, you can still access these methods as static methods using the Webkul\Tax\Facades\Tax
facade.
- public static function isTaxInclusive(): bool
+ public function isInclusiveTaxProductPrices(): bool
- public static function getTaxRatesWithAmount(object $that, bool $asBase = false): array
+ public function getTaxRatesWithAmount(object $that, bool $asBase = false): array
- public static function getTaxTotal(object $that, bool $asBase = false): float
- public static function getDefaultAddress()
+ public function getDefaultAddress(): object
- public static function isTaxApplicableInCurrentAddress($taxCategory, $address, $operation)
+ public function isTaxApplicableInCurrentAddress($taxCategory, $address, $operation): void
2: The new class for handling shipping tax inclusion now includes two additional methods: isInclusiveTaxShippingPrices
and getShippingOriginAddress
.
+ public function isInclusiveTaxShippingPrices(): bool
+ public function getShippingOriginAddress(): object