code = 'ot_gv'; $this->title = $aLang['module_order_total_gv_title']; $this->header = $aLang['module_order_total_gv_header']; $this->description = $aLang['module_order_total_gv_description']; $this->user_prompt = $aLang['module_order_total_gv_user_prompt']; $this->enabled = (defined('MODULE_ORDER_TOTAL_GV_STATUS') && (MODULE_ORDER_TOTAL_GV_STATUS == 'true') ? true : false); $this->sort_order = (defined('MODULE_ORDER_TOTAL_GV_SORT_ORDER') ? MODULE_ORDER_TOTAL_GV_SORT_ORDER : null); $this->include_shipping = (defined('MODULE_ORDER_TOTAL_GV_INC_SHIPPING') ? MODULE_ORDER_TOTAL_GV_INC_SHIPPING : null); $this->include_tax = (defined('MODULE_ORDER_TOTAL_GV_INC_TAX') ? MODULE_ORDER_TOTAL_GV_INC_TAX : null); $this->calculate_tax = (defined('MODULE_ORDER_TOTAL_GV_CALC_TAX') ? MODULE_ORDER_TOTAL_GV_CALC_TAX : null); $this->credit_tax = (defined('MODULE_ORDER_TOTAL_GV_CREDIT_TAX') ? MODULE_ORDER_TOTAL_GV_CREDIT_TAX : null); $this->tax_class = (defined('MODULE_ORDER_TOTAL_GV_TAX_CLASS') ? MODULE_ORDER_TOTAL_GV_TAX_CLASS : null); $this->show_redeem_box = (defined('MODULE_ORDER_TOTAL_GV_REDEEM_BOX') ? MODULE_ORDER_TOTAL_GV_REDEEM_BOX : null); $this->credit_class = TRUE; $this->checkbox = $this->user_prompt . ''; $this->output = array(); } function process() { global $oOrder, $oCurrencies; if (isset ($_SESSION['cot_gv']) && $_SESSION['cot_gv'] == TRUE) { $order_total = $this->get_order_total(); $od_amount = $this->calculate_credit($order_total); if ($this->calculate_tax != "none") { $tod_amount = $this->calculate_tax_deduction($order_total, $od_amount, $this->calculate_tax); $od_amount = $this->calculate_credit($order_total); } $this->deduction = $od_amount; $oOrder->info['total'] = $oOrder->info['total'] - $od_amount; if ($od_amount > 0) { $this->output[] = array('title' => '' . $this->title . ':', 'text' => ' - ' . $oCurrencies->format($od_amount) . '', 'value' => $sod_amount); } } } function selection_test() { if ($this->user_has_gv_account($_SESSION['customer_id'])) { return true; } else { return FALSE; } } function pre_confirmation_check($order_total) { $gv_payment_amount = $this->calculate_credit($order_total); return $gv_payment_amount; } function use_credit_amount() { $_SESSION['cot_gv'] = FALSE; $output_string = ''; if ($this->selection_test()) { $output_string .= ' '; $output_string .= '' . $this->checkbox . '' . '' . "\n"; } return $output_string; } function update_credit_account($i) { global $oOrder, $insert_id; // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); if (preg_match('/^GIFT/', addslashes($oOrder->products[$i]['model']))) { $gv_order_amount = ($oOrder->products[$i]['final_price'] * $oOrder->products[$i]['qty']); if ($this->credit_tax=='true') $gv_order_amount = $gv_order_amount * (100 + $oOrder->products[$i]['tax']) / 100; $gv_order_amount = $gv_order_amount * 100 / 100; if (MODULE_ORDER_TOTAL_GV_QUEUE == 'false') { // GV_QUEUE is true so release amount to account immediately $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_query = $dbconn->Execute("SELECT amount FROM $coupon_gv_customertable WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); $customer_gv = FALSE; $total_gv_amount = 0; if ($gv_result = $gv_query->fields) { $total_gv_amount = $gv_result['amount']; $customer_gv = TRUE; } $total_gv_amount = $total_gv_amount + $gv_order_amount; if ($customer_gv) { $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_update=$dbconn->Execute("UPDATE $coupon_gv_customertable SET amount = '" . oos_db_input($total_gv_amount) . "' WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); } else { $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_insert=$dbconn->Execute("INSERT INTO $coupon_gv_customertable (customer_id, amount) VALUES ('" . intval($_SESSION['customer_id']) . "', '" . oos_db_input($total_gv_amount) . "')"); } } else { // GV_QUEUE is true - so queue the gv for release by store owner $remote_addr = oos_server_get_remote(); $coupon_gv_queuetable = $oostable['coupon_gv_queue']; $gv_insert=$dbconn->Execute("INSERT INTO $coupon_gv_queuetable (customer_id, order_id, amount, date_created, ipaddr) VALUES ('" . intval($_SESSION['customer_id']) . "', '" . intval($insert_id) . "', '" . oos_db_input($gv_order_amount) . "', now(), '" . oos_db_input($remote_addr) . "')"); } } } function credit_selection() { global $oCurrencies, $aLang; $selection_string = ''; $sTheme = oos_var_prep_for_os($_SESSION['theme']); $sLanguage = isset($_SESSION['language']) ? $_SESSION['language'] : DEFAULT_LANGUAGE; $image_submit = ''; $selection_string = ''; $selection_string .= '' . "\n"; $selection_string .= ' '; $selection_string .= ' ' . "\n"; $selection_string .= $aLang['text_enter_gv_code'] . oos_draw_input_field('gv_redeem_code') . ''; $selection_string .= ' ' . $image_submit . ''; $selection_string .= ' '; $selection_string .= '' . "\n"; return $selection_string; } function apply_credit() { global $oOrder, $coupon_no; // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); if (isset ($_SESSION['cot_gv']) && $_SESSION['cot_gv'] == TRUE) { $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_query = $dbconn->Execute("SELECT amount FROM $coupon_gv_customertable WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); $gv_result = $gv_query->fields; $gv_payment_amount = $this->deduction; $gv_amount = $gv_result['amount'] - $gv_payment_amount; $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_update = $dbconn->Execute("UPDATE $coupon_gv_customertable SET amount = '" . $gv_amount . "' WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); } return $gv_payment_amount; } function collect_posts() { global $oCurrencies, $oMessage, $coupon_no, $aLang; // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $aContents = oos_get_content(); if ($_POST['gv_redeem_code']) { $couponstable = $oostable['coupons']; $gv_query = $dbconn->Execute("SELECT coupon_id, coupon_type, coupon_amount FROM $couponstable WHERE coupon_code = '" . oos_db_input($_POST['gv_redeem_code']) . "'"); $gv_result = $gv_query->fields; if ($gv_query->RecordCount() != 0) { $coupon_redeem_tracktable = $oostable['coupon_redeem_track']; $redeem_query = $dbconn->Execute("SELECT * FROM $coupon_redeem_tracktable WHERE coupon_id = '" . $gv_result['coupon_id'] . "'"); if ( ($redeem_query->RecordCount() != 0) && ($gv_result['coupon_type'] == 'G') ) { $oMessage->add_session('checkout_payment', $aLang['error_no_invalid_redeem_gv'], 'error'); oos_redirect(oos_href_link($aContents['checkout_payment'])); } } if ($gv_result['coupon_type'] == 'G') { $gv_amount = $gv_result['coupon_amount']; // Things to set // ip address of claimant // customer id of claimant // date // redemption flag // now update customer account with gv_amount $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_amount_query = $dbconn->Execute("SELECT amount FROM $coupon_gv_customertable WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); $customer_gv = FALSE; $total_gv_amount = $gv_amount; if ($gv_amount_result = $gv_amount_query->fields) { $total_gv_amount = $gv_amount_result['amount'] + $gv_amount; $customer_gv = TRUE; } $couponstable = $oostable['coupons']; $gv_update = $dbconn->Execute("UPDATE $couponstable SET coupon_active = 'N' WHERE coupon_id = '" . $gv_result['coupon_id'] . "'"); $remote_addr = oos_server_get_remote(); $coupon_redeem_tracktable = $oostable['coupon_redeem_track']; $gv_redeem = $dbconn->Execute("INSERT INTO $coupon_redeem_tracktable (coupon_id, customer_id, redeem_date, redeem_ip) VALUES ('" . $gv_result['coupon_id'] . "', '" . intval($_SESSION['customer_id']) . "', now(), '" . oos_db_input($remote_addr) . "')"); if ($customer_gv) { $coupon_gv_customertable = $oostable['coupon_gv_customer']; // already has gv_amount so update $gv_update = $dbconn->Execute("UPDATE $coupon_gv_customertable SET amount = '" . $total_gv_amount . "' WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"); } else { // no gv_amount so insert $coupon_gv_customertable = $oostable['coupon_gv_customer']; $gv_insert = $dbconn->Execute("INSERT INTO $coupon_gv_customertable (customer_id, amount) VALUES ('" . intval($_SESSION['customer_id']) . "', '" . $total_gv_amount . "')"); } $oMessage->add_session('checkout_payment', $aLang['error_redeemed_amount'] . $oCurrencies->format($gv_amount), 'error'); oos_redirect(oos_href_link($aContents['checkout_payment'])); } } if ($_POST['submit_redeem_x'] && $gv['coupon_type'] == 'G'){ $oMessage->add_session('checkout_payment', $aLang['error_no_redeem_code'], 'error'); } if ($oMessage->size('checkout_payment') > 0) { oos_redirect(oos_href_link($aContents['checkout_payment'])); } } function calculate_credit($amount) { global $oOrder; $gv_payment_amount = 0; // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $coupon_gv_customertable = $oostable['coupon_gv_customer']; $query = "SELECT amount FROM $coupon_gv_customertable WHERE customer_id = '" . intval($_SESSION['customer_id']) . "'"; $gv_query = $dbconn->Execute($query); if ($gv_query->RecordCount()) { $gv_result = $gv_query->fields; $gv_payment_amount = $gv_result['amount']; $save_total_cost = $amount; $full_cost = $save_total_cost - $gv_payment_amount; if ($full_cost < 0) { $full_cost = 0; $gv_payment_amount = $save_total_cost; } } return round($gv_payment_amount,2); } function calculate_tax_deduction($amount, $od_amount, $method) { global $oOrder; switch ($method) { case 'Standard': $ratio1 = round($od_amount / $amount,2); $tod_amount = 0; reset($oOrder->info['tax_groups']); foreach($oOrder->info['tax_groups'] as $key => $value) { $tax_rate = oos_get_tax_rate_from_desc($key); $total_net += $tax_rate * $oOrder->info['tax_groups'][$key]; } if ($od_amount > $total_net) $od_amount = $total_net; reset($oOrder->info['tax_groups']); foreach($oOrder->info['tax_groups'] as $key => $value) { $tax_rate = oos_get_tax_rate_from_desc($key); $net = $tax_rate * $oOrder->info['tax_groups'][$key]; if ($net > 0) { $god_amount = $oOrder->info['tax_groups'][$key] * $ratio1; $tod_amount += $god_amount; $oOrder->info['tax_groups'][$key] = $oOrder->info['tax_groups'][$key] - $god_amount; } } $oOrder->info['tax'] -= $tod_amount; $oOrder->info['total'] -= $tod_amount; break; case 'Credit Note': $tax_rate = oos_get_tax_rate($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tax_desc = oos_get_tax_description($this->tax_class, $oOrder->delivery['country']['id'], $oOrder->delivery['zone_id']); $tod_amount = $this->deduction / (100 + $tax_rate)* $tax_rate; $oOrder->info['tax_groups'][$tax_desc] -= $tod_amount; // $oOrder->info['total'] -= $tod_amount; break; default: } return $tod_amount; } function user_has_gv_account($c_id) { // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $coupon_gv_customertable = $oostable['coupon_gv_customer']; $query = "SELECT amount FROM $coupon_gv_customertable WHERE customer_id = '" . oos_db_input($c_id) . "'"; $gv_result = $dbconn->Execute($query); if ($gv_result->fields['amount']>0) { return true; } return FALSE; } function get_order_total() { global $oOrder; $order_total = $oOrder->info['total']; if ($this->include_tax == 'false') $order_total = $order_total - $oOrder->info['tax']; if ($this->include_shipping == 'false') $order_total = $order_total - $oOrder->info['shipping_cost']; return $order_total; } function check() { if (!isset($this->_check)) { $this->_check = defined('MODULE_ORDER_TOTAL_GV_STATUS'); } return $this->_check; } function keys() { return array('MODULE_ORDER_TOTAL_GV_SORT_ORDER', 'MODULE_ORDER_TOTAL_GV_QUEUE', 'MODULE_ORDER_TOTAL_GV_INC_SHIPPING', 'MODULE_ORDER_TOTAL_GV_INC_TAX', 'MODULE_ORDER_TOTAL_GV_CALC_TAX', 'MODULE_ORDER_TOTAL_GV_TAX_CLASS', 'MODULE_ORDER_TOTAL_GV_CREDIT_TAX'); } function install() { // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $configurationtable = $oostable['configuration']; $dbconn->Execute("UPDATE $configurationtable SET coupon_active = 'true' WHERE configuration_key = '" . oos_db_input(MODULE_ORDER_TOTAL_GV_STATUS) . "'"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_ORDER_TOTAL_GV_SORT_ORDER', '9', '6', '2', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) VALUES ('MODULE_ORDER_TOTAL_GV_QUEUE', 'true', '6', '3','oos_cfg_select_option(array(\'true\', \'false\'), ', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, set_function ,date_added) VALUES ('MODULE_ORDER_TOTAL_GV_INC_SHIPPING', 'true', '6', '5', 'oos_cfg_select_option(array(\'true\', \'false\'), ', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, set_function ,date_added) VALUES ('MODULE_ORDER_TOTAL_GV_INC_TAX', 'true', '6', '6','oos_cfg_select_option(array(\'true\', \'false\'), ', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, set_function ,date_added) VALUES ('MODULE_ORDER_TOTAL_GV_CALC_TAX', 'None', '6', '7','oos_cfg_select_option(array(\'None\', \'Standard\', \'Credit Note\'), ', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added) VALUES ('MODULE_ORDER_TOTAL_GV_TAX_CLASS', '0', '6', '0', 'oos_cfg_get_tax_class_title', 'oos_cfg_pull_down_tax_classes(', now())"); $dbconn->Execute("INSERT INTO $configurationtable (configuration_key, configuration_value, configuration_group_id, sort_order, set_function ,date_added) VALUES ('MODULE_ORDER_TOTAL_GV_CREDIT_TAX', 'false', '6', '8','oos_cfg_select_option(array(\'true\', \'false\'), ', now())"); } function remove() { // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $configurationtable = $oostable['configuration']; $dbconn->Execute("UPDATE $configurationtable SET coupon_active = 'false' WHERE configuration_key = '" . oos_db_input(MODULE_ORDER_TOTAL_GV_STATUS) . "'"); $dbconn->Execute("DELETE FROM $configurationtable WHERE configuration_key in ('" . implode("', '", $this->keys()) . "')"); } }