All notable, unreleased changes to this project will be documented in this file. For the released changes, please visit the Releases page.
-
Allow including draft orders in voucher usage. New
includeDraftOrderInVoucherUsageflag allows defining if vouchers used in draft orders should be counted into voucher usage. - #14288 by @zedzior, @IKarbowiak, @michal-macioszczyk- Add
includeDraftOrderInVoucherUsagetoOrderSettings - Add
includeDraftOrderInVoucherUsagetoOrderSettingsInput
- Add
- Optimize number of queries in bulk mutations when calling webhooks. This change affects only users of open-source Saleor, who have their own custom plugin implementations. To adjust to this change, the
webhooksparameter should be added to any of the affected method. Affected methods:attribute_updatedattribute_deletedattribute_value_deletedpromotion_deletedstaff_deleted
- Saleor will no longer reattempt delivery for webhooks that return non-transient HTTP errors (400, 404 etc.) or redirects - #14566 by @patrys
- Feature preview breaking change:
- Drop
defaultTransactionFlowStrategyfromOrderSettingstype. UsePaymentSettings.defaultTransactionFlowStrategyinstead. DropdefaultTransactionFlowStrategyfromOrderSettingsInputtype. UsePaymentSettingsInput.defaultTransactionFlowStrategyinstead. - #14671 by @korycins
- Drop
- Fix draft order voucher assignment - #14336 by @IKarbowiak
- Allow add multiple codes per voucher - #14123 by @SzymJ, @IKarbowiak, @michal-macioszczyk, @zedzior
- Add
VoucherInput.addCodestovoucherCreateandvoucherUpdatemutations. - Add
Voucher.singleUseflag. - Deprecate
OrderBulkCreateInput.voucher. - Deprecate
VoucherInput.codeinvoucherCreateandvoucherUpdatemutations. - Add
exportVoucherCodesmutation. - Add
voucherCodeBulkDeletemutation. - Adjust voucher usage calculations.
- Add
- Improved GraphQL ID validation messages - #14447 by @patrys
- Add
vouchertocheckoutquery - #14512 by @zedzior
- Add transaction items deletion to cleardb command. - #14198 by @jakubkuc
- Added validation for timestamp comparison #14025 by @ritanjandawn
- Page -> Attributes refactor. The goal is to simplify the attribute models. The current attribute model relations are complex and really hard to understand. - #13621
requirements.txtandrequirements_dev.txtwere dropped in favor of only supportingpoetry- #14611 by @patrys- Change the Attribute - Product relation to decrease code complexity and make it easier to understand the relations - #13407 by @aniav
- Introduce promotions, that allow applying discounts based on certain conditions.
The promotions are replacement for current sales and covers all sales functionalities and provide additional features. - #12980 by @IKarbowiak @zedzior
- Add new types:
Promotion- Represents the promotion.PromotionRule- Specifies conditions that must be met to apply the discount.PromotionTranslation- Represents promotion translations.PromotionTranslatableContent- Represents promotion's original translatable fields and related translations.PromotionRuleTranslation- Represents promotion rule translations.PromotionRuleTranslatableContent- Represents promotion rule's original translatable fields and related translations.
- Add new mutations:
promotionCreate- Creates a new promotion.promotionUpdate- Updates an existing promotion.promotionDelete- Deletes a promotion.promotionBulkDelete- Deletes multiple promotions.promotionRuleCreate- Creates a new promotion rule.promotionRuleUpdate- Updates an existing promotion rule.promotionRuleDelete- Deletes a promotion rule.promotionTranslae- Translates a promotion.promotionRuleTranslae- Translates a promotion rule.
- Add new webhooks:
PROMOTION_CREATED- triggered when promotion is created.PROMOTION_UPDATED- triggered when promotion is updated.PROMOTION_DELETED- triggered when promotion is deleted.PROMOTION_STARTED- triggered when promotion is started.PROMOTION_ENDED- triggered when promotion is ended.PROMOTION_RULE_CREATED- triggered when promotion rule is created.PROMOTION_RULE_UPDATED- triggered when promotion rule is updated.PROMOTION_RULE_DELETED- triggered when promotion rule is deleted.
- Add new subscriptions:
PromotionCreated- Event sent when promotion is created.PromotionUpdated- Event sent when promotion is updated.PromotionDeleted- Event sent when promotion is deleted.PromotionStarted- Event sent when promotion is started.PromotionEnded- Event sent when promotion is ended.PromotionRuleCreated- Event sent when promotion rule is created.PromotionRuleUpdated- Event sent when promotion rule is updated.PromotionRuleDeleted- Event sent when promotion rule is deleted.
- Add new event types:
PromotionCreatedEvent- Represents history log of the promotion created event.PromotionUpdatedEvent- Represents history log of the promotion updated event.PromotionStartedEvent- Represents history log of the promotion started event.PromotionEndedEvent- Represents history log of the promotion ended event.PromotionRuleCreatedEvent- Represents history log of the promotion rule created event.PromotionRuleUpdatedEvent- Represents history log of the promotion rule updated event.PromotionRuleDeletedEvent- Represents history log of the promotion rule deleted event.PromotionEventInterface- Interface for promotion related event history log.PromotionRuleEventInterface- Interface for promotion rule related event history log.
- Deprecate types (Saleor 4.0):
Sale- UsePromotionandPromotionRuleinstead.SaleChannelListing- UsePromotionRuleinstead.
- Deprecate mutations (Saleor 4.0):
saleCreate- UsepromotionCreatemutation instead.saleUpdate- UsepromotionUpdatemutation instead.saleDelete- UsepromotionDeletemutation instead.saleBulkDelete- UsepromotionBulkDeletemutation instead.saleCataloguesAdd- UsepromotionRuleCreatemutation instead.saleCataloguesRemove- UsepromotionRuleUpdateorpromotionRuleDeletemutations instead.saleChannelListingUpdate- UsepromotionRuleCreateorpromotionRuleUpdatemutations instead.saleTranslate- UsepromotionTranslatemutation instead.
- Deprecate webhooks (Saleor 4.0):
SALE_CREATED- UsePROMOTION_CREATEDinstead.SALE_UPDATED- UsePROMOTION_UPDATEDinstead.SALE_DELETED- UsePROMOTION_DELETEDinstead.SALE_TOGGLE- UsePROMOTION_STARTEDandPROMOTION_ENDEDinstead.
- Deprecate subscriptions (Saleor 4.0):
SaleCreated- UsePromotionCreatedinstead.SaleUpdated- UsePromotionUpdateinstead.SaleDeleted- UsePromotionDeletedinstead.SaleToggle- UsePromotionStartedandPromotionEndedinstead.
- Add new types:
- Deprecate
external_urlonInvoiceGraphQL type in favour ofurl. No matter if the invoice is stored on Saleor or is a link to an external invoice it will get returned in theurlfield. - Optimize number of queries in bulk mutations when calling Webhooks. This change affects only users of open-source Saleor, who have their own custom plugin implementations. To adjust to this change, the
webhooksparameter should be added to any of the affected method. Affected methods:channel_updatedcategory_deletedgift_card_createdgift_card_deletedgift_card_status_changedmenu_deletedmenu_item_deletedorder_updatedorder_cancelledcustomer_updatedcustomer_deletedcustomer_metadata_updatedcollection_deletedproduct_createdproduct_updatedproduct_deletedproduct_variant_createdproduct_variant_updatedproduct_variant_deletedproduct_variant_out_of_stockproduct_variant_back_in_stockproduct_variant_stock_updatedshipping_price_deletedshipping_zone_deletedvoucher_deleted
- Feature preview change:
- Order bulk create allow to import archive orders - #14177 by @kadewu
orderBulkCreatenow will attempt to create order withIGNORE_FAILEDpolicy even if:Usercannot be resolved andemailwasn't provided.Variantwasn't provided butproduct_namewas provided.
- Order bulk create allow to import archive orders - #14177 by @kadewu
- Fix thumbnail redirects sometimes failing with an unsafe redirect warning - #14023 by @patrys
- New environment variable
PUBLIC_URLto define URL on which Saleor is hosted (e.g., https://api.example.com/). Takes precedence overENABLE_SSLandShop.domainfor URL generation - #13841 by @przlada - Add a new
updatedAtfield and a filter for product categories. - #13825 by @rafiwts - Made the triggering frequency of update-search Celery beat tasks customizable (settable using
BEAT_UPDATE_SEARCH_FREQUENCY) - #14152 by @NyanKiyoshi
-
Feature preview breaking change:
- Deprecate
OrderSettingsInput.defaultTransactionFlowStrategy. It will be removed in 3.17. UsePaymentSettingsInput.defaultTransactionFlowStrategyinstead. - Deprecate
OrderSettings.defaultTransactionFlowStrategy. It will be removed in 3.17. UsePaymentSettings.defaultTransactionFlowStrategyinstead. - Change in the CSV export. It will now use empty string for empty attribute values instead of a single whitespace value.
- Deprecate
-
Add IP filter feature to backend HTTP requests - #13891 by @NyanKiyoshi
This rejects server-side HTTP requests (webhooks, OIDC, etc.) if they try to communicate with private or loopback IP addresses, to change the default behavior, refer to
HTTP_IP_FILTER_ENABLED, andHTTP_IP_FILTER_ALLOW_LOOPBACK_IPSsettings for more details.
-
Add
customerIpAddresstotransactionInitializeandtransactionProcessmutations - #13718 by @korycins -
Add
PaymentSettingstoChannel- #13677 by @korycins -
Adjust where filtering by empty values - explicit treat empty values - #13754 by @IKarbowiak
-
Add
storedPaymentMethodRequestDeletemutation - #13660 by @korycins -
Add
externalReferencetoupdateWarehouse. It will allow update warehouse by external reference. - #13342 by @Smit-Parmar -
Add Filter warehouses by metadata - #13345 by @Smit-Parmar
-
Add API for tokenizing payment methods - #13879 by @korycins
-
Deprecate the
NOTIFY_USERwebhook and theexternalNotificationTriggermutation - #13881 by @maarcingebala- See the docs for more details about migrating from the
NOTIFY_USERwebhook to other events: https://docs.saleor.io/docs/next/upgrade-guides/notify-user-deprecation
- See the docs for more details about migrating from the
- Add
customerIpAddresstoTRANSACTION_INITIALIZE_SESSIONandTRANSACTION_PROCESS_SESSIONwebhooks #13718 by @korycins - Add
STORED_PAYMENT_METHOD_DELETE_REQUESTEDwebhook event - #13660 by @korycins - Add
NOTIFY_CUSTOMERflag toFulfillmentCreatedtype - #13620, by @Air-t- Inform apps if customer should be notified when fulfillment is created.
- Add
NOTIFY_CUSTOMERflag toFulfillmentApprovedtype - #13637, by @Air-t- Inform apps if customer should be notified when fulfillment is approved.
- Add
GIFT_CARD_EXPORT_COMPLETEDwebhook - #13765, by @Air-t- Event sent when CSV export for gift cards is completed.
- Add
PRODUCT_EXPORT_COMPLETEDwebhook - #13787, by @Air-t- Event sent when CSV export for products is completed.
- Add
FULFILLMENT_TRACKING_NUMBER_UPDATEDwebhook - #13708, by @Air-t- Called after
fulfillmentUpdateTrackingororderFulfillmutation if tracking number is updated.
- Called after
- Add support for tokenizing payment methods via sync webhooks - #13879 by @korycins
- Add missing
FULFILLMENT_CREATEDevent call toautomatically_fulfill_digital_lines_with_fulfillment_createdaction. - #13823, by @Air-t - Increase timeout of shipping filtering webhooks:
ORDER_FILTER_SHIPPING_METHODSandCHECKOUT_FILTER_SHIPPING_METHODSto 20 seconds - #13989 by @maarcingebala
-
Fix error in variant available stock calculation - 13593 by @awaisdar001
-
Add missing currency in action for transaction requests - 13786 by @AjmalPonneth
-
Fix giftcard code description - #13728 by @rafiwts
-
Change error message when denying a permission - #13334 by @rafiwts
-
Add filter by slugs to attribute choices - #13761 by @rafiwts
-
Add a new
productfield onAssignedProductAttributeValue. First part of a simplification of Attribute - Product relation from #12881. by @aniav -
Lazy legacy webhooks payload generation - #13758 by @maarcingebala
-
Fix NoneType in
prodcutChannelsListingUpdate- #13694 by @Manoj-gowra -
Extended
AttributeValueTranslation.nameto 250 characters - #13776 by @aniav -
Add a new
pagefield onAssignedPageAttributeValue. First stage (migration) of a simplification of Attribute - Page relation from #13403. by michal-macioszczyk -
Update workflow actions with poetry dependencies - #13736 by @rafiwts
-
Remove input and fields related to transaction API and deprecated in 3.13 - #13020 by @korycins
WebhookEventTypeEnum.TRANSACTION_ACTION_REQUEST- UseTRANSACTION_CHARGE_REQUESTED,TRANSACTION_REFUND_REQUESTED,TRANSACTION_CANCELATION_REQUESTEDinstead.WebhookEventTypeAsyncEnum.TRANSACTION_ACTION_REQUEST- UseTRANSACTION_CHARGE_REQUESTED,TRANSACTION_REFUND_REQUESTED,TRANSACTION_CANCELATION_REQUESTEDinstead.WebhookSampleEventTypeEnum.TRANSACTION_ACTION_REQUESTTransactionItem:voidedAmount- UsecanceledAmountinstead.status- The amounts can be used to define the current status of transactions.type- Usenameormessage.reference- UsepspReferenceinstead.
TransactionActionEnum.VOID- UseCANCELinstead.OrderEvent.status- UseTransactionEventto track the status ofTransactionItem.OrderEventsEnum:TRANSACTION_CAPTURE_REQUESTED- UseTRANSACTION_CHARGE_REQUESTEDinstead.TRANSACTION_VOID_REQUESTED- UseTRANSACTION_CANCEL_REQUESTEDinstead.
TransactionStatusTransactionEvent:status- Usetypeinstead.reference- UsepspReferenceinstead.name- Usemessageinstead.
TransactionCreateInput:status- The amounts can be used to define the current status of transactions.type- Usenameormessage.reference- UsepspReferenceinstead.voidedAmount- UsecanceledAmountinstead.
TransactionEventInput:status- Status will be calculated by Saleor.reference- UsepspReferenceinstead.name- Usemessageinstead.
TransactionUpdateInput:status- The amounts can be used to define the current status of transactions.type- Usenameormessage.reference- UsepspReferenceinstead.voidedAmount- UsecanceledAmountinstead.
TransactionActionRequest- UseTransactionChargeRequested,TransactionRefundRequested,TransactionCancelationRequestedinstead.
-
Remove
OrderBulkCreateInput.trackingClientIdfield - #13146 by @SzymJ -
Drop backend integration with Open Exchange Rates API - #13175 by @maarcingebala
- Note: this changes doesn't affect Saleor Cloud users, as the integration was never enabled there.
- After this change, the following fields in API alway return
nullvalues:ProductPricingInfo.discountLocalCurrencyProductPricingInfo.priceRangeLocalCurrencyVariantPricingInfo.discountLocalCurrencyVariantPricingInfo.priceLocalCurrency
-
Change order of resolving country code in checkout - #13159 by @jakubkuc
- Until now, checkout mutations were ignoring provided shipping address when shipping was not required. After this change, the shipping address is always set when supplied in the input. It might be breaking, as the shipping address affects the country code used for tax calculation.
- The order of resolving the checkout country code is always as follows:
- Shipping address
- Billing address
- Channel's default country
Shipping methods can be removed by the user after it has been assigned to a checkout; shippingMethodId is now a nullable input in the checkoutShippingMethodUpdate mutation. - #13068 by @FremahA
-
Add
linestoOrderGrantedRefund- #13014 by @korycins -
Add
orderNoteAddandorderNoteUpdatemutations and deprecateorderAddNotemutation - #12434 by @pawelzar -
Deprecate
Order.trackingClientIdfield - #13146 by @SzymJ -
Add ability to use metadata in the
Shoptype - #13128 by @Smit-Parmar, #13364 by @maarcingebala- Add
metadataandprivateMetadatainShopSettingsInput. - Add
Shop.idfield. - Add support for modifying metadata via generic metadata API.
- Add
-
Fix error "Cannot return null for non-nullable field Webhook.name" - #12989 by @Smit-Parmar
-
Added
GiftCardFilterInput.createdByEmailfilter - #13132 by @Smit-Parmar -
Add metadata support for channels. #13230 by @Smit-Parmar
-
Remove
Preview featurelabel frommetafield,metafields,metadata,privateMetafield,privateMetafieldsandprivateMetadatafields - #13245 by @korycins -
[Preview] Add possibility to completeCheckout without payment in transaction flow - #13339 by @kadewu:
- New field
allowUnpaidOrdersinOrderSettingsforChannel
- New field
-
Add
searchtogiftCardsquery - #13173 by @zedzior -
Add
ProductBulkTranslatemutation - #13329 by @SzymJ -
Add
ProductVariantBulkTranslatemutation - #13329 by @SzymJ -
Add
AttributeBulkCreatemutation - #13398 by @SzymJ -
Deprecate
WebhookEventTypeAsyncEnum.ANY_EVENTSandWebhookEventTypeEnum.ANY_EVENTS; instead listeners should subscribe to specific webhook events - #13452 by @maarcingebala -
Add ability to update
warehouseaddress withMANAGE_PRODUCTSpermissions: - #13248 by @Air-t -
Add ability to update
siteaddress withMANAGE_SETTINGSpermissions: - #13248 by @Air-t -
Add the ability to set address public metadata in the following mutations: - #13248 by @Air-t
accountUpdate,accountAddressCreate,accountAddressUpdate,addressCreate,AccountAddressUpdate,checkoutShippingAddressUpdate,checkoutBillingAddressUpdate,shopAddressUpdate,warehouseUpdate- Add
metadatatoAddressInputfield
-
Add support for unhandled field
Shop.trackInventoryByDefaultforproductVariantCreateandproductVariantBulkCreate- #13492 by @Smit-Parmar -
Add
storedPaymentMethodsfield toUserandCheckouttype - #13581 -
Add
AttributeBulkUpdatemutation - #13532 by @SzymJ -
Better checkout error feedback - #13458 by @korycins
- Add
Checkout.problemsfield - Add
CheckoutLine.problemsfield - Add
CheckoutSettingsInputtoChannelCreateInput&ChannelUpdateInput - Add
checkoutSettingsfield toChannel
- Add
- Introduce
Saleor-Schema-VersionHTTP header in app manifest fetching and app installation handshake requests. - #13075 by @przlada - Add
SHOP_METADATA_UPDATEDwebhook - #13364, #13388 by @maarcingebala- Called when metadata is changed for the Shop object via the generic metadata API or the
shopSettingsUpdatemutation.
- Called when metadata is changed for the Shop object via the generic metadata API or the
- Add
CHANNEL_METADATA_UPDATEDwebhook - #13448, by @Air-t- Called when metadata is changed for the Channel object via the generic metadata API or the
channelUpdatemutation.
- Called when metadata is changed for the Channel object via the generic metadata API or the
- Add
ACCOUNT_CONFIRMEDwebhook - #13471, by @Air-t- Called when user confirm an account with
confirmAccountmutation.
- Called when user confirm an account with
- Add
ACCOUNT_DELETEDwebhook - #13471, by @Air-t- Called after account deletion is confirmed with
accountDeletemutation.
- Called after account deletion is confirmed with
- Add
ACCOUNT_EMAIL_CHANGEDwebhook - #13537, by @Air-t- Called when
confirmEmailChangemutation is triggered.
- Called when
- Add
ACCOUNT_SET_PASSWORD_REQUESTEDwebhook - #13486, by @Air-t- Called after
requestPasswordResetorcustomerCreatemutation.
- Called after
- Add
STAFF_SET_PASSWORD_REQUESTEDwebhook - #13486, by @Air-t- Called after
requestPasswordResetorcustomerCreatemutation for staff users.
- Called after
-
Add possibility to log without confirming email - #13059 by @kadewu
- New mutation
sendConfirmationEmailto send an email with confirmation link - New environment variable
CONFIRMATION_EMAIL_LOCK_TIMEto control lock time between new email confirmations - Type
Usergets new fieldis_confirmed CustomerInputgets new fieldis_confirmed
- New mutation
-
Use public key thumbprint as KID in JWKS.json #13442 by @cmiacz
-
Add POC of Core API tests - #13034 by @fowczarek
-
Expand metric units to support more types of products. - #13043 by @FremahA
-
Remove unused
django-versatileimagefieldpackage - #13148 by @SzymJ -
Remove unused
google-measurement-protocolpackage - #13146 by @SzymJ -
Add missing descriptions to App module. - #13163 by @fowczarek
-
Drop TranslationProxy and replace
translatedmodel property withget_translationfunction where needed. - #13156 by @zedzior -
Add missing descriptions to account module. - #13155 by @fowczarek
-
Add missing descriptions to channel module. - #13166 by @fowczarek
-
Add missing descriptions to checkout module. - #13167 by @fowczarek
-
Add missing descriptions to attribute module. - #13165 by @fowczarek
-
Add missing descriptions to csv module. - #13184 by @fowczarek
-
Add missing descriptions to Account module. - #13155 by @fowczarek
-
Add
ACCOUNT_CONFIRMATION_REQUESTEDasync event - #13162 by @SzymJ -
Add
ACCOUNT_DELETE_REQUESTEDasync event - #13170 by @SzymJ -
Add
ACCOUNT_CHANGE_EMAIL_REQUESTEDasync event - #13233 by @SzymJ -
Add missing descriptions to Webhook module - #13262 by @Smit-Parmar
-
Add missing descriptions to Shop module. - #13295 by @Smit-Parmar
-
Add missing descriptions to Warehouse module. - #13264 by @Smit-Parmar
-
Add missing descriptions to Product module. - #13259 by @FremahA
-
Add missing description for Invoice module - #13265 by @DevilsAutumn
-
Add missing descriptions to Discount module - #13261 by @devilsautumn
-
Fix deleting event payloads by adding batches - #13368 by @jakubkuc
-
Add missing descriptions to Shipping module. - #13372 by @Smit-Parmar
-
Fix error handling in the permission check for
Query.webhook- #13378 by @patrys -
Add missing descriptions to Translation module. - #13410 by @Smit-Parmar
-
Add missing descriptions to menu module - #13409 by @devilsautumn
-
Add missing descriptions to page module - #13536 by @devilsautumn
-
Fix seo field to accept null value - #13512 by @ssuraliya
-
Add missing descriptions to payment module - #13546 by @devilsautumn
-
Fix
NOTIFY_USERallow to create webhook with only one event - #13584 by @Air-t -
Add Index for 'Created' field of the Order Model - #13682 by @ritanjandawn
-
Gift cards can now be applied on a checkout without an email, fields
used_byandused_by_emailon GiftCard model are deprecated and will be removed in 4.0. - #13019 by @tomaszszymanski129 -
The
ProductBulkCreateError.pathfield for errors related to product variants input in theproductBulkCreatemutation will now return more detailed error paths, e.g.variants.1.stocks.0.warehouseinstead ofvariants.1.warehouses- #12534 by @SzymJ -
The
discountsfield has been removed from the listed plugin manager methods. Instead of thediscountsargument, an applieddiscountis now assigned to each line in theCheckoutLineInfoinside theCheckoutInfoobject. - #11934 by @fowczarekcalculate_checkout_totalcalculate_checkout_subtotalcalculate_checkout_shippingget_checkout_shipping_tax_ratecalculate_checkout_line_totalcalculate_checkout_line_unit_priceget_checkout_line_tax_ratepreprocess_order_creation
This breaking change affect any custom plugins in open-source Saleor, if they override any of the above mentioned methods.
-
The signature of the
list_payment_gatewaysmanager method has changed. It may affect Saleor open-source users, who maintain plugins overriding this method. Changes:- The
checkout: Checkoutargument was removed checkout_info: CheckoutInfoandcheckout_lines: Iterable[CheckoutLineInfo]arguments were added instead
- The
- [Preview] Add
orderBulkCreatemutation - #12269 by @zedzior - [Preview] Add
attributeBulkTranslateandattributeValueBulkTranslatemutations - #12965 by @SzymJ - [Preview] Add
whereandsearchfiltering option onproductsquery - #12960 by @zedzior - Allow setting metadata during user creating and updating - #12577 by @IKarbowiak
- The following mutations have been updated:
customerCreatecustomerUpdatestaffCreatestaffUpdateaccountUpdatecustomerBulkUpdate
- The following mutations have been updated:
- Add
checkoutCreateFromOrdermutation to create checkout from order - #12628 by @korycins - Allow setting metadata during invoice creating and updating - #12641 by @IKarbowiak
- Introduce channel permissions - #10423 by @IKarbowiak
- Limit staff users to access only certain channels. Granted permissions only apply to channels that the user has already been given access to.
- Add
enableAccountConfirmationByEmailoption in theshopSettingsUpdatemutation, which allows controlling whether account confirmation should be sent on new account registrations (before it was controlled by env variableENABLE_ACCOUNT_CONFIRMATION_BY_EMAIL) - #12781 by @SzymJ - Add
pathfield toProductVariantBulkError- #12534 by @SzymJ - Add
enable_account_confirmation_by_emailtoSiteSettingsmodel and allow to update it viashopSettingsUpdatemutation - #12781 by @SzymJ - Add
brandoptional field with brand data (initially logo image) toManifest,AppInstallationandApp- #12361 by @przlada - Add
externalReferencefield toAttributeValueInput,BulkAttributeValueInputandAttributeValueSelectableTypeInput- #12823 by @SzymJ - [Preview] Add
wherefiltering option withidsfilter forproduct_variants,collectionsandcategoriesquery - #13004 by @zedzior
- Introduce channel permissions - #10423 by @IKarbowiak
- Extend the OpenID connect configuration with
Staff user domainsandDefault permission group name for new staff users. - When the OpenID plugin is active, the default staff permission group is created, and all staff users are assigned to it.
- To ensure the proper functioning of OAuth permissions, ensure that the
Default permission group name for new staff usersis set to a permission group with no channel restrictions.
- Extend the OpenID connect configuration with
- [Preview] Add
ORDER_BULK_CREATEDevent, which is sent for successfully imported orders - #12536 by @zedzior
- Fix saving
description_plaintextfor product - #12586 by @SzymJ - Fix sending
product_createdevent inProductBulkCreatemutation - #12605 by @SzymJ - Add
ORDER_REFUNDED,ORDER_FULLY_REFUNDED,ORDER_PAIDwebhooks - #12533 by @korycins - Add functionality to delete expired orders automatically - #12710 by @korycins
- Handle error raised by 0Auth when fetching token - #12672 by @IKarbowiakg
- Fix adding new lines to draft order when the existing line has deleted product - #12711 by @SzymJ
- Upgrade checkout
complete_checkoutto assign guest checkout to account if it exists - #12758 by @FremahA - Remove
ENABLE_ACCOUNT_CONFIRMATION_BY_EMAILenv variable from settings - ##12781 by @Szym - Remove default
EMAIL_URLvalue pointing to console output; from now onEMAIL_URLhas to be set explicitly - #12580 by @maarcingebala - Match
OrderstoUserwhen creating user using OIDC plugin. - #12863 by @kadewu - Allow defining a custom price in draft orders - #12855 by @KirillPlaksin
- Update price resolvers - use
discounted_priceonProductChannelListingandProductVariantChannelListingchannel listings to return the pricing - #12713 by @IKarbowiak
-
Improve support for handling transactions - #10350 by @korycins
-
API changes:
-
Add new mutations:
transactionEventReport- Report the event for the transaction.orderGrantRefundCreate- Add granted refund to the order.orderGrantRefundUpdate- Update granted refund.
-
Add new types:
OrderGrantedRefund- The details of the granted refund.
-
Add new webhooks:
TRANSACTION_CHARGE_REQUESTED- triggered when a staff user request charge for the transaction.TRANSACTION_REFUND_REQUESTED- triggered when a staff user request refund for the transaction.TRANSACTION_CANCELATION_REQUESTED- triggered when a staff user request cancelation for the transaction.
-
Add new webhook subscriptions:
TransactionChargeRequested- Event sent when transaction charge is requested.TransactionRefundRequested- Event sent when transaction refund is requested.TransactionCancelationRequested- Event sent when transaction cancelation is requested.
-
Add new fields:
OrderSettings.markAsPaidStrategy- Determine what strategy will be used to mark the order as paid.TransactionItem:authorizePendingAmount- Total amount of ongoing authorization requests for the transaction.refundPendingAmount- Total amount of ongoing refund requests for the transaction.cancelPendingAmount- Total amount of ongoing cancel requests for the transaction.chargePendingAmount- Total amount of ongoing charge requests for the transaction.canceledAmount- Total amount canceled for this transaction.name- Name of the transaction.message- Message related to the transaction.pspReference- PSP reference of transaction.createdBy- User or App that created the transaction.externalUrl- The URL that will allow to redirect user to payment provider page with transaction details.
TransactionEvent:pspReference- PSP reference related to the event.message- Message related to the transaction's event.externalUrl- The URL that will allow to redirect user to payment provider page with transaction event details.amount- The amount related to this event.type- The type of action related to this event.createdBy- User or App that created the event.
Order:totalCharged- Amount charged for the order.totalCanceled- Amount canceled for the order.grantedRefunds- List of granted refunds.totalGrantedRefund- Total amount of granted refund.totalRefunded- Total refund amount for the order.totalRefundPending- Total amount of ongoing refund requests for the order's transactions.totalAuthorizePending- Total amount of ongoing authorization requests for the order's transactions.totalChargePending- Total amount of ongoing charge requests for the order's transactions.totalCancelPending- Total amount of ongoing cancel requests for the order's transactions.totalRemainingGrant- The difference between the granted refund and the pending and refunded amounts.
OrderEventsEnum:TRANSACTION_CHARGE_REQUESTEDTRANSACTION_CANCEL_REQUESTEDTRANSACTION_MARK_AS_PAID_FAILED
-
Add new input fields:
TransactionCreateInput&TransactionUpdateInput:name- The name of the transaction.message- The message of the transaction.pspReference- The PSP Reference of the transaction.amountCanceled- Amount canceled by this transaction.externalUrl- The URL that will allow to redirect user to payment provider page with transaction.
TransactionEventInput:pspReference- The PSP Reference of the transaction.message- Message related to the transaction's event.
-
Deprecate webhooks:
TRANSACTION_ACTION_REQUEST- UseTRANSACTION_CHARGE_REQUESTED,TRANSACTION_REFUND_REQUESTED,TRANSACTION_CANCELATION_REQUESTEDinstead.
-
Deprecate object fields:
TransactionItem:voidedAmount- UsecanceledAmount. This field will be removed in Saleor 3.14 (Preview feature).status- Not needed anymore. The transaction amounts will be used to determine a current status of transactions. This field will be removed in Saleor 3.14 (Preview feature).reference- UsepspReferenceinstead. This field will be removed in Saleor 3.14 (Preview feature).
TransactionEvent:status- Usetypeinstead. This field will be removed in Saleor 3.14 (Preview feature).reference- UsepspReferenceinstead. This field will be removed in Saleor 3.14 (Preview feature).name- Usemessageinstead. This field will be removed in Saleor 3.14 (Preview feature).
TransactionActionEnumVOID- UseCANCELinstead. This field will be removed in Saleor 3.14 (Preview feature).
Order:totalCaptured- UsetotalChargedinstead. Will be removed in Saleor 4.0
OrderEvent:status- UseTransactionEventto track the status ofTransactionItem. This field will be removed in Saleor 3.14 (Preview feature).
OrderEventsEnum:TRANSACTION_CAPTURE_REQUESTED- UseTRANSACTION_CHARGE_REQUESTEDinstead. This field will be removed in Saleor 3.14 (Preview feature).TRANSACTION_VOID_REQUESTED- UseTRANSACTION_CANCEL_REQUESTEDinstead. This field will be removed in Saleor 3.14 (Preview feature).
-
Deprecate input fields:
TransactionCreateInput&TransactionUpdateInput:status- Not needed anymore. The transaction amounts will be used to determine the current status of transactions. This input field will be removed in Saleor 3.14 (Preview feature).type- Usenameandmessageinstead. This input field will be removed in Saleor 3.14 (Preview feature).reference- UsepspReferenceinstead. This input field will be removed in Saleor 3.14 (Preview feature).amountVoided- UseamountCanceledinstead. This input field will be removed in Saleor 3.14 (Preview feature).
TransactionEventInput:status- Status will be calculated by Saleor. This input field will be removed in Saleor 3.14 (Preview feature).reference- UsepspReferenceinstead. This input field will be removed in Saleor 3.14 (Preview feature).name- Usemessageinstead. This field will be removed in Saleor 3.14 (Preview feature).
-
-
-
Support for payment apps - #12179 by @korycins
- Add new mutations:
paymentGatewayInitialize- Initialize the payment gateway to process a payment.transactionInitialize- Initiate payment processing.transactionProcess- Process the initialized payment.
- Add new synchronous webhooks:
PAYMENT_GATEWAY_INITIALIZE_SESSION- Triggered when a customer requests the initialization of a payment gateway.TRANSACTION_INITIALIZE_SESSION- Triggered when a customer requests the initialization of a payment processing.TRANSACTION_PROCESS_SESSION- Triggered when a customer requests processing the initialized payment.
- Add new mutations:
-
Feature preview breaking change:
- Improve support for handling transactions - #10350 by @korycins
- For all new
transactionItemcreated bytransactionCreate, any update action can be done only by the same app/user that performedtransactionCreateaction. This change impacts only on newtransactionItem,the already existing will work in the same way as previously. transactionRequestActionmutation can't be executed withMANAGE_ORDERSpermission. PermissionHANDLE_PAYMENTSis required.- Drop calling
TRANSACTION_ACTION_REQUESTwebhook inside a mutation related toPaymenttypes. The related mutations:orderVoid,orderCapture,orderRefund,orderFulfillmentRefundProducts,orderFulfillmentReturnProducts. Use a dedicated mutation for triggering an action:transactionRequestAction.
- For all new
See the 3.12 to 3.13 upgrade guide for more details.
- Improve support for handling transactions - #10350 by @korycins
- [Preview] Add
StockBulkUpdatemutation - #12139 by @SzymJ - Upgrade GraphiQL to
2.4.0for playground - #12271 by @zaiste - Add new object type
AppManifestRequiredSaleorVersion- #12164 by @przlada- Add new optional field
Manifest.requiredSaleorVersion - Add
requiredSaleorVersionvalidation toappInstallandappFetchManifestmutations
- Add new optional field
- Add new field
authortoManifestandAppobject types - #12166 by @przlada - Add backward compatibility for
taxCodefield - #12325 by @maarcingebala - Support resolving
Orderas an entity in Apollo Federation - #12328 by @binary-koan - [Preview] Add
ProductBulkCreatemutation - #12177 by @SzymJ - [Preview] Add
CustomerBulkUpdatemutation - #12268 by @SzymJ
- Add
requiredSaleorVersionfield to the App manifest determining the required Saleor version as semver range - #12164 by @przlada - Add new field
authorto the App manifest - #12166 by @przlada - Add
GIFT_CARD_SENTasynchronous event to webhooks - #12472 by @rafalp
- Add Celery beat task for expiring unconfirmed not paid orders - #11960 by @kadewu:
- Add
expireOrdersAftertoorderSettingsforChanneltype. - Add
ORDER_EXPIREDwebhook triggered whenOrderis marked as expired.
- Add
- Create order discounts for all voucher types - #12272 by @IKarbowiak
- Core now supports Dev Containers for local development - #12391 by @patrys
- Use Mailhog SMTP server on Dev Container - #12402 by @carlosa54
- Publish schema.graphql on releases - #12431 by @maarcingebala
- Fix missing webhook triggers for
order_updatedandorder_fully_paidwhen an order is paid with atransactionItem- #12508 by @korycins - Remove Mailhog in favor of Mailpit - #12447 by @carlosa54
-
stocksandchannelListingsinputs for previewProductVariantBulkUpdatemutation has been changed. Both inputs have been extended by:createinput - list of items that should be createdupdateinput - list of items that should be updatedremoveinput - list of objects ID's that should be removed
If your platform relies on this [Preview] feature, make sure you update your mutations stocks and channel listings inputs from:
{ "stocks/channelListings": [ { ... } ] }to:
{ "stocks/channelListings": { "create": [ { ... } ] } } -
Change the discount rounding mode - #12041 by @IKarbowiak
- Change the rounding mode from
ROUND_DOWNtoROUND_HALF_UP- it affects the discount amount and total price of future checkouts and orders with a percentage discount applied. The discount amount might be 0.01 greater, and the total price might be 0.01 lower. E.g. if you had an order for $13 and applied a 12.5% discount, you would get $11.38 with a $1.62 discount, but now it will be calculated as $11.37 with $1.63 discount.
- Change the rounding mode from
-
Media and image fields now default to returning 4K thumbnails instead of original uploads - #11996 by @patrys
-
Include specific products voucher in checkout discount - #12191 by @IKarbowiak
- Make the
specific productandapply once per ordervoucher discounts visible oncheckout.discountfield. Previously, the discount amount for these vouchers was shown as 0.
- Make the
- Added support for all attributes types in
BulkAttributeValueInput- #12095 by @SzymJ - Add possibility to remove
stocksandchannel listingsinProductVariantBulkUpdatemutation. - Move
orderSettingsquery toChanneltype - #11417 by @kadewu:- Mutation
Channel.channelCreateandChannel.channelUpdatehave neworderSettingsinput. - Deprecate
Shop.orderSettingsquery. UseChannel.orderSettingsquery instead. - Deprecate
Shop.orderSettingsUpdatemutation. UseChannel.channelUpdateinstead.
- Mutation
- Add meta fields to
ProductMediamodel - #11894 by @zedzior - Make
oldPasswordargument onpasswordChangemutation optional; support accounts without usable passwords - @11999 by @rafalp - Added support for AVIF images, added
AVIFandORIGINALtoThumbnailFormatEnum- #11998 by @patrys - Introduce custom headers for webhook requests - #11978 by @zedzior
- Improve GraphQL playground by storing headers in the local storage - #12176 by @zaiste
- Fixes for GraphiQL playground - #12192 by @zaiste
- Fix saving
metadatainProductVariantBulkCreateandProductVariantBulkupdatemutations - #12097 by @SzymJ - Enhance webhook's subscription query validation. Apply the validation and event inheritance to manifest validation - #11797 by @zedzior
- Fix GraphQL playground when the
operationNameis set across different tabs - #11936 by @zaiste - Add new asynchronous events related to media: #11918 by @zedzior
PRODUCT_MEDIA CREATEDPRODUCT_MEDIA_UPDATEDPRODUCT_MEDIA_DELETEDTHUMBNAIL_CREATED
- CORS is now handled in the ASGI layer - #11415 by @patrys
- Added native support for gzip compression - #11833 by @patrys
- Set flat rates as the default tax calculation strategy - #12069 by @maarcingebala
- Enables flat rates for channels in which no tax calculation method was set.
- Users created by the OIDC plugin now have unusable password set instead of empty string - #12103 by @rafalp
- Fix thumbnail generation long image names - #12435 by @KirillPlaksin
Just so you know, changes mentioned in this section are in a preview state and can be subject to changes in the future.
- Bulk mutations for creating and updating multiple product variants in one mutation call - #11392 by @SzymJ
- Ability to run subscription webhooks in a dry-run mode - #11548 by @zedzior
- Preview of new
wherefiltering API which allows joining multiple filters withAND/ORoperators; currently available only in theattributesquery - #11737 by @IKarbowiak
- [Preview] Add
productVariantBulkUpdatemutation - #11392 by @SzymJ - [Preview] Add new error handling policies in
productVariantBulkCreatemutation - #11392 by @SzymJ - [Preview] Add
webhookDryRunmutation - #11548 by @zedzior - [Preview] Add
webhookTriggermutation - #11687 by @zedzior - Fix adding an invalid label to meta fields - #11718 by @IKarbowiak
- Add filter by
checkoutTokentoQuery.orders. - #11689 by @kadewu - [Preview] Attribute filters improvement - #11737 by @IKarbowiak
- introduce
whereoption onattributesquery - add
searchoption onattributesquery - deprecate
product.variantfield - deprecate the following
Attributefields:filterableInStorefront,storefrontSearchPosition,availableInGrid.
- introduce
- Allow
webhookCreateandwebhookUpdatemutations to inherit events fromqueryfield - #11736 by @zedzior - Add new
PRODUCT_VARIANT_STOCK_UPDATEDevent - #11665 by @jakubkuc - Disable websocket support by default in
uvicornworker configuration - #11785 by @NyanKiyoshi - Fix send user email change notification - #11840 by @jakubkuc
- Fix trigger the
FULFILLMENT_APPPROVEDwebhook for partial fulfillments - #11824 by @d-wysocki
- Add ability to filter and sort products of a category - #10917 by @yemeksepeti-cihankarluk, @ogunheper
- Add
filterargument toCategory.products - Add
sortByargument toCategory.products
- Add
- Extend invoice object types with
Orderreferences - #11505 by @przlada- Add
Invoice.orderfield - Add
InvoiceRequested.order,InvoiceDeleted.orderandInvoiceSent.orderfields
- Add
- Add support for metadata for
Addressmodel - #11701 by @IKarbowiak - Allow to mutate objects, by newly added
externalReferencefield, instead of Saleor-assigned ID. Apply to following models: #11410 by @zedziorProductProductVariantAttributeAttributeValueOrderUserWarehouse
- Fix fetching the
checkout.availableCollectionPoints- #11489 by @IKarbowiak - Move checkout metadata to separate model - #11264 by @jakubkuc
- Add ability to set a custom Celery queue for async webhook - #11511 by @NyanKiyoshi
- Remove
CUSTOMER_UPDATEDwebhook trigger from address mutations - #11395 by @jakubkuc - Drop
Django.Auth- #11305 by @fowczarek - Add address validation to AddressCreate - #11639 by @jakubkuc
- Propagate voucher discount between checkout lines when charge_taxes is disabled - #11632 by @maarcingebala
- Fix stock events triggers - #11714 by @jakubkuc
- Accept the gift card code provided in the input - by @mociepka
- Fix
GIFT_CARD_CREATEDevent not firing when order with gift cards is fulfilled - #11924 by @rafalp
- Flat tax rates - #9784 by @maarcingebala
- Drop Vatlayer plugin - #9784 by @maarcingebala
- The following fields are no longer used:
Product.chargeTaxes- from now on, presence ofProduct.taxClassinstance decides whether to charge taxes for a product. As a result, the "Charge Taxes" column in CSV product exports returns empty values.Shop.chargeTaxesOnShipping- from now on, presence ofShippingMethod.taxClassdecides whether to charge taxes for a shipping method.Shop.includeTaxesInPrices,Shop.displayGrossPrices- configuration moved toChannel.taxConfiguration.
- Removed the following plugin manager methods:
assign_tax_code_to_object_metaapply_taxes_to_productfetch_taxes_dataget_tax_rate_percentage_valueupdate_taxes_for_order_lines
- The following fields are no longer used:
- Add
attributefield toAttributeValueTranslatableContenttype. #11028 by @zedzior - Add new properties in the
Producttype - #10537 by @kadewu- Add new fields:
Product.attribute,Product.variant - Add
sortByargument toProduct.media
- Add new fields:
- Allow assigning attribute value using its ID. Add to
AttributeValueInputdedicated field for each input type. #11206 by @zedzior
- Re-enable 5 minute database connection persistence by default - #11074 + #11100 by @NyanKiyoshi
SetDB_CONN_MAX_AGE=0to disable this behavior (adds overhead to requests) - Bump cryptography to 38.0.3: use OpenSSL 3.0.7 - #11126 by @NyanKiyoshi
- Add exif image validation - #11224 by @IKarbowiak
- Include fully qualified API URL
Saleor-Api-Urlin communication with Apps. #11223 by @przlada - Add metadata on order line payload notifications. #10954 by @CarlesLopezMagem
- Make email authentication case-insensitive. #11284 by @zedzior
- Fix the observability reporter to obfuscate URLs. #11282 by @przlada
- Add HTTP headers filtering to observability reporter. #11285 by @przlada
- Deactivate Webhook before deleting and handle IntegrityErrors - #11239 @jakubkuc
- Add tax exemption API for checkouts (
taxExemptionManagemutation) - #10344 by @SzymJ - Switch GraphQL Playground to GraphiQL V2
- Verify JWT tokens whenever they are provided with the request. Before, they were only validated when an operation required any permissions. For example: when refreshing a token, the request shouldn't include the expired one.
- Add the ability to filter by slug. #10578 by @kadewu
- Affected types: Attribute, Category, Collection, Menu, Page, Product, ProductType, Warehouse
- Deprecated
slugin filter formenus. Useslugsinstead
- Add new
productsfilters. #10784 by @kadewuisAvailablepublishedFromavailableFromisVisibleInListing
- Add the ability to filter payments by a list of ids. #10821 by @kadewu
- Add the ability to filter customers by ids. #10694 by @kadewu
- Add
User.checkoutsfield. #10862 by @zedzior - Add optional field
audienceto mutationtokenCreate. If provided, the created tokens will have keyaudwith value:custom:{audience-input-value}- #10845 by @korycins - Use
AttributeValue.nameinstead ofAttributeValue.slugto determine uniqueness of a value instance for dropdown and multi-select attributes. - #10881 by @jakubkuc - Allow sorting products by
CREATED_ATfield. #10900 by @zedzior - Add ability to pass metadata directly in create/update mutations for product app models - #10689 by @SzymJ
- Add ability to use SKU argument in
productVariantUpdate,productVariantDelete,productVariantBulkDelete,productVariantStocksUpdate,productVariantStocksDelete,productVariantChannelListingUpdatemutations - #10861 by @SzymJ - Add sorting by
CREATED_ATfield. #10911 by @zedzior- Affected types: GiftCard, Page.
- Deprecated
CREATION_DATEsort field on Page type. UseCREATED_ATinstead.
- Reference attribute linking to product variants - #10468 by @IKarbowiak
- Add base shipping price to
Order- #10771 by @fowczarek - GraphQL view no longer generates error logs when the HTTP request doesn't contain a GraphQL query - #10901 by @NyanKiyoshi
- Add
issfield to JWT tokens - #10842 by @korycins - Drop
pyandtoxdependencies from dev requirements - #11054 by @NyanKiyoshi
- Add
issfield to JWT tokens - #10842 by @korycins - Add new field
audienceto App manifest. If provided, App's JWT access token will haveaudfield. - #10845 by @korycins - Add new asynchronous events for objects metadata updates - #10520 by @rafalp
CHECKOUT_METADATA_UPDATEDCOLLECTION_METADATA_UPDATEDCUSTOMER_METADATA_UPDATEDFULFILLMENT_METADATA_UPDATEDGIFT_CARD_METADATA_UPDATEDORDER_METADATA_UPDATEDPRODUCT_METADATA_UPDATEDPRODUCT_VARIANT_METADATA_UPDATEDSHIPPING_ZONE_METADATA_UPDATEDTRANSACTION_ITEM_METADATA_UPDATEDWAREHOUSE_METADATA_UPDATEDVOUCHER_METADATA_UPDATED
- Allow explicitly setting the name of a product variant - #10456 by @SzymJ
- Added
nameparameter to theProductVariantInputinput
- Added
- Add a new stock allocation strategy based on the order of warehouses within a channel - #10416 by @IKarbowiak
- Add
channelReorderWarehousesmutation to sort warehouses to set their priority - Extend the
Channeltype with thestockSettingsfield - Extend
ChannelCreateInputandChannelUpdateInputwithstockSettings
- Add
- Refactor warehouse mutations - #10239 by @IKarbowiak
- Providing the value in
shippingZonefiled inWarehouseCreatemutation will raise a ValidationError. UseWarehouseShippingZoneAssignto assign shipping zones to a warehouse.
- Providing the value in
- Hide Subscription type from Apollo Federation (#10439) (f5132dfd3)
- Mark
Webhook.secretKeyas deprecated (#10436) (ba445e6e8)
- Trigger the
SALE_DELETEDwebhook when deleting sales in bulk (#10461) (2052841e9) - Add
FULFILLMENT_APPROVEDwebhook - #10621 by @IKarbowiak
- Add support for
bcryptpassword hashes - #10346 by @pkucmus - Add the ability to set taxes configuration per channel in the Avatax plugin - #10445 by @mociepka
- Drop
django-versatileimagefieldpackage; add a proxy view to generate thumbnails on-demand - #9988 by @IKarbowiak- Drop
create_thumbnailscommand
- Drop
- Change return type from
CheckoutTaxedPricesDatatoTaxedMoneyin plugin manager methodscalculate_checkout_line_total,calculate_checkout_line_unit_price- #9526 by @fowczarek, @mateuszgrzyb, @stnatic
- Add GraphQL subscription support for synchronous webhook events - #9763 by @jakubkuc
- Add support for the CUSTOMER_* app mount points (#10163) by @krzysztofwolski
- Add permission group webhooks:
PERMISSION_GROUP_CREATED,PERMISSION_GROUP_UPDATED,PERMISSION_GROUP_DELETED- #10214 by @SzymJ - Add
ACCOUNT_ACTIVATEDandACCOUNT_DEACTIVATEDevents - #10136 by @tomaszszymanski129 - Allow apps to query data protected by MANAGE_STAFF permission (#10103) (4eb93d3f5)
- Fix returning sale's GraphQL ID in the
SALE_TOGGLEpayload (#10227) (0625c43bf) - Add descriptions to async webhooks event types (#10250) (7a906bf7f)
- Add
CHECKOUT_CALCULATE_TAXESandORDER_CALCULATE_TAXEStoWebhookEventTypeSyncEnum#9526 by @fowczarek, @mateuszgrzyb, @stnatic - Add
forceNewLineflag to lines input inCheckoutLinesAdd,CheckoutCreate,DraftOrderCreate,OrderCreate,OrderLinesCreatemutations to support same variant in multiple lines - #10095 by @SzymJ - Add
VoucherFilter.idsfilter - #10157 by @Jakubkuc - Add API to display shippable countries for a channel - #10111 by @korycins
- Improve filters' descriptions - #10240 by @dekoza
- Add query for transaction item and extend transaction item type with order (#10154) (b19423a86)
- Add a new method to plugin manager:
get_taxes_for_checkout,get_taxes_for_order- #9526 by @fowczarek, @mateuszgrzyb, @stnatic - Allow promoting customer users to staff (#10115) (2d56af4e3)
- Allow values of different attributes to share the same slug (#10138) (834d9500b)
- Fix payment status for orders with total 0 (#10147) (ec2c9a820)
- Fix failed event delivery request headers (#10108) (d1b652115)
- Fix create_fake_user ID generation (#10186) (86e2c69a9)
- Fix returning values in JSONString scalar (#10124) (248d2b604)
- Fix problem with updating draft order with active Avalara (#10183) (af270b8c9)
- Make API not strip query params from redirect URL (#10116) (75176e568)
- Update method for setting filter descriptions (#10240) (65643ec7c)
- Add expires option to CELERY_BEAT_SCHEDULE (#10205) (c6c5e46bd)
- Recalculate order prices on marking as paid mutations (#10260) (4e45b83e7)
- Fix triggering
ORDER_CANCELEDevent at the end of transaction (#10242) (d9eecb2ca) - Fix post-migrate called for each app module (#10252) (60205eb56)
- Only handle known URLs (disable appending slash to URLs automatically) - #10290 by @patrys
- Add synchronous tax calculation via webhooks - #9526 by @fowczarek, @mateuszgrzyb, @stnatic
- Allow values of different attributes to share the same slug - #10138 by @IKarbowiak
- Add query for transaction item and extend transaction item type with order - #10154 by @IKarbowiak
- Populate the initial database with default warehouse, channel, category, and product type - #10244 by @jakubkuc
- Fix inconsistent beat scheduling and compatibility with DB scheduler - #10185 by @NyanKiyoshi
This fixes the following bugs:tick()could decide to never schedule anything else thansend-sale-toggle-notificationsifsend-sale-toggle-notificationsdoesn't returnis_due = False(stuck forever until beat restart or ais_due = True)tick()was sometimes scheduling other schedulers such as observability to be run every 5m instead of every 20sis_due()fromsend-sale-toggle-notificationswas being invoked every 5s on django-celery-beat instead of every 60ssend-sale-toggle-notificationswould crash on django-celery-beat withCannot convert schedule type <saleor.core.schedules.sale_webhook_schedule object at 0x7fabfdaacb20> to modelUsage:- Database backend:
celery --app saleor.celeryconf:app beat --scheduler saleor.schedulers.schedulers.DatabaseScheduler - Shelve backend:
celery --app saleor.celeryconf:app beat --scheduler saleor.schedulers.schedulers.PersistentScheduler
- Fix problem with updating draft order with active Avalara - #10183 by @IKarbowiak
- Fix stock validation and allocation for order with local collection point - #10218 by @IKarbowiak
- Fix stock allocation for order with global collection point - #10225 by @IKarbowiak
- Fix assigning an email address that does not belong to an existing user to draft order (#10320) (97129cf0c)
- Fix gift cards automatic fulfillment (#10325) (6a528259e)
- Fix ORM crash when generating hundreds of search vector in SQL - #10261 by @NyanKiyoshi
- Fix "stack depth limit exceeded" crash when generating thousands of search vector in SQL - #10279 by @NyanKiyoshi
- Use custom search vector in order search - #10247 by @fowczarek
- Optimize filtering attributes by dates - #10199 by @tomaszszymanski129
- Fix stock allocation for order with global collection point - #10225 by @IKarbowiak
- Fix stock validation and allocation for order with local collection point - #10218 @IKarbowiak
- Fix returning GraphQL IDs in the
SALE_TOGGLEwebhook - #10227 by @IKarbowiak
-
Fix inconsistent beat scheduling and compatibility with db scheduler - #10185 by @NyanKiyoshi
This fixes the following bugs:tick()could decide to never schedule anything else thansend-sale-toggle-notificationsifsend-sale-toggle-notificationsdoesn't returnis_due = False(stuck forever until beat restart or ais_due = True)tick()was sometimes scheduling other schedulers such as observability to be ran every 5m instead of every 20sis_due()fromsend-sale-toggle-notificationswas being invoked every 5s on django-celery-beat instead of every 60ssend-sale-toggle-notificationswould crash on django-celery-beat withCannot convert schedule type <saleor.core.schedules.sale_webhook_schedule object at 0x7fabfdaacb20> to model
Usage:
- Database backend:
celery --app saleor.celeryconf:app beat --scheduler saleor.schedulers.schedulers.DatabaseScheduler - Shelve backend:
celery --app saleor.celeryconf:app beat --scheduler saleor.schedulers.schedulers.PersistentScheduler
-
Fix problem with updating draft order with active avalara - #10183 by @IKarbowiak
-
Fix stock validation and allocation for order with local collection point - #10218 by @IKarbowiak
-
Fix stock allocation for order with global collection point - #10225 by @IKarbowiak
- Allow skipping address validation for checkout mutations (#10084) (7de33b145)
- Add
OrderFilter.numbersfilter - #9967 by @SzymJ - Expose manifest in the
Apptype (#10055) (f0f944066) - Deprecate
configurationUrlanddataPrivacyfields in apps (#10046) (68bd7c8a2) - Fix
ProductVariant.createdresolver (#10072) (6c77053a9) - Add
schemaVersionfield toShoptype. #11275 by @zedzior
- Add webhooks
PAGE_TYPE_CREATED,PAGE_TYPE_UPDATEDandPAGE_TYPE_DELETED- #9859 by @SzymJ - Add webhooks
ADDRESS_CREATED,ADDRESS_UPDATEDandADDRESS_DELETED- #9860 by @SzymJ - Add webhooks
STAFF_CREATED,STAFF_UPDATEDandSTAFF_DELETED- #9949 by @SzymJ - Add webhooks
ATTRIBUTE_CREATED,ATTRIBUTE_UPDATEDandATTRIBUTE_DELETED- #9991 by @SzymJ - Add webhooks
ATTRIBUTE_VALUE_CREATED,ATTRIBUTE_VALUE_UPDATEDandATTRIBUTE_VALUE_DELETED- #10035 by @SzymJ - Add webhook
CUSTOMER_DELETED- #10060 by @SzymJ - Add webhook for starting and ending sales - #10110 by @IKarbowiak
- Fix returning errors in subscription webhooks payloads - #9905 by @SzymJ
- Build JWT signature when secret key is an empty string (#10139) (c47de896c)
- Use JWS to sign webhooks with secretKey instead of obscure signature (ac065cdce)
- Sign webhook payload using RS256 and private key used JWT infrastructure (#9977) (df7c7d4e8)
- Unquote secret access when calling SQS (#10076) (3ac9714b5)
- Add payment transactions data loader (#9940) (799a9f1c9)
- Optimize 0139_fulfil_orderline_token_old_id_created_at migration (#9935) (63073a86b)
- Introduce plain text attribute - #9907 by @IKarbowiak
- Add
metadatafields toOrderLineandCheckoutLinemodels - #10040 by @SzymJ - Add full-text search for Orders (#9937) (61aa89f06)
- Stop auto-assigning default addresses to checkout - #9933 by @SzymJ
- Fix inaccurate tax calculations - #9799 by @IKarbowiak
- Fix incorrect default value used in
PaymentInput.storePaymentMethod- #9943 by @korycins - Improve checkout total base calculations - #10048 by @IKarbowiak
- Improve click & collect and stock allocation - #10043 by @IKarbowiak
- Fix product media reordering (#10118) (de8a1847f)
- Add custom SearchVector class (#10109) (bf74f5efb)
- Improve checkout total base calculations (527b67f9b)
- Fix invoice download URL in send-invoice email (#10014) (667837a09)
- Fix invalid undiscounted total on order line (22ccacb59)
- Fix Avalara for free shipping (#9973) (90c076e33)
- Fix Avalara when voucher with
apply_once_per_ordersettings is used (#9959) (fad5cdf46) - Use Saleor's custom UvicornWorker to avoid lifespan warnings (#9915) (9090814b9)
- Add Azure blob storage support (#9866) (ceee97e83)
- Hide private metadata in notification payloads - #9849 by @maarcingebala
- From now on, the
private_metadatafield inNOTIFY_USERwebhook payload is deprecated and it will return an empty dictionary. This change also affectsAdminEmailPlugin,UserEmailPlugin, andSendgridEmailPlugin.
- From now on, the
- Add new fields to
Ordertype to show authorize/charge status #9795- Add new fields to Order type:
totalAuthorizedtotalChargedauthorizeStatuschargeStatus
- Add filters to
Order:authorizeStatuschargeStatus
- Add new fields to Order type:
- Add mutations for managing a payment transaction attached to order/checkout. - #9564 by @korycins
- add fields:
order.transactionscheckout.transactions
- add mutations:
transactionCreatetransactionUpdatetransactionRequestAction
- add new webhook event:
TRANSACTION_ACTION_REQUEST
- add fields:
- Unify checkout's ID fields. - #9862 by @korycins
- Deprecate
checkoutIDandtokenin all Checkout's mutations. Useidinstead. - Deprecate
tokenincheckoutquery. Useidinstead.
- Deprecate
- Add
unitPrice,undiscountedUnitPrice,undiscountedTotalPricefields toCheckoutLinetype - #9821 by @fowczarek - Fix invalid
ADDED_PRODUCTSevent parameter forOrderLinesCreatemutation - #9653 by @IKarbowiak - Update sorting field descriptions - add info where channel slug is required (#9695) (391743098)
- Fix using enum values in permission descriptions (#9697) (dbb783e1f)
- Change gateway validation in
checkoutPaymentCreatemutation (#9530) (cf1d49bdc) - Fix invalid
ADDED_PRODUCTSevent parameter forOrderLinesCreatemutation (#9653) (a0d8aa8f1) - Fix resolver for
Product.createdfield (#9737) (0af00cb70) - Allow fetching by id all order data for new orders (#9728) (71c19c951)
- Provide a reference for the rich text format (#9744) (f2207c408)
- Improve event schema field descriptions - #9880 by @patrys
- Add menu webhooks:
MENU_CREATED,MENU_UPDATED,MENU_DELETED,MENU_ITEM_CREATED,MENU_ITEM_UPDATED,MENU_ITEM_DELETED- #9651 by @SzymJ - Add voucher webhooks:
VOUCHER_CREATED,VOUCHER_UPDATED,VOUCHER_DELETED- #9657 by @SzymJ - Add app webhooks:
APP_INSTALLED,APP_UPDATED,APP_DELETED,APP_STATUS_CHANGED- #9698 by @SzymJ - Add warehouse webhoks:
WAREHOUSE_CREATED,WAREHOUSE_UPDATED,WAREHOUSE_DELETED- #9746 by @SzymJ - Expose order alongside fulfillment in fulfillment-based subscriptions used by webhooks (#9847)
- Fix webhooks payload not having field for
is_published(#9800) (723f93c50) - Add support for
ORDER_*mounting points for Apps (#9694) (cc728ef7e) - Add missing shipping method data in order and checkout events payloads. (#9692) (dabd1a221)
- Use the human-readable order number in notification payloads (#9863) (f10c5fd5f)
- Migrate order discount id from int to UUID - #9729 by @IKarbowiak
- Changed the order discount
idfrominttoUUID, the old ids still can be used for old order discounts.
- Changed the order discount
- Migrate order line id from int to UUID - #9637 by @IKarbowiak
- Changed the order line
idfrominttoUUID, the old ids still can be used for old order lines.
- Changed the order line
- Migrate checkout line id from int to UUID - #9675 by @IKarbowiak
- Changed the checkout line
idfrominttoUUID, the old ids still can be used for old checkout lines.
- Changed the checkout line
- Fix memory consumption of
delete_event_payloads_task(#9806) (2823edc68) - Add webhook events dataloader (#9790) (e88eef35e)
- Add dataloader for fulfillment warehouse resolver (#9740) (9d14fadb2)
- Fix order type resolvers performance (#9723) (13b5a95e7)
- Improve warehouse filtering performance (#9622) (a1a7a223b)
- Add dataloader for fulfillment lines (#9707) (68fb4bf4a)
- Observability reporter - #9803 by @przlada
- Update sample products set - #9796 by @mirekm
- Fix for sending incorrect prices to Avatax - #9633 by @korycins
- Fix tax-included flag sending to Avatax - #9820
- Fix AttributeError: 'Options' object has no attribute 'Model' in
search_tasks.py- #9824 - Fix Braintree merchant accounts mismatch error - #9778
- Stricter signatures for resolvers and mutations - #9649
- Drop manual calls to emit post_migrate in migrations (#9647) (b32308802)
- Fix search indexing of empty variants (#9640) (31833a717)
- PREVIEW_FEATURE: replace error code
NOT_FOUNDwithCHECKOUT_NOT_FOUNDfor mutationOrderCreateFromCheckout- #9569 by @korycins
- Fix filtering product attributes by date range - #9543 by @IKarbowiak
- Fix for raising Permission Denied when anonymous user calls
checkout.customerfield - #9573 by @korycins - Use fulltext search for products (#9344) (4b6f25964) by @patrys
- Precise timestamps for publication dates - #9581 by @IKarbowiak
- Change
publicationDatefields topublishedAtdate time fields.- Types and inputs where
publicationDateis deprecated andpublishedAtfield should be used instead:ProductProductChannelListingCollectionChannelListingPagePublishableChannelListingInputProductChannelListingAddInputPageCreateInputPageInput
- Types and inputs where
- Change
availableForPurchaseDatefields toavailableForPurchaseAtdate time field.- Deprecate
Product.availableForPurchasefield, theProduct.availableForPurchaseAtshould be used instead. - Deprecate
ProductChannelListing.availableForPurchasefield, theProductChannelListing.availableForPurchaseAtshould be used instead.
- Deprecate
- Deprecate
publicationDateonCollectionInputandCollectionCreateInput. - Deprecate
PUBLICATION_DATEinCollectionSortField, thePUBLISHED_ATshould be used instead. - Deprecate
PUBLICATION_DATEinPageSortField, thePUBLISHED_ATshould be used instead. - Add a new column
published atto export products. The new field should be used instead ofpublication_date.
- Change
- Add an alternative API for fetching metadata - #9231 by @patrys
- New webhook events related to gift card changes (#9588) (52adcd10d) by @SzymJ
- New webhook events for changes related to channels (#9570) (e5d78c63e) by @SzymJ
- Tighten the schema types for output fields (#9605) (81418cb4c) by @patrys
- Include permissions in schema descriptions of protected fields (#9428) (f0a988e79) by @maarcingebala
- Update address database (#9585) (1f5e84e4a) by @patrys
- Handle pagination with invalid cursor that is valid base64 (#9521) (3c12a1e95) by @jakubkuc
- Handle all Braintree errors (#9503) (20f21c34a) by @L3str4nge
- Fix
recalculate_orderdismissing weight unit (#9527) (9aea31774) - Fix filtering product attributes by date range - #9543 by @IKarbowiak
- Fix for raising Permission Denied when anonymous user calls
checkout.customerfield - #9573 by @korycins - Optimize stock warehouse resolver performance (955489bff) by @tomaszszymanski129
- Improve shipping zone filters performance (#9540) (7841ec536) by @tomaszszymanski129
- Convert IDs from DB to GraphQL format in all notification payloads (email plugins and the
NOTIFYwebhook)- #9388 by @L3str4nge - Migrate order id from int to UUID - #9324 by @IKarbowiak
- Changed the order
idchanged frominttoUUID, the old ids still can be used for old orders. - Deprecated the
order.tokenfield, theorder.idshould be used instead. - Deprecated the
tokenfield in order payload, theidfield should be used instead.
- Changed the order
- Enable JWT expiration by default - #9483 by @maarcingebala
- Introduce custom prices - #9393 by @IKarbowiak
- Add
HANDLE_CHECKOUTSpermission (only for apps)
- Add
- Add subscription webhooks (#9394) @jakubkuc
- Add
language_codefield to webhook payload forOrder,CheckoutandCustomer- #9433 by @rafalp - Refactor app tokens - #9438 by @IKarbowiak
- Store app tokens hashes instead of plain text.
- Add category webhook events - #9490 by @SzymJ
- Fix access to own resources by App - #9425 by @korycins
- Add
handle_checkoutspermission - #9402 by @korycins - Return
user_emailor order user's email in order payloaduser_emailfield (#9419) (c2d248655) - Mutation
CategoryBulkDeletenow triggercategory_deleteevent - #9533 by @SzymJ - Add webhooks
SHIPPING_PRICE_CREATED,SHIPPING_PRICE_UPDATED,SHIPPING_PRICE_DELETED,SHIPPING_ZONE_CREATED,SHIPPING_ZONE_UPDATED,SHIPPING_ZONE_DELETED- #9522 by @SzymJ
- Add OpenID Connect Plugin - #9406 by @korycins
- Allow plugins to create their custom error code - #9300 by @LeOndaz
-
Use full-text search for products search API - #9344 by @patrys
-
Include required permission in mutations' descriptions - #9363 by @maarcingebala
-
Make GraphQL list items non-nullable - #9391 by @maarcingebala
-
Port a better schema printer from GraphQL Core 3.x - #9389 by @patrys
-
Fix failing
checkoutCustomerAttachmutation - #9401 by @IKarbowiak -
Add new mutation
orderCreateFromCheckout- #9343 by @korycins -
Assign missing user to context - #9520 by @korycins
-
Add default ordering to order discounts - #9517 by @fowczarek
-
Raise formatted error when trying to assign assigned media to variant - #9496 by @L3str4nge
-
Update
orderNumberfield inOrderEventtype - #9447 by @IKarbowiak -
Do not create
AttributeValueswhen values are not provided - #9446 @IKarbowiak -
Add response status code to event delivery attempt - #9456 by @przlada
-
Don't rely on counting objects when reindexing - #9442 by @patrys
-
Allow filtering attribute values by ids - #9399 by @IKarbowiak
-
Fix errors handling for
orderFulfillApprovemutation - #9491 by @SzymJ -
Fix shipping methods caching - #9472 by @tomaszszymanski129
-
Fix payment flow - #9504 by @IKarbowiak
-
Fix etting external methods did not throw an error when that method didn't exist - #9498 by @SethThoburn
-
Reduce placeholder image size - #9484 by @jbergstroem
-
Improve menus filtering performance - #9539 by @tomaszszymanski129
-
Remove EventDeliveries without webhooks and make webhook field non-nullable - #9507 by @jakubkuc
-
Improve discount filters performance - #9541 by @tomaszszymanski129
-
Change webhooks to be called on commit in atomic transactions - #9532 by @jakubkuc
-
Drop distinct and icontains in favor of ilike in apps filtering - #9534 by @tomaszszymanski129
-
Refactor csv filters to improve performance - #9535 by @tomaszszymanski129
-
Improve attributes filters performance - #9542 by @tomaszszymanski129
-
Rename models fields from created to created_at - #9537 by @IKarbowiak
- Migration dependencies fix - #9590 by @SzymJ
- Use ordering by PK in
queryset_in_batches(#9493) (4e49c52d2)
- Fix shipping methods caching (#9472) (0361f40)
- Fix logging of excessive logger informations (#9441) (d1c5d26)
- Handle
ValidationErrorin metadata mutations (#9380) (75deaf6ea) - Fix order and checkout payload serializers (#9369) (8219b6e9b)
- Fix filtering products ordered by collection (#9285) (57aed02a2)
- Cast
shipping_method_idto int (#9364) (8d0584710) - Catch "update_fields did not affect any rows" errors and return response with message (#9225) (29c7644fc)
- Fix "str object has no attribute input type" error (#9345) (34c64b5ee)
- Fix
graphene-djangomiddleware imports (#9360) (2af1cc55d) - Fix preorders to update stock
quantity_allocated(#9308) (8cf83df81) - Do not drop attribute value files when value is deleted (#9320) (57b2888bf)
- Always cast database ID to int in data loader (#9340) (dbc5ec3e3)
- Fix removing references when user removes the referenced object (#9162) (68b33d95a)
- Pass correct list of order lines to
order_added_products_event(#9286) (db3550f64) - Fix flaky order payload serializer test (#9387) (d73bd6f9d)
- Fix unhandled GraphQL errors after removing
graphene-django(#9398) (4090e6f2a)
- Fix checkout payload (#9333) (61b928e33)
- Revert "3.1 Add checking if given attributes are variant attributes in ProductVariantCreate mutation (#9134)" (#9334) (dfee09db3)
- Add
CREATED_ATandLAST_MODIFIED_ATsorting to some GraphQL fields - #9245 by @rafalp- Added
LAST_MODIFIED_ATsort option toExportFileSortingInput - Added
CREATED_ATandLAST_MODIFIED_ATsort options toOrderSortingInputtype - Added
LAST_MODIFIED_ATandPUBLISHED_ATsort options toProductOrdertype - Added
CREATED_ATandLAST_MODIFIED_ATsort options toSaleSortingInputtype - Added
CREATED_ATandLAST_MODIFIED_ATsort options toUserSortingInputtype - Added
ProductVariantSortingInputtype withLAST_MODIFIED_ATsort option - Deprecated
UPDATED_ATsort option onExportFileSortingInput - Deprecated
LAST_MODIFIEDandPUBLICATION_DATEsort options onProductOrdertype - Deprecated
CREATION_DATEsort option onOrderSortingInputtype
- Added
- Fix sending empty emails (#9317) (3e8503d8a)
- Add checking if given attributes are variant attributes in ProductVariantCreate mutation (#9134) (409ca7d23)
- Add command to update search indexes (#9315) (fdd81bbfe)
- Upgrade required Node and NPM versions used by release-it tool (#9293) (3f96a9c30)
- Update link to community pages (#9291) (2d96f5c60)
- General cleanup (#9282) (78f59c6a3)
- Fix
countriesresolver performance (#9318) (dc58ef2c4) - Fix multiple refunds in NP Atobarai - #9222
- Fix dataloaders, filter out productmedia to be removed (#9299) (825ec3cad)
- Fix migration issue between 3.0 and main (#9323) (fec80cd63)
- Drop wishlist models (#9313) (7c9576925)
- Add command to update search indexes (#9315) (6be8461c0)
- Fix countries resolver performance (#9318) (e177f3957)
- Require
MANAGE_ORDERSpermission inUser.ordersquery (#9128) (521dfd639)- only staff with
manage ordersand can fetch customer orders - the customer can fetch his own orders, except drafts
- only staff with
- Fix failing
on_failureexport tasks method (#9160) (efab6db9d) - Fix mutations breaks on partially invalid IDs (#9227) (e3b6df2eb)
- Fix voucher migrations (#9249) (3c565ba0c)
- List the missing permissions where possible (#9250) (f8df1aa0d)
- Invalidate stocks dataloader (#9188) (e2366a5e6)
- Override
graphene.JSONStringto have more meaningful message in error message (#9171) (2a0c5a71a) - Small schema fixes (#9224) (932e64808)
- Support Braintree subaccounts (#9191) (035bf705c)
- Split checkout mutations into separate files (#9266) (1d37b0aa3)
- Drop product channel listings when removing last available variant (#9232) (b92d3b686)
- Handle product media deletion in a Celery task (#9187) (2b10fc236)
- Filter Customer/Order/Sale/Product/ProductVariant by datetime of last modification (#9137) (55a845c7b)
- Add support for hiding plugins (#9219) (bc9405307)
- Fix missing update of payment methods when using stored payment method (#9158) (ee4bf520b)
- Fix invalid paths in VCR cassettes (#9236) (f6c268d2e)
- Fix Razorpay comment to be inline with code (#9238) (de417af24)
- Remove
graphene-federationdependency (#9184) (dd43364f7)
- Don't run plugins when calculating checkout's total price for available shipping methods resolution - #9121 by @rafalp
- Use either net or gross price depending on store configuration.
- Add API for webhook payloads and deliveries - #8227 by @jakubkuc
- Extend app by
AppExtension- #7701 by @korycins - Add webhooks for stock changes:
PRODUCT_VARIANT_OUT_OF_STOCKandPRODUCT_VARIANT_BACK_IN_STOCK- #7590 by @mstrumeck - Add
COLLECTION_CREATED,COLLECTION_UPDATED,COLLECTION_DELETEDevents and webhooks - #8974 by @rafalp - Add draft orders webhooks by @jakubkuc
- Add support for providing shipping methods by Saleor Apps - #7975 by @bogdal:
- Add
SHIPPING_LIST_METHODS_FOR_CHECKOUTsync webhook
- Add
- Add sales webhooks - #8157 @kuchichan
- Allow fetching unpublished pages by apps with manage pages permission - #9181 by @IKarbowiak
- Add ability to use metadata mutations with tokens as an identifier for orders and checkouts - #8426 by @IKarbowiak
- Introduce swatch attributes - #7261 by @IKarbowiak
- Add
variant_selectiontoProductAttributeAssignoperations - #8235 by @kuchichan - Refactor attributes validation - #8905 by @IKarbowiak
- in create mutations: require all required attributes
- in update mutations: do not require providing any attributes; when any attribute is given, validate provided values.
- Add gift cards - #7827 by @IKarbowiak, @tomaszszymanski129
- Add Click & Collect - #7673 by @kuchichan
- Add fulfillment confirmation - #7675 by @tomaszszymanski129
- Make SKU an optional field on
ProductVariant- #7633 by @rafalp - Possibility to pass metadata in input of
checkoutPaymentCreate- #8076 by @mateuszgrzyb - Add
ExternalNotificationTriggermutation - #7821 by @mstrumeck - Extend
accountRegistermutation to consume first & last name - #8184 by @piotrgrundas - Introduce sales/vouchers per product variant - #8064 by @kuchichan
- Batch loads in queries for Apollo Federation - #8273 by @rafalp
- Reserve stocks for checkouts - #7589 by @rafalp
- Add query complexity limit to GraphQL API - #8526 by @rafalp
- Add
quantity_limit_per_customerfield to ProductVariant #8405 by @kuchichan - Make collections names non-unique - #8986 by @rafalp
- Add validation of unavailable products in the checkout. Mutations:
CheckoutShippingMethodUpdate,CheckoutAddPromoCode,CheckoutPaymentCreatewill raise a ValidationError when product in the checkout is unavailable - #8978 by @IKarbowiak - Add
withChoicesflag for Attribute type - #7733 by @dexon44 - Update required permissions for attribute options - #9204 by @IKarbowiak
- Product attribute options can be fetched by requestors with manage product types and attributes permission.
- Page attribute options can be fetched by requestors with manage page types and attributes permission.
- Deprecate interface field
PaymentData.reuse_source- #7988 by @mateuszgrzyb - Deprecate
setup_future_usagefromcheckoutComplete.paymentDatainput - will be removed in Saleor 4.0 - #7994 by @mateuszgrzyb - Fix shipping address issue in
availableCollectionPointsresolver for checkout - #8143 by @kuchichan - Fix cursor-based pagination in products search - #8011 by @rafalp
- Fix crash when querying external shipping methods
translationfield - #8971 by @rafalp - Fix crash when too long translation strings were passed to
translatemutations - #8942 by @rafalp - Raise ValidationError in
CheckoutAddPromoCode,CheckoutPaymentCreatewhen product in the checkout is unavailable - #8978 by @IKarbowiak - Remove
graphene-djangodependency - #9170 by @rafalp - Fix disabled warehouses appearing as valid click and collect points when checkout contains only preorders - #9052 by @rafalp
- Fix failing
on_failureexport tasks method - #9160 by @IKarbowiak
- Add multichannel - #6242 by @fowczarek @d-wysocki
- Add email interface as a plugin - #6301 by @korycins
- Add unconfirmed order editing - #6829 by @tomaszszymanski129
- Removed mutations for draft order lines manipulation:
draftOrderLinesCreate,draftOrderLineDelete,draftOrderLineUpdate - Added instead:
orderLinesCreate,orderLineDelete,orderLineUpdatemutations instead. - Order events enums
DRAFT_ADDED_PRODUCTSandDRAFT_REMOVED_PRODUCTSare nowADDED_PRODUCTSandREMOVED_PRODUCTS
- Removed mutations for draft order lines manipulation:
- Remove resolving users location from GeoIP; drop
PaymentInput.billingAddressinput field - #6784 by @maarcingebala - Always create new checkout in
checkoutCreatemutation - #7318 by @IKarbowiak- deprecate
createdreturn field oncheckoutCreatemutation
- deprecate
- Return empty values list for attribute without choices - #7394 by @fowczarek
valuesfor attributes without choices from now are empty list.- attributes with choices -
DROPDOWNandMULTISELECT - attributes without choices -
FILE,REFERENCE,NUMERICandRICH_TEXT
- Unify checkout identifier in checkout mutations and queries - #7511 by @IKarbowiak
- Propagate sale and voucher discounts over specific lines - #8793 by @korycins
- Use a new interface for response received from plugins/pluginManager. Methods
calculate_checkout_line_unit_priceandcalculate_checkout_line_totalreturnsTaxedPricesDatainstead ofTaxedMoney.
- Use a new interface for response received from plugins/pluginManager. Methods
- Attach sale discount info to the line when adding variant to order - #8821 by @IKarbowiak
- Use a new interface for the response received from plugins/pluginManager.
Methods
calculate_order_line_unitandcalculate_order_line_totalreturnsOrderTaxedPricesDatainstead ofTaxedMoney. - Rename checkout interfaces:
CheckoutTaxedPricesDatainstead ofTaxedPricesDataandCheckoutPricesDatainstead ofPricesData
- Use a new interface for the response received from plugins/pluginManager.
Methods
- Sign JWT tokens with RS256 instead of HS256 - #7990 by @korycins
- Add support for filtering available shipping methods by Saleor Apps - #8399 by @kczan, @stnatic
- Introduce
ShippingMethodDatainterface as a root object type for ShippingMethod object
- Introduce
- Limit number of user addresses - #9173 by @IKarbowiak
- Drop deprecated meta mutations - #6422 by @maarcingebala
- Drop deprecated service accounts and webhooks API - #6431 by @maarcingebala
- Drop deprecated fields from the
ProductVarianttype:quantity,quantityAllocated,stockQuantity,isAvailable- #6436 by @maarcingebala - Drop authorization keys API - #6631 by @maarcingebala
- Drop
typefield fromAttributeValuetype - #6710 by @IKarbowiak - Drop deprecated
taxRatefield fromProductType- #6795 by @d-wysocki - Drop deprecated queries and mutations - #7199 by @IKarbowiak
- drop
urlfield fromCategorytype - drop
urlfield fromCategorytype - drop
urlfield fromProducttype - drop
localizedfild fromMoneytype - drop
permissionsfield fromUsertype - drop
navigationfield fromShoptype - drop
isActivefromAppInput - drop
valuefromAttributeInput - drop
customerIdfromcheckoutCustomerAttach - drop
stockAvailabilityargument fromproductsquery - drop
createdandstatusarguments fromordersquery - drop
createdargument fromdraftOrdersquery - drop
productTypefromProductFilter - deprecate specific error fields
<TypeName>Errors, typederrorsfields and remove deprecation
- drop
- Drop top-level
checkoutLinequery from the schema with related resolver, usecheckoutquery instead - #7623 by @dexon44 - Change error class in
CollectionBulkDeletetoCollectionErrors- #7061 by @d-wysocki - Make quantity field on
StockInputrequired - #7082 by @IKarbowiak - Add description to shipping method - #7116 by @IKarbowiak
ShippingMethodwas extended withdescriptionfield.ShippingPriceInputwas extended withdescriptionfield- Extended
shippingPriceUpdate,shippingPriceCreatemutation to add/edit description - Input field in
shippingPriceTranslatechanged toShippingPriceTranslationInput
- Split
ShippingMethodintoShippingMethodandShippingMethodType(#8399):ShippingMethodis used to represent methods offered for checkouts and ordersShippingMethodTypeis used to manage shipping method configurations in Saleor- Deprecate
availableShippingMethodsonOrderandCheckout. UseshippingMethodsand refer to theactivefield instead
- Drop
CHECKOUT_QUANTITY_CHANGEDwebhook - #6797 by @d-wysocki - Change the payload of the order webhook to handle discounts list - #6874 by @korycins:
- added fields:
Order.discounts,OrderLine.unit_discount_amount,OrderLine.unit_discount_type,OrderLine.unit_discount_reason, - removed fields:
Order.discount_amount,Order.discount_name,Order.translated_discount_name
- added fields:
- Remove triggering a webhook event
PRODUCT_UPDATEDwhen callingProductVariantCreatemutation. UsePRODUCT_VARIANT_CREATEDinstead - #6963 by @piotrgrundas - Make
orderproperty of invoice webhook payload contain order instead of order lines - #7081 by @pdblaszczyk- Affected webhook events:
INVOICE_REQUESTED,INVOICE_SENT,INVOICE_DELETED
- Affected webhook events:
- Added
CHECKOUT_FILTER_SHIPPING_METHODS,ORDER_FILTER_SHIPPING_METHODSsync webhooks - #8399 by @kczan, @stnatic
- Drop
apply_taxes_to_shipping_price_rangeplugin hook - #6746 by @maarcingebala - Refactor listing payment gateways - #7050 by @maarcingebala:
- Breaking changes in plugin methods: removed
get_payment_gatewayandget_payment_gateway_for_checkout; insteadget_payment_gatewayswas added.
- Breaking changes in plugin methods: removed
- Improve checkout performance - introduce
CheckoutInfodata class - #6958 by @IKarbowiak;- Introduced changes in plugin methods definitions in the following methods, the
checkoutparameter changed tocheckout_info:calculate_checkout_totalcalculate_checkout_subtotalcalculate_checkout_shippingget_checkout_shipping_tax_ratecalculate_checkout_line_totalcalculate_checkout_line_unit_priceget_checkout_line_tax_ratepreprocess_order_creation
preprocess_order_creationwas extend withlines_infoparameter
- Introduced changes in plugin methods definitions in the following methods, the
- Fix Avalara caching - #7036 by @fowczarek:
- Introduced changes in plugin methods definitions:
calculate_checkout_line_totalwas extended withlinesparametercalculate_checkout_line_unit_pricewas extended withlinesparameterget_checkout_line_tax_ratewas extended withlinesparameter
- To get proper taxes we should always send the whole checkout to Avalara.
- Introduced changes in plugin methods definitions:
- Extend plugins manager to configure plugins for each plugins - #7198 by @korycins:
- Introduce changes in API:
paymentInitialize- addchannelparameter. Optional when only one channel exists.pluginUpdate- addchannelparameter.availablePaymentGateways- addchannelparameter.storedPaymentSources- addchannelparameter.requestPasswordReset- addchannelparameter.requestEmailChange- addchannelparameter.confirmEmailChange- addchannelparameter.accountRequestDeletion- addchannelparameter.- change structure of type
Plugin:- add
globalConfigurationfield for storing configuration when a plugin is globally configured - add
channelConfigurationsfield for storing plugin configuration for each channel - removed
configurationfield, useglobalConfigurationandchannelConfigurationsinstead
- add
- change structure of input
PluginFilterInput:- add
statusInChannelsfield - add
typefield - removed
activefield. UsestatusInChannelsinstead
- add
- Change plugin webhook endpoint - #7332 by @korycins.
- Use /plugins/channel/<channel_slug>/<plugin_id> for plugins with channel configuration
- Use /plugins/global/<plugin_id> for plugins with global configuration
- Remove /plugin/<plugin_id> endpoint
- Introduce changes in API:
- Fix doubling price in checkout for products without tax - #7056 by @IKarbowiak:
- Introduce changes in plugins method:
calculate_checkout_subtotalhas been dropped from plugins;- for correct subtotal calculation,
calculate_checkout_line_totalmust be set (manager method for calculating checkout subtotal usescalculate_checkout_line_totalmethod)
- Introduce changes in plugins method:
- Deprecated Stripe plugin - will be removed in Saleor 4.0
- rename
StripeGatewayPlugintoDeprecatedStripeGatewayPlugin. - introduce new
StripeGatewayPluginplugin.
- rename
- Migrate from Draft.js to Editor.js format - #6430, #6456 by @IKarbowiak
- Allow using
Beareras an authorization prefix - #6996 by @korycins - Add product rating - #6284 by @korycins
- Add order confirmation - #6498 by @tomaszszymanski12
- Extend Vatlayer functionalities - #7101 by @korycins:
- Allow users to enter a list of exceptions (country ISO codes) that will use the source country rather than the destination country for tax purposes.
- Allow users to enter a list of countries for which no VAT will be added.
- Extend order with origin and original order values - #7326 by @IKarbowiak
- Allow impersonating user by an app/staff - #7754 by @korycins:
- Add
customerIdtocheckoutCustomerAttachmutation - Add new permission
IMPERSONATE_USER
- Add
- Add possibility to apply a discount to order/order line with status
DRAFT- #6930 by @korycins - Implement database read replicas - #8516, #8751 by @fowczarek
- Propagate sale and voucher discounts over specific lines - #8793 by @korycins
- The created order lines from checkout will now have fulfilled all undiscounted fields with a default price value (without any discounts).
- Order line will now include a voucher discount (in the case when the voucher is for specific products or have a
flag apply_once_per_order). In that case,
Order.discountswill not have a relation toOrderDiscountobject. - Webhook payload for
OrderLinewill now include two new fields,sale_id(graphql ID of applied sale) andvoucher_code(code of the valid voucher applied to this line). - When any sale or voucher discount was applied,
line.discount_reasonwill be fulfilled. - New interface for handling more data for prices:
PricesDataandTaxedPricesDataused in checkout calculations and in plugins/pluginManager.
- Attach sale discount info to the line when adding variant to order - #8821 by @IKarbowiak
- Rename checkout interfaces:
CheckoutTaxedPricesDatainstead ofTaxedPricesDataandCheckoutPricesDatainstead ofPricesData - New interface for handling more data for prices:
OrderTaxedPricesDataused in plugins/pluginManager.
- Rename checkout interfaces:
- Add uploading video URLs to product gallery - #6838 by @GrzegorzDerdak
- Add generic
FileUploadmutation - #6470 by @IKarbowiak
- Allow passing metadata to
accountRegistermutation - #7152 by @piotrgrundas - Copy metadata fields when creating reissue - #7358 by @IKarbowiak
- Add metadata to shipping zones and shipping methods - #6340 by @maarcingebala
- Add metadata to menu and menu item - #6648 by @tomaszszymanski129
- Add metadata to warehouse - #6727 by @d-wysocki
- Added support for querying objects by metadata fields - #6683 by @LeOndaz, #7421 by @korycins
- Change metadata mutations to use token for order and checkout as an identifier - #8542 by @IKarbowiak
- After changes, using the order
idfor changing order metadata is deprecated
- After changes, using the order
- Add rich text attribute input - #7059 by @piotrgrundas
- Support setting value for AttributeValue mutations - #7037 by @piotrgrundas
- Add boolean attributes - #7454 by @piotrgrundas
- Add date & date time attributes - #7500 by @piotrgrundas
- Add file attributes - #6568 by @IKarbowiak
- Add page reference attributes - #6624 by @IKarbowiak
- Add product reference attributes - #6711 by @IKarbowiak
- Add numeric attributes - #6790 by @IKarbowiak
- Add
withChoicesflag for Attribute type - #7733 by @CossackDex - Return empty results when filtering by non-existing attribute - #7025 by @maarcingebala
- Add Page Types - #6261 by @IKarbowiak
- Add interface for integrating the auth plugins - #6799 by @korycins
- Add Sendgrid plugin - #6793 by @korycins
- Trigger
checkout_updatedplugin method for checkout metadata mutations - #7392 by @maarcingebala
- Add synchronous payment webhooks - #7044 by @maarcingebala
- Add
CUSTOMER_UPDATEDwebhook, add addresses field to customerCUSTOMER_CREATEDwebhook - #6898 by @piotrgrundas - Add
PRODUCT_VARIANT_CREATED,PRODUCT_VARIANT_UPDATED,PRODUCT_VARIANT_DELETEDwebhooks, fix attributes field forPRODUCT_CREATED,PRODUCT_UPDATEDwebhooks - #6963 by @piotrgrundas - Trigger
PRODUCT_UPDATEDwebhook for collections and categories mutations - #7051 by @d-wysocki - Extend order webhook payload with fulfillment fields - #7364, #7347 by @korycins
- fulfillments extended with:
total_refund_amountshipping_refund_amountlines
- fulfillment lines extended with:
total_price_net_amounttotal_price_gross_amountundiscounted_unit_price_netundiscounted_unit_price_grossunit_price_net
- fulfillments extended with:
- Extend order payload with undiscounted prices and add psp_reference to payment model - #7339 by @IKarbowiak
- order payload extended with the following fields:
undiscounted_total_net_amountundiscounted_total_gross_amountpsp_referenceonpayment
- order lines extended with:
undiscounted_unit_price_net_amountundiscounted_unit_price_gross_amountundiscounted_total_price_net_amountundiscounted_total_price_gross_amount
- order payload extended with the following fields:
- Add
product_id,product_variant_id,attribute_idandpage_idwhen it is possible forAttributeValuetranslations webhook - #7783 by @fowczarek - Add draft orders webhooks - #8102 by @jakubkuc
- Add page webhooks:
PAGE_CREATED,PAGE_UPDATEDandPAGE_DELETED- #6787 by @d-wysocki - Add
PRODUCT_DELETEDwebhook - #6794 by @d-wysocki - Add
page_type_idin translations webhook - #7825 by @fowczarek - Fix failing account mutations for app - #7569 by @IKarbowiak
- Add app support for events - #7622 by @IKarbowiak
- Fix creating translations with app - #6804 by @krzysztofwolski
- Change the
appquery to return info about the currently authenticated app - #6928 by @d-wysocki - Mark
X-headers as deprecated and add headers without prefix. All deprecated headers will be removed in Saleor 4.0 - #8179 by @L3str4nge- X-Saleor-Event -> Saleor-Event
- X-Saleor-Domain -> Saleor-Domain
- X-Saleor-Signature -> Saleor-Signature
- X-Saleor-HMAC-SHA256 -> Saleor-HMAC-SHA256
- Add query contains only schema validation - #6827 by @fowczarek
- Add introspection caching - #6871 by @fowczarek
- Fix Sentry reporting - #6902 by @fowczarek
- Deprecate API fields
Order.discount,Order.discountName,Order.translatedDiscountName- #6874 by @korycins - Fix argument validation in page resolver - #6960 by @fowczarek
- Drop
datafield from checkout line model - #6961 by @fowczarek - Fix
totalCounton connection resolver withoutfirstorlast- #6975 by @fowczarek - Fix variant resolver on
DigitalContent- #6983 by @fowczarek - Fix resolver by id and slug for product and product variant - #6985 by @d-wysocki
- Add optional support for reporting resource limits via a stub field in
shop- #6967 by @NyanKiyoshi - Update checkout quantity when checkout lines are deleted - #7002 by @IKarbowiak
- Fix available shipping methods - return also weight methods without weight limits - #7021 by @IKarbowiak
- Validate discount value for percentage vouchers and sales - #7033 by @d-wysocki
- Add field
languageCodeto types:AccountInput,AccountRegisterInput,CheckoutCreateInput,CustomerInput,Order,User. Add fieldlanguageCodeEnumtoOrdertype. Add new mutationCheckoutLanguageCodeUpdate. Deprecate fieldOrder.languageCode. - #6609 by @korycins - Extend
Transactiontype with gateway response andPaymenttype with filter - #7062 by @IKarbowiak - Fix invalid tax rates for lines - #7058 by @IKarbowiak
- Allow seeing unconfirmed orders - #7072 by @IKarbowiak
- Raise
GraphQLErrorwhen too big integer value is provided - #7076 by @IKarbowiak - Do not update draft order addresses when user is changing - #7088 by @IKarbowiak
- Recalculate draft order when product/variant was deleted - #7085 by @d-wysocki
- Added validation for
DraftOrderCreatewith negative quantity line - #7085 by @d-wysocki - Remove HTML tags from product
description_plaintext- #7094 by @d-wysocki - Fix failing product tasks when instances are removed - #7092 by @IKarbowiak
- Update GraphQL endpoint to only match exactly
/graphql/without trailing characters - #7117 by @IKarbowiak - Introduce
traced_resolverdecorator instead of Graphene middleware - #7159 by @tomaszszymanski129 - Fix failing export when exporting attribute without values - #7131 by @IKarbowiak
- Fix incorrect payment data for Klarna - #7150 by @IKarbowiak
- Drop deleted images from storage - #7129 by @IKarbowiak
- Fix export with empty assignment values - #7214 by @IKarbowiak
- Change exported file name - #7222 by @IKarbowiak
- Fix core sorting on related fields - #7195 by @tomaszszymanski129
- Use GraphQL IDs instead of database IDs in export - #7240 by @IKarbowiak
- Fix draft order tax mismatch - #7226 by @IKarbowiak
- Introduce
calculate_order_line_totalplugin method
- Introduce
- Update core logging for better Celery tasks handling - #7251 by @tomaszszymanski129
- Raise
ValidationErrorwhen refund cannot be performed - #7260 by @IKarbowiak - Fix customer addresses missing after customer creation - #7327 by @tomaszszymanski129
- Fix invoice generation - #7376 by @tomaszszymanski129
- Allow defining only one field in translations - #7363 by @IKarbowiak
- Allow filtering pages by ids - #7393 by @IKarbowiak
- Fix validate
min_spenton vouchers to use net or gross value depends onsettings.display_gross_prices- #7408 by @d-wysocki - Fix invoice generation - #7376 by tomaszszymanski129
- Add hash to uploading images #7453 by @IKarbowiak
- Add file format validation for uploaded images - #7447 by @IKarbowiak
- Fix attaching params for address form errors - #7485 by @IKarbowiak
- Update draft order validation - #7253 by @IKarbowiak
- Extend Order type with errors: [OrderError!]! field
- Create tasks for deleting order lines by deleting products or variants
- Fix doubled checkout total price for one line and zero shipping price - #7532 by @IKarbowiak
- Deprecate nested objects in
TranslatableContenttypes - #7522 by @IKarbowiak - Modify order of auth middleware calls - #7572 by @tomaszszymanski129
- Drop assigning cheapest shipping method in checkout - #7767 by @maarcingebala
- Deprecate
queryargument insalesandvouchersqueries - #7806 by @maarcingebala - Allow translating objects by translatable content ID - #7803 by @maarcingebala
- Configure a periodic task for removing empty allocations - #7885 by @fowczarek
- Fix missing transaction id in Braintree - #8110 by @fowczarek
- Fix GraphQL federation support - #7771 #8107 by @rafalp
- Fix cursor-based pagination in products search - #8011 #8211 by @rafalp
- Batch loads in queries for Apollo Federation - #8362 by @rafalp
- Add workaround for failing Avatax when line has price 0 - #8610 by @korycins
- Add option to set tax code for shipping in Avatax configuration view - #8596 by @korycins
- Fix Avalara tax fetching from cache - #8647 by @fowczarek
- Fix incorrect stock allocation - #8931 by @IKarbowiak
- Fix incorrect handling of unavailable products in checkout - #8978, #9119 by @IKarbowiak, @korycins
- Add draft orders webhooks - #8102 by @jakubkuc
- Handle
SameSitecookie attribute in jwt refresh token middleware - #8209 by @jakubkuc - Fix creating translations with app - #6804 by @krzysztofwolski
- Add possibility to provide external payment ID during the conversion draft order to order - #6320 by @korycins
- Add basic rating for
Products- #6284 by @korycins - Add metadata to shipping zones and shipping methods - #6340 by @maarcingebala
- Add Page Types - #6261 by @IKarbowiak
- Migrate draftjs content to editorjs format - #6430 by @IKarbowiak
- Add editorjs sanitizer - #6456 by @IKarbowiak
- Add generic FileUpload mutation - #6470 by @IKarbowiak
- Order confirmation backend - #6498 by @tomaszszymanski129
- Handle
SameSitecookie attribute in JWT refresh token middleware - #8209 by @jakubkuc - Add possibility to provide external payment ID during the conversion draft order to order - #6320 by @korycins9
- Fix password reset request - #6351 by @Manfred-Madelaine-pro, Ambroise and Pierre
- Refund products support - #6530 by @korycins
- Add possibility to exclude products from shipping method - #6506 by @korycins
- Add
Shop.availableShippingMethodsquery - #6551 by @IKarbowiak - Add delivery time to shipping method - #6564 by @IKarbowiak
- Shipping zone description - #6653 by @tomaszszymanski129
- Get tax rate from plugins - #6649 by @IKarbowiak
- Added support for querying user by email - #6632 @LeOndaz
- Add order shipping tax rate - #6678 by @IKarbowiak
- Deprecate field
descriptionJSONfromProduct,Category,Collectionand fieldcontentJSONfromPage- #6692 by @d-wysocki - Fix products visibility - #6704 by @IKarbowiak
- Fix page
contentJsonfield to return JSON - #6832 by @d-wysocki - Add SearchRank to search product by name and description. New enum added to
ProductOrderField-RANK- which returns results sorted by search rank - #6872 by @d-wysocki - Allocate stocks for order lines in a bulk way - #6877 by @IKarbowiak
- Deallocate stocks for order lines in a bulk way - #6896 by @IKarbowiak
- Prevent negative available quantity - #6897 by @d-wysocki
- Add default sorting by rank for search products - #6936 by @d-wysocki
- Fix exporting product description to xlsx - #6959 by @IKarbowiak
- Add
Shop.versionfield to query API version - #6980 by @maarcingebala - Add new authorization header
Authorization-Bearer- #6998 by @korycins - Add field
paymentMethodTypetoPaymentobject - #7073 by @korycins - Unify Warehouse Address API - #7481 by @d-wysocki
- deprecate
companyNameonWarehousetype - remove
companyNameonWarehouseInputtype - remove
WarehouseAddressInputonWarehouseUpdateInputandWarehouseCreateInput, and change it toAddressInput
- deprecate
- Fix passing incorrect customer email to payment gateways - #7486 by @korycins
- Add HTTP meta tag for Content-Security-Policy in GraphQL Playground - #7662 by @NyanKiyoshi
- Add additional validation for
from_global_id_or_errorfunction - #8780 by @CossackDex
- Add support for Apple Pay on the web - #6466 by @korycins
- Add products export - #5255 by @IKarbowiak
- Add external apps support - #5767 by @korycins
- Invoices backend - #5732 by @tomaszszymanski129
- Adyen drop-in integration - #5914 by @korycins, @IKarbowiak
- Add a callback view to plugins - #5884 by @korycins
- Support pushing webhook events to message queues - #5940 by @patrys, @korycins
- Send a confirmation email when the order is canceled or refunded - #6017
- No secure cookie in debug mode - #6082 by @patrys, @orzechdev
- Add searchable and available for purchase flags to product - #6060 by @IKarbowiak
- Add
TotalPricetoOrderLine- #6068 @fowczarek - Add
PRODUCT_UPDATEDwebhook event - #6100 by @tomaszszymanski129 - Search orders by GraphQL payment ID - #6135 by @korycins
- Search orders by a custom key provided by payment gateway - #6135 by @korycins
- Add ability to set a default product variant - #6140 by @tomaszszymanski129
- Allow product variants to be sortable - #6138 by @tomaszszymanski129
- Allow fetching stocks for staff users only with
MANAGE_ORDERSpermissions - #6139 by @fowczarek - Add filtering to
ProductVariantsquery and option to fetch variant by SKU inProductVariantquery - #6190 by @fowczarek - Add filtering by Product IDs to
productsquery - #6224 by @GrzegorzDerdak - Add
change_currencycommand - #6016 by @maarcingebala - Add dummy credit card payment - #5822 by @IKarbowiak
- Add custom implementation of UUID scalar - #5646 by @koradon
- Add
AppTokenVerifymutation - #5716 by @korycins
- Refactored JWT support. Requires handling of JWT token in the storefront (a case when the backend returns the exception about the invalid token). - #5734, #5816 by @korycins
- New logging setup will now output JSON logs in production mode for ease of feeding them into log collection systems like Logstash or CloudWatch Logs - #5699 by @patrys
- Deprecate
WebhookEventType.CHECKOUT_QUANTITY_CHANGED- #5837 by @korycins - Anonymize and update order and payment fields; drop
PaymentSecureConfirmmutation, drop Payment type fields:extraData,billingAddress,billingEmail, dropgatewayResponsefromTransactiontype - #5926 by @IKarbowiak - Switch the HTTP stack from WSGI to ASGI based on Uvicorn - #5960 by @patrys
- Add
MANAGE_PRODUCT_TYPES_AND_ATTRIBUTESpermission, which is now required to access all attributes and product types related mutations - #6219 by @IKarbowiak
- Fix payment fields in order payload for webhooks - #5862 by @korycins
- Fix specific product voucher in draft orders - #5727 by @fowczarek
- Explicit country assignment in default shipping zones - #5736 by @maarcingebala
- Drop
json_contentfield from theMenumodel - #5761 by @maarcingebala - Strip warehouse name in mutations - #5766 by @koradon
- Add missing order events during checkout flow - #5684 by @koradon
- Update Google Merchant to get tax rate based by plugin manager - #5823 by @gabmartinez
- Allow unicode in slug fields - #5877 by @IKarbowiak
- Fix empty plugin object result after
PluginUpdatemutation - #5968 by @gabmartinez - Allow finishing checkout when price amount is 0 - #6064 by @IKarbowiak
- Fix incorrect tax calculation for Avatax - #6035 by @korycins
- Fix incorrect calculation of subtotal with active Avatax - #6035 by @korycins
- Fix incorrect assignment of tax code for Avatax - #6035 by @korycins
- Do not allow negative product price - #6091 by @IKarbowiak
- Handle None as attribute value - #6092 by @IKarbowiak
- Fix for calling
order_createdbefore the order was saved - #6095 by @korycins - Update default decimal places - #6098 by @IKarbowiak
- Avoid assigning the same pictures twice to a variant - #6112 by @IKarbowiak
- Fix crashing system when Avalara is improperly configured - #6117 by @IKarbowiak
- Fix for failing finalising draft order - #6133 by @korycins
- Remove corresponding draft order lines when variant is removing - #6119 by @IKarbowiak
- Update required perms for apps management - #6173 by @IKarbowiak
- Raise an error for an empty key in metadata - #6176 by @IKarbowiak
- Add attributes to product error - #6181 by @IKarbowiak
- Allow to add product variant with 0 price to draft order - #6189 by @IKarbowiak
- Fix deleting product when default variant is deleted - #6186 by @IKarbowiak
- Fix get unpublished products, product variants and collection as app - #6194 by @fowczarek
- Set
OrderFulfillStockInputfields as required - #6196 by @IKarbowiak - Fix attribute filtering by categories and collections - #6214 by @fowczarek
- Fix
is_visiblewhenpublication_dateis today - #6225 by @korycins - Fix filtering products by multiple attributes - #6215 by @GrzegorzDerdak
- Add attributes validation while creating/updating a product's variant - #6269 by @GrzegorzDerdak
- Add metadata to page model - #6292 by @dominik-zeglen
- Fix for unnecessary attributes validation while updating simple product - #6300 by @GrzegorzDerdak
- Include order line total price to webhook payload - #6354 by @korycins
- Fix for fulfilling an order when product quantity equals allocated quantity - #6333 by @GrzegorzDerdak
- Fix for the ability to filter products on collection - #6363 by @GrzegorzDerdak
- Add command to change currencies in the database - #5906 by @d-wysocki
- Fix multiplied stock quantity - #5675 by @fowczarek
- Fix invalid allocation after migration - #5678 by @fowczarek
- Fix order mutations as app - #5680 by @fowczarek
- Prevent creating checkout/draft order with unpublished product - #5676 by @d-wysocki
- OpenTracing support - #5188 by @tomaszszymanski129
- Account confirmation email - #5126 by @tomaszszymanski129
- Relocate
CheckoutandCheckoutLinemethods into separate module and update checkout related plugins to use them - #4980 by @krzysztofwolski - Fix problem with free shipping voucher - #4942 by @IKarbowiak
- Add sub-categories to random data - #4949 by @IKarbowiak
- Deprecate
localizedfield in Money type - #4952 by @IKarbowiak - Fix for shipping API not applying taxes - #4913 by @kswiatek92
- Query object translation with only
manage_translationpermission - #4914 by @fowczarek - Add customer note to draft orders API - #4973 by @IKarbowiak
- Allow to delete category and leave products - #4970 by @IKarbowiak
- Remove thumbnail generation from migration - #3494 by @kswiatek92
- Rename 'shipping_date' field in fulfillment model to 'created' - #2433 by @kswiatek92
- Reduce number of queries for 'checkoutComplete' mutation - #4989 by @IKarbowiak
- Force PyTest to ignore the environment variable containing the Django settings module - #4992 by @NyanKiyoshi
- Extend JWT token payload with user information - #4987 by @salwator
- Optimize the queries for product list in the dashboard - #4995 by @IKarbowiak
- Drop dashboard 1.0 - #5000 by @IKarbowiak
- Fixed serialization error on weight fields when running
loaddataanddumpdb- #5005 by @NyanKiyoshi - Fixed JSON encoding error on Google Analytics reporting - #5004 by @NyanKiyoshi
- Create custom field to translation, use new translation types in translations query - #5007 by @fowczarek
- Take allocated stock into account in
StockAvailabilityfilter - #5019 by @simonbru - Generate matching postal codes for US addresses - #5033 by @maarcingebala
- Update debug toolbar - #5032 by @IKarbowiak
- Allow staff member to receive notification about customers orders - #4993 by @kswiatek92
- Add user's global id to the JWT payload - #5039 by @salwator
- Make middleware path resolving lazy - #5041 by @NyanKiyoshi
- Generate slug on saving the attribute value - #5055 by @fowczarek
- Fix order status after order update - #5072 by @fowczarek
- Extend top-level connection resolvers with ability to sort results - #5018 by @fowczarek
- Drop storefront 1.0 - #5043 by @IKarbowiak
- Replace permissions strings with enums - #5038 by @kswiatek92
- Remove gateways forms and templates - #5075 by @IKarbowiak
- Add
Wishlistmodels and GraphQL endpoints - #5021 by @derenio - Remove deprecated code - #5107 by @IKarbowiak
- Fix voucher start date filtering - #5133 by @dominik-zeglen
- Search by sku in products query - #5117 by @fowczarek
- Send fulfillment update email - #5118 by @IKarbowiak
- Add address query - #5148 by @kswiatek92
- Add
checkout_quantity_changedwebhook - #5042 by @derenio - Remove unnecessary
manage_orderspermission - #5142 by @kswiatek92 - Mutation to change the user email - #5076 by @kswiatek92
- Add MyPy checks - #5150 by @IKarbowiak
- Move extracting user or service account to utils - #5152 by @kswiatek92
- Deprecate order status/created arguments - #5076 by @kswiatek92
- Fix getting title field in page mutations #5160 by @maarcingebala
- Copy public and private metadata from the checkout to the order upon creation - #5165 by @dankolbman
- Add warehouses and stocks- #4986 by @szewczykmira
- Add permission groups - #5176, #5513 by @IKarbowiak
- Drop
gettextoccurrences - #5189 by @IKarbowiak - Fix
product_createdwebhook - #5187 by @dzkb - Drop unused resolver
resolve_availability- #5190 by @maarcingebala - Fix permission for
checkoutCustomerAttachmutation - #5192 by @maarcingebala - Restrict access to user field - #5194 by @maarcingebala
- Unify permission for service account API client in test - #5197 by @fowczarek
- Add additional confirmation step to
checkoutCompletemutation - #5179 by @salwator - Allow sorting warehouses by name - #5211 by @dominik-zeglen
- Add anonymization to GraphQL's
webhookSamplePayloadendpoint - #5161 @derenio - Add slug to
Warehouse,ProductandProductTypemodels - #5196 by @IKarbowiak - Add mutation for assigning, unassigning shipping zones to warehouse - #5217 by @kswiatek92
- Fix passing addresses to
PaymentDataobjects - #5223 by @maarcingebala - Return
nullwhen queryingmeas an anonymous user - #5231 by @maarcingebala - Added
PLAYGROUND_ENABLEDenvironment variable/setting to allow to enable the GraphQL playground whenDEBUGis disabled - #5254 by @NyanKiyoshi - Fix access to order query when request from service account - #5258 by @fowczarek
- Customer shouldn't be able to see draft orders by token - #5259 by @fowczarek
- Customer shouldn't be able to query checkout with another customer - #5268 by @fowczarek
- Added integration support of Jaeger Tracing - #5282 by @NyanKiyoshi
- Return
nullwhen queryingmeas an anonymous user - #5231 as @maarcingebala - Add
fulfillment createdwebhook - @szewczykmira - Unify metadata API - #5178 by @fowczarek
- Add compiled versions of emails to the repository - #5260 by @tomaszszymanski129
- Add required prop to fields where applicable - #5293 by @dominik-zeglen
- Drop
get_absolute_urlmethods - #5299 by @IKarbowiak - Add
--forceflag tocleardbcommand - #5302 by @maarcingebala - Require non-empty message in
orderAddNotemutation - #5316 by @maarcingebala - Stock management refactor - #5323 by @IKarbowiak
- Add discount error codes - #5348 by @IKarbowiak
- Add benchmarks to checkout mutations - #5339 by @fowczarek
- Add pagination tests - #5363 by @fowczarek
- Add ability to assign multiple warehouses in mutations to create/update a shipping zone - #5399 by @fowczarek
- Add filter by ids to the
warehousesquery - #5414 by @fowczarek - Add shipping rate price validation - #5411 by @kswiatek92
- Remove unused settings and environment variables - #5420 by @maarcingebala
- Add product price validation - #5413 by @kswiatek92
- Add attribute validation to
attributeAssignmutation - #5423 by @kswiatek92 - Add possibility to update/delete more than one item in metadata - #5446 by @koradon
- Check if image exists before validating - #5425 by @kswiatek92
- Fix warehouses query not working without id - #5441 by @koradon
- Add
accountErrorstoCreateTokenmutation - #5437, #5465 by @koradon - Raise
GraphQLErrorif filter has invalid IDs - #5460 by @gabmartinez - Use
AccountErrorCode.INVALID_CREDENTIALSinstead ofINVALID_PASSWORD- #5495 by @koradon - Add tests for pagination - #5468 by @koradon
- Add
Jobabstract model and interface - #5510 by @IKarbowiak - Refactor implementation of allocation - #5445 by @fowczarek
- Fix
WeightScalar- #5530 by @koradon - Add
OrderFulfillmutation - #5525 by @fowczarek - Add "It Works" page - #5494 by @IKarbowiak and @dominik-zeglen
- Extend errors in
OrderFulfillmutation - #5553 by @fowczarek - Refactor
OrderCancelmutation for multiple warehouses - #5554 by @fowczarek - Add negative weight validation - #5564 by @fowczarek
- Add error when user pass empty object as address - #5585 by @fowczarek
- Fix payment creation without shipping method - #5444 by @d-wysocki
- Fix checkout and order flow with variant without inventory tracking - #5599 by @fowczarek
- Fixed JWT expired token being flagged as unhandled error rather than handled. - #5603 by @NyanKiyoshi
- Refactor read-only middleware - #5602 by @maarcingebala
- Fix availability for variants without inventory tracking - #5605 by @fowczarek
- Drop support for configuring Vatlayer plugin from settings file. - #5614 by @korycins
- Add ability to query category, collection or product by slug - #5574 by @koradon
- Add
quantityAvailablefield toProductVarianttype - #5628 by @fowczarek - Use tags rather than time-based logs for information on requests - #5608 by @NyanKiyoshi
- Add mutation to change customer's first name last name - #4489 by @fowczarek
- Add mutation to delete customer's account - #4494 by @fowczarek
- Add mutation to change customer's password - #4656 by @fowczarek
- Add ability to customize email sender address in emails sent by Saleor - #4820 by @NyanKiyoshi
- Add ability to filter attributes per global ID - #4640 by @NyanKiyoshi
- Add ability to search product types by value (through the name) - #4647 by @NyanKiyoshi
- Add queries and mutation for serving and saving the configuration of all plugins - #4576 by @korycins
- Add
redirectUrlto staff and user create mutations - #4717 by @fowczarek - Add error codes to mutations responses - #4676 by @Kwaidan00
- Add translations to countries in
shopquery - #4732 by @fowczarek - Add support for sorting product by their attribute values through given attribute ID - #4740 by @NyanKiyoshi
- Add descriptions for queries and query arguments - #4758 by @maarcingebala
- Add support for Apollo Federation - #4825 by @salwator
- Add mutation to create multiple product variants at once - #4735 by @fowczarek
- Add default value to custom errors - #4797 by @fowczarek
- Extend
availablePaymentGatewaysfield with gateways' configuration data - #4774 by @salwator - Change
AddressValidationRulesAPI - #4655 by @Kwaidan00 - Use search in a consistent way; add sort by product type name and publication status to
productsquery. - #4715 by @fowczarek - Unify
menuItemMovemutation with other reordering mutations - #4734 by @NyanKiyoshi - Don't create an order when the payment was unsuccessful - #4500 by @NyanKiyoshi
- Don't require shipping information in checkout for digital orders - #4573 by @NyanKiyoshi
- Drop
manage_userspermission from thepermissionsquery - #4854 by @maarcingebala - Deprecate
inCategoryandinCollectionattributes filters in favor offilterargument - #4700 by @NyanKiyoshi & @khalibloo - Remove
PaymentGatewayEnumfrom the schema, as gateways now are dynamic plugins - #4756 by @salwator - Require
manage_productspermission to querycostPriceandstockQuantityfields - #4753 by @NyanKiyoshi - Refactor account mutations - #4510, #4668 by @fowczarek
- Fix generating random avatars when updating staff accounts - #4521 by @maarcingebala
- Fix updating JSON menu representation in mutations - #4524 by @maarcingebala
- Fix setting variant's
priceOverrideandcostPricetonull- #4754 by @NyanKiyoshi - Fix fetching staff user without
manage_userspermission - #4835 by @fowczarek - Ensure that a GraphQL query is a string - #4836 by @nix010
- Add ability to configure the password reset link - #4863 by @fowczarek
- Fixed a performance issue where Saleor would sometimes run huge, unneeded prefetches when resolving categories or collections - #5291 by @NyanKiyoshi
- uWSGI now forces the django application to directly load on startup instead of being lazy - #5357 by @NyanKiyoshi
- Add enterprise-grade attributes management - #4351 by @dominik-zeglen and @NyanKiyoshi
- Add extensions manager - #4497 by @korycins
- Add service accounts - backend support - #4689 by @korycins
- Add support for webhooks - #4731 by @korycins
- Migrate the attributes mapping from HStore to many-to-many relation - #4663 by @NyanKiyoshi
- Create general abstraction for object metadata - #4447 by @salwator
- Add metadata to
OrderandFulfillmentmodels - #4513, #4866 by @szewczykmira - Migrate the tax calculations to plugins - #4497 by @korycins
- Rewrite payment gateways using plugin architecture - #4669 by @salwator
- Rewrite Stripe integration to use PaymentIntents API - #4606 by @salwator
- Refactor password recovery system - #4617 by @fowczarek
- Add functionality to sort products by their "minimal variant price" - #4416 by @derenio
- Add voucher's "once per customer" feature - #4442 by @fowczarek
- Add validations for minimum password length in settings - #4735 by @fowczarek
- Add form to configure payments in the dashboard - #4807 by @szewczykmira
- Change
unique_togetherinAttributeValue- #4805 by @fowczarek - Change max length of SKU to 255 characters - #4811 by @lex111
- Distinguish
OrderLineproduct name and variant name - #4702 by @fowczarek - Fix updating order status after automatic fulfillment of digital products - #4709 by @korycins
- Fix error when updating or creating a sale with missing required values - #4778 by @NyanKiyoshi
- Fix error filtering pages by URL in the dashboard 1.0 - #4776 by @NyanKiyoshi
- Fix display of the products tax rate in the details page of dashboard 1.0 - #4780 by @NyanKiyoshi
- Fix adding the same product into a collection multiple times - #4518 by @NyanKiyoshi
- Fix crash when placing an order when a customer happens to have the same address more than once - #4824 by @NyanKiyoshi
- Fix time zone based tests - #4468 by @fowczarek
- Fix serializing empty URLs as a string when creating menu items - #4616 by @maarcingebala
- The invalid IP address in HTTP requests now fallback to the requester's IP address. - #4597 by @NyanKiyoshi
- Fix product variant update with current attribute values - #4936 by @fowczarek
- Update checkout last field and add auto now fields to save with update_fields parameter - #5177 by @IKarbowiak
- Allow selecting the number of rows displayed in dashboard's list views - #4414 by @benekex2
- Add ability to toggle visible columns in product list - #4608 by @dominik-zeglen
- Add voucher settings - #4556 by @benekex2
- Contrast improvements - #4508 by @benekex2
- Display menu item form errors - #4551 by @dominik-zeglen
- Do not allow random IDs to appear in snapshots - #4495 by @dominik-zeglen
- Input UI changes - #4542 by @benekex2
- Implement new menu design - #4476 by @benekex2
- Refetch attribute list after closing modal - #4615 by @dominik-zeglen
- Add config for Testcafe - #4553 by @dominik-zeglen
- Fix product type taxes select - #4453 by @benekex2
- Fix form reloading - #4467 by @dominik-zeglen
- Fix voucher limit value when checkbox unchecked - #4456 by @benekex2
- Fix searches and pickers - #4487 by @dominik-zeglen
- Fix dashboard menu styles - #4491 by @benekex2
- Fix menu responsiveness - #4511 by @benekex2
- Fix loosing focus while typing in the product description field - #4549 by @dominik-zeglen
- Fix MUI warnings - #4588 by @dominik-zeglen
- Fix bulk action checkboxes - #4618 by @dominik-zeglen
- Fix rendering user avatar when it's empty #4546 by @maarcingebala
- Remove Dashboard 2.0 files form Saleor repository - #4631 by @dominik-zeglen
- Fix CreateToken mutation to use NonNull on errors field #5415 by @gabmartinez
- Replace Pipenv with Poetry - #3894 by @michaljelonek
- Upgrade
django-pricesto v2.1 - #4639 by @NyanKiyoshi - Disable reports from uWSGI about broken pipe and write errors from disconnected clients - #4596 by @NyanKiyoshi
- Fix the random failures of
populatedbtrying to create users with an existing email - #4769 by @NyanKiyoshi - Enforce
pydocstylefor Python docstrings over the project - #4562 by @NyanKiyoshi - Move Django Debug Toolbar to dev requirements - #4454 by @derenio
- Change license for artwork to CC-BY 4.0
- New translations:
- Greek
- Avatax backend support - #4310 by @korycins
- Add ability to store used payment sources in gateways (first implemented in Braintree) - #4195 by @salwator
- Add ability to specify a minimal quantity of checkout items for a voucher - #4427 by @fowczarek
- Change the type of start and end date fields from Date to DateTime - #4293 by @fowczarek
- Revert the custom dynamic middlewares - #4452 by @NyanKiyoshi
- UX improvements in Vouchers section - #4362 by @benekex2
- Add company address configuration - #4432 by @benekex2
- Require name when saving a custom list filter - #4269 by @benekex2
- Use
esModuleInteropflag intsconfig.jsonto simplify imports - #4372 by @dominik-zeglen - Use hooks instead of a class component in forms - #4374 by @dominik-zeglen
- Drop CSRF token header from API client - #4357 by @dominik-zeglen
- Fix various bugs in the product section - #4429 by @dominik-zeglen
- Fix error when creating a checkout with voucher code - #4292 by @NyanKiyoshi
- Fix error when users enter an invalid phone number in an address - #4404 by @NyanKiyoshi
- Fix error when adding a note to an anonymous order - #4319 by @NyanKiyoshi
- Fix gift card duplication error in the
populatedbscript - #4336 by @fowczarek - Fix vouchers apply once per order - #4339 by @fowczarek
- Fix discount tests failing at random - #4401 by @korycins
- Add
SPECIFIC_PRODUCTtype toVoucherType- #4344 by @fowczarek - New translations:
- Icelandic
- Refactored the backend side of
checkoutCreateto improve performances and prevent side effects over the user's checkout if the checkout creation was to fail. - #4367 by @NyanKiyoshi - Refactored the logic of cleaning the checkout shipping method over the API, so users do not lose the shipping method when updating their checkout. If the shipping method becomes invalid, it will be replaced by the cheapest available. - #4367 by @NyanKiyoshi & @szewczykmira
- Refactored process of getting available shipping methods to make it easier to understand and prevent human-made errors. - #4367 by @NyanKiyoshi
- Moved 3D secure option to Braintree plugin configuration and update config structure mechanism - #4751 by @salwator
- Create order only when payment is successful - #4154 by @NyanKiyoshi
- Order Events containing order lines or fulfillment lines now return the line object in the GraphQL API - #4114 by @NyanKiyoshi
- GraphQL now prints exceptions to stderr as well as returning them or not - #4148 by @NyanKiyoshi
- Refactored API resolvers to static methods with root typing - #4155 by @NyanKiyoshi
- Add phone validation in the GraphQL API to handle the library upgrade - #4156 by @NyanKiyoshi
- Add basic Gift Cards support in the backend - #4025 by @fowczarek
- Add the ability to sort products within a collection - #4123 by @NyanKiyoshi
- Implement customer events - #4094 by @NyanKiyoshi
- Merge "authorize" and "capture" operations - #4098 by @korycins, @NyanKiyoshi
- Separate the Django middlewares from the GraphQL API middlewares - #4102 by @NyanKiyoshi, #4186 by @cmiacz
- Add navigation section - #4012 by @dominik-zeglen
- Add filtering on product list - #4193 by @dominik-zeglen
- Add filtering on orders list - #4237 by @dominik-zeglen
- Change input style and improve Storybook stories - #4115 by @dominik-zeglen
- Migrate deprecated fields in Dashboard 2.0 - #4121 by @benekex2
- Add multiple select checkbox - #4133, #4146 by @benekex2
- Rename menu items in Dashboard 2.0 - #4172 by @benekex2
- Category delete modal improvements - #4171 by @benekex2
- Close modals on click outside - #4236 - by @benekex2
- Use date localize hook in translations - #4202 by @dominik-zeglen
- Unify search API - #4200 by @dominik-zeglen
- Default default PAGINATE_BY - #4238 by @dominik-zeglen
- Create generic filtering interface - #4221 by @dominik-zeglen
- Add default state to rich text editor = #4281 by @dominik-zeglen
- Fix translation discard button - #4109 by @benekex2
- Fix draftail options and icons - #4132 by @benekex2
- Fix typos and messages in Dashboard 2.0 - #4168 by @benekex2
- Fix view all orders button - #4173 by @benekex2
- Fix visibility card view - #4198 by @benekex2
- Fix query refetch after selecting an object in list - #4272 by @dominik-zeglen
- Fix image selection in variants - #4270 by @benekex2
- Fix collection search - #4267 by @dominik-zeglen
- Fix quantity height in draft order edit - #4273 by @benekex2
- Fix checkbox clickable area size - #4280 by @dominik-zeglen
- Fix breaking object selection in menu section - #4282 by @dominik-zeglen
- Reset selected items when tab switch - #4268 by @benekex2
- Add support for Google Cloud Storage - #4127 by @chetabahana
- Adding a nonexistent variant to checkout no longer crashes - #4166 by @NyanKiyoshi
- Disable storage of Celery results - #4169 by @NyanKiyoshi
- Disable polling in Playground - #4188 by @maarcingebala
- Cleanup code for updated function names and unused argument - #4090 by @jxltom
- Users can now add multiple "Add to Cart" forms in a single page - #4165 by @NyanKiyoshi
- Fix incorrect argument in
get_client_tokenin Braintree integration - #4182 by @maarcingebala - Fix resolving attribute values when transforming them to HStore - #4161 by @maarcingebala
- Fix wrong calculation of subtotal in cart page - #4145 by @korycins
- Fix margin calculations when product/variant price is set to zero - #4170 by @MahmoudRizk
- Fix applying discounts in checkout's subtotal calculation in API - #4192 by @maarcingebala
- Fix GATEWAYS_ENUM to always contain all implemented payment gateways - #4108 by @koradon
- Add unified filtering interface in resolvers - #3952, #4078 by @korycins
- Add mutations for bulk actions - #3935, #3954, #3967, #3969, #3970 by @akjanik
- Add mutation for reordering menu items - #3958 by @NyanKiyoshi
- Optimize queries for single nodes - #3968 @NyanKiyoshi
- Refactor error handling in mutations #3891 by @maarcingebala & @akjanik
- Specify mutation permissions through Meta classes - #3980 by @NyanKiyoshi
- Unify pricing access in products and variants - #3948 by @NyanKiyoshi
- Use only_fields instead of exclude_fields in type definitions - #3940 by @michaljelonek
- Prefetch collections when getting sales of a bunch of products - #3961 by @NyanKiyoshi
- Remove unnecessary dedents from GraphQL schema so new Playground can work - #4045 by @salwator
- Restrict resolving payment by ID - #4009 @NyanKiyoshi
- Require
checkoutIdfor updating checkout's shipping and billing address - #4074 by @jxltom - Handle errors in
TokenVerifymutation - #3981 by @fowczarek - Unify argument names in types and resolvers - #3942 by @NyanKiyoshi
- Use Black as the default code formatting tool - #3852 by @krzysztofwolski and @NyanKiyoshi
- Dropped Python 3.5 support - #4028 by @korycins
- Rename Cart to Checkout - #3963 by @michaljelonek
- Use data classes to exchange data with payment gateways - #4028 by @korycins
- Refactor order events - #4018 by @NyanKiyoshi
- Add bulk actions - #3955 by @dominik-zeglen
- Add user avatar management - #4030 by @benekex2
- Add navigation drawer support on mobile devices - #3839 by @benekex2
- Fix rendering validation errors in product form - #4024 by @benekex2
- Move dialog windows to query string rather than router paths - #3953 by @dominik-zeglen
- Update order events types - #4089 by @jxltom
- Code cleanup by replacing render props with react hooks - #4010 by @dominik-zeglen
- Add setting to enable Django Debug Toolbar - #3983 by @koradon
- Use newest GraphQL Playground - #3971 by @salwator
- Ensure adding to quantities in the checkout is respecting the limits - #4005 by @NyanKiyoshi
- Fix country area choices - #4008 by @fowczarek
- Fix price_range_as_dict function - #3999 by @zodiacfireworks
- Fix the product listing not showing in the voucher when there were products selected - #4062 by @NyanKiyoshi
- Fix crash in Dashboard 1.0 when updating an order address's phone number - #4061 by @NyanKiyoshi
- Reduce the time of tests execution by using dummy password hasher - #4083 by @korycins
- Set up explicit hash function - #3979 by @akjanik
- Unit tests use none as media root - #3975 by @korycins
- Update file field styles with materializecss template filter - #3998 by @zodiacfireworks
- New translations:
- Albanian
- Colombian Spanish
- Lithuanian
- Add query to fetch draft orders - #3809 by @michaljelonek
- Add bulk delete mutations - #3838 by @michaljelonek
- Add
languageCodeenum to API - #3819 by @michaljelonek, #3854 by @jxltom - Duplicate address instances in checkout mutations - #3866 by @pawelzar
- Restrict access to
ordersquery for unauthorized users - #3861 by @pawelzar - Support setting address as default in address mutations - #3787 by @jxltom
- Fix phone number validation in GraphQL when country prefix not given - #3905 by @patrys
- Report pretty stack traces in DEBUG mode - #3918 by @patrys
- Drop support for Django 2.1 and Django 1.11 (previous LTS) - #3929 by @patrys
- Fulfillment of digital products - #3868 by @korycins
- Introduce avatars for staff accounts - #3878 by @pawelzar
- Refactor the account avatars path from a relative to absolute - #3938 by @NyanKiyoshi
- Add translations section - #3884 by @dominik-zeglen
- Add light/dark theme - #3856 by @dominik-zeglen
- Add customer's address book view - #3826 by @dominik-zeglen
- Add "Add variant" button on the variant details page = #3914 by @dominik-zeglen
- Add back arrows in "Configure" subsections - #3917 by @dominik-zeglen
- Display avatars in staff views - #3922 by @dominik-zeglen
- Prevent user from changing his own status and permissions - #3922 by @dominik-zeglen
- Fix crashing product create view - #3837, #3910 by @dominik-zeglen
- Fix layout in staff members details page - #3857 by @dominik-zeglen
- Fix unfocusing rich text editor - #3902 by @dominik-zeglen
- Improve accessibility - #3856 by @dominik-zeglen
- Improve user and staff management in dashboard 1.0 - #3781 by @jxltom
- Fix default product tax rate in Dashboard 1.0 - #3880 by @pawelzar
- Fix logo in docs - #3928 by @michaljelonek
- Fix name of logo file - #3867 by @jxltom
- Fix variants for juices in example data - #3926 by @michaljelonek
- Fix alignment of the cart dropdown on new bootstrap version - #3937 by @NyanKiyoshi
- Refactor the account avatars path from a relative to absolute - #3938 by @NyanKiyoshi
- New translations:
- Armenian
- Portuguese
- Swahili
- Thai
- Add model translations support in GraphQL API - #3789 by @michaljelonek
- Add mutations to manage addresses for authenticated customers - #3772 by @Kwaidan00, @maarcingebala
- Add mutation to apply vouchers in checkout - #3739 by @Kwaidan00
- Add thumbnail field to
OrderLinetype - #3737 by @michaljelonek - Add a query to fetch order by token - #3740 by @michaljelonek
- Add city choices and city area type to address validator API - #3788 by @jxltom
- Fix access to unpublished objects in API - #3724 by @Kwaidan00
- Fix bug where errors are not returned when creating fulfillment with a non-existent order line - #3777 by @jxltom
- Fix
productCreatemutation when no product type was provided - #3804 by @michaljelonek - Enable database search in products query - #3736 by @michaljelonek
- Use authenticated user's email as default email in creating checkout - #3726 by @jxltom
- Generate voucher code if it wasn't provided in mutation - #3717 by @Kwaidan00
- Improve limitation of vouchers by country - #3707 by @michaljelonek
- Only include canceled fulfillments for staff in fulfillment API - #3778 by @jxltom
- Support setting address as when creating customer address #3782 by @jxltom
- Fix generating slug from title - #3816 by @maarcingebala
- Add
variantfield toOrderLinetype - #3820 by @maarcingebala
- Add JSON fields to store rich-text content - #3756 by @michaljelonek
- Add function to recalculate total order weight - #3755 by @Kwaidan00, @maarcingebala
- Unify cart creation logic in API and Django views - #3761, #3790 by @maarcingebala
- Unify payment creation logic in API and Django views - #3715 by @maarcingebala
- Support partially charged and refunded payments - #3735 by @jxltom
- Support partial fulfillment of ordered items - #3754 by @jxltom
- Fix applying discounts when a sale has no end date - #3595 by @cprinos
- Add "Discounts" section - #3654 by @dominik-zeglen
- Add "Pages" section; introduce Draftail WYSIWYG editor - #3751 by @dominik-zeglen
- Add "Shipping Methods" section - #3770 by @dominik-zeglen
- Add support for date and datetime components - #3708 by @dominik-zeglen
- Restyle app layout - #3811 by @dominik-zeglen
- Unify model field names related to models' public access -
publication_dateandis_published- #3706 by @michaljelonek - Improve filter orders by payment status - #3749 @jxltom
- Refactor translations in emails - #3701 by @Kwaidan00
- Use exact image versions in docker-compose - #3742 by @ashishnitinpatil
- Sort order payment and history in descending order - #3747 by @jxltom
- Disable style-loader in dev mode - #3720 by @jxltom
- Add ordering to shipping method - #3806 by @michaljelonek
- Add missing type definition for dashboard 2.0 - #3776 by @jxltom
- Add header and footer for checkout success pages #3752 by @jxltom
- Add instructions for using local assets in Docker - #3723 by @michaljelonek
- Update S3 deployment documentation to include CORS configuration note - #3743 by @NyanKiyoshi
- Fix missing migrations for is_published field of product and page model - #3757 by @jxltom
- Fix problem with l10n in Braintree payment gateway template - #3691 by @Kwaidan00
- Fix bug where payment is not filtered from active ones when creating payment - #3732 by @jxltom
- Fix incorrect cart badge location - #3786 by @jxltom
- Fix storefront styles after bootstrap is updated to 4.3.1 - #3753 by @jxltom
- Fix logo size in different browser and devices with different sizes - #3722 by @jxltom
- Rename dumpdata file
db.jsontopopulatedb_data.json- #3810 by @maarcingebala - Prefetch collections for product availability - #3813 by @michaljelonek
- Bump django-graphql-jwt - #3814 by @michaljelonek
- Fix generating slug from title - #3816 by @maarcingebala
- New translations:
- Estonian
- Indonesian
- Fix access to private variant fields in API - #3773 by maarcingebala
- Limit access of quantity and allocated quantity to staff in GraphQL API #3780 by @jxltom
- Return user's last checkout in the
Usertype - #3578 by @fowczarek - Automatically assign checkout to the logged in user - #3587 by @fowczarek
- Expose
chargeTaxesOnShippingfield in theShoptype - #3603 by @fowczarek - Expose list of enabled payment gateways - #3639 by @fowczarek
- Validate uploaded files in a unified way - #3633 by @fowczarek
- Add mutation to trigger fetching tax rates - #3622 by @fowczarek
- Use USERNAME_FIELD instead of hard-code email field when resolving user - #3577 by @jxltom
- Require variant and quantity fields in
CheckoutLineInputtype - #3592 by @jxltom - Preserve order of nodes in
get_nodes_or_errorfunction - #3632 by @jxltom - Add list mutations for
VoucherandSalemodels - #3669 by @michaljelonek - Use proper type for countries in
Vouchertype - #3664 by @michaljelonek - Require email in when creating checkout in API - #3667 by @michaljelonek
- Unify returning errors in the
tokenCreatemutation - #3666 by @michaljelonek - Use
Datefield in Sale/Voucher inputs - #3672 by @michaljelonek - Refactor checkout mutations - #3610 by @fowczarek
- Refactor
clean_instance, so it does not returns errors anymore - #3597 by @akjanik - Handle GraphqQL syntax errors - #3576 by @jxltom
- Refactor payments architecture - #3519 by @michaljelonek
- Improve Docker and
docker-composeconfiguration - #3657 by @michaljelonek - Allow setting payment status manually for dummy gateway in Storefront 1.0 - #3648 by @jxltom
- Infer default transaction kind from operation type - #3646 by @jxltom
- Get correct payment status for order without any payments - #3605 by @jxltom
- Add default ordering by
idforCartLinemodel - #3593 by @jxltom - Fix "set password" email sent to customer created in the dashboard - #3688 by @Kwaidan00
- ️Add taxes section - #3622 by @dominik-zeglen
- Add drag'n'drop image upload - #3611 by @dominik-zeglen
- Unify grid handling - #3520 by @dominik-zeglen
- Add component generator - #3670 by @dominik-zeglen
- Throw Typescript errors while snapshotting - #3611 by @dominik-zeglen
- Simplify mutation's error checking - #3589 by @dominik-zeglen
- Fix order cancelling - #3624 by @dominik-zeglen
- Fix logo placement - #3602 by @dominik-zeglen
- Register Celery task for updating exchange rates - #3599 by @jxltom
- Fix handling different attributes with the same slug - #3626 by @jxltom
- Add missing migrations for tax rate choices - #3629 by @jxltom
- Fix
TypeErroron callingget_client_token- #3660 by @michaljelonek - Make shipping required as default when creating product types - #3655 by @jxltom
- Display payment status on customer's account page in Storefront 1.0 - #3637 by @jxltom
- Make order fields sequence in Dashboard 1.0 same as in Dashboard 2.0 - #3606 by @jxltom
- Fix returning products for homepage for the currently viewing user - #3598 by @jxltom
- Allow filtering payments by status in Dashboard 1.0 - #3608 by @jxltom
- Fix typo in the definition of order status - #3649 by @jxltom
- Add margin for order notes section - #3650 by @jxltom
- Fix logo position - #3609, #3616 by @jxltom
- Storefront visual improvements - #3696 by @piotrgrundas
- Fix product list price filter - #3697 by @Kwaidan00
- Redirect to success page after successful payment - #3693 by @Kwaidan00
- Use
PermissionEnumas input parameter type forpermissionsfield - #3434 by @maarcingebala - Add "authorize" and "charge" mutations for payments - #3426 by @jxltom
- Add alt text to product thumbnails and background images of collections and categories - #3429 by @fowczarek
- Fix passing decimal arguments = #3457 by @fowczarek
- Allow sorting products by the update date - #3470 by @jxltom
- Validate and clear the shipping method in draft order mutations - #3472 by @fowczarek
- Change tax rate field to choice field - #3478 by @fowczarek
- Allow filtering attributes by collections - #3508 by @maarcingebala
- Resolve to
Nonewhen empty object ID was passed as mutation argument - #3497 by @maarcingebala - Change
errorsfield type from [Error] to [Error!] - #3489 by @fowczarek - Support creating default variant for product types that don't use multiple variants - #3505 by @fowczarek
- Validate SKU when creating a default variant - #3555 by @fowczarek
- Extract enums to separate files - #3523 by @maarcingebala
- Add Stripe payment gateway - #3408 by @jxltom
- Add
first_nameandlast_namefields to theUsermodel - #3101 by @fowczarek - Improve several payment validations - #3418 by @jxltom
- Optimize payments related database queries - #3455 by @jxltom
- Add publication date to collections - #3369 by @k-brk
- Fix hard-coded site name in order PDFs - #3526 by @NyanKiyoshi
- Update favicons to the new style - #3483 by @dominik-zeglen
- Fix migrations for default currency - #3235 by @bykof
- Remove Elasticsearch from
docker-compose.yml- #3482 by @maarcingebala - Resort imports in tests - #3471 by @jxltom
- Fix the no shipping orders payment crash on Stripe - #3550 by @NyanKiyoshi
- Bump backend dependencies - #3557 by @maarcingebala. This PR removes security issue CVE-2019-3498 which was present in Django 2.1.4. Saleor however wasn't vulnerable to this issue as it doesn't use the affected
django.views.defaults.page_not_found()view. - Generate random data using the default currency - #3512 by @stephenmoloney
- New translations:
- Catalan
- Serbian
- Restyle product selection dialogs - #3499 by @dominik-zeglen, @maarcingebala
- Fix minor visual bugs in Dashboard 2.0 - #3433 by @dominik-zeglen
- Display warning if order draft has missing data - #3431 by @dominik-zeglen
- Add description field to collections - #3435 by @dominik-zeglen
- Add query batching - #3443 by @dominik-zeglen
- Use autocomplete fields in country selection - #3443 by @dominik-zeglen
- Add alt text to categories and collections - #3461 by @dominik-zeglen
- Use first and last name of a customer or staff member in UI - #3247 by @Bonifacy1, @dominik-zeglen
- Show error page if an object was not found - #3463 by @dominik-zeglen
- Fix simple product's inventory data saving bug - #3474 by @dominik-zeglen
- Replace
thumbnailUrlwiththumbnail { url }- #3484 by @dominik-zeglen - Change "Feature on Homepage" switch behavior - #3481 by @dominik-zeglen
- Expand payment section in order view - #3502 by @dominik-zeglen
- Change TypeScript loader to speed up the build process - #3545 by @patrys
- Do not show
Pay For Orderif order is partly paid since partial payment is not supported - #3398 by @jxltom - Fix attribute filters in the products category view - #3535 by @fowczarek
- Fix storybook dependencies conflict - #3544 by @dominik-zeglen
- Change selected connection fields to lists - #3307 by @fowczarek
- Require pagination in connections - #3352 by @maarcingebala
- Replace Graphene view with a custom one - #3263 by @patrys
- Change
sortByparameter to use enum type - #3345 by @fowczarek - Add
mequery to fetch data of a logged-in user - #3202, #3316 by @fowczarek - Add
canFinalizefield to the Order type - #3356 by @fowczarek - Extract resolvers and mutations to separate files - #3248 by @fowczarek
- Add VAT tax rates field to country - #3392 by @michaljelonek
- Allow creating orders without users - #3396 by @fowczarek
- Add Razorpay payment gatway - #3205 by @NyanKiyoshi
- Use standard tax rate as a default tax rate value - #3340 by @fowczarek
- Add description field to the Collection model - #3275 by @fowczarek
- Enforce the POST method on VAT rates fetching - #3337 by @NyanKiyoshi
- Generate thumbnails for category/collection background images - #3270 by @NyanKiyoshi
- Add warm-up support in product image creation mutation - #3276 by @NyanKiyoshi
- Fix error in the
populatedbscript when running it not from the project root - #3272 by @NyanKiyoshi - Make Webpack rebuilds fast - #3290 by @patrys
- Skip installing Chromium to make deployment faster - #3227 by @jxltom
- Add default test runner - #3258 by @jxltom
- Add Transifex client to Pipfile - #3321 by @jxltom
- Remove additional pytest arguments in tox - #3338 by @jxltom
- Remove test warnings - #3339 by @jxltom
- Remove runtime warning when product has discount - #3310 by @jxltom
- Remove
django-graphene-jwtwarnings - #3228 by @jxltom - Disable deprecated warnings - #3229 by @jxltom
- Add
AWS_S3_ENDPOINT_URLsetting to support DigitalOcean spaces. - #3281 by @hairychris - Add
.gitattributesfile to hide diffs for generated files on Github - #3055 by @NyanKiyoshi - Add database sequence reset to
populatedb- #3406 by @michaljelonek - Get authorized amount from succeeded auth transactions - #3417 by @jxltom
- Resort imports by
isort- #3412 by @jxltom
- Add confirmation modal when leaving view with unsaved changes - #3375 by @dominik-zeglen
- Add dialog loading and error states - #3359 by @dominik-zeglen
- Split paths and urls - #3350 by @dominik-zeglen
- Derive state from props in forms - #3360 by @dominik-zeglen
- Apply debounce to autocomplete fields - #3351 by @dominik-zeglen
- Use Apollo signatures - #3353 by @dominik-zeglen
- Add order note field in the order details view - #3346 by @dominik-zeglen
- Add app-wide progress bar - #3312 by @dominik-zeglen
- Ensure that all queries are built on top of TypedQuery - #3309 by @dominik-zeglen
- Close modal windows automatically - #3296 by @dominik-zeglen
- Move URLs to separate files - #3295 by @dominik-zeglen
- Add basic filters for products and orders list - #3237 by @Bonifacy1
- Fetch default currency from API - #3280 by @dominik-zeglen
- Add
displayNameproperty to components - #3238 by @Bonifacy1 - Add window titles - #3279 by @dominik-zeglen
- Add paginator component - #3265 by @dominik-zeglen
- Update Material UI to 3.6 - #3387 by @patrys
- Upgrade React, Apollo, Webpack and Babel - #3393 by @patrys
- Add pagination for required connections - #3411 by @dominik-zeglen
- Fix language codes - #3311 by @jxltom
- Fix resolving empty attributes list - #3293 by @maarcingebala
- Fix range filters not being applied - #3385 by @michaljelonek
- Remove timeout for updating image height - #3344 by @jxltom
- Return error if checkout was not found - #3289 by @maarcingebala
- Solve an auto-resize conflict between Materialize and medium-editor - #3367 by @adonig
- Fix calls to
ngettext_lazy- #3380 by @patrys - Filter preauthorized order from succeeded transactions - #3399 by @jxltom
- Fix incorrect country code in fixtures - #3349 by @bingimar
- Fix updating background image of a collection - #3362 by @fowczarek & @dominik-zeglen
- Document settings related to generating thumbnails on demand - #3329 by @NyanKiyoshi
- Improve documentation for Heroku deployment - #3170 by @raybesiga
- Update documentation on Docker deployment - #3326 by @jxltom
- Document payment gateway configuration - #3376 by @NyanKiyoshi
- Add mutation to delete a customer; add
isActivefield incustomerUpdatemutation - #3177 by @maarcingebala - Add mutations to manage authorization keys - #3082 by @maarcingebala
- Add queries for dashboard homepage - #3146 by @maarcingebala
- Allows user to unset homepage collection - #3140 by @oldPadavan
- Use enums as permission codes - #3095 by @the-bionic
- Return absolute image URLs - #3182 by @maarcingebala
- Add
backgroundImagefield toCategoryInput- #3153 by @oldPadavan - Add
dateJoinedandlastLoginfields inUsertype - #3169 by @maarcingebala - Separate
parentinput field fromCategoryInput- #3150 by @akjanik - Remove duplicated field in Order type - #3180 by @maarcingebala
- Handle empty
backgroundImagefield in API - #3159 by @maarcingebala - Generate name-based slug in collection mutations - #3145 by @akjanik
- Remove products field from
collectionUpdatemutation - #3141 by @oldPadavan - Change
itemsfield inMenutype from connection to list - #3032 by @oldPadavan - Make
Meta.descriptionrequired inBaseMutation- #3034 by @oldPadavan - Apply
textwrap.dedentto GraphQL descriptions - #3167 by @fowczarek
- Add collection management - #3135 by @dominik-zeglen
- Add customer management - #3176 by @dominik-zeglen
- Add homepage view - #3155, #3178 by @Bonifacy1 and @dominik-zeglen
- Add product type management - #3052 by @dominik-zeglen
- Add site settings management - #3071 by @dominik-zeglen
- Escape node IDs in URLs - #3115 by @dominik-zeglen
- Restyle categories section - #3072 by @Bonifacy1
- Change relation between
ProductTypeandAttributemodels - #3097 by @maarcingebala - Remove
quantity-allocatedgeneration inpopulatedbscript - #3084 by @MartinSeibert - Handle
Moneyserialization - #3131 by @Pacu2 - Do not collect unnecessary static files - #3050 by @jxltom
- Remove host mounted volume in
docker-compose- #3091 by @tiangolo - Remove custom services names in
docker-compose- #3092 by @tiangolo - Replace COUNTRIES with countries.countries - #3079 by @neeraj1909
- Installing dev packages in docker since tests are needed - #3078 by @jxltom
- Remove comparing string in address-form-panel template - #3074 by @tomcio1205
- Move updating variant names to a Celery task - #3189 by @fowczarek
- Fix typo in
clean_inputmethod - #3100 by @the-bionic - Fix typo in
ShippingMethodmodel - #3099 by @the-bionic - Remove duplicated variable declaration - #3094 by @the-bionic
- Add createdb note to getting started for Windows - #3106 by @ajostergaard
- Update docs on pipenv - #3045 by @jxltom