Public Backlog

WebinOne announcements, releases, updates and achievements

v 5.0 Release date: 19 Feb, 2020

Full Release Notes

Misc

Events:
Merge event module to configuration of custom module with system properties

  • Create System properties holder to the proto-module
  • Add event specific properties to the system module properties
    • Redo admin UI to use capacity, start end time and prices from system module properties
    • Restrict using names of system properties in any module custom properties section.
    • Already existed properties with the same name should be deleted and it’s values should be saved to the corresponded system properties
  • Payment flow should use system module properties price instead of old event specific properties.
  • Liquid output should remain the same
  • Search indexes should save data from system properties instead of old event specific properties
  • JS calendar should work the same way as was before this change
  • Redo toolboxes

Misc

Events:
Upgrade for Global Payments Flow

Set Allow pricing to Events module by default
Transfer Event Price from system properties to Pricing table.
Override system price property

‘Advanced Settings’ -> ’Enable Subscription’ checkbox added.

When enabled (which is default):

  • show capacity field in module item page
  • allows event subscription logic to work for item

Misc

recaptcha v3 execution default JS improvement

Change default recaptcha V3 js code to the one specified in the file recaptcha v3 execution on form submit-min.js

New code will execute recaptcha V3 validation once user triggers submit form event Submission will be longer, but this solution removes validation issues with the old code that gives you 2 minutes starting from the page loaded state to submit the form (validated token expired after 2 minutes). Old code launched validation on page load event.

Example:

http://prntscr.com/q62rvs

Misc

Rename Categories, Tags and Authors tab name

On item add/Edit view - rename tab name for categories, tags and Authors

  • From ”System Properties”
  • to “Default Properties”

Misc

‘Added by’ field refactoring #1

Hide field "Added by" and do not request CRM contact records on item Add/Edit form if ALL settings below are set to false:

  • Allow Add New Items
  • Allow Edit Items
  • Allow Delete Items

Attention: Even if field is hidden if it has a value previously - it will not be erased on clicking save item

Misc

Recaptcha v3 validation score management

In Settings -> Misc
Add ability to set Minimum validation score:

  • value should be between 0 and 1.0
  • default value is 0.5

On webform validation if success check if validation score is greater or equals to the one set here.

Misc

Add keywords field for site search

Add default field to all modules:

  • Site Search Keywords
  • type: text

Should contain CSV list of keywords.

When user will perform site search - apply searching by this new field as well as it currently does for name and description

Misc

Index writing/reading flow upgrade

Change the way reindex works:

  • launch reindex check each 2 seconds instead of 5
  • stabilize index read/write operations so they will no longer conflict with each other (causing incorrect output via component when filtering by tags or categories)
  • Apply “reindex item” flow in site search similar to “reindex module item” instead of the WHOLE SITE SEARCH reindex (causing delays in component output when filtering by tags or categories)
  • When changing module settings - launch module reindex ONLY if module url was changed.
  • Optimize reindexing process to significantly reduce time for reindex module or reindex site search
    • Causing reduced speed of whole site (frontend and admin) since site is sharing same processor resources with the reindex process.
    • causing incorrect output via component when filtering by tags or categories

BUG fix: Check that reindex module flow takes ACTUAL documents. Not the cached ones.

Beta

Feature flags updates for 5.0-5.1

Remove from internal section flags listed below:

  • Advanced search
  • Date Time Management
  • Rebuild queue
  • Advanced multi-level categories
  • Customizable columns for module items view

Move ’Email domain verification’ flag to Internal flags.

Beta

ps1
Advanced Payment Flow:
Advanced Payment feature flag

Feature flag: Advanced payment flow

Improves payment flow using defined by the customer price formats and currencies attached to domain payment was made from.

Beta

ps2
Advanced Payment Flow:
Modify "payment gateway" setting page to "payment settings" page

New Payment Setting Page should contain tabs:

Gateway:

design: http://prntscr.com/rbhtr9

  • Move old "payment gateway" page content to gateway tab
  • Remove Currency selector from gateway section.
  • show list of gateway settings assigned to country-currency allowed by site domains

Currency and Format:

design: http://prntscr.com/rbhtz4

Default setting will be pre-configured (which can not be edited or deleted). This format setting will be used as default if no format setting specified for the domain.

Default settings:

  • Name: Default
  • Culture: English (United States)
  • Currency: USD
  • Number of digits after coma: 2

Beta

ps3
Advanced Payment Flow:
Extend Domains settings with "Currency and Price format" and "Country"

Entity relation Diagram:

https://prnt.sc/oz7a11

Beta

ps4
Advanced Payment Flow: Domain Settings component

Add new component tag "domain_settings":

{% component type:"domain_settings", domain:"", collectionVariable:"" %}

  • domain (not required param) - domain to retrieve settings for (current domain is default if param is empty)
  • collectionVariable (required param) - works the same way as other components.

collectionVariable context is an OBJECT described below:

  • Domain (string)
  • LandingPage (object)
    • Id (int)
    • Url (string)
    • Name (string)
  • Country (object)
    • Name (string) - country code
    • Code (string) - country code
  • FormatSetting (object)
    • Name (string)
    • Culture (string)
    • Currency (object)
      • Code (string)
      • Symbol (string)
      • DigitalCode (string)
      • Name (string)
    • DecimalsQuantity (int)

Beta

ps5
Advanced Payment Flow:
Admin UI dates format improvement

Display dates in the admin using Default domain Format setting

Beta

ps6
Advanced Payment Flow:
Domain currency and format settings to the order

When creating an order, save currency and price format settings chosen for the domain the order was purchased from, to the order at the moment of purchase.

So that if admin changes the currency and price format settings for the domain - the order will still keep those settings that were at the moment of purchase.

Display prices in order list and detail view based on these saved currency settings:

Beta

ps7
Advanced Payment Flow:
Invoice System Email modification

Use currency and format settings saved in orders to display prices in invoice email.

Liquid {{this.order}} example:

{

 "id": "12877807959236673593",

 "State": "AwaitingPayment",

 "formId": 0,

 "memberId": 7,

 "caseId": 0,

 "name": "Checkout 04 Mar 2020 09:06 AM",

 "invoiceNumber": 6,

 "invoiceDate": "2020-03-04T15:06:40.145232Z",

 "formatSetting": {

"name": "Default",

"culture": "en-US",

"decimalsQuantity": "2",

"currency": {

"name": "US Dollar"

"code": "USD"

"symbol": "$"

"digitalCode": "840"

},

 },

 "domainCountry": {

"name": "UNITED STATES",

"code": "US"

 },

 "destinationCountry": {

"name": "UNITED STATES",

"code": "US"

 },

 "shippingOption": {

"id": "12252410371037462536",

"shippingOptionId": "7361027874612051972",

"name": "Free",

"price": 0.0000,

"taxPercent": 0.0,

"taxPrice": 0.0,

"totalPrice": 0.0000,

"subTotalPrice": 0.0000

 },

 "discount": {

"id": "16801218532107878402",

"code": "test",

"type": "FixedAmount",

"amount": 5.0000

 },

 "discountPrice": 5.0000,

 "giftVoucher": {

"id": "7532467322502512642",

"code": "test",

"amount": 20.0000,

"balance": 20.0000

 },

 "paymentType": "Offline",

 "amountPending": 8.7700,

 "amountPaid": 0.0,

 "subTotalPrice": 33.7700,

 "taxPercent": 0.0,

 "taxPrice": 0.0,

 "totalPrice": 8.7700,

 "items": [

{

"id": "15049017874163171346",

"smallImage": null,

"name": "test prod",

"type": "ModuleItem",

"moduleId": 0,

"SKUCode": "eb8da3f4-2037-42c8-ab84-20d7c85ea224",

"quantity": 1,

"Url": "/catalogs/test-prod",

"price": 33.7700,

"taxPercent": 0.0000,

"unitPrice": 33.7700,

"taxPrice": 0.00000000,

"unitTotalPrice": 33.77000000,

"totalPrice": 33.77000000,

"unitTotalPriceHtml": "$33.77",

"priceHtml": "$33.77",

"unitPriceHtml": "$33.77",

"taxPriceHtml": "$0.00",

"totalHtmlPrice": "$33.77",

"quantityHtml": "",

"removeHtml": "",

"attributes": []

}

 ],

 "giftVoucherPrice": 20.0000,

 "discountPriceHtml": "$5.00",

 "taxPriceHtml": "$0.00",

 "shippingTotalPriceHtml": "$0.00",

 "giftVoucherPriceHtml": "$20.00",

 "totalPriceHtml": "$8.77",

 "amountPaidHtml": "$0.00",

 "amountPendingHtml": "$8.77"

}

Beta

Advanced Payment Flow:
Form Builder (Form logic modified)

Add system field

  • FormType
  • Values:
    • Generic (default)
    • SingleItem
    • Checkout

Add formType property to the following liquid objects:

  • form context (applied in {% component type:"form" %})
  • form submission data object {{ formSubmissionData }}

If Advanced Payment Feature flag is enabled – all payment forms (with selected Accept Payment property) start working via the new flow:

For any form type:

IMPORTANT: Default html form template generates completely differently from the old one. Payment forms created earlier WILL NOT BE COMPATIBLE with the new flow since JS and backend logic was completely reworked for multiple payment methods and payment gateways.

If form type is ‘Generic’:

http://prntscr.com/rbyrbh (old html template on the left side and new one on the right)

  • (1) Removed data attributes for order name and description. They will be set on the backend by the internal rules.
  • (2) PaymentType field was reworked to accept payment types not payment gateway as it wrongly did before. Renamed to Payment_Type and accept following options
    • CreditCard:
      Replacement of the old Stripe code. Gateway will be determined by the current domain.
      Stripe key, currency and other gateway details now passed via get params of the payment gateway js that is automatically attached to the head of the page if page contains at least one component type form with selected accept payment field
    • Free:
      Option that is accepted only if submitted amount is equal to 0. Submitting such form still creates order-form_submission pair.
    • Offline:
      Option that allows creating order in Awaiting Payment state. So you will be able to add offline payment on order in Payments tab that will change order state to Success
  • (3) Payment fields that collect tokenized credit card data was reworked. In upcoming update (18 March) static html will be replaced by {% component type:"payment_form_fields", formAlias:"[[formAlias]]" %} that will have virtual layout that is same as on the right side in the screenshot above. This section will be used to output validation errors, set tokenized card data from payment provider and to display payment fields using capabilities that selected payment gateway give.
  • (4) Amount field was transformed to Payment_Amount field.
    Value of the this.paymentAmount will be set based on price param if form does not contain any secure zone with paid recurring subscriptions.
    If form contain such secure zone then price value will be overridden by sum of all paid subscriptions.
  • Examples of the form component:
    {% component type: "form", alias: "payment_form", price: "20.10" %}

If form type is ‘SingleItem’:

http://prntscr.com/rbz6gd (compared to the generic type)

  • Form template generates an additional field Payment_ModuleItemId
    This field will be prefilled by the id of the item specified in form component moduleItemID or eventId param (value of this.moduleItemId will be set based on moduleItemID or eventId param)
  • Examples of the form component:
    {% component type: "form", alias: "payment_form", moduleItemID: "3065" %}
    or
    {% component type: "form", alias: "payment_form", eventId: "3065" %}

If form type is ‘Checkout’:

http://prntscr.com/rbzkcs (compared to the generic type)

  • Form template includes fields for giftvoucher and shipping address details
  • Value of the this.paymentAmount will be set based on the checkout totalPrice value.
  • Examples of the form component:
    (no difference between checkout and simple form component. But form template will not be rendered if the site plan is lower than eCommerce)
    {% component type: "form", alias: "payment_form" %}

Guide to convert Event Payment forms html layout from

old payment flow to new one:

1. Choose SingleItem form type.

2. Do manipulations described below referencing this screenshot:

http://prntscr.com/rcjv8o (OLD on left | NEW on right)

(1) This part is unnecessary. Remove it.

(2) These attributes are unnecessary. Remove it.

(3)

paymentType Select form field should be renamed to Payment_Type.

Value should be CreditCard.

Example: <option value="CreditCard">Credit Card</option>

(4)

paymentData field should be replaced with:

<div id="paymentFields_{{this.alias}}"></div>

<input type="hidden" name="Payment_Data" />

<div id="paymentErrors_{{this.alias}}" role="alert"></div>

(5)

Amount field name should be renamed to Payment_Amount.

Value should be changed from {{paymentAmount}} to

{{this.paymentAmount}}.

"If" liquid code is unnecessary.

(6)

"If" liquid code is unnecessary.

eventId field should be renamed to Payment_ModuleItemId.

Value should be changed to {{this.moduleItemId}}.

allocations field should be renamed to Payment_ItemQuantity

Add data-event_one_item_price="{{this.paymentAmount}}" data

attribute to the field so it will be calculated by CMS payment js.

Beta

Advanced Payment Flow:
Event payment logic redo

Redo event payment logic to ecommerce payment - single item flow

  • on form
  • in toolbox

Beta

ps8
Advanced Payment Flow:
Add liquid filter | domain_number_format

Add new liquid filter:

{{ numberVar | domain_number_format }}

  • Convert number to formatted string based on current domain Currency and format setting. Without currency related settings
    If liquid parsing is outside of domain scope - use default domain and it's settings.
    • else - do not change the variable

Beta

ps9
Advanced Payment Flow:
Add liquid filter | domain_money_format

Add new liquid filter:

{{ numberVar | domain_money_format }}

  • Convert number to formatted string based on current domain Currency and format setting. Including all currency related settings
    If liquid parsing works outside of domain scope - use default domain and it's settings.
    • else - do not change the variable

Beta

Advanced Payment Flow:
Add liquid filter | set_money_format

Add new liquid filter:

  • Pattern:
    • {{ numberVar | set_money_format : "[[formatSettingId]]"}}
  • When applied -
    • if variable is number - should convert number to money-formatted string based on country and format setting
    • else - do not change the variable

Note: The ID value to use for “formatSettingId” is currently not readily available and will be a fix for this soon.

Beta

Advanced Payment Flow:
Add liquid filter | set_number_format

Add new liquid filter:

  • Pattern:
    • {{ numberVar | set_number_format : "[[formatSettingId]]" }}
  • When applied -
    • if variable is number - should convert number to number-formatted string based on country and format setting
    • else - do not change the variable

Backlog

Secure Zones:
Subscription/Membership pricing

Add Price section for secure zone subscription.
http://prntscr.com/rbkz2c

Backlog

Secure Zones:
Files and Folders tab in secure zone

Add new step to secure zones "Files and Folders"
Provide ability to assign/unassign separate files or folders to/from secure zone.
DESIGN: http://prntscr.com/r7d8m1

Backlog

Secure Zones:
Secured files and folders in file manager

Provide ability to see and assign/unassign files and folders to/from secure zone(s)
DESIGN:
http://prntscr.com/r7d9w9
http://prntscr.com/r7da2c

Backlog

Secure Zones:
Secured files and folders logic

On each request to file after checking redirects, follow steps:

  1. If current use is ADMIN user go to step 4
  2. Compare current request path (case insensitive) to ANY path of secured file.
    1. If found - go to step 3
    2. If not found - check if current request path (case insensitive) contains ANY path of secured folder.
      1. If found - go to step 3
      2. If not found - go to step 4
  3. Validate if ANY user's secure zone subscriptions contains AT LEAST ONE of the found entry secure zones.
    1. If not contains redirect to 403 system page
  4. Allow file to be requested

Backlog

Make form submission files secure

On each request to file after checking redirects:

  1. If request link pattern is like "/_form-submissions/*"
    1. If current user is ADMIN user go to step 2
    2. redirect to 403 system page
  2. Allow file to be requested

Backlog

c1
Ecommerce:
Catalogs

Create new System module under eCommerce menu called "Catalogs"

- allow creating Catalogs and Products on root level and inner level

- has new ‘Simplified Tree View’

- has system field for a Thumbnail Image (media)

Design:

http://prntscr.com/r7gnqx

Backlog

c2
Ecommerce:
Catalogs
New item view type

Add new view of items:

  • Simplified Tree View

Extend Module -> Advanced Settings:

  • View Settings (add new checkbox) “Allow Items Simplified Tree View”
  • Default view (Add new option) “Simplified Tree View”

Simplified Tree View page for catalog view provides ability to:

  • Create new catalog on the root level
  • Edit existing catalog
  • Delete catalog
  • Move catalog under another catalog
  • Reorder catalog on the particular level
  • Create catalog under another catalog


Design:

http://prntscr.com/r7gotn

Backlog

c4
Ecommerce:
Catalogs
Advanced Module Settings -> Allow multiple parent items

Add new module setting under Advanced Settings -> Allow multiple parent items

If this option of the child module is enabled - display Tab with the name of the Parent module (for child module item view) or the name of the Child module (for parent module item view).

Example:

Module Catalogs is parent to Products.
If Products module has Allow multiple parent items=true than product item page will contain Catalogs tab, and catalog item page will contain Products tab

The tab content has a multiple item selector:

http://prntscr.com/r7gmkh

https://prnt.sc/r7gmps

Selecting multiple parents saves a list of the parent module items.

List of parent module items determines the list of urls of which each will lead to the detail page of the item.

Backlog

p1
Ecommerce:
Products

New System module under eCommerce menu called "Products"

System properties:

  • Small Image (media)
  • Large Image (media)
  • On Sale (boolean)
  • Is Gift Voucher (boolean)
  • Product Weight (number)
  • Product Width (number)
  • Product Height (number)
  • Product Depth (number)
  • Enable Drop Shipping (boolean)
  • Supplier (CRM contact picker)
  • Unit Type (string)
  • Minimum Units (number)
  • Maximum Units (number)
  • Product Keywords (string)
  • Recurring Type (dropdown)
    • None
    • Daily
    • Weekly
    • Fortnightly
    • Monthly
    • Quarterly
    • Half Yearly
    • Yearly

Backlog

p2
Ecommerce:
Products
Add/Edit Product Page

Since product allows multiple parents - provide ability to see multiple urls for the module item.

Design:

http://prntscr.com/r7gqcj

Backlog

p3
Ecommerce:
Products
Default module property - SKU Code

Add new default property ’SKUCode’ (string) to all modules.

Add to liquid scope property ’SKUCode’

Show system property SKUCode on Add/Edit module item page -> settings page if

  • Advanced Settings -> Enable Inventory = true
    or
  • Advanced Settings -> Enable Price = true

(Advanced settings hidden and restricted to change for now. Enabled for Event and Product modules only)

Backlog

p4
Ecommerce:
Products > Prices

Price entity list:

Design: http://prntscr.com/rb0z9b

Display list of prices (price entities) based on Currency/country pairs.

(Currency/country pairs can be achieved from list of domains and cultures and countries attached to them)

List shows only price entities that are attached to active Currency/country pairs.

If admin changes Currency/country pair for some domain but some module item already has attached price entity based on that Currency/country pair that was previously attached to the domain, than this price entity should not be visible but still saved in the db. So if admin sets back that currency/country pair to any domain, that module item will restore visibility of that price entity in the price list.

Price entity properties:

  • Currency (one of currency list)
  • Country (one of country list)
  • PriceList (list)
    • RetailPrice
    • SellPrice
    • Tax (one of tax codes filtered by PriceEntity Country setting)
    • priceForUserType (one of:)
      • Consumer
      • Wholesaler
      • may be more in the future
  • VolumeDiscountPriceList (list) may be zero or many
    • Quantity
    • SellPrice

Liquid Scope Extending

Module item liquid scope should be extended by property Price {{this.price}} that should return price based on the current domain.

Searching and filtering impact

Price property should be searched or filtered based on the current domain’s country/currency settings.

Backlog

p5
Ecommerce:
Products > Attributes

Add new module setting

  • Advanced Settings -> Enable Attributes (hidden and restricted to change for now. Available for Products module only)

If option enabled - show ’Attributes’ tab in the Add/Edit module item page

Attributes list:

Attributes provide ability to add/edit/delete product attributes and attribute options.

Design: http://prntscr.com/rb16h8

Attribute entity:

Attribute entity holds list of attribute options with their prices based on currency/country list from site domains.

Properties:

  • Name (string)
  • Attribute Type (one of)
    • dropdown
    • checklist
    • radiolist
    • numeric
  • Value Type (one of)
    • fixed price
  • Required (boolean)
  • AddToInventory (boolean)
  • Options (list)
    • Name
    • Image
    • PriceList (list)
      • Price
      • Currency (one of currency list)
      • Country (one of country list)

Searching and filtering impact

Attributes and their options can not be searched or filtered via module component.

Backlog

p6
Ecommerce:
Products > Inventory

Design: http://prntscr.com/rb12ji

Inventory entity

Clicking on Generate Variations (setting it to true) should hide InStock and PreOrder options and create variant products as per any attribute options that have AddToInventory = true.


Set initial InStock value of the first variant product to the products stock level, where all others are 0.

Sum of all insock values of all variant products should be set to Inventory.InStock property.

Clicking on Disable Variations (setting it to false) should show InStock and PreOrder options and remove variant products entirely.

Both changes should be applied if user clicks save button ONLY. If user set Generate Variations = false than show confirmation window before saving:

Are you sure you want to remove all product variations?

OK CANCEL

Inventory entity properties and relations

  • Enabled (boolean)
  • Generate Variations (boolean)
  • WhenOutOfStock (one of)
    • Show [module alt name] but don't accept orders
    • Hide [module alt name]
    • Enable pre-ordering
  • LowStockNotification (number)
  • InStock (number)
  • PreOrder (number)
  • Variations (list)
    • Title (string)
    • SKUCode (string) - UNIQUE between all variation Codes and all module item SKUCodes
    • InStock (number)
    • Enable (boolean)
    • AttributeOptionsVariation (one of variant products made by attribute options of attributes that have AddToInventory = true)

Searching and filtering impact

Inventory data can't be searched or filtered for now.

Backlog

p7
Ecommerce:
Products
{% component type:"item_attributes" %}

New component tag "item_attributes":

{% component type:"item_attributes", object:"[[object]]", module:"[[moduleIdentifier]]", itemId:"[[itemId]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"" %}

  • moduleIdentifier (required param) - moduleName or moduleId.
  • itemId (required param) - id of the module item to get attributes from
  • object (not required param) - item or collection (Default).
  • collectionVariable (not required param) - works the same way as in other modules.
  • layout (not required param) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything (suppress layout).
    • If not specified at all - render default virtual layout.
  • sortBy (not required param) - any module item properties - Default is Id.
  • sortOrder (not required param) - ASC (Default) or DESC.

item context is described below. If object = collection (which is default) than this contains attributes property that holds the list of attributes ({{this.attributes}}):

  • ecommerceItemId (number) - itemId that was set in the component params
  • attributes (list)
    • Id (number)
    • Name (string)
    • AttributeType (string)
    • ValueType (string)
    • Required (boolean)
    • AddToInventory (boolean)
    • Options (list)
      • Id (number)
      • Name (string)
      • Image (string)
      • PriceValue (number)
      • FormattedPrice (string)
      • Currency (object)
        • Code (string)
        • Symbol (string)
        • DigitalCode (string)
        • Name (string)
      • Country (string) - country code

Default virtual layout can be seen/copied via FTP in ‘cms_assets’ folder.

Backlog

p8
Ecommerce:
Module toolbox

Add new toolbox items

  • eCommerce:
    • Catalogs list (default module items list toolbox for catalogs)
    • Products list (default module items list toolbox for products)
    • Related products {% component type:"related_items" %}
    • Grouped products {% component type:"grouped_items" %}
    • Product Attributes {% component type:"attributes" %}
  • Liquid Data
    • {% component type:"domain_settings" %}

Backlog

CRM:
Contact type field

New entity of ‘Contact Type’ with options:

  • Consumer
  • Wholesaler

Extend CRM Contact entity by Type field. Set ’Consumer’ value to all CRM contact records by default:

  • on create contact
  • preset for all existed contacts

Backlog

Ecommerce:
Taxes

Ability to view list of taxes and perform create/edit and delete tax operations.

Design: http://prntscr.com/rbjty8

Columns of the list view:

  • Name
  • Tax Percentage Amount
  • Country
  • Actions

Provide ability to pre-create taxes for countries (http://prntscr.com/rbjts6):

  • USA (see taxes on Acceptance criteria)

http://prntscr.com/ovgi09 - clicking on the button should create set of tax codes for selected country if system has preset of taxes for that country.

Create/edit form:

  • Country (select). Options:
    • use the same list of countries that used for Domains settings ->"Country"
    • On add new tax - preselect the country that is attached to the main domain by default
  • Tax Code (string) (required)
  • Tax Rate (number) - (type float) number of percent. Value should be between 0 and 100 including edges.

Backlog

Ecommerce:
Discount codes

Ability to view list of discount codes and perform create/edit and delete discount code operations.

Design: http://prntscr.com/rbjuge

Columns of the list view:

  • Code
  • Type
  • Amount
  • Release Date
  • Expiry Date
  • Enabled
  • Actions

Create/edit form:

  • Code (string) (required)
  • Description (string).
  • Type (select). options:
    • Fixed Amount (used by default)
    • Percentage of Order
    • Free Shipping
  • Amount (number) - (type float) discount amount. Value may represent an actual amount or percent of order.
  • Currency (select). options
    • use list of currencies that are applied to all domains of the site
  • Min Order Cost Limitation (number) - (type float).
  • Expire after x redemptions (number) - (type int). Validate values to be integer and greater or equal to 0.
  • Catalogs (multi-select). Options:
    • list of ecommerce catalogs module items.
  • Release Date (datetime)
  • Expiry Date (datetime)
  • Enabled (bool) - checked by default

Backlog

Ecommerce:
Gift Vouchers

Ability to view list of Gift Vouchers and perform create/edit and delete Gift Voucher operations.

Design: http://prntscr.com/rbjuz8

Columns of the list view:

  • Name
  • Amount (show values with 3 letter currency code)
  • Balance (show values with 3 letter currency code)
  • Recipient
  • Enabled
  • Actions

Create/edit form:

Details tab:

  • Currency (select) - options:
    • use the same list of countries that used for Domains settings ->"Country"
  • Name (string) (required) - unique value
  • Amount (number) - (type float). (required)
  • Balance (number) - (type float).
  • Type (select). Not selectable. Preselect value by default or based on initial value. Options:
    • Manual (default)
    • Via Shop
  • Enabled (bool) - checked by default

Recipient tab:

  • Name (string) (required)
  • Email (string) (required)
  • Message (string) (required)

Buttons:

  • Email me - sends gift voucher system email to current logged in admin user.
  • Email Recipient - sends gift voucher system email to recipient in the form above.

Backlog

Ecommerce:
Gift Vouchers System Email

Add new system email
Design: http://prntscr.com/rbjvhn

  • Name: Gift Voucher
  • Content: see screenshot

Liquid scope (this):

  • RecipientName - use the data from gift voucher -> recipient record
  • RecipientAddress - use the data from gift voucher -> recipient record (Email)
  • PurchaserName - TBD - this will be the full name from the CRM record that is assigned to the order that contains gift voucher product that creates this gift voucher and triggers the system email. Leave empty if gift voucher was created manually.
  • GiftVoucherCode - use the data from gift voucher -> Details record
  • GiftVoucherAmount - use the data from gift voucher -> Details record
  • GiftVoucherCurrency - object - use currency that is related with the gift voucher country
    • code
    • symbol
    • digitalCode
    • name
  • Message - use the data from gift voucher -> recipient record
  • SiteUrl - protocol and site domain. Use the same logic as in "Secure Zone Login Details"

EXAMPLE:
{

"Message": "test test test",

"SiteUrl": "https://vlad.z.treepl.co",

"GiftVoucher":

{

"Name": "GV431795",

"Amount": 100.00000000,

"Balance": 100.00000000,

"Type": "ViaShop",

"Currency": "$",

"Enabled": true,

"RecipientName": "test@gmail.com",

"RecipientEmail": "test@gmail.com",

"RecipientMessage": "test test",

"CreatedDateTime": "0001-01-01T00:00:00",

"UpdatedDateTime": "0001-01-01T00:00:00"

},

"RecipientName": "test@gmail.com",

"PurchaserName": "test2 test2",

"PurchaserEmail": "test2@gmail.com",

"GiftVoucherAmount": 1100.00000000,

"GiftVoucherCode": "GV431795",

"GiftVoucherCurrency":

{

"Code": "USD",

"Symbol": "$",

"DigitalCode": "840",

"Name": "US Dollar"

}

}

Backlog

Ecommerce:
Shipping options

Ability to view list of Shipping options and perform create/edit and delete Shipping option operations.

Design: http://prntscr.com/rbjxt3

Columns of the list view:

  • Name
  • Price (show values with 3 letter currency code)
  • Currency/Country
  • Actions

Create/edit form:

Details tab:

  • Name (string) (required)
  • Price (number) - (type float). (required)
  • Currency/Country (select) - options:
    • use pairs of country and currency that are retrieved from
      • list of currencies that are applied to all domains of the site
      • list of countries that are applied to all domains of the site
  • Type (select). Options: (required)
    • User Defined (default)
  • Tax Code (select). Options:
    • None (default)
    • list of discount codes for the selected country

Settings tab:

  • Handling Charge (number) - (type float).
  • Additional Per Item Handling Charge (number) - (type float).
  • Weight Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Width Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Height Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Depth Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Order Price Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Show Shipping option to (select) - options:
    • All (default)
    • Consumer
    • Wholesaler
  • Limit Delivery to Following Countries (multi-select)
    • use the same list of all countries
  • Exclude Shipping if Purchasing from these Catalogs (multi-select)
    • future list of catalogs. Leave empty for now.

Backlog

eCommerce:
JS oriented properties

Liquid properties created for all price related objects to correctly output HTML markup to work with JS functionality.

For example, where you might have an output for a products price value such as:
{{this.price}}

Output is just a value:
5.00

But for the shop JS functionality data attributes are required for correct updating of prices, etc. So formatted objects are available, eg:
{{this.priceHtml}}

Output is HTML:

<span data-cms_product_data_price="[[itemId]]">[[ItemPrice]]</span>

Backlog

eCommerce:
JS and functionality

Create js function for ecommerce.js that will

  • collect item quantity
  • collect item attributes selected
  • trigger add to cart flow based on info collected above

Backlog

Shopping cart:
JS and functionality

Create js function for ecommerce.js that will

  • Enter Discount Code
  • Enter Gift Voucher
  • Clear Cart Flow
  • Change shoppingCart Item quantity
  • Choose shipping
  • Change Destination Country
  • Change Tax Code

Backlog

Shopping cart:
System page and default structure

Create new system page

  • Shopping Cart
  • URL: “/shopping_cart”

Default layout - inserts all JS and html code that will provide shopping cart functions

http://prntscr.com/rbk9w0

Backlog

Shopping Cart:
ShippingOptions, TaxCodes and Country/Currency lists

Add new component tags:

{% component type:"countries", collectionVariable:"", layout:"" %}

{% component type:"currencies", collectionVariable:"", layout:"" %}

{% component type:"shipping_options", collectionVariable:"", layout:"" %}

{% component type:"tax_codes", collectionVariable:"", layout:"" %}

  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT described below:

countries:

{

"items":

[

{

"Code": "string",

"DisplayName": "string"

}

]

}

currencies:

{

"items":

[

{

"Code": "string",

"Symbol": "string",

"DigitalCode": "string",

"Name": "string",

}

]

}

shipping_options:

{

"items":

[

{

"Id": "string",

"Name": "string",

"Price": 0,

"TaxPercent": "0",

"TaxPrice": "0",

"TotalPrice": 0,

"CountryCurrency": {

"CurrencyCode": "string",

"CurrencyName": "string",

"CountryDisplayName": "string",

"CountryCode": "string"

}

}

]

}

tax_codes:

{

"items":

[

{

"Id": "string",

"TaxCode": "string",

"CountryCode": "string",

"Amount": 0

}

]

}

Default virtual layout:

countries:

<select>

{% for item in this.items %}

<option value="{{item.Code}}" >{{item.displayName}}</option>

{% endfor %}

</select>

currencies:

<select>

{% for item in this.items %}

<option value="{{item.Code}}" >{{item.Name}} ({{item.Symbol}})</option>

{% endfor %}

</select>

shipping_options:

<select>

{% for item in this.items %}

<option value="{{item.Id}}" >{{item.Name}} ({{item.TotalPrice | domain_money_format }})</option>

{% endfor %}

</select>

tax_codes:

<select>

{% for item in this.items %}

<option value="{{item.Id}}" >{{item.TaxCode}} ({{item.Amount}}%)</option>

{% endfor %}

</select>

Toolbox:

  • eCommerce
    > Checkout Countries Select
    > Checkout Currencies Select
    > Checkout Shipping Options Select
    > Checkout Taxes Select

Backlog

Shopping cart summary widget
Component tag

Add new component tag component type:"shopping_cart":

{% component type:"shopping_cart", collectionVariable:"", layout:"" %}

  • collectionVariable (not required) - works the same way as in other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

‘collectionVariable’ context is an OBJECT described below:

{

"Id": "1907185188476026940",

"totalItemsCount": 1,

"unitsCountHtml": "<span data-cms_cart_units_count=\"1907185188476026940\">1</span>",

"paymentType": null,

"hasGiftVoucherProducts": false,

"formatSetting": {

"name": "En-US USD my",

"culture": "en-US",

"decimalsQuantity": "2",

"currency": {

"code": "USD",

"symbol": "$",

"digitalCode": "840",

"name": "US Dollar"

}

},

"domainCountry": {

"name": "UNITED STATES",

"code": "US"

},

"destinationCountry": {

"name": "UNITED STATES",

"code": "US"

},

"shippingOption": {

"id": "12252410371037462538",

"shippingOptionId": "7361027874612051972",

"name": "Free",

"price": 0.0000,

"taxPercent": 0.0,

"taxPrice": 0.0,

"totalPrice": 0.0000,

"subTotalPrice": 0.0000

},

"discount": {

"id": "16801218532107878403",

"code": "test",

"type": "FixedAmount",

"amount": 5.0000

},

"giftVoucher": {

"id": "7532467322502512643",

"code": "test",

"amount": 20.0000,

"balance": 0.0000

},

"discountPrice": 5.0000,

"subTotalPrice": 33.7700,

"subTotalPriceHtml": "<span data-cms_cart_subtotal=\"1907185188476026940\">$33.77</span>",

"taxCodeId": null,

"taxPercent": 0.0,

"taxPrice": 0.0000,

"taxPriceHtml": "<span data-cms_cart_tax_price=\"1907185188476026940\">$0.00</span>",

"totalPrice": 28.7700,

"totalPriceHtml": "<span data-cms_cart_total=\"1907185188476026940\">$28.77</span>",

"discountPriceHtml": "<span data-cms_cart_discount_price=\"1907185188476026940\">$5.00</span>",

"giftVoucherPriceHtml": "<span data-cms_cart_gift_voucher_price=\"1907185188476026940\">$0.00</span>",

"giftVoucherPrice": 0.0000,

"shippingTotalPriceHtml": "<span data-cms_cart_shipping_price=\"1907185188476026940\">$0.00</span>",

"checkoutButtonHtml": "<button class=\"system_button\" data-cms_cart_checkout=\"\">checkout</button>",

"clearCartHtml": "<button class=\"system_button\" data-cms_cart_clear_card=\"\">Clear cart</button>",

"giftVoucherHtml": "<input type=\"text\" data-cms_cart_gift_voucher=\"\" value=\"test\" />",

"discountCodeHtml": "<input type=\"text\" data-cms_cart_discount_code=\"\" value=\"test\" />",

"items": [

{

"id": "15049017874163171349",

"smallImage": null,

"name": "test prod",

"type": "ModuleItem",

"moduleId": 0,

"SKUCode": "eb8da3f4-2037-42c8-ab84-20d7c85ea224",

"quantity": 1,

"Url": "/catalogs/test-prod",

"price": 33.7700,

"taxPercent": 0.0000,

"unitPrice": 33.7700,

"taxPrice": 0.00000000,

"unitTotalPrice": 33.77000000,

"totalPrice": 33.77000000,

"unitTotalPriceHtml": "<span data-cms_cart_item_total_unit_price=\"15049017874163171349\">$33.77</span>",

"priceHtml": "<span data-cms_cart_item_price=\"15049017874163171349\">$33.77</span>",

"unitPriceHtml": "<span data-cms_cart_item_subtotal_price=\"15049017874163171349\">$33.77</span>",

"taxPriceHtml": "<span data-cms_cart_item_tax=\"15049017874163171349\">$0.00</span>",

"totalHtmlPrice": "<span data-cms_cart_item_total_price=\"15049017874163171349\">$33.77</span>",

"quantityHtml": "<input type=\"number\" value=\"1\" data-cms_cart_item_quantity=\"15049017874163171349\" />",

"removeHtml": "<a target="_blank" href=\"javascript:\" data-cms_cart_remove_order_line=\"15049017874163171349\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" /><path d=\"M0 0h24v24H0z\" fill=\"none\" /></svg></a>",

"attributes": []

}

]

}

Default virtual layout:

<div class="shoppingCartWidget" data-ecommerce_shopping_cart_widget>

{% if this.totalItemsCount > 0 %}

{{this.totalItemsCount}} item(s), Total: {{this.totalPrice | domain_money_format }} <a class="shoppingCartLink" href="/shopping_cart">View Cart</a>

{% else %}

Shopping cart is empty.

{% endif %}

</div>

Toolbox:

  • eCommerce > Shopping Cart

Backlog

Add to Cart:
Component tag

Add new component tag component type:"ecommerce_add_to_cart":

{% component type:"ecommerce_add_to_cart", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required param) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<a target="_blank" href="javascript:" data-ecommerce_add_to_cart_Item="{{this.id}}" class="ecommerceAddToCartItem">{{this.name}}</a>

Toolbox:

  • eCommerce > Add to cart button

Backlog

Buy Now:
Component tag

Add new component tag component type:"ecommerce_buy_now":

{% component type:"ecommerce_buy_now", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required param) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required param) - works the same way as in type: module.
  • layout (not required param) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<a target="_blank" href="javascript:" data-ecommerce_buy_now_Item="{{this.id}}" class="ecommerceBuyNow_Item">{{this.name}}</a>

Toolbox:

  • eCommerce > Buy now button

Button should add item to cart and then redirect user to shopping cart.

Backlog

Item Quantity:
Component tag

Add new component tag component type:"ecommerce_item_quantity":

{% component type:"ecommerce_item_quantity", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required) - works the same way other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<input type="number" data-ecommerce_qunatity_field="{{this.id}}" name="ecommerce_qunatity_field" value="1"/>

Toolbox:

  • eCommerce > Item Quantity Field

Backlog

/cms-assets/payment/ecommerce.js file specification and Linkage rules

File specification:

Create file “/cms-assets/payment/ecommerce.js”

File contains functions that supply:

  • Add to cart flow:
    Update item quantity, attributes, shopping cart widgets after adding to cart successfully
  • Enter Discount Code:
    Update shopping cart view based on applied Discount Code
  • Enter Gift Voucher:
    Update shopping cart view based on applied Gift Voucher
  • Clear Cart Flow:
    Update shopping cart view
  • Change shoppingCart Item quantity:
    Update shopping cart view based on applied item changes
  • Choose shipping:
    Update shopping cart view based on applied shipping option
  • Change Destination Country
  • Change Tax Code:
    Update shopping cart view based on applied tax

Logic should be based on layouts generated by

  • {% component type:"ecommerce_add_to_cart" %}
  • {% component type:"ecommerce_item_quantity" %}
  • {% component type:"item_attributes" %}
  • {% component type:"shopping_cart" %}

Linkage rules:

<script src="/cms-assets/payment/ecommerce.js?v=[[cms_version]]"></script> should be added to head of the page when:

  • shopping cart system page is loaded
  • {% component type:"ecommerce_add_to_cart" %} was parsed at least once

Backlog

Append to ecommerce.js 3 culture params

Pass site culture settings to ecommerce.js for price calculation and JS output.

Pattern:
ecommerce.js?thousands_separator=[[thousands_separator]]&decimals_separator=[[decimals_separator]]&decimals_count=[[decimals_count]]

Fill thousands_separator, decimals_separator and decimals_count based on the culture of the site domain.

Backlog

System page:
Checkout page

Create new system page

  • Checkout
  • URL: “/checkout”


Add Checkout Form to page and apply cms default styles.
Form component:

{% component type:"form", alias:"checkout_form", formType: "checkout" %}

Backlog

Preset Checkout From

Create Checkout From.

Alias checkout_form

Implement base styles for the form in /cms-assets/css/main.css

Backlog

System page:
Checkout thankyou page (Order Receipt)

Add system page

  • Order Receipt
  • URL: “/order-receipt”


Show this page if form with type "checkout" is submitted (instead of form thankyou page).

Provide liquid objects (this.formSubmissionData and this.order) those are required to build the page by design below:
http://prntscr.com/rbkkcf

Backlog

System email:
Supplier Workflow Notification

Add new Supplier Workflow Notification system email

Design - http://prntscr.com/rbkktt

Also add invoice liquid data to the following emails:

  • Any workflow email attached to the form.
    • all order info
  • Form Autoresponder
    • all order info
  • Supplier Workflow Notification
    • only their product info

Backlog

System email & System Workflow:
Low Stock Notification

Add new Low Stock Notification system email
Design - http://prntscr.com/rbkl5i

Add new Low Stock Workflow system workflow (undeletable)

Backlog

System email:
Invoice redo

Redo invoice system email HTML content to match the shopping cart table

http://prntscr.com/rbkojy

Backlog

eCommerce:
Order management

In ‘CRM’ > ‘Orders’ ability to

Backlog

eCommerce:
Search and filtering by price & parent id

Setup Advanced Search and filtering by

  • price
    • Save to index price based on currency/country pair
    • on search or filtering - take currency/country pair by current (or default) domain and combine to search criteria by price
    • Price determined as Numeric field. So in searching you can search price range via use of ‘prop_Price_Min’ and ‘prop_Price_Max’ params.
  • parentId
    • save to index list of parentId's
    • on search - apply search by list of parent id's (similar to search by category when multiple categories applied)

Backlog

Advanced Module Settings:
Related "Module item"

Create setting that will allow module item to have list of related module items

  • Advanced Settings ->Enable related module items (hidden and restricted to change for now. Enabled for Products module only)

If option enabled - view tab on add/edit item page:

http://prntscr.com/rbktkw

Provide ability to

  • choose multiple module items of the same module.

Chosen module items will be determined as RelatedModuleItemsList

Backlog

Advanced Module Settings:
Group "Module item"

Create setting that will allow module item to have list of related module items

  • Advanced Settings ->Enable module items grouping (hidden and restricted to change for now. Enabled for Products module only)

If option enabled - view tab on add/edit item page:

http://prntscr.com/rbkvxk

Provide ability to:

  • choose multiple module items of the same module
  • choose which module item will be the main.
  • reorder module items list

Further details:

Can sort grouped products ordering via drag-and-drop.

Always show main product as first item in list.

On change main product - set it's order position to first.

When trying to add product to group - if it's already added to any other group - show popup:
"This item is already added to another group ("[[name of the main item in the group]]"). Are you sure you want to remove it from that group and add it here?"

When clicking yes:

  • if the product was main in another group - apply main flag to the first ordered item left in the group
  • if the group consist of 2 items - destroy that group since there is no need to exist a group with only one product

Backlog

Module item Pricing tab upgrade

Provide UI upgrade that allows to see what price is edited right now (highlight editing price line).

When choosing another country/currency value - highlight the actual pricing record

Backlog

eCommerce:
{% component type:"related_items" %}

Add new component tag component type:"related_items":

{% component type:"related_items", object:"[[object]]", source:"[[moduleIdentifier]]", itemId:"[[itemId]]", limit:"[[limit]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"" %}

  • source (required) - moduleName or moduleId.
  • itemId (required) - id of the module item that has relations
  • object (not required) - item|collection
    • Default value is collection.
  • limit (not required) - number of items to be rendered
    • Default is ALL.
  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.
  • sortBy (not required):
    • All module item properties
    • Default value is ’Name’.
  • sortOrder (not required):
    • ASC (default)
    • DESC

Single tag item context is the same as for type:"module":

Default virtual layout:

<ul>

{% for item in this.items %}

<li>

<a target="_blank" href="{{item.url}}" title="{{item.name}}">{{item.name}}</a>

</li>

{% endfor %}

</ul>

Backlog

eCommerce:
{% component type:"grouped_items" %}

Add new component tag component type:"grouped_items":

{% component type:"grouped_items", object:"[[object]]", source:"[[moduleIdentifier]]", itemId:"[[itemId]]", collectionVariable:"", layout:"" %}

  • moduleIdentifier (required param) - moduleName or moduleId.
  • itemId (required param) - id of the module item that has relations
  • object (not required param) - item|collection
    • Default value is collection.
  • collectionVariable (not required param) - works the same way as in type: module.
  • layout (not required param) - path to FTP file that will contain layout content that need to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Single tag item context is

  • the same as for type:"module".
  • should have one additional property IsMainGroupItem (boolean) that has value taken from module item grouping tab
  • Module items should be ordered by saved order from product Group Items tab.

Default virtual layout:

<select>
{% for item in this.items %}
<option value="{{item.id}}" {% if this.id = item.id %}selected="selected"{% endif %}>{{item.name}}</option>
{% endfor %}
</select>

Bug

Advanced URL bug fix

I created pages in the root directory but then needed to create 2 sub folders (en-gb & fi). I moved the files into the en-gb folder but they also show in the root directory?

  • Expected
    • Items shown in "moved to" folder only
  • Actual
    • Items shown in "moved to" folder AND in previous folder at the same time

Bug

Edit secure zone

Fixed Internal error bug (http://prntscr.com/r295iq) then changing secure zone type from free to paid and clicking save.

Bug

Delete last product from shopping cart

Now when deleting last product from the shopping cart – the page refresh state to Shopping Cart is empty automatically. No need to manually refresh the page

Bug

Change logic when choose another country on Shopping Cart

When selecting another country the shipping options will no longer disappear (if no country limitation option applied to the particular shipping options).

Bug

Not correct calculated pre-order variations

  1. Create product
  2. Create attributes and generate variations
  3. Set in-stock values (10 for each variation)
  4. Go to product page and buy any product variation
  5. Go back to product variations page

Expected:

  • In-stock 9, Pre-order 0 for bought product variation

Actual

  • In-stock 9, Pre-order 1 for bought product variation

Bug

Secure Zone custom date

Create a Secure Zone with Custom Date http://prntscr.com/r26h9g But applied incorrect date http://prntscr.com/r26hdm

Bug

Add cursor to indicate drag and drop functionality

Add cursor on hover in Catalogs and Products assignment pages. So user can determine that he can drag and drop items http://prntscr.com/qytfem

Bug

Change sorting on Orders list

Change ordering on CRM -> Orders. Last created orders should be shown first (sort by date created DESC).

Bug

Update table in eCommerce

Update Custom Columns so user can select eCommerce related properties
http://prntscr.com/r0keqv

Bug

Change title on Shipping Option

Go to Shipping Option, Click on Add new Shipping Option, Change title http://prntscr.com/qyah0h

Bug

Change shipping option when change quantity

  • Create shipping option
  • Apply min items quantity param (for example 8)
  • Go to Product and add it to the cart
  • Go to shopping cart
  • Change item quantity to be
  • Expected result: shipping option shows right after change quantity event was triggered http://prntscr.com/qyd2qp
    Actual – you need to refresh the page to see that shipping option

Bug

Adding product with different attribute separately to cart

  • Add product with attribute options white, black
  • Go to product and add it to cart with selected white option
  • Click again add to cart but with selected black option
  • Go to cart
  • Expected: two order lines that represent two different variations of the same product http://prntscr.com/qyd4nf
    Actual: one order line that represents the product but with quantity 2

Bug

Tax on shopping cart should change dynamically

Output the tax on the shopping cart http://prntscr.com/qydqbo . It should be changed dynamically when applying new tax (user should not refreshing the page to see the applied taxes) http://prntscr.com/qydqv2

Bug

Generate Inventory

  • Create product
  • Go to the product detail page
  • Add it to cart
  • Go back to admin
  • Create attributes for this product
  • Go to inventory and click generate variations
  • Unexpected error – http://prntscr.com/quzx7q

Bug

In Stock showing when inventory disabled

If Enable inventory checkbox is not checked than In stock:0 should not be shown http://prntscr.com/qvjbxa

Bug

Discount code valued at more than the order total

Order totalPrice should not be less than 0 when applying amount discount that is bigger than totalCost of the order http://prntscr.com/qvjely

Bug

Not saving Catalogs in Discount Code

Catalogs restriction field in discount code not saving. http://prntscr.com/qv4k1k

  • Go to discount code
  • Select catalogs
  • Click save
  • Refresh the page
  • Unexpected result – catalogs not selected for the discount code

Bug

Gift Voucher doesn't work

Bug

Removing Discount codes after applying him

Bug

2 price in product

When product that has several prices is added to the cart – shopping cart shows incorrect price https://prnt.sc/qv4sqs

Bug

CRM Wholesaler

CRM Wholesaler type doesn't change logged in users Liquid 'Type' value, nor does it change product pricing to wholesaler when logged in.

Bug

Canonical links in product

Go to detail Product (product must be in several Catalogs) Open tab SEO and set canonical link http://prntscr.com/quyzkm absent name product AND when you change canonical link - must be preselected information - but now is empty http://prntscr.com/quz19h

Bug

Catalogs Detail Layout

Fix the Catalog detail layout https://prnt.sc/quz56n

Bug

Clear cart

Clearing the cart doesn’t restore instock value of the product.
Expected: once clear cart action triggered – restore in-stock values for all product variations in the cart

Bug

Check 'Price' and 'PriceHtml'

A Product has Liquid values 'Price' and 'PriceHtml', but these appear to be the same (eg: 18.0000). The 'priceHtml' should be the country/currency "formatted price"

Bug

Optimize Speed opening Component Manager

Optimize loading of the Components Manager http://prntscr.com/qs84xx

Bug

Typo in {{this.InStoke}}

It says {{this.InStoke}}. Again a minor thing and {{this.InStockHtml}} will solve this. https://treepl.slack.com/archives/CRUAT8GGZ/p1579791435006900?thread_ts=1579765114.003400&cid=CRUAT8GGZ

Bug

Mistake in spelling

Under Product 'Group Items' there are some typos for the description placeholder: "Description" and "e.q" http://prntscr.com/qs4lr4 and without the dot in the end http://prntscr.com/qs4mgw

Bug

Group Items selection

Go to Product->Group Items You can't choose itself https://prnt.sc/qs4n4f

Bug

UI improvement for Site Information

https://forum.treepl.co/t/ui-improvement-for-site-information/836

Bug

Liquid error

When price is added it breaks the product detail page with this "Liquid Error: Object reference not set to an instance of an object.""

Bug

Error when delete product

It seems that sometimes I am not able to add new products, when I press Save it gives me the classic "You have unsaved changes. Leave the page?" If I press OK I end up on the front page (Analytics)

Bug

Change this.name on detail product

Small thing and since all will change the product detail page it doesn't matter that much. The name of the product is "hardcoded" to be "Product 1". Should be {{this.name}} ?

Bug

Added by member - doesn't show

“Added by” CRM contact not showing on Module Item Detail Page http://prntscr.com/qxdk80

Show more less
New Feature

BONUS: UK Data Center

New data center: UK (London)
More details in our blog post
  • Infrastructure
New Feature

eCommerce

Ecommerce release schedule
  • Products
  • Catalogs
  • Discounts
  • Taxes
  • Shipping
  • Gift vouchers
  • Related products
  • Shopping cart and checkout process

  • Ecommerce
Improvement

Ability To Assign Documents To A Secure Zone

Ability to make documents such as PDFs and Word docs secure by assigning them to a secure zone. And/or the ability to assign a folder and all the documents in it to a secure zone so that no one can access or download the document unless they are logged into the secure zone.

  • Member Area