RSS Feed c9 logo Australia's best motorcycle shop retail software
Aggregated C9 Client Data April 5, 2020 barney

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

Updated 10-Aug


Release 4.582 September 23, 2020 barney

Not yet released. Sometime soon.

  • Tweaks and fixes
    • Newly added is c9 up-to-date widget would not trigger a refresh on closing / reopening c9 ; resulting in possibly misleading / confusing status on reopen c9.  Tweaked to force a recheck on opening c9 again.
    • Memory leak issue : looking at EPC diagrams in c9 would slowly eat memory until c9 runs out and complains.  Now fixed.
Release 4.851 September 21, 2020 barney

Includes database changes. You'll need to log all terminals out during upgrade

  • Tweaks and fixes
    • Import price file auto flag unimported parts as NLA : low level process for this was too slow/inefficient. Replaced with a different approach that is hopefully better/faster
    • Ancillary surcharge tax invoice for backdated surcharges : was not being written with backdate but resulting journals / activity records were fine. Now fixed
    • More Toro pricefile import dramas. Subtle issue where if part numbers previously imported + order of parts in pricefile + some non deterministic behaviour with postgres bulk insert order would, if lined up just so, result in Toro pricefile failing to import. Hopefully fixed now (too complex to document reasons but resolve_pricefile_dups proc which was responsible for wrangling dashes in toro file into something sane would misbehave and fail to de-duplicate these part numbers in some cases and would run into dup constraints on masterfile).
    • C9 Status bar.  Now shows update / upgrade status of c9 . So no longer rely on logout / login to receive alert of a new c9 pending.

  • Internal changes
    • SMS billing tweaks to help us speed up some administrative processes here. No functional changes.
Release 4.849 & 4.850 September 16, 2020 barney

Includes DB changes. You'll need to log all terminals out during upgrade

Price File Changes

This version of c9 introduces a new concept for tracking NLA parts.  Price file importing and management will now explicitly track NLAs and you will be able to easily filter / hide / manage NLA parts in c9 so you will have a reasonably decent visual indicator on screen whether or not a part is likely to be supplyable and are not tripping over lists of long unsupplyable items such as seasonal race apparel.

NLA tracking recognises two types of NLA

  • OEM / Hardpart NLAS :  stuff the factory no longer produces but is still valuable / important. You generally need to be able to see it, be aware of it but be able to quickly see it might be a problem to source.
  • Accessories / Merchandise NLAs :  stuff that is NLA but generally is just accessories / merchant and / or stuff which substitutes easily exist.  Seasonal gear, apparel & protection, aftermarket hardparts etc etc

NLA stuff is best managed via c9 repo so it can only really work with suppliers that are in c9's repo. There is tooling in c9 to do it yourself from price files but it is a fiddly process that is easy to get wrong so we are not going to really press / document these minutiae of this.

Next few price files uploaded into c9 repo will be bigger than usual, as new NLA datasets propagate through into your running c9.

Screenshot of new F2 screen for KTM franchise, NLA parts are now in grey.

C9 repo has bee preloaded with NLA data for following suppliers: KTM, Husqvarna, Honda, Yamaha, Suzuki & Mcleods.  Other suppliers will be added incrementally as new price files are provided.

Actual Changes

  • NLA related Price file changes
    • track status field to track NLA.
    • track import processes that 1) initially create a price file record and 2) update it. No functional usage for this yet but will come later. e.g. will open up ability for c9 to nag you when other c9 dealers have updated their pricing if you are relying on their pricing data via import price file from other c9 dealers.
    • F2 select any part
      • NLA parts are colour coded grey
      • New option  to filter NLA parts on screen
    • Edit Franchise
      • New advanced option to perma filter out NLA parts for selected franchise
      • New website option to filter out NLA parts on website
    • Edit price file option
      • Ability to manually toggle price items status
    • Unrelated price file import changes
      • If c9 has has a packqty set do not overwrite it with 0 if new price file has pack of 0 or doesn't set pack at all
      • IF new price file's list price is $0 do not override existing list price in c9
    • C9 Repo
      • Option to ignore new NLA parts. If your c9 already knows about the part, bring it in anyway to update its details, but if it is brand new don't bother dropping it into your c9 at all
    • Import price file for generic, OPEA, C9 and Suzuki.  Access advanced options to fine tune NLA importing yourself.
    • add new barcode. Make sure status is flagged as manual
  • Web content / mapping changes
    • Webcontent is now linked to part number, not stock record, price file record. Means you can delete part from stock but webcontent is retained
    • Part mapping to website is now consolidated to map same for both stock and master file records. This allows unstocked parts to be individually mapped to multiple locations just like stocked parts.
    • Manage web items has had a bit of a refresh. Mapping parts from here is now straight forward.
  • Other changes in this version of c9
    • Stock take sheets : visual bug fix. When there are items on reserve would incorrectly print qoh # as reserve #. Now fixed
    • Regression fix on part buy sell. Was not displaying supplier receive inv no. Now working again (looks like this was broken back in December last year. Bug only noticed now)
    • Online backup.  A bug / issue when doing a restore from online backup.  Online backup restore does progressive restore : so it restores enough info to get back up and running as fast as possible then does progressive restore of less important / historical data afterwards. Recent backup changes impacted how this worked. For EPC data that is progressively restored, the restore would work but it would then try to then re-backup newly restored data . So it would unnecessarily try and loop this data back to cloud backup, causing cloud backup to be unnecessarily rewritten. Generally should but okay other than increases network traffic, but it does create an unacceptable risk touching up the online backup data. The less backup data is touched the better, especially during a restore operation.
    • Whites Powersports Magician. For some parts WPS system does not send back a reply. C9 was incorrectly just echoing the last WPS response instead of responding with blank data: which could mislead operator into thinking stock was available when it is not. Now fixed.
    • added HD into list of magician suppliers that can be used for website integrated HD queries.
    • Deal unit tweaks : changing model year on unit on floor was not updating model year in the deal.  Now fixed.
    • Bugfix with toro pricefile importing. De-duplication logic for part numbers was busted. Now fixed.
    • From view franch screen, if the franchise has a linked supplier have an option to access supplier details from here.
    • Typo fix on purchase unit screen.


Release 4.848 September 4, 2020 barney

Couple of tweaks with this one

  • Bank rec again : couple of ergonomic changes to deal with discordant delete txns
    • For cash till counts, default discordant deletes as already being dealt with. For bank rec/ cash rec old behaviour of defaulting to '-' unreconciled will remain. This will mean cash tills will generally push through alot easier for guys who don't really worry too much about formal reconciliation
    • On bank rec save error because of unreconciled discordant deletes  : warn  user exactly why the save failed, instead of vague 'verification error' message
  • New Harley EPC importer added for importing EPC stuff from h-dnet portal. At this stage it doesn't bring in hotspot data (there really isn't any but possibly in future we might be able to extract it from SVG images), also it only imports models from 2000 onwards. Since alot of mid 90s models and models before are not digitized.


Release 4.847 September 2, 2020 barney

Includes DB changes. You need to log all terminals out during upgrade

Bank Rec / Cash Rec/Till tweaks and fixes

  • The bank rec screen would sometime show unexpected / random alt codes in the Src field. e.g. you expect to see Rebate Income, but it shows GST owing. Visual display bug only. Now fixed.
  • Removed some non functional / residual code linked to old bank rec mechanisms. Not impactful except maybe made new recs a tiny bit slower to save. More cleaning out unneeded junk

A new bank rec needs to cross check with prior bank rec to figure out what is held over, ignored etc to deal with in this new rec. The algorithm to figure out which rec to use is complicated by fact that recs can cover overlapping periods etc. Older versions of c9 simply grabbed the most recent rec that happened to start before period we are recing. But this was highly problematic because if you redid an ancient rec, this rec would become the latest, even if it was months/years prior to next period to rec.  A proper algorithm needs to consider the most recent rec only if it recs upto the last txn prior to new rec period, otherwise it needs to get the rec that comes closest to beginning of new rec period.

But an issue here: it is possible to do a bank rec where you set to date into the future. So this becomes a rec which is opinionated about closing balance it cannot possibly know.  Under some circumstances things could line up and these recs would get selected dropping in a massive tonne of discordant txns since every legit txn that happened after it was created would be from point of view of this rec, be a rec breaking txn. So tweaked algorithm a bit to generally ignore / distrust recs that claim to know more than a day into future except under some special/specific circumstances (e.g. when we are recing from a period we know happens to be on or before the recs creation date).


Websites have just had a big refresh applied targeting performance.  First big performance review since going to V3.

Design goal of c9 is for every page to load at 0.1 seconds or faster.  Some creeping performance losses over last 12 months have now been improved. Some pages, such as looking at a single part, were taking about 0.3 seconds, x3 what I'd normally like.

So comparison of website performance for a c9 website. Navigating from home page to an assembly. Comparing to a dealership with diagrams on their website but use a competitor product, not c9.

C9 website:  71ms (brand) + 77ms (year) + 85ms (model) + 151ms (assembly) = 0.384 seconds to get to the assembly

Non c9 website: 817ms (brand) + 659ms (year) + 2044ms(model) + 2140 (assembly) = 5.6 seconds to get to the assembly. Nearly x15 slower


Positive website experience relies on website feeling fast. Alot of things we do at c9 to help achieve this.

  • Host servers in Australia (in a data center in Sydney). Physically closer they are to you the better. That time to cross an ocean if hosted in US or Asia makes a big difference to website performance.
  • Dedicated Hardware hosting. Cheaper option is to use virtual hosting but generally is alot slower
  • Alot of work to make sure the database that powers the website is tuned and does its jobs very efficiently



Release 4.845 & 4.846 September 1, 2020 barney

This version includes database changes. You need to log all terminals out during update.

This version of c9 increases part number maximum length from 20 to 35 chars, to accommodate CF-MOTO and a couple of other suppliers that use very large part numbers.

Minimal effort has been put into tweaking reports etc so really long part numbers will overprint / underprint depending on the specific report. Tweaks will be made gradually over time to tidy as strictly needed. Most screens have been modified where possible to display longer parts.

4.846 : is a patch that is relevant here. Looks like DB changes are so heavy in 4.845 that it messes up statistics that PostgreSQL builds up to figure out best way to grab data from DB. Result is things that normally are instantaneous like lookup a part take forever. Normally this sort of thing fixes itself eventually. But 4.846 includes commands to tell DB to explicitly regenerate stats to avoid this issue.

Release 4.844 August 20, 2020 barney

Includes DB changes you need to log all terminals out during upgrade

Bank Rec / Cash Rec overhaul

This version of c9 substantially overhauls how bank rec / cash rec is managed.  Previous implementation for bank rec / cash rec internally is quite complex and baroque. These changes seek to simplify things significantly, mainly to simplify transition/migration to the v5 based GL. So changes here are mostly technical but there will be some functional niceties here too, especially around reviewing / analyzing past recs. Also some bug fixes.

At its core rec boils down to three things.

  • A record of a reconciled period and list of txns that fill that reconcile.
  • Ability for the system to quickly / easily identify if a previous reconciliation has been damaged in some way. e.g. a backdated txn, a modified txn, a txn that was adjusted and in / out of the rec period.
  • Ability to identify exactly what txns triggered the damage

A few nice things this version of c9 will deliver

  • C9 will no longer care if you make historical changes but then backfill them. For example, undoing a workshop job and then redoing it for exactly same amount. Previously this would cause cash / bank rec to bark. Now it will be fine with it. As long as the net balance remains the same, bank rec will be happy.
  • Browsing previous bank recs / cash recs will be tidier / easier to navigate and learn useful things from, including display of txns that damage a rec, if it is indeed damaged.

The migration to this version of c9 will try as much as possible to reconstruct this rec data from prior rec database structures. But prior structures were imperfect for the task. Migration impacts:

  • Will accurately track whether or not all past reconciles are valid or damaged
  • Will attempt to detect which txns contribute to a damaged reconcile, but will not be able to do this perfectly. Moreso with historically old bank recs : so less of a concern. Functionally accurately identifying issues with last rec is most important for smooth transition to new rec system.
  • Some bugs in existing system will trigger some old recs to report as damaged when strictly speaking they are not. The issue is current c9 was supposed to log some information which is essential for doing this step but under some circumstances it did not. The recs themselves are fine, but the failed to log enough information to historically analyze them after the fact.

Changes in detail

  • General Fixes / improvements
    • Bugfix on cash rec save. Was not factoring in banked adjustments made on screen resulting in incorrect close balances being written
    • Bank Rec / Cash Rec save was sensitive to simultaneous changes being made on other terminals which could result in an incorrect rec being saved. Usually would mean rec could flag entries in the rec as being sighted but in fact were not because they 'raced' into the rec between operator eyeballing the rec and save button being hit. Rec will now fail in this cases.
    • Rec could misbehave for banks where you flip bank from/to bank/loan. Now works better on transition from one to other.
    • Very subtle bug with dealing with held over items. On save, doubly held over items that exist more than 7 days before the start date of the rec would not be recorded against the bank rec resulting in items being lost altogether and also making relevant saved recs internally inconsistent since the influence of these held over txns was not logged onto the rec. Not possible to repair these recs.  Root cause : save rec would write rec header to DB and then would execute journalrec(), which would look at newly added head for insight into rec status which would be empty. New code executes journalrec() first and also implements above stringent tests to protect against any inconsistent errors.
  • Auto regression test introduction. In spirit of v5 dev core parts of this new bank rec now have good regression test suite coverage which should provide stronger QA guarantees for bank rec from here on.

New rec report will show if rec is good or not. Impacting bad txns will be highlighted in red with a reason provided why they are impactful. In screenshot below it is because a previously reconciled txn was deleted.


Other unrelated changes

  • Mcleods Magician broken. Tweaked to get working again.
  • Added new part image source for Gas Imports: will grab a heap of images for Thor stuff.



Release 4.843 August 18, 2020 barney

Tweaks and fixes

  • Some electronic invoice importing tweaks and tidies
    • Tweaked import process so it can grab other costs. Two areas where this currently applies
      1. For Lusty PDF Invoices, credit card surcharge comes in as a other cost
      2. For E-Ref importing where you are importing an invoice with something in 'Other' slot
    • On Receive close and reload previous work, previously would not memorise tweaks to GST / Final price. Now added
  • F2 Select part bugs (Again!)
    • If you add a part via F2 it should highlight the added part. Broken by recent changes to c9. Now working again.
  • Unit Deals : show tally of deposits held at bottom of the screen. Tally is sensitive to selected screen filter, so you can eyeball difference of quotes vs active deals for example.
  • Backorder Magician : option to suppress printing pricing info on result, so printout can be given to customers.
  • Tweaks to Honda Invoice API importing.  Have had a couple of reports of importer bringing in wrong data, wrong qtys sometimes, possibly related to orders with oil drums on them. Digging into it the issue is firmly at Honda end. The pathology is pretty complex and I am unable to reliably create something that can compensate for it, but it is possible to easily detect the problem. This version includes changes that detect and warn whenever it happens. In instances where it happens recommend either receive manually or receive via PDF import instead. Hopefully Honda will come through with a repair in their systems before too long.
C9 V5 Update August 14, 2020 barney

V5 fresh new battle plan

Originally the plan was to create c9 v5 so that once it is ready it will be 100% packed with a heap of things. This plan is now no longer the go. Everything planned for v5 is simply too big, bigger than anything c9 has attempted to date and simply just too much to drop into a single update.

Instead plan is to break v5 up into chunks. Deliverables and content of these new chunks are:

Version Deliverable ETA
5.1 Backoffice, General Ledger and BAS Reporting Dec 2020
5.2 Spare Parts Mar 2021
5.3 Customer : AR, AP and Deposits etc May 2021
5.4 Workshop ? Sep 2021
5.5 Units ? Jan 1 2022


Next Page »