public function log_shipment_response($order_id, $response) { if (strpos($order_id, '_') !== false) { $parts = explode('_', $order_id); $order_id = $parts[0]; } if (get_post_type($order_id) != 'order_shipment') { return; } $order = WC_MS_Compatibility::wc_get_order($order_id); if ($order) { //Store the values of shipped order which we are getting from ShippingEasy. $tracking_number = $response['shipment']['tracking_number']; $carrier_key = $response['shipment']['carrier_key']; $carrier_service_key = $response['shipment']['carrier_service_key']; $shipment_cost_cents = $response['shipment']['shipment_cost']; $shipment_cost = $shipment_cost_cents / 100; $comment_update = 'Shipping Tracking Number: ' . $tracking_number . '<br/> Carrier Key: ' . $carrier_key . '<br/> Carrier Service Key: ' . $carrier_service_key . '<br/> Cost: ' . $shipment_cost; $order->add_order_note($comment_update); } }
<?php $shipments = WC_MS_Order_Shipment::get_by_order($post->ID); foreach ($shipments as $shipment_id) { $shipment = WC_MS_Compatibility::wc_get_order($shipment_id); ?> <div class="wc-shipment" id="wc-shipment-<?php echo $shipment_id; ?> "> <div class="address"> <strong><?php _e('<strong>Ship To:</strong><br/>', 'wc_shipping_multiple_address'); ?> </strong> <?php echo $shipment->get_formatted_shipping_address(); ?> <br/> (<a href="#" class="edit-shipment-address">Edit</a>) </div> <div class="edit_shipping_address" style="display:none;"> <?php $shipFields = WC()->countries->get_address_fields($shipment->shipping_country, 'shipping_'); if ($shipFields) { foreach ($shipFields as $key => $field) { if (!isset($field['type'])) { $field['type'] = 'text'; }
function list_order_item_addresses($order_id) { global $woocommerce; if (false == apply_filters('wcms_list_order_item_addresses', true, $order_id)) { return; } if ($order_id instanceof WC_Order) { $order = $order_id; $order_id = $order->id; } else { $order = WC_MS_Compatibility::wc_get_order($order_id); } $methods = get_post_meta($order_id, '_shipping_methods', true); $shipping_methods = $order->get_shipping_methods(); $packages = get_post_meta($order_id, '_wcms_packages', true); $multiship = get_post_meta($order_id, '_multiple_shipping', true); if (!$packages || count($packages) == 1) { return; } // load the address fields $this->load_cart_files(); $cart = new WC_Cart(); echo '<p><strong>' . __('This order ships to multiple addresses.', 'wc_shipping_multiple_address') . '</strong></p>'; echo '<table class="shop_table shipping_packages" cellspacing="0" cellpadding="6" style="width: 100%; border: 1px solid #eee;" border="1" bordercolor="#eee">'; echo '<thead><tr>'; echo '<th scope="col" style="text-align:left; border: 1px solid #eee;">' . __('Products', 'woocommerce') . '</th>'; echo '<th scope="col" style="text-align:left; border: 1px solid #eee;">' . __('Address', 'woocommerce') . '</th>'; echo '<th scope="col" style="text-align:left; border: 1px solid #eee;">' . __('Notes', 'woocommerce') . '</th>'; echo '</tr></thead><tbody>'; foreach ($packages as $x => $package) { $products = $package['contents']; $method = $methods[$x]['label']; foreach ($shipping_methods as $ship_method) { if ($ship_method['method_id'] == $method) { $method = $ship_method['name']; break; } } $address = ''; if (!empty($package['full_address'])) { $address = wcms_get_formatted_address($package['full_address']); } ?> <tr> <td style="text-align:left; vertical-align:middle; border: 1px solid #eee;"><ul> <?php foreach ($products as $i => $product) { ?> <li><?php echo get_the_title($product['data']->id) . ' × ' . $product['quantity'] . '<br />' . $cart->get_item_data($product, true); ?> </li> <?php } ?> </ul></td> <td style="text-align:left; vertical-align:middle; border: 1px solid #eee;"> <?php echo $address; ?> <br/> <em>(<?php echo $method; ?> )</em> </td> <td style="text-align:left; vertical-align:middle; border: 1px solid #eee;"> <?php if (!empty($package['note'])) { echo $package['note']; } else { echo '–'; } if (!empty($package['date'])) { echo '<p>' . sprintf(__('Delivery date: %s', 'wc_shipping_multiple_address'), $package['date']) . '</p>'; } ?> </td> </tr> <?php } echo '</table>'; }
public function checkout_process($order_id) { global $woocommerce; $sess_item_address = wcms_session_get('cart_item_addresses'); $has_item_address = !wcms_session_isset('cart_item_addresses') || empty($sess_item_address) ? false : true; do_action('wc_ms_before_checkout_process', $order_id); $packages = $woocommerce->cart->get_shipping_packages(); $sess_item_address = wcms_session_isset('cart_item_addresses') ? wcms_session_get('cart_item_addresses') : false; $sess_packages = wcms_session_isset('wcms_packages') ? wcms_session_get('wcms_packages') : false; $sess_methods = wcms_session_isset('shipping_methods') ? wcms_session_get('shipping_methods') : false; $sess_rates = wcms_session_isset('wcms_package_rates') ? wcms_session_get('wcms_package_rates') : false; // Allow outside code to modify session data one last time $sess_item_address = apply_filters('wc_ms_checkout_session_item_address', $sess_item_address); $sess_packages = apply_filters('wc_ms_checkout_session_packages', $sess_packages); $sess_methods = apply_filters('wc_ms_checkout_session_methods', $sess_methods); $sess_rates = apply_filters('wc_ms_checkout_session_rates', $sess_rates); if ($has_item_address) { update_post_meta($order_id, '_multiple_shipping', 'yes'); } // update the taxes $packages = $this->calculate_taxes(null, $packages, true); $sess_packages = $this->calculate_taxes(null, $sess_packages, true); if ($packages) { update_post_meta($order_id, '_shipping_packages', $packages); } if ($sess_item_address !== false && !empty($sess_item_address)) { update_post_meta($order_id, '_shipping_addresses', $sess_item_address); wcms_session_delete('cart_item_addresses'); if ($sess_packages) { if ($has_item_address) { // remove the shipping address update_post_meta($order_id, '_shipping_first_name', ''); update_post_meta($order_id, '_shipping_last_name', ''); update_post_meta($order_id, '_shipping_company', ''); update_post_meta($order_id, '_shipping_address_1', ''); update_post_meta($order_id, '_shipping_address_2', ''); update_post_meta($order_id, '_shipping_city', ''); update_post_meta($order_id, '_shipping_postcode', ''); update_post_meta($order_id, '_shipping_country', ''); update_post_meta($order_id, '_shipping_state', ''); } } } if ($sess_packages !== false && !empty($sess_packages) && $has_item_address) { update_post_meta($order_id, '_wcms_packages', $sess_packages); } if ($sess_methods !== false && !empty($sess_methods) && $has_item_address) { $methods = $sess_methods; update_post_meta($order_id, '_shipping_methods', $methods); } else { $order = WC_MS_Compatibility::wc_get_order($order_id); $methods = $order->get_shipping_methods(); $ms_methods = array(); if ($sess_packages) { foreach ($sess_packages as $pkg_idx => $package) { foreach ($methods as $method) { $ms_methods[$pkg_idx] = array('id' => $method['method_id'], 'label' => $method['name']); continue 2; } } } update_post_meta($order_id, '_shipping_methods', $ms_methods); } if ($sess_rates !== false) { update_post_meta($order_id, '_shipping_rates', $sess_rates); } do_action('wc_ms_after_checkout_process', $order_id); }
function show_multiple_addresses_line($column) { global $post, $woocommerce, $the_order; if (empty($the_order) || $the_order->id != $post->ID) { $the_order = WC_MS_Compatibility::wc_get_order($post->ID); } if ($column == 'shipping_address') { $packages = get_post_meta($post->ID, '_wcms_packages', true); if (!$the_order->get_formatted_shipping_address() && count($packages) > 1) { _e('Ships to multiple addresses ', 'woocommerce'); } } }
public static function send_package_email($order_id, $package_index) { global $woocommerce; $settings = get_option('woocommerce_multiple_shipping_settings', array()); $order = WC_MS_Compatibility::wc_get_order($order_id); $subject = isset($settings['email_subject']) && !empty($settings['email_subject']) ? $settings['email_subject'] : __('Part of your order has been shipped', 'wc_shipping_multiple_address'); $message = isset($settings['email_message']) && !empty($settings['email_message']) ? $settings['email_message'] : false; if (!$message) { $message = self::get_default_email_body(); } $mailer = $woocommerce->mailer(); $message = $mailer->wrap_message($subject, $message); $ts = strtotime($order->order_date); $order_date = date(get_option('date_format'), $ts); $order_time = date(get_option('time_format'), $ts); $search = array('{order_id}', '{order_date}', '{order_time}', '{customer_first_name}', '{customer_last_name}', '{products_table}', '{addresses_table}'); $replacements = array($order->get_order_number(), $order_date, $order_time, $order->billing_first_name, $order->billing_last_name, self::render_products_table($order, $package_index), self::render_addresses_table($order, $package_index)); $message = str_replace($search, $replacements, $message); $mailer->send($order->billing_email, $subject, $message); }
/** * Create a new Order Shipment * * @param array $args * @return int|WP_Error */ public function create_shipment($args) { $default_args = array('status' => '', 'customer_id' => null, 'customer_note' => null, 'created_via' => '', 'parent' => 0); $args = wp_parse_args($args, $default_args); $shipment_data = array(); if (empty($args['parent'])) { return new WP_Error('create_shipment', __('Cannot create a shipment without an Order ID', 'wc_shipping_multiple_address')); } $order_id = $args['parent']; $wc_order = WC_MS_Compatibility::wc_get_order($order_id); $updating = false; $shipment_data['post_type'] = 'order_shipment'; $shipment_data['post_status'] = 'wc-' . apply_filters('wc_ms_default_shipment_status', 'pending'); $shipment_data['ping_status'] = 'closed'; $shipment_data['post_author'] = 1; $shipment_data['post_password'] = $wc_order->post->post_password; $shipment_data['post_title'] = sprintf(__('Shipment – %s', 'wc_shipping_multiple_address'), strftime(_x('%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'wc_shipping_multiple_address'))); $shipment_data['post_parent'] = $order_id; if ($args['status']) { if (!in_array('wc-' . $args['status'], array_keys(wc_get_order_statuses()))) { return new WP_Error('woocommerce_invalid_order_status', __('Invalid shipment status', 'wc_shipping_multiple_address')); } $shipment_data['post_status'] = 'wc-' . $args['status']; } if (!is_null($args['customer_note'])) { $shipment_data['post_excerpt'] = $args['customer_note']; } $shipment_id = wp_insert_post(apply_filters('wc_ms_new_shipment_data', $shipment_data), true); if (is_wp_error($shipment_id)) { return $shipment_id; } update_post_meta($shipment_id, '_shipment_key', 'wc_' . apply_filters('wc_ms_generate_shipment_key', uniqid('shipment_'))); update_post_meta($shipment_id, '_created_via', sanitize_text_field($args['created_via'])); $shipment = WC_MS_Compatibility::wc_get_order($shipment_id); $shipment->add_order_note('Shipment for Order ' . $wc_order->get_order_number()); return $shipment_id; }