Under Your shop, Discount codes, add a code: SPRING10, say, with what it takes off (a percentage, or an amount), what it works on (bookings, packages or both, and every service or only some), who can use it, and how often. The limits are yours to set: a total number of uses (one, for a one-off), once per customer, a minimum spend, and the dates it runs between. Retire a code whenever you like; every use it already had stays on record.
On your booking page, once a service is chosen, a "Have a discount code?" box sits with the price. The customer types the code, sees what comes off and what is left to pay, and the deposit is worked out on the discounted price. A code that is not theirs to use says so in one line.
Who can use it: anyone, existing customers (anyone who has booked with you before), Regulars (five or more finished bookings), VIPs (your top tenth by spend over the last year) or people with a standing appointment. The Regular and VIP badges are the ones the diary already shows, worked out for you. A code for a group can also be applied automatically, with nothing to type: the moment that customer's email is in, the discount is on.
In the diary, open any booking and type a code, an amount off (5.00) or a percentage (10%) into the Discount box. The price on the booking becomes what is charged, the confirmation email shows the discount, and when you turn the booking into an invoice the discount is its own line. Every discount, typed or automatic, is in the activity log with who gave it.
Discount codes are part of Pro. A code applies to the booking or the package it is used on; it never touches a booking already paid for, and a booking on a package has nothing to take off.