.. You may want to use the usual include line. Uncomment and adjust the path. .. include:: ../Includes.txt ============= 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: |img-1| |img-2| EXT: Cenoshop ============================= Extension Key: cenoshop Language: en Version: 0.4.3 Keywords: forAdmins, forEditors, forIntermediates Copyright 2006-2011, Viktor Bauer, 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: Table of Contents ----------------- **`EXT: Cenoshop 1 <#__RefHeading__5708_1738894311>`_** **`Introduction 3 <#__RefHeading__20177_299867240>`_** `What does it do? 3 <#__RefHeading__913_1261199811>`_ `Screen captures 3 <#__RefHeading__10760_393599175>`_ `Requirements 7 <#__RefHeading__917_1261199811>`_ `Credits 7 <#__RefHeading__919_1261199811>`_ **`Configuration 9 <#__RefHeading__951_1261199811>`_** `Extension configuration 9 <#__RefHeading__4537_1644941866>`_ **`Implementing the shop 10 <#__RefHeading__10826_393599175>`_** `Creating the sysfolder structure 10 <#__RefHeading__40265_299867240>`_ `Defining the currency 10 <#__RefHeading__3679_1290117819>`_ `Shop front end structure 10 <#__RefHeading__10832_393599175>`_ `tx\_cenoshop\_pi1 plugin – product viewer 11 <#__RefHeading__10846_393599175>`_ `tx\_cenoshop\_pi2 plugin – shopping cart 18 <#__RefHeading__4547_1644941866>`_ `tx\_cenoshop\_pi3 plugin – checkout page 19 <#__RefHeading__10922_393599175>`_ `tx\_cenoshop\_pi4 plugin – order history 20 <#__RefHeading__10938_393599175>`_ `tx\_cenoshop\_pi5 plugin – delivery modes 21 <#__RefHeading__58027_393599175>`_ **`Back End Modules 22 <#__RefHeading__10950_393599175>`_** `Orders Module 22 <#__RefHeading__19806_393599175>`_ `Logistics Module 25 <#__RefHeading__33604_393599175>`_ `Pricing module 29 <#__RefHeading__33634_393599175>`_ `Delivery modes 30 <#__RefHeading__40361_393599175>`_ `Reports 30 <#__RefHeading__40363_393599175>`_ **`Product Data Management and records 36 <#__RefHeading__40095_299867240>`_** `Products 36 <#__RefHeading__933_1261199811>`_ `Orders 37 <#__RefHeading__943_1261199811>`_ `Stock movements 38 <#__RefHeading__949_1261199811>`_ `Delivery modes 39 <#__RefHeading__10810_393599175>`_ `Suppliers 40 <#__RefHeading__10814_393599175>`_ `Supplier Orders 40 <#__RefHeading__10818_393599175>`_ `Order History 40 <#__RefHeading__61487_393599175>`_ `Price lists 41 <#__RefHeading__10822_393599175>`_ **`To-do list 42 <#__RefHeading__33636_393599175>`_** `TCA 42 <#__RefHeading__28631_393599175>`_ `Global 42 <#__RefHeading__10956_393599175>`_ `Front end plugins 42 <#__RefHeading__10960_393599175>`_ `Back end Modules 42 <#__RefHeading__10974_393599175>`_ **`Practices and hints regarding the shop 44 <#__RefHeading__15490_2080043295>`_** `Adding a discount manually to an order 44 <#__RefHeading__21952_2080043295>`_ `Managing hand to hand delivery 44 <#__RefHeading__15492_2080043295>`_ `Users and Logins 44 <#__RefHeading__3393_1290117819>`_ **`known issues and fixes, FAQ 45 <#__RefHeading__4559_1644941866>`_** **`Change Log 46 <#__RefHeading__959_1261199811>`_** .. _Introduction: Introduction ------------ .. _What-does-it-do: 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: Screen captures ^^^^^^^^^^^^^^^ .. _Product-listing: Product listing """"""""""""""" These are just some examples of the possible layouts: |img-3| |img-4| |img-5| .. _Order-Processing: Order Processing """""""""""""""" This is just an example of one implementation: |img-6| |img-7| .. _Order-History: Order History """"""""""""" |img-8| .. _Back-end-modules: Back end modules """""""""""""""" |img-9| .. _Back-end-Orders: Back end – Orders """"""""""""""""" |img-10| .. _Back-end-Reporting: 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: 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: Configuration ------------- .. _Extension-configuration: Extension configuration ^^^^^^^^^^^^^^^^^^^^^^^ These are the following items: .. ### BEGIN~OF~TABLE ### .. _currencyCode: currencyCode """""""""""" .. container:: table-row 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: defaultVATValue """"""""""""""" .. container:: table-row 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: mainStoragePage """"""""""""""" .. container:: table-row Name mainStoragePage Description/usage Page where the orders records are stored by default .. _PDMCorePage: PDMCorePage """"""""""" .. container:: table-row Name PDMCorePage Description/usage Root page for all Product Data Management items (products, categories, price lists) as well as records. .. _DeliveryModesCorePage: DeliveryModesCorePage """"""""""""""""""""" .. container:: table-row Name DeliveryModesCorePage Description/usage Root page for all Delivery modes information .. _SuppliersCorePage: SuppliersCorePage """"""""""""""""" .. container:: table-row Name SuppliersCorePage Description/usage Root page for all Supplier relevant (suppliers and supplier orders) information .. _CheckOutPage: CheckOutPage """""""""""" .. container:: table-row Name CheckOutPage Description/usage Main order processing and checkout page: The page where the pi3 extension is displayed .. _ProductDetailPage: ProductDetailPage """"""""""""""""" .. container:: table-row 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: ConfimerdUserGroupId """""""""""""""""""" .. container:: table-row 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. .. ###### END~OF~TABLE ###### .. _Implementing-the-shop: Implementing the shop --------------------- .. _Creating-the-sysfolder-structure: 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 ^^^^^^^^^^^^^^^^^^^^^ 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: 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: 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: 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). .. ### BEGIN~OF~TABLE ### .. _Categories-to-display: Categories to display ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Products to display ~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Display only promoted products ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Sort order ~~~~~~~~~~ .. container:: table-row Name Sort order Description/usage Pretty self explanatory .. _Sort-criteria: Sort criteria ~~~~~~~~~~~~~ .. container:: table-row Name Sort criteria Description/usage The criteria by which the sorting will be performed .. _Number-of-products-to-display: Number of products to display ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Number of products to display Description/usage Pretty self explanatory .. ###### END~OF~TABLE ###### .. _Plugin-configuration: Plugin configuration """""""""""""""""""" |img-14| .. ### BEGIN~OF~TABLE ### .. _HTML-template-to-be-used: HTML template to be used ~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name HTML template to be used Description/usage Html template to be used for the display of the products. .. _Products-per-row: Products per row ~~~~~~~~~~~~~~~~ .. container:: table-row Name Products per row Description/usage Number of products that will be displayed in each row. .. _Display-product-code: Display product code ~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show when the product was added to the catalogue ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show display title ~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show standalone price ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show discount details ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show Main Image ~~~~~~~~~~~~~~~ .. container:: table-row 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: Show secondary images ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Show secondary images Description/usage Show or not the secondary images. .. _Ignore-typoscript-for-image-formatting: Ignore typoscript for image formatting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: height ~~~~~~ .. container:: table-row 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: width ~~~~~ .. container:: table-row Name width Description/usage Width of the image. .. _Description-to-show: Description to show ~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Price to Show ~~~~~~~~~~~~~ .. container:: table-row 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: Display VAT/no VAT label with the price ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Stock level display ~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Stock purchasing policy ~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: component display mode ~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Show additional files ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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. .. ###### END~OF~TABLE ###### .. _Linked-Products: Linked Products """"""""""""""" If you wish to display the linked products, you can define it in this tab. .. ### BEGIN~OF~TABLE ### .. _Show-Linked-Products: Show Linked Products ~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Max number of linked products to display ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Max number of linked products to display Description/usage Maximum Number of linked products that you wish to display .. _Display-Product-Name: Display Product Name ~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Display Product Name Description/usage If checked, this means the product name will be displayed in the linked products .. _Display-Product-Price: Display Product Price ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Display Product Price Description/usage If checked, this means the product price will be displayed in the linked products .. _Display-Buy-Button: Display Buy Button ~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Display Buy Button Description/usage If checked, the buy button will be displayed below the product image .. _Ignore-typoscript-for-image-formatting: Ignore typoscript for image formatting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: height ~~~~~~ .. container:: table-row 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: width ~~~~~ .. container:: table-row Name width Description/usage Width of the image. .. ###### END~OF~TABLE ###### .. _Typoscript-configurations: 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. .. ### BEGIN~OF~TABLE ### .. _templateFile: templateFile ~~~~~~~~~~~~ .. container:: table-row Name templateFile Description/usage Default value is: typo3conf/ext/cenoshop/pi1/product\_template.html .. _displaytitle: displaytitle ~~~~~~~~~~~~ .. container:: table-row 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: displaytitle\_sdtWrap ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name displaytitle\_sdtWrap Description/usage Allows you to completely manage the appearance of the display title.Default value is .wrap = \|
.. _price-stdWrap: price\_stdWrap ~~~~~~~~~~~~~~ .. container:: table-row Name price\_stdWrap Description/usage For the standalone price display.Default value iswrap = \|
.. _topimage-sdtWrap: topimage\_sdtWrap ~~~~~~~~~~~~~~~~~ .. container:: table-row 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 = \|
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: images\_sdtWrap ~~~~~~~~~~~~~~~ .. container:: table-row 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: componentImages\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: discount\_stdWrap ~~~~~~~~~~~~~~~~~ .. container:: table-row Name discount\_stdWrap Description/usage For the discount information, the one that says xxx € insteand of yyy €.wrap = \|
.. _discountdetails-stdWrap: discountdetails\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name discountdetails\_stdWrap Description/usage For the discount information, the one that gives potential end date information..wrap = \|
.. _additionalFilesTitle-stdWrap: additionalFilesTitle\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name additionalFilesTitle\_stdWrap Description/usage This is the wrap around the title for the additional files..wrap = \|:
.. _SingleProductDisplayPage: SingleProductDisplayPage ~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: linked\_productname\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name linked\_productname\_stdWrap Description/usage Stdwrap for the titles of the linked product. Default value is wrap = \|: .. _linked-images-stdWrap: linked\_images\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: linked\_products\_stdWrap ~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name linked\_products\_stdWrap Description/usage This is the wrap around the title for the linked products..wrap =
\|:
.. ###### END~OF~TABLE ###### .. _Typoscript-best-practices: 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=Cenoshop:| 5 < temp.productname } ### ADD OPENGRAPHICS HEADER DATA page.headerData.120 = COA page.headerData.120.wrap = page.headerData.120.5 < temp.productname page.headerData.130 = TEXT page.headerData.130.value = page.headerData.140 = TEXT page.headerData.140.data = getIndpEnv:TYPO3_REQUEST_URL page.headerData.140.wrap = page.headerData.150 = COA page.headerData.150.5 < temp.productimage page.headerData.150.wrap = page.headerData.160 = TEXT page.headerData.160.value = page.headerData.170 = COA page.headerData.170.5 < temp.productdescription page.headerData.170.wrap = 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: Typoscript configurations """"""""""""""""""""""""" .. ### BEGIN~OF~TABLE ### .. _templateFile: templateFile ~~~~~~~~~~~~ .. container:: table-row 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: Displaymode ~~~~~~~~~~~ .. container:: table-row 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” .. ###### END~OF~TABLE ###### .. _tx-cenoshop-pi3-plugin-checkout-page: 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: 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. .. ### BEGIN~OF~TABLE ### .. _Enable-Paypal-payment: Enable Paypal payment ~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Enable Wire transfer Payment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Enable Wire transfer Payment Description/usage Same as for paypal, except for wire transfer. .. _Enable-check-payment: Enable check payment ~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name Enable check payment Description/usage Same as paypal, except for check payments. .. ###### END~OF~TABLE ###### .. _Plugin-configuration: Plugin configuration """""""""""""""""""" .. ### BEGIN~OF~TABLE ### .. _HTML-template-to-be-used: HTML template to be used ~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row Name HTML template to be used Description/usage Template for the shopping cart to be used. .. _HTML-template-to-be-used-for-the-invoice: HTML template to be used for the invoice ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: HTML template to be used for all mails ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. container:: table-row 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: Bcc mails ~~~~~~~~~ .. container:: table-row 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: Sender mail ~~~~~~~~~~~ .. container:: table-row Name Sender mail Description/usage Email address that will be the sender of the mail. .. _Reply-address: Reply address ~~~~~~~~~~~~~ .. container:: table-row Name Reply address Description/usage Reply to address of the mail. .. ###### END~OF~TABLE ###### .. _Typoscript-configurations: 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: 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: 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: Plugin configurations """"""""""""""""""""" .. ### BEGIN~OF~TABLE ### .. _templateFile: templateFile ~~~~~~~~~~~~ .. container:: table-row Name templateFile Description/usage Indicates the HTML template to be used. .. ###### END~OF~TABLE ###### .. _Typoscript-configurations: Typoscript configurations """"""""""""""""""""""""" Simple. None. .. _tx-cenoshop-pi5-plugin-delivery-modes: tx\_cenoshop\_pi5 plugin – delivery modes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Displays the information about the shipping modes that are available for the customer. .. _Plugin-configurations: Plugin configurations """"""""""""""""""""" Simple. None. .. _Typoscript-configurations: Typoscript configurations """"""""""""""""""""""""" Simple. None. .. _Back-End-Modules: 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: 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: 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: 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: 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: 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: 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: 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: Cart Orders """"""""""" This tab shows only the “orders” that have not yet been transformed into actual orders. .. _Generic-information: 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: 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: Products - All Products """"""""""""""""""""""" This gives you a view of all products. Each field is editable by clicking on it. .. _Inventory-View-stock-coverage: 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: 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: 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: 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: 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: 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: 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: 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: 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: Delivery modes """""""""""""" Please refer to the description of the delivery modes table. .. _Linked-Products: 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: Reports ^^^^^^^ .. _Yearly-results: 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: 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: 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 ^^^^^^^^ Products are the basics of all this application, since they are what you sell. .. ### BEGIN~OF~TABLE ### .. _fe-group: fe\_group """"""""" .. container:: table-row Field fe\_group Description/usage Used to define which user groups can access the product. .. _name: name """" .. container:: table-row 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: displayname """"""""""" .. container:: table-row Field displayname Description/usage This is the name that will be displayed in the frond end .. _description-long: description\_long """"""""""""""""" .. container:: table-row Field description\_long Description/usage This RTE field allows for a long description of the product .. _description-short: description\_short """""""""""""""""" .. container:: table-row Field description\_short Description/usage Also a description field, this time not RTE enabled. .. _Images: Images """""" .. container:: table-row 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: price """"" .. container:: table-row Field price Description/usage This is the price of the product, without any added value taxes. .. _taxgroup: taxgroup """""""" .. container:: table-row 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: Components """""""""" .. container:: table-row 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: stocklevel """""""""" .. container:: table-row 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: Weight """""" .. container:: table-row Field Weight Description/usage Weight of the product, in grams. Used in the calculation of the shipping cotst. .. _Productcode: Productcode """"""""""" .. container:: table-row Field Productcode Description/usage This is a purely alpha numerical product code. .. _Unit-cost: Unit cost """"""""" .. container:: table-row 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: Initial cost """""""""""" .. container:: table-row 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: weeklyconsumption """"""""""""""""" .. container:: table-row Field weeklyconsumption Description/usage The weekly consumption is the number of items you will consume each week. It is used for replenishment calculation. .. _toreplenish: toreplenish """"""""""" .. container:: table-row 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: replenishment\_packing """""""""""""""""""""" .. container:: table-row 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: replenishment\_info """"""""""""""""""" .. container:: table-row Field replenishment\_info Description/usage This is either internal information, or the relevant supplier reference. .. _delivery-time: delivery\_time """""""""""""" .. container:: table-row Field delivery\_time Description/usage Delivery time form the supplier .. _target-coverage: target\_coverage """""""""""""""" .. container:: table-row 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: Supplier """""""" .. container:: table-row Field Supplier Description/usage List of possible suppliers for this product .. _additional-files: additional\_files """"""""""""""""" .. container:: table-row Field additional\_files Description/usage Additional files (videos, pdf, excel, whatever), that can be displayed with the product. .. _linked-products: linked\_products """""""""""""""" .. container:: table-row 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. .. ###### END~OF~TABLE ###### .. _Orders: 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. .. ### BEGIN~OF~TABLE ### .. _date-order: date\_order """"""""""" .. container:: table-row Field date\_order Description/usage Date when the shopping cart item was transformed into an order .. _date-payment: date\_payment """"""""""""" .. container:: table-row Field date\_payment Description/usage Date when the payment was received/confirmed .. _date-shipping: date\_shipping """""""""""""" .. container:: table-row Field date\_shipping Description/usage Date when the order was shipped .. _date-invoice: date\_invoice """"""""""""" .. container:: table-row 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: address\_delivery """"""""""""""""" .. container:: table-row Field address\_delivery Description/usage Delivery address for this order .. _address-invoicing: address\_invoicing """""""""""""""""" .. container:: table-row Field address\_invoicing Description/usage Invoicing address for this order .. _address-delivery-country: address\_delivery\_country """""""""""""""""""""""""" .. container:: table-row Field address\_delivery\_country Description/usage Delivery country for this order .. _product-list: product\_list """"""""""""" .. container:: table-row 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: processingstatus """""""""""""""" .. container:: table-row 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: invoicingstatus """"""""""""""" .. container:: table-row 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: Iscart """""" .. container:: table-row Field Iscart Description/usage Simple flag indicating whether this is still only a cart order, or a placed order. .. _shipping-costs: shipping\_costs """"""""""""""" .. container:: table-row Field shipping\_costs Description/usage For this order the value invoiced to the customer for the shipping. .. _Contact-mail: Contact mail """""""""""" .. container:: table-row Field Contact mail Description/usage Email of the customer who placed the order .. _Contact-Name: Contact Name """""""""""" .. container:: table-row Field Contact Name Description/usage First and last name of the customer who placed the order .. _Comments: Comments """""""" .. container:: table-row Field Comments Description/usage If the customer enters a comment during his order entry, it will appear here .. _Comments-internal: Comments internal """"""""""""""""" .. container:: table-row Field Comments internal Description/usage These are the internal comments that can be written down during the processing of the order .. _deliverymode: deliverymode """""""""""" .. container:: table-row Field deliverymode Description/usage Uid of the selected delivery mode for this order .. _Payment-mode: Payment mode """""""""""" .. container:: table-row 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: delivery\_reference """"""""""""""""""" .. container:: table-row 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: payment\_reference """""""""""""""""" .. container:: table-row 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: session\_id """"""""""" .. container:: table-row 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: invoice """"""" .. container:: table-row Field invoice Description/usage If you have an invoice (pdf or doc style), this is where you can upload it. .. _invoicetemplate: invoicetemplate """"""""""""""" .. container:: table-row Field invoicetemplate Description/usage The HTML template that will be used to generate the on the fly invoice. .. _mailtemplate: mailtemplate """""""""""" .. container:: table-row Field mailtemplate Description/usage The HTML template that will be used to generate confirmation emails (payment, shipping) to the customer. .. _userlanguage: userlanguage """""""""""" .. container:: table-row 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: referer """"""" .. container:: table-row 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: pi3source """"""""" .. container:: table-row 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: stockprocessed """""""""""""" .. container:: table-row Field stockprocessed Description/usage Indicates if the products that are in this orders were processed in terms of stock picking. .. _user: user """" .. container:: table-row Field user Description/usage Link to the FE user that placed the order (if any). .. ###### END~OF~TABLE ###### .. _Stock-movements: 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. .. ### BEGIN~OF~TABLE ### .. _Crdate: Crdate """""" .. container:: table-row Field Crdate Description/usage Date of the stock movement .. _Quantity: Quantity """""""" .. container:: table-row Field Quantity Description/usage Quantity, can be postive (input) or negative (output) .. _linkedproduct: linkedproduct """"""""""""" .. container:: table-row Field linkedproduct Description/usage Product for which this stock movement was performed .. _linkedorder: linkedorder """"""""""" .. container:: table-row Field linkedorder Description/usage If linked to an order, this is the order for which this movement was performed .. _reason: reason """""" .. container:: table-row 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 .. ###### END~OF~TABLE ###### .. _Delivery-modes: 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. .. ### BEGIN~OF~TABLE ### .. _Name: Name """" .. container:: table-row Field Name Description/usage Name of the delivery mode that will be displayed in the front end. .. _Name-internal: Name internal """"""""""""" .. container:: table-row Field Name internal Description/usage Internal name of the delivery mode, only used in the backend .. _Description: Description """"""""""" .. container:: table-row Field Description Description/usage Text description that will be displayed in the front end .. _Weight-grid: Weight grid """"""""""" .. container:: table-row 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: value\_min """""""""" .. container:: table-row Field value\_min Description/usage Minimum order value for this delivery mode to be active .. _value-max: value\_max """""""""" .. container:: table-row Field value\_max Description/usage Maximum order value for this delivery mode to be active .. _weight-min: weight\_min """"""""""" .. container:: table-row Field weight\_min Description/usage Minimum weight for this delivery mode to be active .. _weight-max: weight\_max """"""""""" .. container:: table-row Field weight\_max Description/usage Maximum weight for this delivery mode to be active .. _packing-weight: packing\_weight """"""""""""""" .. container:: table-row 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: default\_cost """"""""""""" .. container:: table-row Field default\_cost Description/usage If this shipping mode has a fixed cost, here it is. .. _free-limit: free\_limit """"""""""" .. container:: table-row Field free\_limit Description/usage If above a certain amount of products, the shipping is free, write it here. .. _countries: countries """"""""" .. container:: table-row Field countries Description/usage List the countries for which this delivery mode is available. If empty, it is valid for all countries. .. _tracking-url: tracking\_url """"""""""""" .. container:: table-row 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: Excludedproducts """""""""""""""" .. container:: table-row Field Excludedproducts Description/usage This is the list of products for which this delivery mode is not available. .. _Allowed-products: Allowed products """""""""""""""" .. container:: table-row 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. .. ###### END~OF~TABLE ###### .. _Suppliers: Suppliers ^^^^^^^^^ Suppliers are needed to follow the costs per supplier, but also to monitor supplier orders. .. ### BEGIN~OF~TABLE ### .. _Name: Name """" .. container:: table-row Field Name Description/usage Name of the supplier .. _Address: Address """"""" .. container:: table-row Field Address Description/usage Address .. _Comments: Comments """""""" .. container:: table-row Field Comments Description/usage Comments associated to the supplier .. ###### END~OF~TABLE ###### .. _Supplier-Orders: 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. .. ### BEGIN~OF~TABLE ### .. _Supplier: Supplier """""""" .. container:: table-row Field Supplier Description/usage Supplier linked to this order .. _Comments: Comments """""""" .. container:: table-row Field Comments Description/usage Comments for this supplier order .. _date-order: date\_order """"""""""" .. container:: table-row Field date\_order Description/usage Orderding date for this order. If not set, the order is not considered placed. .. _date-payement: date\_payement """""""""""""" .. container:: table-row Field date\_payement Description/usage Payment date for this order. If not set, the order is not considered payed. .. _date-reception: date\_reception """"""""""""""" .. container:: table-row Field date\_reception Description/usage Reception date for this order. If not set, the order is not considered received. .. _payableamount: payableamount """"""""""""" .. container:: table-row Field payableamount Description/usage Amount of the order (without VAT) .. _attachments: attachments """"""""""" .. container:: table-row Field attachments Description/usage Any number of attachments. Can be invoices, quotes, whatever. .. ###### END~OF~TABLE ###### .. _Order-History: Order History ^^^^^^^^^^^^^ Order history is used to track everything that happened with the order, which mails have been sent, etc. .. ### BEGIN~OF~TABLE ### .. _Crdate: Crdate """""" .. container:: table-row Field Crdate Description/usage Date the event happened .. _cruser-id: cruser\_id """""""""" .. container:: table-row Field cruser\_id Description/usage Back end user that performed the action, if any .. _order-id: order\_id """"""""" .. container:: table-row Field order\_id Description/usage Order to which the action is linked .. _Reason: Reason """""" .. container:: table-row 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: Details """"""" .. container:: table-row Field Details Description/usage If additional text comments or shipping or delivery notices were added, they will be available in this field. .. ###### END~OF~TABLE ###### .. _Price-lists: 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. .. ### BEGIN~OF~TABLE ### .. _product: product """"""" .. container:: table-row Field product Description/usage Link to the product for which this price list is valide .. _Price: Price """"" .. container:: table-row Field Price Description/usage Instanciated price for this price list .. _Taxgroup: Taxgroup """""""" .. container:: table-row Field Taxgroup Description/usage Percentage of value added tax that has to be applied for this price list .. ###### END~OF~TABLE ###### .. _To-do-list: To-do list ---------- .. _TCA: TCA ^^^ Implement product list in the supplier orders. Move products to xml structure, for possible future additions (options model maybe) .. _Global: 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: 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: 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: Practices and hints regarding the shop -------------------------------------- .. _Adding-a-discount-manually-to-an-order: 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: 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: 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: known issues and fixes, FAQ --------------------------- .. _generated: ((generated)) ^^^^^^^^^^^^^ .. _Shopping-cart-plugin-pi2-not-refreshed-in-due-time: 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: 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: 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: Change Log ---------- .. ### BEGIN~OF~TABLE ### .. _0-1-0: 0.1.0 ^^^^^ .. container:: table-row 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: 0.1.1 ^^^^^ .. container:: table-row 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: 0.1.2 ^^^^^ .. container:: table-row 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: 0.2.0 ^^^^^ .. container:: table-row 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: 0.2.1 ^^^^^ .. container:: table-row 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: 0.2.2 ^^^^^ .. container:: table-row 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: 0.3.0 ^^^^^ .. container:: table-row 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: 0.3.1 ^^^^^ .. container:: table-row 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: 0.4.0 ^^^^^ .. container:: table-row 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: 0.4.1 ^^^^^ .. container:: table-row 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: 0.4.2 ^^^^^ .. container:: table-row 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: 0.4.3 ^^^^^ .. container:: table-row 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: 0.4.4 ^^^^^ .. container:: table-row 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: 0.5.0 ^^^^^ .. container:: table-row 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. .. ###### END~OF~TABLE ###### .. ######CUTTER_MARK_IMAGES###### .. |img-1| image:: img-1.png .. :align: left .. :border: 0 .. :height: 44 .. :id: graphics5 .. :name: graphics5 .. :vspace: 57 .. :width: 161 .. |img-2| image:: img-2.png .. :align: left .. |img-3| image:: img-3.png .. :align: bottom .. :border: 0 .. :height: 360 .. :id: images4 .. :name: images4 .. :width: 478 .. |img-4| image:: img-4.png .. :align: bottom .. :border: 0 .. :height: 212 .. :id: images5 .. :name: images5 .. :width: 504 .. |img-5| image:: img-5.png .. :align: bottom .. :border: 0 .. :height: 475 .. :id: images6 .. :name: images6 .. :width: 479 .. |img-6| image:: img-6.png .. :align: bottom .. :border: 0 .. :height: 346 .. :id: images7 .. :name: images7 .. :width: 498 .. |img-7| image:: img-7.png .. :align: bottom .. :border: 0 .. :height: 443 .. :id: images8 .. :name: images8 .. :width: 506 .. |img-8| image:: img-8.png .. :align: bottom .. :border: 0 .. :height: 131 .. :id: images9 .. :name: images9 .. :width: 489 .. |img-9| image:: img-9.png .. :align: bottom .. :border: 0 .. :height: 124 .. :id: images10 .. :name: images10 .. :width: 124 .. |img-10| image:: img-10.png .. :align: bottom .. :border: 0 .. :height: 240 .. :id: images11 .. :name: images11 .. :width: 560 .. |img-11| image:: img-11.png .. :align: left .. :border: 0 .. :height: 201 .. :id: images32 .. :name: images32 .. :width: 669 .. |img-12| image:: img-12.png .. :align: bottom .. :border: 0 .. :height: 241 .. :id: images2 .. :name: images2 .. :width: 178 .. |img-13| image:: img-13.png .. :align: bottom .. :border: 0 .. :height: 519 .. :id: images16 .. :name: images16 .. :width: 441 .. |img-14| image:: img-14.png .. :align: bottom .. :border: 0 .. :height: 743 .. :id: images20 .. :name: images20 .. :width: 286 .. |img-15| image:: img-15.png .. :align: left .. :border: 0 .. :height: 50 .. :id: images33 .. :name: images33 .. :width: 264 .. |img-16| image:: img-16.png .. :align: left .. :border: 0 .. :height: 120 .. :id: images34 .. :name: images34 .. :width: 387 .. |img-17| image:: img-17.png .. :align: bottom .. :border: 0 .. :height: 124 .. :id: images3 .. :name: images3 .. :width: 123 .. |img-18| image:: img-18.png .. :align: bottom .. :border: 0 .. :height: 289 .. :id: images13 .. :name: images13 .. :width: 780 .. |img-19| image:: img-19.png .. :align: bottom .. :border: 0 .. :height: 164 .. :id: images14 .. :name: images14 .. :width: 562 .. |img-20| image:: img-20.png .. :align: bottom .. :border: 0 .. :height: 144 .. :id: images15 .. :name: images15 .. :width: 386 .. |img-21| image:: img-21.png .. :align: bottom .. :border: 0 .. :height: 238 .. :id: images17 .. :name: images17 .. :width: 769 .. |img-22| image:: img-22.png .. :align: bottom .. :border: 0 .. :height: 288 .. :id: images18 .. :name: images18 .. :width: 898 .. |img-23| image:: img-23.png .. :align: bottom .. :border: 0 .. :height: 194 .. :id: images19 .. :name: images19 .. :width: 430 .. |img-24| image:: img-24.png .. :align: bottom .. :border: 0 .. :height: 212 .. :id: images21 .. :name: images21 .. :width: 640 .. |img-25| image:: img-25.png .. :align: bottom .. :border: 0 .. :height: 360 .. :id: images22 .. :name: images22 .. :width: 537 .. |img-26| image:: img-26.png .. :align: left .. :border: 0 .. :height: 207 .. :id: images38 .. :name: images38 .. :width: 669 .. |img-27| image:: img-27.png .. :align: bottom .. :border: 0 .. :height: 146 .. :id: images23 .. :name: images23 .. :width: 318 .. |img-28| image:: img-28.png .. :align: bottom .. :border: 0 .. :height: 148 .. :id: images24 .. :name: images24 .. :width: 273 .. |img-29| image:: img-29.png .. :align: bottom .. :border: 0 .. :height: 148 .. :id: images25 .. :name: images25 .. :width: 95 .. |img-30| image:: img-30.png .. :align: bottom .. :border: 0 .. :height: 206 .. :id: images26 .. :name: images26 .. :width: 400 .. |img-31| image:: img-31.png .. :align: bottom .. :border: 0 .. :height: 271 .. :id: images27 .. :name: images27 .. :width: 643 .. |img-32| image:: img-32.png .. :align: bottom .. :border: 0 .. :height: 194 .. :id: images28 .. :name: images28 .. :width: 383 .. |img-33| image:: img-33.png .. :align: left .. :border: 0 .. :height: 510 .. :id: images36 .. :name: images36 .. :width: 190 .. |img-34| image:: img-34.png .. :align: bottom .. :border: 0 .. :height: 290 .. :id: images29 .. :name: images29 .. :width: 584 .. |img-35| image:: img-35.png .. :align: left .. :border: 0 .. :height: 444 .. :id: images30 .. :name: images30 .. :width: 669 .. |img-36| image:: img-36.png .. :align: bottom .. :border: 0 .. :height: 59 .. :id: images1 .. :name: images1 .. :width: 529 .. |img-37| image:: img-37.png .. :align: left .. :border: 0 .. :height: 118 .. :id: images31 .. :name: images31 .. :width: 587