public function render(Varien_Object $row)
 {
     if ($row->getCommissionType() == 'percentage') {
         return sprintf("%.2f", $row->getCommission()) . '%';
     } else {
         return Mage::app()->getStore()->getBaseCurrency()->format($row->getCommission());
     }
 }
Example #2
0
 public function calculateCommissionBeforeEdit($observer)
 {
     /* hainh edit 25-04-2014 */
     if (!Mage::helper('affiliateplusprogram')->isPluginEnabled()) {
         return;
     }
     $order = $observer->getEvent()->getOrder();
     $order->setQuote(Mage::getModel('sales/quote')->load($order->getQuoteId()));
     $items = $order->getAllItems();
     $affiliateInfo = $observer->getEvent()->getAffiliateInfo();
     $commissionObj = $observer->getEvent()->getCommissionObj();
     $commission = $commissionObj->getCommission();
     $orderItemIds = $commissionObj->getOrderItemIds();
     $orderItemNames = $commissionObj->getOrderItemNames();
     $commissionItems = $commissionObj->getCommissionItems();
     $extraContent = $commissionObj->getExtraContent();
     $tierCommissions = $commissionObj->getTierCommissions();
     $account = $observer->getEvent()->getAccount();
     $programId = $observer->getEvent()->getProgramId();
     $storeId = Mage::getSingleton('adminhtml/session_quote')->getStoreId();
     if ($account->getAccountId()) {
         if ($programId) {
             $program = Mage::getModel('affiliateplusprogram/program')->setStoreId($storeId)->load($programId);
             if (!$program) {
                 return $this;
             }
             // $commissionObj->setDefaultCommission(false);
             if (!$program->validateOrder($order)) {
                 return $this;
             }
         } else {
             return $this;
         }
         foreach ($items as $item) {
             $affiliateplusCommissionItem = '';
             if ($item->getParentItemId()) {
                 continue;
             }
             if (Mage::getSingleton('checkout/session')->getData('affiliate_coupon_code') && $account->getStatus() == 1) {
                 $commissionObj->setDefaultCommission(false);
                 if (!$program->validateItem($item)) {
                     continue;
                 }
             } else {
                 if (in_array($item->getId(), $commissionItems)) {
                     continue;
                 }
                 $program = Mage::helper('affiliateplusprogram')->initProgram($account->getId(), $order)->getProgramByItemAccount($item, $account);
             }
             if (!$program) {
                 continue;
             }
             $affiliateType = $program->getAffiliateType() ? $program->getAffiliateType() : $this->_getConfigHelper()->getCommissionConfig('affiliate_type');
             /* Changed BY Adam for customize function: Commission for whole cart 22/07/2014 */
             $baseItemsPrice = 0;
             // total price of the items that belong to this program.
             foreach ($items as $_item) {
                 if ($_item->getParentItemId()) {
                     continue;
                 }
                 if (!$program->validateItem($_item)) {
                     continue;
                 }
                 // Changed By Adam 01/08/2014: don't calculate the items that belong to higher program's priority
                 if (!Mage::getSingleton('checkout/session')->getData('affiliate_coupon_code') && Mage::helper('affiliateplusprogram')->checkItemInHigherPriorityProgram($account->getId(), $_item, $program->getPriority())) {
                     continue;
                 }
                 if ($_item->getHasChildren() && $_item->isChildrenCalculated()) {
                     foreach ($_item->getChildrenItems() as $child) {
                         $baseItemsPrice += $_item->getQtyOrdered() * ($child->getQtyOrdered() * $child->getBasePrice() - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount());
                     }
                 } elseif ($_item->getProduct()) {
                     $baseItemsPrice += $_item->getQtyOrdered() * $_item->getBasePrice() - $_item->getBaseDiscountAmount() - $_item->getBaseAffiliateplusAmount();
                 }
             }
             /* Endcode */
             if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                 $childHasCommission = false;
                 foreach ($item->getChildrenItems() as $child) {
                     $affiliateplusCommissionItem = '';
                     if ($affiliateType == 'profit') {
                         $baseProfit = $child->getBasePrice() - $child->getBaseCost();
                     } else {
                         $baseProfit = $child->getBasePrice();
                     }
                     $baseProfit = $child->getQtyOrdered() * $baseProfit - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                     if ($baseProfit <= 0) {
                         continue;
                     }
                     $commissionType = $program->getCommissionType();
                     $commissionValue = floatval($program->getCommission());
                     if (Mage::helper('affiliateplus/cookie')->getNumberOrdered()) {
                         if ($program->getSecCommission()) {
                             $commissionType = $program->getSecCommissionType();
                             $commissionValue = floatval($program->getSecondaryCommission());
                         }
                     }
                     if (!$commissionValue) {
                         continue;
                     }
                     $childHasCommission = true;
                     /* Changed BY Adam commission for whole cart 22/07/2014 */
                     if ($commissionType == 'cart_fixed') {
                         $commissionValue = min($commissionValue, $baseItemsPrice);
                         $itemPrice = $child->getQtyOrdered() * $child->getBasePrice() - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                         $itemCommission = $itemPrice * $commissionValue / $baseItemsPrice;
                     } elseif ($commissionType == 'fixed') {
                         $itemCommission = min($child->getQtyOrdered() * $commissionValue, $baseProfit);
                     } elseif ($commissionType == 'percentage') {
                         if ($commissionValue > 100) {
                             $commissionValue = 100;
                         }
                         if ($commissionValue < 0) {
                             $commissionValue = 0;
                         }
                         $itemCommission = $baseProfit * $commissionValue / 100;
                     }
                     $affiliateplusCommissionItem .= $itemCommission . ",";
                     $commissionObject = new Varien_Object(array('profit' => $baseProfit, 'commission' => $itemCommission, 'tier_commission' => array(), 'base_item_price' => $baseItemsPrice, 'affiliateplus_commission_item' => $affiliateplusCommissionItem));
                     Mage::dispatchEvent('affiliateplusprogram_calculate_tier_commission', array('item' => $child, 'account' => $account, 'commission_obj' => $commissionObject, 'program' => $program));
                     if ($commissionObject->getTierCommission()) {
                         $tierCommissions[$child->getId()] = $commissionObject->getTierCommission();
                     }
                     $commission += $commissionObject->getCommission();
                     $child->setAffiliateplusCommission($commissionObject->getCommission());
                     $child->setAffiliateplusCommissionItem($commissionObject->getAffiliateplusCommissionItem());
                     if (!isset($extraContent[$program->getId()]['total_amount'])) {
                         $extraContent[$program->getId()]['total_amount'] = 0;
                     }
                     $extraContent[$program->getId()]['total_amount'] += $child->getBasePrice();
                     if (!isset($extraContent[$program->getId()]['commission'])) {
                         $extraContent[$program->getId()]['commission'] = 0;
                     }
                     $extraContent[$program->getId()]['commission'] += $commissionObject->getCommission();
                     $orderItemIds[] = $child->getProduct()->getId();
                     $orderItemNames[] = $child->getName();
                     $extraContent[$program->getId()]['order_item_ids'][] = $child->getProduct()->getId();
                     $extraContent[$program->getId()]['order_item_names'][] = $child->getName();
                 }
                 if ($childHasCommission) {
                     // $orderItemIds[] = $item->getProduct()->getId();
                     // $orderItemNames[] = $item->getName();
                     $commissionItems[] = $item->getId();
                     $extraContent[$program->getId()]['program_name'] = $program->getName();
                     // $extraContent[$program->getId()]['order_item_ids'][] = $item->getProduct()->getId();
                     // $extraContent[$program->getId()]['order_item_names'][] = $item->getName();
                 }
             } else {
                 if ($affiliateType == 'profit') {
                     $baseProfit = $item->getBasePrice() - $item->getBaseCost();
                 } else {
                     $baseProfit = $item->getBasePrice();
                 }
                 $baseProfit = $item->getQtyOrdered() * $baseProfit - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                 if ($baseProfit <= 0) {
                     continue;
                 }
                 $commissionType = $program->getCommissionType();
                 $commissionValue = floatval($program->getCommission());
                 if (Mage::helper('affiliateplus/cookie')->getNumberOrdered() > 1 || Mage::helper('affiliateplus/cookie')->getNumberOrdered() && !$order->getOriginalIncrementId()) {
                     if ($program->getSecCommission()) {
                         $commissionType = $program->getSecCommissionType();
                         $commissionValue = floatval($program->getSecondaryCommission());
                     }
                 }
                 if (!$commissionValue) {
                     continue;
                 }
                 //jack
                 if ($item->getProduct()) {
                     $productId = $item->getProduct()->getId();
                 } else {
                     $productId = $item->getProductId();
                 }
                 //
                 $orderItemIds[] = $productId;
                 $orderItemNames[] = $item->getName();
                 $commissionItems[] = $item->getId();
                 /* Changed BY Adam: commission for whole cart 22/07/2014 */
                 if ($commissionType == 'cart_fixed') {
                     $commissionValue = min($commissionValue, $baseItemsPrice);
                     $itemPrice = $item->getQtyOrdered() * $item->getBasePrice() - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                     $itemCommission = $itemPrice * $commissionValue / $baseItemsPrice;
                 } elseif ($commissionType == 'fixed') {
                     $itemCommission = min($item->getQtyOrdered() * $commissionValue, $baseProfit);
                 } elseif ($commissionType == 'percentage') {
                     if ($commissionValue > 100) {
                         $commissionValue = 100;
                     }
                     if ($commissionValue < 0) {
                         $commissionValue = 0;
                     }
                     $itemCommission = $baseProfit * $commissionValue / 100;
                 }
                 $affiliateplusCommissionItem .= $itemCommission . ",";
                 $commissionObject = new Varien_Object(array('profit' => $baseProfit, 'commission' => $itemCommission, 'tier_commission' => array(), 'base_item_price' => $baseItemsPrice, 'affiliateplus_commission_item' => $affiliateplusCommissionItem));
                 Mage::dispatchEvent('affiliateplusprogram_calculate_tier_commission', array('item' => $item, 'account' => $account, 'commission_obj' => $commissionObject, 'program' => $program));
                 if ($commissionObject->getTierCommission()) {
                     $tierCommissions[$item->getId()] = $commissionObject->getTierCommission();
                 }
                 $commission += $commissionObject->getCommission();
                 $item->setAffiliateplusCommission($commissionObject->getCommission());
                 $item->setAffiliateplusCommissionItem($commissionObject->getAffiliateplusCommissionItem());
                 $extraContent[$program->getId()]['program_name'] = $program->getName();
                 $extraContent[$program->getId()]['order_item_ids'][] = $item->getProduct()->getId();
                 $extraContent[$program->getId()]['order_item_names'][] = $item->getName();
                 if (!isset($extraContent[$program->getId()]['total_amount'])) {
                     $extraContent[$program->getId()]['total_amount'] = 0;
                 }
                 $extraContent[$program->getId()]['total_amount'] += $item->getBasePrice();
                 if (!isset($extraContent[$program->getId()]['commission'])) {
                     $extraContent[$program->getId()]['commission'] = 0;
                 }
                 $extraContent[$program->getId()]['commission'] += $commissionObject->getCommission();
             }
         }
         $commissionObj->setCommission($commission);
         $commissionObj->setOrderItemIds($orderItemIds);
         $commissionObj->setOrderItemNames($orderItemNames);
         $commissionObj->setCommissionItems($commissionItems);
         $commissionObj->setExtraContent($extraContent);
         $commissionObj->setTierCommissions($tierCommissions);
         return $this;
     }
     return $this;
 }
Example #3
0
 public function calculateCommissionBefore($observer)
 {
     $order = $observer->getEvent()->getOrder();
     $order->setQuote(Mage::getModel('sales/quote')->load($order->getQuoteId()));
     $items = $order->getAllItems();
     $affiliateInfo = $observer->getEvent()->getAffiliateInfo();
     $commissionObj = $observer->getEvent()->getCommissionObj();
     $commission = $commissionObj->getCommission();
     $orderItemIds = $commissionObj->getOrderItemIds();
     $orderItemNames = $commissionObj->getOrderItemNames();
     $commissionItems = $commissionObj->getCommissionItems();
     $extraContent = $commissionObj->getExtraContent();
     $tierCommissions = $commissionObj->getTierCommissions();
     foreach ($affiliateInfo as $info) {
         if ($account = $info['account']) {
             if ($account->getUsingCoupon()) {
                 $program = $account->getUsingProgram();
                 if (!$program) {
                     return $this;
                 }
                 $commissionObj->setDefaultCommission(false);
                 if (!$program->validateOrder($order)) {
                     return $this;
                 }
             }
             foreach ($items as $item) {
                 if ($item->getParentItemId()) {
                     continue;
                 }
                 if ($account->getUsingCoupon()) {
                     if (!$program->validateItem($item)) {
                         continue;
                     }
                 } else {
                     if (in_array($item->getId(), $commissionItems)) {
                         continue;
                     }
                     $program = Mage::helper('affiliateplusprogram')->initProgram($account->getId(), $order)->getProgramByItemAccount($item, $account);
                 }
                 if (!$program) {
                     continue;
                 }
                 $affiliateType = $program->getAffiliateType() ? $program->getAffiliateType() : $this->_getConfigHelper()->getCommissionConfig('affiliate_type');
                 if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                     $childHasCommission = false;
                     foreach ($item->getChildrenItems() as $child) {
                         if ($affiliateType == 'profit') {
                             $baseProfit = $child->getBasePrice() - $child->getBaseCost();
                         } else {
                             $baseProfit = $child->getBasePrice();
                         }
                         $baseProfit = $child->getQtyOrdered() * $baseProfit - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                         if ($baseProfit <= 0) {
                             continue;
                         }
                         $commissionType = $program->getCommissionType();
                         $commissionValue = floatval($program->getCommission());
                         if (Mage::helper('affiliateplus/cookie')->getNumberOrdered()) {
                             if ($program->getSecCommission()) {
                                 $commissionType = $program->getSecCommissionType();
                                 $commissionValue = floatval($program->getSecondaryCommission());
                             }
                         }
                         if (!$commissionValue) {
                             continue;
                         }
                         $childHasCommission = true;
                         if ($commissionType == 'fixed') {
                             $itemCommission = min($child->getQtyOrdered() * $commissionValue, $baseProfit);
                         } elseif ($commissionType == 'percentage') {
                             if ($commissionValue > 100) {
                                 $commissionValue = 100;
                             }
                             if ($commissionValue < 0) {
                                 $commissionValue = 0;
                             }
                             $itemCommission = $baseProfit * $commissionValue / 100;
                         }
                         $commissionObject = new Varien_Object(array('profit' => $baseProfit, 'commission' => $itemCommission, 'tier_commission' => array()));
                         Mage::dispatchEvent('affiliateplusprogram_calculate_tier_commission', array('item' => $child, 'account' => $account, 'commission_obj' => $commissionObject, 'program' => $program));
                         if ($commissionObject->getTierCommission()) {
                             $tierCommissions[$child->getId()] = $commissionObject->getTierCommission();
                         }
                         $commission += $commissionObject->getCommission();
                         $child->setAffiliateplusCommission($commissionObject->getCommission());
                         if (!isset($extraContent[$program->getId()]['total_amount'])) {
                             $extraContent[$program->getId()]['total_amount'] = 0;
                         }
                         $extraContent[$program->getId()]['total_amount'] += $child->getBasePrice();
                         if (!isset($extraContent[$program->getId()]['commission'])) {
                             $extraContent[$program->getId()]['commission'] = 0;
                         }
                         $extraContent[$program->getId()]['commission'] += $commissionObject->getCommission();
                         $orderItemIds[] = $child->getProduct()->getId();
                         $orderItemNames[] = $child->getName();
                         $extraContent[$program->getId()]['order_item_ids'][] = $child->getProduct()->getId();
                         $extraContent[$program->getId()]['order_item_names'][] = $child->getName();
                     }
                     if ($childHasCommission) {
                         // $orderItemIds[] = $item->getProduct()->getId();
                         // $orderItemNames[] = $item->getName();
                         $commissionItems[] = $item->getId();
                         $extraContent[$program->getId()]['program_name'] = $program->getName();
                         // $extraContent[$program->getId()]['order_item_ids'][] = $item->getProduct()->getId();
                         // $extraContent[$program->getId()]['order_item_names'][] = $item->getName();
                     }
                 } else {
                     if ($affiliateType == 'profit') {
                         $baseProfit = $item->getBasePrice() - $item->getBaseCost();
                     } else {
                         $baseProfit = $item->getBasePrice();
                     }
                     $baseProfit = $item->getQtyOrdered() * $baseProfit - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                     if ($baseProfit <= 0) {
                         continue;
                     }
                     $commissionType = $program->getCommissionType();
                     $commissionValue = floatval($program->getCommission());
                     if (Mage::helper('affiliateplus/cookie')->getNumberOrdered()) {
                         if ($program->getSecCommission()) {
                             $commissionType = $program->getSecCommissionType();
                             $commissionValue = floatval($program->getSecondaryCommission());
                         }
                     }
                     if (!$commissionValue) {
                         continue;
                     }
                     $orderItemIds[] = $item->getProduct()->getId();
                     $orderItemNames[] = $item->getName();
                     $commissionItems[] = $item->getId();
                     if ($commissionType == 'fixed') {
                         $itemCommission = min($item->getQtyOrdered() * $commissionValue, $baseProfit);
                     } elseif ($commissionType == 'percentage') {
                         if ($commissionValue > 100) {
                             $commissionValue = 100;
                         }
                         if ($commissionValue < 0) {
                             $commissionValue = 0;
                         }
                         $itemCommission = $baseProfit * $commissionValue / 100;
                     }
                     $commissionObject = new Varien_Object(array('profit' => $baseProfit, 'commission' => $itemCommission, 'tier_commission' => array()));
                     Mage::dispatchEvent('affiliateplusprogram_calculate_tier_commission', array('item' => $item, 'account' => $account, 'commission_obj' => $commissionObject, 'program' => $program));
                     if ($commissionObject->getTierCommission()) {
                         $tierCommissions[$item->getId()] = $commissionObject->getTierCommission();
                     }
                     $commission += $commissionObject->getCommission();
                     $item->setAffiliateplusCommission($commissionObject->getCommission());
                     $extraContent[$program->getId()]['program_name'] = $program->getName();
                     $extraContent[$program->getId()]['order_item_ids'][] = $item->getProduct()->getId();
                     $extraContent[$program->getId()]['order_item_names'][] = $item->getName();
                     if (!isset($extraContent[$program->getId()]['total_amount'])) {
                         $extraContent[$program->getId()]['total_amount'] = 0;
                     }
                     $extraContent[$program->getId()]['total_amount'] += $item->getBasePrice();
                     if (!isset($extraContent[$program->getId()]['commission'])) {
                         $extraContent[$program->getId()]['commission'] = 0;
                     }
                     $extraContent[$program->getId()]['commission'] += $commissionObject->getCommission();
                 }
             }
             $commissionObj->setCommission($commission);
             $commissionObj->setOrderItemIds($orderItemIds);
             $commissionObj->setOrderItemNames($orderItemNames);
             $commissionObj->setCommissionItems($commissionItems);
             $commissionObj->setExtraContent($extraContent);
             $commissionObj->setTierCommissions($tierCommissions);
             return $this;
         }
     }
     return $this;
 }
Example #4
0
 public function orderPlaceAfter($observer)
 {
     $order = $observer['order'];
     // check to run this function 1 time for 1 order
     if (Mage::getSingleton('core/session')->getData("affiliateplus_order_placed_" . $order->getId())) {
         return $this;
     }
     Mage::getSingleton('core/session')->setData("affiliateplus_order_placed_" . $order->getId(), true);
     // Use Store Credit to Checkout
     if ($baseAmount = $order->getBaseAffiliateCredit()) {
         $session = Mage::getSingleton('checkout/session');
         $session->setUseAffiliateCredit('');
         $session->setAffiliateCredit(0);
         $account = Mage::getSingleton('affiliateplus/session')->getAccount();
         $payment = Mage::getModel('affiliateplus/payment')->setPaymentMethod('credit')->setAmount(-$baseAmount)->setAccountId($account->getId())->setAccountName($account->getName())->setAccountEmail($account->getEmail())->setRequestTime(now())->setStatus(3)->setIsRequest(1)->setIsPayerFee(0)->setData('is_created_by_recurring', 1)->setData('is_refund_balance', 1);
         if (Mage::helper('affiliateplus/config')->getSharingConfig('balance') == 'store') {
             $payment->setStoreIds($order->getStoreId());
         }
         $paymentMethod = $payment->getPayment();
         $paymentMethod->addData(array('order_id' => $order->getId(), 'order_increment_id' => $order->getIncrementId(), 'base_paid_amount' => -$baseAmount, 'paid_amount' => -$order->getAffiliateCredit()));
         try {
             $payment->save();
             $paymentMethod->savePaymentMethodInfo();
         } catch (Exception $e) {
         }
     }
     if (!$order->getBaseSubtotal()) {
         return $this;
     }
     $affiliateInfo = Mage::helper('affiliateplus/cookie')->getAffiliateInfo();
     $account = '';
     foreach ($affiliateInfo as $info) {
         if ($info['account']) {
             $account = $info['account'];
             break;
         }
     }
     if ($account && $account->getId()) {
         // Log affiliate tracking referal - only when has sales
         if ($this->_getConfigHelper()->getCommissionConfig('life_time_sales')) {
             $tracksCollection = Mage::getResourceModel('affiliateplus/tracking_collection');
             if ($order->getCustomerId()) {
                 $tracksCollection->getSelect()->where("customer_id = {$order->getCustomerId()} OR customer_email = ?", $order->getCustomerEmail());
             } else {
                 $tracksCollection->addFieldToFilter('customer_email', $order->getCustomerEmail());
             }
             if (!$tracksCollection->getSize()) {
                 try {
                     Mage::getModel('affiliateplus/tracking')->setData(array('account_id' => $account->getId(), 'customer_id' => $order->getCustomerId(), 'customer_email' => $order->getCustomerEmail(), 'created_time' => now()))->save();
                 } catch (Exception $e) {
                 }
             }
         }
         $baseDiscount = $order->getBaseAffiliateplusDiscount();
         //$maxCommission = $order->getBaseGrandTotal() - $order->getBaseShippingAmount();
         // Before calculate commission
         $commissionObj = new Varien_Object(array('commission' => 0, 'default_commission' => true, 'order_item_ids' => array(), 'order_item_names' => array(), 'commission_items' => array(), 'extra_content' => array(), 'tier_commissions' => array()));
         Mage::dispatchEvent('affiliateplus_calculate_commission_before', array('order' => $order, 'affiliate_info' => $affiliateInfo, 'commission_obj' => $commissionObj));
         $commissionType = $this->_getConfigHelper()->getCommissionConfig('commission_type');
         $commissionValue = floatval($this->_getConfigHelper()->getCommissionConfig('commission'));
         if (Mage::helper('affiliateplus/cookie')->getNumberOrdered()) {
             if ($this->_getConfigHelper()->getCommissionConfig('use_secondary')) {
                 $commissionType = $this->_getConfigHelper()->getCommissionConfig('secondary_type');
                 $commissionValue = floatval($this->_getConfigHelper()->getCommissionConfig('secondary_commission'));
             }
         }
         $commission = $commissionObj->getCommission();
         $orderItemIds = $commissionObj->getOrderItemIds();
         $orderItemNames = $commissionObj->getOrderItemNames();
         $commissionItems = $commissionObj->getCommissionItems();
         $extraContent = $commissionObj->getExtraContent();
         $tierCommissions = $commissionObj->getTierCommissions();
         $defaultItemIds = array();
         $defaultItemNames = array();
         $defaultAmount = 0;
         $defCommission = 0;
         if ($commissionValue && $commissionObj->getDefaultCommission()) {
             if ($commissionType == 'percentage') {
                 if ($commissionValue > 100) {
                     $commissionValue = 100;
                 }
                 if ($commissionValue < 0) {
                     $commissionValue = 0;
                 }
             }
             foreach ($order->getAllItems() as $item) {
                 if ($item->getParentItemId()) {
                     continue;
                 }
                 if (in_array($item->getId(), $commissionItems)) {
                     continue;
                 }
                 if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                     // $childHasCommission = false;
                     foreach ($item->getChildrenItems() as $child) {
                         if ($this->_getConfigHelper()->getCommissionConfig('affiliate_type') == 'profit') {
                             $baseProfit = $child->getBasePrice() - $child->getBaseCost();
                         } else {
                             $baseProfit = $child->getBasePrice();
                         }
                         $baseProfit = $child->getQtyOrdered() * $baseProfit - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                         if ($baseProfit <= 0) {
                             continue;
                         }
                         // $childHasCommission = true;
                         if ($commissionType == 'fixed') {
                             $defaultCommission = min($child->getQtyOrdered() * $commissionValue, $baseProfit);
                         } elseif ($commissionType == 'percentage') {
                             $defaultCommission = $baseProfit * $commissionValue / 100;
                         }
                         $commissionObj = new Varien_Object(array('profit' => $baseProfit, 'commission' => $defaultCommission, 'tier_commission' => array()));
                         Mage::dispatchEvent('affiliateplus_calculate_tier_commission', array('item' => $child, 'account' => $account, 'commission_obj' => $commissionObj));
                         if ($commissionObj->getTierCommission()) {
                             $tierCommissions[$child->getId()] = $commissionObj->getTierCommission();
                         }
                         $commission += $commissionObj->getCommission();
                         $child->setAffiliateplusCommission($commissionObj->getCommission());
                         $defCommission += $commissionObj->getCommission();
                         $defaultAmount += $child->getBasePrice();
                         $orderItemIds[] = $child->getProduct()->getId();
                         $orderItemNames[] = $child->getName();
                         $defaultItemIds[] = $child->getProduct()->getId();
                         $defaultItemNames[] = $child->getName();
                     }
                     // if ($childHasCommission) {
                     // $orderItemIds[] = $item->getProduct()->getId();
                     // $orderItemNames[] = $item->getName();
                     // $defaultItemIds[] = $item->getProduct()->getId();
                     // $defaultItemNames[] = $item->getName();
                     // }
                 } else {
                     if ($this->_getConfigHelper()->getCommissionConfig('affiliate_type') == 'profit') {
                         $baseProfit = $item->getBasePrice() - $item->getBaseCost();
                     } else {
                         $baseProfit = $item->getBasePrice();
                     }
                     $baseProfit = $item->getQtyOrdered() * $baseProfit - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                     if ($baseProfit <= 0) {
                         continue;
                     }
                     $orderItemIds[] = $item->getProduct()->getId();
                     $orderItemNames[] = $item->getName();
                     $defaultItemIds[] = $item->getProduct()->getId();
                     $defaultItemNames[] = $item->getName();
                     if ($commissionType == 'fixed') {
                         $defaultCommission = min($item->getQtyOrdered() * $commissionValue, $baseProfit);
                     } elseif ($commissionType == 'percentage') {
                         $defaultCommission = $baseProfit * $commissionValue / 100;
                     }
                     $commissionObj = new Varien_Object(array('profit' => $baseProfit, 'commission' => $defaultCommission, 'tier_commission' => array()));
                     Mage::dispatchEvent('affiliateplus_calculate_tier_commission', array('item' => $item, 'account' => $account, 'commission_obj' => $commissionObj));
                     if ($commissionObj->getTierCommission()) {
                         $tierCommissions[$item->getId()] = $commissionObj->getTierCommission();
                     }
                     $commission += $commissionObj->getCommission();
                     $item->setAffiliateplusCommission($commissionObj->getCommission());
                     $defCommission += $commissionObj->getCommission();
                     $defaultAmount += $item->getBasePrice();
                 }
             }
         }
         if (!$baseDiscount && !$commission) {
             return $this;
         }
         // $customer = Mage::getSingleton('customer/session')->getCustomer();
         // Create transaction
         $transactionData = array('account_id' => $account->getId(), 'account_name' => $account->getName(), 'account_email' => $account->getEmail(), 'customer_id' => $order->getCustomerId(), 'customer_email' => $order->getCustomerEmail(), 'order_id' => $order->getId(), 'order_number' => $order->getIncrementId(), 'order_item_ids' => implode(',', $orderItemIds), 'order_item_names' => implode(',', $orderItemNames), 'total_amount' => $order->getBaseSubtotal(), 'discount' => $baseDiscount, 'commission' => $commission, 'created_time' => now(), 'status' => '2', 'store_id' => Mage::app()->getStore()->getId(), 'extra_content' => $extraContent, 'tier_commissions' => $tierCommissions, 'default_item_ids' => $defaultItemIds, 'default_item_names' => $defaultItemNames, 'default_commission' => $defCommission, 'default_amount' => $defaultAmount, 'type' => 3);
         if ($account->getUsingCoupon()) {
             $session = Mage::getSingleton('checkout/session');
             $transactionData['coupon_code'] = $session->getData('affiliate_coupon_code');
             if ($program = $account->getUsingProgram()) {
                 $transactionData['program_id'] = $program->getId();
                 $transactionData['program_name'] = $program->getName();
             } else {
                 $transactionData['program_id'] = 0;
                 $transactionData['program_name'] = 'Affiliate Program';
             }
             $session->unsetData('affiliate_coupon_code');
             $session->unsetData('affiliate_coupon_data');
         }
         $transaction = Mage::getModel('affiliateplus/transaction')->setData($transactionData)->setId(null);
         Mage::dispatchEvent('affiliateplus_calculate_commission_after', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
         try {
             $transaction->save();
             Mage::dispatchEvent('affiliateplus_recalculate_commission', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
             if ($transaction->getIsChangedData()) {
                 $transaction->save();
             }
             Mage::dispatchEvent('affiliateplus_created_transaction', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
             $transaction->sendMailNewTransactionToAccount();
             $transaction->sendMailNewTransactionToSales();
         } catch (Exception $e) {
             // Exception
         }
     }
 }
 public function orderPlaceAfter($observer)
 {
     $order = $observer['order'];
     if (!$order->getBaseSubtotal()) {
         return $this;
     }
     $affiliateInfo = Mage::helper('affiliateplus/cookie')->getAffiliateInfo();
     $account = '';
     foreach ($affiliateInfo as $info) {
         if ($info['account']) {
             $account = $info['account'];
             break;
         }
     }
     if ($account && $account->getId()) {
         $baseDiscount = $order->getBaseAffiliateplusDiscount();
         $maxCommission = $order->getBaseGrandTotal() - $order->getBaseShippingAmount();
         // Before calculate commission
         $commissionObj = new Varien_Object(array('commission' => 0, 'default_commission' => true, 'order_item_ids' => array(), 'order_item_names' => array(), 'commission_items' => array(), 'extra_content' => array()));
         Mage::dispatchEvent('affiliateplus_calculate_commission_before', array('order' => $order, 'affiliate_info' => $affiliateInfo, 'commission_obj' => $commissionObj));
         $commissionValue = floatval($this->_getConfigHelper()->getGeneralConfig('commission'));
         $commission = $commissionObj->getCommission();
         $orderItemIds = $commissionObj->getOrderItemIds();
         $orderItemNames = $commissionObj->getOrderItemNames();
         $commissionItems = $commissionObj->getCommissionItems();
         $extraContent = $commissionObj->getExtraContent();
         if ($commissionValue && $commissionObj->getDefaultCommission()) {
             if ($this->_getConfigHelper()->getGeneralConfig('commission_type') == 'percentage') {
                 if ($commissionValue > 100) {
                     $commissionValue = 100;
                 }
                 if ($commissionValue < 0) {
                     $commissionValue = 0;
                 }
             }
             foreach ($order->getAllItems() as $item) {
                 if (in_array($item->getId(), $commissionItems)) {
                     continue;
                 }
                 if ($this->_getConfigHelper()->getGeneralConfig('affiliate_type') == 'profit') {
                     $baseProfit = $item->getBasePrice() - $item->getBaseCost();
                 } else {
                     $baseProfit = $item->getBasePrice();
                 }
                 if ($baseProfit <= 0) {
                     continue;
                 }
                 $orderItemIds[] = $item->getProduct()->getId();
                 $orderItemNames[] = $item->getName();
                 $defaultItemIds[] = $item->getProduct()->getId();
                 $defaultItemNames[] = $item->getName();
                 if ($this->_getConfigHelper()->getGeneralConfig('commission_type') == 'fixed') {
                     $defaultCommission = $item->getQtyOrdered() * min($commissionValue, $baseProfit);
                 } elseif ($this->_getConfigHelper()->getGeneralConfig('commission_type') == 'percentage') {
                     $defaultCommission = $item->getQtyOrdered() * $baseProfit * $commissionValue / 100;
                 }
                 $commission += $defaultCommission;
                 $defaultAmount = $item->getBasePrice();
             }
             //if ($this->_getConfigHelper()->getGeneralConfig('commission_type') == 'percentage')
             //	$commission = $maxCommission * $commissionValue / 100;
         }
         $originalCommission = $commission;
         $ratio = $maxCommission / $order->getBaseSubtotal();
         $commission = $ratio * $originalCommission;
         if ($commission > $maxCommission) {
             $commission = $maxCommission;
         }
         if (!$baseDiscount && !$commission) {
             return $this;
         }
         $customer = Mage::getSingleton('customer/session')->getCustomer();
         // Calculate Addition commission
         $commissionPlus = 0;
         $salesHelper = Mage::helper('affiliateplus/sales');
         // Monthly commission
         if ($salesHelper->getConfig('month')) {
             $commissionLevels = $salesHelper->getMonthlyCommission();
             if ($levels = count($commissionLevels)) {
                 $accountSales = $salesHelper->getAccountSales($account->getId());
                 // + $order->getBaseSubtotal();
                 foreach ($commissionLevels as $commissionLV) {
                     if ($accountSales >= $commissionLV['sales']) {
                         $commissionPlus = $commissionLV['commission'];
                         break;
                     }
                 }
             }
         }
         // Yearly commission
         if ($salesHelper->getConfig('year')) {
             $commissionLevels = $salesHelper->getYearlyCommission();
             if ($levels = count($commissionLevels)) {
                 $yearlyPlus = 0;
                 $accountSales = $salesHelper->getAccountSales($account->getId(), 'Y-');
                 // + $order->getBaseSubtotal();
                 foreach ($commissionLevels as $commissionLV) {
                     if ($accountSales >= $commissionLV['sales']) {
                         $yearlyPlus = $commissionLV['commission'];
                         break;
                     }
                 }
                 $commissionPlus += $yearlyPlus;
             }
         }
         // Create transaction
         $transactionData = array('account_id' => $account->getId(), 'account_name' => $account->getName(), 'account_email' => $account->getEmail(), 'customer_id' => $customer->getId(), 'customer_email' => $customer->getEmail(), 'order_id' => $order->getId(), 'order_number' => $order->getIncrementId(), 'order_item_ids' => implode(',', $orderItemIds), 'order_item_names' => implode(',', $orderItemNames), 'total_amount' => $order->getBaseSubtotal(), 'discount' => $baseDiscount, 'commission' => $commission, 'created_time' => now(), 'status' => '2', 'store_id' => Mage::app()->getStore()->getId(), 'extra_content' => $extraContent, 'ratio' => $ratio, 'original_commission' => $originalCommission, 'default_item_ids' => $defaultItemIds, 'default_item_names' => $defaultItemNames, 'default_commission' => $defaultCommission, 'default_amount' => $defaultAmount);
         if ($salesHelper->getConfig('commission_type') == 'percentage') {
             $transactionData['percent_plus'] = $commissionPlus;
             $transactionData['commission_plus'] = 0;
         } else {
             $transactionData['percent_plus'] = 0;
             $transactionData['commission_plus'] = $commissionPlus;
         }
         $transaction = Mage::getModel('affiliateplus/transaction')->setData($transactionData)->setId(null);
         Mage::dispatchEvent('affiliateplus_calculate_commission_after', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
         try {
             $transaction->save();
             Mage::dispatchEvent('affiliateplus_recalculate_commission', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
             $transaction->save();
             Mage::dispatchEvent('affiliateplus_created_transaction', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
             $transaction->sendMailNewTransactionToAccount();
             $transaction->sendMailNewTransactionToSales();
         } catch (Exception $e) {
             // Exception
         }
     }
 }
 public function createNewTransaction($order)
 {
     // Changed By Adam 28/07/2014
     if (!Mage::helper('affiliateplus')->isAffiliateModuleEnabled()) {
         return;
     }
     $orderId = Mage::getSingleton('adminhtml/session_quote')->getOrder()->getId();
     $currentOrderEdit = Mage::getModel('sales/order')->load($orderId);
     $customerEmail = $currentOrderEdit->getCustomerEmail();
     $originalIncrementId = $currentOrderEdit->getIncrementId();
     $transactionAffiliate = Mage::getModel('affiliateplus/transaction')->getCollection()->addFieldToFilter('order_number', $originalIncrementId)->getFirstItem();
     /* process code in the case :  life time affiliate Edit By Jack */
     $account = '';
     $lifeTimeAff = false;
     // Changed By Adam 15/10/2014: 2014-10-15T07:59:02+00:00 ERR (3): Notice: Undefined variable: couponCode  in C:\xampp\htdocs\project\magento1.5.0.1\app\code\local\Magestore\Affiliateplus\Model\Observer.php on line 1077
     $couponCode = Mage::getSingleton('checkout/session')->getData('affiliate_coupon_code');
     $isEnableCouponPlugin = Mage::helper('core')->isModuleEnabled('Magestore_Affiliatepluscoupon');
     $affiliateInfo = Mage::helper('affiliateplus/cookie')->getAffiliateInfo();
     if (!$orderId) {
         // when create a new order
         // life time
         $customerOrderId = $order->getCustomerId();
         $accountAndProgramData = Mage::helper('affiliateplus')->getAccountAndProgramData($customerOrderId);
         $programId = $accountAndProgramData->getProgramId();
         $programName = $accountAndProgramData->getProgramName();
         $lifeTimeAff = $accountAndProgramData->getLifetimeAff();
         $account = $accountAndProgramData->getAccount();
     } else {
         // when edit order
         if (!$couponCode && $transactionAffiliate->getCouponCode() || !$isEnableCouponPlugin) {
             /* when remove coupon of old order or un-enable coupon plugin */
             $accountAndProgramData = new Varien_Object(array('program_id' => '', 'program_name' => '', 'account' => $account, 'lifetime_aff' => $lifeTimeAff));
             $customerOrderId = $order->getCustomerId();
             $accountAndProgramData = Mage::helper('affiliateplus')->getAccountAndProgramData($customerOrderId);
             $account = $accountAndProgramData->getAccount();
             if ($account) {
                 // life time
                 $programId = $accountAndProgramData->getProgramId();
                 $programName = $accountAndProgramData->getProgramName();
                 $lifeTimeAff = $accountAndProgramData->getLifetimeAff();
             } else {
                 // not life time
                 // get information from old order
                 $accountIdByTransaction = $transactionAffiliate->getAccountId();
                 $account = Mage::getModel('affiliateplus/account')->load($accountIdByTransaction);
                 $programId = $transactionAffiliate->getProgramId();
                 $programName = $transactionAffiliate->getProgramName();
                 if (!$programId && !$programName) {
                     // if program id = null and program = null =>  get information from session
                     $programData = Mage::getSingleton('checkout/session')->getProgramData();
                     if ($programData) {
                         $programId = $programData->getData('program_id');
                         $programName = $programData->getData('name');
                     }
                 }
             }
         } else {
             $programData = Mage::getSingleton('checkout/session')->getProgramData();
             if (!$couponCode) {
                 if ($programData) {
                     $programId = $programData->getData('program_id');
                     $programName = $programData->getData('name');
                 }
                 $accountIdByTransaction = $transactionAffiliate->getAccountId();
                 $account = Mage::getModel('affiliateplus/account')->load($accountIdByTransaction);
             }
         }
     }
     /* end process code */
     $baseDiscount = $order->getBaseAffiliateplusDiscount();
     //$maxCommission = $order->getBaseGrandTotal() - $order->getBaseShippingAmount();
     // Before calculate commission
     $commissionObj = new Varien_Object(array('commission' => 0, 'default_commission' => true, 'order_item_ids' => array(), 'order_item_names' => array(), 'commission_items' => array(), 'extra_content' => array(), 'tier_commissions' => array()));
     if (!$isEnableCouponPlugin || !Mage::helper('core')->isModuleEnabled('Magestore_Affiliatepluscoupon')) {
         $session = Mage::getSingleton('checkout/session');
         $session->unsAffiliateCouponCode();
     }
     if ($couponCode && $isEnableCouponPlugin) {
         $affiliateInfo = Mage::helper('affiliateplus/cookie')->getAffiliateInfo();
         foreach ($affiliateInfo as $info) {
             if ($info['account']) {
                 $account = $info['account'];
                 break;
             }
         }
         if ($account->getUsingCoupon()) {
             $program = $account->getUsingProgram();
             if ($program) {
                 $programId = $program->getId();
                 $programName = $program->getName();
             } else {
                 $programId = 0;
                 $programName = 'Affiliate Program';
             }
         }
     }
     if (!$account) {
         return $this;
     }
     // Log affiliate tracking referal - only when has sales
     if ($this->_getConfigHelper()->getCommissionConfig('life_time_sales')) {
         $tracksCollection = Mage::getResourceModel('affiliateplus/tracking_collection');
         if ($order->getCustomerId()) {
             $tracksCollection->getSelect()->where("customer_id = {$order->getCustomerId()} OR customer_email = ?", $order->getCustomerEmail());
         } else {
             $tracksCollection->addFieldToFilter('customer_email', $order->getCustomerEmail());
         }
         if (!$tracksCollection->getSize()) {
             try {
                 Mage::getModel('affiliateplus/tracking')->setData(array('account_id' => $account->getId(), 'customer_id' => $order->getCustomerId(), 'customer_email' => $order->getCustomerEmail(), 'created_time' => now()))->save();
             } catch (Exception $e) {
             }
         }
     }
     Mage::dispatchEvent('affiliateplus_calculate_commission_before_edit', array('order' => $order, 'program_id' => $programId, 'commission_obj' => $commissionObj, 'account' => $account));
     $storeId = Mage::getSingleton('adminhtml/session_quote')->getStoreId();
     $commissionType = $this->_getConfigHelper()->getCommissionConfig('commission_type', $storeId);
     $commissionValue = floatval($this->_getConfigHelper()->getCommissionConfig('commission', $storeId));
     if ($orderId && Mage::helper('affiliateplus/cookie')->getNumberOrdered() > 1 || !$orderId && Mage::helper('affiliateplus/cookie')->getNumberOrdered()) {
         if ($this->_getConfigHelper()->getCommissionConfig('use_secondary', $storeId)) {
             $commissionType = $this->_getConfigHelper()->getCommissionConfig('secondary_type', $storeId);
             $commissionValue = floatval($this->_getConfigHelper()->getCommissionConfig('secondary_commission', $storeId));
         }
     }
     $commission = $commissionObj->getCommission();
     $orderItemIds = $commissionObj->getOrderItemIds();
     $orderItemNames = $commissionObj->getOrderItemNames();
     $commissionItems = $commissionObj->getCommissionItems();
     $extraContent = $commissionObj->getExtraContent();
     $tierCommissions = $commissionObj->getTierCommissions();
     $defaultItemIds = array();
     $defaultItemNames = array();
     $defaultAmount = 0;
     $defCommission = 0;
     /* set Condition Edit By Jack */
     // if(isset($count) && $count == 0 && count($extraContent) == 0)
     //  return $this;
     /* */
     /* Changed By Adam to customize function: Commission for whole cart 22/07/2014 */
     // Calculate the total price of items ~~ baseSubtotal
     $baseItemsPrice = 0;
     foreach ($order->getAllItems() as $item) {
         if ($item->getParentItemId()) {
             continue;
         }
         // Kiem tra xem item da tinh trong program nao chua, neu roi thi ko tinh nua
         if (in_array($item->getId(), $commissionItems)) {
             continue;
         }
         if ($item->getHasChildren() && $item->isChildrenCalculated()) {
             foreach ($item->getChildrenItems() as $child) {
                 $baseItemsPrice += $item->getQtyOrdered() * ($child->getQtyOrdered() * $child->getBasePrice() - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount());
                 //$baseItemsPrice += $item->getQtyOrdered() * ($child->getQty() * $child->getBasePrice() - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount());
             }
         } elseif ($item->getProduct()) {
             $baseItemsPrice += $item->getQtyOrdered() * $item->getBasePrice() - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
         }
     }
     if ($commissionValue && $commissionObj->getDefaultCommission()) {
         if ($commissionType == 'percentage') {
             if ($commissionValue > 100) {
                 $commissionValue = 100;
             }
             if ($commissionValue < 0) {
                 $commissionValue = 0;
             }
         }
         foreach ($order->getAllItems() as $item) {
             $affiliateplusCommissionItem = '';
             if ($item->getParentItemId()) {
                 continue;
             }
             if (in_array($item->getId(), $commissionItems)) {
                 continue;
             }
             if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                 // $childHasCommission = false;
                 foreach ($item->getChildrenItems() as $child) {
                     $affiliateplusCommissionItem = '';
                     if ($this->_getConfigHelper()->getCommissionConfig('affiliate_type') == 'profit') {
                         $baseProfit = $child->getBasePrice() - $child->getBaseCost();
                     } else {
                         $baseProfit = $child->getBasePrice();
                     }
                     $baseProfit = $child->getQtyOrdered() * $baseProfit - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                     if ($baseProfit <= 0) {
                         continue;
                     }
                     // $childHasCommission = true;
                     /* Changed By Adam: Commission for whole cart 22/07/2014 */
                     if ($commissionType == "cart_fixed") {
                         $commissionValue = min($commissionValue, $baseItemsPrice);
                         $itemPrice = $child->getQtyOrdered() * $child->getBasePrice() - $child->getBaseDiscountAmount() - $child->getBaseAffiliateplusAmount();
                         $itemCommission = $itemPrice * $commissionValue / $baseItemsPrice;
                         $defaultCommission = min($itemPrice * $commissionValue / $baseItemsPrice, $baseProfit);
                     } elseif ($commissionType == 'fixed') {
                         $defaultCommission = min($child->getQtyOrdered() * $commissionValue, $baseProfit);
                     } elseif ($commissionType == 'percentage') {
                         $defaultCommission = $baseProfit * $commissionValue / 100;
                     }
                     $affiliateplusCommissionItem .= $defaultCommission . ",";
                     $commissionObj = new Varien_Object(array('profit' => $baseProfit, 'commission' => $defaultCommission, 'tier_commission' => array(), 'base_item_price' => $baseItemsPrice, 'affiliateplus_commission_item' => $affiliateplusCommissionItem));
                     Mage::dispatchEvent('affiliateplus_calculate_tier_commission', array('item' => $child, 'account' => $account, 'commission_obj' => $commissionObj));
                     if ($commissionObj->getTierCommission()) {
                         $tierCommissions[$child->getId()] = $commissionObj->getTierCommission();
                     }
                     $commission += $commissionObj->getCommission();
                     $child->setAffiliateplusCommission($commissionObj->getCommission());
                     $child->setAffiliateplusCommissionItem($commissionObj->getAffiliateplusCommissionItem());
                     $defCommission += $commissionObj->getCommission();
                     $defaultAmount += $child->getBasePrice();
                     // Changed by Adam 15/10/2014
                     // $orderItemIds[] = $child->getProduct()->getId();
                     $orderItemIds[] = $child->getProductId();
                     $orderItemNames[] = $child->getName();
                     // Changed by Adam 15/10/2014
                     // $defaultItemIds[] = $child->getProduct()->getId();
                     $defaultItemIds[] = $child->getProductId();
                     $defaultItemNames[] = $child->getName();
                 }
                 // if ($childHasCommission) {
                 // $orderItemIds[] = $item->getProduct()->getId();
                 // $orderItemNames[] = $item->getName();
                 // $defaultItemIds[] = $item->getProduct()->getId();
                 // $defaultItemNames[] = $item->getName();
                 // }
             } else {
                 if ($this->_getConfigHelper()->getCommissionConfig('affiliate_type') == 'profit') {
                     $baseProfit = $item->getBasePrice() - $item->getBaseCost();
                 } else {
                     $baseProfit = $item->getBasePrice();
                 }
                 //Zend_Debug::dump($item->getBaseAffiliateplusAmount());die;
                 $baseProfit = $item->getQtyOrdered() * $baseProfit - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                 if ($baseProfit <= 0) {
                     continue;
                 }
                 // Changed by Adam 15/10/2014: Call to a member function getId() on a non-object in C:\xampp\htdocs\project\magento1.5.0.1\app\code\local\Magestore\Affiliateplus\Model\Observer.php on line 1315
                 // $orderItemIds[] = $item->getProduct()->getId();
                 $orderItemIds[] = $item->getProduct() ? $item->getProduct()->getId() : $item->getProductId();
                 $orderItemNames[] = $item->getName();
                 // Changed by Adam 15/10/2014
                 $defaultItemIds[] = $item->getProduct() ? $item->getProduct()->getId() : $item->getProductId();
                 $defaultItemNames[] = $item->getName();
                 /* Changed BY Adam 22/07/2014 */
                 if ($commissionType == 'cart_fixed') {
                     $commissionValue = min($commissionValue, $baseItemsPrice);
                     $itemPrice = $item->getQtyOrdered() * $item->getBasePrice() - $item->getBaseDiscountAmount() - $item->getBaseAffiliateplusAmount();
                     $itemCommission = $itemPrice * $commissionValue / $baseItemsPrice;
                     $defaultCommission = min($itemPrice * $commissionValue / $baseItemsPrice, $baseProfit);
                 } elseif ($commissionType == 'fixed') {
                     $defaultCommission = min($item->getQtyOrdered() * $commissionValue, $baseProfit);
                 } elseif ($commissionType == 'percentage') {
                     $defaultCommission = $baseProfit * $commissionValue / 100;
                 }
                 $affiliateplusCommissionItem .= $defaultCommission . ",";
                 $commissionObj = new Varien_Object(array('profit' => $baseProfit, 'commission' => $defaultCommission, 'tier_commission' => array(), 'base_item_price' => $baseItemsPrice, 'affiliateplus_commission_item' => $affiliateplusCommissionItem));
                 Mage::dispatchEvent('affiliateplus_calculate_tier_commission', array('item' => $item, 'account' => $account, 'commission_obj' => $commissionObj));
                 if ($commissionObj->getTierCommission()) {
                     $tierCommissions[$item->getId()] = $commissionObj->getTierCommission();
                 }
                 $commission += $commissionObj->getCommission();
                 $item->setAffiliateplusCommission($commissionObj->getCommission());
                 // Changed By Adam 14/08/2014: Invoice tung phan
                 $item->setAffiliateplusCommissionItem($commissionObj->getAffiliateplusCommissionItem());
                 $defCommission += $commissionObj->getCommission();
                 $defaultAmount += $item->getBasePrice();
             }
         }
     }
     /* if remove coupon, then return Edit By Jack */
     $currentCouponCode = $transactionAffiliate->getCouponCode();
     if ($currentCouponCode && !Mage::getSingleton('checkout/session')->getData('affiliate_coupon_code') && !$baseDiscount || $account->getStatus() == 2) {
         $commission = 0;
     }
     //set Commission Value
     Mage::getSingleton('adminhtml/session_quote')->setCommission($commission);
     /* end if */
     if (!$baseDiscount && !$commission) {
         return $this;
     }
     // Create transaction
     $storeId = Mage::getSingleton('adminhtml/session_quote')->getStore()->getId();
     $transactionData = array('account_id' => $account->getId(), 'account_name' => $account->getName(), 'account_email' => $account->getEmail(), 'customer_id' => $order->getCustomerId(), 'customer_email' => $order->getCustomerEmail(), 'order_id' => $order->getId(), 'order_number' => $order->getIncrementId(), 'order_item_ids' => implode(',', $orderItemIds), 'order_item_names' => implode(',', $orderItemNames), 'total_amount' => $order->getBaseSubtotal(), 'discount' => $baseDiscount, 'commission' => $commission, 'created_time' => now(), 'status' => '2', 'store_id' => $storeId, 'extra_content' => $extraContent, 'tier_commissions' => $tierCommissions, 'default_item_ids' => $defaultItemIds, 'default_item_names' => $defaultItemNames, 'default_commission' => $defCommission, 'default_amount' => $defaultAmount, 'type' => 3, 'program_id' => $programId, 'program_name' => $programName, 'coupon_code' => Mage::getSingleton('checkout/session')->getData('affiliate_coupon_code'));
     $transaction = Mage::getModel('affiliateplus/transaction')->setData($transactionData)->setId(null);
     $transactionLatest = Mage::getModel('affiliateplus/transaction')->getCollection()->getLastItem();
     try {
         if ($transactionLatest->getOrderNumber() != $transactionData['order_number']) {
             $transaction->save();
             if ($transaction->getIsChangedData()) {
                 $transaction->save();
             }
             if (!$affiliateInfo) {
                 $affiliateInfo = '';
             }
             Mage::dispatchEvent('affiliateplus_recalculate_commission', array('transaction' => $transaction, 'order' => $order, 'affiliate_info' => $affiliateInfo));
             Mage::dispatchEvent('affiliateplus_created_transaction', array('transaction' => $transaction, 'order' => $order));
             $transaction->sendMailNewTransactionToAccount();
             $transaction->sendMailNewTransactionToSales();
         }
     } catch (Exception $e) {
         // Exception
     }
 }