For all PrintIQ Academy Content please click here
Who are printIQ?
printIQ is one of Infigo's Premium Partners. Based out of Australia the team at printIQ specialise in Print MIS, Workflows, Estimating and Print Management. They have built their own sophisticated MIS and we have built a plugin that integrates with it.
You can find out more about the company and their software here
Our integration
Below is a brief outline of the capabilities of the Connect: printIQ plugin.
- Enables users to fetch a price back from printIQ on-demand for a specific Product Code, which can then be displayed your storefront's product landing page for the end user.
- Product sync capabilities, allowing users to create and update products in Infigo from printIQ. This supports both print-on-demand static PDF products and stock/inventory items.
- Multiple modes for placing orders for multiple line items in Infigo, and have them create quotes in printIQ.
- Accept shipped statuses back from printIQ, storing the tracking number to be distributed in the Infigo Shipped notification to update the customers that their order is on its way.
-
Infigo requests on-demand inventory levels for a product when it is displayed to the customer.
Basic Setup
Our printIQ plugin is a paid module, so if you are interested in purchasing it please reach out to your Customer Success Manager and they can provide you with the pricing and get you setup.
Once the plugin is enabled the initial setup process is very simple:
- Enable the plugin. Simply search 'Connect' in admin and it will return two results that you need
- Connect Settings - Open this page in a new tab and Under the list of Enabled MIS Plugins you should see 'printIQ' ensure that this is checked.
- Connect Plugins - Open this in another tab and here is where you can start configuring the connection
- Start off by entering in your printIQ instance URL, and then you need to fetch a username, password, application name and application key - all of which can be provided to you by printIQs support team.
- Once you have entered this information you can now check the connection to ensure everything is how it should be. To do this click 'Back to plugin list' and then next to the printIQ plugin click on 'Check Connection'. If everything is correct you will see a green popup appear with a successful connection message. If a connection cannot be made then you will see a failed red popup appear and something is not quite right with the details you have entered. If you are struggling then please raise a ticket with the support team and we can assist you.
Mapping Customers
Every customer in Infigo that will be placing orders needs to be mapped to a printIQ Customer Code.
To do this, simply create a customer in Infigo (checkout our article on creating customers) or take an existing customer and click Edit. Once in the customer record, on the info tab, scroll down to find our Magic Green Button - 'Infigo Connect Link' - Keep an eye out for this guy throughout admin, he will be your best friend when setting up an MIS plugin in Infigo.
Click the green button and in the popup you can enter in your printIQ Customer Code. This code will be passed into printIQ with every estimate and order that this customer places in Infigo.
If you do not wish, or need to have individual Customer Codes per unique customer you can set a storefront default customer code as described in this section.
Mapping Products
Very similar to the process of mapping customer, every product needs to have a printIQ product code or SKU assigned to it.
There are many ways to do this, each time just look for the Green Button:
- You can add your products to a Product Group and assign the Product Group to a printIQ product code, therefore every product in that Product Group will inherit that printIQ product code.
- Directly on the product variant
- Create attributes, assign them to the product and then create Attribute Combinations and assign a printIQ product code to the Attribute Combination.
Mapping Shipping Options
If you offer shipping options in Infigo and want that information to be passed into printIQ we offer the ability to setup simple mappings from a Infigo shipping option to a printIQ shipping method.
To do this you need to go back to printIQ Connect plugin configuration page (As shown in the Basic Setup step) then scroll down until you find the Delivery Settings section.
Clicking 'Add new item' for the Delivery mapping table allows you to start mapping your Infigo Delivery Options you have created to PrintIQ Delivery/Shipping Types.
The Key is the delivery method system name for your Infigo Delivery Method (you can find this on any Delivery Computation Plugin you are using - click shipping options at the base of the page and then from the list select the ShippingMethodSystemName)
The Value is the name of the PrintIQ Shipping Type and will be the value that we pass into printIQ with the quote request.
View from PrintIQ of Delivery/Shipping Types
You can continue to add as many of these as you need.
We also allow for you to pass the Infigo Delivery By date into printIQ, if you wish. If this setting is disabled we will not pass it and so therefore printIQ will determine the timings as part of the quote and the job. If you do send it then we will override what printIQ might have set with the date that we send it from Infigo. See our article on Delivery and Production restrictions for more information.
Creating Invoices
We support passing invoice and paid flags into printIQ for each job which you can configure as part of the plugin on a storefront wide basis.
If you wish to have Infigo tell printIQ to create an invoice for ALL jobs placed then you need to enable the settings called 'Create invoice for all jobs in printIQ'.
When the job comes into printIQ and this setting is enabled it will look like this:
Marking jobs as paid
printIQ has a flag against a job that is used to determine if that job has been paid for or not.
We have added support for passing this information with the job request from Infigo at the point when the order is confirmed on the storefront. The setting that controls this is called 'Send Jobs marked as paid' and it is a drop down with the following options, which each option controlling how that information is passed into printIQ:
- Never - When this is set we will never mark a job as paid in printIQ so all will come through as Paid - No.
- Always - When this is set we will always mark a job as paid in printIQ so all will come through as Paid - Yes.
- Always except when Purchase Order payment - When this is set we will mark all jobs as paid in printIQ EXCEPT when a customer uses the Purchase Order payment type. For example, if you offer credit card and PO as payment options on the site then we recommend setting it to this option as it will pass into printIQ the job as paid when the customer has paid upfront on the site for the order using PayPal, SagePay, Authorize.Net etc. but for the orders where they have selected Purchase Order it will mark it as unpaid and allow printIQ to invoice and charge for it later.
Tax Codes IMPORTANT
It is important, when handling tax codes that the configuration and setup of the tax codes in both Infigo and printIQ is consistent.
In Infigo these are our Tax Categories.
In printIQ they are their Tax Codes.
And we match them on name so it is important that your Infigo Tax Categories and your printIQ Tax Codes match by name exactly.
Checkout our article on setting up your Tax Categories here.
Within the printIQ plugin we also allow for you to specify a 'Fallback Taxcode'. This value will be sent with every job where the product they are ordering does not have a tax category assigned to it in Infigo. So again, it is important that this Tax Category name exists as a Tax Code in printIQ.
Sending Additional Job Reference information
We support the ability to send additional Job Information with every job using printIQs Job Reference fields.
To do this you need to first enable the setting in the printIQ plugin configuration called 'Send additional Reference Fields'.
Once enabled you will be presented with a mapping UI that will allow you to determine what Job Reference field in printIQ information is passed into, and what value we pass for that reference.
First, click on the 'Add new item' button. This will then present you with two paired text fields. The 'Key' which is the name of the Job Reference Field as it appears in printIQ exactly. And the 'Value' which you should populate with an Infigo placeholder(s) to build up the value you want to be passed.
Checkout how to use placeholders here.
You can add as many Job Reference field mappings as you need, however please bear in mind, that for each Job Reference field mapping you include we need to make an additional API request to printIQ so the more you add the more it could impact on performance.
Other Configuration
Found at the bottom of our printIQ Connect Plugin configuration page we have a number of other configurations that you can set, all of which act as storefront wide settings:
- General Account Manager ID - This should be populated with the printIQ Account Manager ID that you want to be passed with every quote request. If you require this to potentially be different for different users placing an order then you can use Departments in Infigo to group the users and then set the printIQ Account Manager ID as the External ID of the department (Using the Green Button), that will be used as an override for this setting and be sent instead.
- Customer Reference Type - We pass a CustomerReference field in with the quote request to printIQ and this setting lets you determine whether we pass the OrderID or the PO Number (if using PO as a payment method) for this value.
- Default customer code - This value is a Storefront default, fall back Customer Code that is used when an order is placed by a customer that doesn't have a Customer Code assigned directly to them (as part of this section).
- Delivery Notes Checkout Attribute & Special Instructions Checkout Attribute - These last two fields are both mapping fields. If you want to allow for the customer to add notes about the order in the basket then you can create a Infigo Checkout Attribute. Once you have created one, you need to put the name of that attribute into one of these fields depending on how you want it sent to printIQ. We then simply pass whatever the customer enters into that Checkout Attribute as a Delivery Note or a Special Instruction depending on your configuration.
Webhook - Status Updates
As mentioned we support Shipped status updates back from printIQ once the job has been set as dispatched in printIQ. In order to make this possible printIQ need to setup a webhook to pass the information back to us. At the bottom of the printIQ Connect Plugin configuration page there is a Webhook Link which we need to provide to the printIQ team. A request to either us through our Support Desk or directly to printIQ can be made to start this setup process.
As part of the information sent back from printIQ we will capture the value from the Connote field (Products[].AcceptanceProductDeliveryDetails.Connote)
which will contain the Shipment Tracking Numbers. And when Easypost is used in the printIQ instance we will also capture the Consignment Tracking URL (Products[].ConsignmentTrack.Consignments.Trackers[].TrackingURL).
We will store these against the order in Infigo and they can be viewed in all the regular tracking URL locations (My Account, Sales > Orders, shipped notifications etc.)
Attached is a sample payload sent back from printIQ of the Despatch Status Update (UpdateDespatchStatus.json). First we filter by the 'Dispatched' and then we will set the corresponding Job/Order to shipped in Infigo.
NOTE: As you can have multiple storefronts sending orders into printIQ, and printIQ only supports sending status updates back to ONE URL, we need to configure a 'Master' Infigo storefront. This identifies which one of your storefronts should be used for status updates, and will be the URL provided to printIQ when setting up the webhook.
To identify this in Infigo you need to ask an Infigo Support team member to enable the 'mispluginsettings.storefrontmasterids' setting, providing them with the storefront that you want to make as your master storefront.
Product Sync
The purpose of this feature is to create and update products in Infigo from printIQ.
This supports both print-on-demand static PDF products and stock/inventory items.
The concept is that when a product is created or updated in printIQ, a webhook will be triggered from printIQ sending a product payload to Infigo. Infigo will then parse the information and either create or update the relevant product in the relevant storefront.
The plugin introduces the concept of a blueprint/master product and category to be created and configured so that the display of the products and categories created from printIQ can be controlled to a certain degree. Options like display settings will then be copied over to the new products and categories.
Inventory Products
The below table describes the mapping from the printIQ payload into Infigo for Inventory products, demonstrating the information that is captured and how it is used.
printIQ | Infigo | Comments |
SIName | Product Name | |
SIDescription | Product Description | |
SIActive | IsActive | true = enabled, false = disabled |
SIAllowBackOrders | BackOrders |
true = Allow qty below 0 false = No backorders |
InventoryItem.IICode | Product External ID | Yhis will be used as the key mapping between the product in Infigo and the product in IQ. When GetPrice is called to obtain a price this is the product code that is passed, likewise when the order is placed. |
InventoryItem.IICode | SKU | |
InventoryItem.IISingleUnitWeight | Product Unit Weight | |
InventoryItem.ItemWidth | Product width | |
InventoryItem.ItemHeight | Product height | |
InventoryItem.ItemDepth | Product depth | |
InventoryItem.ItemDefaultLocation | Item Location | Not supported |
InventoryItem.ImageFullFilePath | Product Image | Will be displayed on the product landing page and in the product teaser on category pages |
Categories[] | This section details the category structure that needs to be created/updated related to that product | This object will include an array of categories for the entire tree structure |
Categories[i].ID | Category External ID | |
Categories[i].Name | Category Name | |
Categories[i].ParentID | External ID of parent Category | Used to assign the category to a parent category to create the hierarchy |
Categories[i].Description | Category Description | |
Categories[i].ImageURL | Category Image | |
Categories[i].Level | A numerical representation of the hierarcy of that category |
Level 0 is always the value of the category where the product is assigned. Any parent categories are then represented with a negative number for each level up (0 = product category, -1 = parent, -2 = parents parent) The top level category (i.e. the lower number) this would be the storefront (Categories[i].Name = storefront external ID) |
Static Print-On-Demand products
The below table describes the mapping from the printIQ payload into Infigo for Static PDF products, demonstrating the information that we capture and how it is used.
printIQ | Infigo | Comments |
Name | Product Name | |
Description | Product Description | |
QPDActive | IsActive | true = enabled, false = disabled |
ProductCode | Product External ID | |
ProductCode | SKU | |
Weight | Product Unit Weight | Always in grams |
QPDMinOrderQuantity | Minimum basket quantity | |
QPDMaxOrderQuantity | Maximum basket quantity | |
ThumbnailURL | Product Image | |
PricingItems.SPQuantity | Quantity Tiers | If the pricing method is not set to ‘Each’ for the product in printIQ we will create the relevant passed quantity tiers so that customers can only order in those quantities. |
TreeNodes[] | This section details the category structure that needs to be created/updated related to that product | This object will include an array of categories for the entire tree structure |
TreeNodes[i].ID | Category External ID | |
TreeNodes[i].Name | Category Name | |
TreeNodes[i].ParentID | External ID of parent Category | Used to assign the category to a parent category to create the hierarchy |
TreeNodes[i].Description | Category Description | |
TreeNodes[i].ImageURL | Category Image | |
TreeNodes[i].Level | A numerical representation of the hierarcy of that category |
Level 0 is always the value of the category where the product is assigned. This will also act as the storefront filter to determine which storefront that product should be created/sync’d on. The lowest level must match the Storefront External ID. |
ArtworkURL | Dictates if a static PDF product should be created (if there is a valid URL set) or not (if the value is empty/null) |
NOTE: If the Print IQ product contains multiple sections and therefore multiple PDFs we will not pull these into Infigo and treat the product as a inventory stock item. Only when the artwork is a single section, single PDF static product we will create a static PDF product in Infigo.
Important notes
The category structure of the products is passed from printIQ to Infigo as per the table above. It is important that the category structure in printIQ is correctly setup as this will be represented in Infigo.
It is also important to note that, due to the nature of multiple storefront setups adopted by many users, that the very top level category in printIQ is named the same as the Infigo Storefront External ID. This is used in Infigo to determine which storefront the product is subsequently created and updated on.
Products are created with a free type quantity box for all products in printIQ that are setup with a pricing method of ‘Each’. Otherwise, if a quantity exists against a product, we create quantity tiers in Infigo for each quantity and ignore any pricing that is stored in Infigo which retricts the end user from being able to order that product apart from only in those specified set quantities.
Pricing should be held solely in printIQ and Infigo requests this via the GetPrice API.
Live Inventory
Infigo requests on-demand inventory levels for a product when it is displayed to the customer.
In order to reduce the amount of requests made to printIQ, Infigo creates an inventory short lived cache that is populated with the inventory of each response from printIQ.
When retrieving the inventory levels for a product, Infigo first checks the cache for a valid match and if found uses that.
Otherwise, Infigo makes a request to printIQ for the inventory and populates the cache with that response to be used next time. This improves the performance but still allows it to be accurate.
The temporary cache for a particular product is invalidated each time that product is ordered in order to force the next request for inventory for the product to be requested from printIQ directly to ensure it is accurate.
Infigo also includes an Inventory validation step prior to the order being placed to ensure that the inventory levels are still available to be ordered.
For orders that are going through approval, Infigo has created a permanent cache for ‘On hold’ stock levels.
When an order is placed and it is going through approval, Infigo writes that stock amount to the on hold cache – which means it is temporarily on hold – once the order is confirmed that cache quantity is removed and the order placed.
Infigo checks this cache and considers it when displaying the live inventory stock levels on the website.
Example:
Product A currently has 50 items that have been ordered but are awaiting approval.
Customer lands on Product A page and Infigo requests Inventory levels from printIQ.
printIQ returns an Inventory quantity of 135.
Infigo then checks the on hold cache and finds a count of 50.
Infigo then takes the printIQ Inventory quantity and deducts the on hold cache count and displays the result of 85 available stock to the customer.
Live Pricing
As part of the integration we also support fetching a price directly from printIQ in the form of an estimate.
So instead of having pricing stored and calculated in Infigo, we will make an API call to printIQ passing the product code and quantity, and in return we will retrieve an estimate cost back which will be displayed to the user.
In order to configure this you simply need to enable two settings:
1. Navigate to Quote Settings in admin
2. Enable 'Create quote automatically'
3. Enable 'Keep quote reference when ordering'
Currently we do not support requesting a new estimate and price from the shopping basket, this only works on the product landing page. Therefore we suggest you disable the Cart/Basket Setting 'Allow editable quantities' so that your customers cannot amend the quote once it is added to the basket.
NOTE: only pricing at a SKU to SKU mapping level is supported currently.
Setup steps for Product sync, inventory lookup and live pricing
Here, we detail the setup steps required on each storefront in order for the product sync, inventory lookup and live pricing all to work in tandem as expected.
Create a master product
Start by creating a master product, name it however you wish but make it identifiable as you will need to locate it later when configuring your printIQ plugin settings.
Ensure the following settings are configured on that master product
- Require Quote (enabled)
- Show price as order total (if want to do this) (enabled)
Create the master product as a static pdf product. This allows you to cater for the sync creating both and being able to configure the static PDF settings of the product too.
NOTE: All settings set against this master product are then used as the default settings for all new products that are created via the sync. Information that is then provided from printIQ, as detailed in the tables above, will then be used to overwrite the default configuration where applicable.
Not included in the inheritance from the master are attributes, required product mappings, category mappings and related product mappings.
Create a master category
Far simpler than the product setting but the same principles apply. The master category is there mainly so you can configure your display settings against it so it appears as you wish on your storefront.
Configure your storefront
Detailed below is the configuration required prior to running a product sync or utilising the storefront.
Quote Settings:
- Create quote automatically (enabled)
- Keep quote reference when ordering (enabled)
Connect Settings:
- Connect Plugin to Handle Stock (Connect: printIQ)
- Master Product mapping (select master product from drop down)
- Master Category mapping (select master category from drop down)
- Sync Print on Demand products (enabled)
- Sync stock products (enabled)
- Failure email (set to an email address to notify someone of a sync failure)
Connect: printIQ plugin Settings:
- Base 64 token
- Use getPrice instead of createQuote (enabled)
Webhooks in printIQ
In order for information to be passed from printIQ into Infigo you need to request your printIQ account manager to create and setup 3 webhooks that will be triggered based on different events within printIQ.
Sync static PDF (print-on-demand) Products
The first is the static pdf product sync webhook. You need to provide the webhook link URL to printIQ which can be found within the Connect: printIQ plugin in your Infigo admin.
It will look something like this:
https://yourinfigostorefront.com/mishandler/2/Mis.PrintIQ/syncprintondemandproducts
Sync Stock Products
The second is the Inventory Items product sync webhook. Again, you need to provide the webhook link URL to printIQ which can be found within the Connect: printIQ plugin in your Infigo admin.
It will look something like this:
https://yourinfigostorefront.com/mishandler/2/Mis.PrintIQ/syncstockproducts
Status Updates
Finally, the third webhook is for sending shipped status updates back to Infigo so that the jobs and orders can be marked as shipped and the end customer notified.
This webhook link URL looks something like this:
https://yourinfigostorefront.com/mishandler/2/Mis.PrintIQ/syncstockproducts
Custom Quoting
A new addition to our PrintIQ integration is the ability to do advanced mapping between Infigo attributes/values to PrintIQ sections, sides, operations, colours, stocks, job operations etc. to create a custom quote.
NOTE: Need to be on version 48 of PrintIQ to use this
Data sent to IQ
Attached is a SAMPLE.json file which demonstrates the data that is sent through to printIQ when an order is placed.
0 Comments