Exemplo n.º 1
0
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);
        }
    }
}
Exemplo n.º 2
0
 /**
  * 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;
 }