RSS Feed c9 logo Australia's best motorcycle shop retail software
Terrible PayPal Support May 12, 2020 barney


Release 4.822 May 6, 2020 barney

Regression Bugfix : annual leave type as a selectable payroll item was accidently dropped when garnished wages option was added in. Fixed.  LEave computations etc are all good, just meant you were unable to manually fiddle this (typically only done when transitioning to c9 for payroll)

Release 4.821 May 4, 2020 barney

The PayPal Rest API release

C9 now supports Rest based API.

Switching to Rest  you will gain and you will lose.

Gain: More reliable and faster txn processing.

Lose: During checkout stage, customers can no longer be able pick freight option in paypal itself as the Rest API doesn't provide any facility for c9 to let Paypal know what freight options are. So freight in paypal will lock in and default to first freight option in c9 if you go for express checkout.  Once user navigates to freight page, if they change their freight option  the website will advise them they'll need to redo paypal to capture new shipping option.  If this turns out to be a negative user experience one option is to drop the express checkout option for paypal on first checkout page, instead force user to key in all their particulars and then pick paypal on payments page.

How to switch to Rest API.

In c9 : setup -> main setup screen -> paypal tab. Are two new fields, Client and Secret. You need to fill these in. Make sure you leave existing settings alone : as these are still needed to finalise any existing orders feeding through. For brand new sites, skip over these.

So need client and secret. How to get this.

Firstly you need to login to a developer paypal website. This is not your normal paypal website! Address:

Click on 'Log into Dashboard'

Then click on 'My Apps and Credentials'

Set your app name to be C9 Website and click on create app. Next screen you'll see client and secret. Copy these into c9.

Once done, wait a few seconds and then jump on your c9 website and do a test order

Note: if you are enabling Paypal for the first time, contact barney. Paypal integration requires another step to be performed on the webserver to make it all happen.


  • Removed delete units not imported in advanced fiche import options. This option is way too dangerous given little/no guarantees EPC datasets are easily accessible.




Release 4.820 May 2, 2020 barney


  • More paypal changes. C9 would incorrectly include 'completed' order and 'fee reversal' txns in its attempt to compute how much paypal reports is captured so far (since paypal doesn't provide this directly). Would result in incorrect computation, particularly with very old backorder finalisation an inattentive operator could inadvertently refund the entire sale when clicking through defaults.
  • Added new income GL code for government subsidies / payments
  • Bugfix with clearing surcharge lines  on unit deals. A surcharge line (persisted by rolling back a  straight sale into a deal which had a surcharge) would crash c9 and not allow you to refinalise the deal until the surcharge line is manually deleted. Now fixed.
Release 4.819 April 29, 2020 barney
  • Tweaks and fixes
    • Qld Rego forms : updated new reg form to latest
    • General Ledger : Added a couple of  GL codes to track income tax
    • P/L : trading statement : cost of consigned units was not included in trading statement and instead showing as a P/L line expense, now adjusted.
    • Add parts to workshop job.  Record clerk on the workshop spares record as the entering clerk, not the original booking clerk.
    • Orderbook locking : would display wrong franchise name on a lock event.  C9 would try to lock the correct franchise, but on screen whould show wrong name giving misleading feedback to operator. Now fixed.

Paypal issues

Once again paypal have made 'changes' to their backend that introduce regressions. You'd assume because they are wildly successful their technology is excellent. You'd assume wrong.

The issue:  c9 does three things when it talks to paypal to capture money. (This is only necessary because of other issues BTW, if their API was designed sanely this would not even be necessary). It:

  1. Gets a list of txns
  2. Posts a capture
  3. Regets a list of txns

Now step 2 to to 3, c9 assumed the txn you add in step 2 appears in step 3 straight away and made calculations based on this. As to two weeks ago this is not the case. Step 2 to 3 can be delayed by upto a minute. Txns you post are not visible when you query them initially. From a finances services systems architecture/design perspective this is quite an incredible situation. Yet here we are.... Again.

So previously, c9 would then try to recapture assuming the prior capture failed since the txn didn't appear in txn list. C9 can only assume sum of txns is what is in the list, but paypal doesn't give us the full list, or any other way to tell what has been billed so far. That capture would bork with an error. You'd need to bail out and reenter so c9 sees the eventually updated txn and computes things accurately.

So two things this ver of c9 now does:

  1. it provides a manual refresh button so you can refresh
  2. After you post a capture, c9 will go into an infinite loop  waiting until # of txns paypal reports is one more than what it was before. Until it does it stays in a retry loop. With a screen that looks like this:

So I contact PayPal to raise an issue. Their reply, 6 hours later: "due to coronavirus (COVID-19) safety precautions, we currently have limited customer service staffing".  Since this only started happening consistently two weeks ago, when we were already deep in the pandemic, so they have the capacity to make changes that inadvertently introduce regressions, but not fix them. Dickheads.




Consider the following set of variation data.

BLACK/BLACK 2113439 2113447 2113436 2113434
BLACK/GREEN 2113457 2113455
BLACK/ORANGE 2113476 2113474
BLACK/RED 2113450 2113448
BLACK/WHITE 2113443 2113442 2113441
BLACK/YELLOW 2113462 2113460 2113463


Focusing on part 2113441, which is SMALL BLACK / WHITE.  THere is no part which is BLACK / WHITE and XL:

BLACK/BLACK 2113439 2113447 2113436 2113434
BLACK/GREEN 2113457 2113455
BLACK/ORANGE 2113476 2113474
BLACK/RED 2113450 2113448
BLACK/WHITE 2113443 2113442 2113441
BLACK/YELLOW 2113462 2113460 2113463


So on website: when you drop down option, XL is greyed out. Because there is no way to get to it by changing size alone. For black white items : we only have LARGE, MEDIUM, SMALL. XL doesn't exist.

To work around this, whenever this happens on website  there is a dropdown called variations where you can eyeball stuff that is not directly reachable as matrix is not complete.


The variations drop down picks up anything which cannot be accessed at all from currently viewed part.


Consider this.

BLACK/BLACK 2113439 2113447 2113436 2113434
BLACK/GREEN 2113457 2113455
BLACK/ORANGE 2113476 2113474
BLACK/RED 2113450 2113448
BLACK/WHITE 2113443 2113442 2113441
BLACK/YELLOW 2113462 2113460 2113463

Yellow 2113411 is where we start.

Green parts are ones we can get to just by changing One thing, size or colour. So from 2113441 to 2113448 we change from black/white to black/red. Size stays on 'small'

Orange parts are ones we can get to by changing two things. So from 2113441 to 2113450 we need to firstly change size to 'LARGE' (2113443) then change color to 'BLACK/ RED'

The red item is all by itself there is no way to get to it. Even though it is flagged as a variation, it has nothing in common with other items at all. So c9 website parks it in its own 'variations' catchall group.


For variations you pretty much want a matrix where every cell contains an item.  IF this is not possible c9 does its best to create an interface which allows users to move to variations.



Release 4.817 & 4.818 April 8, 2020 barney

Payroll changes

  • Added a new Payroll item type + supporting GL codes: garnished wages for capturing child support
  • Bank rec add other : new txn type to bounce garnished wages clearing liability
  • Edit payroll records. Added alerts to steer users away from common input errors : -ve / +ve values for various payroll types and using advanced pay items without double checking.


  • KTM / Husky part image import. Skip over parts with placeholder image. mostly just straight up spares like screws etc and just clutter up the fitment web pages
  • add/edit Website menu. Add new option to configure sorting of items in menu by list price or part number. Only works for v3 websites.
  • Bugfix with recent multi image import support added for Fox. Was broken when reimporting fresh images : when reimporting would only grab the last image in the set (whereas a fresh import would work fine). Now fixed.
Release 4.816 April 6, 2020 barney

Tweaks and fixes

  • Import part images
    • Import images + metadata for Fox Racing for website content.  Better, faster and more detailed dataset provided by Fox Racing, instead of using the b2b portal. Among other things it grabs a detailed part description and supports multiple images per part.
    • Tweak WPS to grab part list & description over encrypted channel. (Low risk issue but since I made newly added Fox use encryption might as well tidy up WPS)
  • Bug fixes
    • Merge multiple pickups into one in point of sale. Base invoice would grab and apply original discounts, but the merged invoices by default would not have discount applied. Now fixed.


Aggregated C9 Client Data April 5, 2020 barney

This post will remain sticky for next few months. For recent updates scroll down further.

Updated 21-June


Release 4.815 March 24, 2020 barney

This version includes a couple of tweaks to make listing accessories on web a bit smoother / simpler. Specifically targeting Lusty.  Actual changes

  • Lusty img import : import 'brand' attribute as 'webbrand' so it doesn't conflict with 'brand' attribute on price file. They are coded differently so compete to update same attr and order of things of doing img import vs price file update can have inconsistent and unpredictable effects because of this.
  • Lusty img import : importing category attribute. Was being decoded poorly making website menu built from it a bit crap.  Now fixed ( lusty data uses '/' by convention for separating child menus, while c9 uses '|'.  Tweak code to make needed switcharoos).
  • A more complex change, difficult to describe but will instead describe its effect. On creating a structure now, with 'automatic' setting in play, it is now possible & easier to map parts in multiply ways.  For example with lusty you can map by brand and the category to create a shop by brand structure, but also simultaneously map by category only to flatten it out without regard for brand. (allow multi field partmapping to website. tweak matching against existing structure to be stricter and more correct, esp when partmapping is in play).

Other changes:

  • Stock take. On stocktake by partnumber provide option to key in part number ranges to stocktake. For dealers that substantially organise and stocktake by partnumber ranges (as opposed to bin locations).


« Previous PageNext Page »