gruene-seele/dev/partnercenter-api/admin/post-list.php
Kevin Adametz 0c8d321f66 Warenwirtschaft: AP-38 — ERP-/Connector-Status-Mapping vervollständigt
Die orange Ampel bei abgeschlossenen Bestellungen ist KEIN ERP-Fehler: der
Endpoint /api/wp/status liefert für versendete Bestellungen bereits sent/close
(Live-DB: 111× shipped=2, 1× shipped=3). Ursache liegt shopseitig (Cron/Auth) —
wird per SSH geprüft. Unabhängig davon die latenten Mapping-Lücken geschlossen:

ERP (ShoppingOrder::$apiShippedTypes):
- Status 5 (Wartestellung) fehlte und lieferte den Default 'free' (im Shop gar
  kein Licht). Jetzt 5 => 'process' (Shop-Ampel orange = in Bearbeitung).

Connector (partnercenter-api, Teil von v1.6.0 — noch nicht ausgerollt):
- admin/post-list.php: Ampel-Switch deckt jetzt 'pick_up' (Abholung ⇒ grün) und
  'cancel' (storniert ⇒ neue rote Kugel) ab; vorher fielen beide auf ⚠️.
- woocommerce/order-status.php: 'pick_up' und 'cancel' gelten jetzt als
  Endzustände und fallen aus der stündlichen Nachfrage-Liste
  (_partnercenter_api_unclear_order_ids) — vorher wurden 12 stornierte
  Bestellungen dauerhaft weiter gepollt.

Test: AP-38-Mapping prüft alle shipped-Werte (kein stiller 'free'-Fallback mehr).
Suite 338 grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-28 11:01:25 +00:00

146 lines
3.3 KiB
PHP

<?php
/*
* Add to Post List Class
*/
if (! defined('ABSPATH')) {
exit;
}
class PARTNERCENTER_API_Order_Post_List_Class
{
/**
* PARTNERCENTER_API_Order_Post_List_Class constructor.
*/
public function __construct()
{
// Add custom column
add_filter('manage_edit-shop_order_columns', [$this, 'manage_edit_shop_order_columns'], 20);
// Fill the column
add_action('manage_shop_order_posts_custom_column', [
$this,
'manage_shop_order_posts_custom_column',
], 20, 2);
// Style custom column
add_action('admin_print_styles', [$this, 'admin_print_styles'], 20);
}
/**
* Add custom column.
*
*
* @return array
*
* @since 1.0.0
*/
public function manage_edit_shop_order_columns(array $columns)
{
$new_columns = [];
foreach ($columns as $column_name => $column_info) {
$new_columns[$column_name] = $column_info;
if ($column_name === 'order_status') {
$new_columns['partnercenter-status'] = __('PARTNERCENTER Status', 'partnercenter-api');
}
}
return $new_columns;
}
/**
* Add content to custom column.
*
* @param int $order_id
*
* @since 1.0.0
*/
public function manage_shop_order_posts_custom_column(string $column, $order_id)
{
// Check if our column is worked on
if ($column !== 'partnercenter-status') {
return;
}
// Check if order was send to PARTNERCENTER
$forwarded = intval(get_post_meta($order_id, '_partnercenter_api_order_fulfillment_forwarded', true));
if ($forwarded === 0) {
return;
}
// Display the status from DB?>
<?php
switch (get_post_meta($order_id, '_partnercenter_api_order_status', true)) {
case 'free':
break;
case 'sent':
case 'close':
case 'pick_up': // AP-38: Abholung = erfüllt ⇒ grün
?>
<div class="partnercenter-status-circle green"></div>
<?php
break;
case 'open':
case 'process': ?>
<div class="partnercenter-status-circle orange"></div>
<?php
break;
case 'cancel': // AP-38: storniert ⇒ rot
?>
<div class="partnercenter-status-circle red"></div>
<?php
break;
default: ?>
<span style="font-size: 200%">
<?php _e('⚠️', 'partnercenter-api'); ?>
</span>
<?php break;
} ?>
<?php }
/**
* Style custom column.
*/
public function admin_print_styles()
{
// Get the screen
if (get_current_screen()->id !== 'edit-shop_order') {
return;
} ?>
<style type="text/css">
th.column-partnercenter-status {
text-align: center;
}
.partnercenter-status-circle {
width: 25px;
height: 25px;
border-radius: 100%;
background: darkorange;
margin: 0 auto;
}
.partnercenter-status-circle.green {
background: limegreen;
}
.partnercenter-status-circle.red {
background: crimson;
}
</style>
<?php }
}
new PARTNERCENTER_API_Order_Post_List_Class;