コード例 #1
0
 public function testProductDiscountTierDeletion()
 {
     $this->logInWithPermission('ADMIN');
     $discount = ProductPage::get()->first();
     $tier = $this->objFromFixture('ProductDiscountTier', 'fiveforten');
     $tier->ProductPageID = $discount->ID;
     $tier->write();
     $tierID = $tier->ID;
     $this->logOut();
     $this->logInWithPermission('Product_CANCRUD');
     $tier->delete();
     $this->assertTrue(!ProductDiscountTier::get()->byID($tierID));
     $this->logOut();
 }
コード例 #2
0
 public function getCMSFields()
 {
     $fields = FieldList::create(new Tabset('Root', new Tab('Main'), new Tab('Modifiers')));
     // set variables from Product
     $productID = $this->ProductID != 0 ? $this->ProductID : Session::get('CMSMain.currentPage');
     $product = ProductPage::get()->byID($productID);
     $parentPrice = $product->obj('Price')->Nice();
     $parentWeight = $product->Weight;
     $parentCode = $product->Code;
     // ProductOptionGroup Dropdown field w/ add new
     $groups = function () {
         return OptionGroup::get()->map()->toArray();
     };
     $groupFields = singleton('OptionGroup')->getCMSFields();
     $groupField = DropdownField::create('ProductOptionGroupID', _t("OptionItem.Group", "Group"), $groups())->setEmptyString('')->setDescription(_t('OptionItem.GroupDescription', 'Name of this group of options. Managed in <a href="admin/settings">Settings > FoxyStripe > Option Groups</a>'));
     if (class_exists('QuickAddNewExtension')) {
         $groupField->useAddNew('OptionGroup', $groups, $groupFields);
     }
     $fields->addFieldsToTab('Root.Main', array(HeaderField::create('DetailsHD', _t("OptionItem.DetailsHD", "Product Option Details"), 2), Textfield::create('Title')->setTitle(_t("OptionItem.Title", "Product Option Name")), CheckboxField::create('Available')->setTitle(_t("OptionItem.Available", "Available for purchase"))->setDescription(_t('OptionItem.AvailableDescription', "If unchecked, will disable this option in the drop down menu")), $groupField));
     $fields->addFieldsToTab('Root.Modifiers', array(HeaderField::create('ModifyHD', _t('OptionItem.ModifyHD', 'Product Option Modifiers'), 2), HeaderField::create('WeightHD', _t('OptionItem.WeightHD', 'Modify Weight'), 3), NumericField::create('WeightModifier')->setTitle(_t('OptionItem.WeightModifier', 'Weight')), DropdownField::create('WeightModifierAction', _t('OptionItem.WeightModifierAction', 'Weight Modification'), array('Add' => _t('OptionItem.WeightAdd', "Add to Base Weight ({weight})", 'Add to weight', array('weight' => $parentWeight)), 'Subtract' => _t('OptionItem.WeightSubtract', "Subtract from Base Weight ({weight})", 'Subtract from weight', array('weight' => $parentWeight)), 'Set' => _t('OptionItem.WeightSet', 'Set as a new Weight')))->setEmptyString('')->setDescription(_t('OptionItem.WeightDescription', 'Does weight modify or replace base weight?')), HeaderField::create('PriceHD', _t('OptionItem.PriceHD', 'Modify Price'), 3), CurrencyField::create('PriceModifier')->setTitle(_t('OptionItem.PriceModifier', 'Price')), DropdownField::create('PriceModifierAction', _t('OptionItem.PriceModifierAction', 'Price Modification'), array('Add' => _t('OptionItem.PriceAdd', "Add to Base Price ({price})", 'Add to price', array('price' => $parentPrice)), 'Subtract' => _t('OptionItem.PriceSubtract', "Subtract from Base Price ({price})", 'Subtract from price', array('price' => $parentPrice)), 'Set' => _t('OptionItem.PriceSet', 'Set as a new Price')))->setEmptyString('')->setDescription(_t('OptionItem.PriceDescription', 'Does price modify or replace base price?')), HeaderField::create('CodeHD', _t('OptionItem.CodeHD', 'Modify Code'), 3), TextField::create('CodeModifier')->setTitle(_t('OptionItem.CodeModifier', 'Code')), DropdownField::create('CodeModifierAction', _t('OptionItem.CodeModifierAction', 'Code Modification'), array('Add' => _t('OptionItem.CodeAdd', "Add to Base Code ({code})", 'Add to code', array('code' => $parentCode)), 'Subtract' => _t('OptionItem.CodeSubtract', 'Subtract from Base Code ({code})', 'Subtract from code', array('code' => $parentCode)), 'Set' => _t('OptionItem.CodeSet', 'Set as a new Code')))->setEmptyString('')->setDescription(_t('OptionItem.CodeDescription', 'Does code modify or replace base code?'))));
     /*
     // Cateogry Dropdown field w/ add new
     // removed until relevance determined
     $categories = function(){
         return ProductCategory::get()->map()->toArray();
     };
     
     // to do - have OptionItem category override set ProductPage category if selected: issue #155
     $categoryField = DropdownField::create('CategoryID', 'Category', $categories())
         ->setEmptyString('')
         ->setDescription('Categories can be managed in <a href="admin/settings">Settings > FoxyStripe > Categories</a>');
     if (class_exists('QuickAddNewExtension')) $categoryField->useAddNew('ProductCategory', $categories);
     
     $fields->insertAfter($categoryField, 'ProductOptionGroupID');
     */
     // allow CMS fields to be extended
     $this->extend('getCMSFields', $fields);
     return $fields;
 }
コード例 #3
0
 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();
             }
         }
     }
 }
コード例 #4
0
ファイル: ProductPage.php プロジェクト: dynamic/foxystripe
 public function onBeforeWrite()
 {
     parent::onBeforeWrite();
     if (!$this->CategoryID) {
         $default = ProductCategory::get()->filter(array('Code' => 'DEFAULT'))->first();
         $this->CategoryID = $default->ID;
     }
     //update many_many lists when multi-group is on
     if (SiteConfig::current_site_config()->MultiGroup) {
         $holders = $this->ProductHolders();
         $product = ProductPage::get()->byID($this->ID);
         if (isset($product->ParentID)) {
             $origParent = $product->ParentID;
         } else {
             $origParent = null;
         }
         $currentParent = $this->ParentID;
         if ($origParent != $currentParent) {
             if ($holders->find('ID', $origParent)) {
                 $holders->removeByID($origParent);
             }
         }
         $holders->add($currentParent);
     }
     $title = ltrim($this->Title);
     $title = rtrim($title);
     $this->Title = $title;
 }
コード例 #5
0
 /**
  * Products function.
  * 
  * @access public
  * @return array
  */
 public function ProductList($limit = 10)
 {
     $config = SiteConfig::current_site_config();
     if ($config->ProductLimit > 0) {
         $limit = $config->ProductLimit;
     }
     if ($config->MultiGroup) {
         $entries = $this->Products()->sort('SortOrder');
     } else {
         $filter = '"ParentID" = ' . $this->ID;
         // Build a list of all IDs for ProductGroups that are children
         $holderIDs = $this->ProductGroupIDs();
         // If no ProductHolders, no ProductPages. So return false
         if ($holderIDs) {
             // Otherwise, do the actual query
             if ($filter) {
                 $filter .= ' OR ';
             }
             $filter .= '"ParentID" IN (' . implode(',', $holderIDs) . ")";
         }
         $order = '"SiteTree"."Title" ASC';
         $entries = ProductPage::get()->where($filter);
     }
     $list = new PaginatedList($entries, Controller::curr()->request);
     $list->setPageLength($limit);
     return $list;
 }
 /**
  *
  *
  */
 protected function createProducts()
 {
     $this->alterationMessage("================================================ CREATING PRODUCTS ================================================", "show");
     $productsCompleted = array();
     foreach ($this->csv as $row) {
         if (!isset($productsCompleted[$row["ProductTitle"]])) {
             $filterArray = array("Title" => $row["ProductTitle"], "InternalItemID" => $row["ProductInternalItemID"]);
             $product = ProductPage::get()->filterAny($filterArray)->first();
             if ($product && $product->ParentID) {
                 $this->defaultProductParentID = $product->ParentID;
             } elseif (!$this->defaultProductParentID) {
                 $this->defaultProductParentID = ProductGroup::get()->first()->ID;
             }
             if (!$product) {
                 $product = ProductPage::create($filterArray);
                 $product->MenuTitle = $row["ProductTitle"];
                 $this->alterationMessage("Creating Product: " . $row["ProductTitle"], "created");
             } else {
                 $this->alterationMessage("Product: " . $row["ProductTitle"] . " already exists");
             }
             if (!$product->ParentID) {
                 $product->ParentID = $this->defaultProductParentID;
             }
             $product->Title = $row["ProductTitle"];
             $product->InternalItemID = $row["ProductInternalItemID"];
             if ($this->forreal) {
                 $this->addMoreProduct($product, $row);
                 $product->write("Stage");
                 if ($product->IsPublished()) {
                     $product->Publish('Stage', 'Live');
                 }
             }
             $productsCompleted[$row["ProductTitle"]] = $product->ID;
             $this->data[$product->ID] = array("Product" => $product, "VariationRows" => array());
         }
     }
     $this->alterationMessage("================================================", "show");
 }