This depends, if your annual bonus is built into your contract as part of a 13th salary then this is a cost to company.
The company must inform you in terms of section 189 of LRA that they are having operational requirement issues and cash flow problems and cannot pay your 13th salary.
The rule of thumb here is at least 30 days notice or a reasonable time and the company must be upfront about this issue as they are acting in breach of the employment contract.
In cases where a annual bonus is not part of your contract of employment then the employer does not need to give any notice.
The employer is not bound to give you any bonus it is merely discretionary and there is nothing that can be done.
Unless you have it in writing that there was a reasonable expectation raised by the company/employer that you will get your bonus and it is what is seen as a smoking gun email.
Then you should take this up with the department of labour or alternatively submit a form 7.11 at the nearest CCMA for money owed or unpaid by the employer.