Files
2026-04-28 15:13:50 +02:00

1330 lines
49 KiB
PHP

<?php
use FS\InPost\PickupPoints\PickupPointsManager;
use FS\InPost\Shipment\LabelSettingsFactory;
use VendorInPost\WPDesk\Mutex\WordpressMySQLLockMutex;
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
require_once __DIR__ . '/shipX/class-api-shipx-status-translation.php';
if ( class_exists( 'WPDesk_Flexible_Shipping_Shipment' ) ) {
/**
* Class WPDesk_Flexible_Shipping_Shipment_Paczkomaty
*/
class WPDesk_Flexible_Shipping_Shipment_Paczkomaty extends WPDesk_Flexible_Shipping_Shipment implements WPDesk_Flexible_Shipping_Shipment_Interface {
/**
* Meta field names
*/
const META_KEY_PACZKOMATY_USLUGA = '_paczkomaty_usluga';
const META_PACZKOMAT_ID = '_paczkomat_id';
const META_PACZKOMAT_SENDING_METHOD = '_paczkomat_sending_method';
const META_PACZKOMAT_WIDTH = '_paczkomat_width';
const META_PACZKOMAT_HEIGHT = '_paczkomat_height';
const META_PACZKOMAT_LENGTH = '_paczkomat_length';
const META_PACZKOMAT_DROPOFF_PARCEL_MACHINE = '_paczkomat_dropoff_parcel_machine';
const META_PACZKOMAT_CUSTOMER_REF = '_paczkomat_customer_ref';
const META_PACZKOMAT_COD_AMOUNT = '_paczkomat_cod_amount';
const META_PACZKOMAT_WEIGHT = '_paczkomat_weight';
const META_PACZKOMAT_COD = '_paczkomat_cod';
const META_FLEXIBLE_SHIPPING_STATUS = '_flexible_shipping_status';
const META_PACZKOMAT_DROPOFF_POP = '_paczkomat_dropoff_pop';
const META_PACZKOMAT_DROPOFF_DISPATCH_POINT = '_paczkomat_dropoff_dispatch_point';
const META_PACZKOMAT_UBEZPIECZENIE = '_paczkomat_ubezpieczenie';
const META_PACZKOMAT_UBEZPIECZENIE_AMOUNT = '_paczkomat_ubezpieczenie_amount';
const META_PACZKOMAT_SIZE = '_paczkomat_size';
const META_PACZKOMAT_PUNKT_NADANIA = '_paczkomat_punkt_nadania';
const META_PACZKOMAT_SHIPMENT_ID = '_paczkomat_shipment_id';
const FILTER_SHIPMENT_DATA = 'woocommerce_paczkomaty_inpost_shipment_data';
const INPOST_LOCKER_STANDARD = 'inpost_locker_standard';
const INPOST_LOCKER_ALLEGRO = 'inpost_locker_allegro';
const SERVICE_KURIER = 'kurier';
const SERVICE_POLECONY = 'polecony';
const SERVICE_PACZKOMATY = 'paczkomaty';
const DELIVERY_FIELD_ID = 'delivery_point_id';
const DELIVERY_FIELD_NAME = 'delivery_point_name';
const DELIVERY_FIELD_ADDRESS = 'delivery_point_address';
const DELIVERY_FIELD_POSTCODE = 'delivery_point_postcode';
const DELIVERY_FIELD_CITY = 'delivery_point_city';
const META_ORDER_NOTE_TRACKING_ID = 'order_note_tracking_id';
const COURIER_SERVICE = '_courier_service';
const INPOST_COURIER_C2C = 'inpost_courier_c2c';
const INPOST_COURIER_STANDARD = 'inpost_courier_standard';
/**
* @var WPDesk_Paczkomaty_ShipX
*/
private $ship_x = null;
/**
* @var WPDesk_Paczkomaty_Plugin
*/
private $plugin;
/**
* @var WPDesk_Paczkomaty_Plugin
*/
public static $_plugin;
/**
* @var bool|\VendorInPost\Psr\Log\LoggerInterface
*/
private $logger;
/** @var WPDesk_Flexible_Shipping_Order_Auto_Complete */
private $order_auto_complete_functionality;
/**
* @var array
*/
private $packege_templates = [
'A' => 'small',
'B' => 'medium',
'C' => 'large',
];
/**
* Shipment options.
*
* @var WPDesk_Paczkomaty_Additional_Service[]
*/
private $shipment_options = [];
/**
* @var PickupPointsManager
*/
public static $pickup_points_manager;
/**
* WPDesk_Flexible_Shipping_Shipment_Paczkomaty constructor.
*
* @param $shipment
* @param WC_Order|null $order
*/
public function __construct( $shipment, WC_Order $order = null ) {
parent::__construct( $shipment, $order );
$this->shipment_options[] = new WPDesk_Paczkomaty_End_Of_Week_Collection( $this );
$this->shipment_options[] = new WPDesk_Paczkomaty_Additional_Service_Saturday( $this );
$this->shipment_options[] = new WPDesk_Paczkomaty_Additional_Service_SMS_Notification( $this );
$this->shipment_options[] = new WPDesk_Paczkomaty_Additional_Service_Email_Notification( $this );
$this->plugin = self::$_plugin;
$this->logger = $this->get_logger();
$this->order_auto_complete_functionality = new WPDesk_Flexible_Shipping_Order_Auto_Complete( $this );
$this->hooks();
}
/**
* Hook various behaviors to filters and actions.
*/
public function hooks() {
add_action( 'admin_enqueue_scripts', [ $this, 'i18n_js_support' ] );
}
public function i18n_js_support() {
$current_screen = get_current_screen();
if ( in_array( $current_screen->id, [ 'shop_order', 'woocommerce_page_wc-orders' ], true ) && isset( $_GET['action'] ) && 'edit' == $_GET['action'] ) {
wp_register_script( 'i18n_support', trailingslashit( plugins_url( '/', dirname( __FILE__ ) ) ) . 'assets/js/i18n-support.js', [ 'wp-i18n' ], false, true );
wp_enqueue_script( 'i18n_support' );
wp_set_script_translations( 'i18n_support', 'woocommerce-paczkomaty-inpost' );
}
}
/**
* @return bool|\VendorInPost\Psr\Log\LoggerInterface
*/
public function get_logger() {
return $this->plugin->get_logger();
}
/**
* .
* @param array $fs_method .
* @param array $package .
*/
public function checkout( array $fs_method, $package ) {
$checkout = new WPDesk_Flexible_Shipping_Shipment_Paczkomaty_Checkout(
$this,
$this->get_paczkomaty_shipping_method(),
$this->shipment_options,
$fs_method,
$package,
self::$pickup_points_manager
);
$checkout->process_checkout( $_POST ); // phpcs:ignore.
}
/**
* Tries to get unavailability reasons from offer
*
* @param stdClass|mixed $offer
*
* @return string
* @see https://docs.inpost24.com/pages/viewpage.action?pageId=983186
*/
private function get_unavability_reasons_message_from_offer( $offer ) {
if ( $offer instanceof stdClass ) {
if ( is_array( $offer->unavailability_reasons ) ) {
$message_array = array_reduce( $offer->unavailability_reasons, function ( array $carry, $reason ) {
if ( $reason instanceof stdClass ) {
if ( isset( $reason->message ) ) {
$carry[] = $reason->message;
} elseif ( isset( $reason->receiver ) ) {
$carry[] = $reason->receiver;
}
}
return $carry;
}, [] );
}
return implode( ', ', $message_array );
}
return '';
}
/**
* @return string
*/
public function order_metabox_content() {
$order = $this->get_order();
$status_translator = new WPDesk_Paczkomaty_ShipX_Status_Translation( $this->get_shipX(), get_locale() );
$args = [];
$paczkomat_shipment = $this->get_meta( '_paczkomat_shipment', new stdClass() );
$args['paczkomat_shipment'] = $paczkomat_shipment;
$args['shipment_data_send'] = $this->get_meta( '_shipment_data_send', '' );
$args['paczkomaty_usluga'] = $this->get_meta( '_paczkomaty_usluga' );
$args['courier_service'] = $this->get_meta( self::COURIER_SERVICE, self::INPOST_COURIER_STANDARD );
$args['paczkomat_id'] = $this->get_meta( '_paczkomat_id' );
$args['paczkomat_shipx'] = $this->get_meta( '_paczkomat_shipx' );
$args['paczkomat_shipment_status'] = $this->get_meta( '_paczkomat_shipment_status' );
$args['paczkomat_shipment_status_translated'] = $status_translator->translate_status( $args['paczkomat_shipment_status'] );
$args['paczkomat_size'] = $this->get_meta( self::META_PACZKOMAT_SIZE );
$args['paczkomat_width'] = $this->get_meta( '_paczkomat_width' );
$args['paczkomat_height'] = $this->get_meta( '_paczkomat_height' );
$args['paczkomat_length'] = $this->get_meta( '_paczkomat_length' );
$args['paczkomat_weight'] = $this->get_meta( '_paczkomat_weight' );
$args['phone'] = $this->get_phone_from_order( $order );
$args['paczkomat_packcode'] = $this->get_meta( '_paczkomat_packcode' );
$args['paczkomat_ubezpieczenie'] = $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE );
$args['paczkomat_ubezpieczenie_amount'] = $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE_AMOUNT );
$args['paczkomat_cod'] = $this->get_meta( '_paczkomat_cod' );
$args['paczkomat_cod_amount'] = $this->get_meta( '_paczkomat_cod_amount' );
$args['paczkomat_how_to_give'] = $this->get_meta( '_paczkomat_how_to_give' );
$args['paczkomat_error'] = $this->get_meta( '_paczkomat_error' );
$args['post_id'] = $this->get_order()->get_id();
$args['label_url'] = $this->get_label_url();
$args['status'] = $this->get_status();
$args['create_shipment_allowed'] = 'shop_subscription' !== $this->get_order()->get_type();
$args['customer_ref_available'] = 'shop_subscription' !== $this->get_order()->get_type();
foreach ( $this->shipment_options as $shipment_option ) {
$args = $shipment_option->prepare_metabox_field_values( $args );
}
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$settings = $paczkomaty_shipping_method->settings;
$args['paczkomaty_shipping_method'] = $paczkomaty_shipping_method;
if ( $this->get_meta( '_paczkomat_sending_method', '' ) != '' ) {
$args['paczkomat_sending_method'] = $this->get_meta( '_paczkomat_sending_method' );
} else {
$args['paczkomat_sending_method'] = $paczkomaty_shipping_method->get_option( 'sending_method', '' );
}
$args['select2'] = true;
if ( $args['paczkomat_ubezpieczenie_amount'] == '' ) {
$args['paczkomat_ubezpieczenie_amount'] = $this->get_order()->get_total();
}
if ( $args['paczkomat_cod_amount'] == '' ) {
$args['paczkomat_cod_amount'] = $this->get_order()->get_total();
}
$args['paczkomat_customer_ref'] = $this->get_meta( '_paczkomat_customer_ref' );
if ( $args['paczkomat_customer_ref'] == '' ) {
$args['paczkomat_customer_ref'] = sprintf( __( 'Zamówienie %s', 'woocommerce-paczkomaty-inpost' ), $this->get_order()->get_order_number() );
} else {
$format = preg_replace( '/%(?!%|[0-9\$\+\-\.\']*[bcdeEfFgGosuxX])/', '%%', $args['paczkomat_customer_ref'] );
$args['paczkomat_customer_ref'] = sprintf( $format, $this->get_order()->get_order_number() );
}
$args['paczkomat_punkt_nadania'] = $this->get_meta( self::META_PACZKOMAT_PUNKT_NADANIA, true );
$args['punkty_nadania'] = apply_filters( 'paczkomaty_shipping_method_pickup_points', [ $args['paczkomat_punkt_nadania'] => $args['paczkomat_punkt_nadania'] . ' ' . __( '(Błąd ładowania listy punktów nadania!)', 'woocommerce-paczkomaty-inpost' ) ] );
if ( ! empty( $paczkomat_shipment->offers ) && is_array( $paczkomat_shipment->offers ) ) {
foreach ( $paczkomat_shipment->offers as $offer ) {
if ( $offer->status == 'unavailable' ) {
if ( empty( $args['paczkomat_offers_message'] ) ) {
$args['paczkomat_offers_message'] = '';
} else {
$args['paczkomat_offers_message'] .= '<br/>';
}
$args['paczkomat_offers_message'] .= $this->get_unavability_reasons_message_from_offer( $offer );
}
}
}
$args['shipX'] = true;
if ( $this->get_meta( '_paczkomaty_usluga' ) == 'paczkomaty' && $paczkomaty_shipping_method->get_parcel_lockers_api() == 'XML' ) {
$args['shipX'] = false;
}
$id = $this->get_id();
$label_avaliable = $this->label_avaliable();
$editable = true;
if ( $this->get_status() != 'fs-new' && $this->get_status() != 'fs-failed' ) {
$editable = false;
}
$allegro = $this->is_allegro_order();
$courier_service_options = [
self::INPOST_COURIER_C2C => __( 'Kurier Standard C2C', 'woocommerce-paczkomaty-inpost' ),
self::INPOST_COURIER_STANDARD => __( 'Kurier Standard', 'woocommerce-paczkomaty-inpost' ),
];
ob_start();
$echo = false;
include( 'views/order-metabox-content.php' );
$content = ob_get_contents();
ob_end_clean();
return $content;
}
/**
*
*/
public function order_metabox() {
echo $this->order_metabox_content();
}
/**
* @return string|void
*/
public function get_order_metabox_title() {
return __( 'InPost', 'woocommerce-paczkomaty-inpost' );
}
/**
* @param string $action
* @param array $data
*
* @return array|string|void
* @throws Exception
*/
public function ajax_request( $action, $data ) {
if ( $action == 'save' ) {
$this->save_ajax_data( $data );
$this->save();
} elseif ( $action == 'send' ) {
$this->save_ajax_data( $data );
$this->api_create();
$this->save();
} elseif ( $action == 'refresh' ) {
$this->api_refresh();
$this->show_exception_message_when_pack_code_is_missing();
} elseif ( $action == 'cancel' ) {
$this->api_cancel();
return [
'content' => $this->order_metabox_content(),
'message' => __( 'Przesyłka została anulowana', 'woocommerce-paczkomaty-inpost' ),
];
} else {
throw new Exception( __( 'Nieznana akcja: "' . $action . '"', 'woocommerce-paczkomaty-inpost' ) );
}
return $this->order_metabox_content();
}
/**
* Check if parcel pack code is generated
* '_paczkomat_packcode' => '602236056943300010795018' || '_paczkomat_packcode' => null
*
* @return bool
*/
private function check_if_parcel_pack_code_is_generated() {
return null !== $this->get_meta( '_paczkomat_packcode' );
}
/**
* Throw exception message when parcel pack code is not generated
*
* @throws Exception
*/
private function show_exception_message_when_pack_code_is_missing() {
if ( false === $this->check_if_parcel_pack_code_is_generated() ) {
throw new Exception( __(
'Nie można wygenerować etykiety nadawczej dla przesyłki ze statusem Oferta wybrana. Jeżeli korzystasz z konta
prepaid upewnij się, że znajdują się na nim wystarczające środki do nadania przesyłki.
Jeśli posiadasz podpisaną umowę z InPost, a błąd nadal występuje, skontaktuj się ze swoim opiekunem InPost.
', 'woocommerce-paczkomaty-inpost'
) );
}
}
/**
* Use when shipments is confirmed to notify all additional functionalities.
*/
public function set_info_shipment_is_confirmed() {
do_action( 'flexible_shipping_shipment_confirmed', $this );
$this->order_auto_complete_functionality->handle_order();
}
/**
* @throws Exception
* @throws WPDesk_Paczkomaty_ShipX_Exception
*/
public function api_cancel() {
if ( $this->get_meta( '_paczkomat_shipx', '0' ) == '1' ) {
$shipment_id = $this->get_meta( self::META_PACZKOMAT_SHIPMENT_ID );
$shipX = $this->get_shipX();
$shipX->delete_shipment( $shipment_id );
$this->delete_meta( '_paczkomat_shipment' );
$this->delete_meta( self::META_PACZKOMAT_SHIPMENT_ID );
$this->delete_meta( '_paczkomat_packcode' );
$this->delete_meta( '_paczkomat_shipment_status' );
$this->update_status( 'fs-new' );
$this->save();
do_action( 'flexible_shipping_shipment_canceled', $this );
}
}
/**
* @throws Exception
* @throws WPDesk_Paczkomaty_ShipX_Exception
*/
public function api_refresh() {
$mutex = new WordpressMySQLLockMutex( 'inpost_api_refresh_' . $this->get_id() );
$mutex->acquireLock();
try {
if ( $this->get_meta( '_paczkomat_shipx', '0' ) == '1' ) {
$shipment_id = $this->get_meta( self::META_PACZKOMAT_SHIPMENT_ID );
$shipX = $this->get_shipX();
$shipment = $shipX->get_shipment( $shipment_id );
$this->set_meta( '_paczkomat_shipment', $shipment );
$this->set_meta( self::META_PACZKOMAT_SHIPMENT_ID, $shipment->id );
$this->set_meta( '_paczkomat_shipment_status', $shipment->status );
$this->set_meta( '_paczkomat_packcode', $shipment->tracking_number );
$trigger_hook = false;
if ( $this->is_inpost_status_considered_as_confirmed( $shipment->status ) ) {
if ( $this->get_status() !== 'fs-confirmed' ) {
$this->add_order_note_tracking_id();
$this->update_status( 'fs-confirmed' );
$trigger_hook = true;
}
}
$this->save();
if ( $trigger_hook ) {
$this->set_info_shipment_is_confirmed();
}
}
} finally {
$mutex->releaseLock();
}
}
/**
* Should InPost shipment status be understood as FS fs-confirmed?
*
* @param string $status Inpost shipment status
*
* @return bool
*/
private function is_inpost_status_considered_as_confirmed( $status ) {
return ! in_array( $status, [ 'created', 'offers_prepared', 'offer_selected', 'other' ], true );
}
/**
* @param $data
*
* @throws Exception
*/
public function save_ajax_data( $data ) {
if ( isset( $data['paczkomat_usluga'] ) ) {
$this->set_meta( '_paczkomaty_usluga', $data['paczkomat_usluga'] );
} else {
throw new Exception( __( 'Brak usługi!', 'woocommerce-paczkomaty-inpost' ) );
}
$this->set_meta( self::COURIER_SERVICE, $data['courier_service'] ?? self::INPOST_COURIER_STANDARD );
if ( isset( $data['paczkomat_id'] ) ) {
$this->set_meta( '_paczkomat_id', $data['paczkomat_id'] );
if ( ! empty( $data['paczkomat_id'] ) ) {
$point = self::$pickup_points_manager->get_point_details( $data['paczkomat_id'] );
$this->set_meta( self::DELIVERY_FIELD_ID, $point->get_point_id() );
$this->set_meta( self::DELIVERY_FIELD_NAME, $point->get_name() );
$this->set_meta( self::DELIVERY_FIELD_ADDRESS, $point->get_address_1() );
$this->set_meta( self::DELIVERY_FIELD_POSTCODE, $point->get_zipcode() );
$this->set_meta( self::DELIVERY_FIELD_CITY, $point->get_city() );
}
} else {
throw new Exception( __( 'Brak identyfikatora paczkomatu!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_size'] ) ) {
$this->set_meta( self::META_PACZKOMAT_SIZE, $data['paczkomat_size'] );
} else {
throw new Exception( __( 'Brak rozmiaru przesyłki!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_width'] ) ) {
$this->set_meta( '_paczkomat_width', $data['paczkomat_width'] );
} else {
throw new Exception( __( 'Brak szrokości przesyłki!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_height'] ) ) {
$this->set_meta( '_paczkomat_height', $data['paczkomat_height'] );
} else {
throw new Exception( __( 'Brak wysokości przesyłki!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_length'] ) ) {
$this->set_meta( '_paczkomat_length', $data['paczkomat_length'] );
} else {
throw new Exception( __( 'Brak długości przesyłki przesyłki!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_weight'] ) ) {
$this->set_meta( '_paczkomat_weight', $data['paczkomat_weight'] );
} else {
throw new Exception( __( 'Brak wagi przesyłki!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_sending_method'] ) ) {
$this->set_meta( '_paczkomat_sending_method', $data['paczkomat_sending_method'] );
} else {
throw new Exception( __( 'Brak sposobu nadania!', 'woocommerce-paczkomaty-inpost' ) );
}
if ( isset( $data['paczkomat_customer_ref'] ) ) {
$this->set_meta( '_paczkomat_customer_ref', $data['paczkomat_customer_ref'] );
} else {
if ( $this->get_order()->get_type() !== 'shop_subscription' ) {
throw new Exception( __( 'Brak numeru referencyjnego!', 'woocommerce-paczkomaty-inpost' ) );
}
}
if ( isset( $data['paczkomat_ubezpieczenie'] ) ) {
$this->set_meta( self::META_PACZKOMAT_UBEZPIECZENIE, $data['paczkomat_ubezpieczenie'] );
} else {
$this->set_meta( self::META_PACZKOMAT_UBEZPIECZENIE, 0 );
}
if ( isset( $data['paczkomat_ubezpieczenie_amount'] ) ) {
$this->set_meta( self::META_PACZKOMAT_UBEZPIECZENIE_AMOUNT, $data['paczkomat_ubezpieczenie_amount'] );
} else {
$this->set_meta( self::META_PACZKOMAT_UBEZPIECZENIE_AMOUNT, '' );
}
if ( isset( $data['paczkomat_cod'] ) ) {
$this->set_meta( '_paczkomat_cod', $data['paczkomat_cod'] );
} else {
$this->set_meta( '_paczkomat_cod', 0 );
}
if ( isset( $data['paczkomat_cod_amount'] ) ) {
$this->set_meta( '_paczkomat_cod_amount', $data['paczkomat_cod_amount'] );
} else {
$this->set_meta( '_paczkomat_cod_amount', '' );
}
foreach ( $this->shipment_options as $shipment_option ) {
$shipment_option->save_ajax_data( $data );
}
}
/**
* @return null|string
*/
public function get_error_message() {
return $this->get_meta( '_paczkomat_error' );
}
/**
* @return array|mixed|null|string
*/
public function get_tracking_number() {
return $this->get_meta( '_paczkomat_packcode' );
}
/**
* @return string
*/
public function get_tracking_url() {
$tracking_number = $this->get_tracking_number();
if ( ! empty( $tracking_number ) ) {
return 'https://inpost.pl/pl/pomoc/znajdz-przesylke?parcel=' . $this->get_tracking_number();
}
return '';
}
/**
* Get InPost service.
*
* @return string
*/
public function get_inpost_service() {
return $this->get_meta( '_paczkomaty_usluga', '' );
}
/**
* @throws Exception
*/
public function api_create() {
$paczkomaty_usluga = $this->get_meta( '_paczkomaty_usluga', '' );
if ( $this->get_status() != 'fs-new' && $this->get_status() != 'fs-failed' ) {
throw new Exception( __( 'Przesyłka została już utworzona.', 'woocommerce-paczkomaty-inpost' ) );
}
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
if ( $paczkomaty_usluga == 'paczkomaty' || $paczkomaty_usluga == 'allegro_paczkomaty' ) {
$allegro = false;
if ( $paczkomaty_usluga == 'allegro_paczkomaty' ) {
$allegro = true;
}
if ( $paczkomaty_shipping_method->get_parcel_lockers_api() == 'XML' ) {
$this->api_create_paczkomaty( $allegro );
} else {
$this->api_create_shipX( $allegro );
}
} elseif ( $paczkomaty_usluga == 'polecony' || $paczkomaty_usluga == 'allegro_polecony' ) {
$allegro = false;
if ( $paczkomaty_usluga == 'allegro_polecony' ) {
$allegro = true;
}
if ( $paczkomaty_shipping_method->get_parcel_lockers_api() == 'XML' ) {
$this->api_create_polecony( $allegro );
} else {
$this->api_create_shipX( $allegro );
}
} elseif ( $paczkomaty_usluga == self::SERVICE_KURIER || $paczkomaty_usluga == 'allegro_kurier' ) {
$allegro = false;
if ( $paczkomaty_usluga == 'allegro_kurier' ) {
$allegro = true;
}
$this->api_create_shipX( $allegro );
} else {
throw new Exception( sprintf( __( 'Nieznana usługa: "%s"!', 'woocommerce-paczkomaty-inpost' ), $paczkomaty_usluga ) );
}
}
/**
* @return array
* @throws Exception
*/
public function get_label() {
if ( ! $this->label_avaliable() ) {
throw new Exception( sprintf( __( 'Etykieta niedostępna dla statusu ', 'woocommerce-paczkomaty-inpost' ), $this->get_status() ) );
}
return $this->api_get_label();
}
/**
* @return mixed|void
*/
public function get_after_order_table() {
if ( $this->get_meta( '_paczkomaty_usluga', '' ) == 'paczkomaty' ) {
$args = [ 'paczkomat_id' => $this->get_meta( '_paczkomat_id' ) ];
$paczkomaty = apply_filters( 'paczkomaty_shipping_method_admin_machines', [ $args['paczkomat_id'] => $args['paczkomat_id'] ] );
$args['paczkomat'] = $paczkomaty[ $args['paczkomat_id'] ];
echo $this->plugin->load_template( 'order-items-table', '', $args );
}
if ( $this->get_tracking_url() != '' ) {
$args['tracking_url'] = $this->get_tracking_url();
$args['tracking_number'] = $this->get_tracking_number();
echo $this->plugin->load_template( 'order-items-table-tracking', '', $args );
}
}
/**
* @return mixed|void
*/
public function get_email_after_order_table() {
if ( $this->get_meta( '_paczkomaty_usluga', '' ) == 'paczkomaty' ) {
$args = [ 'paczkomat_id' => $this->get_meta( '_paczkomat_id' ) ];
$paczkomaty = apply_filters( 'paczkomaty_shipping_method_admin_machines', [ $args['paczkomat_id'] => $args['paczkomat_id'] ] );
$args['paczkomat'] = '';
if ( isset( $args['paczkomat_id'] ) && isset( $paczkomaty[ $args['paczkomat_id'] ] ) ) {
$args['paczkomat'] = $paczkomaty[ $args['paczkomat_id'] ];
}
echo $this->plugin->load_template( 'order-items-table', '', $args );
}
if ( $this->get_tracking_url() != '' ) {
$args['tracking_url'] = $this->get_tracking_url();
$args['tracking_number'] = $this->get_tracking_number();
echo $this->plugin->load_template( 'order-items-table-tracking', '', $args );
}
}
/**
* @return array
* @throws Exception
* @throws WPDesk_Paczkomaty_ShipX_Exception
*/
public function api_get_label() {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$label_settings = ( new LabelSettingsFactory( $paczkomaty_shipping_method ) )->get_settings();
$label_data = [
'label_format' => $label_settings->get_extension(),
'content' => null,
'file_name' => 'inpost_' . $this->get_tracking_number() . '.' . $label_settings->get_extension(),
];
$paczkomat_shipx = $this->get_meta( '_paczkomat_shipx', '' );
if ( $paczkomat_shipx == '' ) {
$packcode = $this->get_meta( '_paczkomat_packcode', true );
if ( ! empty( $packcode ) ) {
if ( $label_data['content'] = inpost_get_sticker( $paczkomaty_shipping_method->get_option( 'email', '' ), $paczkomaty_shipping_method->get_option( 'password', '' ), $packcode, $label_type, $label_format ) ) {
if ( is_array( $label_data['content'] ) && isset( $label_data['content']['error'] ) ) {
throw new Exception( __( "Error: " . $label_data['content']['error']['message'], 'woocommerce-paczkomaty-inpost' ) );
}
} else {
throw new Exception( __( 'Błąd: Nie udało się wygenerować etykiety', 'woocommerce-paczkomaty-inpost' ) );
}
} else {
throw new Exception( __( 'Błąd: Niepoprawny numer paczki', 'woocommerce-paczkomaty-inpost' ) );
}
} else {
$shipment_id = $this->get_meta( self::META_PACZKOMAT_SHIPMENT_ID );
if ( ! empty( $shipment_id ) ) {
$shipX = $this->get_shipX();
$label_data['content'] = $shipX->get_shipments_labels( $shipment_id, $label_settings->get_format(), $label_settings->get_type() );
}
}
return $label_data;
}
/**
* @param bool $allegro
*
* @throws Exception
*/
private function api_create_paczkomaty( $allegro = false ) {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$order = $this->get_order();
$packData = [];
$packData['senderEmail'] = $paczkomaty_shipping_method->get_option( 'email', '' );
$packData['boxMachineName'] = $this->get_meta( '_paczkomat_id' );
$packData['adreseeEmail'] = wpdesk_get_order_meta( $order, '_billing_email', true );
$packData['phoneNum'] = $this->get_phone_from_order( $order );;
$packData['customerRef'] = $this->get_meta( '_paczkomat_customer_ref' );
if ( $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE, '0' ) == '1' ) {
$packData['insuranceAmount'] = $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE_AMOUNT );
}
if ( $this->get_meta( '_paczkomat_cod', '0' ) == '1' ) {
$packData['onDeliveryAmount'] = $this->get_meta( '_paczkomat_cod_amount' );
}
$selfSend = 0;
if ( $this->get_meta( '_paczkomat_sending_method', '' ) == 'parcel_locker'
|| $this->get_meta( '_paczkomat_sending_method', '' ) == 'pop'
) {
$selfSend = 1;
} else {
$selfSend = 0;
}
$packData['packType'] = $this->get_meta( self::META_PACZKOMAT_SIZE );
if ( $allegro ) {
$_allegro_journal_deal = wpdesk_get_order_meta( $order, '_allegro_journal_deal', true );
$_allegro_tansaction_id = wpdesk_get_order_meta( $order, '_allegro_tansaction_id', true );
if ( $_allegro_journal_deal != '' && $_allegro_tansaction_id != '' ) {
$packData['allegro'] = [];
$packData['allegro']['userId'] = $_allegro_journal_deal->dealSellerId;
$packData['allegro']['transactionId'] = $_allegro_tansaction_id;
}
}
$response = inpost_send_packs( $paczkomaty_shipping_method->get_option( 'email', '' ), $paczkomaty_shipping_method->get_option( 'password', '' ), [ $packData ], 1, $selfSend );
if ( ! empty( $response[0]['error_key'] ) || ! empty( $response[0]['error_message'] ) ) {
$this->set_meta( "_paczkomat_error", $response[0]['error_message'] );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( $response[0]['error_message'] );
} elseif ( ! empty( $response['error'] ) ) {
$this->set_meta( "_paczkomat_error", $response['error']['message'] );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( $response['error']['message'] );
} elseif ( isset( $response[0]['packcode'] ) ) {
//save in order info
$this->set_meta( "_paczkomat_packcode", $response[0]['packcode'] );
$this->delete_meta( '_paczkomat_error' );
$this->update_status( 'fs-confirmed' );
$this->add_order_note_tracking_id();
$this->save();
$this->set_info_shipment_is_confirmed();
} else {
$this->set_meta( "_paczkomat_error", __( 'Wystąpił błąd podczas przetwarzania żądania.', 'woocommerce-paczkomaty-inpost' ) );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( __( 'Wystąpił błąd podczas przetwarzania żądania.', 'woocommerce-paczkomaty-inpost' ) );
}
}
/**
* @param $allegro
*
* @throws Exception
*/
private function api_create_polecony( $allegro ) {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$order = $this->get_order();
$address = trim( wpdesk_get_order_meta( $order, '_shipping_address_1', true ) . ' ' . wpdesk_get_order_meta( $order, '_shipping_address_2', true ) );
$address_2 = trim( substr( $address, strripos( $address, ' ' ) ) );
$address_1 = trim( substr( $address, 0, strripos( $address, ' ' ) ) );
if ( $address_1 == '' ) {
$address_1 = $address_2;
$address_2 = '';
}
$packData = [];
$packData['senderEmail'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_email', '' );
$packData['adreseeEmail'] = wpdesk_get_order_meta( $order, '_billing_email', true );
$packData['phoneNum'] = $this->get_phone_from_order( $order );;
$packData['senderBoxMachineName'] = $this->get_meta( self::META_PACZKOMAT_PUNKT_NADANIA );
$packData['receiverAddress'] = [];
$packData['receiverAddress']['name'] = wpdesk_get_order_meta( $order, '_shipping_first_name', true );
$packData['receiverAddress']['surName'] = wpdesk_get_order_meta( $order, '_shipping_last_name', true );
$packData['receiverAddress']['companyName'] = wpdesk_get_order_meta( $order, '_shipping_company', true );
$packData['receiverAddress']['email'] = wpdesk_get_order_meta( $order, '_billing_email', true );
$packData['receiverAddress']['phoneNum'] = $this->format_phone_number( $this->get_phone_from_order( $order ) );
$packData['receiverAddress']['street'] = $address_1;
$packData['receiverAddress']['buildingNo'] = $address_2;
$packData['receiverAddress']['town'] = wpdesk_get_order_meta( $order, '_shipping_city', true );
$packData['receiverAddress']['zipCode'] = wpdesk_get_order_meta( $order, '_shipping_postcode', true );
//
$packData['senderAddress'] = [];
$packData['senderAddress']['name'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_name', '' );
$packData['senderAddress']['surName'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_surName', '' );
$packData['senderAddress']['companyName'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_companyName', '' );
$packData['senderAddress']['email'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_email', '' );
$packData['senderAddress']['phoneNum'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_phoneNum', '' );
$packData['senderAddress']['street'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_street', '' );
$packData['senderAddress']['buildingNo'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_street_number', '' );
$packData['senderAddress']['town'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_town', '' );
$packData['senderAddress']['zipCode'] = $paczkomaty_shipping_method->get_option( 'polecony_sender_zipCode', '' );
$selfSend = 0;
if ( $allegro ) {
$_allegro_journal_deal = wpdesk_get_order_meta( $order, '_allegro_journal_deal', true );
$_allegro_tansaction_id = wpdesk_get_order_meta( $order, '_allegro_tansaction_id', true );
if ( $_allegro_journal_deal != '' && $_allegro_tansaction_id != '' ) {
$packData['allegro'] = [];
$packData['allegro']['userId'] = $_allegro_journal_deal->dealSellerId;
$packData['allegro']['transactionId'] = $_allegro_tansaction_id;
}
}
$response = inpost_send_letters( $paczkomaty_shipping_method->get_option( 'email', '' ), $paczkomaty_shipping_method->get_option( 'password', '' ), [ $packData ], 1 );
if ( ! empty( $response['error']['key'] ) ) {
$this->set_meta( "_paczkomat_error", $response['error']['message'] );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( $response['error']['message'] );
} elseif ( isset( $response[0]['packcode'] ) ) {
$this->set_meta( "_paczkomat_packcode", $response[0]['packcode'] );
$this->delete_meta( '_paczkomat_error' );
$this->update_status( 'fs-confirmed' );
$this->add_order_note_tracking_id();
$this->save();
$this->set_info_shipment_is_confirmed();
} else {
$this->set_meta( "_paczkomat_error", __( 'Wystąpił błąd podczas przetwarzania żądania.', 'woocommerce-paczkomaty-inpost' ) );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( __( 'Wystąpił błąd podczas przetwarzania żądania.', 'woocommerce-paczkomaty-inpost' ) );
}
}
/**
* @param bool $allegro
*
* @throws Exception
*/
private function api_create_shipX( $allegro = false ) {
$shipment_data = new stdClass();
$shipment_data->service = $this->get_service();
$shipment_data = $this->add_parcel_to_shipment( $shipment_data );
$shipment_data = $this->add_receiver_to_shipment( $shipment_data );
$shipment_data = $this->add_sender_to_shipment( $shipment_data );
$shipment_data = $this->add_reference_to_shipment( $shipment_data );
$shipment_data = $this->add_custom_attributes_to_shipment( $shipment_data );
$shipment_data = $this->add_sending_method_to_shipment( $shipment_data );
$shipment_data = $this->add_target_point_to_shipment( $shipment_data );
$shipment_data = $this->add_insurance_to_shipment( $shipment_data );
$shipment_data = $this->add_cod_to_shipment( $shipment_data );
$shipment_data = $this->add_allegro_shipment( $shipment_data, $allegro );
foreach ( $this->shipment_options as $shipment_option ) {
$shipment_data = $shipment_option->modify_shipment_data( $shipment_data );
}
try {
$shipX = $this->get_shipX();
/**
* Filter woocommerce_paczkomaty_inpost_shipment_data.
* Can modify request data before send it to API.
*
* @param stdClass $shipment_data Original shipment data created by plugin.
* $shipment_data structure: @param WPDesk_Flexible_Shipping_Shipment_Paczkomaty $this Shipment data.
*
* @see https://docs.inpost24.com/pages/viewpage.action?pageId=983195
* $shipment_data contains minimal required data to create shipment in API.
* ie. does not contains sender - sender data is defined on API side in user organisation.
*/
$shipment_data = apply_filters( self::FILTER_SHIPMENT_DATA, $shipment_data, $this );
$this->set_meta( "_shipment_data_send", $shipment_data );
$shipment = $shipX->create_shipment( $shipment_data );
$this->set_meta( "_paczkomat_shipx", 1 );
$this->set_meta( "_paczkomat_shipment", $shipment );
$this->set_meta( self::META_PACZKOMAT_SHIPMENT_ID, $shipment->id );
$this->set_meta( "_paczkomat_shipment_status", $shipment->status );
$this->set_meta( "_paczkomat_error", '' );
$this->set_meta( '_flexible_shipping_status', 'created' );
$this->delete_meta( '_paczkomat_error' );
$this->update_status( 'fs-created' );
$this->save();
/**
* Action woocommerce_paczkomaty_inpost_shipment_created.
* Fires when shipment is successfully created in API.
*
* @param WPDesk_Flexible_Shipping_Shipment_Paczkomaty $shipment Shipment.
*/
do_action( 'woocommerce_paczkomaty_inpost_shipment_created', $this );
} catch ( Exception $e ) {
$this->set_meta( "_paczkomat_error", $e->getMessage() );
$this->update_status( 'fs-failed' );
$this->save();
throw new Exception( $e->getMessage() );
}
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_parcel_to_shipment( $shipment_data ) {
$parcel = new stdClass();
if ( $this->is_shipment_to_parcel_locker() ) {
$parcel->template = $this->size_to_template( $this->get_meta( self::META_PACZKOMAT_SIZE ) );
} elseif ( $this->get_service() == 'inpost_letter_allegro' ) {
$parcel->template = 'letter_a';
} else {
$parcel->dimensions = new stdClass();
$parcel->dimensions->unit = 'mm';
$parcel->dimensions->width = $this->get_meta( '_paczkomat_width' );
$parcel->dimensions->length = $this->get_meta( '_paczkomat_length' );
$parcel->dimensions->height = $this->get_meta( '_paczkomat_height' );
$parcel->weight = new stdClass();
$parcel->weight->amount = $this->get_meta( '_paczkomat_weight' );
$parcel->weight->unit = 'kg';
}
$shipment_data->parcels = [];
$shipment_data->parcels[] = $parcel;
return $shipment_data;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_receiver_to_shipment( $shipment_data ) {
$order = $this->get_order();
$receiver = new stdClass();
if ( ! $this->is_shipment_to_parcel_locker() ) {
$address = trim( wpdesk_get_order_meta( $order, '_shipping_address_1',
true ) . ' ' . wpdesk_get_order_meta( $order, '_shipping_address_2', true ) );
$address_2 = trim( substr( $address, strripos( $address, ' ' ) ) );
$address_1 = trim( substr( $address, 0, strripos( $address, ' ' ) ) );
if ( $address_1 == '' ) {
$address_1 = $address_2;
$address_2 = '';
}
$receiver_address = new stdClass();
$receiver_address->street = $address_1;
$receiver_address->building_number = $address_2;
$receiver_address->city = wpdesk_get_order_meta( $order, '_shipping_city', true );
$receiver_address->post_code = wpdesk_get_order_meta( $order, '_shipping_postcode', true );
$receiver_address->country_code = wpdesk_get_order_meta( $order, '_shipping_country', true );
$receiver->address = $receiver_address;
$receiver->company_name = wpdesk_get_order_meta( $order, '_shipping_company', true );
$receiver->first_name = wpdesk_get_order_meta( $order, '_shipping_first_name', true );
$receiver->last_name = wpdesk_get_order_meta( $order, '_shipping_last_name', true );
}
$receiver->email = wpdesk_get_order_meta( $order, '_billing_email', true );
$receiver->phone = $this->format_phone_number( $this->get_phone_from_order( $order ), true );
$shipment_data->receiver = $receiver;
return $shipment_data;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_sender_to_shipment( $shipment_data ) {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
if ( $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_DATA, $paczkomaty_shipping_method::FROM_ORGANIZATION ) === $paczkomaty_shipping_method::CUSTOM ) {
$shipment_data->sender = new stdClass();
$shipment_data->sender->address = new stdClass();
$shipment_data->sender->address->street = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_STREET, '' );
$shipment_data->sender->address->building_number = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_BUILDING_NUMBER, '' );
$shipment_data->sender->address->city = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_CITY, '' );
$shipment_data->sender->address->post_code = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_POSTCODE, '' );
$shipment_data->sender->company_name = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_COMPANY_NAME, '' );
$shipment_data->sender->email = $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_EMAIL, '' );
$shipment_data->sender->phone = $this->format_phone_number( $paczkomaty_shipping_method->get_option( $paczkomaty_shipping_method::SENDER_PHONE, '' ), true );
}
return $shipment_data;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_reference_to_shipment( $shipment_data ) {
$shipment_data->reference = $this->get_meta( '_paczkomat_customer_ref' );
return $shipment_data;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_custom_attributes_to_shipment( $shipment_data ) {
$shipment_data->custom_attributes = new stdClass();
return $shipment_data;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_sending_method_to_shipment( $shipment_data ) {
$shipment_data->custom_attributes->sending_method = $this->get_meta( '_paczkomat_sending_method' );
if ( $this->get_meta( '_paczkomat_sending_method' ) == 'parcel_locker' ) {
$drop_off_point = $this->get_meta( '_paczkomat_dropoff_parcel_machine' );
if ( empty( $drop_off_point ) ) {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$drop_off_point = $paczkomaty_shipping_method->get_option( 'default_parcel_locker' );
}
$shipment_data->custom_attributes->dropoff_point = $drop_off_point;
}
$shipment_data->sending_method = $this->get_meta( '_paczkomat_sending_method' );
return $shipment_data;
}
/**
* Is shipment to parcel locker.
*
* @return bool
*/
private function is_shipment_to_parcel_locker() {
return $this->get_service() === self::INPOST_LOCKER_STANDARD || $this->get_service() === self::INPOST_LOCKER_ALLEGRO;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_target_point_to_shipment( $shipment_data ) {
if ( $this->is_shipment_to_parcel_locker() ) {
$shipment_data->custom_attributes->target_point = $this->get_meta( '_paczkomat_id' );
}
return $shipment_data;
}
/**
* @return bool
*/
public function is_insurance_available() {
$available = true;
return $available;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_insurance_to_shipment( $shipment_data ) {
if ( $this->is_insurance_available() ) {
if ( $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE, '0' ) == '1' ) {
$order = $this->get_order();
$shipment_data->insurance = new stdClass();
$shipment_data->insurance->amount = $this->get_meta( self::META_PACZKOMAT_UBEZPIECZENIE_AMOUNT );
$shipment_data->insurance->currency = wpdesk_get_order_meta( $order, '_order_currency', true );
}
}
return $shipment_data;
}
/**
* @return bool
*/
public function is_cod_available() {
$available = true;
return $available;
}
/**
* @param stdClass $shipment_data
*
* @return stdClass
*/
public function add_cod_to_shipment( $shipment_data ) {
if ( $this->is_cod_available() ) {
if ( $this->get_meta( '_paczkomat_cod', '0' ) == '1' ) {
$order = $this->get_order();
$shipment_data->cod = new stdClass();
$shipment_data->cod->amount = $this->get_meta( '_paczkomat_cod_amount' );
$shipment_data->cod->currency = wpdesk_get_order_meta( $order, '_order_currency', true );
}
}
return $shipment_data;
}
/**
* @param stdClass $shipment_data
* @param bool $allegro
*
* @return stdClass
*/
public function add_allegro_shipment( $shipment_data, $allegro ) {
if ( $allegro ) {
$order = $this->get_order();
$_allegro_journal_deal = wpdesk_get_order_meta( $order, '_allegro_journal_deal', true );
$_allegro_tansaction_id = wpdesk_get_order_meta( $order, '_allegro_tansaction_id', true );
if ( $_allegro_journal_deal != '' && $_allegro_tansaction_id != '' ) {
$shipment_data->custom_attributes->allegro_user_id = $_allegro_journal_deal->dealSellerId;
$shipment_data->custom_attributes->allegro_transaction_id = $_allegro_tansaction_id;
}
}
return $shipment_data;
}
/**
* @param $size
*
* @return mixed
*/
private function size_to_template( $size ) {
return $this->packege_templates[ $size ];
}
/**
* @return string
*/
private function get_service() {
$service = self::INPOST_LOCKER_STANDARD;
if ( $this->get_meta( '_paczkomaty_usluga', 'paczkomaty' ) == 'allegro_paczkomaty' ) {
$service = self::INPOST_LOCKER_ALLEGRO;
}
if ( $this->get_meta( '_paczkomaty_usluga', 'paczkomaty' ) == self::SERVICE_KURIER ) {
$service = $this->get_meta( self::COURIER_SERVICE, 'inpost_courier_standard' );
}
if ( $this->get_meta( '_paczkomaty_usluga', 'paczkomaty' ) == 'allegro_kurier' ) {
$service = 'inpost_courier_allegro';
}
if ( $this->get_meta( '_paczkomaty_usluga', 'paczkomaty' ) == 'allegro_polecony' ) {
$service = 'inpost_letter_allegro';
}
return $service;
}
/**
* @return WPDesk_Paczkomaty_ShipX
*/
public function get_shipX() {
if ( $this->ship_x == null ) {
$paczkomaty_shipping_method = $this->get_paczkomaty_shipping_method();
$test_mode = true;
if ( $paczkomaty_shipping_method->get_option( 'test_mode', '' ) != 'yes' ) {
$test_mode = false;
}
$organization_id = $paczkomaty_shipping_method->get_option( 'organization_id', '' );
$this->ship_x = new WPDesk_Paczkomaty_ShipX( $paczkomaty_shipping_method->get_option( 'token', '' ), $paczkomaty_shipping_method->get_option( 'token_test_mode', '' ), $test_mode );
$this->ship_x->set_organization_id( $organization_id );
}
return $this->ship_x;
}
/**
*
*/
private function add_order_note_tracking_id() {
if ( $this->get_meta( self::META_ORDER_NOTE_TRACKING_ID, '' ) !== $this->get_tracking_number() ) {
$order = $this->get_order();
$order->add_order_note(
sprintf( __( 'Do zamówienia została utworzona przesyłka %s InPost. Link do śledzenia przesyłki: %s', 'woocommerce-paczkomaty-inpost' ), $this->get_tracking_number(), $this->get_tracking_url() ),
$this->is_allegro_order() ? 0 : 1
);
$this->set_meta( self::META_ORDER_NOTE_TRACKING_ID, $this->get_tracking_number() );
}
}
/**
* @return bool
*/
private function is_allegro_order() {
return $this->get_order()->get_meta( '_allegro_journal_deal', true ) !== '';
}
/**
*
*/
public function admin_add_shipment() {
$this->set_meta( '_paczkomaty_usluga', 'paczkomaty' );
$this->set_meta( '_paczkomat_weight', ( new WooCommerce_Order_Weight_Calculator( $this->get_order() ) )->get_order_weight_kg() );
}
/**
* Compatibility with XML API for:
* _sending_method
*
* @param string $meta_key
* @param null $default
*
* @return array|mixed|null|string
*/
public function get_meta( $meta_key = '', $default = null ) {
$meta_value = parent::get_meta( $meta_key, $default );
if ( $meta_key == '_paczkomat_sending_method' && empty( $meta_value ) ) {
$paczkomaty_how_to_give = $this->get_meta( '_paczkomat_how_to_give', '' );
if ( $paczkomaty_how_to_give == '1' ) {
$meta_value = 'parcel_locker';
}
if ( $paczkomaty_how_to_give == '3' ) {
$meta_value = 'dispatch_order';
}
}
return $meta_value;
}
/**
* @return WC_Paczkomaty_Shipping_Method
*/
public function get_paczkomaty_shipping_method(): WC_Paczkomaty_Shipping_Method {
$all_shipping_methods = WC()->shipping()->get_shipping_methods();
return $all_shipping_methods['paczkomaty_shipping_method'] ?? new WC_Paczkomaty_Shipping_Method();
}
/**
* @param string $phone_number
*
* @return string
*/
public function format_phone_number( $phone_number ) {
$phone_number = str_replace( [ ' ', '-', '*' ], '', $phone_number );
if ( strpos( $phone_number, '+48' ) === 0 ) {
$phone_number = substr( $phone_number, 3 );
}
if ( strpos( $phone_number, '0' ) === 0 ) {
$phone_number = substr( $phone_number, 1 );
}
return $phone_number;
}
/**
* @param WC_Order $order
*
* @return string|null
*/
private function get_phone_from_order( $order ): ?string {
return ! empty( $order->get_shipping_phone() ) ? $order->get_shipping_phone() : $order->get_billing_phone();
}
}
}