get_meta( self::META_NUMBER ); if ( '' !== $existing ) { return $existing; } $now = time(); $buyer = EFacture_FR_Checkout_Fields::get_buyer_ids( $order ); $type = '' !== $buyer['siret'] ? 'B2B' : 'B2C'; $number = EFacture_FR_Invoice_Numbering::next_formatted( $now ); $order->update_meta_data( self::META_NUMBER, $number ); $order->update_meta_data( self::META_DATE, gmdate( 'Y-m-d', $now ) ); $order->update_meta_data( self::META_TYPE, $type ); $order->update_meta_data( self::META_BUYER, $buyer ); $order->save(); /* translators: 1: invoice number, 2: B2B or B2C */ $order->add_order_note( sprintf( __( 'Invoice %1$s created (%2$s).', 'factella' ), $number, $type ) ); /** * Fires after an invoice record is created. The Factur-X generator and * platform connectors will listen to this. * * @param WC_Order $order Order. * @param string $number Invoice number. * @param string $type B2B or B2C. */ do_action( 'efacture_fr_invoice_created', $order, $number, $type ); return $number; } /** * Create a credit note for a refund. * * @param int $order_id Order ID. * @param int $refund_id Refund ID. * @return string|null Credit note number, or null if not created. */ public static function create_credit_note( $order_id, $refund_id ) { $order = wc_get_order( $order_id ); $refund = wc_get_order( $refund_id ); if ( ! $order || ! $refund ) { return null; } // A credit note only makes sense against an invoice. $invoice_number = (string) $order->get_meta( self::META_NUMBER ); if ( '' === $invoice_number ) { return null; } $existing = (string) $refund->get_meta( self::META_CREDIT_NUMBER ); if ( '' !== $existing ) { return $existing; } $now = time(); $number = EFacture_FR_Invoice_Numbering::next_formatted( $now ); $refund->update_meta_data( self::META_CREDIT_NUMBER, $number ); $refund->update_meta_data( self::META_CREDIT_DATE, gmdate( 'Y-m-d', $now ) ); $refund->update_meta_data( self::META_CREDIT_OF, $invoice_number ); $refund->save(); /* translators: 1: credit note number, 2: invoice number */ $order->add_order_note( sprintf( __( 'Credit note %1$s created for invoice %2$s.', 'factella' ), $number, $invoice_number ) ); /** * Fires after a credit note record is created. * * @param WC_Order $order Order. * @param WC_Order_Refund $refund Refund. * @param string $number Credit note number. * @param string $invoice_number Invoice being credited. */ do_action( 'efacture_fr_credit_note_created', $order, $refund, $number, $invoice_number ); return $number; } }