/**
  * Save and set the given addresses to the current cart/order
  *
  * @param Market_OrderModel   $order
  * @param Market_AddressModel $shippingAddress
  * @param Market_AddressModel $billingAddress
  *
  * @return bool
  * @throws \Exception
  */
 public function setAddresses(Market_OrderModel $order, Market_AddressModel $shippingAddress, Market_AddressModel $billingAddress)
 {
     MarketDbHelper::beginStackedTransaction();
     try {
         $result1 = craft()->market_customer->saveAddress($shippingAddress);
         if ($billingAddress->id && $billingAddress->id == $shippingAddress->id) {
             $result2 = true;
         } else {
             $result2 = craft()->market_customer->saveAddress($billingAddress);
         }
         $order->setShippingAddress($shippingAddress);
         $order->setBillingAddress($billingAddress);
         if ($result1 && $result2) {
             $order->shippingAddressId = $shippingAddress->id;
             $order->billingAddressId = $billingAddress->id;
             $this->save($order);
             MarketDbHelper::commitStackedTransaction();
             return true;
         }
     } catch (\Exception $e) {
         MarketDbHelper::rollbackStackedTransaction();
         throw $e;
     }
     MarketDbHelper::rollbackStackedTransaction();
     return false;
 }