DEPRECATION WARNING
This documentation is not using the current rendering mechanism and is probably outdated. The extension maintainer should switch to the new system. Details on how to use the rendering mechanism can be found here.
EXT: Cenoshop¶
Author: | Christopher |
---|---|
Created: | 2010-12-18T19:57:23 |
Changed: | 2012-03-06T20:28:21.780000000 |
Classification: | cenoshop |
Description: | The keywords help with categorizing and tagging of the manuals. You can combine two or more keywords and add additional keywords yourself. Please use at least one keyword from both lists. If your manual is NOT in english, see next tab "language" ---- forEditors (use this for editors / german "Redakteure") forAdmins (use this for Administrators) forDevelopers (use this for Developers) forBeginners (manuals covering TYPO3 basics) forIntermediates (manuals going into more depth) forAdvanced (covering the most advanced TYPO3 topics) see more: http://wiki.typo3.org/doc_template#tags ---- |
Keywords: | forAdmins, forEditors, forIntermediates |
Author: | Viktor Bauer |
Email: | typo3@cenotaphe.net |
Language: | en |
EXT: Cenoshop¶
Extension Key: cenoshop
Language: en
Version: 0.4.3
Keywords: forAdmins, forEditors, forIntermediates
Copyright 2006-2011, Viktor Bauer, <typo3@cenotaphe.net>
This document is published under the Open Content License
available from http://www.opencontent.org/opl.shtml
The content of this document is related to TYPO3
- a GNU/GPL CMS/Framework available from www.typo3.org
Table of Contents¶
`EXT: Cenoshop 1 <#__RefHeading__5708_1738894311>`_
`Introduction 3 <#__RefHeading__20177_299867240>`_
`Configuration 9 <#__RefHeading__951_1261199811>`_
`Implementing the shop 10 <#__RefHeading__10826_393599175>`_
Creating the sysfolder structure 10
tx_cenoshop_pi1 plugin – product viewer 11
tx_cenoshop_pi2 plugin – shopping cart 18
tx_cenoshop_pi3 plugin – checkout page 19
tx_cenoshop_pi4 plugin – order history 20
tx_cenoshop_pi5 plugin – delivery modes 21
`Back End Modules 22 <#__RefHeading__10950_393599175>`_
`Product Data Management and records 36 <#__RefHeading__40095_299867240>`_
`To-do list 42 <#__RefHeading__33636_393599175>`_
`Practices and hints regarding the shop 44 <#__RefHeading__15490_2080043295>`_
Adding a discount manually to an order 44
Managing hand to hand delivery 44
`known issues and fixes, FAQ 45 <#__RefHeading__4559_1644941866>`_
`Change Log 46 <#__RefHeading__959_1261199811>`_
Introduction¶
What does it do?¶
The cenoshop is an extension providing a full commercial platform, including the following functions:
- Product configuration, including bill of materials and options
- Flexible front end display plugins
- Product category management
- Different back end tools, such as theoretical margin analysis, stock coverage calculation
- Price list definitions depending on user groups
- various reporting options
- A full logistics module, calculating stock coverage, replenishment
- Management of supplier orders
- Does not necessarily require the FE user to create an account for ordering
The goal of creating this extension was to create a commercial plug-in for typo3, that would provide far more flexibility and power than a oscommerce or magento.
The approach was really to create series of business/shop orientated plugins and backend modules.
The CMS part is left … well …. to the typo3 cms module, who does his work perfectly ;)
Screen captures¶
Product listing¶
These are just some examples of the possible layouts:
Order Processing¶
This is just an example of one implementation:
Order History¶
Back end modules¶
Back end – Orders¶
Back end – Reporting¶
Requirements ^^^^^^^^^^^^
This extension requires TYPO3 >= 4.5 and php >= 5.2.0.0
It also requires static_info_tables version >= 2.2.0
Also your database must utf-8 encoded
Credits¶
This extension was initialized by Viktor Bauer ( www.cenotaphe.net ) . Please contact me if you have any remark, or need any support, or just want to say that you use this extension.
Contributors:
- Thomas Krueger of atnexxt ( www.atnexxt.de )
- Alexander Frey of W52 ( w52.com )
- Urs Maag ( http://www.teammaag.ch/ )
This extension is respectfully dedicated to:
The bands Austrian Death Machine and Samaël, who accompanied me during its development
Murphy, who brought me to discover typo3 in 2006. Cheers mate !
Configuration¶
Extension configuration¶
These are the following items:
currencyCode¶
Name
currencyCode
Description/usage
Currency Code: The code /label that will appear on all the back end generated documents (invoices, mails, etc). Default value is €.This is needed in for the backend displays. The front end displays are managed by the configuration of the static info tables.
defaultVATValue¶
Name
defaultVATValue
Description/usage
Default VAT Value: Any other value will have to be setup manually for the product or price lists.Default value is set 19.60 (true for france)
mainStoragePage¶
Name
mainStoragePage
Description/usage
Page where the orders records are stored by default
PDMCorePage¶
Name
PDMCorePage
Description/usage
Root page for all Product Data Management items (products, categories, price lists) as well as records.
DeliveryModesCorePage¶
Name
DeliveryModesCorePage
Description/usage
Root page for all Delivery modes information
SuppliersCorePage¶
Name
SuppliersCorePage
Description/usage
Root page for all Supplier relevant (suppliers and supplier orders) information
CheckOutPage¶
Name
CheckOutPage
Description/usage
Main order processing and checkout page: The page where the pi3 extension is displayed
ProductDetailPage¶
Name
ProductDetailPage
Description/usage
Page that allow the display of a single product. Typically hidden in the menus. Will be displayed when the user clicks on the name of a product.
If you use real url, products displayed in this page will take into account the hook developped for realurl.Which means the url will be “http://www.cenotaphe.net/cenoshop/produit/product/351/1-Plaque- magnetique-1mm/” instead of a “http://www.cenotaphe.net/cenoshop/produ it?/tx_cenoshop_pi1[singleproductuidtodisplay]=351&tx_cenoshop_pi1 [singleproductnametodisplay]=Plaque-magnetique-1mm”
ConfimerdUserGroupId¶
Name
ConfimerdUserGroupId
Description/usage
If you use the Front End User Registration plugin (sr_feuser_register), ID of the confirmed usergroup. This is used in the reports.
Implementing the shop¶
Creating the sysfolder structure¶
You will need to create various sysfolder pages at first.
The first sysfolder page is the parent of all sysfolder pages that will be used for the cenoshop. Copy the id of page in the “PDMCorePage” of the extension configuration.
Then you will need a page to store the orders. Copy its id in the “mainStoragePage” of the extension configuraiton.
Another page is needed, for the suppliers and the supplier orders. Copy its id in the “SuppliersCorePage” of the extension configuration.
Then you will need to create some products. In order to create products, go into the list mode of typo3 and add them to page within the “PDMCorePage”, defining the folder structure of the products and other relevant information, setting up the folders that are required in the extension configuration part.
All the products will be stored in sysfolders, where you can categorize them for your own use as you see fit.
This has nothing to do with front end categories, which are actually pages.
You can make a perfect mirror between the back end and front end structures, but they can also be completely different, since they do not have the same audience: Front end is only for the front end users, Back end structure is for the admins/managers of the shop.
Defining the currency¶
Defining the currency is not actually performed in the cenoshop extension itself, but through the configuration of the static_info_tables extension. To do this, you need to go in the constant editor and define the default currency with the adequate code for the static_info_tables extension.
Shop front end structure¶
As stated before, it is only a plugin that displays a series of products. The “categories” view with which you are familiar if you have ever used oscommerce before is outside of this scope: It is basically the page structure of your webshop, that your customers will understand as categories.
Typically, to explain this structure, this is how the page tree of my own shop looks like:
Cenoshop is the root page, which contains links to the subpages, and also two pi1 plugins: one with the list of the 12 latest products, and another one with the 10 current promotions.
“Produit” is a hidden in menu page, and is the one that is used to display a single product. Of course it must contain the pi1 plugin with an adequate configuration, or the product will not be displayed. The ID of this page has ben written in the “ProductDetailPage” of the extension configuration (but you can also override it through typoscript).
The navigation between the different pages is not reached trough the extension, but by using the cms of typo3.
Each usually has a pi1 plugin that will display a certain list of products, whether by single product selection or by all the contents of a sysfolder.
You will also need
tx_cenoshop_pi1 plugin – product viewer¶
This is the main plugin that will allow to display products.
It contains the following options:
Product Selection Tab¶
A few things about the product selection: the plugin will only display products that have a price greater than 0 and that are allowed for the front end user (meaning group privileges, start and end time, and products not hidden).
Categories to display¶
Name
Categories to display
Description/usage
All the system pages from which products will be displated. If empty, all products will be displayed, unless the products to display list is not empty.
Products to display¶
Name
Products to display
Description/usage
Select single products to be displayed. If this box is empty, it will simply not be taken into account. A product that is listed here but is also listed in the categories to display will of course only be displayed once.
Display only promoted products¶
Name
Display only promoted products
Description/usage
If checked, this checkbox will force the plugin to display only promoted products (meaning products that have an associated price list).
Sort order¶
Name
Sort order
Description/usage
Pretty self explanatory
Sort criteria¶
Name
Sort criteria
Description/usage
The criteria by which the sorting will be performed
Number of products to display¶
Name
Number of products to display
Description/usage
Pretty self explanatory
Plugin configuration¶
HTML template to be used¶
Name
HTML template to be used
Description/usage
Html template to be used for the display of the products.
Products per row¶
Name
Products per row
Description/usage
Number of products that will be displayed in each row.
Display product code¶
Name
Display product code
Description/usage
Indicates if the product code should be displayed as a standalone element.
Show when the product was added to the catalogue¶
Name
Show when the product was added to the catalogue
Description/usage
Display the “this product was added to our catalogue on the”
Show display title¶
Name
Show display title
Description/usage
Display the title of the product. By default it is 1, but sometimes we do not want to display the title, just he main image.
Show standalone price¶
Name
Show standalone price
Description/usage
Indicates if the product price should be displayed as a standalone element. It can be usefull when the “display title” is not displayed, since it usually contains the price (see typoscript settings)
Show discount details¶
Name
Show discount details
Description/usage
The discounted price is always displayed in the price and usually in the display price.The discount details allow to see the normal price (through a xxx € instead of yyy€) and also shows the end time if it has been set.
Show Main Image¶
Name
Show Main Image
Description/usage
Whether or not the main image is displayed. Usefull to deactivate when in a pure list mode.
Show secondary images¶
Name
Show secondary images
Description/usage
Show or not the secondary images.
Ignore typoscript for image formatting¶
Name
Ignore typoscript for image formatting
Description/usage
If this box is checked, the typoscript settings for image size will be ignored and the two following fields will be used.
height¶
Name
height
Description/usage
Height of the images. Do not forget to use the “c” or “m” parameters at the end. C stands for crop (meaning it will crop the image to fit the exact dimensions) and m means maximum.
width¶
Name
width
Description/usage
Width of the image.
Description to show¶
Name
Description to show
Description/usage
Description that should be displayed:if short description, it will be rendered as pure text.If the long description is selected, it will be rendered as a classical RTE Element.
Price to Show¶
Name
Price to Show
Description/usage
The price type you wish to display: Whetehr with or without VAT, or both.
In some countries, it can be required in an online shop to display the price with and without VAT at the same time.Of course, for the option both you will need to display the labels (the next checkbox), else it makes no sense.
Display VAT/no VAT label with the price¶
Name
Display VAT/no VAT label with the price
Description/usage
If this checkbox is not checked, the price will appear in this type of format: “€price”If this checkbox is checked, the price will appear in either with “VAT €price” or “without VAT €price”.
Default value is false.
Stock level display¶
Name
Stock level display
Description/usage
Indicates whether you want or not to display the stock level. Possible values are:do not display it, display exact value or display an indicator (indicator still has to be developped)
Stock purchasing policy¶
Name
Stock purchasing policy
Description/usage
What is the purchasing policy regarding out of stock products: Display them and allow purchase, display them and do not allow purchase, or do not display them.
Very important thing about this stock purchasing policy and stock level display: It will display the available stock. The available stock is defined as the physical minus the stock reserved for orders that have been place and not yet picked.
component display mode¶
Name
component display mode
Description/usage
If a product has components, you can choose to: not display them, display only the first image (in which case they are displayed in a line) or display all images (in which case they are displayed one line per component).
Show additional files¶
Name
Show additional files
Description/usage
If additional files are attached to the product, they will be displayed here. The behavior is that when the user clicks on it, they will be opened in pop up.
Linked Products¶
If you wish to display the linked products, you can define it in this tab.
Show Linked Products¶
Name
Show Linked Products
Description/usage
If you want the linked products to be displayed, you need to check this box.
Max number of linked products to display¶
Name
Max number of linked products to display
Description/usage
Maximum Number of linked products that you wish to display
Display Product Name¶
Name
Display Product Name
Description/usage
If checked, this means the product name will be displayed in the linked products
Display Product Price¶
Name
Display Product Price
Description/usage
If checked, this means the product price will be displayed in the linked products
Display Buy Button¶
Name
Display Buy Button
Description/usage
If checked, the buy button will be displayed below the product image
Ignore typoscript for image formatting¶
Name
Ignore typoscript for image formatting
Description/usage
If this box is checked, the typoscript settings for image size will be ignored and the two following fields will be used.
height¶
Name
height
Description/usage
Height of the images. Do not forget to use the “c” or “m” parameters at the end. C stands for crop (meaning it will crop the image to fit the exact dimensions) and m means maximum.
width¶
Name
width
Description/usage
Width of the image.
Typoscript configurations¶
These are the possible typoscript set ups for the cenoshop_pi1 plugin. The whole stdwraps are for the possibility to generate images for the various text items.
templateFile¶
Name
templateFile
Description/usage
Default value is: typo3conf/ext/cenoshop/pi1/product_template.html
displaytitle¶
Name
displaytitle
Description/usage
The display title typoscript setup is used to display a combined label for the product.The default value is ###PRODUCTNAME### : ###DISPLAYPRICE###
displaytitle_sdtWrap¶
Name
displaytitle_sdtWrap
Description/usage
Allows you to completely manage the appearance of the display title.Default value is
.wrap = <B>|</B><BR/>
price_stdWrap¶
Name
price_stdWrap
Description/usage
For the standalone price display.Default value iswrap = |<BR/>
topimage_sdtWrap¶
Name
topimage_sdtWrap
Description/usage
Stdwrap for the main and first image of the product.Default value iscObject = IMAGE
cObject.file.import = uploads/tx_cenoshop/
cObject.file.import.field = topimage
cObject.file.width = 200m
cObject.file.height = 200m
wrap = |<br>
Notice that the field 'topimage' does not exist in the TCA or database structure. It is created on the fly during the execution of the pi1 plugin.
images_sdtWrap¶
Name
images_sdtWrap
Description/usage
Same principle as the topimage_stdWrap. Only difference is in the widht and height.A field 'singleimage' is generated on the fly in cObj structure and can hence be used in the typoscript.
componentImages_stdWrap¶
Name
componentImages_stdWrap
Description/usage
Same principle as the topimage_stdWrap. Only difference is in the widht and height, and that there is no wrap. Also these settings are applied to all component images.A field 'componentimage' is generated on the fly in cObj structure and can hence be used in the typoscript.
discount_stdWrap¶
Name
discount_stdWrap
Description/usage
For the discount information, the one that says xxx € insteand of yyy €.wrap = <b>|</b><br/>
discountdetails_stdWrap¶
Name
discountdetails_stdWrap
Description/usage
For the discount information, the one that gives potential end date information..wrap = <b>|</b><br/>
additionalFilesTitle_stdWrap¶
Name
additionalFilesTitle_stdWrap
Description/usage
This is the wrap around the title for the additional files..wrap = <b>|:</b><br/>
SingleProductDisplayPage¶
Name
SingleProductDisplayPage
Description/usage
This indicates the page in which single products will be displayed. Set to the pid of the page you wish to use. Default value is 'default', in this case the page id in the extension configuration will be used (value of the parameter “ProductDetailPage”)
linked_productname_stdWrap¶
Name
linked_productname_stdWrap
Description/usage
Stdwrap for the titles of the linked product.
Default value is
wrap = <b>|:</b>
linked_images_stdWrap¶
Name
linked_images_stdWrap
Description/usage
Same principle as the topimage_stdWrap. Only difference is in the widht and height, and that there is no wrap. Also these settings are applied to the first image of the linked product.A field 'linkedimage' is generated on the fly in cObj structure and can hence be used in the typoscript.Default value is
cObject = IMAGE
cObject.file.import = uploads/tx_cenoshop/
cObject.file.import.field = linkedimage
cObject.file.width = 200m
cObject.file.height = 80m
linked_products_stdWrap¶
Name
linked_products_stdWrap
Description/usage
This is the wrap around the title for the linked products..wrap = <br/><b>|:</b><br/>
Typoscript best practices¶
There are typically a few typoscript set ups that are usually performed.
The first one is regarding the setup of a lightbox for the display of the products.
Product names as images
You can achieve this very easily using the swiss knife of typo3, hereby I mean the .stdwrap.
This is what I used for example:
plugin.tx_cenoshop_pi1.displaytitle_stdWrap {
cObject = IMAGE
cObject.file = GIFBUILDER
cObject.file {
XY = [10.w]+10,20
5 =
10 = TEXT
10.text.field = displaytitle
10.fontFile = fileadmin/templates/boutique/sansc.ttf
10.fontColor = #000000
10.fontSize = 18
10.offset = 0,16
10.align = left
transparentBackground = 1
10.text.csConv = windows-1252
}
}
It created this kind of display:
Perfect Light Box
I personnally recommend the “perfectlightbox” extension.For this one, I made the following adjustements in my main shop template:
plugin.tx_cenoshop_pi1.topimage_sdtWrap.typolink {
title.field = displayname
parameter.cObject = IMG_RESOURCE
parameter.cObject.file.import = uploads/tx_cenoshop/
parameter.cObject.file.import.field = topimage
parameter.cObject.file.maxW = 600
parameter.cObject.file.maxH = 600
ATagParams.field = productcode
ATagParams.wrap= rel="lightbox[|]"
}
plugin.tx_cenoshop_pi1.images_sdtWrap.typolink {
title.field = displayname
parameter.cObject = IMG_RESOURCE
parameter.cObject.file.import = uploads/tx_cenoshop/
parameter.cObject.file.import.field = singleimage
parameter.cObject.file.maxW = 600
parameter.cObject.file.maxH = 600
ATagParams.field = productcode
ATagParams.wrap= rel="lightbox[|]"
}
plugin.tx_cenoshop_pi1.componentImages_stdWrap.typolink {
title.field = displayname
parameter.cObject = IMG_RESOURCE
parameter.cObject.file.import = uploads/tx_cenoshop/
parameter.cObject.file.import.field = componentImage
parameter.cObject.file.maxW = 600
parameter.cObject.file.maxH = 600
ATagParams.field = productcode
ATagParams.wrap= rel="lightbox[|]"
}
Face Book integration
It can be very interesting to be able to create as many pages as you have products for promoting them on facebook.
This can be (easily) achieved using typoscript an an html content element.
As you probably now, facebook renders the information of the like buttons using the opengraph protocol. So we need to manipulate the headers of the page in order to display the opengraph info using the product information of the single product displayed in the ProductDetailPage defined in the extension configuration.
Below is my commented typoscript example
##retrieve uid of the product to be displayed
temp.gpvar = TEXT
temp.gpvar.data = GPvar:tx_cenoshop_pi1|singleproductuidtodisplay
temp.gpvar.insertData = 1
##retrieve record of the displayed product with various information
temp.productname = RECORDS
temp.productname {
source < temp.gpvar
tables = tx_cenoshop_product
conf.tx_cenoshop_product >
conf.tx_cenoshop_product = TEXT
conf.tx_cenoshop_product.field = displayname
}
## product image
temp.productimage < temp.productname
temp.productimage {
conf.tx_cenoshop_product >
conf.tx_cenoshop_product = TEXT
conf.tx_cenoshop_product.field = images
##this next line is necessary if you have multiple images in order to display only the first name
conf.tx_cenoshop_product.listNum = 0
}
## product description
temp.productdescription < temp.productname
temp.productdescription {
conf.tx_cenoshop_product >
conf.tx_cenoshop_product = TEXT
conf.tx_cenoshop_product.field = description_short
}
### Change page title - first disable the pagetitle generation and then write your own header
config.noPageTitle = 2
page.headerData.5 = COA
page.headerData.5 {
wrap=<title>Cenoshop:|</title>
5 < temp.productname
}
### ADD OPENGRAPHICS HEADER DATA
page.headerData.120 = COA
page.headerData.120.wrap = <meta property="og:title" content="Cenoshop:|"/>
page.headerData.120.5 < temp.productname
page.headerData.130 = TEXT
page.headerData.130.value = <meta property="og:type" content="product"/>
page.headerData.140 = TEXT
page.headerData.140.data = getIndpEnv:TYPO3_REQUEST_URL
page.headerData.140.wrap = <meta property="og:url" content="|"/>
page.headerData.150 = COA
page.headerData.150.5 < temp.productimage
page.headerData.150.wrap = <meta property="og:image" content="http://www.cenotaphe.net/uploads/tx_cenoshop/|"/>
page.headerData.160 = TEXT
page.headerData.160.value = <meta property="og:site_name" content="cenoshop"/>
page.headerData.170 = COA
page.headerData.170.5 < temp.productdescription
page.headerData.170.wrap = <meta property="og:description" content="|"/>
Then you just need to add a simple html content element with the facebook generated code for the like button, that you can find here : http://developers.facebook.com/docs/reference/plugins/like/
The result, as displayed in Facebook, is the following:
tx_cenoshop_pi2 plugin – shopping cart ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This plugin is basically the small shopping cart plugin.
It is intended to be integrated in all pages, through typoscript.To add to all pages, you just need the following typoscript:
Wheretoadd < plugin.tx_cenoshop_pi2.
Typoscript configurations¶
templateFile¶
Name
templateFile
Description/usage
Indicates the path to the template file to be used.
Default value is “typo3conf/ext/cenoshop/pi2/shopping_cart_template.html”
Displaymode¶
Name
Displaymode
Description/usage
If equals “complete”, will display the list of products in addition to the total.For any other value, will only display the summary. (total number of items and amount)Default value is “complete”
tx_cenoshop_pi3 plugin – checkout page¶
This plugin is the main cart view and check out plugin.
It is used as the main intelligent processing part of the shop, even for configuration of payment modes , mail templates and so on. Since plugin can be restricted to some user groups, you can hence easily define different payment modes depending on the customer groups.
Payment modes¶
The payment modes were added to the plugin. At first, I wanted to put them as database records, but each of them has potentially many specific requirements in terms of code (for example paypal).Hence it seemed utopic not to “hardcode” them.
Enable Paypal payment¶
Name
Enable Paypal payment
Description/usage
If you check this box, paypal payment will be enabled. Additional fields will appear in the flexform to allow you to enter your paypal account as well as the paypal confirmation page (for when the paypal IPN interface will be done). Also the currency code to be used appears here, since you can potentially use another label in your shop, non related to the paypal valid currency codes.
Enable Wire transfer Payment¶
Name
Enable Wire transfer Payment
Description/usage
Same as for paypal, except for wire transfer.
Enable check payment¶
Name
Enable check payment
Description/usage
Same as paypal, except for check payments.
Plugin configuration¶
HTML template to be used¶
Name
HTML template to be used
Description/usage
Template for the shopping cart to be used.
HTML template to be used for the invoice¶
Name
HTML template to be used for the invoice
Description/usage
Template to be used for the invoice. This one is pretty important, and this is the one you definitely should personalize.It will be used afterwards in the backend to print the invoice.
HTML template to be used for all mails¶
Name
HTML template to be used for all mails
Description/usage
Same as for the invoice. It will also be used afterwards in the backend.
Bcc mails¶
Name
Bcc mails
Description/usage
When order is placed, these are the possible bcc mails that will also receive the confirmation mail. Separate each address with a comma.
Sender mail¶
Name
Sender mail
Description/usage
Email address that will be the sender of the mail.
Reply address¶
Name
Reply address
Description/usage
Reply to address of the mail.
Typoscript configurations¶
Actually, a typoscript configuration can be set up for the static_info_tables country selector.
Ideally, you want to add this code:
javascript:var input = document.createElement('input');input.setAttribute('type', 'hidden');input.setAttribute('name', 'tx_cenoshop_pi3[submit_enterdata]');input.setAttribute('id','');input.setAttribute('value', '');document.getElementById('tx_cenoshop_pi3_form').appendChild(input);this.form.submit();
to the Onchange attribute of the static info tables constant.
This will reload the checkout page when the user selects a different country.
Checkout process¶
Once the customer goes to the shopping cart, he will follow this process until complete validation of the order.
First he will see the summary of the order, with no shipping costs defined yet. In this screen he will select his country. The country is necessary to define the eligible shipping methods.
The next step will be to enter the payment and delivery data.
If the customer is logged in, the data for address, name, email will be copied automatically from his user data.
At this moment the user will be prompted to select a payment mode and a delivery mode. The payment modes are the ones you will have selected in the pi3 flexform, and the shipping modes will be retrieved from the database using the adequate criteria that you might have defined (free shipping costs over a certain amount, weight rules, etc).
The last step is the confirmation of the order. Now we have everything we need to complete the order, but the customer (it is a legal constraint in some countries) must have a summary of all the data and validate it.
Once the customer has confirmed the order, he is taken to a confirmation screen, and the mail with the order confirmation will have been sent.
In this case, since the customer choose the paypal method, a button allowing for the paypal payment is available.
Now the order has been completed and will be listed in the backend module.
tx_cenoshop_pi4 plugin – order history¶
This plugin allows a front end user to see his past orders.
Its contents will only be displayed if there is a logged FE user. Else it makes no sense.
If an invoice has been generated for the order, the user will be able to see it.
Plugin configurations¶
templateFile¶
Name
templateFile
Description/usage
Indicates the HTML template to be used.
Typoscript configurations¶
Simple. None.
Back End Modules¶
The back end module is where most of the intelligence of this application relies.
It will implement a new main module and some submodules in the Back end of typo3.
The orders module serves the purpose of managing orders through a standardized workflow.
In the logistics module, you will see an overall view of the products in terms of stock movements, coverage. It will also allow you to define the weekly consumption, calculate replenishment proposals, etc.
The pricing module allows you to see the details of the implemented price lists per user group, and to mass create new ones.
The reports will display financial reports, referer reports, etc.
The suppliers module will allow to manage suppliers and associated supplier orders.
Orders Module¶
This module is intended to manage the current workflow of orders.Basically, an order follows a typical workflow:
Order is placed, then the products are picked from stock, then the order is shipped.
This Module has the following aspect:
Columns¶
The columns indicate the following:
Contact is the name of the customer and the order date.
By hovering on the left name of the customer and the order date, you will see the history of the associated order.
History items are the following, for which you will see what, who and when:
- Order Payed
- Order Shipped
- Reminder mail sent
- Payment notification mail sent
- Shipping notification mail sent
- Order Confirmation mail sent
- Stock picking processed
Invoicing indicates the invoicing status of the order and the payment means. You will also have a button “view invoice”, which allows you to view either an on the fly generated invoice or the saved invoice file if there is one. If there is none, a “generate invoice file” button will also appear. If you click on this button, an html invoice will be saved in the “uploads” directory of this extension. This file will be available to the customer in the pi4 plugin.
Processing indicates the processing status of the order and the delivery mode.
Information gives information about the product value of the order and the global value including shipping
Comment are both the internal comments and comments of the customer. They are truncated, and by hovering on them you can see them completely.
Picking indicates the items to pick and whether they were picked or not (if already picked, the process stock button does not appear).
Actions show what kind of mail related actions you can perform. The following business rules are applied:
- You can send payment notice mails only if the order was payed
- You can send reminder mails only if the payment was not done
- You can send shipping notices only if the shipping was done
- You can always send the confirmation mail again
If the mail was already sent, the corresponding action button will be between parenthesis to indicate it has already been sent, except for the confirmation mail which of course has already been sent.
The screen itself is composed of different tabs.
It is composed of different tabs:
To be payed¶
This contains all the orders for which you are expecting a payment.
Once you receive the payment (whether through paypal, check or wire transfer or any other means), you can enter a payment reference and click on payed. The status of the order will be set to payed and he will disappear from this tab to appear in the 'To be picked tab'.
The following will happen if you set the order to payed: The html invoice will be generated and stored in the “uploads” folder of the extension. This invoice will also be the one that will be seen by the customer in the pi4 plugin.
To be picked¶
These are the orders that have been payed but not yet picked from your stock.
On the rightmost part of the screen, you will see the list of products to pick. Typically, you will print the invoice using the “view invoice” button and go through your physical stock to pick the stuff and prepare the parcel.
If the product to be picked is a composed product, and you do not have any in stock, the form will propose you to build the product if it is possible, and then offer you to pick the built product from stock.
Once the stock has been processed, it means the order is ready to be shipped.It will hence disappear from this tab and appear in the to be shipped tab.
Of course products with a replenishment mode of “non physical products” will not create any stock movements and will not hinder you to perform the stock picking.
To be shipped¶
Once your parcels are ready, you will usually transfer them to a postal office or whatever transporter you use.Once this is done, you can enter the delivery reference (useful if the transporter has a tracking website) and then click on the “shipped” button. The order having fulfilled its standard workflow will hence disappear from all these lists.
Delivered, to be payed¶
With some professional partners, like shops or distributors, it is common to first ship the goods and then receive the payment.
This tab allows to monitor all orders that have been shipped but not yet payed.
Search orders¶
This tab will allow you to search for any past order: it will use all text fields to search the data you entered.
Cart Orders¶
This tab shows only the “orders” that have not yet been transformed into actual orders.
Generic information¶
For all orders, the first row shows the customer name and order date. By clicking on it, you will access the full order record, that will allow you to do … well almost whatever you want.
There are some additional functions:
Once an order has been set to payed or shipped, a button will appear on top of the list that will allow you to send a confirmation mail for this order.
These buttons are always available if the adequate status has been reached, meaning you can resend them as many times as you want. The mail template that is used is the one defined in the pi3 plugin that was used to confirm the order.
Logistics Module¶
The logistics module will allow you to update stock levels, monitor consumptions of your items, and calculate replenishments for your items.
The various functions are accessible through the drop down listbox on the upper right side of the screen.
The treeview of the product pages is used here to display only the information of the products of the current page and its subpages.
Products - All Products¶
This gives you a view of all products. Each field is editable by clicking on it.
Inventory - View stock coverage¶
This screen allows you to see the stock coverage of your products.
The notion of stock coverage is defined as follows: current stock level of the items divided by the consumption (which is number of items per weel). The stock coverage hence tells you how many weeks of supply you have with your current stock level.
There is a graphical representation of your stock coverage.
For each article, there are two lines:
The first one is your current coverage. If your coverage is lower than the target coverage (the second line, in gray), then the first line will turn progressively from green to red to indicate the potential stock issue.
Inventory – Build composed products¶
This screens allows you to enter in stock composed products, which are assembled from other products.
After having entered the quantity to build, what it will do when you click on the “build product” button, it will decrease the stock level of the components, and increase the stock level of the composed product.
If there are not enough component products available you will get an error message.
Inventory – Input classical products¶
This screen will allow you to enter simple (meaning without components) products into your stock, for example following a replenishment.
For example, with this screen if Enter is pressed, the ACC: SYLVANIA stock will be reaised to 18, the ALK-AURLOKS: 1 – Starter en will be raised to 6 and the ALK-AURLOKS: 1 – Starter fr will be raised to 24.
Inventory - Scrap products¶
Sadly it can happen that you have to scrap products: plants, destroyed products, whatever the reason.
This is also tracked in the application. The screen is exactly the same as previously, but this time you will enter per products the quantity of scrapped products.
inventory - Inventory corrections¶
Of course no inventory keeping is ever perfect. This means from time to time you will perform an inventory to actualize the stock level.
When you perform the inventory you will need to update the stock levels of the products. This will be achieved through this screen:
In the input boxes, you will enter the counted level of the actual physical stock.
Inventory - Define consumptions¶
As you probably understood, the weekly consumption of your articles is a very important data for your products and replenishment calculation. So we need to be able to define it precisely.
Hence this screen.
It will show you per product the consumtpion in various forms:
The weekly consumption over a certain list of weeks (default values are 12 → 3 months, 26 → 6 months and 52 → one year)
The weekly consumption over the whole lifespan of the product.
The maximum consumption for the ranges previously defined.
The parent consumption: If the product is used as part of a component, the parent consumption will be displayed there, in orange if the target consumption of the product is smaller than the consumption of its parent.
By clicking on a column name, you will overwrite the targeet weekly consumption with all the values of this column. If you click on a single calculated consumption, it will overwrite the target consumption of this product with the clicked value.
In the lower part of the screen, you will have an array with the history of all consumptions per product per week and year.
The consumptions taken into account are all the sales consumptions, and also the assembly consumptions if the product has the replenishment method “all consumptions”.
Inventory - Calculate replenishment¶
The final goal of this logistics module is of course to calculate the replenishment orders for all your products.
The replenishment calculation screen looks like this:
These are the various available columns:
Stock : Current stock level
Cons : Weekly Consumption that you have defined in the previous screen
Supplier del. Time : Delivery time o the supplier
Packing quantity : The multiple of items you must order. For example, the “MC: aimant carré de 20mm “ product is order by packs of 120.
Stock on delivery : The theoretical stock you will have on delivery of the supplier order: it is calculated like this: stock level – (weekly consumption x supplier delivery time)
Coverage : number of weeks of stock coverage on delivery from the supplier
Target coverage : This comes from the product information, it is the target coverage you wish to achieve everytime you order this product
Additional stock required : This field has two uses: either you have a fair or any other event that requires a specific additional amount of items, or you have no consumption information in the case of a new product for example. Then you can enter here the additional quantity of products you wish to order/manufacture.
When you click on the Calculate replenishment button, the following screen will appear:
It will indicate you, per supplier, the quantities to order, with the supplier reference and the costs related.
Pricing module¶
The pricing module allows to manage and overview prices for the product and for given user group, but also to generate the catalogs for the customers and overview and modify the delivery modes.
Price lists¶
There are two main parts:
The first part of the screen shows the price lists available for the customers, and the associate margin based on the product costs:
Public price means default availability, even for not logged users.
Then, if a record exists, the specific price for this user group will be displayed. As usual, and you might have noticed it, everything that is blue is clickable and leads to the possibility to modify the associated data.
The second part of the screen allows to mass generate price lists.
Basically, unselect the products for which you do not wish to generate the price list, select the target user group, enter a factor, and give a name to your price list (only internal at this time).
The price lists will be automatically generated and displayed when the screen reloads.
Delivery modes¶
Please refer to the description of the delivery modes table.
Linked Products¶
In the pi1 plugin, you have the possibility to display linked products. Typical usage in a shop is “Customers who have bought this product have also bought....”.
As explained before, this list is not generated on the fly in the pi1 plugin, but will display what you wish to display. In some cases, you will want to put forward some specific products, even if they are not the related best sellers.
This screen allows you to perform this:
It will display, for all the products belonging to the selected folder and its sub folders, the following info:
The currently linked products (Column “Linked Products”)
The relate best sellers (Column “Proposed products”), with the quantities sold behind it (in relation to the current product of course).
And the list of all products, to allow you to select what you wish.
By clicking on the items, they will be added to the “Linked Products”. Then you just need to save.
The “Clear all linked products” button will clear everything.
The “Copy suggested products” will copy the contents of the “Proposed products” column into the “linked products” Column.
Reports¶
Yearly results¶
The yearly results reports page actually delivers a lot of different information.
Operational results:
This table describes the operational results (profits and loss) per year. It is basically the sum of all payed orders and the sum of all payed supplied orders for each year.
Also, there is a forecast for the current year, which is calculated based upon the turnover of the previous year and the current date.
Pure product view
This is the theoretical product margin: For oll orders of every year (that were payed), it compares the product costs and the product sales price, hence providing a theoretical product margin.
Since the costs of the product are written in the order at the time of the order creation, change the proudct cost does not impact older orders. The same is of course true for the selling price.
Shipping costs
Shipping costs are the sum per year of what you have invoiced your customers regarding shipping costs. It is always interesting to compare to the next table, when you take a look at your specific supplier(s) for shipping.
Costs per Supplier
This table displays, per year again, the sum of money you spent with the various suppliers. Basically it sums up the amounts of each payed supplier order.
Theoretical margin per user group
Again, for all invoiced orders, this will display the following: the product related turnover, costs, margin for all users and user groups. This has been done to monitor and report the volumes and turnover made with different actors : Wholesalers usually make much more volume than normal non logged customers, but at a much cheaper price.
One little hint here: For the confirmed user group (normal logged users who have no specific user group assigned to them), we don't wan't to see all individual customers. This is achieved by the “ConfimerdUserGroupId” item in the extension configuration.
Referers¶
This report displayes the referers for the orders.
It shows the total amount of orders (and only of orders) and from where they were generated. It also shows how many orders are still in cart modus, and how much where payed.
By clicking on the name of the referrer, you will see all the orders concerned and the precise link from which the customers came.
A full analytical solution of browsing and so on will not be provided in this extension: there are very professional and powerful solutions on the market, such as google analytics.
So if you want to know the bounce rate per page, or the referrers that visit your site, use these solutions.
If you want to know which sites generate how much turnover, then the referrers report is adequate.
Two graphs with the time repartition of cart orders and payed orders are also available:
Products """"""""
This report indicates the turnover per product per year.
A small gimmick has been added here: the higher the turnover, the lighter the cell is. This allows to see very easily which are your best sellers, or how they evolve per year.
Like in the product families, graphs are displayed for turnover and margin.
Product Families¶
It is basically the same report as previously, but it indicates the results per product page, meaning product families.
In addition, the product families provide a cumulated bar graph of the sales per month.
Hover on the items of the bar chart to get the product family name and the associated turnover amount.
There are always two graphics: one with the turnover and one with the theoretical margin. The margin graph contains a reminder of the corresponding turnover, it is the only part of the bar chart (on the top ) that has no color.
You can also drill down by selecting the page in the treeview: Only products belonging to this page and its subpages will be displayed.
Product Data Management and records -----------------------------------
This chapter deals with describing the elements in the tables and how they work in the TCA.
It is recommended to store your different products related records in system folders, depending on how they are structured. These ordering of products in the back has no influence whatsoever on the front end rendering: Only the categories and single products defined in the plugins drive the rendering.
Back end ordering and classification is for your administrative comfort only.
Following is a description of the various records that are used.
The display in the frontend are not linked to the storage folders or pages where the records are stored. The structure of the storage folders you will define is just for your own usage and for easily retrieving records.
All fields (values, options, etc) that are not localizable and managed through the 'l10n_mode' => 'exclude' option in the TCA.
Products¶
Products are the basics of all this application, since they are what you sell.
fe_group¶
Field
fe_group
Description/usage
Used to define which user groups can access the product.
name¶
Field
name
Description/usage
Internal name for the product. This name will only ever be displayed in the back end of the application, and is extensively used there, so think it throughc arefully.
displayname¶
Field
displayname
Description/usage
This is the name that will be displayed in the frond end
description_long¶
Field
description_long
Description/usage
This RTE field allows for a long description of the product
description_short¶
Field
description_short
Description/usage
Also a description field, this time not RTE enabled.
Images¶
Field
Images
Description/usage
This is the list of images of the product. The first image of this list is very important, since it will be considered as the main image of the product.
price¶
Field
price
Description/usage
This is the price of the product, without any added value taxes.
taxgroup¶
Field
taxgroup
Description/usage
Added value percentage applied to the product. By default it is equal to the value defined in the extension configuration
Components¶
Field
Components
Description/usage
List of components of the product, if any.
This field is not available if the product is of type “non physical product”.
stocklevel¶
Field
stocklevel
Description/usage
This is the current physical stock level of the product. This field is not editable, you must go in the logistics backedn module to add products by performing a replenishment.
Weight¶
Field
Weight
Description/usage
Weight of the product, in grams. Used in the calculation of the shipping cotst.
Productcode¶
Field
Productcode
Description/usage
This is a purely alpha numerical product code.
Unit cost¶
Field
Unit cost
Description/usage
Unitary cost of the product. Whether you buy it or manufacture it, it has an associated costs. For Composed products, it does not need to be entered: The cost of the composed product will be calculated on the base of its components. This field is a double4 (xx.yyyy)
Initial cost¶
Field
Initial cost
Description/usage
Your product sometimes has an initial cost: the investment in R&D, building the tools that will allow to manufacture it, etc.
weeklyconsumption¶
Field
weeklyconsumption
Description/usage
The weekly consumption is the number of items you will consume each week. It is used for replenishment calculation.
toreplenish¶
Field
toreplenish
Description/usage
Indicates if the product is to be replenished, and by which method. Following values are possible:
no replenishment : The product will not be replenished, and will not be taken into account into the replenishment calculations
on sales consumption : The product (and his potential components) will be taken into account in the replenishment calculations only with the sales stock movements.
on all consumptions : The product will be taken into account in the replenishment calculations with all output movements, whether they are for sales or for building a product.
make to order : This describes the type of product that you realize when an order has been placed (for example a package of 10 times the product 1 & 2 times the product 2). The replenishment will take into account the sales movements of this product to calculate the need of its components. This basically does the same as on sales consumption, only the make to order product will not be displayed in the replenishment calculation. non physical product: This covers all non stored/physical products. They will not be taken into account in the replenishment calculation and will also have no stock value, and no impact on the stock picking process. Also this will trigger the fact that the product is not allowed to have components, does not have a stock level, a supplier, a weight, a weekly consumption, a replenishment packing quantity, a supplier reference, a delivery time, a target coverage.
replenishment_packing¶
Field
replenishment_packing
Description/usage
When you replenish this product, you might have a packing quantity. For example you must order this product by multiples of 20.
replenishment_info¶
Field
replenishment_info
Description/usage
This is either internal information, or the relevant supplier reference.
delivery_time¶
Field
delivery_time
Description/usage
Delivery time form the supplier
target_coverage¶
Field
target_coverage
Description/usage
Also used in the part of the replenishment calculation. This is the target coverage in number of weeks you wish for your product
Supplier¶
Field
Supplier
Description/usage
List of possible suppliers for this product
additional_files¶
Field
additional_files
Description/usage
Additional files (videos, pdf, excel, whatever), that can be displayed with the product.
linked_products¶
Field
linked_products
Description/usage
Products that are linked to the product. Will be displayed alongside. There is no automatic generation of a typical “customers who have bought this have also bought...”. We want to keep this intelligent and target what we wish to display.
This information can be set manually product per product, or through the upcoming tools in the back end.
Orders¶
Orders are placed by the customers. Whatever the status of the orders, the same data object is using during its whole lifecycle: It covers the shopping cart management, but also all the next steps of the lifecycle of the order, whatever its status.
date_order¶
Field
date_order
Description/usage
Date when the shopping cart item was transformed into an order
date_payment¶
Field
date_payment
Description/usage
Date when the payment was received/confirmed
date_shipping¶
Field
date_shipping
Description/usage
Date when the order was shipped
date_invoice¶
Field
date_invoice
Description/usage
Date when the invoice was generated. A customer can order on the date D, be invoiced on the date D+5 and pay on the date D+10. Mostly relevant for professional customers.
address_delivery¶
Field
address_delivery
Description/usage
Delivery address for this order
address_invoicing¶
Field
address_invoicing
Description/usage
Invoicing address for this order
address_delivery_country¶
Field
address_delivery_country
Description/usage
Delivery country for this order
product_list¶
Field
product_list
Description/usage
This is the list of products in the order. You can edit them in the backend through a user function. When adding a new product, make sure that you put a value greater than 0 or the product will not be added when the form is saved.
Ordered products of an order are not editable anymore if an invoice file has been generated. To change the product list, you need to delete the invoice file (since if you change the ordered products or their price, the invoice will not be inline with the database anymore).
processingstatus¶
Field
processingstatus
Description/usage
The processing status is very simple at this time: either ordered or shipped.We could consider a “delivered” status if we had an API with a shipping company.
invoicingstatus¶
Field
invoicingstatus
Description/usage
The invoicing status is also very simple at this time: either to be payed or payed.Also, a possible evoluition could be for professional customers that are invoiced at the end of a period: The adidtional statiis could then be “to be invoiced/invoiced”.
Iscart¶
Field
Iscart
Description/usage
Simple flag indicating whether this is still only a cart order, or a placed order.
shipping_costs¶
Field
shipping_costs
Description/usage
For this order the value invoiced to the customer for the shipping.
Contact mail¶
Field
Contact mail
Description/usage
Email of the customer who placed the order
Contact Name¶
Field
Contact Name
Description/usage
First and last name of the customer who placed the order
Comments¶
Field
Comments
Description/usage
If the customer enters a comment during his order entry, it will appear here
Comments internal¶
Field
Comments internal
Description/usage
These are the internal comments that can be written down during the processing of the order
deliverymode¶
Field
deliverymode
Description/usage
Uid of the selected delivery mode for this order
Payment mode¶
Field
Payment mode
Description/usage
Since payment modes are not coming from a relational table, but from the pi3 plugin where the order was placed, this is the name of the payment mode that was selected.
delivery_reference¶
Field
delivery_reference
Description/usage
When the order is shipped, if you enter a tracking reference, this is where it will be stored.
payment_reference¶
Field
payment_reference
Description/usage
Same as for the delivery reference, but for the payment. For example check number, paypal transaction id, etc.
session_id¶
Field
session_id
Description/usage
For non logged users, this is the key that will allow to keep track of their cart. Only a technical meaning.
invoice¶
Field
invoice
Description/usage
If you have an invoice (pdf or doc style), this is where you can upload it.
invoicetemplate¶
Field
invoicetemplate
Description/usage
The HTML template that will be used to generate the on the fly invoice.
mailtemplate¶
Field
mailtemplate
Description/usage
The HTML template that will be used to generate confirmation emails (payment, shipping) to the customer.
userlanguage¶
Field
userlanguage
Description/usage
Again, the language of the user is necessary to generate the documents based on the two previous templates, since they will be sent to the customer.
referer¶
Field
referer
Description/usage
When the session is created (this means by visiting any page with a pi1 plugin), the referer info will be displayed here.
pi3source¶
Field
pi3source
Description/usage
This is a tricky one … For some of the backend processes, we need to know with which pi3 (order placing) plugin the order was generated.
stockprocessed¶
Field
stockprocessed
Description/usage
Indicates if the products that are in this orders were processed in terms of stock picking.
user¶
Field
user
Description/usage
Link to the FE user that placed the order (if any).
Stock movements¶
Stock movements are a notion from logistics.Basically, everytime the stock level of an item is changed, an associated stock movement record is generated. It justifies ALL stock level changes, whether for sales, replenishment, scrapping inventory, internal production or inventory corrections.
Crdate¶
Field
Crdate
Description/usage
Date of the stock movement
Quantity¶
Field
Quantity
Description/usage
Quantity, can be postive (input) or negative (output)
linkedproduct¶
Field
linkedproduct
Description/usage
Product for which this stock movement was performed
linkedorder¶
Field
linkedorder
Description/usage
If linked to an order, this is the order for which this movement was performed
reason¶
Field
reason
Description/usage
The reason for this movement.Possible values are:stock output for serving an ordersotck output for building a composed product (if linked to an order, the linkedorder field will be populated)Stock input following a replenishmentInventory correctionScrapping products
Delivery modes¶
The delivery modes needed a dedicated table. Who knows what complexity can rely behind this ? Also, since delivery modes are only used to calculate a delivery price, it was adequate to be able to create as many as could be wished.
Name¶
Field
Name
Description/usage
Name of the delivery mode that will be displayed in the front end.
Name internal¶
Field
Name internal
Description/usage
Internal name of the delivery mode, only used in the backend
Description¶
Field
Description
Description/usage
Text description that will be displayed in the front end
Weight grid¶
Field
Weight grid
Description/usage
These are the weight rules for this delivery mode. If not empty, the cost will be calculated using this weight grid:Please write [upto]:[price]. This means if from 0 to 1000 grams the cost is 5 and from from 1000 grams up, the cost is 10.50, you will write two lines: 1000:5.00 and 1001:10.50.
value_min¶
Field
value_min
Description/usage
Minimum order value for this delivery mode to be active
value_max¶
Field
value_max
Description/usage
Maximum order value for this delivery mode to be active
weight_min¶
Field
weight_min
Description/usage
Minimum weight for this delivery mode to be active
weight_max¶
Field
weight_max
Description/usage
Maximum weight for this delivery mode to be active
packing_weight¶
Field
packing_weight
Description/usage
Weight of the packing. Will be taken into account in addition to the product weight for the shipping cost calculation.
default_cost¶
Field
default_cost
Description/usage
If this shipping mode has a fixed cost, here it is.
free_limit¶
Field
free_limit
Description/usage
If above a certain amount of products, the shipping is free, write it here.
countries¶
Field
countries
Description/usage
List the countries for which this delivery mode is available. If empty, it is valid for all countries.
tracking_url¶
Field
tracking_url
Description/usage
If there is the possibility to track the delivery on line through agiven url, write this url here.The content must be as follows: enter the tracking url here with %deliveryreference% as parameter.This information will be used in the backend, frontend, as well the shipping confirmation mails.For the french colissimo by la poste, it is for example: http://colissimo.fr/portail_colissimo/suivre.do?lang uage=fr_FR&parcelnumber=%deliveryreference%
Excludedproducts¶
Field
Excludedproducts
Description/usage
This is the list of products for which this delivery mode is not available.
Allowed products¶
Field
Allowed products
Description/usage
This is the list of products for which this delivery mode is avaialbe. If empty, all products are possible (of course this is not true for products that are in the excluded products list). If not empty, this delivery mode will only be available if ALL the products of the order are in this list.
Suppliers¶
Suppliers are needed to follow the costs per supplier, but also to monitor supplier orders.
Name¶
Field
Name
Description/usage
Name of the supplier
Address¶
Field
Address
Description/usage
Address
Comments¶
Field
Comments
Description/usage
Comments associated to the supplier
Supplier Orders¶
Supplier orders are basically the orders you will place to your suppliers. This element allows to track these orders, define their costs and when they were ordered/payed/delivered.
Supplier¶
Field
Supplier
Description/usage
Supplier linked to this order
Comments¶
Field
Comments
Description/usage
Comments for this supplier order
date_order¶
Field
date_order
Description/usage
Orderding date for this order. If not set, the order is not considered placed.
date_payement¶
Field
date_payement
Description/usage
Payment date for this order. If not set, the order is not considered payed.
date_reception¶
Field
date_reception
Description/usage
Reception date for this order. If not set, the order is not considered received.
payableamount¶
Field
payableamount
Description/usage
Amount of the order (without VAT)
attachments¶
Field
attachments
Description/usage
Any number of attachments. Can be invoices, quotes, whatever.
Order History¶
Order history is used to track everything that happened with the order, which mails have been sent, etc.
Crdate¶
Field
Crdate
Description/usage
Date the event happened
cruser_id¶
Field
cruser_id
Description/usage
Back end user that performed the action, if any
order_id¶
Field
order_id
Description/usage
Order to which the action is linked
Reason¶
Field
Reason
Description/usage
What was the action. This is a limited list consisting of :
- Order Payed
- Order Shipped
- Payment notification
- Shipping notification
- Confirmation mail
- Reminder mail
- Stock Picked
Details¶
Field
Details
Description/usage
If additional text comments or shipping or delivery notices were added, they will be available in this field.
Price lists¶
The price lists are a very important part of this application: They allow to define discounts and promotions for normal customers, but also specific prices for relevant user groups.
product¶
Field
product
Description/usage
Link to the product for which this price list is valide
Price¶
Field
Price
Description/usage
Instanciated price for this price list
Taxgroup¶
Field
Taxgroup
Description/usage
Percentage of value added tax that has to be applied for this price list
To-do list¶
TCA¶
Implement product list in the supplier orders.
Move products to xml structure, for possible future additions (options model maybe)
Global¶
Implement the “product with options” model. That needs some more thinking. Keywords are:
- options as variations of a sold product: for example english/french version
- T shirts: sizes and colors as drop down lists, but with a single price
- assemblies: pick x items from a list for a global price (more a pricing policy)
Implement the vouchers management. Impact on pricing module and pi3 module.
Document the delivery modes
Front end plugins¶
Pi1 : allow the customizing of the discount message. Maybe render the pricelists items editable/translatable.
Pi1 : add icon (green/yellow/red) for stock coverage information. Depends on the calculation of the safety stock.
pi3 : Implement paypal IPN (Instant Payment Notification)
pi3 : For the invoice and mail template, add an option to take the values of the user group. Of course these values must be defined somewhere else.
Pi1/Pi2 :Implement Ajax for the addition of products.
Back end Modules¶
Logistics: when calculating replenishment , allow for direct creation of this replenishment order as a supplier order.
Logistics: Define rule to calculate the safety stock.
Logistics: take into account the new replenishment methods for the replenishment calculations.
Reporting: add a report with the list of all accounting related operations (supplier orders and orders)
Pricing: add the function to generate the catalogs.
All modules: When data about an order is changed through the easy workflow, historize the changes as if were done through a standard alt_doc.php form.
Orders, suppliers, delivery modes: remove the pane with the pages list, it is not relevant here. If someone knows how to do this, please tell me !
Find a way to reuse the FE templating system for invoice generation and mail sending, instead of this dirty code to simulate the template usage.
Practices and hints regarding the shop¶
Adding a discount manually to an order¶
It can happen that sometimes, you wish to manually add a discount to an order.
To do so is pretty simple:
You need to create a product (which I Called REGUL). This product has no price and is a non physical product.
Then edit the order, add the product to the product list with a negative price.
It will hence be displayed in the orders, the mails, the invoices.
Of course the other option is to change the price of one of the ordered products, but it will not as transparent to the custmer.
Managing hand to hand delivery¶
Sometimes (at least it happens with my shop), people come to me in order not to pay the shipping costs for the order.
Again you have two ways to manage this: Either you edit the order and set the shipping costs to 0, or the following:
I created a delivery mode which is called hand to hand delivery, and made it accessible to the staff only (I don't want customers to be able to select this … ). But when it happens, then I edit the order choosing this delivery mode and setting the price to 0. This will then appear on the invoice with the appropriate label (remember that in the Back end, you can do almost what you like, there are no checks based on the user group of the ordering customer).
Users and Logins¶
The shop does not force the user to create an account if he wants to place an order. This is one of the major constraints that you can find in OsCommerce for example. Myself, If I just wish to make a simple purchase, I do not want to go through the hassle of creating an account.
Of course, this decision is up to you.
If you wish to force the user to create an account, you can do very simply by putting the accessibility of the pi3 plugin to “show at any login”, accompanied by a content element that will tell the user that in order to finalize the order, he needs to create an account.
Another thing: If the non-logged user puts products in his cart and signs in afterwards, these products won't be lost.
known issues and fixes, FAQ¶
((generated))¶
Shopping cart plugin (pi2) not refreshed in due time.¶
It is possible that the pi2 shopping cart you included through your typoscript is not refreshed correctly. This is due to the execution sequence of the plugins:
If the plugin pi1 with the product display, which also performs adding products to the cart; is executed after the shopping cart plugin, the shopping cart will still display the old values. If you use a standard implementation of typo3, without templavoilà, please refer to this link: http://www.bugs.typo3.org/bug_view_page.php?bug_id=9846
If you use templavoilà, make sure that, in the template html, the container containing the shopping cart plugin is placed after the main content where the pi1 plugin will be displayed.
Products not displayed in the pi1 plugin¶
Please check the following:
The products must have a price. Only products with a price greater than 0 will appear in the front end plugin. If a product has no price, it is considered as not for sale.
Stock display policy in the pi1 plugin: If you set the policy to “Do not display out of stock products” and that the product has 0 stock (which is the default value of the stock when you create a new product), it will not be displayed either.
OpenGRAPHICS Tags not refreshed¶
Since the OpenGraphics tags are generated by the typoscript, make sure that the page is set to “no cache” or “disable cache” in the page properties. Of course you need to do this only for the product detail page, the pi1 plugin itself works with no cache.
Change Log¶
0.1.0¶
Version
0.1.0
Date
01/04/2011
Changes
Initial version. Beta since it is already in production at some place.Please refer any bugs/improvement requests directly to me.
Documentation update.
0.1.1¶
Version
0.1.1
Date
02/04/2011
Changes
Minor update of the documentation, so that the rendering on typo3.org is ok
0.1.2¶
Version
0.1.2
Date
05/04/2011
Changes
Added require once of tx_cenoshop_functions on pi3 plugin
Added a user func on the price: Since the price is entered without VAT, we want to see the results with VAT
Added a user func to easily manage the components of a product
Added the order number on the invoice template
0.2.0¶
Version
0.2.0
Date
14/04/2011
Changes
Added a filtering on the delivery modes so that only the delivery modes for the usergroup are displayed
Added the pi5 plugin, that allows to display the delivery modes
left only the pi1 plugin for easy inserting. All the other ones do not happen so often.
fixed a bug on the display of the colors associated to the product reports
Added an order history table, to know when the mails have been sent, etc. Impact on TCA and backend of be module for orders, as well as the pi3 plugin.
Removed the delivery modes module
Added a delivery mode function in the pricing module
Added a notion of allowed products and excluded products in the shipping modes
0.2.1¶
Version
0.2.1
Date
01/07/2011
Changes
Simplified the display of referer stats.
Added a display mode setting to the pi2 small cart.
Fixed a bug on the delivery mode selection.
Changed the “strictly superior to” to a “equal or greater than” rule on the free limit for the delivery modes.
Now uses the static_info_tables extension to display the currencies
Fixed a bug that caused no stock movement to be created for creation of composed products.
Fixed a bug in the pi2 (shopping cart) that caused to display the sum without vat
0.2.2¶
Version
0.2.2
Date
12/08/2011
Changes
Thanks to Thomas Krueger from Atnexxt, the following was done:
html templates are now xhtml conform
typoscript attributes corrected (stdWrap instead of sdtWrap)
utf8 encoding of outbound mails
0.3.0¶
Version
0.3.0
Date
09/09/2011
Changes
- Massive improvement of the replenishment calculation: previously the components of complex products were not calculated based on the need of the complex product, but on the consumption of the components. Now the bill of materials of the products are taken into account.
- Simplification of the sales reports: not sold products are now not displayed in the reports to ease the reading (since some products, like blisters for example are never sold as standalon products, but only as components of a complex product).
- Improvement of the display of the stock movements associated to a product. BE user name who processed the movement, BE link to the associated order if any.
- added the BIC Code in the wire transfer payment method
- added a graphical representation of the turnover per year and month in the sales report “Reports- Products families”
0.3.1¶
Version
0.3.1
Date
22/09/2011
Changes
Following a review by the typo3 security team, some security issues were fixed, both in the front and the backend.
0.4.0¶
Version
0.4.0
Date
30/09/2011
Changes
- Generation of the invoice file, as html file in the “uploads” directory of the extension. This happens when the order is set to payed, or can be triggered manually in the backend. This generated invoice can be viewed by the customer in the pi4 plugin
- Stock level field not editable anymore in the products record in the backend. To change the stock level, you must go into the logistics module.
- Ordered products of an order are not editable anymore if an invoice file has been generated. To change the product list, you need to delete the invoice file (since if you change the ordered products or their price, the invoice will not be inline with the database anymore).
- Possibility to add further files to a product (spec sheets, docs, videos, whatever).
- Evolution of the replenishment modes (please see details of the documentation)
- Enabling of the page selection in the product families reporting, allowing for drill down reporting.
- added hook for realurl when a single product is displayed.
- added a typoscript best practices chapter to explain how to create multiple like pages for the single product view.
- update the ext_emconf.php file to indicate that static_info_tables is required and realurl suggested.
- added the possibility to override the paypal currency code in the pi3 plugin
- Moved th extension to beta, since a security review has happened, and the extension is used in production in different sites
0.4.1¶
Version
0.4.1
Date
07/10/2011
Changes
- Added graphs for the reports, whether by product or product families. The different pages/products now have all the same colors in the bar graphs, wherever you call them from. Also added systematically two graphs: one for the turnover, one for the theoretical margin. Enhanced the graphs for easier reading.
- added the possibility to configure the single product display page in the typoscript
- continuous improvements of the documentation
- all locallang files now also in German, thanks to Alexander Frey
- possibility in the pi1 plugin to not display the “VAT” “no VAT” next to the price and the currency. Default behavior is that it will not be displayed.
- Improved the referer reporting
- New function, the linked products (typically “customers who have bought this have also bought …” ). Currently only the display function exists, you must set them manually. Next step will be to generate them through the back end.
0.4.2¶
Version
0.4.2
Date
14/10/2011
Changes
- Backend module to generate the list of linked products
- fixed a bug that caused the cart to be empty if the user logged in after putting products in the cart.
- various fixes regarding character encoding
0.4.3¶
Version
0.4.3
Date
24/10/2011
Changes
- Generation of all outbound mails is now achieved through the t3lib_mail_Message library. This requires typo3 version > 4.5
- Fixed a bug that caused the following: when the linked products were purchased, the price was not set.*
- Fixed a bug that caused the realurl info to disappear from the single product view when the customer added something to the basket.
- Added the possibility to display in the price both VAT and non VAT prices, since it is a requirement in some countries
- Improved the linked products in order to be able to display the name and the price also, if required.
- Documentation improvement for the shop set up
0.4.4¶
Version
0.4.4
Date
08/02/2012
Changes
- Added an invoicing date to the order model, update of the invoice template also.
0.5.0¶
Version
0.5.0
Date
06/03/2012
Changes
- Finally fixed that conversion/encoding issue. Now everything is utf-8 compliant. This is why this release is considered a new sub version.
- Embedded the corrections brought by Urs Maag in the order processing module.
!!!! IMPORTANT !!!!
If you have previously created a local copy of invoice templates, please change the encoding in the header to “utf-8”.
!!!! IMPORTANT !!!!
- Removed the t3lib_div::fixed_lgd_pre in all back end modules, since this function is not available anymore starting typo3 version 4.6
- in the plugin cart, if a delivery mode is selected, it will automatically save the form (onclick javascript event) and reload the page.