RSS Feed c9 logo Australia's best motorcycle shop retail software
Release 4.784 June 25, 2019 barney

Single Touch Payroll now supported within C9

This version of c9 provides single touch paypal support and has been whitelisted by the ATO. The function is substantially automated. I will provide a followup post on a couple of things to get started with STP and c9.

  • Other Payroll tweaks
    • Tweaked STP transmission, on advise from ATO : make sure summary gross payment figure is inclusive of allowances (such as tool allowance).
    • Subtle bug with computation of leave benefits like holidays which span multiple pay periods. Normally these should be constrained to duration of pay period, but there are rules where it sometimes needs to consider outside period for 'backdated' activity. i.e. you run up sick leave for last pay but it wasn't record on last pay so it needs to be backdated. Normally c9 handles this correctly but there are some conditions, too complex to get into here, where this fails and c9 fails to correctly constrain leave to pay run period when it should. Substantially more likely to be an issue for salary only payrolls. Now fixed.
Release 4.783 June 25, 2019 barney

Bugfix with version 4.782 just released an hour ago: label printing would crash with a system error under following condition. Now repaired

  • Part label configured to print a location, but part in question doesn't have a location.
Release 4.782 June 20, 2019 barney
  • Tweaks and fixes
    • AusPOST API integration.  AusPOST require clients to transmit a product/app ID on all API calls. Now added.
    • Single Touch Payroll UI tweaks
      • Fine tune STP poll for replies logic. Ensure minimum wait for 30 seconds before poll
      • Configure messenger to do pro-active STP reply polls
      • Tweak authorization confirmation page to reference our actual ssp (OzEDI, not SingleTouch).
      • When logged in as a payroll user, provide screen alert if a async STP reply returned an error for any payrun in last 14 days
      • Tweak display of error replies to show staff code (if any) that triggered the error
    • Receive order bugfix : was possible to deselect either tax invoice or goods only resulting in an undefined receival been written to DB (was handled as tax invoice and ignored creditor selection). Now fixed
    • Fixed a long standing bug which I assumed only affected Barney (linux) computer but got a report of problem happening on a dealer (Win 10) machine. When printing landscape reports, printout looks completely messed up, but if you save as PDF and print PDF it is okay, also portrait reports work fine.  Root cause known Java bug (, which I've found a workaround for. Suspect issue only affects Open JDK, not oracle Java, and dealer in question might have OpenJDK installed on their computer.
    • QLD TMR rego details web scrape. Bring year into compliance plate field ( with month sent to Jan), not model year.
    • Added 2019-2020 Payroll tax rate stuff (only HELP rates have changed)
    • Mcleods Magician working again. (they moved their website).
    • Generic order file export. Include options to export retprice and costprice.  Put in play for Monza. Now monza tell me they ignore cost price but just to be thorough will include option to export in c9 all the same. (updated this page )
      • Monza suggested format.
        • Mask: FD""QC
        • Header: ItemNumber,Name,Description,OrderQty,Price
        • Separator: ,
        • Escape if needed
    • Generic file export format. Tweak UI design on basic screen so it is obvious if a custom format is in play
    • Tweak profit summary to also show gross revenue (price less discount)
    • Weekly planner.  Option to print planner output.
    • Add transaction: all txns to be forward dated. Warn operator if they have entered in a forward date
    • View invoice : show summary of parts on order. i.e. qty # active, sent, received, invoiced, cancelled etc.
    • Print Preview : memorize zoom setting. Memorize for either portrait or landscape based reports.
    • Browse rebates: show tally of uncollected rebates
    • View / Edit Contact. If contact has an alternate address then make the details/alt address tab stand out
    • Finance/Floorplan Settlement tool : was unable to cope with a sale involving multiple units. Now working.  Settlement screen provides a unit tab which breakdown costs and allow you to assign origination fees on a per unit basis etc.
    • New config option in setup units tab to suppress printing short notes for dealers that use this field mainly to help internally organise their deal list
    • Add/Modify Sublet. On setting cost price if sale price is $0 then default sale price to cost price.
    • Could not bank rec / cash rec web based Paypal payments : option to select for cash rec no there and bank reco would not merge in paypal instrument txns. Now fixed

Heavy reworking on label printing

This version of c9 is a deep rewrite of label printing subsystem.  Functionally visually changes are modest. Visual/functional changes:

  • Layout rules completely rewritten and should yield better looking labels, especially for labels which are space constrained : with improved logic to handle competition for layout space. So generally only changes behaviour at the margins as prior code was reasonably okay.
  • For parts based labels. A number of changes
    • You can now configure / preset multiple label formats. e.g. some with pricing, some without etc, with label config now accessed in print labels screen
    • Label based configuration allows for some power customization. For example, configure price to be bold and a larger font size, below example makes the price bold and the font size x1.3 (30%) larger

Comprehensive list of Label commands

Parameterized commands can take form of either <key>=<value> or <key>(<value>).  List below is written in <key>(<value>) format

Basic math operations are possible. e.g. 10+5/2. Mostly relevant for adjsize command

Strings must be wrapped in single quotes.

Command Description Example
font Font name font(‘Arial’)
size Font Size size(12)
adjsize And adjustment to apply to already set size. e.g. to make bigger or smaller adjsize(+2)
value Hard code what the value is to be. value(‘Test Motorcycles’)
row Row # to put item on row(4)
vertalign Vertical alignment. 1=top. 2=center. 3=bottom vertalign(2)
textblock Allow entry to word wrap textblock(1)
show Make visible
hide Make hidden
bold make bold
italic make italic
bolditalic make bold+italic
left left justify
center center text
right right justify
format Clarion Language reformat format(‘@n$12.2’)
col Justify column. 1= left. 2=middle. 3=right col(3)
style Clarion Language font style style(1)
splitmerge Forced gap close on word wrapping, in 1/1000th of inch. Used mainly for tall barcodes. splitmerge(40)
visible Make item visible/invisible visible(0)


bold adjsize=*1.3

Step 1. Make sure you have Lusty setup as a franchise in c9

Spares -> utilities -> add / Edit Franchise.

If you cannot see lusty in the list. Click on button 'Add New Franchise'.  Just two things to key in:

  1. The name
  2. Make sure 'use price file' is set to Yes

Step 2. Import price file for first time

Spares -> utilities -> import price file

Select Lusty from list of franchises in c9

Select 'C9 Central Repository Price files' from Source type

Pick Lusty in list of suppliers.

Click Okay a couple of times. Click 'Accept and continue' on disclaimer/ warning screen and you are done.

Release 4.781 June 12, 2019 barney
  • Minor tweaks and fixes
    • Website content slider widget. Increase URL field size from 100 to 250
    • Import parts images : Contains a bug where if image already exists (i.e. imported previously or parts which share same image), and reimport option is not selected then the image will not be imported/reused. Now fixed.
  • Previous changes to timeout aged connections with c9 would break when trying to download massive price files from c9 repo.  Adjusted code to not implement timeouts in this specific case.


Release 4.780 June 4, 2019 barney

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

This version delivers two very heavy changes.

#1 cash basis GST reporting has been completely reworked. C9 activity report now only reports accruals basis txns. But on BAS report c9 now computes cash basis position by looking at accruals position and factoring in status of open AR/AP transactions at the time. Significantly simpler way to compute cash basis GST reporting.

#2 open invoice accounting is now finally fully here.  Aged balances of debtors and creditors is now entirely computed based on open transaction status. This version will have some impacts on aged balances but final balances will still be the same.  Generally it may cause aging to change and will change it for the better. Aftefacts you see like this: 90days: -1300, 60days: +1300 will now generally disappear as the underlying mechanisms that trigger this when using brought forward do not but design apply with open invoice.  Manipulation of aging can now only happen by manipulating what transactions link to what. In new c9 the only way to influence aging is to change linking between txns.

Other changes

  • Workshop Staff report. Figures would top out at $99,999.99 in this report : now increased 2+ OOM.
  • Messenger. Tweak messenger comms to timeout unresponsive network checks for things like looking for new price file updates.  Network issues at critical times can cause messenger to permanently lockup. Hopefully these tweaks will lessen liklihood of this on flaky networks.
  • Bugfix : modifying a unit while simultaneously selling it on a different terminal can corrupt the sale if modifications are saved after sale is done.  Now fixed : modify screen will detect concurrent modification and not allow its changes to be applied.
  • BAS Summary: option to print summary
  • Payroll : make sure browse payrun screen sorts payruns based on date. Previously was sorting by an internal ID would usually is same as date order but not guaranteed to be, some usage patterns could result in pay runs seems to be in unintuitive orders on screen. Now fixed.
  • Unit Deposit tweaks
    • Disable old school mechanism for allowing deposit to be tracked on a unit sale without running deposit through cash till.
    • Disable deposit entry on finalize deal where deal has no deposit on it and a customer is selected without deposit on account