/**
  * AJAX - Traite la commande / Process checkout
  */
 function wps_pos_process_checkout()
 {
     $status = false;
     $output = $message = '';
     $order_id = !empty($_POST['order_id']) ? wpshop_tools::varSanitizer($_POST['order_id']) : null;
     $new_order = empty($_POST['order_id']);
     $payment_method = !empty($_POST['wpspos-payment-method']) ? wpshop_tools::varSanitizer($_POST['wpspos-payment-method']) : null;
     $customer_id = !empty($_POST['customer_id']) ? wpshop_tools::varSanitizer($_POST['customer_id']) : !empty($_SESSION['cart']['customer_id']) ? wpshop_tools::varSanitizer($_SESSION['cart']['customer_id']) : null;
     $payment_amount = !empty($_POST['wps-pos-total-order-amount']) ? wpshop_tools::varSanitizer($_POST['wps-pos-total-order-amount']) : null;
     $received_payment_amount = !empty($_POST['wpspos-order-received-amount']) ? wpshop_tools::varSanitizer($_POST['wpspos-order-received-amount']) : $payment_amount;
     if (!empty($customer_id)) {
         if (empty($order_id) && !empty($payment_method)) {
             $_SESSION['shipping_method'] = 'default_shipping_mode_for_pos';
             $order_id = wpshop_checkout::process_checkout($payment_method, '', $customer_id, $_SESSION['billing_address'], $_SESSION['shipping_address']);
             wp_update_post(array('ID' => $order_id, 'post_parent' => get_current_user_id()));
         }
         if (!empty($order_id)) {
             $status = true;
             if (!empty($received_payment_amount)) {
                 $params_array = array('method' => $payment_method, 'waited_amount' => $payment_amount, 'status' => 'payment_received', 'author' => $customer_id, 'payment_reference' => '', 'date' => current_time('mysql', 0), 'received_amount' => 'money' == $payment_method && number_format((double) $received_payment_amount, 2, '.', '') > number_format((double) $payment_amount, 2, '.', '') ? $payment_amount : $received_payment_amount);
                 wpshop_payment::check_order_payment_total_amount($order_id, $params_array, 'completed');
             }
             /**	Get order content	*/
             $order_postmeta = get_post_meta($order_id, '_order_postmeta', true);
             ob_start();
             require_once wpshop_tools::get_template_part(WPSPOS_DIR, WPSPOS_TEMPLATES_MAIN_DIR, 'backend/order', 'order', 'complete');
             $output = ob_get_contents();
             ob_end_clean();
             /**	Empty the cart	*/
             /*if ( !empty( $order_postmeta ) && !empty( $order_postmeta['order_status'] ) && ( 'completed' ==  $order_postmeta['order_status'] ) ) {
             			$wps_cart = new wps_cart();
             			$wps_cart->empty_cart();
             		}*/
             $message = __('Order have been saved', 'wps-pos-i18n');
         } else {
             $message = __('No order have been found', 'wps-pos-i18n');
         }
         /*}
         		else {
         			$message = __( 'Please choose a payment method for order', 'wps-pos-i18n' );
         		}*/
     } else {
         $message = __('No customer has been selected for current order', 'wps-pos-i18n');
     }
     wp_die(json_encode(array('status' => $status, 'output' => $output, 'message' => $message)));
 }
예제 #2
0
 /**
  * Update th receive payment part in order postmeta and return "Complete" if the shop have received the total amount of the order
  * @param int $order_id
  * @param array $params_array
  * @return string
  */
 public static function check_order_payment_total_amount($order_id, $params_array, $bank_response, $order_meta = array(), $save_metadata = true)
 {
     global $wpshop_payment;
     global $wpdb;
     $order_meta = !empty($order_meta) ? $order_meta : get_post_meta($order_id, '_order_postmeta', true);
     $wps_message = new wps_message_ctr();
     if (!empty($order_meta)) {
         $order_info = get_post_meta($order_id, '_order_info', true);
         $user_data = get_userdata($order_meta['customer_id']);
         $email = !empty($user_data) && !empty($user_data->user_email) ? $user_data->user_email : '';
         // 			$email = ( !empty($order_info) &&  !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_user_email']) ) ? $order_info['billing']['address']['address_user_email'] : '' ;
         $first_name = !empty($order_info) && !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_first_name']) ? $order_info['billing']['address']['address_first_name'] : '';
         $last_name = !empty($order_info) && !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_last_name']) ? $order_info['billing']['address']['address_last_name'] : '';
         $key = self::get_order_waiting_payment_array_id($order_id, $params_array['method']);
         $order_grand_total = $order_meta['order_grand_total'];
         $total_received = !empty($params_array['status']) && $params_array['status'] == 'payment_received' && $bank_response == 'completed' && !empty($params_array['received_amount']) ? $params_array['received_amount'] : 0;
         foreach ($order_meta['order_payment']['received'] as $received) {
             $total_received += !empty($received['status']) && $received['status'] == 'payment_received' && $bank_response == 'completed' && !empty($received['received_amount']) ? $received['received_amount'] : 0;
         }
         $order_meta['order_amount_to_pay_now'] = $order_grand_total - $total_received;
         $order_meta['order_payment']['received'][$key] = self::add_new_payment_to_order($order_id, $order_meta, $key, $params_array, $bank_response);
         if ($bank_response == 'completed') {
             if (number_format((double) $total_received, 2, '.', '') >= number_format((double) $order_grand_total, 2, '.', '')) {
                 $payment_status = 'completed';
                 $order_meta['order_invoice_ref'] = empty($order_meta['order_invoice_ref']) && !empty($order_meta['order_payment']['received'][$key]) && !empty($order_meta['order_payment']['received'][$key]['invoice_ref']) ? $order_meta['order_payment']['received'][$key]['invoice_ref'] : $order_meta['order_invoice_ref'];
                 $order_meta['order_invoice_date'] = current_time('mysql', 0);
                 if (!empty($order_meta['order_items'])) {
                     foreach ($order_meta['order_items'] as $item_id => $o) {
                         $pid = $o['item_id'];
                         if (strpos($item_id, '__') !== false) {
                             $product_data_id = explode('__', $item_id);
                             $pid = !empty($product_data_id) && !empty($product_data_id[1]) ? $product_data_id[1] : $pid;
                         }
                         $product = wpshop_products::get_product_data($pid);
                         if (get_post_type($pid) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                             $parent_def = wpshop_products::get_parent_variation($pid);
                             $parent_post = $parent_def['parent_post'];
                             $product = wpshop_products::get_product_data($parent_post->ID);
                         }
                         if (!empty($product) && !empty($product['manage_stock']) && strtolower(__($product['manage_stock'], 'wpshop')) == strtolower(__('Yes', 'wpshop'))) {
                             wpshop_products::reduce_product_stock_qty($product['product_id'], $o['item_qty'], $pid);
                         }
                     }
                 }
                 /** Add information about the order completed date */
                 update_post_meta($order_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '_completed_date', current_time('mysql', 0));
                 /** Check if the order content a downloadable product **/
                 if (!empty($order_meta['order_items'])) {
                     foreach ($order_meta['order_items'] as $key_value => $item) {
                         $key_value = $item['item_id'];
                         /** Check if it's a product with signle variation, check the parent product **/
                         if (!empty($item['item_id']) && get_post_type($item['item_id']) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                             $parent_item = wpshop_products::get_parent_variation($item['item_id']);
                             $key_value = $parent_item['parent_post']->ID;
                             $parent_post_metadata = $parent_item['parent_post_meta'];
                             if (!empty($parent_post_metadata['is_downloadable_'])) {
                                 $query = $wpdb->prepare('SELECT value FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id = %d', $parent_post_metadata['is_downloadable_']);
                                 $downloadable_option_value = $wpdb->get_var($query);
                                 if (!empty($downloadable_option_value)) {
                                     $item['item_is_downloadable_'] = $downloadable_option_value;
                                 }
                             }
                         }
                         if (!empty($item) && !empty($item['item_is_downloadable_']) && (__($item['item_is_downloadable_'], 'wpshop') == __('Yes', 'wpshop') || __($item['item_is_downloadable_'], 'wpshop') == __('yes', 'wpshop'))) {
                             $download_codes = get_user_meta($order_meta['customer_id'], '_order_download_codes_' . $order_id, true);
                             if (!empty($download_codes) && !empty($download_codes[$key_value]) && !empty($download_codes[$key_value]['download_code'])) {
                                 $link = '<a href="' . WPSHOP_URL . '/download_file.php?oid=' . $order_id . '&amp;download=' . $download_codes[$key_value]['download_code'] . '">' . __('Download', 'wpshop') . '</a>';
                                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE', array('order_key' => $order_meta['order_key'], 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'order_date' => $order_meta['order_date'], 'download_product_link' => $link), array());
                             }
                         }
                     }
                 }
                 // Send confirmation e-mail to administrator
                 if (empty($_SESSION['wps-pos-addon'])) {
                     $email_option = get_option('wpshop_emails');
                     if (!empty($email_option) && !empty($email_option['send_confirmation_order_message'])) {
                         wpshop_checkout::send_order_email_to_administrator($order_id, $user_data);
                     }
                 }
                 // POS Status
                 if (!empty($order_meta['order_payment']) && !empty($order_meta['order_payment']['shipping_method']) && $order_meta['order_payment']['shipping_method'] == 'default_shipping_mode_for_pos') {
                     $payment_status = 'pos';
                 }
             } else {
                 $payment_status = 'partially_paid';
             }
             $order_meta['order_status'] = $payment_status;
             update_post_meta($order_id, '_order_postmeta', $order_meta);
             $save_metadata = false;
             $allow_send_invoice = get_option('wpshop_send_invoice');
             $invoice_attachment_file = !empty($allow_send_invoice) ? wpshop_modules_billing::generate_invoice_for_email($order_id, $order_meta['order_payment']['received'][$key]['invoice_ref']) : '';
             $email_option = get_option('wpshop_emails');
             $shipping_mode_option = get_option('wps_shipping_mode');
             $shipping_method = !empty($order_meta['order_payment']['shipping_method']) && !empty($shipping_mode_option) && !empty($shipping_mode_option['modes']) && is_array($shipping_mode_option['modes']) && array_key_exists($order_meta['order_payment']['shipping_method'], $shipping_mode_option['modes']) ? $shipping_mode_option['modes'][$order_meta['order_payment']['shipping_method']]['name'] : (!empty($order_meta['order_payment']['shipping_method']) ? $order_meta['order_payment']['shipping_method'] : '');
             $payment_method_option = get_option('wps_payment_mode');
             $order_payment_method = !empty($payment_method_option) && !empty($payment_method_option['mode']) && !empty($order_meta['order_payment']['customer_choice']['method']) && !empty($payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]) ? $payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]['name'] : $order_meta['order_payment']['customer_choice']['method'];
             if (!empty($email_option) && !empty($email_option['send_confirmation_order_message']) && $payment_status == 'completed') {
                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_ORDER_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_key' => !empty($order_meta['order_key']) ? $order_meta['order_key'] : '', 'order_date' => current_time('mysql', 0), 'order_payment_method' => $order_payment_method, 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method));
             }
             $wps_message->wpshop_prepared_email($email, 'WPSHOP_OTHERS_PAYMENT_CONFIRMATION_MESSAGE', array('order_key' => $order_meta['order_key'], 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'order_date' => $order_meta['order_date'], 'order_shipping_method' => $shipping_method), array(), $invoice_attachment_file);
         } else {
             $payment_status = $bank_response;
         }
         $order_meta['order_status'] = $payment_status;
         if (!$save_metadata) {
             return $order_meta;
         } else {
             update_post_meta($order_id, '_order_postmeta', $order_meta);
         }
         update_post_meta($order_id, '_wpshop_order_status', $payment_status);
     }
 }
 /**
  * AJAX - Valid Checkout step four
  */
 function wps_checkout_valid_step_five()
 {
     $status = false;
     $response = '';
     $payment_method = !empty($_POST['wps-payment-method']) ? wpshop_tools::varSanitizer($_POST['wps-payment-method']) : null;
     $order_id = !empty($_SESSION['cart']['order_id']) ? wpshop_tools::varSanitizer($_SESSION['cart']['order_id']) : 0;
     $customer_comment = !empty($_POST['wps-customer-comment']) ? wpshop_tools::varSanitizer($_POST['wps-customer-comment']) : null;
     $terms_of_sale_checking = isset($_POST['terms_of_sale_indicator']) && !empty($_POST['terms_of_sale']) || !empty($_POST['terms_of_sale']) || !isset($_POST['terms_of_sale_indicator']) && empty($_POST['terms_of_sale']) ? true : false;
     if ($terms_of_sale_checking) {
         if (!empty($payment_method)) {
             /** Check if the payment method exist for the shop **/
             $payment_option = get_option('wps_payment_mode');
             if (!empty($payment_option) && !empty($payment_option['mode']) && array_key_exists($payment_method, $payment_option['mode']) && !empty($payment_option['mode'][$payment_method]['active'])) {
                 $order_id = wpshop_checkout::process_checkout($payment_method, $order_id, get_current_user_id(), $_SESSION['billing_address'], $_SESSION['shipping_address']);
                 if (!empty($order_id) && !empty($customer_comment)) {
                     wp_update_post(array('ID' => $order_id, 'post_excerpt' => $customer_comment));
                 }
                 $permalink_option = get_option('permalink_structure');
                 $checkout_page_id = wpshop_tools::get_page_id(get_option('wpshop_checkout_page_id'));
                 $response = get_permalink($checkout_page_id) . (!empty($permalink_option) ? '?' : '&') . 'order_step=6';
                 $_SESSION['payment_method'] = $payment_method;
                 $status = true;
                 //Add an action to extra actions on order save
                 $args = array('order_id' => $order_id, 'posted_data' => $_REQUEST);
                 wpshop_tools::create_custom_hook('wps_order_extra_save_action', $args);
             } else {
                 $response = '<div class="wps-alert-error">' . __('This payment method is unavailable', 'wpshop') . '</div>';
             }
         } else {
             $response = '<div class="wps-alert-error">' . __('You must choose a payment method', 'wpshop') . '</div>';
         }
     } else {
         $response = '<div class="wps-alert-error">' . __('You must accept the terms of sale to order', 'wpshop') . '</div>';
     }
     echo json_encode(array('status' => $status, 'response' => $response));
     die;
 }