Product lifecycle management with Plone

When I joined the Plone marketing team not so long ago and introduced myself to the rest of the team, we talked a bit about some of my recent fun experiences with Plone. We later decided that it would be a nice story to share here in the Hustle 'n Bustle category. So here goes :slight_smile: - Norbert

Plone at PNZ Produkte GmbH

PNZ Produkte GmbH, is a niche manufactory of oil-based paints and coatings, made from renewable resources. Next to its company brand product line, a substantial amount of business is generated from private label (PL) sales. These PL products are offered as a turn-key service: including promotional material, product information sheets and packaging. In some cases, the company also takes care of distribution and fulfillment of single quantity orders to end consumers.

A typical finished product will be derived from:

  • a base recipe which determines the ingredients, production methods, usage safety indications and applicable mandated regulations (e.g. GHS),
  • a master product which defines the application specifications, usage instructions, packaging sizes, pigments and other general use attributes,
  • an end product which includes branding characteristics, marketing descriptions, article EANs and other customizations.

Any base recipe can potentially power several master products, which in turn results in a large number of finished products. Products may be offered to multiple geographical markets, requiring that all information is translated. In the "recipe > master > product" definition chain, specific fields may override their parents.

Since 2015, Plone is used as the engine for creating and maintaining product specifications. About 20 employees (50% of all), in multiple departments, interact regularly with the software. The project received a “Digitalbonus” innovation award from Germany's Landesamt Oberbayern.

People using Plone at PNZ

Research and Development creates and maintains the base recipes. It will include the pertinent data in a "Base Recipe" dexterity content type. The documents then undergo a quality and regulations compliance control check before going through the Plone publishing workflow.

Master products are then created by R&D in conjunction with Sales & Marketing. This includes images of certifications and colortones. Again, using a "Master Product" dexterity type. The two images below give you an idea of the kinds of information that goes into a master product.

In separate processes, Sales & Marketing will also create "Brand" and "ExtendedImage" objects. The former include the customer logo, contact information and additional internal attributes. These additional attributes may relate to the customer's online shop, "Safety Data Sheets" management software, an ERP backend, as well as any specific view templates for the production of PDF information sheets or colortone sampler (using wkhtml2pdf and Produce & Publish). The ExtendedImage content type is a custom Image type which contains additional fields such as image type identifiers, use restrictions, and a datagrid field that links a customer with a customized brand-specific colortone name.

Translators can then translate the base recipes and master products so that they become available for the creation of finished products in multiple languages.

Plone & Pootle

PNZ uses pootle to maintain a corpora of terms and sentences, which is synched back to Plone. In-house native speakers can translate directly in pootle / Plone. Although an attempt was made to use ZEO and give access to agencies, external translators seem to prefer exported Excel worksheets. We now provide them with single sentence exports and import their work back into pootle. Many sentences are repeated across content types, and keeping those separate has helped tremendously in terms of quality control.

As content types make heavy use of language-independent fields, only part of the content needs to be translated. Translation of selection field values is maintained in pootle and kept synchronized with Plone's pot, po, and mo files which reside in a policy package. A total of ten languages are currently being used by the system.

“Finished Product” as a source for end-user exports

Finally, a "Finished Product" content type includes any information which has not yet found its way in the product definition. A datagrid field here allows users to select from the available color / package size combinations from the master product, and assign individual article numbers. This allows for linking back into an ERP system and for the generation of XML product / article templates to be used in Adobe InDesign for the production of can labels.

At this point, Creative Designers can access Plone to generate XML documents and the necessary images for a single product, or for a full range of any brand. The documents are exported to the filesystem, including images of warning signs, certification labels, colortones, and generated EAN codes. InDesign templates then access the information and images referenced in the XML and update the design. The designs are then saved as ready-to-print PDF templates.

Since they often produce small batches, PNZ has its own in-house printing department. They access Plone to spot-check the information on the PDF templates with what is contained in Plone.

Other types of exports include the generation of raw html and images for use in a PlentyMarkets shop, the aforementioned generation of PDF product information sheets, and the creation of Product Information Management (PIM) CSV files for large customers. These CSV data sheets are produced by linking Plone with an intermediary MySQL database which is fed from the ERP system.

Finally, using plone.restapi, the system is powering the product catalog of PNZ's soon to be relaunched public facing website (of course itself also using Plone).

Designing and developing this system together with the wonderful people of PNZ has been a fantastic learning adventure for me so far and something I continue to enjoy working on each day. Thanks to Zope and Plone!


4 posts were split to a new topic: Import from CSV into DatagridField