Lacier
  • Alternance Lacier
    • Gestion des Canvas dans le Panier
    • Chatbot
      • Étapes pour intégrer la suggestion de produit
    • Monitoring
    • Compression Image Excel
    • Inventaire
    • Gravure Laser
    • Cleaner Module
    • Scripts JavaScript Indépendants
      • Croix pour fermer le widget d'avis
      • Section Instagram
      • Section Panier Commander
      • Chatbot
    • Notification de Retard de Commande
    • Gestion des Templates de Mails
    • Relance Devis
    • Image FIlter
    • Affichage des produits
    • Attribute Replacer
Powered by GitBook
On this page
  • Fonctionnalités principales
  • Workflow du module
  • Emplacement du module
  1. Alternance Lacier

Notification de Retard de Commande

Ce module est conçu pour vérifier quotidiennement les commandes en retard sur un site PrestaShop via une tâche CRON. Lorsqu'un retard est détecté, le script identifie le client concerné, récupère son email, et lui envoie un message d'excuse.


Fonctionnalités principales

  1. Vérification des commandes :

    • Parcourt les commandes depuis l'API PrestaShop.

    • Identifie les commandes en retard en fonction de leur date de livraison estimée.

  2. Gestion des emails :

    • Vérifie si un email a déjà été envoyé pour une commande donnée.

    • Marque les commandes traitées pour éviter les doublons.

  3. Envoi d'email :

    • Récupère les informations du client.

    • Envoie un email personnalisé en cas de retard.

  4. Base de données :

    • Utilise une base PostgreSQL pour suivre les commandes pour lesquelles un email a déjà été envoyé.


Workflow du module

1. Initialisation

Base de données

Le script initialise une table PostgreSQL appelée sent_emails pour enregistrer les références des commandes déjà traitées :

CREATE TABLE IF NOT EXISTS sent_emails (
    id SERIAL PRIMARY KEY,
    reference TEXT UNIQUE NOT NULL,
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Configuration API

Chaque boutique PrestaShop est configurée dans le script via un dictionnaire contenant :

  • Clé API

  • URL de l’API des commandes

  • Nom de la boutique

  • URL et logo de la boutique

Exemple :

API_CONFIGS = [
    {
        'name': 'signaletique-inox',
        'api_key': 'VOTRE_CLE_API',
        'api_url_orders': 'https://votre-site.fr/api/orders',
        'shop_name': 'Nom de votre boutique',
        'shop_url': 'https://votre-site.fr',
        'logo_url': 'https://votre-site.fr/logo.png'
    }
]

2. Récupération des commandes

Étape 1 : Dernier ID de commande

Pour limiter les requêtes, le module récupère l'ID de la commande la plus récente via l'API PrestaShop :

Requête :

GET https://votre-site.fr/api/orders?sort=id_DESC&limit=1&display=[id]

Réponse attendue :

<prestashop>
    <order>
        <id>12345</id>
    </order>
</prestashop>

Code :

def fetch_last_order_id(api_config):
    url = f"{api_config['api_url_orders']}?sort=id_DESC&limit=1&display=%5Bid%5D"
    response = requests.get(url, auth=(api_config['api_key'], ''))
    if response.status_code == 200:
        root = ET.fromstring(response.text)
        return int(root.find('.//order/id').text)

Étape 2 : Parcours des commandes

Le module parcourt les commandes récentes, jusqu'à 1000 en arrière :

Requête :

GET https://votre-site.fr/api/orders/12345

Réponse attendue :

<prestashop>
    <order>
        <id>12345</id>
        <reference>ABC123</reference>
        <estimate_delivery>15/11/2024</estimate_delivery>
        <current_state>3</current_state>
        <id_customer>67890</id_customer>
    </order>
</prestashop>

Code :

def fetch_order_details(api_config, order_id):
    url = f"{api_config['api_url_orders']}/{order_id}"
    response = requests.get(url, auth=(api_config['api_key'], ''))
    if response.status_code == 200:
        return response.text

3. Vérification des retards

Une commande est considérée comme en retard si :

  • Sa date de livraison estimée est dépassée.

  • Son statut actuel correspond à "En cours de traitement" (ID = 3).

Code :

def is_order_late(estimate_delivery):
    delivery_date = datetime.strptime(estimate_delivery, '%d/%m/%Y')
    return datetime.now().date() > delivery_date.date()

4. Récupération des informations client

Une fois qu'une commande en retard est identifiée, le module récupère les informations du client via l'ID client :

Requête :

GET https://votre-site.fr/api/customers/67890

Réponse attendue :

<prestashop>
    <customer>
        <id>67890</id>
        <email>client@exemple.com</email>
        <firstname>Jean</firstname>
        <lastname>Dupont</lastname>
    </customer>
</prestashop>

Code :

def fetch_customer_details(api_config, customer_id):
    url = f"{api_config['api_url_orders'].replace('/orders', '/customers')}/{customer_id}"
    response = requests.get(url, auth=(api_config['api_key'], ''))
    if response.status_code == 200:
        return response.text

5. Envoi d'email

L'email est personnalisé avec les informations du client et de la commande.

Exemple de template :

Votre commande {order_name} prévue le {date_livraison} est en retard.
Merci {firstname} {lastname} de votre patience.

Code :

def send_email(receiver_email, subject, template_html, placeholders):
    for key, value in placeholders.items():
        template_html = template_html.replace(f"{{{key}}}", value)
    print(f"Envoi d'email simulé à {receiver_email} : {template_html}")

6. Gestion des emails envoyés

Avant d'envoyer un email, le module vérifie si l'email a déjà été envoyé en consultant la table PostgreSQL.

Code :

def has_email_been_sent(reference):
    conn = connect_db()
    cursor = conn.cursor()
    cursor.execute('SELECT 1 FROM sent_emails WHERE reference = %s', (reference,))
    result = cursor.fetchone()
    conn.close()
    return result is not None

Emplacement du module

Le script est exécuté via une tâche CRON quotidienne. Le fichier est situé à :

Chemin : /var/www/scripts/notify_late_orders.py

PreviousChatbotNextGestion des Templates de Mails

Last updated 5 months ago