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

img-1 img-2 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>`_

What does it do? 3

Screen captures 3

Requirements 7

Credits 7

`Configuration 9 <#__RefHeading__951_1261199811>`_

Extension configuration 9

`Implementing the shop 10 <#__RefHeading__10826_393599175>`_

Creating the sysfolder structure 10

Defining the currency 10

Shop front end 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>`_

Orders Module 22

Logistics Module 25

Pricing module 29

Delivery modes 30

Reports 30

`Product Data Management and records 36 <#__RefHeading__40095_299867240>`_

Products 36

Orders 37

Stock movements 38

Delivery modes 39

Suppliers 40

Supplier Orders 40

Order History 40

Price lists 41

`To-do list 42 <#__RefHeading__33636_393599175>`_

TCA 42

Global 42

Front end plugins 42

Back end Modules 42

`Practices and hints regarding the shop 44 <#__RefHeading__15490_2080043295>`_

Adding a discount manually to an order 44

Managing hand to hand delivery 44

Users and Logins 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:

img-3

img-4

img-5

Order Processing

This is just an example of one implementation:

img-6

img-7

Order History

img-8

Back end modules

img-9

Back end – Orders

img-10

Back end – Reporting

img-11 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:

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:

img-12

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

img-13

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

img-14

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:

img-15 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:

img-16 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.

tx_cenoshop_pi5 plugin – delivery modes

Displays the information about the shipping modes that are available for the customer.

Plugin configurations

Simple. None.

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.

img-17

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:

img-10

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.

img-18

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.

img-19

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.

img-20

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.

img-21

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:

img-22

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:

img-23

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:

img-24

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.

img-25

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:

img-26 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:

img-27

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

img-28

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

img-29

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

img-30

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

img-31

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.

img-32

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:

img-33 Products """"""""

This report indicates the turnover per product per year.

img-34

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.

img-35 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.

img-36

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.

img-37 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.