/** * Calculates the shipping rate. * * @param array $package Order package. * * @return void */ public function calculate_shipping($package = array()) { global $woocommerce; $rates = array(); $errors = array(); $shipping_values = $this->correios_calculate($package); if (!empty($shipping_values)) { foreach ($shipping_values as $code => $shipping) { if (!isset($shipping->Erro)) { continue; } $name = WC_Correios_Connect::get_service_name($code); $error_number = (string) $shipping->Erro; $error_message = WC_Correios_Error::get_message($shipping->Erro); $errors[$error_number] = array('error' => $error_message, 'number' => $error_number); // Set the shipping rates. if (in_array($error_number, array('0', '010'))) { $label = 'yes' == $this->display_date ? WC_Correios_Connect::estimating_delivery($name, $shipping->PrazoEntrega, $this->additional_time) : $name; $cost = $this->fix_format(esc_attr($shipping->Valor)); $fee = $this->get_fee($this->fix_format($this->fee), $cost); array_push($rates, array('id' => $name, 'label' => $label, 'cost' => $cost + $fee)); } } // Display correios errors. if (!empty($errors)) { foreach ($errors as $error) { if ('' != $error['error']) { $type = '010' == $error['number'] ? 'notice' : 'error'; $message = '<strong>' . __('Correios', 'woocommerce-correios') . ':</strong> ' . esc_attr($error['error']); if (function_exists('wc_add_notice')) { wc_add_notice($message, $type); } else { if ('error' == $type) { $woocommerce->add_error($message); } else { $woocommerce->add_message($message); } } } } } $rates = apply_filters('woocommerce_correios_shipping_methods', $rates, $package); // Add rates. foreach ($rates as $rate) { $this->add_rate($rate); } } }
/** * Get the shipping rates. * * @param object $shipping_values Shipping values. * @param array $options Plugin options. * @param array $package Product package. * * @return array Shipping rates. */ protected static function get_the_shipping($shipping_values, $options, $package) { $_rates = array(); if (!empty($shipping_values)) { foreach ($shipping_values as $code => $shipping) { if (isset($shipping->Erro) && 0 == $shipping->Erro) { $date = isset($options['display_date']) ? $options['display_date'] : 'no'; $fee = isset($options['fee']) ? $options['fee'] : 0; $add_time = isset($options['additional_time']) ? $options['additional_time'] : 0; $name = WC_Correios_Connect::get_service_name($code); $label = 'yes' == $date ? WC_Correios_Connect::estimating_delivery($name, $shipping->PrazoEntrega, $add_time) : $name; $cost = str_replace(',', '.', esc_attr($shipping->Valor)); $fee = WC_Correios_Connect::get_fee(str_replace(',', '.', $fee), $cost); $_rates[] = array('id' => $name, 'label' => $label, 'cost' => $cost + $fee); } } } $_rates = apply_filters('woocommerce_correios_shipping_methods', $_rates, $package); // Format the cost. $rates = array(); foreach ($_rates as $rate) { $rates[] = array('id' => $rate['id'], 'label' => $rate['label'], 'cost' => self::get_price($rate['cost'])); } return $rates; }