/** * Add credit note email to order actions list */ public function pro_email_order_actions($available_emails) { global $post_id; $order_notification_settings = get_option('woocommerce_pdf_order_notification_settings'); if (isset($order_notification_settings['recipient']) && !empty($order_notification_settings['recipient'])) { // only add order notification action when a recipient is set! $available_emails[] = 'pdf_order_notification'; } if (version_compare(WOOCOMMERCE_VERSION, '2.2', '>=')) { $order = new WC_Order($post_id); $refunds = $order->get_refunds(); if (!empty($refunds)) { $available_emails[] = 'customer_credit_note'; } } return $available_emails; }
/** * Get the order data format for CSV Import JSON format * * @since 3.12.0 * @param array $order_data an array of order data for the given order * @param WC_Order $order the WC_Order object * @return array modified order data */ private function get_import_columns($order_data, WC_Order $order) { if (isset($order_data['refunded_total']) && $order_data['refunded_total']) { $refunds = array(); foreach ($order->get_refunds() as $refund) { $line_items = array(); // add line items foreach ($refund->get_items(array('line_item', 'fee', 'shipping')) as $item_id => $item) { $refund_amount = abs(isset($item['line_total']) ? $item['line_total'] : (isset($item['cost']) ? $item['cost'] : null)); // skip empty refund lines if (!$refund_amount) { continue; } $refunded_item = array('refunded_item_id' => $item['refunded_item_id'], 'refund_total' => $refund_amount); if (isset($item['taxes'])) { $refunded_item['refund_tax'] = maybe_unserialize($item['taxes']); } if (isset($item['line_tax_data'])) { $tax_data = maybe_unserialize($item['line_tax_data']); $refunded_item['refund_tax'] = $tax_data['total']; } if (isset($item['qty'])) { $refunded_item['qty'] = $item['qty']; } $line_items[] = $refunded_item; } $refund_data = array('id' => $refund->id, 'date' => $refund->date, 'amount' => wc_format_decimal($refund->get_refund_amount(), 2), 'reason' => $refund->get_refund_reason(), 'line_items' => $line_items); $refunds[] = $refund_data; } $order_data['refunds'] = !empty($refunds) ? json_encode($refunds) : ''; } // fix order numbers $order_data['order_id'] = $order->id; $order_data['order_number_formatted'] = get_post_meta($order->id, '_order_number_formatted', true); $order_data['order_number'] = get_post_meta($order->id, '_order_number', true); // fix customer user $user = new WP_User($order_data['customer_id']); $order_data['customer_id'] = $user->user_email; return $order_data; }
public function recalculate_order($order_id) { $order_currency = get_post_meta($order_id, '_order_currency', true); //lets avoid recalculation for order which is already in if ($order_currency == $this->default_currency or empty($order_currency)) { return; } //*** $currencies = $this->get_currencies(); $_woocs_order_rate = get_post_meta($order_id, '_woocs_order_rate', true); if (empty($_woocs_order_rate)) { $_woocs_order_rate = $currencies[$order_currency]['rate']; } //*** update_post_meta($order_id, '_woocs_order_currency', $this->default_currency); update_post_meta($order_id, '_order_currency', $this->default_currency); update_post_meta($order_id, '_woocs_order_base_currency', $this->default_currency); wc_update_order_item_meta($order_id, '_woocs_order_base_currency', $this->default_currency); update_post_meta($order_id, '_woocs_order_rate', 1); wc_update_order_item_meta($order_id, '_woocs_order_rate', 1); update_post_meta($order_id, '_woocs_order_currency_changed_mannualy', time()); wc_add_order_item_meta($order_id, '_woocs_order_currency_changed_mannualy', time(), true); //*** $_order_shipping = get_post_meta($order_id, '_order_shipping', true); update_post_meta($order_id, '_order_shipping', $this->back_convert($_order_shipping, $_woocs_order_rate)); $_order_total = get_post_meta($order_id, '_order_total', true); update_post_meta($order_id, '_order_total', $this->back_convert($_order_total, $_woocs_order_rate)); $_refund_amount = get_post_meta($order_id, '_refund_amount', true); update_post_meta($order_id, '_refund_amount', $this->back_convert($_refund_amount, $_woocs_order_rate)); $_cart_discount_tax = get_post_meta($order_id, '_cart_discount_tax', true); update_post_meta($order_id, '_cart_discount_tax', $this->back_convert($_cart_discount_tax, $_woocs_order_rate)); $_order_tax = get_post_meta($order_id, '_order_tax', true); update_post_meta($order_id, '_order_tax', $this->back_convert($_order_tax, $_woocs_order_rate)); $_order_shipping_tax = get_post_meta($order_id, '_order_shipping_tax', true); update_post_meta($order_id, '_order_shipping_tax', $this->back_convert($_order_shipping_tax, $_woocs_order_rate)); $_cart_discount = get_post_meta($order_id, '_cart_discount', true); update_post_meta($order_id, '_cart_discount', $this->back_convert($_cart_discount, $_woocs_order_rate)); //*** global $wpdb; $get_items_sql = $wpdb->prepare("SELECT order_item_id,order_item_type FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d ", $order_id); $line_items = $wpdb->get_results($get_items_sql, ARRAY_N); if (!empty($line_items) and is_array($line_items)) { foreach ($line_items as $v) { $order_item_id = $v[0]; $order_item_type = $v[1]; switch ($order_item_type) { case 'line_item': $amount = wc_get_order_item_meta($order_item_id, '_line_subtotal', true); wc_update_order_item_meta($order_item_id, '_line_subtotal', $this->back_convert($amount, $_woocs_order_rate, 2)); $amount = wc_get_order_item_meta($order_item_id, '_line_total', true); wc_update_order_item_meta($order_item_id, '_line_total', $this->back_convert($amount, $_woocs_order_rate, 2)); $amount = wc_get_order_item_meta($order_item_id, '_line_subtotal_tax', true); wc_update_order_item_meta($order_item_id, '_line_subtotal_tax', $this->back_convert($amount, $_woocs_order_rate, 2)); $amount = wc_get_order_item_meta($order_item_id, '_line_tax', true); wc_update_order_item_meta($order_item_id, '_line_tax', $this->back_convert($amount, $_woocs_order_rate, 2)); $_line_tax_data = wc_get_order_item_meta($order_item_id, '_line_tax_data', true); if (!empty($_line_tax_data) and is_array($_line_tax_data)) { foreach ($_line_tax_data as $key => $values) { if (!empty($values)) { if (is_array($values)) { foreach ($values as $k => $value) { if (is_numeric($value)) { $_line_tax_data[$key][$k] = $this->back_convert($value, $_woocs_order_rate, 2); } } } else { if (is_numeric($values)) { $_line_tax_data[$key] = $this->back_convert($values, $_woocs_order_rate, 2); } } } } } wc_update_order_item_meta($order_item_id, '_line_tax_data', $_line_tax_data); break; case 'shipping': $amount = wc_get_order_item_meta($order_item_id, 'cost', true); wc_update_order_item_meta($order_item_id, 'cost', $this->back_convert($amount, $_woocs_order_rate, 2)); $taxes = wc_get_order_item_meta($order_item_id, 'taxes', true); if (!empty($taxes) and is_array($taxes)) { foreach ($taxes as $key => $values) { if (!empty($values)) { if (is_array($values)) { foreach ($values as $k => $value) { if (is_numeric($value)) { $taxes[$key][$k] = $this->back_convert($value, $_woocs_order_rate, 2); } } } else { if (is_numeric($values)) { $taxes[$key] = $this->back_convert($values, $_woocs_order_rate, 2); } } } } } wc_update_order_item_meta($order_item_id, 'taxes', $taxes); break; case 'tax': $amount = wc_get_order_item_meta($order_item_id, 'tax_amount', true); wc_update_order_item_meta($order_item_id, 'tax_amount', $this->back_convert($amount, $_woocs_order_rate, 3)); $amount = wc_get_order_item_meta($order_item_id, 'shipping_tax_amount', true); wc_update_order_item_meta($order_item_id, 'shipping_tax_amount', $this->back_convert($amount, $_woocs_order_rate, 2)); break; default: break; } } } //*** $order = new WC_Order($order_id); $refunds = $order->get_refunds(); if (!empty($refunds)) { foreach ($refunds as $refund) { $post_id = $refund->id; $amount = get_post_meta($post_id, '_refund_amount', true); update_post_meta($post_id, '_refund_amount', $this->back_convert($amount, $_woocs_order_rate, 2)); $amount = get_post_meta($post_id, '_order_total', true); update_post_meta($post_id, '_order_total', $this->back_convert($amount, $_woocs_order_rate, 2)); update_post_meta($post_id, '_order_currency', $this->default_currency); } } }
/** * Test: get_refunds */ function test_get_refunds() { $object = new WC_Order(); $id = $object->save(); $this->assertCount(0, $object->get_refunds()); wc_create_refund(array('order_id' => $id, 'amount' => '100', 'line_items' => array())); $this->assertCount(1, $object->get_refunds()); }
public function refunds_order_ids($order_ids, $template_type) { if ($template_type == 'credit-note') { $refunds_order_ids = array(); foreach ($order_ids as $order_id) { $order = new WC_Order($order_id); $refunds = $order->get_refunds(); foreach ($refunds as $key => $refund) { $refunds_order_ids[] = $refund->id; } } // die(print_r($refunds_order_ids,true)); return $refunds_order_ids; } else { return $order_ids; } }