- Fixed the dynamic resolution of the order number generator, when the config is changed after the app has booted
- Added the
SerializesModelstrait to the following event classes:BaseCartEventclass => it applies to all cart eventsBaseCheckoutEventclass => it applies to all checkout eventsBaseOrderEventandBaseOrderItemEventclasses => it applies to all order/order-item eventsBasePaymentEventclass => it applies to all payment events
- Added shipment event classes (created, delivered, ready, lost, etc)
- Added index to the
statuscolumn in thepaymentstable aspayments_status_index - Added support to media settings
backgroundandformat(passing "original" callskeepOriginalFormat()) - Added the
getDrivers(),choices()andids()static methods to theTaxEngineManagerclass - Added the
TaxEngineManager::dropResolvedInstances()method - Added
Registerableto all tax engine drivers (using the konekt/xtend interface) - Added the passing of
vanilo.taxes.engine.use_shipping_addressconfig flag to the Simple Tax Engine driver's constructor - Added the
vanilo/adjustmentsdependency to the Tax module. In fact, parts of the code were dependent on it anyways - Added support for the
includedconfig parameter for theDefaultTaxCalculatorand theDeductiveTaxCalculatorclasses - Added the registration of
promotionentry to the Eloquent morph map - Added the cart item percent discount promotion action type
- Changed the cart fixed and percent discount promotion action types to only act on carts, not on cart items
- Added the
priorityandsubtitlefields to theproducts,master_productsandmaster_product_variantstables - Added the
getListableVariants()method /$listable_variantsproperty to theMasterProductmodel - Added default sorting to
ProductSearch: by priority, descending - Added the static
getAvailableWithoutCoupon()andgetAvailableOnes()methods to thePromotionmodel (but not to the interface) - Added the
active()andnotDepeleted()scopes to thePromotionmodel - Added the
PromotionEventinterface - Added the
PromotionUtilizedevent class (Foundation) - Added the
UpdatePromotionUsagelistener which is bound to thePromotionUtilizedevent (Foundation) - Changed the
UpdateCouponUsagelistener so that it no longer increments usage of the coupon's promotion - Added the storing of promotion as a source to the created adjustments in the
CalculatePromotionslistener - Added amount details to each promotion applied at the checkout (earlier it was a simple numeric grand total)
- Added the processing of non-coupon-based promotions and individual cart items* to the
CalculatePromotionslistener - Added the polymorphic
sourcerelation/fields to theAdjustmentmodel - Added the
getSourceandsetSourcemethods to theAdjustmentmodel - Changed the
setAdjustablemethod to return the itself (wasvoidbefore) - Changed (fixed, in fact) the
SimpleTax/SimpleTaxDeductionadjusters to properly calculate the tax amount when it is included in the price - Changed the default-generated video hash to a base 58 ULID instead of nano id
- Changed the minimum Laravel version requirements to v10.48, v11.46.2 and v12.38 respectively
*: Cart Item support was half-baked in v5.0
- Dropped PHP 8.2 Support
- Changed the minimum Laravel 10 version to v10.48
- Added Laravel 12 Support
- BC: Added the
getBuyable()method to theOrderIteminterface - BC: Added the
addSubItem(),getRootItems()andgetState()methods to the Cart interface - BC: Added the
$forceNewItem(default false) parameter to theCart::addItem()method - BC: Added the following methods to the CartItem interface:
hasParent()getParent()hasChildItems()getChildItems()
- BC: Added the
getOriginalPrice()andhasAHigherOriginalPrice()methods to the Buyable interface - BC: Added the
isShippable()method to theCheckoutSubjectIteminterface - BC: Added the
getShippableItems()method to theCheckoutSubjectinterface - BC: Added the
getName()method to theCarrierinterface - BC: Added the following methods to the
ShippingMethodinterface:hasShippingCategory()getShippingCategory()getShippingCategoryMatchingCondition()
- BC: Added the following methods to the
ProductStateinterface:isListable()isViewable()isBuyable()isInScope()getListableStates()getViewableStates()getBuyableStates()getStatesOfScope()
- Added the
unlistedproduct state - Added the
ProductAvailabilityScopeenum class withlisting,viewingandbuyingvalues - Added the
gtinfield to the products and master product variants tables - Fixed the missing float cast of the order item's price field
- Fixed PHP 8.4 deprecation notices
- Added support for calculating item-level promotions on checkout
- Added ETA fields to Shipping Methods
- Added Shipping Categories
- Added shipping category and matching condition fields to the shipping methods table
- Added a customizable Shipping Method eligibility checker class
- Added the Order::inChannel() scope (Foundation)
- Added the Video module
- Added the Translation module
- Added the
HasVideostrait to theProduct,MasterProduct,MasterProductVariant,TaxonandTaxonomymodels in the Foundation module - Added the possibility to extend the
Featureshelper - Added the MultiLanguage feature configuration wrapper
- Added the
StaggeredDiscountpromotion action type - Added the
SaleandSaleIteminterfaces to the contracts module - Changed the
OrderandOrderIteminterfaces to extend the newSaleandSaleIteminterfaces from the contracts module - Changed the TimeHash order number generator to use uppercase by default
- Added the
extra_digitflag to the Time Hash generator that created 4+4+4 char number (eg. "77IG-13T3-5FH9") instead of 3+4+4 ones (eg. "77I-13TX-C002") - Fixed issue where the
linkablepointed to a missing product thus returning null - Added the following methods to the
ProductSearchclass:excludingSkus()forListing()- static factory method that initializes with alistableglobal scopeforViewing()- static factory method that initializes with aviewableglobal scopeforBuying()- static factory method that initializes with abuyableglobal scope
- Added SubItem support to the cart items
- Added SubItem support to the order items
- Added the
items.shippable_by_defaultconfiguration option (default: null) which is used to determine whether a cart item is shippable or not by default - Added the dual-field logic + Enum conversion to the MasterProductVariant model's
statefield - Fixed linked products retrieval: linked products with the same ID but a different type are now returned correctly
- Removed the enum constraint from the
product.statedatabase field - Marked the
Carrier::name()method as deprecated in favor of thegetName()method
- Improved PHP 8.4 compatibility by Oli Mortimer in #202
- Added PHP 8.4 support
- Added the Promotion module with promotions, actions, rules and coupons support
- Changed the minimal Address module requirement to v3.4.1
- Changed the minimal Customer module requirement to v3.2
- Changed the
ConfigurableModel::hasConfiguration()trait to return false on empty arrays as well (until now, onlynullwas considered as no config). It affects the following models:CarrierCartItemChannelOrderItemPaymentMethodShipmentShippingMethodTaxRate
- Changed the product and variant Stockable logic so that the derived getters use
onStockQuantity()andbackorderQuantity()instead of directstockandbackorderfield access. This makes possible to override stock logic and remain consistent in extended classes - Changed the
Channelabletrait's MorphToMany relationship definition so that the pivot definitions are explicitly declared - Added the following, v5 interface candidate methods to the Checkout implementations:
addCoupon()removeCoupon()hasCoupon()getCoupons()hasAnyCoupon()getPromotionsAmount()setPromotionsAmount()
- Added the following checkout events:
CouponAdded(to checkout)CouponRemoved(from checkout)CouponUtilized(after a successful checkout converted to an order)PaymentMethodSelected
- Added a listener to update coupon and promo usage after a
CouponUtilizedevent (Foundation) - Added a listener to recalculate shipping fees after a
PaymentMethodSelectedevent (Foundation) - Added a promotion calculation listener (on CouponAdded and CouponRemoved events)
- Added the
PercentDiscountadjuster class - Added
domainfield to the orders table - Added then automatic completion of
$order->domainfrom the current request to the OrderFactory - Added the
promotions_totalattribute getter to the FoundationOrdermodel - Added the search engine and inventory feature configuration wrappers
- Fixed an error when attempting to remove a product from the cart which is not in the by xujiongze in #188
- Fixed the
Channel::getCurrency()method returning the wrong attribute by Ouail in #189 - Fixed the logic of the payment-dependent shipping fee calculator
- Added the
OrderBillpayerUpdatedevent - Added the
OrderShippingAddressUpdatedevent
- Added the
includeVariants()method to the ProductSearch class⚠️ DOES NOT WORK ON POSTGRES (YET)⚠️ - Added the
priceGreaterThan,priceLessThanandpriceBetweenmethods to the ProductSearch class by Matima in #176 - Added the
Macroabletrait to theProductSearchclass - Added the unidirectional links feature
- Added the
isUnidirectional(),isOmnidirectional()andisEmpty()methods to theLinkGroupclass - Added the
pointsTo()method to theLinkGroupItemclass - Added the possibility to retrieve the link items directly using
linkItems()method asGet::the($type)->linkItems()->of($model) - Added the
link_itemshelper, shortcut to Get::the()->linkItems() - Added the possibility to force new link group creation using the
new()method of theEstablishclass - Added support for configurable decimal separator used by the
format_price()helper function - Added the discountable shipping fee calculator
- Added the
taxes_total,shipping_totalandtotalattribute getters to the FoundationOrdermodel - Added the follwing getters to the default Billpayer model (proxies down to the underlying address):
country_idprovince_idpostalcodecitystreet_address(fetches $billpayer->address->address) - can't useaddresssince that collides with the address() relationaddress2access_code
- Added the following content fields to the Taxon model/table:
subtitleexcerptdescriptiontop_contentbottom_content
- Changed the offline payment gateway's icon from a circle to a plug+x
- Fixed the possible missing configuration copy from cart_items to order_items in the OrderFactory
- Removed the Doctrine DBAL dependency
- Dropped PHP 8.0 & PHP 8.1 Support
- Dropped Laravel 9 Support
- Dropped Enum v3 Support
- Added PHP 8.3 Support
- Added Laravel 11 Support
- Changed minimum Laravel version to v10.43
- Changed minimal Enum requirement to v4.2
- Changed minimal Address module requirement to v3.3
- Upgraded to Konekt Address, Customer and User modules to v3
- Upgraded to Laravel Media Library v11
- Removed the Vanilo v2
Frameworknamespace compatibility layer - Removed the throwing of
CartUpdatedevent when destroying a cart (CartDeletingandCartDeletedremains) - Removed the deprecated
BuyableImageSpatieV7andBuyableImageSpatieV8traits - Added the
SimpleTaxDeductionadjuster - Added Cart item configuration support (different configurations constitute separate cart items) to the
Cart::addItem()method - Added the
currencyfield to the orders table - Added the following fields to the Channel model/table:
currencylanguagedomain- billing fields (emitter's data)
billing_zone_idshipping_zone_idthemecolor
- Added
ProductSearchfeatures:- added the optional $limit parameter to the
getResults()method - added the
orderBy()method - added the
slugEquals()method: it takes into account other query parameters as well, whereas the findBySlug solely queries by the given slug
- added the optional $limit parameter to the
- Added the
payment_method_idto the orders table - Added the processing of the
payment_method_idfield to the OrderFactory (Foundation) - Added the
BillpayerChangedcheckout event - Added the
is_hiddenfield to thePropertymodel - Changed the behavior of assignPropertyValues/assignPropertyValue methods so that it throws an
UnknownPropertyExceptionwhen passing an inexistent property slug - Added the
withImagesandwithChannelsmethods to the product search class (eager loads media) - Added the
channelablestable for being many-to-many polymorphic relationships with channels and arbitrary models - Added the
mapInto()method to theRelationAdjustmentCollectionclass, which forwards the call to the underlying Eloquent collection - Added the
Zoneablesupport to the Foundation PaymentMethod class - Added the
Channelablebehavior to Foundation Product, MasterProduct, PaymentMethod, ShippingMethod and Taxonomy classes - Added and extended Foundation Channel model that contains the known relationships to the "channelable" models
- Added the
withinChannel[s]methods to the ProductSearch class - Added the
Featuresaccessor class, which is a syntactic sugar for areas of the configuration - Added
isZoneRestricted()&isNotZoneRestricted()helper methods to theShippingMethodclass - Added the payment dependent shipping fee calculator
- Added the
units_soldand thelast_sale_atattributes to the master product model (SUM/MAX from variants) - Added the
Stockableinterface (Contracts) - Added the
Stockableinterface to theProductandMasterProductVariantmodels - Added the
backorderfield to products and product variants - Added the
typefield to the TaxCategory model - Added the
Taxableinterface - Added the
Taxableimplementation to Foundation's CartItem, Product and MasterProductVariant classes - Added the extendable
TaxEngine(facade) that can resolve tax rates from taxables, billing/shipping addresses (a place for various country-specific taxation drivers) - Added the
Merchantinterface - Added the
DefaultTaxCalculatorclass - calculates simply by rate - Added the
DeductiveTaxCalculatorclass similar to the default one, but it deducts the amount - Added the
CalculateTaxeslistener to cart update and shipping address change events - Added the
MerchantDTO class, that complies with the common, v4Merchantinterface - Added the
AddressDTO class (implements theAddressinterface) - Added the
AdjusterAliasesclass that for decoupling FQCNs from the database - Added automatic mapping of adjuster FQCN <-> aliases when saving an adjustment into the DB and when calling the
getAdjuster()method - Added the
itemsPreAdjustmentTotal()method to the Foundation's adjustable Cart model - Added the
replacePropertyValues()andreplacePropertyValuesByScalar()methods to theHasPropertyValuestrait - BC: Added the following methods to the
PropertyValueinterface:findByPropertyAndValue()getByScalarPropertiesAndValues()
- BC: Added the mixed return type to the
getCastedValuemethod of thePropertyValueinterface - BC: Added the
findBySku()method to theProductandMasterProductVariantinterfaces - BC: The
MasterProductinterface no longer extends theProductinterface - BC: The
Checkoutinterface now extends theArrayAccessand theShippableinterfaces (until here, only the concrete classes have implementation it) - BC: Added cart and order item models to the Relation morph map: the
adjustable_typefield in theadjustmentstable needs to be converted! - BC: Added the
?CheckoutSubjectreturn type to thegetCart()method of theCheckoutinterface - BC: Changed
Checkout::getShippingAddress()return type to be nullable - BC: Added the void return type to
Checkout::setShippingAddress() - BC: Added the following methods to the Checkout interface:
removeShippingAddress()getShipToBillingAddress()setShipToBillingAddress()getShippingMethodId()setShippingMethodId()getPaymentMethodId()setPaymentMethodId()getNotes()setNotes()clear()getShippingAmount()setShippingAmount()getTaxesAmount()setTaxesAmount()itemsTotal()
- BC: The unused
$configparameter has been removed from theRequestStorecheckout driver constructor - BC: Removed the following traits from the Checkout module:
HasCartComputesShipToNameFillsCommonCheckoutAttributes
- BC: Added the
deleteByType()andclear()methods to theAdjustmentCollectioninterface - BC: Added the
getAddress2()method to theAddressinterface - BC: The
Adjustable::itemsTotal()has been renamed topreAdjustmentTotal() - BC: The
invalidateAdjustments()method has been added to theAdjustableinterface - BC: The
exceptTypes()method has been added to theAdjustmentCollectioninterface - BC: The
AdjustmentTypeinterface extends theEnumInterface - BC: Added the
isNotIncluded()method to theAdjustmentinterface - BC: Changed the behavior of
AdjustmentCollection::total():- it ignores "included" adjustments by default,
- to incorporate the "included" adjustments pass true to the method:
$adjustments->total(withIncluded: true)
- BC: Changed the
TaxRateinterface so that it extends theConfigurableinterface - BC: Added the
itemsTotal()method to theCheckoutSubjectinterface - BC: Added argument and return types to all
CartandCartManagerinterface methods - BC: Added the
findOneByZoneAndCategorystatic method to theTaxRateinterface - BC: Changed the ShippingFeeCalculator, Carrier and Shipment interfaces to Configurable & Schematized
- BC: Changed the
CheckoutSubjectIteminterface into Configurable & Schematized - BC: Added the
$hooksand$itemHooksparameters to theOrderFactoryinterface - BC: Changed the
OrderIteminterface into Configurable - BC: Added 7 methods to the
OrderIteminterface - BC: Added the
getLanguage(),getFulfillmentStatus()anditemsTotal()methods to theOrderinterface - BC: Added to float return type to the
total()method of theOrderinterface - BC: The
OrderStatusandFulfillmentStatusinterfaces extend theEnumInterface - BC: Added the
getConfigurationSchema()method to theConfigurableinterface - BC: Changed the
PaymentMethodinterface into Configurable - BC: Added the
getRemoteId()method to thePaymentRequestinterface - BC: Added the following methods to the
Paymentinterface:getSubtype()hasRemoteId()getRemoteId()isOffline()
- BC: Added the
getTransactionAmount()method to thePaymentResponseinterface - BC: Added the
transactionHandler()method to thePaymentGatewayinterface (experimental feature) - BC: Added the
svgIcon()static method to thePaymentGatewayinterface - BC: Added the following methods to the
Payableinterface:getNumber()getPayableRemoteId()setPayableRemoteId()findByPayableRemoteId()hasItems()getItems()
- BC: The return type of the
getNumber()method of the Order interface is no longer nullable - BC: Added the
getCalculator()&estimate()methods to theShippingMethodinterface - BC: The
Channelinterface extends theConfigurableinterface - BC: Added the following methods to the
Channelinterface:getLanguage()getCurrency()getDomain()getMerchant()getBillingCountries()getShippingCountries()
- Deprecated the
PaymentMethod::getConfiguration()in favor ofconfiguration() - Deprecated the
PaymentResponse::getAmountPaid()method in favor ofgetTransactionAmount() - Added a series of experimental transaction-style interfaces. They shouldn't be used yet, but have been added so that they can be implemented during the v4.x lifecycle without breaking existing implementations
- Added the
Schematizedinterface - Added the nette/schema package requirement (v1.2.5+)
- Fixed possible null return type on Billpayer::getName() when is_organization is true but the company name is null
- Fixed the remnant orphan cart adjustments in the database during cart to order transformation
- Fixed the PHP
IteratorAggregate,ArrayAccessandCountableinterfaces-related deprecation notices
- Fixed the hinting of
Taxoninterface in theProductSearchclass (#163) - Changed the visibility of
ProductSearchproperties fromprivatetoproteced(#161)
- Added the
ofUser()scope to the base Order model - Added missing Payment Status magic comparison annotations to the interface/model
- Added the
hasRemoteId(),getRemoteId()andisOffline()helper methods to the Payment model (v4 interface candidates) - Added the
link_type_exists()helper function (to be used in blade templates)
- Added the
is_master_product_variant()helper function - Added the
ProductSearch::findBySlugOrFail()method - Changed the
ProductSearch::findBySlug()method to be static (it's backwards compatible)
- Added the
OrderProcessingStartedevent - Added the following order item events:
OrderItemShipped,OrderItemPickedUp,OrderItemsIsReadyForDelivery,OrderItemsIsReadyForPickupandOrderItemHasBeenPutOnHold - Changed the visibility of the
OrderFactory::callHookmethod fromprivatetoprotected - Added the Taxes module with: Tax Categories, Tax Rates and calculators
- Added
tax_category_idfield to products/master products/variants - Added the
SimpleTaxadjuster (it calculates the tax amount based on a flat rate in %) - Added the extended
CartItemandOrderItemmodels to Foundation that areAdjustable - Added the
fromKeyValuePairsstatic factory andgetDetail()methods to the DetailedAmount Dto class - Added the
carrier_cost,label_urlandlabel_base64fields to the shipments table/model - Added feature to assign shipments to order items, and vice versa (Foundation)
- Added optional hooks (callbacks) support to order items creation in the order factory class
- Added item adjustments total to the order grand total (Foundation)
- Added the
benefitadjustment type - Added the experimental
ProductSearchclass to replace ProductFinder with a multi-model (products + masters) variant- Added the required konekt/search v1.2+ dependency
- Changed the minimal Address module requirement to v2.7.1
- Added getRemoteId to NullRequest (PaymentRequest interface v4 method candidate)
- Added testing against MySQL 8.0 (besides v5.7)
- Fixed the shipping adjustment's undesired JSON->string conversion when cloning the cart adjustment to the order
- Fixed the missing locking of shipping adjustments on orders
- Fixed the missing foreign key between
shipping_methods.zone_idand thezonestable
- Fixed the
ConfigurableModeltrait to handle json strings and other arrayable fields in the underlying model - Fixed possibly incorrect zone member and shipping method list due to a bug in v2.5.0 of the Address module (bump to v2.5.1)
- Added Laravel 10 support
- Added the
CartCreated,CartUpdated,CartDeletedandCartDeletingevents - Added master product & variant (Foundation) to the morph map
- Added the
processingorder status enum value - Added the
ready_for_pickupfulfillment status enum value - Added the
DetailedAmountinterface (Contracts) and its Dto (Support) - Added Zone support to shipping methods (optional)
- Added the
Order::getLanguage()method - Added the
ShippingMethodSelectedcheckout event - Added Shipping fee calculator support
- Added the flat fee shipping fee calculator (Foundation)
- Added a listener (Foundation) that calculates the shipping fee on checkout shipping method change
- Added the following fields as recognized, regular fields of the checkout:
shipping_method_idpayment_method_idship_to_billing_addressnotes
- Added
ArrayAccessto the CheckoutManager and to the Checkout Stores - Added
Shippableto the CheckoutManager and to the Checkout Stores - Added the
vanilo.checkout.default.weight_unitconfig key which defaults to 'kg' - Added the following methods to the Checkout implementations (Manager, Stores but not the interfaces):
getShipToBillingAddress()setShipToBillingAddress()getShippingMethodId()setShippingMethodId()getPaymentMethodId()setPaymentMethodId()getShippingAmount()setShippingAmount()getTaxesAmount()setTaxesAmount()getNotes()setNotes()
- Added optional hooks (callbacks) support to the
OrderFactory::createFromDataArray()method - Added
payable_remote_idfield with getter/setter methods to the Foundation Order model - Added implementation of the
Adjustableinterface to the Foundation Order model - Added the copying of checkout/cart adjustments to the order created by the Foundation OrderFactory
- Added
intcast to OrderItem::quantity property - Added
dimensions()andhasDimensions()methods to theMasterProductVariantmodel Added theDimensionDTO class in the support module (provides a default implementation for the same name interface) - Added the vanilo/support ^3.6 dependency to the Product module
- Added the
subtypefield and thegetSubtype()method to thePaymentmodel - Added the
DeleteCartAdjustmentslistener onCartDeletingevent - Added the
CalculateShippingFeeslistener connected to shipping address/method change and cart updated events - Added the
clear()method toAdjustmentCollectionimplementations - Added the
invalidateAdjustments()method toAdjustableimplementations - Added the
shippingAdjustmentsTotal(),taxAdjustmentsTotal()andpromotionAdjustmentsTotal()methods to the Adjustable Cart model in foundation - Refactored the internals of the Checkout stores (session and request)
- Changed the return value of
Product::dimension()to be aDimensionobject from the support package instead of an anonymous class object - Changed minimum Address module requirement to v2.5
- Fixed the data loss issue when using the session checkout driver with cookie session driver in Laravel
- Fixed non-standard migration name in the order module
- Added the
descriptionandstatefields to the master product variants table - Added the Address comparison utility
- Added the
reference_numberfield to the shipments model - Added the
shippablesmany-to-many, polymorphic relationship.
It allows all the following scenarios:
a) shipping one order in one shipment
b) shipping one order in multiple shipments
c) shipping multiple orders in one shipment - Added
Shipment::ordersandOrder::shipmentsto the Foundation models - Added the
FulfillmentStatusenum to the Orders module - Added
fulfillment_statusto theordersandorder_itemstables - Added
languagefield to orders - Added
ordered_atfield to orders (defaults tocreated_atunless explicitly specified) - Added
shippingMethodandcustomerfields/relations to the extended (Foundation) Order model - Changed the random number algo in
TimeHashgenerator frommt_randtorandom_intfor a decreased collision probability - Fixed the
Carrier::name()method to overcome accessor infinite loop - Fixed the address creation with order factory when passing an explicit address type
- Fixed the missing shipment module from foundation module config
- Added the
MasterProdcutVariant::findBySku()method - Added the
Product::findBySku()method - Added the
ConfigurableModeltrait - Added processing of
configurationto the order factory, if the checkout item is a configurable - Added
Configurableto theCartItemmodel (incl. implementing the interface) - Added
Configurableto theOrderItemmodel (incl. implementing the interface) - Added the
Configurableinterface - Added
Configurableinterface to thePaymentMethodmodel - Added the missing
ShippingMethodinterface and proxy - Added
Configurableinterface to theCarrier,ShipmentandShippingMethodmodels - Changed the
Carrier,ShipmentandShippingMethodmodels to use theConfigurableModeltrait - Changed the
PaymentMethodmodel to use theConfigurableModeltrait - Fixed missing required argument from checkout drivers using the
update()method
- Fixed the session checkout store persistence error
- Fixed float conversion of master product variant fields (price, original price and dimensions)
- Changed the product stock field to be cast to float
- Removed the Buyable interface/trait from
Foundation\MasterProduct- it was conceptually wrong; - Added
BuyabletoFoundation\MasterProductVariant - Added the
Product::findBySku()method to the base product class - Added the
MasterProdcutVariant::findBySku()method
- Added forwarding/proxying of method calls and property getters from the Checkout manager to the underlying store
- Added
is_activeflag to shipping methods - Added
Cart::fresh()method to the Cart facade - Added the
is_master_product()helper function (Foundation) - Added the
MasterProduct::actives()andinactives()query builder scopes - Added the
Product::inactives()query builder scope - Added an extended
MasterProductmodel (Foundation) - Changed checkout store resolution to happen via the Laravel DI instead of
new SpecificStoreClass() - Changed both built-in checkout stores to save unknown properties as custom attributes on the
update()method call - Changed minimum Concord version requirement to v1.12
- Fixed missing implementation parts of the checkout session store
- Added the Master Product module
- Added the Adjustments module
- Added the extended Adjustable Cart model to
Foundation(original Cart model still there, intact) - Added
channel_idto the extendedOrdermodel in Foundation - Added Shipping methods
- Added the
getGatewayName()method to the PaymentMethod class. It can retrieve the gateway name without instantiating it, thus gateway configuration errors don't affect it - Added the
PropertyValue::findByPropertyAndValue('color', 'red')finder method - Added the
valueOfProperty(),assignPropertyValue()andassignPropertyValues()methods to theHasPropertyValuestrait - Added the Sluggable behavior to the Channel model
- Added configuration getter and setter methods to the Channel model
- Added PHP 8.2 Support
- Added Enum 4.0 Support
- Changed minimum Laravel requirement to 9.2
- Changed minimum Konekt module requirements to:
- Address: 2.2
- Concord: 1.11
- Customer: 2.3.1
- Enum: 3.1.1
- Laravel Migration Compatibility: 1.5
- User: 2.4
- Added
actives()andinactives()scopes to the Carrier model - Fixed the missing
Cartalias registration when using the entire framework
- Dropped PHP 7.4 Support
- Dropped Laravel 6-8 Support
- Added Laravel 9 Support
- Added PHP 8.1 Support
- Removed Admin from "Framework" - it is available as an optional separate package see vanilo/admin
- Changed minimum Laravel version to 9.0
- BC: Renamed Framework Module and Namespace to "Foundation"
- BC: Removed the
Vanilo\Foundation\Models\PaymentMethodclass. UseVanilo\Payment\Models\PaymentMethodinstead - BC: Renamed
vanilo.framework.*config values tovanilo.foundation.* - BC: Added the static
findBySlug(string $slug): ?Property;method to the Property interface - Added the Shipment Module
- Added the Links Module
- Added
original_pricefield to products - Added product dimension (
width,height,depth) andweightfields
- Upgrade to AppShell v2.2 (minimum requirement)
- Added order print page in admin
- Added payment history to order view page in admin
- Added payment method to order list in admin
- Added show/hide closed orders button to order list in admin
- Added
status_messagefield to payment list on order view in admin - Fixed missing query strings in admin paginators
- Improved permission migrations to add flexibility to projects that manage permissions differently
- Improved property value form handling on admin
- Changed internal CS ruleset from PSR-2 to PSR-12
- Changed all classes to declare strict types enabled
- Bumped min Properties module to v2.1.1 to fix type mismatch at
Property::findOneByName()when using overridden Property model.
- Added PHP 8 support
- Added Spatie Media Library v9 Support
- Added Primary Image feature (products)
- Upgrade to AppShell 2.1
- Refactored image handling
- Added images to taxonomies and taxons
- Added option to define separate image conversions per entity type (product, taxonomy, taxon)
- Added the
HasImagesinterface - extracted it from Buyable - Added
Ordermodel that implements thePayable - Added Payment method CRUD
- Added dispatching of order cancelled and completed events when updating their status in the admin panel
- Fixed model registration to takes into account Concord's
register_route_modelssetting - Switched CI from Travis to Github Actions
- BC: Upgrade to Spatie MediaLibrary v8
- Added Laravel 8 support
- Dropped Laravel 5 support
- Dropped support for PHP 7.2 and PHP 7.3 (due to MediaLibrary)
- Minimum Laravel requirement is v6.18 (due to MediaLibrary)
- Upgrade to AppShell 2.0
- Admin and admin icons are themeable (AppShell 2.0 feature)
- Changed minimum AppShell version to 1.7
- Fixes the "taxons" vs "taxa" permission problem caused by Doctrine Inflector 1.4+
- Added Laravel 7 support
- Added PHP 7.4 support
- Dropped PHP 7.1 support
- Combination of PHP 7.4 & Laravel 5.6|5.7 is not recommended
due to improper order of
implode()arguments in eloquent-sluggable dependency
- Fixed a bug with Category editing in Admin under Laravel 6
- Added Laravel 6 Support
- Added simple product stock
- Added ProductFinder pagination support
- Added Channel Module
- Fixed migrations fail bug when the
adminrole is not present in the target system
- Technical release: fixed inexistent version constraint (other than that same as 0.5.1)
- Complete Laravel 5.8 support
- Support for Product Properties has been added (via Properties module)
- Using AppShell v1.3
- ProductFinder has been added (supports: taxons, property values and search terms in product name)
- Improved SQLite compatibility in migrations (to fix certain testing scenarios)
- Product image upload validation has been improved
- Added Product Category Support
- Laravel 5.7 Compatibility
- PHP 7.3 Compatibility
- Product sales figures (units sold, last sale date)
- Using AppShell v1.2
- Admin UI fixes & improvements
- Vanilo Address module has been dropped
- Product Image support via Spatie Laravel Media Library v7
- Laravel 5.4 support dropped (due to Spatie Media Library v7 conflicts)
- Concord v1.2, AppShell 0.9.9
- Fixed breaking change with AppShell > v0.9.6
- Laravel 5.6 compatible
- Cart handles user associations
- Admin UI polishes
- Concord v1.1
- Fixed Billpayer related problems
- Checkout => Order works properly
- Order CRUD on admin has been added
- 🚀 Yet another E-commerce platform has born 🚀
- 🚀 This will be a very good one 🚀