Skip to content

Commit

Permalink
Merge pull request #70 from dpdconnect/1.4.5
Browse files Browse the repository at this point in the history
1.4.5
  • Loading branch information
dpdplugin committed Jan 18, 2024
2 parents 1e85ed0 + aa790cf commit 0dd68cb
Show file tree
Hide file tree
Showing 26 changed files with 279 additions and 122 deletions.
4 changes: 2 additions & 2 deletions classes/Connect/Product.php
Expand Up @@ -19,13 +19,13 @@ public function getList()
try {
$products = $this->client->getProduct()->getList();

if(!is_array($products)) {
if(!is_array($products)) {
return [];
}

$products[] = [
'name'=>'DPD Return',
'description'=>'Added by plugin',
'description'=>'Return label',
'code'=>'RETURN',
'additionalService'=>false,
'type'=>'predict',
Expand Down
7 changes: 4 additions & 3 deletions classes/Connect/Shipment.php
Expand Up @@ -19,9 +19,9 @@

class Shipment extends Connection
{
private $batch;

private $label;
private Job $job;
private Batch $batch;
private Label $label;

public function __construct()
{
Expand All @@ -42,6 +42,7 @@ public function create($shipments, $map, $type = ParcelType::TYPEREGULAR)

$request['shipments'] = $shipments;


try {
$labels = $this->client->getShipment()->create($request);
if ($labels->getStatus() >= 300) {
Expand Down
3 changes: 2 additions & 1 deletion classes/Database/Label.php
Expand Up @@ -4,7 +4,8 @@

class Label
{
private $db;
private \wpdb $db;
private string $table;

public function __construct()
{
Expand Down
11 changes: 7 additions & 4 deletions classes/FreshFreezeHelper.php
Expand Up @@ -21,7 +21,7 @@ public static function checkOrdersContainFreshFreezeItems(array $orders)
/** @var \WC_Order $order */
foreach ($orders as $order) {
foreach ($order->get_items() as $orderItem) {
$shippingProduct = get_post_meta($orderItem->get_product()->get_id(), 'dpd_shipping_product', true);
$shippingProduct = wc_get_product($orderItem->get_product()->get_id())->get_meta('dpd_shipping_product');

if ($shippingProduct === TypeHelper::DPD_SHIPPING_PRODUCT_FRESH || $shippingProduct === TypeHelper::DPD_SHIPPING_PRODUCT_FREEZE) {
return true;
Expand All @@ -32,12 +32,15 @@ public static function checkOrdersContainFreshFreezeItems(array $orders)
return false;
}

/**
* @param \WC_Order[] $orders
* @return array
*/
public static function groupOrderItemsByShippingProduct(array $orders)
{
$groupedOrderItems = [];

foreach ($orders as $order) {
/** @var \WC_Order_Item $orderItem */
foreach ($order->get_items() as $orderItem) {
/** @var \WC_Product $product */
$product = $orderItem->get_product();
Expand All @@ -46,7 +49,7 @@ public static function groupOrderItemsByShippingProduct(array $orders)
continue;
}

$shippingProduct = get_post_meta($product->get_id(), 'dpd_shipping_product', true);
$shippingProduct = wc_get_product($product->get_id())->get_meta('dpd_shipping_product');
if($shippingProduct == '') {
$shippingProduct = 'default';
}
Expand All @@ -56,4 +59,4 @@ public static function groupOrderItemsByShippingProduct(array $orders)

return $groupedOrderItems;
}
}
}
2 changes: 1 addition & 1 deletion classes/Handlers/Callback.php
Expand Up @@ -84,7 +84,7 @@ private static function success($incomingData)

$order = wc_get_order($orderId);

add_post_meta($orderId, 'dpd_tracking_numbers', $incomingData['shipment']['trackingInfo']['parcelNumbers']);
$order->add_meta_data('dpd_tracking_numbers', $incomingData['shipment']['trackingInfo']['parcelNumbers']);

if ('enabled' == Option::sendTrackingEmail() && $order && $jobStatus === JobStatus::STATUSQUEUED) {
self::sendMail($order, $incomingData['shipment']);
Expand Down
17 changes: 11 additions & 6 deletions classes/Handlers/DownloadLabelBox.php
Expand Up @@ -2,6 +2,7 @@

namespace DpdConnect\classes\Handlers;

use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
use DpdConnect\classes\Database\Label;
use DpdConnect\classes\enums\ParcelType;

Expand All @@ -14,15 +15,19 @@ public static function handle()

public static function add()
{
add_meta_box('dpdconnect_pdf', __('DPD Connect Download Labels', 'dpdconnect'), [self::class, 'render'], 'shop_order', 'side', 'high');
$screen = wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled()
? wc_get_page_screen_id( 'shop-order' )
: 'shop_order';

add_meta_box('dpdconnect_pdf', __('DPD Connect Download Labels', 'dpdconnect'), [self::class, 'render'], $screen, 'side', 'high');
}

public static function render()
/**
* @param \WC_Order $order
* @return void
*/
public static function render($order)
{
global $post;

$order = wc_get_order($post->ID);

$labelRepo = new Label();
$shippingLabels = $labelRepo->getByOrderId($order->get_id(), ParcelType::TYPEREGULAR, true);
$returnLabels = $labelRepo->getByOrderId($order->get_id(), ParcelType::TYPERETURN, true);
Expand Down
9 changes: 6 additions & 3 deletions classes/Handlers/GenerateLabelBox.php
Expand Up @@ -2,9 +2,8 @@

namespace DpdConnect\classes\Handlers;

use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
use DpdConnect\classes\Connect\Product;
use WC_Order;
use DpdConnect\classes\Handlers\LabelRequest;

class GenerateLabelBox
{
Expand All @@ -16,11 +15,15 @@ public static function handle()

public static function add()
{
$screen = wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled()
? wc_get_page_screen_id( 'shop-order' )
: 'shop_order';

add_meta_box(
'meta-box-id',
__('DPD Connect Generate Labels', 'dpdconnect'),
[self::class, 'render'],
'shop_order',
$screen,
'side',
'high'
);
Expand Down
28 changes: 20 additions & 8 deletions classes/Handlers/LabelRequest.php
Expand Up @@ -2,6 +2,7 @@

namespace DpdConnect\classes\Handlers;

use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
use DpdConnect\classes\Connect\Product;
use DpdConnect\classes\FreshFreezeHelper;
use DpdConnect\classes\producttypes\Fresh;
Expand All @@ -23,12 +24,15 @@ class LabelRequest
{
public static function handle()
{
// For old WooCommerce versions
add_filter('handle_bulk_actions-edit-shop_order', [self::class, 'bulk'], 10, 3);
// For new WooCommerce versions
add_filter('handle_bulk_actions-woocommerce_page_wc-orders', [self::class, 'bulk'], 10, 3);
}

public static function single($postID, $type, $parcelCount, $freshFreezeData = [])
{
$currentOrder = new WC_Order($postID);
$currentOrder = wc_get_order($postID);
$orderId = $currentOrder->get_id();

$validator = new OrderValidator();
Expand Down Expand Up @@ -79,22 +83,26 @@ public static function single($postID, $type, $parcelCount, $freshFreezeData = [
}
}

$parcelType = (strpos($type, 'dpdconnect_create') != false) ? ParcelType::TYPERETURN : ParcelType::TYPEREGULAR;
$parcelType = str_contains(strtolower($type), 'return') ? ParcelType::TYPERETURN : ParcelType::TYPEREGULAR;
$response = self::syncRequest($shipments, $map, $parcelType);
$labelResponses = $response->getContent()['labelResponses'];
$labelContents = current($labelResponses)['label'];
$code = $response->getContent()['labelResponses'][0]['shipmentIdentifier'];

if (count($response->getContent()['labelResponses']) > 1) {

return Download::zip($response);
}


foreach ($labelResponses as $labelResponse) {
if (isset($emailData[$labelResponse['orderId']])) {
$emailData[$labelResponse['orderId']]['parcelNumbers'] = $labelResponse['parcelNumbers'];
}
add_post_meta($labelResponse['orderId'], 'dpd_tracking_numbers', $labelResponse['parcelNumbers']);


$order = wc_get_order($labelResponse['orderId']);
$order->add_meta_data('dpd_tracking_numbers', $labelResponse['parcelNumbers']);
// $order->save(); This creates an infinite loop which causes infinite labels to be created for some reason, but the metadata is still saved correctly
}

if ('enabled' == Option::sendTrackingEmail()) {
Expand Down Expand Up @@ -122,7 +130,7 @@ public static function bulk($redirect_to, $action, $post_ids, $freshFreezeData =
}
}

$type = (strpos($action, 'dpdconnect_create') != false) ? ParcelType::TYPERETURN : ParcelType::TYPEREGULAR;
$type = str_contains(strtolower($action), 'return') ? ParcelType::TYPERETURN : ParcelType::TYPEREGULAR;

$orderValidator = new OrderValidator();
$orderTransformer = new OrderTransformer($orderValidator);
Expand Down Expand Up @@ -173,7 +181,10 @@ public static function bulk($redirect_to, $action, $post_ids, $freshFreezeData =
if (isset($emailData[$labelResponse['orderId']])) {
$emailData[$labelResponse['orderId']]['parcelNumbers'] = $labelResponse['parcelNumbers'];
}
add_post_meta($labelResponse['orderId'], 'dpd_tracking_numbers', $labelResponse['parcelNumbers']);

$order = wc_get_order($labelResponse['orderId']);
$order->add_meta_data('dpd_tracking_numbers', $labelResponse['parcelNumbers']);
// $order->save(); This creates an infinite loop which causes infinite labels to be created for some reason, but the metadata is still saved correctly
}

if ('enabled' == Option::sendTrackingEmail()) {
Expand Down Expand Up @@ -262,7 +273,8 @@ private static function getDpdProduct($type, $orderId)
foreach ($shippingMethods as $method) {
$settings = get_option('woocommerce_'.$method->get_method_id().'_'.$method->get_instance_id().'_settings');
if(!isset($settings['dpd_method_type'])) {
if(get_post_meta($orderId, '_dpd_parcelshop_id', true)) {
if (wc_get_order($orderId)->get_meta('_dpd_parcelshop_id')) {

return $product->getAllowedProductsByType(Parcelshop::getProductType())[0];
}
Notice::add(__('Shipping method has no DPD type'));
Expand All @@ -288,7 +300,7 @@ private static function getDpdProduct($type, $orderId)

// Check if a Parcelshop shipping method is used for this order
if ($dpdProduct['type'] === Parcelshop::getProductType()) {
if (!get_post_meta($orderId, '_dpd_parcelshop_id', true)) {
if (!wc_get_order($orderId)->get_meta('_dpd_parcelshop_id')) {
Notice::add(__('No ParcelShop shipping method was used for this order'));
self::redirect();
}
Expand Down
55 changes: 44 additions & 11 deletions classes/Handlers/OrderColumn.php
Expand Up @@ -11,8 +11,12 @@ class OrderColumn
{
public static function handle()
{
// For old WooCommerce versions
add_filter('manage_edit-shop_order_columns', [self::class, 'add']);
add_action('manage_shop_order_posts_custom_column', [self::class, 'render']);
// For new WooCommerce versions
add_filter('manage_woocommerce_page_wc-orders_columns', [self::class, 'add']);
add_action('manage_woocommerce_page_wc-orders_custom_column', [self::class, 'render'], 10, 2);
}

public static function add($columns)
Expand All @@ -24,36 +28,57 @@ public static function add($columns)
return $columns;
}

public static function render($column)
public static function render($column, ?\WC_Order $order = null)
{
global $post;

$order = wc_get_order($post->ID);
if (null !== $post) {
// For old WooCommerce versions
$order = wc_get_order($post->ID);
}

$column === 'dpdconnect_shipping_label' ? self::columnShippingLabel($order) : null;
$column === 'dpdconnect_return_label' ? self::columnReturnLabel($order) : null;
$column === 'dpdconnect_tracking_number' ? self::columnTrackingNumber($order) : null;
}

private static function columnTrackingNumber($order)
/**
* @param \WC_Order $order
* @return void
*/
private static function columnTrackingNumber($order): void
{
$trackingCodes = get_post_meta($order->get_id(), 'dpd_tracking_numbers');
if(empty($trackingCodes)) {
$labelRepo = new Label();
$shippingLabels = $labelRepo->getByOrderId($order->get_id(), ParcelType::TYPEREGULAR, true);

if (true === empty($shippingLabels)) {
echo '-';
return;
}

foreach ($trackingCodes as $trackingCode) {
// Only get the first 3 results if there are more than 3
if (count($shippingLabels) > 3) {
$shippingLabels = array_slice($shippingLabels, 0, 3);
}

echo '<a target="_blank" href="https://www.dpdgroup.com/nl/mydpd/my-parcels/track?lang=en&parcelNumber=' . $trackingCode[0] . '" title="' . __('Tracking numbers', 'dpdconnect') . '"><span>' . $trackingCode[0] . '</span></a><br/>';
foreach ($shippingLabels as $shippingLabel) {
$parcelNumbers = explode(',', $shippingLabel['parcel_numbers']);
$parcelNumber = $parcelNumbers[0];

echo '<a target="_blank" href="https://www.dpdgroup.com/nl/mydpd/my-parcels/track?lang=en&parcelNumber=' . $parcelNumber . '" title="' . __('Tracking numbers', 'dpdconnect') . '"><span>' . $parcelNumber . '</span></a><br/>';
}
}

/**
* @param \WC_Order $order
* @return void
*/
private static function columnShippingLabel($order)
{
$jobRepo = new Job();
$job = $jobRepo->getByOrderId($order->get_id(), ParcelType::TYPEREGULAR);

if(!empty($job)) {
if (false === empty($job)) {
$jobId = $job['id'];
$status = $job['status'];

Expand All @@ -74,24 +99,30 @@ private static function columnShippingLabel($order)
admin_url()
);
echo '<a href="' . $shippingUrl . '" title="' . __('Download PDF Label', 'dpdconnect') . '"><span class="dpdTag">' . __('PDF', 'dpdconnect') . '</span></a>';
} else {
echo '-';
}

}

/**
* @param \WC_Order $order
* @return void
*/
private static function columnReturnLabel($order)
{

$jobRepo = new Job();
$job = $jobRepo->getByOrderId($order->get_id(), ParcelType::TYPERETURN);

if(!empty($job)) {
if (false === empty($job)) {
$jobId = $job['id'];
$status = $job['status'];

echo '<a href="' . admin_url() . 'admin.php?page=dpdconnect-job-details&jobId=' . $jobId . '" title="' . __('View job', 'dpdconnect') . '">' . JobStatus::tag($status) . '</a>';
}

$labelRepo = new Label();
$returnLabel = $labelRepo->getByOrderId($order->get_id(), ParcelType::TYPERETURN);
$returnLabel = $labelRepo->getByOrderId($order->get_id(), ParcelType::TYPERETURN, true);

if ($returnLabel) {
$returnId = $returnLabel['id'];
Expand All @@ -104,6 +135,8 @@ private static function columnReturnLabel($order)
admin_url()
);
echo '<a href="' . $returnUrl . '" title="' . __('Download PDF Label', 'dpdconnect') . '"><span class="dpdTag">' . __('PDF', 'dpdconnect') . '</span></a>';
} else {
echo '-';
}
}
}

0 comments on commit 0dd68cb

Please sign in to comment.