The list of potential issues with your specific problem go well beyond the scope of this question. For instance, there should be no reason to be rewriting a controller's action based on what you show here. But for the sake of helping you debug and putting you on the right path, consider the following:
In this context,
$voucher is an object of type Healthystart_Model_Voucher. You are comparing it to an integer,
$products. They will never be equivalent.
Your use of
Mage::getModel('healthystart/voucher')->load() suggests that you only expect one voucher model back. However, unless this is enforced by the schema of the storage engine, any number of results could be returned when loading a voucher by the quote id.
In that case, you probably would only ever get the first item and thus the voucher count will always be one.
$quote_id = (int)$this->getRequest()->getParam('id') casts a potential
null if no param named ID exists to an int - if you cast
null to an int, it will return 0. Because there is no
else condition on your outer else, this action will do nothing and return a blank page. Is this intentional?
You don't need
if($quote_id) evaluates to
true - in that case, you shouldn't load it outside the
if - it's unnecessary.
You are calling
parent::deleteAction() only when there is a valid
$quote_id; is this intentional?
There is not enough information to help you with your actual problem. Hopefully the above points will lead you to your eventual solution.