get_meta($saved_vat_field, true); if (is_string($billing_vat_number)) { $billing_vat_number = trim($billing_vat_number); } } else { // Fallback : utiliser la fonction helper pour gérer différentes variantes de clés $billing_vat_number = \ESI_PEPPOL\helpers\PEPPOL_Woo_Helper::esi_get_order_vat_number($order); } $vat_is_valid = (string) $order->get_meta('_vat_number_is_valid'); if ($billing_vat_number === '' || $vat_is_valid !== 'true') { return; } // Éviter les envois multiples si déjà traité $already_sent = $order->get_meta('_esi_peppol_sent_at'); if (!empty($already_sent)) { return; } // Construire le payload JSON à partir de la commande $payload = PEPPOL_peppol_controller::build_payload_from_order($order); /* echo '
';
print_r($payload);
echo '';
die(); */
// Appel API ESIPeppol + enregistrement dans la table custom
$result = PEPPOL_peppol_controller::upload_json($payload, $order_id);
// Mémoriser la date d'envoi, même en cas d'échec pour éviter les boucles
$order->update_meta_data('_esi_peppol_sent_at', \current_time('mysql'));
$order->update_meta_data('_esi_peppol_last_peppol_status', $result['success'] ? 'success' : 'error');
$order->update_meta_data('_esi_peppol_last_http_code', $result['http_code'] ?? 0);
$order->update_meta_data('_esi_peppol_last_message', $result['message'] ?? '');
$order->save();
// Log technique pour debugging
if (class_exists(PEPPOL_Plugin::class)) {
PEPPOL_Plugin::write_debug_file(
[
'event' => 'post_payment',
'order_id' => $order_id,
'success' => $result['success'] ?? false,
'http_code' => $result['http_code'] ?? null,
'message' => $result['message'] ?? '',
'api_response' => $result['data'] ?? null,
],
$result['success'] ? 'INFO' : 'ERROR'
);
}
}
/**
* Vérifie l'état du mode de paiement BACS (virement bancaire)
* et la présence de comptes bancaires configurés.
*
* @return array{
* installed: bool,
* enabled: bool,
* has_accounts: bool,
* valid_accounts_count: int
* }
*/
public static function my_check_bacs_status_and_accounts(): array {
$gateways = \WC_Payment_Gateways::instance()->payment_gateways();
if (empty($gateways['bacs'])) {
return [
'installed' => false,
'enabled' => false,
'has_accounts' => false,
'valid_accounts_count'=> 0,
];
}
/** @var \WC_Gateway_BACS $bacs */
$bacs = $gateways['bacs'];
// 1) Est-ce que BACS est activé ?
$enabled = ($bacs->enabled === 'yes');
// 2) Est-ce qu'il y a des comptes renseignés ?
// Les comptes sont stockés dans l'option "woocommerce_bacs_accounts"
$accounts = \get_option('woocommerce_bacs_accounts', []);
$has_accounts = !empty($accounts);
// Optionnel : vérifier qu'un compte contient bien les champs minimum
$valid_accounts = array_filter(
$accounts,
static function ($acc) {
return !empty($acc['account_name'])
&& (!empty($acc['iban']) || !empty($acc['account_number']))
&& !empty($acc['bank_name']);
}
);
return [
'installed' => true,
'enabled' => $enabled,
'has_accounts' => $has_accounts,
'valid_accounts_count' => count($valid_accounts),
];
}
/**
* Affiche un message d'avertissement dans l'admin WordPress
* si BACS est activé mais qu'aucun compte bancaire n'est renseigné.
*
* Hooké sur admin_notices.
*
* @return void
*/
public static function maybe_show_bacs_notice(): void {
if (!\current_user_can('manage_woocommerce')) {
return;
}
$status = self::my_check_bacs_status_and_accounts();
// Si BACS n'est pas installé ou pas activé, on ne dit rien
if (empty($status['installed']) || empty($status['enabled'])) {
return;
}
// Si au moins un compte valide est configuré, pas de message
if (!empty($status['valid_accounts_count'])) {
return;
}
echo '' . \esc_html__( 'Le mode de paiement virement bancaire (BACS) est activé mais aucun compte bancaire complet n\'est renseigné. Veuillez configurer au moins un compte (titulaire, IBAN ou numéro de compte, banque) pour afficher les instructions de paiement à vos clients.', 'esi_peppol' ) . '