/**
  * Which Carts need to be deleted
  *
  * @return Market_OrderModel[]
  */
 public function getCartsToPurge()
 {
     $configInterval = craft()->market_settings->getSettings()->purgeIncompleteCartDuration;
     $edge = new DateTime();
     $interval = new DateInterval($configInterval);
     $interval->invert = 1;
     $edge->add($interval);
     $records = Market_OrderRecord::model()->findAllByAttributes(['dateOrdered' => null], 'dateUpdated <= :edge', ['edge' => $edge->format('Y-m-d H:i:s')]);
     return Market_OrderModel::populateModels($records);
 }
 /**
  * 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;
 }