public function update_shipping_items(Model_Brand_Purchase $brand_purchase) { if ($brand_purchase->shipping) { if ($items = $brand_purchase->items('shipping')) { $items[0]->reference = $brand_purchase->shipping; } else { $brand_purchase->items[] = Jam::build('purchase_item_shipping', array('is_payable' => TRUE, 'reference' => $brand_purchase->shipping)); } $brand_purchase->items = $brand_purchase->items; if ($brand_purchase->shipping_address()->changed()) { $brand_purchase->shipping->update_items_address($brand_purchase->shipping); } } }