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

192 lines
7.4 KiB
PHP

<?php
/**
* @package PaczkomatyInpost
*/
/**
* Class WPDesk_Paczkomaty_Allegro
*/
class WPDesk_Paczkomaty_Allegro {
/**
* Default width/height/length
*/
const PACZKOMAT_DEFAULT_WHL = 300;
/**
* Plugin
*
* @var WPDesk_Paczkomaty_Plugin
*/
private $plugin;
/**
* @var array
*/
private $allegro_shipment_id_usluga = array(
'10022' => 'paczkomaty', // Paczkomaty 24/7.
'20022' => 'paczkomaty', // Paczkomaty 24/7 COD.
'10023' => 'allegro_paczkomaty', // Allegro Paczkomaty InPost.
'20023' => 'allegro_paczkomaty', // Allegro Paczkomaty InPost COD.
'16' => 'allegro_polecony', // Allegro miniKurier24 InPost.
'17' => 'allegro_kurier', // Allegro Kurier InPost.
'18' => 'allegro_kurier', // Allegro Kurier InPost COD.
'33' => 'kurier', // Kurier InPost.
'34' => 'kurier', // Kurier InPost COD.
'98f86f81-0018-41c5-ac83-073a56fc7021' => 'allegro_polecony', // Allegro miniKurier24 InPost COD.
);
/**
* @var array
*/
private $allegro_shipment_id_cod = array(
'20022', // Paczkomaty 24/7 COD.
'20023', // Allegro Paczkomaty InPost COD.
'18', // Allegro Kurier InPost COD.
'34', // Kurier InPost COD.
'98f86f81-0018-41c5-ac83-073a56fc7021', // Allegro miniKurier24 InPost COD.
);
/**
* WPDesk_Paczkomaty_Allegro constructor.
*
* @param WPDesk_Paczkomaty_Plugin $plugin Access to methods of plugin main class.
*/
public function __construct( WPDesk_Paczkomaty_Plugin $plugin ) {
$this->plugin = $plugin;
}
/**
* Hook various behaviors to filters and actions.
*/
public function hooks() {
add_action( 'paczkomaty_shipping_method_allegro_shipment', array( $this, 'paczkomaty_shipping_method_allegro_shipment' ), 10, 3 );
}
/**
* Creates shipment.
*
* @param WC_Order $order Class object.
* @param string $usluga Name of service.
*
* @return WPDesk_Flexible_Shipping_Shipment_Paczkomaty
*/
private function create_shipment( $order, $usluga ) {
$fs_method = array(
'method_integration' => 'paczkomaty',
'paczkomaty_usluga' => $usluga,
);
/** @var WPDesk_Flexible_Shipping_Shipment_Paczkomaty $shipment */
$shipment = fs_create_shipment( $order, $fs_method );
return $shipment;
}
/**
* Adds post_meta for the shipment.
*
* @param WPDesk_Flexible_Shipping_Shipment_Paczkomaty $shipment Class object.
* @param string $parcel_locker_name Name of parcel locker.
* @param WC_Paczkomaty_Shipping_Method $paczkomaty_shipping_method Class object.
*
* @return WPDesk_Flexible_Shipping_Shipment_Paczkomaty
*/
public function add_meta_for_paczkomaty( $shipment, $parcel_locker_name, $paczkomaty_shipping_method ) {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_ID, $parcel_locker_name );
if ( $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_DEFAULT_PACKAGE_SIZE, '' ) ) {
$shipment->set_meta( '_paczkomat_size', $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_DEFAULT_PACKAGE_SIZE, '' ) );
}
if ( $paczkomaty_shipping_method->get_parcel_lockers_api() == WC_Paczkomaty_Shipping_Method::API_TYPE_XML ) {
if ( $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_SELF_SEND, '' ) ) {
if ( $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_SELF_SEND, '' ) == '1' ) {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_SENDING_METHOD, WC_Paczkomaty_Shipping_Method::SENDING_METHOD_PARCEL_LOCKER );
}
if ( $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_SELF_SEND, '' ) == '3' ) {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_SENDING_METHOD, WC_Paczkomaty_Shipping_Method::SENDING_METHOD_DISPATCH_ORDER );
}
}
} else {
if ( $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_SENDING_METHOD, '' ) ) {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_SENDING_METHOD, $paczkomaty_shipping_method->get_option( WC_Paczkomaty_Shipping_Method::SETTING_SENDING_METHOD, '' ) );
}
}
return $shipment;
}
/**
* Add shipment - adds shipment for order from Allegro.
*
* @param WC_Order $order Order.
* @param string $allegro_shipment_id Allegro shipment ID.
* @param string $parcel_locker_name Parcel locker.
*/
public function paczkomaty_shipping_method_allegro_shipment( $order, $allegro_shipment_id, $parcel_locker_name ) {
$usluga = $this->allegro_shipment_id_usluga[ $allegro_shipment_id ];
$order->calculate_totals();
$shipment = $this->create_shipment( $order, $usluga );
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_KEY_PACZKOMATY_USLUGA, $usluga );
$paczkomaty_shipping_method = $this->plugin->get_paczkomaty_shipping_method();
if ( WC_Paczkomaty_Shipping_Method::USLUGA_PACZKOMATY === $usluga
|| WC_Paczkomaty_Shipping_Method::USLUGA_ALLEGRO_PACZKOMATY === $usluga
) {
$shipment = $this->add_meta_for_paczkomaty( $shipment, $parcel_locker_name, $paczkomaty_shipping_method );
}
if ( WC_Paczkomaty_Shipping_Method::USLUGA_KURIER === $usluga
|| WC_Paczkomaty_Shipping_Method::USLUGA_ALLEGRO_KURIER === $usluga
) {
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_WIDTH,
self::PACZKOMAT_DEFAULT_WHL
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_HEIGHT,
self::PACZKOMAT_DEFAULT_WHL
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_LENGTH,
self::PACZKOMAT_DEFAULT_WHL
);
}
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_DROPOFF_PARCEL_MACHINE,
$paczkomaty_shipping_method->get_option( 'default_parcel_locker' )
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_CUSTOMER_REF,
// Translators: order number.
sprintf( __( 'Zamówienie %s', 'woocommerce-paczkomaty-inpost' ), $shipment->get_order()->get_order_number() )
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_COD_AMOUNT,
$shipment->get_order()->get_total()
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_SENDING_METHOD,
$paczkomaty_shipping_method->get_option( 'sending_method', '' )
);
$shipment->set_meta(
WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_WEIGHT,
( new WooCommerce_Order_Weight_Calculator( $shipment->get_order() ) )->get_order_weight_kg()
);
if ( in_array( strval( $allegro_shipment_id ), $this->allegro_shipment_id_cod, true ) ) {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_COD, '1' );
} else {
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_PACZKOMAT_COD, '0' );
}
$shipment->set_meta( WPDesk_Flexible_Shipping_Shipment_Paczkomaty::META_FLEXIBLE_SHIPPING_STATUS, 'new' );
$shipment->save();
}
}