flexible_shipping_shipment = $flexible_shipping_shipment; } /** * @param string $postal_code . * * @return string */ private function format_postal_code( $postal_code ) { return str_replace( [ '-', ' ' ], '', $postal_code ); } /** * Get sender. * * @param array $settings . * @param SenderAddress[] $additional_addresses Additional sender addresses. * * @return array */ private function get_sender( array $settings, array $additional_addresses ) { $dpd_sender_address_id = $this->flexible_shipping_shipment->get_meta( '_dpd_sender_address_id', '' ); if ( '' === $dpd_sender_address_id ) { $sender = []; $sender[ self::ADDRESS ] = $settings['sender_address']; $sender[ self::CITY ] = $settings['sender_city']; $sender[ self::COMPANY ] = $settings['sender_company']; $sender[ self::COUNTRY_CODE ] = 'PL'; $sender[ self::EMAIL ] = $settings['sender_email']; $sender[ self::FID ] = $settings[ self::FID ]; if ( 'yes' === $settings['test_mode'] ) { $sender[ self::FID ] = $settings['fid_testmode']; } $sender[ self::NAME ] = $settings['sender_name']; $sender[ self::PHONE ] = $settings['sender_phone']; $sender[ self::POSTAL_CODE ] = $this->format_postal_code( $settings['sender_postal_code'] ); } else { $sender = $this->prepare_sender_from_additional_addresses( $additional_addresses, $dpd_sender_address_id ); } return $sender; } /** * @param SenderAddress[] $additional_addresses Additional sender addresses. * @param string $dpd_sender_address_id . * * @return array */ private function prepare_sender_from_additional_addresses( $additional_addresses, $dpd_sender_address_id ) { $sender = []; foreach ( $additional_addresses as $additional_address ) { if ( $additional_address->get_address_id() === $dpd_sender_address_id ) { $sender = $this->prepare_sender_from_additional_address( $additional_address ); break; } } return $sender; } /** * @param SenderAddress $additional_address . * * @return array */ private function prepare_sender_from_additional_address( $additional_address ) { $sender = []; $sender[ self::ADDRESS ] = $additional_address->get_address(); $sender[ self::CITY ] = $additional_address->get_city(); $sender[ self::COMPANY ] = $additional_address->get_company(); $sender[ self::COUNTRY_CODE ] = 'PL'; $sender[ self::EMAIL ] = $additional_address->get_email(); $sender[ self::NAME ] = $additional_address->get_name(); $sender[ self::PHONE ] = $additional_address->get_phone(); $sender[ self::POSTAL_CODE ] = $this->format_postal_code( $additional_address->get_postal_code() ); return $sender; } /** * Get receiver. * * @param WC_Order $order . * * @return array */ private function get_receiver( WC_Order $order ) { $receiver = []; $address = $order->get_shipping_address_1(); if ( '' !== $order->get_shipping_address_2() ) { $address .= ' ' . $order->get_shipping_address_2(); } $receiver[ self::ADDRESS ] = $address; $receiver[ self::CITY ] = $order->get_shipping_city(); $receiver[ self::COMPANY ] = $order->get_shipping_company(); $receiver[ self::COUNTRY_CODE ] = $order->get_shipping_country(); $receiver[ self::EMAIL ] = $order->get_billing_email(); $receiver[ self::NAME ] = ''; $receiver[ self::NAME ] .= $order->get_shipping_first_name(); $receiver[ self::NAME ] .= ' '; $receiver[ self::NAME ] .= $order->get_shipping_last_name(); $receiver[ self::PHONE ] = ! empty( $order->get_shipping_phone() ) ? $order->get_shipping_phone() : $order->get_billing_phone(); $receiver[ self::POSTAL_CODE ] = $this->format_postal_code( $order->get_shipping_postcode() ); return $receiver; } /** * Get parcels. * * @return array */ private function get_parcels() { $parcels = []; $parcel = []; $parcel['content'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_content' ); $parcel['customerData1'] = $this->flexible_shipping_shipment->get_meta( '_dpd_ref' ); $parcel['sizeX'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_width' ); $parcel['sizeY'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_height' ); $parcel['sizeZ'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_depth' ); $parcel['weight'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_weight' ); $parcels[] = $parcel; $additional_packages = $this->flexible_shipping_shipment->get_meta( '_additional_packages', [] ); foreach ( $additional_packages as $additional_key => $additional_package ) { $parcel = []; $parcel['content'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_content' ); $parcel['customerData1'] = $this->flexible_shipping_shipment->get_meta( '_dpd_ref' ); $parcel['sizeX'] = $additional_package['dpd_package_width']; $parcel['sizeY'] = $additional_package['dpd_package_height']; $parcel['sizeZ'] = $additional_package['dpd_package_depth']; $parcel['weight'] = $additional_package['dpd_package_weight']; $parcels[] = $parcel; } return $parcels; } /** * @param array $shipment . * @param array $settings . * * @return array */ private function prepare_payer_type( array $shipment, array $settings ) { $dpd_sender_address_id = $this->flexible_shipping_shipment->get_meta( '_dpd_sender_address_id', '' ); if ( '' === $dpd_sender_address_id ) { $shipment['payerType'] = 'SENDER'; } else { $shipment['payerType'] = 'THIRD_PARTY'; $shipment['thirdPartyFID'] = $settings[ self::FID ]; } return $shipment; } /** * @return array */ public function prepare_shipment() { $shipping_method = $this->flexible_shipping_shipment->get_shipping_method(); $settings = $shipping_method->settings; $order = $this->flexible_shipping_shipment->get_order(); $shipment = []; $shipment['sender'] = $this->get_sender( $settings, $shipping_method->get_additional_sender_addresses() ); $shipment['receiver'] = $this->get_receiver( $order ); $shipment['parcels'] = $this->get_parcels(); $shipment = $this->prepare_payer_type( $shipment, $settings ); if ( 'PL' !== $order->get_shipping_country() ) { $shipment['ref1'] = $this->flexible_shipping_shipment->get_meta( '_dpd_ref' ); $shipment['ref2'] = $this->flexible_shipping_shipment->get_meta( '_dpd_package_content' ); } $shipment['services'] = []; if ( intval( $this->flexible_shipping_shipment->get_meta( WPDesk_Flexible_Shipping_Shipment_dpd::META_DPD_COD, '0' ) ) === 1 ) { $shipment['services']['cod'] = [ 'amount' => $this->flexible_shipping_shipment->get_meta( '_dpd_cod_value' ), 'currency' => $order->get_currency(), ]; } if ( intval( $this->flexible_shipping_shipment->get_meta( '_dpd_declared_value', '0' ) ) === 1 ) { $shipment['services']['declaredValue'] = [ 'amount' => $this->flexible_shipping_shipment->get_meta( '_dpd_declared_value_value' ), 'currency' => $order->get_currency(), ]; } $pickup = $this->get_bool_value( $this->flexible_shipping_shipment->get_meta( WPDesk_Flexible_Shipping_Shipment_dpd::META_DPD_PICKUP ) ); $point_id = $this->flexible_shipping_shipment->get_meta( WPDesk_Flexible_Shipping_Shipment_dpd::META_DPD_PICKUP_POINT_ID ); if ( $pickup && $point_id ) { $shipment['services']['dpdPickup'] = [ 'pudo' => $point_id, ]; } if ( (int) $this->flexible_shipping_shipment->get_meta( WPDesk_Flexible_Shipping_Shipment_dpd::META_DPD_SATURDAY, '0' ) === 1 ) { $shipment['services']['guarantee'] = [ 'type' => 'SATURDAY', ]; } if ( (int) $this->flexible_shipping_shipment->get_meta( WPDesk_Flexible_Shipping_Shipment_dpd::META_DPD_NEXT_DAY, '0' ) === 1 ) { $shipment['services']['guarantee'] = [ 'type' => 'DPDNEXTDAY', ]; } return $shipment; } }