NevoWeb NB_Store E-Commerce Module

version 02.03.00

Introduction

Welcome to the NB_Store Module.  Please take a few minutes to read this document, which will help you install and configure the module.

The purpose of this documentation is to be a reference explaining the NB_Store features. Although it gives an overview of the store it is NOT a User Guide.


Contents

  1. Basic Install and Setup of NB_Store
    1. Wish List
  2. Settings Administration
    1. Shipping Lists
  3. Template Administration
    1. Template List
    2. Template Replacement Tokens
      1. General Token
      2. lightbox.template tokens
      3. Productlist.template and Productdetail.template Tokens
      4. logintext.text Tokens
      5. Special Templates Tokens
      6. lblEstShipDate.Text Tokens
      7. Using No Stock Image Overlay Tokens
      8. Using Shipping Tracking Code Tokens
      9. Category Menu Tokens
      10. Checkout Address Templates
    3. Setup Custom Javascript
      1. Importing Javascript Templates
    4. Special Authorized User Templates
    5. Token Test Sections
  4. Reports and Dashboard
  5. Shipping Rates
    1. Shipping Formula
  6. Tax Rates
  7. Export/Import
    1. Importing CSV file formats
    2. The NB_Store Feeder
    3. RSS Feeder
  8. Category Administration
  9. Product Administration
    1. Creating Bespoke Product Fields
    2. Downloadable Products
    3. Products Image Resizing
    4. Related Products
  10. Promotions
    1. Coupons
    2. Category Discounts
    3. Cart Discount
  11. Dealers
    1. Setting up a dealer
  12. Stock Administration
  13. Client Administration
  14. Order Administration
  15. Payment Gateways
    1. Cheque
    2. PayPal
    3. SIPS
  16. Lite and Normal Modes
  17. Cart and Checkout
  18. Scheduler
  19. Product List
    1. Search Module
    2. Order By
  20. Host Options
    1. ClearDown Store
    2. Store Validation
    3. Import Settings
  21. Audit Logs


Basic Install and Setup of NB_Store

To install and setup NB_Store you should: This is all you need to do to get a basic store to work. Additional modules NB_Store_MiniCart and NB_Store_OrderHistory can also be setup as you wish.

Wish List

The productlist module is used to display the customer's wish list. If a url parameter of "wishlist" is included in the url, then the productlist will display the customer's wish list. Therefore if you create an extra page in DNN, place on the productlist module, you can then set a link to the customer's wish list like:
<a href="http://www.yourwebsite.com/tabid/57/wishlist/1/Default.aspx">Wish List</a>

Settings Administration

In Store Manager Menu the "Settings Admin" allows you to setup email address, roles, limits, etc.
The "Host Only" restricts access to just the host user.

NameDescription
administrator.email Email address of the store administrator. Error messages will be sent to this email address.
categorymenujs.includes CSV List of javascript files to be included when the category menu module is displayed. Files should be placed in "/DesktopModules/NB_Store/js".
categorymenucss.includes CSV List of css files to be included when the category menu module is displayed. Files should be placed in "/DesktopModules/NB_Store/js".
categorymenustartupjs.includes List of javascript templates that will be registered as startup scripts.
cheque.provider Assembly name of the cheque provider for the store checkout. Usually this will only be updated from the checkout settings.
chqpayment.emailsubject Subject of the email that is sent when a client pays by cheque.
country.list List of countries to be allowed in this portal. (e.g. "France,United Kingdom"). To create bespoke countries for different language create a new country list in DNN called "StoreCountry.(CountryCode)" e.g. StoreCountry.fr-FR
gateway.loadimage File path of the GIF image that is displayed when processing is passed to the bank gateway.
gateway.provider Assembly name of the bank gateway provider for the store checkout. Usually this will only be updated from the checkout settings.
manager.role Name of the store manager role.
managerlite.role Name of the LITE store manager role.
merchant.culture Enter a standard language-locale value for the merchant. e.g. en-US or fr-FR or en-AU.
merchant.email Merchant email address. All orders and reports will be sent to this email address.
ordershipdate.days Estimated number of days when an order will be shipped. The number of days entered here will be added to the current date and placed in the [Order:ShipDate] field, when an order is created.
ordershipped.emailsubject Email subject when a order is shipped.
ordersreport.subject Email subject of the orders report.
ordersreport.xsl File Path of the orders report xsl.
ordervalidated.emailsubject Email subject of the validated order email.
paymentOK.emailsubject Email subject of the order confirmation email.
paymentunverified.emailsubject Email subject of the order confirmation email, when a order cannot be validated automatically.
PayPal.gateway Paypal configuration settings.
product.limit Sets the product limit for the store.
productlite.limit Sets the product limit for the LITE store.
SIPS.exepath Directory path of the SIPS response.exe & request.exe
SIPS.gateway SIPS configuration settings
store.email Email address of the store. All emails will be sent from this address.
image.resize Will resize a product image on upload to the specified size (450px default). If the image is smaller than the value specified the original size is used. If set to "0" resize of image is turned off.
image.quality Sets the quality of the image on resize, default is 85. Valid ranges are 1 - 100.
purgecartmins Number of minutes a cart will stay in the database before it is deleted (Default 10080). The Store Scheduler needs to be setup for this to work.
purgeordermins Number of minutes an uncompleted order will stay in the database before it is deleted (Default 2880). The Store Scheduler needs to be setup for this to work.
gatewayexpiremins Number of minutes to be passed to a gateway provider, that tells the provider to timeout. (The setting is not automatically created in NB_Store.)
lockstockoncart If set to true any products placed into the cart will be taken into account when calculating stock levels, Portal Wide. Effectively this means the stock is not available to purchase by someone else when a product is placed in the basket, By default NB_Store only locks the stock when an order starts processing.
productqty.limit Sets the maximum qty allowed to be entered into the cart for a single product (default 999999). If set to less than 21 a dropdown list will be used for the Qty input.
minimumcarttotal.limit Sets the minimum purchase cost that needs to exist in the cart before a purchase can be made. The template "minimumcarttotal.text" will be displayed if the cost is not reached and the customer goes to the cart. Must be numeric, language specific also. (The setting is not automatically created in NB_Store.)
lightboxgallerytemplate.name The name of the template to use as the lightbox gallery template. if setting does not exist "nyromodalgallery.template" will be used.
lightboxtemplate.name The name of the template to use as the lightbox template. if setting does not exist "nyromodal.template" will be used.
productlistjs.includes CSV list of javascript files to be included when the product list module is displayed. Files should be placed in "/DesktopModules/NB_Store/js".
productlistcss.includes CSV list of css files to be included when the product list module is displayed. Files should be placed in "/DesktopModules/NB_Store/js".
productliststartupjs.includes List of javascript templates that will be registered as startup scripts.
productlinksoncart.flag If set to true products listed on the cart have a link back to the website. By default this flag is set to true. (The setting is not automatically created in NB_Store.)
currency.culture The culture code to be used to display currency in the store. If you enter a formatting code between double quotes NB_Store will use that formatting, e.g. "#0.00". (The setting is not automatically created in NB_Store, the default will be the merchant culture.)
currency.symbol Specify a fallback currency symbol if the currency.culture setting is set to a formatting code. If blank then the fallback will be the merchant culture symbol.
rowdelimeter.importmapping Row delimiter for CSV import. Use html decode to convert any special characters (e.g.: &#09; = horizontal tab; &#13;&#10; = vbCrLf)
fielddelimeter.importmapping Field delimiter for CSV import
fieldqualifier.importmapping Field qualifier for CSV import, defaults to double quote (")
fieldescapedqualifier.importmapping Field escaped qualifier for CSV import, default to 2 double quotes ("")
promo.roles A list of comma separated roles which can be used for discount. These roles must exist in DNN and only the roles lists here will be available in the Promotions role dropdownlist.
shipcountrycode.default Default country code for shipping, if not created then the merchant country code is used. (The setting is not automatically created in NB_Store.) - http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm
debug.mode If debug mode is on, caching in certain areas will not be done. This must be off on a live site for best performance.
debug.email If set then all store emails will be sent to this email address. Ensure this setting is empty for a live site.
cookiecart.expire Numeric to set the number of days the cart cookie will last, default is 30 days. (The setting is not automatically created in NB_Store.)
shipfree.list CSV List of country codes where Free Shipping will be applied, if empty then free shipping will apply to all countries. (e.g. "FR,UK,IT")
searchdescription.flag value of 1 or 0 to indicate if the description field of the product should be included in the search. This will have a performance issue on large sites. If you find your search slow you should set it to 0 and make sure the key words exist in the summary field.
dealer.role Name of the dealer role.
taxexempt.list CSV List of country codes where Tax will NOT be applied, if empty then tax will apply to all countries. (e.g. "FR,UK,IT")
taxapplies.list CSV List of country codes where Tax WILL be applied, if empty then tax will apply to all countries. (e.g. "FR,UK,IT")
filesystemtemplates.flag If set to True and the "debug.mode" setting is also set to true then a directory will be created in the portal which will allow edit of the template through the file system. This option is for development and should not be used on a production system.
admintemplates.groups This is a xml structure of the template admin treeview. In normal operation, this option should not be altered.
adminsettings.groups This is a xml structure of the settings admin treeview. In normal operation, this option should not be altered.
adminproduct.repeatcolumns Back Office repeat column for product list image mode. If not created then the default is 4.
adminproduct.thumbsize Back Office thumbnail size of product list image mode.
adminproduct.pagesize Back Office Page size of product list.
admincss.includes CSS files to be included when the Back Office Skin is displayed.
adminjs.includes Javascript files to be included when the Back Office Skin is displayed.
adminstartup.includes Javascript code to be run when the Back Office page is displayed. This code should exist in the Back Office templates.
textboxedit.flag Use a textbox to edit the templates.
allowzerodealerprice.flag Allow a zero dealer price to be added. If set to false the unit price will be copied to the dealer price, if the dealer price is zero.
404.url Relative url of the 404 error html to be display if a product does not exist. If left blank a 301 redirect is done to the product list.
encapsulated.image File name of the image to be used as the encapsulated image, from the portal root. If blank then the default cheque image is used.
encapsulated.text Text to be used above the encapsulated gateway. If blank then the resx "lblCheque" value is used.
checkout.tab TabID of default checkout page.
store.tab TabID of default Product List page.
categorypurchase.list CSV list of category id's. Only products in these categories will be allowed to be added to the cart. If blank this option is turned off.
diskthumbnails.flag Use Disk thumbnails, if set then NB_Store will create thumbnails on disk and use these to display the product thumbnails.
diskthumbnails.size Disk thumbnail size, The size of thumbnails to create on disk. This can be a single value or CSV list of sizes. e.g. "100,150x30,30". Each product list module that uses the disk thumbs must have an entry in this list to match the thumb size it is trying to display, otherwise no thumbnails will exist for the that size and no image will be displayed.
outofstockmodels.flag If YES then the out of stock models will appear on the product detail radio button and table list.
allowcartmodellimit.flag Allows a cart limit to be added for each model.
createsearchstats.flag Keep statistics on the searches made for products in NB_Store.
searchwordpurge.days Number of Days to keep statistics for searches made for products in NB_Store. Default 60 days.
stockpage.size Number of records to display in the Back Office Stock page. Default 25.
orderedit.flag Allow an order to be edited.
ordereditclient.flag Allow users to edit their order after the order has been placed. Only applies to orders NOT with a status of "Payment OK". To make an order editable the manager must move the order to a status of waiting.
orderedititems.flag Allow Order Items to be changed.
ordereditprice.flag Allow Order Items Prices to be changed.
calccart.provider Calculation provider, will overwrite built-in NB_Store cart row calculations.
calcship.provider Calculation provider, will overwrite built-in NB_Store shipping calculations.
calctax.provider Calculation provider, will overwrite built-in NB_Store tax calculations.
calcdiscount.provider Calculation provider, will overwrite built-in NB_Store discount calculations.
calcextra.provider Calculation provider, allows extra calculations to be included.
tagextra.provider Templating token provider, allows extra data display for product detail and product list. Used by [TAGEXTRA:<ctrldata>]
tokenextra.provider token provider, allows extra data display for token replacements in text and email notification.
event.provider Event provider, allows interface to certain events that occur in NB_Store.
option.provider Option Providers, allows default values for option textboxes in product detail to be assigned externally.
InternalUpdate.provider Internal Update provider allows updates to be done externally when a payment has been made.
feeder.settings Feeder settings. See The NB_Store Feeder.
clientchqemail.name Name of the client email template to be used by the encapsulated payment provider. Default "chqpayment.email".
managerchqemail.name Name of the manager email template to be used by the encapsulated payment provider. Default "chqpayment.email".
rss.template Main template for RSS feeder. Use the token [Product:rssitem] to include the product items in the feed.
rssitem.template Item template for RSS feeder.
singlepurchase.flag Will only ever allow 1 item in the client's cart. If another item is selected then the existing item in the cart is removed.
elapsedorderhours.limit Set the time elapsed hours for an edited order to be payed. If the elapsed time goes over, then the client will not be allowed to pay for the order. If this value is 0 then no time limit to pay for an edited order is set.
datedisplay.format (Optional) Formats dates for emails and display. (e.g. "dd MMM yyyy") default is "d"
purgelogfiles.days Number of days LogFiles will be kept for. Empty value and no Logfiles will be removed
ProductMarkOnDelete.flag If set to YES then when a product is deleted, it is not removed from the Database, only marked as deleted.
encrypt.key Key to use when encrypting and cookie data or other data that needs encrypting. If blank no encryption is done.
Referrertrace.flag Flag to turn on Referrer tracking.
adminorder.pagesize Page size of the Order list in the Back Offcie. Default 25.
shippingcumlative.flag If True the shipping calcuation will add weight, Price and Quantity shipping to create a total shipping cost. If false (Default) the cheapest price between price and quantity with be used unless the weight cost has been calculated, in which case weight cost is used.
shippinglessdiscount.flag If True the discount in the cart will be taken off the cart total to calculate all shipping costs. If false (Default) the discount will not be used to calculate shipping costs.
allowzeroshipping.flag setting to allow zero calculated shipping methods to display
cookiecart.byuser setting to allow users to have different carts on the same PC
cartthumbs.flag settings to show thumbnail on cart list
cartthumb.size size of thumbnail on cart list

Country Lists

The country lists displayed throughout the store have been designed to default to a DNN list called "StoreCountry.(CountryCode)"  if no list by this name exists in the store then the DNN "Country" list is used. Also if you enter a "country.list" in the store settings, only the countries in the "country.list" will be displayed in the dropdown. The names in the "country.list" must match the names in the DNN list used in order to be displayed.


Template Administration

In Store Manager Menu the "Template Admin" option will allow you to setup your store with the text, emails and product formats that you wish.

Template List

TypeNameDescription
.email chqpayment.email Email that will be sent when a client pays by cheque.
.email ordershipped.email Email sent when the Manager of the store clicks the shipped button from the edit order page.
.email ordervalidated.email Email sent when the Manager of the store clicks the validated button from the edit order page.
.email orderreceipt.email Email sent when the Manager of the store clicks the validated button from the edit order page.
.email orderamended.email Email sent when the Manager of the store clicks the Amended button from the edit order page.
.email paymentOK.email Email sent to client when payment has been accepted.
.email paymentunverified.email Email sent to client when payment has been accepted, but PayPal has been unable to verify.
.template lightbox.template Used in productlist and productdetail to display image in lightbox. [TAG:IMAGELIGHTBOX]
.template lightboxgallery.template Used in productlist and productdetail to display image in lightbox. [TAG:GALLERY#]
.template noimage.template Used in productlist and productdetail to display noimage when lightbox token is used but no image exist. [TAG:IMAGELIGHTBOX]
.template noimagegallery.template Used in productlist and productdetail to display noimage when lightbox token is used but no image exist. [TAG:GALLERY#]
.template minicart.template Template to be show in the minicart module.
.template minicartempty.template Template to be show in the minicart module, when cart is empty.
.template order.email.template Template that can be used to display order details in other email templates.
.template receipt.email.template Template that can be used to display receipt details in other email templates.
.template order.text.template Template that can be used to display order details in other text templates.
.template receipt.text.template Template that can be used to display receipt details in other text templates.
.template productdetail.template Template used to display product list.
.template productlist.template Template used to display product detail.
.template nosearchresult.template Template used to display when a product search has no products returned.
.template soldoutimg.template Template used when token [TAG:SOLDOUTIMG] is used in the product list. If the product stock qty = 0 the template will be displayed.
.template productxmldata.template Template to create bespoke fields for product data.
.template fromprice.template This template is displayed using the [TAG:FROMPRICE]. You can use the token [TAG:DEALERPRICE], [TAG:DEALERPRICECURRENCY], [TAG:FROMPRICE], [TAG:FROMPRICECURRENCY],[TAG:BESTPRICE], [TAG:BESTPRICECURRENCY],[TAG:SALEPRICE],[TAG:SALEPRICECURRENCY] within this template to display the from price value. No other tokens are supported.
.template dealerprice.template This template is displayed using the [TAG:DEALERPRICE]. You can use the token [TAG:DEALERPRICE], [TAG:DEALERPRICECURRENCY], [TAG:FROMPRICE], [TAG:FROMPRICECURRENCY],[TAG:BESTPRICE], [TAG:BESTPRICECURRENCY],[TAG:SALEPRICE],[TAG:SALEPRICECURRENCY]   within this template to display the dealer price value. No other tokens are supported.
.template bestprice.template This template is displayed using the [TAG:BESTPRICE]. You can use the token [TAG:DEALERPRICE], [TAG:DEALERPRICECURRENCY], [TAG:FROMPRICE], [TAG:FROMPRICECURRENCY],[TAG:BESTPRICE], [TAG:BESTPRICECURRENCY],[TAG:SALEPRICE],[TAG:SALEPRICECURRENCY] within this template to display the best price value. No other tokens are supported.
.template saleprice.template If this template exists then it is used to replace the [TAG:SALEPRICE] token in the product list and the product details or you can use it with the [TAG:BESTPRICE]. You can use the token [TAG:DEALERPRICE], [TAG:DEALERPRICECURRENCY], [TAG:FROMPRICE], [TAG:FROMPRICECURRENCY],[TAG:BESTPRICE], [TAG:BESTPRICECURRENCY],[TAG:SALEPRICE],[TAG:SALEPRICECURRENCY] within this template to display the sale price value. No other tokens are supported.
.template modeltable.template This template is used to display the table structure used when the [TAG:MODELSTABLE] is used. The token [TAG:TABLEROWS] must be included to make the rows of the table display.
.template modeltablerow.template This template is used to display the rows of the [TAG:MODELSTABLE] token. It is called by using the [TAG:TABLEROWS] token in the 'modeltable.template' template.
.template nowishlist.template Template used to display when wish list has no products.
.template adminproductalt.template Display template for backoffice product select.
.template adminproductitem.template Display template for backoffice product select.
.template checkoutaddress.template This template is used to display checkout address fields. Valid values for databind property: AddressDescription, AddressName, Address1, Address2, City, RegionCode, CountryCode, PostalCode, Phone1, Phone2, PrimaryAddress, CreatedByUser, CreatedDate, OrderID, CompanyName, Extra1, Extra2, Extra3, Extra4.
In addition, or as a full replacement, you can use [OrderUserProfile:XXX] tokens, where XXX is the name of any DNN user profile field e.g. [OrderUserProfile:FirstName]. This includes any custom profile fields you have created. This type of token reads DNN profile fields, but does not all them to be updated via the address collector. Instead, the user should be directed to the default DNN profile page to update their address. The email field is not included in these tokens.
.template stgheader1.template Header for checkout cart page.
.template stgheader2.template Header for checkout address page.
.template stgheader3.template Header for checkout gateway page.
.template stgheader5.template Header for order completed page.
.template goodrelations.template goodrelations template that can be placed at the top of you product detail template to help SEO. Use [Template:goodrelations.template] to place it in your product detail template.
.template stg2form.template Allows a form to be added to the bottom of the stage2 checkout, using same tokens as bespoke products fields to create the form. Data entered into the form can be displayed by using the token [Order:Stg2FormXML] which will use the xsl "Stg2FormXML.xsl" to render the html.
.template stg3form.template Allows a form to be added to the bottom of the stage3 checkout, using same tokens as bespoke products fields to create the form. Data entered into the form can be displayed by using the token [Order:Stg3FormXML] which will use the xsl "Stg3FormXML.xsl" to render the html.
.template ProductPageName.template Template to display product page title. valid tokens are [TAG:PRODUCTREF],[TAG:PRODUCTNAME],[TAG:MANUFACTURER],[TAG:CATEGORYNAME],[TAG:SUMMARY],[TAG:TAGWORDS],[TAG:SEONAME] and [TAG:PORTALNAME].
.template gatewaysep.template Html used to separate multiple payment gateways in the checkout.
.template gateway.template Template to display the payment providers in stage 3 of the checkout, can be turn on by an option in the module settings. Valid tokens are [TAG:PURCHASE],[TAG:GATEWAYRADIO],[TAG:GATEWAY:{gateway ref}],[TAG:DATABIND:{Class field name}] and[TAG:XML:<XSL name>:getorderxml]
.template detailrows.template Template to display the cart and order rows when the [Order:DetailTemplateRows] token is used.  [Detail:*],[Product:*] and [Model:*] token are allowed.
.template editaddress.template Template to display the edit address fields in Admin Order.
.template categorypagename.template Template to display page title for productlist based on category name. [TAG:PORTALNAME] can be used, plus [Category:*] tokens
.text chqpayment.text Text displayed after client has paid by cheque.
.text emptycart.text Text displayed when a client views an empty cart.
.text extradetail.text Message displayed above the extra detail textbox on the checkout.
.text gatewaymsg.text Message displayed above the credit card payments.
.text logintext.text Text displayed when the client goes to the checkout, but has not logged in.
.text orderprint.text Template of order when client or manager requests a printed receipt.
.text orderview.text Template of order when client or manager views order.
.text paymentFAIL.text Text displayed when payment has failed.
.text paymentinprocess.text Text displayed when a client tries to pay for an order already in process.
.text paymentOK.text Text displayed when payment successful.
.text paymentSECURITY.text Text displayed if order doesn't match userid.
.text productlimit.text Text displayed if manager tries to add a new product, when product limit has been reached.
.text specialshipping.text Text displayed if shipping can't be calculated. If you want shipping charge disabled set the shipping free limit to "0".
.text minimumcarttotal.text Text displayed if the minimum purchase price (set by the "minimumcarttotal.limit" setting) has not been reached. Use "[TAG:CARTMINIMUM]","[TAG:CARTTOTAL]" token to display value in message.
.text zeroprice.text Text that will be used in the product list if the price is zero. If this setting is left blank then the 0.00 is displayed.
.text buybutton.text Text to be displayed by the buy button on products. If left blank the resx file text is used.
.text outofstock.text Text to be displayed when product is out of stock. If blank the resource file value is used.
.text outofstockmodelmsg.text Text to be displayed on end of model description if out of stock.
.text receiptprint.text Template of receipt when manager requests a printed receipt. If this template is empty then not receipt print button is displayed.
.text optionseperator.text Text to be used as the option separator for the cart. Default of "/" used if blank.
.text elapsedorder.text Text to be displayed if the order has passed it's elapsed time to pay. If blank, elspased time is disabled.
.tracktemplate *.tracktemplate Template to create shipping tracking code links. e.g. "ups.tracktemplate".
.shiptemplate *.shiptemplate Template to be displayed as the shipping option text if more than one method exists.
.code nyromodellightbox.code JS Code to be added as nyromodal startup script.
.code *.code JS Code to be added as startup script for any javascript, list of values can be specified in the "productliststartupjs.includes" setting.
.ImportMapping categoryCSV.ImportMapping Allows CSV columns to be mapped to XML import structure.
.ImportMapping productCSV.ImportMapping Allows CSV columns to be mapped to XML import structure.
.xsl Stg2FormXML.xsl XSL to display the checkout stage 2 form data
.xsl Stg3FormXML.xsl XSL to display the checkout stage 3 form data

Template Replacement Tokens

General Tokens

[Order:OrderID]
[Order:UserID]
[Order:PortalID]
[Order:OrderNumber]
[Order:ShortOrderNumber]
[Order:OrderDate]
[Order:ShipDate]
[Order:ShippingAddressID]
[Order:BillingAddressID]
[Order:AppliedTax]
[Order:ShippingCost]
[Order:OrderIsPlaced]
[Order:OrderStatusID]
[Order:PayType]
[Order:CalculatedTax]
[Order:NoteMsg]
[Order:NoteMsgHtml]
[Order:VATNumber]
[Order:Discount]
[Order:PromoCode]
[Order:Total]
[Order:BankAuthCode]
[Order:TrackingLink]
[Order:DetailRows]
[Order:DetailTemplateRows]
[Order:ShippingMethod]
[Order:TrackingCode]
[Order:CartTotal]
[Order:Stg2FormXML]
[Order:Stg3FormXML]
[Order:AlreadyPaid]
[Order:OrderGUID]
[Order:GatewayProvider]
[SAddress:AddressID]
[SAddress:PortalID]
[SAddress:UserID]
[SAddress:AddressDescription]
[SAddress:AddressName]
[SAddress:Address1]
[SAddress:Address2]
[SAddress:City]
[SAddress:RegionCode]
[SAddress:CountryCode]
[SAddress:Country]
[SAddress:PostalCode]
[SAddress:Phone1]
[SAddress:Phone2]
[SAddress:PrimaryAddress]
[SAddress:CreatedByUser]
[SAddress:CreatedDate]
[SAddress:OrderID]
[BAddress:AddressID]
[BAddress:PortalID]
[BAddress:UserID]
[BAddress:AddressDescription]
[BAddress:AddressName]
[BAddress:Address1]
[BAddress:Address2]
[BAddress:City]
[BAddress:RegionCode]
[BAddress:CountryCode]
[BAddress:Country]
[BAddress:PostalCode]
[BAddress:Phone1]
[BAddress:Phone2]
[BAddress:PrimaryAddress]
[BAddress:CreatedByUser]
[BAddress:CreatedDate]
[BAddress:OrderID]
[Cart:TaxAmt]
[Cart:TaxAppliedAmt]
[Cart:ShipAmt]
[Cart:DiscountAmt]
[Cart:TotalAmt]
[Cart:OrderTotal]
[Cart:Qty]
[Cart:URL]
[Cart:TabID]

[Detail:OrderDetailID]
[Detail:OrderID]
[Detail:Quantity]
[Detail:UnitCost]
[Detail:ModelID]
[Detail:OptCode]
[Detail:ItemDesc]
[Detail:Discount]
[Detail:Tax]
[Detail:ProductURL]
[Detail:Total]
[Detail:TotalDiscount]
[Detail:FileLink]
[OrderUser:Email]
[OrderUser:username]
[OrderUser:FirstName]
[OrderUser:LastName]
[OrderUser:DisplayName]
[Model:ModelID]
[Model:ProductID]
[Model:ListOrder]
[Model:UnitCost]
[Model:Barcode]
[Model:ModelRef]
[Model:Lang]
[Model:ModelName]
[Model:QtyRemaining]
[Model:QtyTrans]
[Model:QtyTransDate]
[Model:ProductName]
[Model:PortalID]
[Model:Weight]
[Model:Height]
[Model:Length]
[Model:Width]
[Model:Deleted]
[Model:QtyStockSet]
[Model:DealerCost]
[Model:PurchaseCost]
[Model:XMLData]
[Model:Extra]
[Product:ProductID]
[Product:PortalID]
[Product:TaxCategoryID]
[Product:Featured]
[Product:Archived]
[Product:CreatedByUser]
[Product:CreatedDate]
[Product:IsDeleted]
[Product:ProductRef]
[Product:Lang]
[Product:Summary]
[Product:Description]
[Product:Manufacturer]
[Product:ProductName]
[Product:FromPrice]
[Product:SalePrice]
[Product:QtyRemaining]
[Product:QtyStockSet]
[Product:ImageURL]
[Product:ImageDESC]
[Product:ImageID]
[Product:CategoryName]
[Product:XMLData]
[Product:ModifiedDate]
[Product:SEOName]
[Product:TagWords]
[Product:IsHidden]
[Category:CategoryID]
[Category:PortalID]
[Category:Archived]
[Category:Hide]
[Category:CreatedByUser]
[Category:CreatedDate]
[Category:ParentCategoryID]
[Category:ListOrder]
[Category:Lang]
[Category:CategoryName]
[Category:ParentName]
[Category:CategoryDesc]
[Category:Message]
[Category:ProductCount]
[Category:ProductTemplate]
[Category:ListItemTemplate]
[Category:ListAltItemTemplate]
[Category:ImageURL]
[Category:SEOPageTitle]
[Category:SEOName]
[Category:MetaDescription]
[Category:MetaKeywords]
[Currency:Symbol]
[WishList:ItemCount]
[Order:GoogleEcommerceUpdate]
[Order:AmendedLink]

*Note: Model tokens are only used in the 'modeltablerow.template'
*Note: Decimal values (Costs/Prices) will always display in the currency format. To remove the curreny symbol prefix the token key with '#', for example [Order:#Total]
To format as "0.00" prefix the token key with '.', for example [Order:.Total]
To remove decimal place prefix the token key with '=', for example [Order:=Total]

lightbox.template Tokens

[Product:ImageThumb]
[Product:ImageURL]
[Product:ImageDesc]

Productlist.template and Productdetail.template Tokens

[TAG:PRODUCTNAME]
[TAG:PRODUCTREF]
[TAG:SUMMARY]
[TAG:SUMMARYHTML] - Displays summary with the vbCrLf converted to "<br />"
[TAG:DESCRIPTION]
[TAG:IMAGE]
[TAG:MANUFACTURER]
<a href="[TAG:LINK]">Link</a> - create a hyperlink to the product detail page.
<a href="[TAG:LINKSIMPLE]">Link</a> - create a hyperlink to the product detail page without extra parameters.
[TAG:FROMPRICE] - Cheapest price of models attached to the product.
[TAG:FROMPRICETAX] - Cheapest price of models attached to the product with tax applied.
[TAG:FROMPRICECURRENCY] - Cheapest price of models attached to the product formatted as a currency.
[TAG:FROMPRICETAXCURRENCY] - Cheapest price of models attached to the product formatted as a currency with tax applied.
[TAG:TAXPERCENT] - Percentage Tax Applied to product cost.
[TAG:CURRENCYSYMBOL]
[TAG:CURRENCYISOCODE]
[TAG:QTYREMAINING]
[TAG:SALEPRICE] - If there is no sale price then this token displays nothing. It can also be use with the "saleprice.template" template. Currency formatting is NOT applied.
[TAG:SALEPRICECURRENCY] - If there is no sale price then this token displays nothing, it can also be use with the "saleprice.template" template. Currency formatting is applied.
[TAG:PRICESALETAXCURRENCY] - with tax applied.
[TAG:PRICESALE] - without template.
[TAG:PRICESALECURRENCY]  - without template.
[TAG:BESTPRICE] - Displays the "bestprice.template", if empty then this token displays the best price template for FROMPRICE, SALEPRICE or DEALERPRICE.
[TAG:BESTPRICECURRENCY] - Displays the "bestprice.template". If empty then this token displays the best price template for FROMPRICE, SALEPRICE or DEALERPRICE. If no template exists then the Best price is displayed in currency format.
[TAG:PRICEBEST] - without template.
[TAG:PRICEBESTCURRENCY]  - without template.
[TAG:DEALERPRICE] - If the user is a member of the dealer roles, as specified in the "dealer.role" setting, then this token displays the dealer price or "dealerprice.template" template if it exists. If no dealer price exists then the model price is displayed.
[TAG:DEALERPRICECURRENCY] - If the user is a member of the dealer roles, as specified in the "dealer.role" setting then this token displays the dealer price or "dealerprice.template" template if it exists. If no dealer price exists then the model price is displayed in currency format. [TAG:EDITLINK] - Edit button appears if user has rights to edit the product list module.
[TAG:PRICEDEALER] - without template.
[TAG:PRICEDEALERCURRENCY]  - without template.
[TAG:ADDTOBASKET:{properties xml}] - Buy button.
[TAG:MODELS:{properties xml}] - dropdownlist of models, if more than one exists. If not nothing will be displayed.
[TAG:MODELS2:{properties xml}] - dropdownlist of models. If 1 model exist a dropdownlist is still displayed.
[TAG:MODELSRADIO:{properties xml}] - Radio Button list of models if more than one exists. If not nothing will be displayed.
[TAG:MODELSRADIO2:{properties xml}] - Radio Button list of models. If 1 model exist a radio button is still displayed.
[TAG:OPTIONNAME1]
[TAG:OPTION1:{properties xml}]
additional [TAG:OPTION<Number>:{properties xml}] can be added as you wish. The number will match the sort order of options.
[TAG:OPTIONRADIO1:{properties xml}]
additional [TAG:OPTIONRADIO<Number>:{properties xml}] can be added as you wish. The number will match the sort order of options.
[TAG:OPTIONTEXT1:{properties xml}]
additional [TAG:OPTIONTEXT<Number>:{properties xml}] can be added as you wish. The number will match the sort order of options.
[TAG:OPTIONVALRANGE:{properties xml}] - Range validator for options.
[TAG:OPTIONVALREGX:{properties xml}] - Regular Expression validator for options.
[TAG:OPTIONVALREQ:{properties xml}] - validator for options.
[TAG:OPTIONVALSUMMARY:{properties xml}] - validator for options.
[TAG:QTY:{properties xml}] - Product Quantity textbox.
[TAG:IMAGELIGHTBOX] - this tag will be replaced with the "lightbox.template" template.
[TAG:GALLERY1] - this tag will be replaced with the "lightboxgallery.template" template.
additional [TAG:GALLERY<Number>] can be added as you wish.
[TAG:GALLERYURL1] - this tag will be replaced with the image url.
additional [TAG:GALLERY<Number>] can be added as you wish.
[TAG:GALLERYURL1:ThumbSize] - this tag will be replaced with the image url. The ThumbSize is the size of the thumbnail you wish to display, (e.g. 400x100,400) These thumbnails must exist on disk, but using the diskthumbnails.flag and diskthumbnails.size setting options.
additional [TAG:GALLERY<Number>:ThumbSize] can be added as you wish.
[TAG:GALLERYTHUMBURL1] - this tag will be replaced with the image url.
additional [TAG:GALLERYTHUMBURL<Number>] can be added as you wish.
[TAG:GALLERYID1] - this tag will be replaced with the image id. Usually for use with the thumbnail resizer.
additional [TAG:GALLERY<Number>] can be added as you wish.
[TAG:DOC1:{properties xml}] - this tag will be replaced with the download document icon.
additional [TAG:DOC<Number>] can be added as you wish.
[TAG:DOCLINK1:{properties xml}] - this tag will be replaced with the download link.
additional [TAG:DOCLINK<Number>] can be added as you wish.
[TAG:DOCDESC1] - this tag will be replaced with the download document description.
additional [TAG:DOCDESC<Number>] can be added as you wish.
[TAG:DOCPURCHASED1:{properties xml}] - this tag will be replaced with the download document icon.
additional [TAG:DOCPURCHASED<Number>] can be added as you wish.
[TAG:DOCPURCHASEDLINK1:{properties xml}] - this tag will be replaced with the download link.
additional [TAG:DOCPURCHASEDLINK<Number>] can be added as you wish.
[TAG:IMAGEURL]
[TAG:THUMBURL]
[TAG:THUMBSIZE]
[TAG:STOREINSTALLPATH]
[TAG:TRACKINGCODE]
[TAG:SOLDOUTIMG] - If the product stock qty = 0 this token will display the "soldoutimg.template" template.
[TAG:STOCKPERCENT] - Displays the percentage of stock left, based on the Max Stock amount.
[TAG:STOCKPERCENTACTUAL] - Displays the percentage of stock left, based on the Max Stock amount without taking into account stock locked on the cart.
[TAG:STOCKPERCENTINPROCESS] - Display percentage of Stock in cart.
[TAG:STOCKPERCENTSOLD] - Display percentage of Stock Sold.
[TAG:MODELSTABLE] - Displays the models as a table. Used with 'modeltable.template' .
[TAG:TABLEROWS] - token used only in 'modeltable.template' to call the 'modeltablerow.template' .
[TAG:XMLDATA:<xpath>] - xmlpath should always start with "genxml" and be in lowercase. (e.g. "[TAG:XMLDATA:genxml/textbox/txttitle]")
[TAGXML:xslfilename:xmlsource] - token used to run xsl in template. The "xslfilename" can be either a file on you portal root or the name of a template in the backoffice templates. (use debug.mode to get example of xml output into portal root.) The "xmlsource" is optional and can be either nothing, "xmlgetproductsincat","getorderxml" or "getproductxml", the options will render the xml in Export format.
[TAG:ADDTOWISHLIST:{properties xml}] - token to display wishlist add button (e.g. [TAG:ADDTOWISHLIST:<prop text="Add to WishList" />])
[TAG:REMOVEFROMWISHLIST:{properties xml}] - token to display wishlist remove button (e.g. [TAG:REMOVEFROMWISLIST:<prop text="Remove From WishList" />])
[TAG:CATIMAGEURL] - token will be replaced with the category image url.
[TAG:CATNAME] - displays category name. A Default category must be selected in the product list module for this token to work. If "All Categories" are selected as a default, then this token will not display.
[TAG:ADDRELATED] - Token can be used in the adminproductitem.template and adminproductalt.template to add related items.
[TAG:WEBSITEURL]
[TAG:GATEWAYRADIO] - Displays a radio button list of available payment gateways, for use in the "gateway.template". An extra node of "<gatewaymsg>" can be added to the provider xml template. This will be displayed as the radio button text.
[TAG:GATEWAY:{gateway ref}] - used to display the image button returned by the gateway provider stated in the {gatewayref}.
[TAG:PURCHASE:{properties xml}] - Displays the purchase button in the "gateway.template". If Radio Button list for gateway doesn't exist then clicking this button will trigger the encapsulated gateway.
[TAG:DATABIND:{class field name}] - Displays a value from the ProductListInfo class in the productlist module or the OrderInfo class from the "gateway.template".
[TAG:SETTING:{setting name}] - Displays a value from the BackOffice Settings.
[TAG:TEST:{xml test data}] - Create Test Section. See Token Test Sections
[TAG:END] - End test section.
[TAGEXTRA:<ctrldata>] - Special token to allow external data to be displayed in the product detail and list. The "tagextra.provider" setting must be specified for this token to work. The "CtrlData" section can be any data required by the tagextra.provider dll.
[TAG:UPLOAD:{properties xml}] - Add File upload option for a product/model.


{properties xml} = A list of properties that can be linked to the control created. These properties MUST be case sensitive and match to normal asp.Net properties.
E.g.
<prop CssClass="MyCssClass" RepeatColumns="2" RepeatDirection="1" />

Examples:
[TAG:QTY:<prop ErrorMessage="Invalid Quantity"/>]
[TAG:OPTIONRADIO1:<prop CssClass="MyCssClass" RepeatColumns="2" RepeatDirection="1" />]
[TAG:OPTIONTEXT3:<prop CssClass="MyCssClass" Width="50" MaxLength="3" ToolTip="Option3"/>][TAG:OPTIONVALREQ:<prop ErrorMessage="Invalid Option3 must be entered" Text="*" ControlToValidate="OPTIONTEXT3" />][TAG:OPTIONVALRANGE:<prop ErrorMessage="Invalid Option3 Text" Text="*" Type="Integer" MaximumValue="500" MinimumValue="0" ControlToValidate="OPTIONTEXT3" />]

Examnple File Upload Option:

[TAG:OPTIONVALSUMMARY]
[TAG:UPLOAD:<prop Width="400" />][TAG:OPTIONVALREQ:<prop ErrorMessage="No File selected for upload." Text="*" ControlToValidate="fuupload" />]
[TAG:OPTIONVALREGX:<prop ErrorMessage="Invalid File Extension, must be pdf,doc or txt." Text="*" ControlToValidate="fuupload" ValidationExpression="^.+\.(doc|txt|pdf|Doc|Txt|Pdf|DOC|TXT|PDF)$" />]

The "[Detail:FileLink]" token should be used in the "detailrows.template" template to display a download link in the order details.

NOTES:
- The ToolTip property of the textbox is used to display option in the cart
- When using the Textbox uncheck the "Increment Cart:" option in product list settings, otherwise text inputs may be lost when multiple items are added to the cart.
- To ensure formatting of case and {properties XML} is unaffected by editor re-formatting use the edit with Textbox option, in the template editing admin.
- For downloadable item use the [TAG:DOCPURCHASED1] and [TAG:DOCPURCHASEDLINK1] tokens. The links to download will only appear when the user has orders in the their order history on status "Payment OK" or "Closed", if the order is on any other status the link will not be displayed.

logintext.text Tokens

These tokens can be used to replace the javascript call to register, login and also to skip the login for stores that do not require a login to purchase.
[TAG:Register]
[TAG:Login]
[TAG:SkipLogin]

Special Templates Tokens

[Template:<name of template>:<Role>]

<Role> = Name of role that the template is visible to.  If blank or not specified, the template is visible to all roles.

* NB_Store will look for a template that exists by the name and insert it into the calling template. Recursive template calling is supported to a depth of 4 levels.


Report Tokens

[Report:<reportref>]  - These tokens can be used to display reports from the reporting system.

Setting Tokens

[Setting:<settingname>]  - These tokens can be used to display settings from the Back Office Settings.

An Escape of "[[" can be used to display "[" and "]]" for "]"

lblEstShipDate.Text Tokens

This token can be found in the Checkout.ascx.resx file
[TAG:ESTIMATEDDATE]
This resource file entry allows you to put a estimated date of shipping onto the checkout.

Using No Stock Image Overlay Tokens

Ther [TAG:SOLDOUTIMG] can be used to display a image which overlays the product image when a product is out of stock.
Example:-

productlist.template

<div class="ImageHolder">
[TAG:SOLDOUTIMG]
<a title="[TAG:PRODUCTNAME]" href="[TAG:LINK]">
<div class="ThumbNail">[TAG:IMAGE]
</div>
</a>
</div>
[TAG:FROMPRICE] € [TAG:EDITLINK]

soldoutimg.template

<img alt="" class="SoldOut" src="/Desktopmodules/nb_store/img/soldout.png" />

css class needed

.ImageHolder{position: relative;top:0px;left:0px}
.ThumbNail img{position:relative;z-index:0;}
.SoldOut{position:absolute;z-index:2000;}

category message token

[TAG:CATIMAGEURL] - This token can be used only in the category message and will be replaced with the relative category image url.

Using Shipping Tracking Code Tokens

Tracking codes for shipping can be used to create a link to the postal service website.
1. Create a template called "*.tracktemplate" e.g. ups.template

<a href="http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1=[TAG:TRACKINGCODE]&track.x=0&track.y=0" target="_blank" >Tracking Code</a>

2. Link the tracking template to the shipping method. Shipping>Methods menu
3. Use the [Order:TrackingLink] token in the "order.text.template" or "order.email.template" to display the link created.
4. Enter the tracking code into the order by editing the order from the Orders menu.

Use [Order:ShippingMethod] token to display the shipping method selected.

Category Menu Tokens

Category Menu tokens can be used to display the category menu in a html format.

[TAG:CATEGORYNAME],[TAG:PRODUCTCOUNT],[TAG:IMAGEURLTHUMB],[TAG:IMAGEURL],[TAG:IMAGE],[TAG:LINK],[TAG:CATEGORYNAMECSS]

These tokens are used in the categorymenu module settings in the "Accordion Name Template", "Tree Name Template", "Root Name Template" and "Sub Name Template"

If the template starts with an "<a" then the template will be assumed to be the full name and link for the tab. If the template does not start with "<a" then the template will be taken as just the inner html for the tab and the link will be placed around the template.

The [TAG:CATEGORYNAMECSS] token will be replaced with the "{CategoryName}" for each non-selected menu tab or "{CategoryName}sel" for the selected tab. Spaces in the category name will be replaced with "_".

Checkout Address Templates

The checkout billing and shipping addresses can be customized by editing the "checkoutaddress.template". This template uses tokens to create the fields, the field with id "cdoCountry" must have this id, otherwise the country list will not populate the dropdown. Other possible tokens are listed further up this document.

Setup Custom Javascript

Using the token system it is possible to load and configure jQuery javascript to run on your product list / Detail page.

The example below shows how the jQuery Lightbox has been setup, but this method could be altered to use your own version of any jQuery plugin:

Example:
1 - Move your js script into the NB_Store/js folder. (In the case of jquerylightbox, it is installed with NB_Store)

2 - Create "jquerylightbox.template" template.

e.g.

<table height="302" width="302" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff">
  <tbody>
  <tr>
   <td valign="middle" align="center" style="border: 1px solid rgb(216, 208, 187);">
    <a href="[Product:ImageURL]" class="jquerylightbox" rel="GRP1" title="[Product:ImageDesc]">
     <img border="0" src="[Product:ImageThumb]" alt="[Product:ImageDesc]" />
    </a>
   </td>
  </tr>
  </tbody>
</table>

3 - Create "jquerylightboxgallery.template" template.

e.g.

<table height="122" width="122" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff">
  <tbody>
  <tr>
   <td valign="middle" align="center" style="border: 1px solid rgb(216, 208, 187);">
    <a href="[Product:ImageURL]" rel="GRP1" class="jquerylightbox" title="[Product:ImageDesc]">
     <img border="0" src="[Product:ImageThumb]" alt="[Product:ImageDesc]" />
    </a>
   </td>
  </tr>
  </tbody>
</table>

4 - Tell NB_store to load your custom js by creating the "productlistjs.includes" settings. The values in this setting should be a "csv" list of file names that exist in the NB_Store/js directory.

5 - Tell NB_store to load your custom css by creating the "productlistcss.includes" settings. The values in this setting should be a "csv" list of file names that exist in the NB_Store/js directory.

6 - Tell NB_store to load your custom js startup script by creating the "productliststartupjs.includes" settings. The values in this setting should be a "csv" list of file names that exist as templates in NB_Store.

7 - Create any needed js startup scripts in the NB_Store templates menu. (Names have been specified in step 6)

e.g.

jQuery(function() { jQuery('.jquerylightbox').lightBox(); });

or if running DNN4 the jQuery noconflict has been setup so use "j":

<script language='javascript' type='text/javascript'> j(function() { j('.jquerylightbox').lightBox(); }); </script>

8 - Specify the template to be used as the lightbox template in the "lightboxtemplate.name" setting. The name must exist as a template in NB_Store.ate to be used as the lightbox gallery template in the "lightboxgallerytemplate.name" setting. The name must exist as a template in NB_Store.br />

The required JS should now work in the products list module.

For Javascript in the category menu (Treeview) you can set up includes the same using "categorymenujs.includes", "categorymenustartupjs.includes" and "categorymenucss.includes".

Importing Javascript Templates

NB_Store also has some default javascript settings that can be imported. These can be found in /Desktopmodules/NB_Store/templates

"JQueryAccordionMenu_Settings.xml" - javascript settings needed to run the accordion menu.
"JQueryTreeViewMenu_Settings.xml" - javascript settings needed to run the TreeView Menu.
"JQueryMenu_Settings.xml" - javascript settings needed to run the both the accordion and TreeView Menus.
"JQueryLightBox_Settings.xml" - javascript settings needed to run the jQuery Lightbox.
"ManagerMenuDefault.xml" - This file can also be imported and is an import for all default settings.

Import can be done via the "Back Office>Admin>Import Settings" option. Check the overwrite option, select the settings import file your want and click "Import"

To make your own settings templates, export the settings "Back Office>Admin>Export Settings" and edit the exported xml as required.

After changing these settings you may need to restart the DNN application to clear the cache and make sure you pick up the changes. "Back Office>Admin>Restart DNN"

Special Authorized User Templates

If you require a different "productlist" and "productdetail" template to be displayed when a user is logged on then you can create a settings called "usertemplates.flag" and set it to "1".
If this flag is set to true the the store will search the templating system for the template specified in the settings of the productlist module, but with an appendix of "user", if the template exists then the "user" template will be used.

For example:
If we have a productlist template called "myproductlist.template" specified in the productlist module settings and the user is logged in, then the "myproductlist.templateuser" template will be used. if the user is not logged in the normal specified "myproductlist.template" will be used.


Reports and Dashboard

Reports system
A SQL reporting system is now included in the Back Office of NB_Store.  SQL reports can be create and ran from here. Reports can also be scheduled to run on the DNN scheduler, but you must have enabled the "SchedulerReport" class in the DNN Scheduler for this to work.

Only administrators/host can create reports. These SQL reports have no restriction on Update or Insert. Therefore be very careful which SQL reports are enabled as these can affect the database and hence corrupt the NB_Store and DNN database tables.

Referrer Tracking

The tracking of “UriReferrer” data can be activated by setting the “Referrertrace.flag” setting to ON.
In order for external tracking to work correctly, the Referrer link must point to a page on the NB_Store website in which the product list module is visible.
Referrer tracking works by adding the “UriReferrer” data onto the DB cart table, this is then transferred to the order table when an order have been created.
Reporting on the Orders table in the database can help identify where Referrer links are coming from.

Dashboard
The dashboard can now be customized to display reports from the reporting system.
To do this you need to edit the "dashboard.text" setting.  You can use a token value of [Report:<ReportRef>] to display the report. 

* The Dashboard is cached for an hour to stop the reports running each time you enter the backoffice.

Token Test Sections

Creating testable sections in templates.

Sections can be created in template that only display or don't display, based on the state of the data.
A starting tag [TAG:TEST..] and [TAG:END], define the section scope.


---------------------------------------------------------------

Example:


[TAG:TEST:<prop TestType="valueof" TestName="ProductName" TestValue="My Product Name" Action="Show" />]


[TAG:END]
[TAG:TEST:<prop TestType="valueof" TestName="ProductName" TestValue="My Product Name" Action="Show" TestOperator="<>" />]


[TAG:END]
---------------------------------------------------------------

The test parameters are passed as an xml property list of attributes.

TestType = Type of test to do.
TestName = Name of the data to be tested.
FieldXPath = Xpath of bespoke fields created on a product.
TestValue = Value to test for.
Action = The action to be done if true, possible values are "Show" and "Hide".
TestOperator = (Optional, Defalut is "=") The operator for the test, values can be ">", "<", ">=", "<=", "<>", "=". Works only on test types of "valueof", "date" and "stock".

An OR operator of "|" can be added to the TestType, TestName, FieldXPath and TestValue attributes.  If an OR operator is used then all the attributes specified must have the same OR delimiters specified (see examples).

Test types:

valueof

e.g.: [TAG:TEST:<prop TestType="valueof" TestName="ProductName" TestValue="My Product Name" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="valueof" FieldXPath="genxml/textbox/txtname" TestValue="Name" Action="Show" />]

date

e.g.: [TAG:TEST:<prop TestType="date" TestName="CreatedDate" TestValue="Now" Action="Show" TestOperator="<" />]

e.g.: [TAG:TEST:<prop TestType="date" TestName="CreatedDate" TestValue="Today" Action="Show" TestOperator="<" />]

e.g.: [TAG:TEST:<prop TestType="date" TestName="CreatedDate" TestValue="22/6/2011" Action="Show" TestOperator="<" />]

stock

e.g.: [TAG:TEST:<prop TestType="stock" TestName="CartQty" TestValue="0" Action="Show" />]

isinrole

e.g.: [TAG:TEST:<prop TestType="isinrole" TestValue="Dealer" Action="Show" />]

setting

e.g.: [TAG:TEST:<prop TestType="setting" TestName="setting.name" TestValue="0" Action="Show" />]

modulesetting

e.g.: [TAG:TEST:<prop TestType="modulesetting" TestName="chkModThing" TestValue="0" Action="Show" />]

hasModels

e.g.: [TAG:TEST:<prop TestType="hasModels" Action="Show" />]

hasOptions

e.g.: [TAG:TEST:<prop TestType="hasOptions" TestValue="3" Action="Show" />]
e.g.: [TAG:TEST:<prop TestType="hasOptions" Action="Show" />]
The TestValue tests if that number exists using greater than or equal to logic. If not specified the test just checks if any number exists.

hasImages

e.g.: [TAG:TEST:<prop TestType="hasImages" TestValue="3" Action="Show" />]
e.g.: [TAG:TEST:<prop TestType="hasImages" Action="Show" />]
The TestValue tests if that number exists using greater than or equal to logic. If not specified the test just checks if any number exists.


hasDocuments

e.g.: [TAG:TEST:<prop TestType="hasDocuments" TestValue="3" Action="Show" />]
e.g.: [TAG:TEST:<prop TestType="hasDocuments" Action="Show" />]
The TestValue tests if that number exists using greater than or equal to logic. If not specified the test just checks if any number exists.

isinwishlist

e.g.: [TAG:TEST:<prop TestType="isinwishlist" Action="Show" />]

isincategory

e.g.: [TAG:TEST:<prop TestType="isincategory" TestValue="3" Action="Show" />]

isincategoryorsub

e.g.: [TAG:TEST:<prop TestType="isincategoryorsub" TestValue="3" Action="Show" />]

hasrelateditems

e.g.: [TAG:TEST:<prop TestType="hasrelateditems" TestValue="3" Action="Show" />]
e.g.: [TAG:TEST:<prop TestType="hasrelateditems" Action="Show" />]
The TestValue tests if that number exists using greater than or equal to logic. If not specified the test just checks if any number exists.

isProductList

e.g.: [TAG:TEST:<prop TestType="isProductList" Action="Show" />]

isProductDetail

e.g.: [TAG:TEST:<prop TestType="isProductDetail" Action="Show" />]

isOnSale

e.g.: [TAG:TEST:<prop TestType="isOnSale" Action="Show" />]

OR operator

e.g.: [TAG:TEST:<prop TestType="hasDocuments|hasrelateditems" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="hasDocuments|setting" TestName="|setting2.name" TestValue="|1" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="setting|setting" TestName="setting.name|setting2.name" TestValue="0|1" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="valueof|valueof" TestName="ProductRef|ProductName" TestValue="Name|My Product Name" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="valueof|valueof" FieldXPath="root/textbox/txtName|root/textbox/txtName2" TestValue="Name|Name2" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="valueof|valueof" FieldXPath="root/textbox/txtName|" TestName="|ProductName" TestValue="Name|Name2" Action="Show" />]

e.g.: [TAG:TEST:<prop TestType="valueof|setting" TestName="ProductName|setting.name" TestValue="Name|1" Action="Show" />]


Data Fields that can be tested for product.

ProductID , PortalID , TaxCategoryID , Featured , Archived , CreatedByUser , CreatedDate As Date , IsDeleted , ProductRef , Lang , Summary , Description , Manufacturer , ProductName , FromPrice , SalePrice , QtyRemaining , QtyStockSet , ImageURL , ImageDESC , ImageID , CategoryName , XMLData , ModifiedDate As Date , SEOName , TagWords

Data Fields that can be tested for stock test.

Percent, PercentInProgress, PercentSold, PercentActual, CartQty, StockOn

Shipping Rates

The shipping rates that can be set are split into 6 elements, each element is used to calculate the shipping based on the details entered. The actual shipping applied is then calculated using the shipping formula.

Methods

This allows you to create multiple shipping methods that are displayed as shipping options in the cart. The first method in the list is the default shipping.

By Quantity

This allows you to setup shipping based on the quantity of products in the cart.

By Price

Allows shipping costs by price range.

By Weight

Allows shipping costs to be setup by product weight ranges.

Extra per Country

Allows an extra costs to be added based on the shipping country.

Extra per product

Each product can have a special added box cost applied. A Box fill percentage can be specified, so that when a product has only 20% fill rate 1-5 products will only add the box cost once. 6-10 products will add the box cost twice (Box Cost * 2). Boxes are considered the same box if they have the same box cost, so different products can fit into the same box, if the box cost is the same. If a zero box percent is specified then the box sharing is turned off and the box cost will be added for each product. If no box cost is specified then the product will be ignored by box sharing. The box cost is used as an additional cost, on top of the normal shipping, for certain products.

Free shipping limit

Allow you to enter a free shipping limit by price, if this is reached then shipping amount will be zero, regardless of any other settings.

Shipping Formula

Each element in the shipping is calculated, after which the actual shipping if determined by applying a simple formula

  • Calculate cost for Weight, Quantity or Price.
  • Take the lowest cost between price and qty.
  • Take the weight cost if more than price and qty.
  • Add any extra costs for specific products.
  • Add any extra costs for shipping country.
  • Set costs to 0.00 if passed the free shipping limit.

If the shipping amount cannot be calculated then a "-1.00" is returned from the calculation. In the case that a shipping method cannot be calculated it will not appear in the list of available shipping methods.
In the case that NO shipping can be calculated a "-1.00" may appear as the calculated shipping. In these cases you must ensure that a shipping cost can be calculated by the default shipping. If no shipping is to be calculated (shipping included in price) then you must set the default shipping method to have a "Free Limit" of "0.00". (Be careful that if you want to remove a "Free Limit" you use the deleted button - setting it to zero will always return a shipping cost of "0.00")


Tax Rates

The tax rate system can be set in 3 modes:

  • No Tax.
  • Tax included in the unit price.
  • Tax NOT included in Unit Cost.

Tax rates can be entered at 3 levels, Store level (Default), Category Level and product level. The tax rate the applies to each product is calculated in order of Product>Category>Default.

To exempt countries from tax you can create the "taxexempt.list" setting.


Export/Import

The store supports the Export of products, categories, images and orders. And the Import of Products, categories and product images.
For large imports you may need to update the web.config to allow for the execution, in which case you need to change the httpRuntime section to something like this:
<httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="8192" requestLengthDiskThreshold="8192" executionTimeout="6000"/>

Export

  • Products, Categories Tax and Shipping Rates exported in XML format.
  • Order exported in XML format.
  • Images Exported in ZIP format. (Images are place on root of the zip file without any directory structure)
  • Documents Exported in ZIP format. (Documents are place on root of the zip file without any directory structure)

Import

  • Import products as existing products, this will search for a product with a matching product reference. If found it will update this product, if not found it will create a new product.
  • Import products as new products.
  • Create categories for the products. If not selected all imported products will be created in a default "Imported" category.
  • Import Shipping Rates. If selected all current shipping rates will be removed. (Product level shipping weights and costs will be imported with the products)
  • Product images can be imported using a zip file. If the size of the zip file is large, depending on the portal and web.config settings the zip file may not upload.
  • Documents can be imported using a zip file. If the size of the zip file is large, depending on the portal and web.config settings the zip file may not upload.

Importing CSV file formats

You can import a CSV file by using the productCSV.ImportMapping and categoryCSV.ImportMapping templates.


A default Field delimiter of semi-colon is used ";"
A default Row delimiter of carrage return, line feed is used "vbCrLf"

To change these delimiters you can use the "RowDelimeter.ImportMapping" and "FieldDelimeter.ImportMapping" settings.


The example template that are installed with NB_Store, "categoryCSV.ImportMapping" and "productCSV.ImportMapping" refer to a simple CSV import.

The default mapping corresponds to a CSV file format of:

[COL:1];[COL:2];[COL:3];[COL:4];[COL:5];[COL:6];[COL:7];[COL:8];[COL:9];[COL:10]
CategoryName;ProductRef;Manufacturer;ProductName;Summary;XMLData(Custom Product Field);Weight;UnitCost;{Unused};ImageName

The [LANG] token can be used to link the import language, or a column token can be used if multiple Languages are to be imported.
The categoryID is linked to the "CategoryName" column in the productCSV.ImportMapping.

Each Product in the CSV file MUST have a ProductRef, products with a blank ProductRef will not be imported.

TIP: This easiest way to setup a CSV mapping is to create a product in the store with the format you require, export to xml, edit the xml and extract the product section for the "productCSV.importmapping" ( between the <P> nodes) and extract the category section for the "categoryCSV.importmapping" (between the <NB_Store_CategoriesInfo> node).
Then by editing it to place in the [COL:#] tokens in the correct place. (Careful this can get more complex than you may think).

Import of multiple language import:
- Each category name must be different for each language.
- A column must be specified for the Product Lang node. ([LANG] can be used for the other Lang fields)
- Each product must have an entry for each language, the product ref must be the same for each language.

The "replaceCSV.ImportMapping" template setting can be used to replace strings in the CSV file. By default this setting is not created during the NB_Store installation, so you will have to create it in "BackOffice>Utilities>Templates", if you require string replacements.

In should be created in the format:

<root>
<item col="1" str="" rpl="" substr="true"/>
<item col="*" str="" rpl="" substr="true"/>
</root>

col = the column for the replace to be active. if a "*" is used then all columns are active.
str = the string to be searched for.
rpl = the string to be used as the replacement.
substr = if true column with be searched for any substrings, if false the the whole column must match for a replacement to be made.

The NB_Store Feeder

NB_Store has two webservice providers that can be used as Feeders for XML or Text and will return SQL report data.
To activate these feeders you must pass the required params into the url, the feeder will then run a report or function as specified in "feeder.setting".

feeder.setting example
<root>
<item key="clienttest">
<reportref>Client1</reportref>
<password>testpass</password>
<functionkey></functionkey>
<cachemins>60</cachemins>
</item>
</root>

URL required to display this report.
http://www.MyWebsite.com/Desktopmodules/NB_Store/TextProvider.ashx?key=clienttest&pass=testpass

or for the XML version

http://www.MyWebsite.com/Desktopmodules/NB_Store/XMLProvider.ashx?key=clienttest&pass=testpass

NOTE: In order for the XML provider to work correctly the report/function being executed must output XML.

Supported functionkey values
xmlGetProductsInCat : CatID must be included in the url params
xmlGetProduct : ProdID must be included in the url params
xmlGetRSS : CatID must be included in the url params

NOTE: reportref must be empty for the functionkey to take effect.

RSS Feeder

To Setup an RSS feeder you need to add an entry in the "feeder.settings" template.

<root>
<item key="rsstest">
<reportref></reportref>
<password></password>
<functionkey>xmlGetRSS</functionkey>
<cachemins>60</cachemins>
</item>
</root>

The RSS feeder can then be called using a url and catid:
http://www.MyWebsite.com/Desktopmodules/NB_Store/XMLProvider.ashx?key=rsstest&catid=2 By default this will produce a standard basic RSS v2.0 output for products in the category specified. However by using the templates "rss.template" and "rssitem.template", other formats can be created. The productlistinfo class is used as a token replacement for data in the template, plus an extra 2 tokens, "[Product:Link]" to give the product link and "[Product:rssitem]" to the include the products data formated using the "rssitem.template" into the "rss.template".

Category Administration

Categories and sub categories can be maintained from this page. Categories can be setup in multiple languages.


Product Administration

Products in the store have 3 levels of detail:

  • General Product Details
    • Manufacturer
    • Product Name
    • Product Ref
    • Summary
    • Tax Category
    • Multiple Product Categories
    • Description
    • Archived - Remove the product from the store, but do not delete it.
    • Featured - Mark the product to display in the featured product list.
    • Deleted - If a product is deleted but exists in an order the product is marked for deletion when the order is archived from the system.
    • Product Images - Any number of images can be uploaded and linked to a product. Images upload will be resized to web format and to a width set by the "image.resize" setting.
    • Product Documents - Any number of documents can be uploaded and linked to a product. A single document can be linked to any number of products.
    • Related Products - Any number of related products can be linked to a product.
  • Product models
    • Model Ref
    • Name
    • Barcode
    • Weight
    • Unit Cost
    • Stock quantity - If set to "-1" the stock control is turned off.
    • Sort order to be displayed in the dropdown list.
  • Product options
    • Options - Options can be added to a product.
      • Option Value - If only one option value is added to a product option, the option appears as a checkbox.
      • Option cost - The additional cost of the option that will be added to the product.
      • Sort order to display in the options dropdown list.

Products can be copied from the product administration. A copied product will copy all details, models and options. Images will reference the same images as the copied product.

Creating Bespoke Product Fields

NB_Store allows your to define your own additional product fields. This is done by creating a template called "productxmldata.template" and specifying your required fields.

Example:

Step 1: Create a "productxmldata.template".
In the Utilities>templates Menu create a new template called "productxmldata.template" and enter the example code below

TextBox : [<tag id="txtTextBox" type="textbox" width="60" cssclass="normal" maxlength="20" />]
DropDown : [<tag id="dlDropDown" type="dropdownlist" cssclass="normal" data="list1;list2;list3;list4;list5" datavalue="1;2;3;4;5" />]
Checkbox : [<tag id="chkCheckbox" type="checkbox" cssclass="normal" text="Checkbox" />]
Radio : [<tag id="radRadio" type="radiobuttonlist" cssclass="normal" data="list1;list2;list3;list4;list5" datavalue="1;2;3;4;5" RepeatColumns="5" />]
RichText : [<tag id="txtEdit" type="dnntexteditor" height="400" width="600" />]

NOTE: If the "datavalue" attribute is not specified then the "data" attribute is used as the data values.

Step 2: Create Display Template Tokens in your product list or product detail template.

[TAG:XMLDATA:genxml/textbox/txttextbox]
[TAG:XMLDATA:genxml/checkbox/chkcheckbox]
[TAG:XMLDATA:genxml/dropdownlist/dldropdown]
[TAG:XMLDATA:genxml/radiobuttonlist/radradio]
[TAG:XMLDATA:genxml/edt/txtedit]

Example Validation Tokens
[<tag id="rvPrice" ctrltype="rvalidator" errormessage="Error" text="*" controltovalidate="txtPrice" minimumvalue="0" maximumvalue="9999999" type="Currency"/>]
[<tag id="rvReq" ctrltype="rfvalidator" errormessage="Required Field" text="ERR!" controltovalidate="txtReq" />]
[<tag id="valsum" ctrltype="validationsummary" />]

Downloadable Products

NB_Store supports downloadable products.

How it works.

When a client purchases a downloadable product, the model ID is saved in the client's order.
If the template token [TAG:DOCPURCHASED] or [TAG:DOCPURCHASEDLINK<number>] is used in the product detail or list template, NB_Store will check the client's orders for a matching model ID.
If an order exists and has a status of "Payment OK" or "Closed" the document Link will be displayed when the client views the product detail.

NOTES:
- A link for the product details page now exists in the client order email. A message of how to download a product can be added to the "order.text.template" and "order.email.template" templates.
- Downloadable products are only supported at product level. (i.e. Only one model should exist for downloadable products.)
- If using downloadable products the manager should make sure cancelled or unpaid orders are not moved to the closed status, as this will allow the client to download without paying. In these cases the order should be moved to archived directly.

Products Image Resizing

Image resizing can be controlled by using the "image.resize" and "image.quality" settings.
As default image.quality is set to 85, if you wish to have higher quality images it is recommended to use 95. 100% quality images may be to large (kb) for normal web operation.

Image settings for advanced image resizing.
 
Settings "image.advanced" The value of this settings is a list of options in order of "InterpolationMode","SmoothingMode","PixelOffsetMode","CompositingQuality"
example:

7,2,0,0

would give

InterpolationMode = HighQualityBicubic
SmoothingMode =HighQuality
PixelOffsetMode =Default
CompositingQuality =Default

Values of advance setting possible are:

InterpolationMode (NB_Store Default=HighQualityBicubic)
-1 = Invalid ,0 = Default, 1 = Low, 2 = High, 3 = Bilinear, 4 = Bicubic, 5 = NearestNeighbor, 6 = HighQualityBilinear, 7 = HighQualityBicubic
SmoothingMode (NB_Store Default=HighQuality)
-1 = Invalid, 0 = Default, 1 = HighSpeed, 2 = HighQuality, 3 = None, 4 = AntiAlias
PixelOffsetMode (NB_Store Default=Default)
-1 = Invalid, 0 = Default, 1 = HighSpeed, 2 = HighQuality, 3 = None, 4 = Half
CompositingQuality (NB_Store Default=Default)
-1 = Invalid, 0 = Default, 1 = HighSpeed, 2 = HighQuality, 3 = GammaCorrected, 4 = AssumeLinear
NOTE: The Advance settings has a very fine effect on the image. For normal processing use the image.resize and image.quality settings to get the effect you need.

Related Products

Related products can be selected from the product edit page. These products can be then be displayed in the product detail page by using the [TAGXML:<xsl file>] token.

The example included in the default settings is called "relatedproducts.xsl". By placing the tag [TAGXML:relatedproducts.xsl] in the product detail template you will see a list of the related products.


Promotions

Coupons

Coupons can be created to offer discount when a promotional code is entered during the checkout process. The promotional code will only be applied if the cart matches the specified criteria.
Coupons can be setup to work on a percentage of the cart total (not including shipping) or on a set amount. The coupon discount is applied to the cart and is apportioned across all products in the cart evenly.

Category Discounts

Category Discounts are used to apply a discount to a product or group of products.
If a product exists in a category which has a category discount applied and the promotional criteria matches then product will have a sale price. This can be displayed using the [TAG:SALEPRICE] token in the product template. If the "saleprice.template" template exists then the [TAG:SALEPRICE] token will display this template.

For Example:
1 - Create a special category called "Discount 10%" and mark it to be hidden, so it's not displayed on the category menu.
2 - Create a promotion of 10% and apply it to the "Discount 10%" category in the promotion criteria.
3 - Any products assigned to the category "Discount 10%" will have a sale price calculated of 10% less than the original price.

Cart Discounts

These work the same as coupons but don't have the need for a promotional code to be entered in order to apply. If the cart matches the specified criteria for a discount then the cart discount is applied.
Cart Discount can be setup to work on a percentage of the cart total (not including shipping) or on a set amount. The discount is applied to the cart and is apportioned across all products in the cart evenly.

Multiple Discounts

The Allow Multiple Discounts flag will mean that multiple discounts will be accumulated.

If both Cart Level and Coupon Discounts are applied to the cart then:

- when the “Allow Multiple Discounts” flag is set to false
The discount apportioned to each item will be the largest discount between the discounts.

- when the “Allow Multiple Discounts” flag is set to true
The discount apportioned to each item will be the total sum of the discounts.

For some examples for cart discount variations download "Discount_Calculations.pdf" from nbstore.codeplex.com - Downloads>Documents>Discount_Calculations.pdf

WARNING - Discounts applied to carts can get very complex, so try and keep things as simple as possible...Known side effects of complicated cart discounts are exploding heads!

Dealers

A dealer cost can be applied to a model. If the user is a member of the dealer role, as specified by the "dealer.role" setting (i.e. A Dealer.), then the dealer cost is used as the purchase price. If the sale price is less than the dealer cost, then the dealer will receive the sale price.
The difference between the unit cost and dealer cost is dealt with as a discount, therefore when a dealer purchases a product his reduction will be displayed as a discount on the checkout.

Setting up a dealer

- Create a DNN role called "Dealer".
- Add any users that are dealers to this "Dealer" role.
- Create a "dealer.role" setting with a value of "Dealer" (case sensitive)
- Add the dealer cost to the product models.
- In your templates you can add the [TAG:DEALERPRICE] or [TAG:DEALERPRICECURRENCY]
- You can also create a "dealerprice.template" if you wish to format/label the dealer price.

NOTE: If the user is not in the "Dealer" role the tokens [TAG:DEALERPRICE] and [TAG:DEALERPRICECURRENCY] will display nothing.

Stock Administration

Stock levels for a product are entered at model level.  Each model of a product can have a stock quantity entered against it or a "-1" to turn off the stock control for the product.  These stock levels can be edited from the product admin page or the stock / price list page.  When a product reaches 0 stock the product will show a "Out of Stock" message if the user view the product.  Products that exist in the users cart also are taken into account when calculating the stock levels for a product.

Max Stock level - This is the maximum stock for a model, it is used to calculate the percentage of stock left. If the stock is updated to a value greater than the current max then the max field is also updated.


Client Administration

Because in DNN only the Administrator role can a edit user, a simple user maintenance control has been created. With this your can update user email address, reset password, unlock users and view the orders for a client.


Order Administration

You can use the order administration to view or print details of an order and edit any aspect of the order, including changing the order details.
Basic administration of status and shipping date can be done easily without going into edit order mode.

Order Administration also allows you to send emails to help process an order. You can send a validated order email, order shipped email, order receipt email as well as an order amended email.

Once an order has been amended you can use the send order amended email to send an email with a "Amended link" to the client. The "Amended Link" will allow the client to go directly to the checkout and process the new order, allow the payment of the full amount or any additional costs that might have been added.

The "Amended Link" is displayed in the email templates by using the [Order:AmendedLink] token. Or if you want to redirect to a special checkout, created especially for amended orders, you can build the url link yourself in the email and add url param of "codeid=[Order:OrderGUID]". It is this "codeid" param that tells the checkout to re-process an existing order. The OrderGUID is only created when the manager edits an order.

[Order:AmendedLink]

Payment Gateways

The parameters of the gateways can be changed from the Settings menu, these settings are now in XML and it is recommended to upgrade any old text based settings (Which will still work!) into the new XML format. An example of each settings can be found the documentation directory of the NB_Store module.

Cheque

The Cheque gateway provider is created as a integral part of NB_Store. It can be turn off from the checkout settings, but has no other modifiable settings.

PayPal

The parameters of the Paypal gateway can be changed from the Settings menu using the "PayPal.gateway" setting.
The [ORDERID] tag will be replaced by the internal order number.

NOTES:
paymentURL=https://www.sandbox.paypal.com/xclick (change to actual paypal url;  this is the test one, best to use this in order to get it up and running)
verifyURL=https://www.sandbox.paypal.com/cgi-bin/webscr (as above!)
PayPalID=paypal@MyWebsite.com
CartName=TEST
ButtonImageURL=http://localhost/Desktopmodules/NB_Store/img/paypal60x38.gif (http://localhost/ needs to be your website root )
Currency=EUR
ReturnURL=http://www.MyWebsite.com/Cart/tabid/56/stg/5/ordID/[ORDERID]/Default.aspx?PayPalExit=RETURN (this URL needs to be set as your cart page url, with the ?PayPalExit=RETURN added on the end, stg/5 param tels the cart what response to do)
ReturnCancelURL=http://www.MyWebsite.com/Cart/tabid/56/stg/5/ordID/[ORDERID]/Default.aspx?PayPalExit=CANCEL (as above!)
ReturnNotifyURL=http://www.MyWebsite.com/Cart/tabid/56/stg/4/Default.aspx (as above!, but with stg/4.)
MerchantLanguage=fr

SIPS

The parameters of the SIPS gateway can be changed from the Settings menu using the "SIPS.gateway" and "SIPS.exepath" settings.
Tags : [ORDERID]
[ORDERID]
[TRANSID]
[ORDERNUMBER]
[ORDERAMOUNT]
[CUSTOMERID]
[LANGUAGE]
[PROMOCODE]
[CARTID]

NOTES:
For a detailed explanation of the SIPS settings look at the SIPS documentation. The only difference is that the recommended method of implementing the settings in NB_Store is to use a XML format.


Lite and Normal Modes

The Store can be ran in 2 modes:

  • Normal - All functionality of the store is presented to the manager.
  • Lite - The manager has a cut down version of functionality which makes administration easier for clients who don't required the product options, multiple models on a product, shipping and taxes. This is ideal for product catalogs.

Cart and Checkout

The Store Cart and Checkout have been joined to provide a single module.

Process Chart

View Cart --> Enter Address --> View Checkout-- |-->
|
|---
Direct to Bank

--------------
-->

-->
Return to Store

Pay by Cheque
  • View Cart - When a user views their cart they can select a country for shipping, change product quantity and recalculate the cart. This gives them a total cost including shipping, before going to the checkout.  On a recalculate the stock levels are checked and adjusted if required. If the quantity has been set to 0 then the item is removed from the cart.  The shipping is recalculated based on the shipping rates set.
    If the VAT registered field is visible and the user has entered a value that has a different lead country value from the merchant country code, the VAT is removed from the order. (No validation of the validity of the VAT number is done by the store)
    The discount code field is currently not implemented by the store.  This is designed for future needs.
  • Enter Address - The Address form takes the user default address and email from the DNN user profile.  If the user ticks the checkbox(s) to set the entered field as a default address/email the DNN user profile is updated.  When the next button is click the order is created by copying the cart to a new order in the database. The addresses are also saved against the order at this time.  So if the user changes address after placing the order, the address on the order will not change.  During the order creation process the cart is validated against store levels and deleted and archived products. Product quantities are adjusted as required.  This could mean the view of the order is different to the original cart view or even could mean the cart is now empty. 
  • View Checkout - A view of the order and total is displayed to the user along with the prompts to link to the bank or pay by cheque.
  • Direct to Bank - The store is directed to the bank based on the gateway provided selected. (An Email based on the "paymentOK.email" template is sent to the client and also to the email address setup in the "merchant.email" settings, this email is dealt with by the gateway provider in the "AutoResponse" procedure.)
  • Return to Store - The "paymentOK.text" template is displayed to the user. "paymentFAIL.text" if the payment failed.
  • Pay by Cheque Message - The "chqpayment.text" template is displayed to the user.  An Email based on the "chqpayment.email" template is sent to the client and also to the email address setup in the "merchant.email" settings

Status Code

This is a list of default status codes that are created by NB_Store. The Auto column indicates that the order status may automatically be moved to these status codes, therefore these status codes cannot be removed.  The status code Names can be changed via the database or the status.xml setting import file.

Code Name Auto Description
10 Incomplete Y Order has been created in the checkout, but not gone to the bank.
20 Waiting for Bank Y Order has been sent to the bank, but no order notification has been received.
30 Cancelled Y Order Cancelled.
40 Payment OK Y Payment accepted
45 Payment not verified Y Payment accepted, but the store was unable to verify that the payment was actually made.
50 Shipped N Shipped to the client
60 Waiting N Waiting.
70 Closed N Order has been completed and order has been Closed.
75 Archived N Order will be archived and removed from the store on the next store purge.  (BO>Utilities>Export)
80 Waiting for Cheque Y Waiting for Cheque
90 Waiting for Payment N Waiting for payment
100 Waiting for Stock N Waiting for stock.


Scheduler

The store has scheduler jobs that can be activated. By default these jobs are not setup when you install the module.

NEvoWeb.Modules.NB_Store.StoreOrderReport,NEvoweb.DNN.Modules.NB_Store
The purpose of this schedule job is to produce a report every day which is emailed to the store merchant email address.
This report then provides a daily overview of the site orders. Also the fact that the report is sent daily ensures the store email functionaity is working.

Time Lapse: 1 hour*
Retry Frequency: 2 hours

*The functionality of the report saves the last runtime in the store setting, and will only run the report once a day.

The report is produced using XSL the path of the "ordersreport_<Culture>.xsl" which is uploaded into the module directory when it is installed, must be entered in the store settings. This defaults to the module directory, but is modifiable so different portals can have different reports.

NEvoWeb.Modules.NB_Store.CleanUpCarts,NEvoweb.DNN.Modules.NB_Store
This schedule job will delete carts from the database that are older than 7 days and removed uncompleted orders that are older than 24 hours.

SPROC:NEvoweb_NB_Store_Cart_DeleteOldCarts

delete from dbo.[NB_Store_Cart]
where DateCreated < dateadd(day,-7,getdate())

delete from dbo.[NB_Store_Orders]
where OrderDate < dateadd(day,-1,getdate())
and OrderNumber = ''

Time Lapse: 1 day
Retry Frequency: 2 days

NEvoWeb.Modules.NB_Store.CreateSalePrices,NEvoweb.DNN.Modules.NB_Store
The purpose of this schedule job is to recalculated the discount prices for all the products and is only needed if promotional Store Discounts have been setup for the store.


Time Lapse: 1 hour*
Retry Frequency: 2 hours

*The functionality saves the last runtime in the store setting, and will only run the calculation once a day.

NEvoWeb.Modules.NB_Store.SchedulerReport,NEvoweb.DNN.Modules.NB_Store
The purpose of this schedule job is to run any reports that have been scheduled from the reporting system.


Time Lapse: 1 hour*
Retry Frequency: 2 hours

*The functionality to time reports to an hours has been implemented, but this relies on the DNN scheduler and therefore differences in the times when reports run will happen.

NEvoWeb.Modules.NB_Store.StoreStatistics,NEvoweb.DNN.Modules.NB_Store
The purpose of this schedule job is to purge the statics from the NB_Store Database and to Process and statistical calculations that are required.

Time Lapse: 1 hour*
Retry Frequency: 2 hours

*The functionality of the job saves the last runtime in the store setting, and will only run the report once a day.

NOTE: This process is required for the product search word statistics to be purged and the products exists count to be updated.

NEvoWeb.Modules.NB_Store.PurgeStoreFiles,NEvoweb.DNN.Modules.NB_Store
This schedule job will purge unused files and images from all DNN portals that use NB_Store, including running the LogFile purge based on the "purgelogfiles.days" setting.

Time Lapse: 1 day
Retry Frequency: 2 days


Product List

Multiple product lists can be setup on a single portal. This allows for a list showing featured products only, different skins to display product lists or product details and different pages showing different categories. The control of how these modules interact can be done from the settings of each module. The product return tab after purchase can be set to the cart or the tab from which the user selected to view the product (Using the RtnTab query string parameter). The default return tab in the settings is currently overwritten by the query string param, but has been left in for future development.

Search Module

The NB_Store_Search module is a replacement for the DNN Search module. Using this module allows the product list to act as the search results module for the DNN search index. The "nosearchresult.template" template is displayed when no products are found by the search.

Order By

In the product list settings a default order can be selected. Also if a queryString parameter of "orderby" is added the product list sort by the select value, a "desc" parameter can also be added to give a descending order.

  • orderby=man [Order by manufacturer]
  • orderby=ref [Order by product ref]
  • orderby=name [Order by name]
  • orderby=price [Order by price]
  • orderby=cdate [Order by Created Date]
  • desc=1 [Descending]

Host Options

From the Store Manager Menu, a number of options are available if logged on as host.

ClearDown Store

This option clears all products, categories, carts and orders from the store. In order to do this you must enter the host password.

Store Validation

Store validation will run a number of checks on the store to ensure the data integrity. To fix any errors found check the fix errors checkbox. Any errors fixed will be logged in the audit logs.

Product Image Validation - This will check to see if the imagepath in the NB_Store_ProductImage table matches the Server Root MapPath + imageURL.  If it does not and the FIX error has been checked, the imagepath is updated with the Server Root MapPath + imageURL path, if this file doesn't exist the productimage record is removed from the database.
Product Document Validation - This will check to see if the document path in NB_Store_ProductDocs tables matches the Server Root Path, if not the the FIX will change to path to the correct one. If the document doesn't exist it will be removed from the database.
Product Language Validation - This will check to make sure product descriptions and options exist in all languages.  Used if a website has a language added.
Category Language Validation - This will check to make sure category descriptions exist in all languages.  Used if a website has a language added.

Import Settings

Importing settings and templates can now be done through this option. The drop down list shows any xml file in the NB_Store/templates directory. By selecting an import file Template, settings and Status table values can be imported. The format of the import files is exactly the same as the export of the module.

TIPS:
- To upgrade your settings and templates to add any new ones which may appear in later releases of NB_Store, import the "ManagerMenuDefault.xml" with the Overwrite option unchecked.
- To create your own template set export your templates using the module export, edit it as required, and place it in the NB_Store/templates directory.
- To change the language of the order status table edit an exported module file and import it with the changes, unchecking the overwrite option. (Status Names are always imported)

Audit Logs

The Store will automatically create an audit log for changes made to the Settings, Templates, Tax Rates and Shipping Rates.
The audit logs are saved in a folder called LogFiles in the Portal root and contain,
"datetime - usename - controlname - procedurename - xml of object changed".
The SIPS bank gateway will also use this audit log when payments are made.

Template Default files

When NB_Store upgrades versions it uses an xml file called 'ManagerMenuDefault.xml' to import the settings and templates that are required. During import of this file into the settings and templates the overwrite flag is turned off so no current templates are overwritten. If however the entry in the import file has an attribute called 'Overwrite' that is set to true then template or setting is overwritten in the Database.
If there is a file called 'ManagerMenuDefault_<County-Culture>.xml' (e.g. ManagerMenuDefault_fr-fr.xml) this will also be processed in order to update the relative templates per language. This language file will only be processed if it is a new installation of NB_Store. This is to stop current templates on a default level being superseded by a new language template.
These files should be located in the NB_Store\templates folder. If you wish to import the default templates again, this can be done by altering the version setting in the Back Office and in the Back Office>Admin>Settings select the upgrade all portals option (only available when logged in as host/Superuser). Or alternatively by selecting the default file as an import file from the BackOffice>Admin>settings import button.  Selecting the file manually is the only way an upgrade can be made using the language defaults.