public function onBeforeDelete()
 {
     parent::onBeforeDelete();
     //make sure that if we delete this option group, we reassign the group's option items to the 'None' group.
     $items = OptionItem::get()->filter(array('ProductOptionGroupID' => $this->ID));
     if (isset($items)) {
         $noneGroup = OptionGroup::get()->filter(array('Title' => 'Options'))->first();
         foreach ($items as $item) {
             $item->ProductOptionGroupID = $noneGroup->ID;
             $item->write();
         }
     }
 }
 function testOptionItemDeletion()
 {
     $this->logInWithPermission('ADMIN');
     $optionGroup = OptionGroup::get()->first() ? OptionGroup::get()->first() : OptionGroup::create();
     if ($optionGroup->ID == 0) {
         $optionGroup->Title = 'Size';
         $optionGroup->write();
     }
     $option = $this->objFromFixture('OptionItem', 'small');
     $option->ProductOptionGroupID = $optionGroup->ID;
     $option->write();
     $optionID = $option->ID;
     $this->assertTrue($option->canDelete());
     $this->logOut();
     $this->logInWithPermission('Product_CANCRUD');
     $this->assertTrue($option->canDelete());
     $option->delete();
     $this->assertFalse(in_array($optionID, OptionItem::get()->column('ID')));
 }
 public function parseOrderDetails($orders, $transaction)
 {
     // remove previous OrderDetails so we don't end up with duplicates
     foreach ($transaction->Details() as $detail) {
         $detail->delete();
     }
     foreach ($orders->transactions->transaction as $order) {
         // Associate ProductPages, Options, Quanity with Order
         foreach ($order->transaction_details->transaction_detail as $product) {
             $OrderDetail = OrderDetail::create();
             // set Quantity
             $OrderDetail->Quantity = (int) $product->product_quantity;
             // set calculated price (after option modifiers)
             $OrderDetail->Price = (double) $product->product_price;
             // Find product via product_id custom variable
             foreach ($product->transaction_detail_options->transaction_detail_option as $productID) {
                 if ($productID->product_option_name == 'product_id') {
                     $OrderProduct = ProductPage::get()->filter('ID', (int) $productID->product_option_value)->First();
                     // if product could be found, then set Option Items
                     if ($OrderProduct) {
                         // set ProductID
                         $OrderDetail->ProductID = $OrderProduct->ID;
                         // loop through all Product Options
                         foreach ($product->transaction_detail_options->transaction_detail_option as $option) {
                             $OptionItem = OptionItem::get()->filter(array('ProductID' => (string) $OrderProduct->ID, 'Title' => (string) $option->product_option_value))->First();
                             if ($OptionItem) {
                                 $OrderDetail->Options()->add($OptionItem);
                                 // modify product price
                                 if ($priceMod = $option->price_mod) {
                                     $OrderDetail->Price += $priceMod;
                                 }
                             }
                         }
                     }
                 }
                 // associate with this order
                 $OrderDetail->OrderID = $transaction->ID;
                 // extend OrderDetail parsing, allowing for recording custom fields from FoxyCart
                 $this->extend('handleOrderItem', $decrypted, $product, $OrderDetail);
                 // write
                 $OrderDetail->write();
             }
         }
     }
 }
 public function getGeneratedTitle()
 {
     $modPrice = $this->PriceModifier ? (string) $this->PriceModifier : '0';
     $title = $this->Title;
     $title .= $this->PriceModifier != 0 ? ': (' . OptionItem::getOptionModifierActionSymbol($this->PriceModifierAction, $returnWithOnlyPlusMinus = true) . '$' . $modPrice . ')' : '';
     return $title;
 }