Jump to content

[Résolu] Modifier comment PS assigne les dates de facturation


Recommended Posts

Bonjour,

Je cherche à modifier la façon dont Prestashop 1.7 attribue la date de la facture. La logique souhaitée est :

- Si la commande est entièrement payée, la date de la facture doit être la date du dernier paiement enregistré.
- Sinon, elle doit continuer à utiliser la date actuelle attribuée automatiquement lors de la génération de la facture.

J'ai essayé de modifier OrderInvoice.php avec le code suivant sans succès. La facture continue de se générer avec la date actuelle.

Voici le code original :

public function add($autodate = true, $null_values = false)
{
    $order = new Order($this->id_order);

    $this->shop_address = OrderInvoice::getCurrentFormattedShopAddress($order->id_shop);

    return parent::add();
}

Et voici la modification que j'ai essayée :

public function add($autodate = true, $null_values = false)
{
    $order = new Order($this->id_order);
    $this->shop_address = OrderInvoice::getCurrentFormattedShopAddress($order->id_shop);

    // Initialiser la date d'ajout
    $invoice_date = date('Y-m-d H:i:s');

    // Vérifier si la commande est entièrement payée
    if ($order->getCurrentState() == Configuration::get('PS_OS_PAYMENT')) {
        // Obtenir la date du dernier paiement enregistré
        $payments = OrderPayment::getByOrderReference($order->reference);
        if (!empty($payments)) {
            $last_payment = end($payments);
            $invoice_date = $last_payment->date_add;
        }
    }

    // Attribuer la date de la facture
    $this->date_add = $invoice_date;

    // Appeler la méthode parent pour ajouter la facture
    return parent::add($autodate, $null_values);
}

Quelqu'un peut-il indiquer quelle est la méthode correcte ou l'approche adéquate pour y parvenir ? Toute aide serait grandement appréciée.

Merci d'avance !

Link to comment
Share on other sites

J'ai résolu le problème de la personnalisation de la date de la facture dans PrestaShop 1.7. Voici la solution finale qui a fonctionné pour moi :

public function add($autodate = true, $null_values = false)
{
    $order = new Order($this->id_order);

    // Obtain the payments for this order
    $payments = OrderPayment::getByOrderReference($order->reference);

    if (!empty($payments)) {
        // Get the date of the last payment
        $last_payment = end($payments);
        if ($last_payment && property_exists($last_payment, 'date_add')) {
            $this->date_add = $last_payment->date_add;
        }
    }

    // Call the parent method to add the invoice
    $result = parent::add($autodate, $null_values);

    // If the date was overwritten, set it again
    if (!empty($payments) && $this->date_add !== $last_payment->date_add) {
        $this->date_add = $last_payment->date_add;
        Db::getInstance()->update('order_invoice', ['date_add' => $this->date_add], 'id_order_invoice = ' . (int)$this->id);
    }

    // Set the shop address
    $this->shop_address = OrderInvoice::getCurrentFormattedShopAddress($order->id_shop);

    return $result;
}

 

Link to comment
Share on other sites

  • Eutanasio changed the title to [Résolu] Modifier comment PS assigne les dates de facturation

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...