['Authorization'=>'Bearer '.$c['key']],'timeout'=>15,'redirection'=>0,'sslverify'=>true]); if(is_wp_error($r)||wp_remote_retrieve_response_code($r)!==200)return new WP_Error('unavailable','Τα στοιχεία διαχείρισης δεν είναι διαθέσιμα.'); $d=json_decode(wp_remote_retrieve_body($r),true);if(!is_array($d)||!isset($d['settings'],$d['summary']))return new WP_Error('invalid_response','Δεν επαληθεύτηκε η σύνδεση.');courierapp_compat_set_transient($cache,$d,60);return $d; } function courierapp_connect_workflow_panel(){ if(!current_user_can('manage_woocommerce'))return;$d=courierapp_connect_operations(); courierapp_connect_marketing_options();echo '

Υπόλοιπα & αυτοματισμοί καταστήματος

'; if(!is_wp_error($d)){$s=$d['summary'];echo '

Email μήνα: '.esc_html((string)$s['emails']['sent']).' / '.esc_html((string)$s['emails']['limit']).' · Διαθέσιμα: '.esc_html((string)$s['emails']['remaining']).'

Διαθέσιμο SMS: '.esc_html((string)floor($s['sms']['balance_micros']/120000)).' · Υποβληθέντα μήνα: '.esc_html((string)$s['sms']['sent']).'

';}else echo '

'.esc_html($d->get_error_message()).'

'; echo '

Κείμενα email / SMS και στάδια παραγγελιών

Οι ρυθμίσεις ανήκουν στον δικό σου λογαριασμό και κατάστημα. Η δημιουργία ετικέτας δεν σημαίνει παραλαβή.

'; } function courierapp_connect_sync_order_state($order){ if($order->has_status(['cancelled','refunded','failed','completed']))return; $cod=$order->get_payment_method()==='cod'; if(!$order->is_paid()&&!$cod)return; $d=courierapp_connect_operations();if(is_wp_error($d)||empty($d['settings']['config']['order_sync']['enabled']))return; $last=courierapp_compat_get_meta($order,'_courierapp_automatic_order_status'); if(($last&&$order->get_status()!==$last)||(!$last&&!$order->has_status($cod?['processing','on-hold']:'processing')))return; $stages=[];foreach($order->get_items('shipping') as $item){if($item->get_method_id()!=='courierapp_connect')return;$t=courierapp_compat_get_meta($item,'_courierapp_tracking');$stage=is_array($t)?str_replace('-','_',strtolower($t['stage']??'')):''; if($stage&&(($t['physical_scan']??null)!==true||empty($t['updated_at'])||!strtotime($t['updated_at'])||strtotime($t['updated_at'])>time()+60))return; if(in_array($stage,['in_transit','transit','picked_up','collected','pickup'],true))$stage='in_transit'; if($stage===''&&courierapp_compat_get_meta($item,'_courierapp_status')==='label_ready')$stage='label_ready'; if(!in_array($stage,['label_ready','in_transit','out_for_delivery','delivered','exception','returned'],true))return;$stages[]=$stage; } if(!$stages)return; // Completion requires every shipping item to be delivered. Never regress a terminal order. // Mixed labels/physical scans must not mark the whole order as in transit. if(count(array_unique($stages))>1&&in_array('label_ready',$stages,true))return; $stage=count(array_unique($stages))===1?$stages[0]:(in_array('exception',$stages,true)?'exception':(in_array('returned',$stages,true)?'returned':'in_transit')); $target=$d['settings']['config']['order_sync']['woocommerce'][$stage]??''; if($cod&&!$order->is_paid()&&$target==='completed')$target='cacn-cod-pending'; if(!$target||!isset(wc_get_order_statuses()['wc-'.$target])||in_array($target,['pending','failed','cancelled','refunded','on-hold'],true)||($target==='completed'&&count(array_filter($stages,fn($s)=>$s==='delivered'))!==count($stages)))return; $previous=courierapp_compat_get_meta($order,'_courierapp_automatic_stage');$ranks=['label_ready'=>0,'in_transit'=>1,'out_for_delivery'=>2,'delivered'=>3]; if(isset($ranks[$previous],$ranks[$stage])&&$ranks[$stage]<$ranks[$previous])return; if(!$order->has_status($target)){ // Only suppress Woo's duplicate customer notices during this automatic transition. $suppress=static function($enabled,$email_order)use($order){return $email_order&&$email_order->get_id()===$order->get_id()?false:$enabled;}; $custom=!empty($d['settings']['config']['enabled']); if($custom)foreach(['customer_processing_order','customer_completed_order'] as $kind)add_filter('woocommerce_email_enabled_'.$kind,$suppress,999,2); try{$order->update_status($target,'CourierAPP: verified shipment stage '.$stage,true);$order->update_meta_data('_courierapp_automatic_order_status',$target);$order->update_meta_data('_courierapp_automatic_stage',$stage);$order->save();} finally{if($custom)foreach(['customer_processing_order','customer_completed_order'] as $kind)remove_filter('woocommerce_email_enabled_'.$kind,$suppress,999);} } }