/** * 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 . '&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); } }