/** * @param unknown_type $message * @param Db $db * @return void|boolean */ function processMessage($message, $db) { //$message = Tools::jsonDecode('{"id_event":5,"date_event":"2012-03-14 13:07:18","reference":"274","id_customer":"10687"}', true); //$message = Tools::jsonDecode($response->body->ReceiveMessageResult->Message->Body, true); $message = Tools::jsonDecode($message, true); $id_event = $message['id_event']; if ($id_event == ONLINE_ORDER) { VBRewards::addRewardPoints($message['id_customer'], $id_event, 0, 100, 'Online payment bonus - Order no ' . $message['reference'], $message['reference'], $message['date_event']); return; } if ($id_event == EVENT_REGISTRATION) { VBRewards::addRewardPoints($message['id_customer'], $id_event, 0, 50, 'Registration/Sign-up', $message['reference'], $message['date_event']); return; } if (isset($message['first_order']) && $message['first_order']) { VBRewards::addRewardPoints($message['id_customer'], $id_event, 7, 50, 'First Order Bonus - Order no ' . $message['reference'], $message['reference'], $message['date_event']); return; } if (isset($message['first_review']) && $message['first_review']) { VBRewards::addRewardPoints($message['id_customer'], $id_event, 9, 50, 'Product Review - First review bonus', $message['reference'], $message['date_event']); return; } $res = $db->ExecuteS("select le.id_event, le.name as 'event_name', r.id_rule, r.name as 'rule_name', re.execute_sequence\n\t\t\t\t\t\t\tfrom vb_rules r\n\t\t\t\t\t\t\tinner join vb_loyalty_rule_events re on (r.id_rule = re.id_rule)\n\t\t\t\t\t\t\tinner join vb_loyalty_events le on le.id_event = re.id_event\n\t\t\t\t\t\t\twhere le.id_event = " . $message['id_event'] . " order by le.id_event, re.execute_sequence"); foreach ($res as $rule_row) { if ($rule_row['id_rule'] == 9 || $rule_row['id_rule'] == 7) { continue; } $rewards_rule = RewardRules::getRule($rule_row['rule_name']); $rewards_rule->init($db); $rewards_rule->processEvent($db, $message); echo PHP_EOL; } return false; }
public function processEvent($db, $message) { echo "processing order_feedback"; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = (int) $message['reference']; $order = new Order($reference); //this order feedback is not from the same customer who placed this order if ((int) $order->id_customer != (int) $id_customer) { return false; } $result = $db->getRow("select \n count(*) as processed\n from \n vb_customer_rewards\n where \n reference = " . $reference . "\n and id_customer = " . $id_customer . "\n and id_event = " . EVENT_ORDER_FEEDBACK); //Feedback reward for this order is already processed if ((int) $result['processed'] === 1) { return false; } // only one entry per day ( for multiple order feedbacks also ) $todayPoints = $this->getTodaysOrderFeedbackPoints($db, $id_customer); if ($todayPoints === 0) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$order_feedback_points, 'Order Feedback', $reference, $date_add); return true; } $todayRewardId = (int) $todayPoints['id_reward']; $todayTotalPoints = (int) $todayPoints['points_awarded'] + self::$order_feedback_points; $todayBalance = VBRewards::getCustomerPoints($id_customer) + self::$order_feedback_points; $db->Execute(" UPDATE\n vb_customer_rewards \n SET \n points_awarded = " . $todayTotalPoints . ", balance = " . $todayBalance . "\n WHERE \n id_reward = " . $todayRewardId); $db->Execute(" UPDATE \n vb_customer_reward_balance \n SET \n balance = " . $todayBalance . "\n WHERE \n id_customer = " . (int) $id_customer); return true; }
public function processEvent($db, $message) { //Not processing this indusdiva return true; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $order = new Order((int) $message['reference']); if (self::rewardExistsForReference($id_customer, $id_event, self::$id_rule, $message['reference'])) { echo 'skipping processed reward' . PHP_EOL; return; } $points_added = $order->total_paid_real * self::$valid_order_points; VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, 'Order delivered - Order no ' . $order->id, $order->id, $date_add); }
public function processEvent($db, $message) { echo "processing first_order_bonus : " . self::$first_order_bonus; $id_customer = $message['id_customer']; $id_event = $message['id_event']; if (self::rewardExistsForReference($id_customer, $id_event, self::$id_rule, $message['reference'])) { echo 'skipping processed reward' . PHP_EOL; return; } $date_add = $message['date_event']; $order = new Order((int) $message['reference']); if (Customer::getTotalDeliveredForCustomer($id_customer) == 1) { $points_added = self::$first_order_bonus; VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, 'First Order Bonus - Order no ' . $order->id, $order->id, $date_add); } }
public function processEvent($db, $message) { echo "processing facebook_page_like . " . self::$facebook_page_like_points . PHP_EOL; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = $message['reference']; $result = $db->getRow(" select \n count(*) as 'page_likes'\n from \n vb_customer_rewards\n\t\t\t\twhere \n id_customer = " . $id_customer . "\n and id_event = " . EVENT_FACEBOOK_PAGE_LIKE); $page_likes = (int) $result['page_likes']; $result = $db->getRow(" select \n count(*) as 'page_unlikes'\n from \n vb_customer_rewards\n\t\t\t\twhere \n id_customer = " . $id_customer . "\n and id_event = " . EVENT_FACEBOOK_PAGE_UNLIKE); $page_unlikes = (int) $result['page_unlikes']; if ($page_likes - $page_unlikes === 0) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$facebook_page_like_points, 'Facebook Like of Indusdiva Page', $reference, $date_add); } return true; }
public function processEvent($db, $message) { echo "processing order_value_bonus : " . self::$order_value_bonus_150 . " : " . self::$order_value_bonus_250 . " : " . self::$order_value_bonus_500 . " : " . self::$order_value_bonus_750 . " : " . self::$order_value_bonus_1000 . " : " . self::$order_value_bonus_1500; $id_customer = $message['id_customer']; $id_event = $message['id_event']; if (self::rewardExistsForReference($id_customer, $id_event, self::$id_rule, $message['reference'])) { echo 'skipping processed reward' . PHP_EOL; return; } $date_add = $message['date_event']; $order = new Order((int) $message['reference']); $points_added = 0; $description = ''; $actual_paid = $order->total_paid_real / $order->conversion_rate; if ($actual_paid >= 1500) { $description = 'Order Value Bonus (Above 1,500) - Order no ' . $order->id; $points_added = self::$order_value_bonus_1500; } else { if ($actual_paid >= 1000) { $description = 'Order Value Bonus (Above 1,000) - Order no ' . $order->id; $points_added = self::$order_value_bonus_1000; } else { if ($actual_paid >= 750) { $description = 'Order Value Bonus (Above 750) - Order no ' . $order->id; $points_added = self::$order_value_bonus_750; } else { if ($actual_paid >= 500) { $description = 'Order Value Bonus (Above 500) - Order no ' . $order->id; $points_added = self::$order_value_bonus_500; } else { if ($actual_paid >= 250) { $description = 'Order Value Bonus (Above 250) - Order no ' . $order->id; $points_added = self::$order_value_bonus_250; } else { if ($actual_paid >= 150) { $description = 'Order Value Bonus (Above 150) - Order no ' . $order->id; $points_added = self::$order_value_bonus_150; } } } } } } if ($points_added) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, $description, $order->id, $date_add); } }
public function processEvent($db, $message) { echo "processing wishlist_product_facebook_share"; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = (int) $message['reference']; $result = $db->getRow("select \n count(*) as processed\n from \n vb_customer_rewards\n where \n reference = " . $reference . "\n and id_customer = " . $id_customer . "\n and id_event = " . EVENT_WISHLIST_PRODUCT_FACEBOOK_SHARE); //Feedback reward for this order is already processed if ((int) $result['processed'] === 1) { return false; } $result = $db->getRow("select \n sum(points_awarded) points_awarded, sum(points_deducted) points_deducted\n from \n vb_customer_rewards\n where \n id_customer = " . $id_customer . "\n and id_event = " . EVENT_WISHLIST_PRODUCT_FACEBOOK_SHARE); $points_awarded = (int) $result['points_awarded']; $points_deducted = (int) $result['points_deducted']; $total_points_awarded = $points_awarded - $points_deducted; //limit for points awarded is reached if ($total_points_awarded >= 25 * self::$wishlist_product_facebook_share_points) { return false; } /*$todayPoints = $this->getTodaysWLSharePoints($db, $id_customer); if (!$todayPoints) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$wishlist_product_facebook_share_points, 'Wishlist Product Share', $reference, $date_add); return true; } $todayRewardId = (int) $todayPoints['id_reward']; $todayTotalPoints = (int) $todayPoints['points_awarded'] + self::$wishlist_product_facebook_share_points; $todayBalance = VBRewards::getCustomerPoints($id_customer) + self::$wishlist_product_facebook_share_points; $db->Execute( "UPDATE vb_customer_rewards SET points_awarded = " . $todayTotalPoints . ", balance = " . $todayBalance . " WHERE id_reward = " . $todayRewardId); $db->Execute("UPDATE vb_customer_reward_balance SET balance = " . $todayBalance . " WHERE id_customer = " . (int) $id_customer); */ VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$wishlist_product_facebook_share_points, 'Wishlist Product Share', $reference, $date_add); return true; }
public function processEvent($db, $message) { echo "processing product_review_approved : " . self::$product_review_points; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = $message['reference']; /* if($this->getTotalReviewPoints($db, $id_customer) > 2500) return; */ if (self::rewardExistsForReference($id_customer, $id_event, self::$id_rule, $message['reference'])) { echo 'skipping processed reward' . PHP_EOL; return; } $points_added = self::$product_review_points; $product_name = $this->getProductName($db, (int) $reference); VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, 'Product Review - ' . $product_name, $reference, $date_add); }
public function processEvent($db, $message) { return true; echo "processing first_approved_review_bonus : "; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = $message['reference']; if (self::rewardExistsForReference($id_customer, $id_event, self::$id_rule, $message['reference'])) { echo 'skipping processed reward' . PHP_EOL; return; } //get the number of approved reviews $result = Db::getInstance()->getRow("select count(*) as 'total_approved' from ps_product_comment where validate = 1 and id_customer = " . $id_customer); if ($result['total_approved'] == 1) { $points_added = self::$first_review_bonus; VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, 'Product Review - First review bonus', $reference, $date_add); } }
public function processEvent($db, $message) { echo "processing write_testimonial"; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = (int) $message['reference']; // only one entry per day ( for multiple order feedbacks also ) $todayPoints = $this->getTodaysTestimonialPoints($db, $id_customer); if (!$todayPoints) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$write_testimonial_points, 'For Writing Testimonial', $reference, $date_add); return true; } $todayRewardId = (int) $todayPoints['id_reward']; $todayTotalPoints = (int) $todayPoints['points_awarded'] + self::$write_testimonial_points; $todayBalance = VBRewards::getCustomerPoints($id_customer) + self::$write_testimonial_points; $db->Execute(" UPDATE\n vb_customer_rewards \n SET \n points_awarded = " . $todayTotalPoints . ", balance = " . $todayBalance . "\n WHERE \n id_reward = " . $todayRewardId); $db->Execute(" UPDATE \n vb_customer_reward_balance \n SET \n balance = " . $todayBalance . "\n WHERE \n id_customer = " . (int) $id_customer); return true; }
public function processEvent($db, $message) { echo "processing order_facebook_share"; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = (int) $message['reference']; $order = new Order($reference); //this order facebook share is not from the same customer who placed this order if ((int) $order->id_customer != (int) $id_customer) { return false; } $result = $db->getRow("select \n count(*) as processed\n from \n vb_customer_rewards\n where \n reference = " . $reference . "\n and id_customer = " . $id_customer . "\n and id_event = " . EVENT_ORDER_FACEBOOK_SHARE); //Feedback reward for this order is already processed if ((int) $result['processed'] === 1) { return false; } VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$order_facebook_share_points, "Share Order Products on Facebook (Order - {$reference})", $reference, $date_add); return true; }
public function processEvent($db, $message) { echo "processing referral_order_bonus : " . self::$referral_order_bonus_10 . " : " . self::$referral_order_bonus_25; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $reference = $message['reference']; $date_add = $message['date_event']; if (Customer::getTotalDeliveredForCustomer($id_customer) == 1) { $customer = new Customer($id_customer); if (!$customer->id_referrer) { return; } $id_referrer = $customer->id_referrer; //get total reffered order for this referrer $referrals = Customer::getCustomerReferrals($id_referrer); $countReferredOrders = 0; foreach ($referrals as $referral) { if ($referral['total_delivered'] > 0) { $countReferredOrders++; } } $points_added = 0; $description = ''; if ($countReferredOrders == 10) { $description = 'Bonus Points - 10 friends referred'; $points_added = self::$referral_order_bonus_10; } /*else if($countReferredOrders == 25) { $description = 'Bonus Points - 25 friends referred'; $points_added = self::$referral_order_bonus_25; }*/ if (self::rewardExistsForReference($id_referrer, $id_event, self::$id_rule, $reference)) { echo 'skipping processed reward' . PHP_EOL; return; } if ($points_added) { VBRewards::addRewardPoints($id_referrer, $id_event, self::$id_rule, $points_added, $description, $reference, $date_add); } } }
public function processEvent($db, $message) { echo "processing google_plus_click : " . self::$google_plus_click_points; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $date_add = $message['date_event']; $reference = $message['reference']; $result = $db->getRow("select sum(points_awarded) as 'total_points'\n\t\t\t\t\t\t\t\tfrom vb_customer_rewards\n\t\t\t\t\t\t\t\twhere id_customer = " . $id_customer . "\n\t\t\t\t\t\t\t\tand id_event = " . EVENT_GOOGLE_LIKE); if (!$result || $result['total_points'] == 0) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$google_plus_click_points, 'Google Plus Share', $reference, $date_add); return true; } else { $points_awarded = (int) $result['total_points']; } $result = $db->getRow("select sum(points_deducted) as 'total_points'\n\t\t\t\t\t\t\t\tfrom vb_customer_rewards\n\t\t\t\t\t\t\t\twhere id_customer = " . $id_customer . "\n\t\t\t\t\t\t\t\tand id_event = " . EVENT_GOOGLE_UNLIKE); if (!$result['total_points'] || $result['total_points'] == 0) { $points_deducted = 0; } else { $points_deducted = (int) $result['total_points']; } if ($points_awarded - $points_deducted >= 25 * self::$google_plus_click_points) { echo 'total points limit reached'; return; } $todayPoints = $this->getTodaysGPlusPoints($db, $id_customer); if (!$todayPoints) { VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, self::$google_plus_click_points, 'Google Plus Share', $reference, $date_add); return true; } $todayRewardId = (int) $todayPoints['id_reward']; $todayTotalPoints = (int) $todayPoints['points_awarded'] + self::$google_plus_click_points; $todayBalance = VBRewards::getCustomerPoints($id_customer) + self::$google_plus_click_points; $db->Execute("UPDATE vb_customer_rewards \n\t\t\t\t\t\tSET points_awarded = " . $todayTotalPoints . ", \n\t\t\t\t\t\tbalance = " . $todayBalance . "\n\t\t\t\t\t\tWHERE id_reward = " . $todayRewardId); $db->Execute("UPDATE vb_customer_reward_balance \n\t\t\t\t\t\tSET balance = " . $todayBalance . "\n\t\t\t\t\t\tWHERE id_customer = " . (int) $id_customer); return true; }
public function processEvent($db, $message) { echo "processing referral_order_points : " . self::$referral_order_points; $id_customer = $message['id_customer']; $id_event = $message['id_event']; $reference = (int) $message['reference']; $date_add = $message['date_event']; if (Customer::getTotalDeliveredForCustomer($id_customer) == 1) { $customer = new Customer($id_customer); if (!$customer->id_referrer) { return; } $id_referrer = $customer->id_referrer; $points_added = self::$referral_order_points; if (self::rewardExistsForReference($id_referrer, $id_event, self::$id_rule, $reference)) { echo 'skipping processed reward referral bonus' . PHP_EOL; return; } $order = new Order((int) $reference); $referred_customer = new Customer($order->id_customer); VBRewards::addRewardPoints($id_referrer, $id_event, self::$id_rule, $points_added, "First order by a friend - " . $referred_customer->email, $reference, $date_add); VBRewards::addRewardPoints($id_customer, $id_event, self::$id_rule, $points_added, "First order through referral", $reference, $date_add); } }
public function addWithemail($autodate = true, $templateVars = false) { $lastOrderState = $this->getLastOrderState($this->id_order); if (!parent::add($autodate)) { return false; } $result = Db::getInstance()->getRow(' SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email` FROM `' . _DB_PREFIX_ . 'order_history` oh LEFT JOIN `' . _DB_PREFIX_ . 'orders` o ON oh.`id_order` = o.`id_order` LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON o.`id_customer` = c.`id_customer` LEFT JOIN `' . _DB_PREFIX_ . 'order_state` os ON oh.`id_order_state` = os.`id_order_state` LEFT JOIN `' . _DB_PREFIX_ . 'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = o.`id_lang`) WHERE oh.`id_order_history` = ' . (int) $this->id . ' AND os.`send_email` = 1'); $order = new Order((int) $this->id_order); if (isset($result['template']) and Validate::isEmail($result['email'])) { $topic = $result['osname']; $data = array('{lastname}' => $result['lastname'], '{firstname}' => $result['firstname'], '{id_order}' => (int) $this->id_order); if ($templateVars) { $data = array_merge($data, $templateVars); } $data['{total_paid}'] = Tools::displayPrice((double) $order->total_paid, new Currency((int) $order->id_currency), false); $data['{order_name}'] = sprintf("#%06d", (int) $order->id); // An additional email is sent the first time a virtual item is validated if ($virtualProducts = $order->getVirtualProducts() and (!$lastOrderState or !$lastOrderState->logable) and $newOrderState = new OrderState($this->id_order_state, Configuration::get('PS_LANG_DEFAULT')) and $newOrderState->logable) { global $smarty; $assign = array(); foreach ($virtualProducts as $key => $virtualProduct) { $id_product_download = ProductDownload::getIdFromIdProduct($virtualProduct['product_id']); $product_download = new ProductDownload($id_product_download); $assign[$key]['name'] = $product_download->display_filename; $dl_link = $product_download->getTextLink(false, $virtualProduct['download_hash']) . '&id_order=' . $order->id . '&secure_key=' . $order->secure_key; $assign[$key]['link'] = $dl_link; if ($virtualProduct['download_deadline'] != '0000-00-00 00:00:00') { $assign[$key]['deadline'] = Tools::displayDate($virtualProduct['download_deadline'], $order->id_lang); } if ($product_download->nb_downloadable != 0) { $assign[$key]['downloadable'] = $product_download->nb_downloadable; } } $smarty->assign('virtualProducts', $assign); $smarty->assign('id_order', $order->id); $iso = Language::getIsoById((int) $order->id_lang); $links = $smarty->fetch(_PS_MAIL_DIR_ . $iso . '/download-product.tpl'); $tmpArray = array('{nbProducts}' => count($virtualProducts), '{virtualProducts}' => $links); $data = array_merge($data, $tmpArray); global $_LANGMAIL; Mail::Send((int) $order->id_lang, 'download_product', Mail::l('Virtual product to download'), $data, $result['email'], $result['firstname'] . ' ' . $result['lastname']); } //custom subjects $emailSubject = $topic; $smsText = ''; $delivery = new Address((int) $order->id_address_delivery); if ($this->id_order_state == _PS_OS_CANCELED_) { $emailSubject = 'Your order #' . $order->id . ' with IndusDiva.com has been cancelled'; $smsText = 'Dear customer, your order #' . $order->id . ' with IndusDiva.com has been cancelled. www.indusdiva.com'; Tools::sendSMS($delivery->phone_mobile, $smsText); } else { if ($this->id_order_state == _PS_OS_REFUND_) { $emailSubject = 'Refund of your payment at IndusDiva.com'; $smsText = 'Dear customer, an amount of ' . Tools::displayPrice((double) $order->total_paid) . ' has been credited to your account against your order #' . $order->id . ' at IndusDiva.com. www.indusdiva.com'; Tools::sendSMS($delivery->phone_mobile, $smsText); } } if (Validate::isLoadedObject($order)) { Mail::Send((int) $order->id_lang, $result['template'], $emailSubject, $data, $result['email'], $result['firstname'] . ' ' . $result['lastname']); } } /* Send loyalty rules message */ if ($this->id_order_state == _PS_OS_DELIVERED_) { $customer = new Customer($order->id_customer); $customer->total_delivered++; $customer->update(); Tools::sendSQSRuleMessage(EVENT_ORDER_DELIVERED, $order->id, $order->id_customer, $this->date_add); } else { if ($this->id_order_state == _PS_OS_CANCELED_) { $order_cart = new Cart($order->id_cart); $points_redeemed = $order_cart->getPoints(); if ($points_redeemed) { VBRewards::addRewardPoints($order->id_customer, EVENT_ORDER_CANCELLED, 0, $points_redeemed, 'Redemption order cancelled - Order no ' . $order->id, $order->id, $order->date_add); } /* //if online payment bonus awarded $reward = rule_base::getReward($order->id_customer, ONLINE_ORDER, 0, $order->id); if($reward) { $points_removed = $reward['points_awarded']; VBRewards::removeRewardPoints($order->id_customer, EVENT_ORDER_CANCELLED, 0, $points_removed, 'Order Cancellation - Bonus coins reverted - Order no ' . $order->id, $order->id, $this->date_add); } */ //if the order was delivered if ($lastOrderState->id == _PS_OS_DELIVERED_) { $customer = new Customer($order->id_customer); $customer->total_delivered--; $customer->update(); Tools::sendSQSRuleMessage(EVENT_ORDER_CANCELLED, $order->id, $order->id_customer, $this->date_add); } } else { if ($this->id_order_state == _PS_OS_PREPARATION_) { if ($lastOrderState->id == _PS_OS_CANCELED_) { $order_cart = new Cart($order->id_cart); $points_redeemed = $order_cart->getPoints(); if ($points_redeemed > 0) { VBRewards::removeRewardPoints($order->id_customer, EVENT_POINTS_REDEEMED, 0, $points_redeemed, 'Coins redeemed - Order no ' . $order->id, $order->id, $order->date_add); } } } } } return true; }