Hi,
You can find inspiration in this KB article:
devnet.kentico.com/Knowledge-Base/E-commerce/Absolute-deduction-from-the-total-price-using-coup.aspxSo, you will need to use custom providers (ShoppingCartInfoProvider) and modify the logic of the checkout process step where the coupons are entered.
There's an easy way to add custom providers to the project (in addition to default DLL project) - see
this CTO's blogpost.
The coupon can be reused multiple times by any customer, as long as the date is between the valid from and valid to dates.
To change in this behavior to single use (voucher) coupons, the coupon could be identified with some custom table, that would store couponID and flag about its usage... when it is applied, the flag would be set, telling that the coupon has already been used and cannot be used again. You can also set it's validity "to" time to past, however it depends on what data you want to capture around usage of the coupon (e.g., who used it and when).
I would recommend to read through
E-commerce guide (documentation) and check the codefiles of checkout steps (~\CMSModules\Ecommerce\Controls\ShoppingCart\ShoppingCartContent.ascx and other controls).
API Reference (how to manipulate with discount coupons via DiscountCouponInfoProvider) could be also handy.
Regards,
Zdenek