RSS Feed c9 logo Australia's best motorcycle shop retail software
Release 4.852 September 23, 2020 barney
  • 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.
    • Spares profit report : discount component was incorrectly being added, not subtracted for refunds in report output. 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.