function fn_pickpoint_cost_by_shipment(&$cart, $shipping_info, $service_data, $city) { if (!empty($service_data['module']) && $service_data['module'] == 'pickpoint') { $data = array(); $pickpoint_info = Registry::get('addons.rus_pickpoint'); $url = RusPickpoint::Url(); $data_url = RusPickpoint::$data_url; $login = RusPickpoint::Login(); $total = $weight = 0; $goods = array(); $length = $width = $height = 20; if ($login) { $shipping_settings = $service_data['service_params']; $weight_data = fn_expand_weight($shipping_info['package_info']['W']); $weight = round($weight_data['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); $packages = !empty($shipping_info['package_info']['packages']) ? $shipping_info['package_info']['packages'] : array(); $origination = !empty($shipping_info['package_info']['origination']) ? $shipping_info['package_info']['origination'] : ''; $from_state = fn_get_state_name($origination['state'], $origination['country'], 'RU'); $length = !empty($shipping_settings['pickpoint_length']) ? $shipping_settings['pickpoint_length'] : 10; $width = !empty($shipping_settings['pickpoint_width']) ? $shipping_settings['pickpoint_width'] : 10; $height = !empty($shipping_settings['pickpoint_height']) ? $shipping_settings['pickpoint_height'] : 10; if (!empty($shipping_info['package_info']['packages'])) { $packages = $shipping_info['package_info']['packages']; $packages_count = count($packages); $pickpoint_weight = $pickpoint_length = $pickpoint_width = $pickpoint_height = 0; if ($packages_count > 0) { foreach ($packages as $id => $package) { $package_length = empty($package['shipping_params']['box_length']) ? $length : $package['shipping_params']['box_length']; $package_width = empty($package['shipping_params']['box_width']) ? $width : $package['shipping_params']['box_width']; $package_height = empty($package['shipping_params']['box_height']) ? $height : $package['shipping_params']['box_height']; $weight_ar = fn_expand_weight($package['weight']); $package_weight = round($weight_ar['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); $pickpoint_weight = $pickpoint_weight + $package_weight; $pickpoint_length = $pickpoint_length + $package_length; $pickpoint_width = $pickpoint_width + $package_width; $pickpoint_height = $pickpoint_height + $package_height; } $length = $pickpoint_length; $width = $pickpoint_width; $height = $pickpoint_height; $weight = $pickpoint_weight; } } else { $packages_count = 1; $weight = round($weight_data['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); } $sid = RusPickpoint::$sid; $data_zone = array('SessionId' => $sid, 'FromCity' => $origination['city']); $url_zone = $url . 'getzone'; $pickpoint_id = ''; $address_pickpoint = RusPickpoint::findPostamatPickpoint($pickpoint_id, $city); $data_zone['ToPT'] = $pickpoint_id; $pickpoint_zone = RusPickpoint::zonesPickpoint($url_zone, $data_zone, $data_url); if (!empty($pickpoint_zone)) { $pickpoint_id = !empty($pickpoint_zone['to_pt']) ? $pickpoint_zone['to_pt'] : ''; if ($pickpoint_zone['delivery_min'] == $pickpoint_zone['delivery_max']) { $date_zone = $pickpoint_zone['delivery_max'] . ' ' . __('days'); } else { $date_zone = $pickpoint_zone['delivery_min'] . '-' . $pickpoint_zone['delivery_max'] . ' ' . __('days'); } } if (!empty($pickpoint_id) && !empty($address_pickpoint)) { if (!empty($shipping_info['keys']['group_key']) && !empty($shipping_info['keys']['shipping_id'])) { $group_key = $shipping_info['keys']['group_key']; $shipping_id = $shipping_info['keys']['shipping_id']; $cart['pickpoint_office'][$group_key][$shipping_id]['pickpoint_id'] = $pickpoint_id; $cart['pickpoint_office'][$group_key][$shipping_id]['address_pickpoint'] = $address_pickpoint; } elseif (!empty($shipping_info['shippings'])) { foreach ($shipping_info['shippings'] as $shipping) { if ($shipping['module'] == 'pickpoint') { $group_key = $shipping['group_key']; $shipping_id = $shipping['shipping_id']; $cart['pickpoint_office'][$group_key][$shipping_id]['pickpoint_id'] = $pickpoint_id; $cart['pickpoint_office'][$group_key][$shipping_id]['address_pickpoint'] = $address_pickpoint; } } } } $data = array('SessionId' => $sid, 'IKN' => $pickpoint_info['ikn'], 'FromCity' => $origination['city'], 'FromRegion' => $from_state, 'PTNumber' => $pickpoint_id, 'EncloseCount' => $packages_count, 'Length' => $length, 'Depth' => $height, 'Width' => $width, 'Weight' => $weight); $response = Http::post($url . 'calctariff', json_encode($data), $data_url); $result = json_decode($response); $data_services = json_decode(json_encode($result), true); $cost = 0; if (isset($data_services['Error']) && $data_services['Error'] == 1 && !empty($data_services['ErrorMessage'])) { fn_set_notification('E', __('notice'), $data_services['ErrorMessage']); } elseif (isset($data_services['Error']) && !empty($data_services['Error'])) { fn_set_notification('E', __('notice'), $data_services['Error']); } elseif (isset($data_services['Services'])) { $shipment = array_shift($data_services['Services']); $cost = $shipment['Tariff'] + $shipment['NDS']; } foreach ($cart['shipping'] as &$shipping) { if ($shipping['module'] == 'pickpoint') { $shipping['rate'] = $cost; $shipping['delivery_time'] = $date_zone; } } RusPickpoint::Logout(); } else { fn_set_notification('E', __('notice'), RusPickpoint::$last_error); } } }
/** * Prepare request information * * @return array Prepared data */ public function getRequestData() { $data = array(); $pickpoint_info = Registry::get('addons.rus_pickpoint'); $login = RusPickpoint::Login(); $url = RusPickpoint::Url(); $data_url = RusPickpoint::$data_url; $group_key = isset($this->_shipping_info['keys']['group_key']) ? $this->_shipping_info['keys']['group_key'] : 0; $shipping_id = isset($this->_shipping_info['keys']['shipping_id']) ? $this->_shipping_info['keys']['shipping_id'] : 0; if ($login) { $pickpoint_office = !empty($_SESSION['cart']['pickpoint_office']) ? $_SESSION['cart']['pickpoint_office'] : array(); $weight_data = fn_expand_weight($this->_shipping_info['package_info']['W']); $shipping_settings = $this->_shipping_info['service_params']; $weight = round($weight_data['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); $location = !empty($this->_shipping_info['package_info']['location']) ? $this->_shipping_info['package_info']['location'] : ''; $packages = !empty($this->_shipping_info['package_info']['packages']) ? $this->_shipping_info['package_info']['packages'] : array(); $origination = !empty($this->_shipping_info['package_info']['origination']) ? $this->_shipping_info['package_info']['origination'] : ''; $from_state = fn_get_state_name($origination['state'], $origination['country'], 'RU'); $length = !empty($shipping_settings['pickpoint_length']) ? $shipping_settings['pickpoint_length'] : 10; $width = !empty($shipping_settings['pickpoint_width']) ? $shipping_settings['pickpoint_width'] : 10; $height = !empty($shipping_settings['pickpoint_height']) ? $shipping_settings['pickpoint_height'] : 10; if (!empty($this->_shipping_info['package_info']['packages'])) { $packages = $this->_shipping_info['package_info']['packages']; $packages_count = count($packages); $pickpoint_weight = $pickpoint_length = $pickpoint_width = $pickpoint_height = 0; if ($packages_count > 0) { foreach ($packages as $id => $package) { $package_length = empty($package['shipping_params']['box_length']) ? $length : $package['shipping_params']['box_length']; $package_width = empty($package['shipping_params']['box_width']) ? $width : $package['shipping_params']['box_width']; $package_height = empty($package['shipping_params']['box_height']) ? $height : $package['shipping_params']['box_height']; $weight_ar = fn_expand_weight($package['weight']); $package_weight = round($weight_ar['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); $pickpoint_weight = $pickpoint_weight + $package_weight; $pickpoint_length = $pickpoint_length + $package_length; $pickpoint_width = $pickpoint_width + $package_width; $pickpoint_height = $pickpoint_height + $package_height; } $length = $pickpoint_length; $width = $pickpoint_width; $height = $pickpoint_height; $weight = $pickpoint_weight; } } else { $packages_count = 1; $weight = round($weight_data['plain'] * Registry::get('settings.General.weight_symbol_grams') / 1000, 3); } $sid = RusPickpoint::$sid; $data_zone = array('SessionId' => $sid, 'FromCity' => $origination['city']); $url_zone = $url . 'getzone'; $pickpoint_id = ''; if (!empty($pickpoint_office[$group_key][$shipping_id]['pickpoint_id'])) { $pickpoint_id = $pickpoint_office[$group_key][$shipping_id]['pickpoint_id']; $this->address_pickpoint = $pickpoint_office[$group_key][$shipping_id]['address_pickpoint']; $data_zone['ToPT'] = $pickpoint_id; $pickpoint_zone = RusPickpoint::zonesPickpoint($url_zone, $data_zone, $data_url); if (!empty($pickpoint_zone)) { if ($pickpoint_zone['delivery_min'] == $pickpoint_zone['delivery_max']) { $this->date_zone = $pickpoint_zone['delivery_max'] . ' ' . __('days'); } else { $this->date_zone = $pickpoint_zone['delivery_min'] . '-' . $pickpoint_zone['delivery_max'] . ' ' . __('days'); } } } else { $city = !empty($location['city']) ? $location['city'] : ''; $this->address_pickpoint = RusPickpoint::findPostamatPickpoint($pickpoint_id, $city); $data_zone['ToPT'] = $pickpoint_id; $pickpoint_zone = RusPickpoint::zonesPickpoint($url_zone, $data_zone, $data_url); if (!empty($pickpoint_zone)) { $pickpoint_id = !empty($pickpoint_zone['to_pt']) ? $pickpoint_zone['to_pt'] : ''; if ($pickpoint_zone['delivery_min'] == $pickpoint_zone['delivery_max']) { $this->date_zone = $pickpoint_zone['delivery_max'] . ' ' . __('days'); } else { $this->date_zone = $pickpoint_zone['delivery_min'] . '-' . $pickpoint_zone['delivery_max'] . ' ' . __('days'); } } } if (!empty($pickpoint_id) && !empty($this->address_pickpoint)) { $_SESSION['cart']['pickpoint_office'][$group_key][$shipping_id]['pickpoint_id'] = $pickpoint_id; $_SESSION['cart']['pickpoint_office'][$group_key][$shipping_id]['address_pickpoint'] = $this->address_pickpoint; } $data = array('SessionId' => $sid, 'IKN' => $pickpoint_info['ikn'], 'FromCity' => $origination['city'], 'FromRegion' => $from_state, 'PTNumber' => $pickpoint_id, 'EncloseCount' => $packages_count, 'Length' => $length, 'Depth' => $height, 'Width' => $width, 'Weight' => $weight); } else { fn_set_notification('E', __('notice'), RusPickpoint::$last_error); } $request_data = array('method' => 'post', 'url' => $url . 'calctariff', 'data' => json_encode($data), 'data_url' => $data_url); return $request_data; }