get_payment_method()!=='cod' || $order->is_paid() || !$order->has_status(['processing','on-hold']))return null; if($order->get_currency()!=='EUR' || (float)$order->get_total_refunded()>0)return null; $items=$order->get_items('shipping');if(count($items)!==1)return null; $item=reset($items);if($item->get_method_id()!=='courierapp_connect'||courierapp_compat_get_meta($item,'_courierapp_carrier')!=='couriercenter')return null; $cod=courierapp_compat_get_meta($item,'_courierapp_cod');$request=courierapp_compat_get_meta($item,'_courierapp_request'); if(!is_array($cod)||empty($cod['enabled'])||empty($cod['fee_included'])||!is_array($request)||count($request['packages']??[])!==1||($request['destination']['country']??'')!=='GR')return null; $text=(string)$order->get_total();if(!preg_match('/^\d{1,8}(?:\.\d{1,2})?$/',$text))return null; $parts=explode('.',$text);$amount=(int)$parts[0]*100+(int)str_pad($parts[1]??'',2,'0'); if($amount<=0||$amount>(int)($cod['max_amount_cents']??0))return null; if(!class_exists('COURIERAPP_Connect_Shipping'))WC()->shipping(); if(!class_exists('COURIERAPP_Connect_Shipping'))return null; $method=new COURIERAPP_Connect_Shipping((int)courierapp_compat_get_meta($item,'_courierapp_instance_id')); if($method->get_option('cod_enabled','no')!=='yes')return null; return ['status'=>'pending','method'=>'cod','currency'=>'EUR','amount_cents'=>$amount,'reference'=>'wc-cod-'.$order->get_id()]; } function courierapp_connect_queue_cod($order_id) { $order=wc_get_order($order_id);if(!courierapp_connect_cod_payment($order))return; if(courierapp_connect_pilot_mode()&&courierapp_compat_get_meta($order,'_courierapp_pilot_order')!=='yes')return; if(function_exists('as_enqueue_async_action'))as_enqueue_async_action('courierapp_connect_paid_order',['order_id'=>$order_id],'courierapp',true); } add_action('woocommerce_order_status_processing','courierapp_connect_queue_cod'); add_action('woocommerce_order_status_on-hold','courierapp_connect_queue_cod'); add_action('woocommerce_checkout_order_processed','courierapp_connect_queue_cod'); add_action('woocommerce_store_api_checkout_order_processed',function($order){courierapp_connect_queue_cod($order->get_id());}); add_action('init',function(){ $args=['label'=>'Παραδόθηκε — αναμονή αντικαταβολής','public'=>true,'show_in_admin_all_list'=>true,'show_in_admin_status_list'=>true]; register_post_status('wc-cacn-cod-pending',$args); // Legacy status remains readable for orders created before 0.4.30 only. register_post_status('wc-ca-cod-delivered',$args); }); add_filter('wc_order_statuses',function($statuses){$statuses['wc-cacn-cod-pending']='Παραδόθηκε — αναμονή αντικαταβολής';return $statuses;}); // Keep other merchants' shipping/payment methods untouched. When CourierAPP is // selected, expose COD only for one explicitly opted-in Courier Center rate. add_filter('woocommerce_available_payment_gateways',function($gateways){ if(!isset($gateways['cod'])||!isset(WC()->session))return $gateways; $chosen=WC()->session->get('chosen_shipping_methods',[]);$selected=[];$uses_courierapp=false; foreach(WC()->shipping()->get_packages() as $n=>$package){ $rate=$package['rates'][$chosen[$n]??'']??null;if(!$rate)continue; $selected[]=$rate;if($rate->get_method_id()==='courierapp_connect')$uses_courierapp=true; } if(!$uses_courierapp)return $gateways; $allowed=count($selected)===1;$rate=$selected[0]??null;$meta=$rate?$rate->get_meta_data():[]; $cod=$meta['_courierapp_cod']??null; $allowed=$allowed&&($meta['_courierapp_carrier']??'')==='couriercenter'&&is_array($cod)&&!empty($cod['enabled'])&&!empty($cod['fee_included']); if($allowed){$method=new COURIERAPP_Connect_Shipping((int)($meta['_courierapp_instance_id']??0));$allowed=$method->get_option('cod_enabled','no')==='yes';} if($allowed&&isset(WC()->cart)){$amount=(int)round((float)WC()->cart->get_total('edit')*100);$allowed=$amount>0&&$amount<=(int)($cod['max_amount_cents']??0);} if(!$allowed)unset($gateways['cod']);return $gateways; }); add_action('woocommerce_admin_order_data_after_shipping_address',function($order){ if(!current_user_can('manage_woocommerce'))return; foreach($order->get_items('shipping') as $item){ $saved=courierapp_compat_get_meta($item,'_courierapp_shipment_request');$p=is_array($saved)?($saved['payment']??[]):[]; if(($p['method']??'')!=='cod')continue; echo '
CourierAPP αντικαταβολή: '.esc_html(number_format((int)$p['amount_cents']/100,2,',','.')).' €
Η παράδοση δεν επιβεβαιώνει την απόδοση χρημάτων από τον μεταφορέα.
Το ποσό της παραγγελίας έχει αλλάξει. Ελέγξτε την υπάρχουσα ετικέτα πριν παραδώσετε το δέμα.
'; } });