public function model_before_check(Model_Purchase $purchase, Jam_Event_Data $data) { if ($purchase->shipping_required) { if ($purchase->shipping_same_as_billing and !$purchase->billing_address) { $purchase->errors()->add('billing_address', 'present'); } elseif (!$purchase->shipping_same_as_billing and !$purchase->shipping_address) { $purchase->errors()->add('shipping_address', 'present'); } else { $purchase->shipping_address()->fields_required = TRUE; } if ($purchase->items_count(array('can_ship' => FALSE))) { $purchase->errors()->add('brand_purchases', 'cannot_ship'); } } }