Example #1
0
 /**
  * Fetches any points redeemable options.
  * @param TBT_Rewards_Model_Customer &$customer
  * @param TBT_Rewards_Model_Catalog_Product &$product
  * @return array()
  */
 protected function getRuleIds()
 {
     $applicable_rules = $this->_product->getRedeemableOptions($this->_customer, $this->_product);
     $rule_ids = array();
     foreach ($applicable_rules as &$rule_entry) {
         $rule_ids[] = $rule_entry[TBT_Rewards_Model_Catalogrule_Rule::POINTS_RULE_ID];
     }
     return $applicable_rules;
 }
Example #2
0
 public function getPredictedPointsEarned()
 {
     if ($this->product) {
         $earnable = $this->product->getEarnablePoints();
     } else {
         $earnable = array();
     }
     return $earnable;
 }
Example #3
0
 /**
  * Ensures that the given product model is a rewards catlaog product
  *
  * @param mixed $product
  * @return TBT_Rewards_Model_Catalog_Product
  */
 private function ensureProduct($product)
 {
     if ($product == null) {
         $product = $this->getProduct();
     }
     if ($product instanceof Mage_Catalog_Model_Product) {
         $product = TBT_Rewards_Model_Catalog_Product::wrap($product);
     }
     return $product;
 }
Example #4
0
 /**
  * Returns an array of the lowest possible price using points, 
  * and the points used to obtain that price
  * 
  * @deprecated
  * 
  * @param TBT_Rewards_Model_Catalog_Product $product 
  * @return array
  */
 public function getRewardAdjustedPrice($product)
 {
     if ($product instanceof Mage_Catalog_Model_Product) {
         $product = TBT_Rewards_Model_Catalog_Product::wrap($product);
     }
     if (!$product instanceof TBT_Rewards_Model_Catalog_Product) {
         $product = Mage::getModel('rewards/catalog_product')->load($product->getId());
     }
     $optimized_price = $product->getRewardAdjustedPrice();
     return $optimized_price;
 }
Example #5
0
 /**
  * returns an empty product if the product model could not be found
  *
  * @param   Mage_Sales_Model_Quote_Item||TBT_Rewards_Model_Catalog_Product $item				: the catalog item associated
  * @return TBT_Rewards_Model_Catalog_Product
  */
 private function assureProduct($item)
 {
     if ($item instanceof TBT_Rewards_Model_Catalog_Product) {
         $product =& $item;
     } else {
         if ($item instanceof Mage_Catalog_Model_Product) {
             $product = $this->assureProduct(TBT_Rewards_Model_Catalog_Product::wrap($item));
         } else {
             if ($this->hasGetProductFunc($item)) {
                 $product = $item->getProduct();
                 if (empty($product)) {
                     $product = Mage::getModel('rewards/catalog_product');
                 }
             } else {
                 $product = Mage::getModel('rewards/catalog_product');
             }
         }
     }
     return $product;
 }
Example #6
0
 /**
  * AJAX CALL. return a list of rules given a product and product price
  * param product_id
  * param rule_id
  * param price
  */
 public function getProductPriceRuleSettingsAction()
 {
     try {
         //$storeId = $product->getStoreId();
         //  Mage::app()->getStore($storeId);
         /* @var $store Mage_Core_Model_Store */
         $store = Mage::app()->getStore();
         /* @var $product Mage_Catalog_Model_Product */
         $productId = $this->getRequest()->get("productId");
         $product = Mage::getModel('catalog/product')->setStoreId($store->getId())->load($productId);
         if (!$product->getId()) {
             throw new Exception("Product ID provided does not exist");
         }
         if ($product instanceof Mage_Catalog_Model_Product) {
             $product = TBT_Rewards_Model_Catalog_Product::wrap($product);
         }
         /* @var $customer TBT_Rewards_Model_Customer */
         $customer = false;
         // set to false becaue getCatalogRedemptionRules( false | customer )
         if (Mage::getSingleton('rewards/session')->isCustomerLoggedIn()) {
             $customer = Mage::getSingleton('rewards/session')->getCustomer();
         }
         $price = (double) $this->getRequest()->get("price");
         $productPriceRuleMap = array();
         $applicableRules = $product->getCatalogRedemptionRules($customer);
         foreach ($applicableRules as $i => &$r) {
             $r = (array) $r;
             $ruleId = $r[TBT_Rewards_Model_Catalogrule_Rule::POINTS_RULE_ID];
             $rule = Mage::getModel('rewards/catalogrule_rule')->load($ruleId);
             if ($rule->getId()) {
                 $productPriceRuleMap[$ruleId] = $rule->getPointSliderSettings($store, $product, $customer, $price);
             }
         }
         echo json_encode($productPriceRuleMap);
     } catch (Exception $e) {
         die("Error: " . $e->getMessage());
     }
 }
Example #7
0
 /**
  * Fetches a points model from a product.
  * TODO: Ideally the product should reutnr the points model.
  *
  * @param TBT_Rewards_Model_Catalog_Product $product
  * @return TBT_Rewards_Model_Points
  */
 public function _genPointsModel($product)
 {
     $points = Mage::getModel('rewards/points');
     $points->add($product->getEarnablePoints());
     return $points;
 }
Example #8
0
 /**
  * 
  * @param Mage_Core_Model_Store $store
  * @param TBT_Rewards_Model_Catalog_Product $product
  * @param TBT_Rewards_Model_Customer $customer
  * @param float $redeemable_price
  * 
  */
 public function getPointSliderSettings($store, $product, $customer, $price)
 {
     try {
         if (!$this->getId()) {
             throw new Exception("Bad rule ID");
         }
         if (!$product->getId()) {
             throw new Exception("Product ID provided does not exist");
         }
         $redeem_price_per_usage = $price - Mage::helper('rewards')->priceAdjuster($price, $this->getEffect(), false, false);
         $redeemable_price = $price;
         // limit $redeemable_price to the redeem_percentage_price limit
         if ($this['points_max_redeem_percentage_price']) {
             $redeemable_price = $price * (min($this['points_max_redeem_percentage_price'], 100) / 100);
         }
         // find the number of redeem_usages needed to get the full product free
         $max_redeem_usage = $redeemable_price / $redeem_price_per_usage;
         // HACK: to keep none hole usage percent
         $max_redeem_usage_part = $max_redeem_usage;
         if ($max_redeem_usage > (int) $max_redeem_usage) {
             $max_redeem_usage = (int) $max_redeem_usage + 1;
         }
         // set of max points that can be used
         $points_max_set = array();
         $points_max_set[] = $this['points_amount'] * $max_redeem_usage;
         if ($this['points_max_qty'] > 0) {
             $points_max_set[] = $this['points_max_qty'];
         }
         if ($customer != null && Mage::getSingleton('rewards/session')->isCustomerLoggedIn()) {
             $points_max_set[] = $customer->getUsablePointsBalance($this->getPointsCurrencyId());
         }
         if (Mage::helper('rewards/config')->canUseRedemptionsIfNotLoggedIn() == false && Mage::getSingleton('rewards/session')->isCustomerLoggedIn() == false) {
             $points_max_set[] = 0;
         }
         // set of max usage that can be used
         $usage_max_set = array();
         $usage_max_set[] = $max_redeem_usage;
         $usage_max_set[] = (int) (min($points_max_set) / $this['points_amount']);
         if ($this['points_uses_per_product'] > 0) {
             $usage_max_set[] = $this['points_uses_per_product'];
         }
         // set of max redeem price
         $redeem_price_max_set = array();
         $redeem_price_max_set[] = $redeemable_price;
         $redeem_price_max_set[] = max($usage_max_set) * $redeem_price_per_usage;
         // --------- min
         $usage_min_set = array();
         $usage_min_set[] = 0;
         $rRule = array();
         // HACK: to keep none hole usage percent
         $rRule['on_price'] = $price;
         $rRule['max_redeem_usage_part'] = $max_redeem_usage_part;
         // TODO - admin option to change redeemer type
         $rRule['redeam_type'] = 'slider';
         if ($this['points_uses_per_product'] == 1) {
             $rRule['redeam_type'] = 'once_per_product';
         }
         //$rRule['effect_type'] = $rule->getPointsCatalogruleSimpleAction();
         //$rRule['effect'] = $rule->getEffect();
         //$rRule['can_use_rule'] = Mage::getSingleton('rewards/session')->isCustomerLoggedIn() || Mage::helper('rewards/config')->canUseRedemptionsIfNotLoggedIn();
         $rRule['points_per_usage'] = $this['points_amount'];
         $rRule['points_spend_min'] = 0;
         $rRule['points_spend_max'] = min($points_max_set);
         $rRule['usage_min'] = max($usage_min_set);
         // mostly 0
         $rRule['usage_max'] = min($usage_max_set);
         // the min of all the max
         $rRule['redeem_price_per_usage'] = $redeem_price_per_usage;
         $rRule['redeem_price_min'] = 0;
         $rRule['redeem_price_max'] = min($redeem_price_max_set);
         $rRule['rule_id'] = $this->getId();
         $rRule['product_id'] = $product->getId();
         $rRule['currency_id'] = $this->getPointsCurrencyId();
         $rRule['name'] = $this->getName();
         $rRule['currency_id'] = $this->getPointsCurrencyId();
         // [TBT_Rewards_Model_Catalogrule_Rule::POINTS_CURRENCY_ID];
         $rRule['points'] = Mage::helper('rewards/currency')->formatCurrency($rRule['points_per_usage'], $rRule['currency_id']);
         //  $rRule['points_caption'] = Mage::helper('rewards')->getPointsString(array(
         //            $rRule['currency_id'] => $rRule['points_per_usage']
         //      ));
         return $rRule;
     } catch (Exception $e) {
         // TODO FIX LOG ERROR
         Mage::log($e->getMessage());
         //die("Error: " . $e->getMessage());
         return null;
     }
 }