/** * Number of table columns that will be displayed * @return int */ public function get_number_of_columns() { $number_of_columns = 4; if ($this->template_options['bewpi_show_sku']) { $number_of_columns++; } $order_taxes = $this->order->get_taxes(); if ($this->template_options['bewpi_show_tax'] && wc_tax_enabled() && empty($legacy_order) && !empty($order_taxes)) { foreach ($order_taxes as $tax_id => $tax_item) { $number_of_columns++; } } return $number_of_columns; }
/** * Test: get_taxes */ function test_get_taxes() { global $wpdb; update_option('woocommerce_calc_taxes', 'yes'); $tax_rate = array('tax_rate_country' => '', 'tax_rate_state' => '', 'tax_rate' => '10.0000', 'tax_rate_name' => 'TAX', 'tax_rate_priority' => '1', 'tax_rate_compound' => '0', 'tax_rate_shipping' => '1', 'tax_rate_order' => '1', 'tax_rate_class' => ''); WC_Tax::_insert_tax_rate($tax_rate); $object = new WC_Order(); $item_1 = new WC_Order_Item_Product(); $item_1->set_props(array('product' => WC_Helper_Product::create_simple_product(), 'quantity' => 4)); $object->add_item($item_1); $object->calculate_totals(); $this->assertCount(1, $object->get_taxes()); $item = new WC_Order_Item_Tax(); $item->set_rate(100); $item->set_tax_total(100); $item->set_shipping_tax_total(100); $object->add_item($item); $object->save(); $this->assertCount(2, $object->get_taxes()); // Cleanup $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rates"); $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rate_locations"); update_option('woocommerce_calc_taxes', 'no'); }
function linksync_OrderFromBackEnd() { //Ordered product(s) global $wpdb; $testMode = get_option('linksync_test'); $LAIDKey = get_option('linksync_laid'); $apicall = new linksync_class($LAIDKey, $testMode); if ($_POST['order_status'] == get_option('order_status_wc_to_vend')) { //Checking for already sent Order $orderId = $_POST['ID']; $sentOrderIds = get_option('linksync_sent_order_id'); if (isset($sentOrderIds)) { if (!empty($sentOrderIds)) { $order_id_array = unserialize($sentOrderIds); } else { $order_id_array = array(); } if (!in_array($orderId, $order_id_array)) { update_option('linksync_sent_order_id', serialize(array_merge($order_id_array, array($orderId)))); $total_quantity = 0; $order = new WC_Order($orderId); $order_no = $order->get_order_number(); if (strpos($order_no, '#') !== false) { $order_no = str_replace('#', '', $order_no); } $get_total = $order->get_total(); $currency = $order->get_order_currency(); $order_total = $_POST['_order_total']; $taxes_included = false; $registerDb = get_option('wc_to_vend_register'); $vend_user_detail = get_option('wc_to_vend_user'); if (isset($vend_user_detail) && !empty($vend_user_detail)) { $user = explode('|', $vend_user_detail); $vend_uid = isset($user[0]) ? $user[0] : null; $vend_username = isset($user[1]) ? $user[1] : null; } //Ordered product(s) $items = $order->get_items(); $taxes = $order->get_taxes(); foreach ($items as $item) { foreach ($taxes as $tax_label) { $sql = mysql_query("SELECT tax_rate_id FROM `" . $wpdb->prefix . "woocommerce_tax_rates` WHERE tax_rate_name='" . $tax_label['label'] . "' AND tax_rate_class='" . $item['item_meta']['_tax_class'][0] . "'"); if (mysql_num_rows($sql) != 0) { $tax_classes = linksync_tax_classes($tax_label['label'], $item['item_meta']['_tax_class'][0]); if ($tax_classes['result'] == 'success') { $vend_taxes = explode('/', $tax_classes['tax_classes']); } } } $taxId = isset($vend_taxes[0]) ? $vend_taxes[0] : null; $taxName = isset($vend_taxes[1]) ? $vend_taxes[1] : null; $taxRate = isset($vend_taxes[2]) ? $vend_taxes[2] : null; if (isset($item['variation_id']) && !empty($item['variation_id'])) { $product_id = $item['variation_id']; } else { $product_id = $item['product_id']; } $pro_object = new WC_Product($product_id); $itemtotal = (double) $item['item_meta']['_line_subtotal'][0]; if (isset($item['line_subtotal']) && !empty($item['line_subtotal'])) { $product_amount = (double) ($item['line_subtotal'] / $item['qty']); } $discount = (double) $item['item_meta']['_line_subtotal'][0] - (double) $item['item_meta']['_line_total'][0]; if (isset($discount) && !empty($discount)) { $discount = (double) ($discount / $item['qty']); } #---------Changes--------# //Product Amount = product org amount - discount amount $product_total_amount = (double) $product_amount - (double) $discount; $product_sku = $pro_object->get_sku(); if (isset($product_total_amount) && isset($taxRate) && !empty($product_total_amount) && !empty($taxRate)) { $taxValue = $product_total_amount * $taxRate; } $products[] = array('sku' => $product_sku, 'title' => $item['name'], 'price' => $product_total_amount, 'quantity' => $item['qty'], 'discountAmount' => isset($discount) ? $discount : 0, 'taxName' => isset($taxName) ? $taxName : null, 'taxId' => isset($taxId) ? $taxId : null, 'taxRate' => isset($taxRate) ? $taxRate : null, 'taxValue' => isset($taxValue) ? $taxValue : null, 'discountTitle' => isset($discountTitle) ? $discountTitle : 'sale'); $total_quantity += $item['qty']; unset($taxId); unset($taxName); unset($taxRate); unset($taxValue); } #---------Discount-----# // $total_discount = $order->get_total_discount(); //$total_discount = get_post_meta($orderId, '_order_discount', true); // if (isset($total_discount) && !empty($total_discount)) { // $taxes_Discount = $apicall->linksync_getTaxes(); // if (isset($taxes_Discount) && !empty($taxes_Discount)) { // if (!isset($taxes_Discount['errorCode'])) { // if (isset($taxes_Discount['taxes'])) { // foreach ($taxes_Discount['taxes'] as $select_tax) { // if ($select_tax['name'] == 'GST') { // $discountTaxName = $select_tax['name']; // $discountTaxId = $select_tax['id']; // $discountTaxRate = $select_tax['rate']; // } // } // } // } // } // if (isset($discountTaxRate) && !empty($discountTaxRate)) { // $taxValue_discount = (float) $discountTaxRate * (float) $total_discount; // } // $products[] = array( // "price" => isset($total_discount) ? $total_discount : null, // "quantity" => 1, // "sku" => "vend-discount", // 'taxName' => isset($discountTaxName) ? $discountTaxName : null, // 'taxId' => isset($discountTaxId) ? $discountTaxId : null, // 'taxRate' => isset($discountTaxRate) ? $discountTaxRate : null, // 'taxValue' => isset($taxValue_discount) ? $taxValue_discount : null // ); // $products[] = array( // "price" => isset($total_discount) ? $total_discount : null, // "quantity" => 1, // "sku" => "vend-discount", // 'taxName' => null, // 'taxId' => null, // 'taxRate' => null, // 'taxValue' => null // ); // } #----------Shipping------------# foreach ($taxes as $tax_label) { if (isset($tax_label['shipping_tax_amount']) && !empty($tax_label['shipping_tax_amount'])) { $tax_classes = linksync_tax_classes($tax_label['label'], $item['item_meta']['_tax_class'][0]); if ($tax_classes['result'] == 'success') { $vend_taxes = explode('/', $tax_classes['tax_classes']); $taxId_shipping = isset($vend_taxes[0]) ? $vend_taxes[0] : null; $taxName_shipping = isset($vend_taxes[1]) ? $vend_taxes[1] : null; $taxRate_shipping = isset($vend_taxes[2]) ? $vend_taxes[2] : null; } } } if (isset($_POST['shipping_method_id']) && !empty($_POST['shipping_method_id'][0])) { $shipping_method = $_POST['shipping_method'][$_POST['shipping_method_id'][0]]; $shipping_cost = $_POST['shipping_cost'][$_POST['shipping_method_id'][0]]; if (isset($shipping_cost) && isset($taxRate_shipping) && !empty($shipping_cost) && !empty($taxRate_shipping)) { $taxValue_shipping = $shipping_cost * $taxRate_shipping; } $products[] = array("price" => isset($shipping_cost) ? $shipping_cost : null, "quantity" => 1, "sku" => "shipping", 'taxName' => isset($taxName_shipping) ? $taxName_shipping : null, 'taxId' => isset($taxId_shipping) ? $taxId_shipping : null, 'taxRate' => isset($taxRate_shipping) ? $taxRate_shipping : null, 'taxValue' => isset($taxValue_shipping) ? $taxValue_shipping : null); } // Getting Payment id from mapping varabile if (isset($_POST['_payment_method']) && !empty($_POST['_payment_method'])) { $wc_payment = get_option('wc_to_vend_payment'); $total_payments = explode(",", $wc_payment); foreach ($total_payments as $mapped_payment) { $exploded_mapped_payment = explode("|", $mapped_payment); if (isset($exploded_mapped_payment[2]) && !empty($exploded_mapped_payment[2]) && isset($exploded_mapped_payment[0]) && !empty($exploded_mapped_payment[0])) { if ($exploded_mapped_payment[2] == $_POST['_payment_method']) { $vend_payment_data = explode("%%", $exploded_mapped_payment['0']); if (isset($vend_payment_data[0])) { $payment_method = $vend_payment_data[0]; } if (isset($vend_payment_data[1])) { $payment_method_id = $vend_payment_data[1]; } break; } } } $payment = array("retailer_payment_type_id" => isset($payment_method_id) ? $payment_method_id : null, "amount" => isset($get_total) ? $get_total : 0, "method" => isset($payment_method) ? $payment_method : null, "transactionNumber" => isset($_POST['_transaction_id']) ? $_POST['_transaction_id'] : null); } //UTC Time date_default_timezone_set("UTC"); $created = date("Y-m-d H:i:s", time()); $export_user_details = get_option('wc_to_vend_export'); if (isset($export_user_details) && !empty($export_user_details)) { if ($export_user_details == 'customer') { if (isset($_POST['customer_user']) && !empty($_POST['customer_user'])) { $select_user = mysql_query('SELECT user_email FROM `' . $wpdb->prefix . 'users` WHERE `ID` =' . $_POST['customer_user']); if (mysql_num_rows($select_user) != 0) { $customer_detail = mysql_fetch_assoc($select_user); $primary_email_address = $customer_detail['user_email']; } } $primary_email = isset($primary_email_address) ? $primary_email_address : $_POST['_billing_email']; } } $OrderArray = array('uid' => isset($vend_uid) ? $vend_uid : null, "orderId" => isset($order_no) ? $order_no : null, "source" => "WooCommerce", 'user_name' => isset($vend_username) ? $vend_username : null, 'created' => isset($created) ? $created : null, 'register_id' => isset($registerDb) ? $registerDb : null, 'primary_email' => isset($primary_email) ? $primary_email : null, 'total' => isset($order_total) ? $order_total : 0, 'total_tax' => isset($total_tax) ? $total_tax : 0, 'taxes_included' => $taxes_included, 'currency' => isset($currency) ? $currency : 'USD', 'shipping_method' => isset($shipping_method) ? $shipping_method : null, 'payment' => isset($payment) && !empty($payment) ? $payment : null, 'products' => isset($products) && !empty($products) ? $products : null, 'payment_type_id' => isset($payment_method_id) ? $payment_method_id : null); if (isset($export_user_details) && !empty($export_user_details)) { if ($export_user_details == 'customer') { if (isset($_POST['_billing_first_name'])) { $OrderArray['billingAddress']['firstName'] = $_POST['_billing_first_name']; } if (isset($_POST['_billing_last_name'])) { $OrderArray['billingAddress']['lastName'] = $_POST['_billing_last_name']; } if (isset($_POST['_billing_company'])) { $OrderArray['billingAddress']['company'] = $_POST['_billing_company']; } if (isset($_POST['_billing_address_1'])) { $OrderArray['billingAddress']['street1'] = $_POST['_billing_address_1']; } if (isset($_POST['_billing_address_2'])) { $OrderArray['billingAddress']['street2'] = $_POST['_billing_address_2']; } if (isset($_POST['_billing_city'])) { $OrderArray['billingAddress']['city'] = $_POST['_billing_city']; } if (isset($_POST['_billing_postcode'])) { $OrderArray['billingAddress']['postalCode'] = $_POST['_billing_postcode']; } if (isset($_POST['_billing_country'])) { $OrderArray['billingAddress']['country'] = $_POST['_billing_country']; } if (isset($_POST['_billing_state'])) { $OrderArray['billingAddress']['state'] = $_POST['_billing_state']; } if (isset($_POST['_billing_phone'])) { $OrderArray['billingAddress']['phone'] = $_POST['_billing_phone']; } if (isset($_POST['_shipping_first_name'])) { $OrderArray['deliveryAddress']['firstName'] = $_POST['_shipping_first_name']; } if (isset($_POST['_shipping_last_name'])) { $OrderArray['deliveryAddress']['lastName'] = $_POST['_shipping_last_name']; } if (isset($_POST['_shipping_company'])) { $OrderArray['deliveryAddress']['company'] = $_POST['_shipping_company']; } if (isset($_POST['_shipping_address_1'])) { $OrderArray['deliveryAddress']['street1'] = $_POST['_shipping_address_1']; } if (isset($_POST['_shipping_address_2'])) { $OrderArray['deliveryAddress']['street2'] = $_POST['_shipping_address_2']; } if (isset($_POST['_shipping_city'])) { $OrderArray['deliveryAddress']['city'] = $_POST['_shipping_city']; } if (isset($_POST['_shipping_postcode'])) { $OrderArray['deliveryAddress']['postalCode'] = $_POST['_shipping_postcode']; } if (isset($_POST['_shipping_country'])) { $OrderArray['deliveryAddress']['country'] = $_POST['_shipping_country']; } if (isset($_POST['_shipping_state'])) { $OrderArray['deliveryAddress']['state'] = $_POST['_shipping_state']; } if (isset($_POST['_shipping_phone'])) { $OrderArray['deliveryAddress']['phone'] = $_POST['_shipping_phone']; } if (isset($_POST['excerpt'])) { $OrderArray['comments'] = $_POST['excerpt']; } } } $json = json_encode($OrderArray); $apicall->linksync_postOrder($json); linksync_class::add('Order Sync Woo to Vend', 'success', 'Woo Order no:' . $order_no, $LAIDKey); } } } }
/** * Get order items. * * @param WC_Order $order Order data. * * @return array Items list, extra amount and shipping cost. */ protected function get_order_items($order) { $items = array(); $extra_amount = 0; $shipping_cost = 0; // Force only one item. if ('yes' == $this->gateway->send_only_total) { $items[] = array('description' => $this->sanitize_description(sprintf(__('Order %s', 'woocommerce-pagseguro'), $order->get_order_number())), 'amount' => $this->money_format($order->get_total()), 'quantity' => 1); } else { // Products. if (0 < count($order->get_items())) { foreach ($order->get_items() as $order_item) { if ($order_item['qty']) { $item_name = $order_item['name']; if (defined('WC_VERSION') && version_compare(WC_VERSION, '2.4.0', '<')) { $item_meta = new WC_Order_Item_Meta($order_item['item_meta']); } else { $item_meta = new WC_Order_Item_Meta($order_item); } if ($meta = $item_meta->display(true, true)) { $item_name .= ' - ' . $meta; } $items[] = array('description' => $this->sanitize_description($item_name), 'amount' => $this->money_format($order->get_item_total($order_item, false)), 'quantity' => $order_item['qty']); } } } // Fees. if (0 < count($order->get_fees())) { foreach ($order->get_fees() as $fee) { $items[] = array('description' => $this->sanitize_description($fee['name']), 'amount' => $this->money_format($fee['line_total']), 'quantity' => 1); } } // Taxes. if (0 < count($order->get_taxes())) { foreach ($order->get_taxes() as $tax) { $items[] = array('description' => $this->sanitize_description($tax['label']), 'amount' => $this->money_format($tax['tax_amount'] + $tax['shipping_tax_amount']), 'quantity' => 1); } } // Shipping Cost. if (0 < $order->get_total_shipping()) { $shipping_cost = $this->money_format($order->get_total_shipping()); } // Discount. if (defined('WC_VERSION') && version_compare(WC_VERSION, '2.3', '<')) { if (0 < $order->get_order_discount()) { $extra_amount = '-' . $this->money_format($order->get_order_discount()); } } } return array('items' => $items, 'extra_amount' => $extra_amount, 'shipping_cost' => $shipping_cost); }
/** * Beeptify checkout form */ public function generate_beeptify_form($order_id) { global $woocommerce; $order = new WC_Order($order_id); /* Setup known values */ $amount_total = $order->order_total * 100; $order_number = str_replace('#', null, $order->get_order_number()); $order_id = $order_number; // Shop URL's $decline_url = $woocommerce->cart->get_checkout_url(); //$woocommerce->api_request_url("WC_payment_gateway_beeptify"); $callback_url = add_query_arg('wooorderid', $order_id, WC()->api_request_url('WC_payment_gateway_beeptify')); /* Sale lines */ $SaleLines = array(); /* Make purchase line for display at beeptify */ $reason = get_bloginfo('name') . " sale"; $i = 0; foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) { $this_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key); $this_product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key); $this_product_name = $this_product->get_title(); $quantities = WC()->cart->get_cart_item_quantities(); $this_quantity = $quantities[$this_product_id]; $this_price = $this_product->price; //$reason .= "$this_product_name: [br] $this_price". get_woocommerce_currency_symbol() ." x $this_quantity [br] Total: " . $this_total ." ". get_woocommerce_currency_symbol(); $SaleLines[$i]['ProductId'] = $this_product_id; $SaleLines[$i]['ProductName'] = $this_product_name; $SaleLines[$i]['ProductDescription'] = ""; $SaleLines[$i]['Quantity'] = $this_quantity; $SaleLines[$i]['PricePerUnit'] = $this_price * 100; $SaleLines[$i]['IsLoad'] = 0; $SaleLines[$i]['CodeList'] = ""; /* Check for load on product */ $bCodes = get_post_meta($this_product_id, '_beeptify_code', false); if (!empty($bCodes[0])) { $SaleLines[$i]['IsLoad'] = 1; $bCodes = explode(',', $bCodes[0]); end($bCodes); $lastKey = key($bCodes); reset($bCodes); foreach ($bCodes as $key => $bCode) { $SaleLines[$i]['CodeList'] .= trim($bCode); if ($key != $lastKey) { $SaleLines[$i]['CodeList'] .= ", "; } } } $i++; } /* Include shipping for sale line */ if ($order->get_total_shipping() > 0) { $SaleLines[$i]['ProductId'] = "x"; $SaleLines[$i]['ProductName'] = "Shipping"; $SaleLines[$i]['ProductDescription'] = ""; $SaleLines[$i]['Quantity'] = 1; $SaleLines[$i]['PricePerUnit'] = $order->get_total_shipping() * 100; $SaleLines[$i]['IsLoad'] = 0; $SaleLines[$i]['CodeList'] = ""; } /* Test for tax, and add as sale line */ $taxes = $order->get_taxes(); $total_for_test = $order->get_total_tax(); if (is_array($taxes) && $total_for_test > 0) { // It seems to land in a random row? foreach ($taxes as $the_tax) { $taxes = $the_tax; } if (!empty($taxes['tax_amount']) && $taxes['tax_amount'] != 0 || !empty($taxes['shipping_tax_amount']) && $taxes['shipping_tax_amount'] != 0) { $i++; $SaleLines[$i]['ProductId'] = "t"; $SaleLines[$i]['ProductName'] = "Tax"; $SaleLines[$i]['ProductDescription'] = ""; $SaleLines[$i]['Quantity'] = 1; $SaleLines[$i]['PricePerUnit'] = $taxes['tax_amount'] * 100 + $taxes['shipping_tax_amount'] * 100; $SaleLines[$i]['IsLoad'] = 0; $SaleLines[$i]['CodeList'] = ""; } } $css = ''; /* if frame,send the CSS */ if ($this->yesnotoint($this->frame)) { $css = plugins_url("css/gateway.beeptify.css", __FILE__); } $beeptify_args = array('_selectHost' => $this->liveurl, 'MsgType' => 'sale', 'MerchantId' => $this->merchant_id, 'Reason' => $reason, 'OrderNumber' => $order_number, 'ProductId' => '21', 'Amount' => $amount_total, 'SuccessUrl' => $callback_url, 'ErrorUrl' => $decline_url, 'CancelUrl' => $decline_url, 'UserType' => "unregistered", 'UserEmail' => $order->billing_email, 'Css' => $css, 'Language' => $this->pay_language, 'Mode' => $this->mode, 'Secret' => $this->secret); $html_form = array(); /* Primary args */ $to_hash = ""; foreach ($beeptify_args as $key => $arg) { if ($key != '_selectHost' && !empty($arg)) { $to_hash .= $arg; } if ($key != 'Secret') { $html_form[] = "<input type='hidden' name='{$key}' value='{$arg}'/>"; } } /* Sale lines */ foreach ($SaleLines as $key => $line) { foreach ($line as $line_name => $line_value) { $to_hash .= $line_value; $html_form[] = "<input type='hidden' name='SaleLines[{$key}].{$line_name}' value='{$line_value}'/>"; } } /* Hash */ $hash = md5($to_hash); $html_form[] = "<input type='hidden' name='MD5Check' value='{$hash}'/>"; // Debugging /* foreach ($html_form as $entity) { echo "<br>" . htmlspecialchars($entity); } die(); */ /* If we are going with an iframe or a redirect */ if ($this->yesnotoint($this->frame)) { return $this->beeptify_iframe($order, $html_form); } else { return $this->beeptify_redirect($order, $html_form); } }