I think this applies only for new customers or guests. Have a look at how you retrieve the customer in Mage_Customer_Model_Session::getCustomer()
. If the customer has no id, you get an empty customer objcet wihtout data. The data from the billing information step wasn't saved to database yet, so there is no email address at this point.
As a new customer is generated in the last checkout step, when the order is created, customer information has to be stored between the requests. This is done in the quote tables. So you have to add another quote attribute for organisation_id so it can be stored till the customer is generated. For the conversion of the organisation_id from quote to customer some additinal XML configuration in your module config.xml is needed:
<global>
<fieldsets>
<checkout_onepage_quote>
<organisation_id>
<to_customer>organisation_id</to_customer>
</organisation_id>
</checkout_onepage_quote>
</fieldsets>
</global>
For further reference see Mage_Checkout_Model_Type_Onepage::saveOrder()
:
/**
* Create order based on checkout type. Create customer if necessary.
*
* @return Mage_Checkout_Model_Type_Onepage
*/
public function saveOrder()
{
$this->validate();
$isNewCustomer = false;
switch ($this->getCheckoutMethod()) {
case self::METHOD_GUEST:
$this->_prepareGuestQuote();
break;
case self::METHOD_REGISTER:
$this->_prepareNewCustomerQuote();
$isNewCustomer = true;
break;
default:
$this->_prepareCustomerQuote();
break;
}
For new customers the field conversion takes place in
Mage_Checkout_Model_Type_Onepage::_prepareNewCustomerQuote()
with this line:
Mage::helper('core')->copyFieldset('checkout_onepage_quote', 'to_customer', $quote, $customer);