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; }