Pour ajouter les fonctions CRUD (Create, Read, Update, Delete) dans DevisController.php dans un projet CodeIgniter, vous devez définir des méthodes pour chaque action. Voici un exemple de base pour chaque fonctionnalité :

Lire (Read)

Vous avez déjà la méthode index pour lister tous les devis. Pour afficher un devis spécifique, vous pouvez ajouter une méthode view :

public function view($id = null)
{
    $devisModel = new DevisModel();

    $data['devis'] = $devisModel->where('id', $id)->first();

    if (empty($data['devis'])) {
        throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the devis with id: ' . $id);
    }

    return view('devis/view', $data);
}

2. Créer (Create)

Pour créer un nouveau devis, vous aurez besoin de deux méthodes : une pour afficher le formulaire et une autre pour traiter les données soumises.

public function create()
{
    return view('devis/create');
}

public function store()
{
    $devisModel = new DevisModel();

    $data = [
        'client_name' => $this->request->getVar('client_name'),
        // autres champs...
    ];

    $devisModel->save($data);

    return redirect()->to('/devis');
}

3. Mettre à jour (Update)

Comme pour la création, vous aurez besoin de deux méthodes : une pour afficher le formulaire de mise à jour et une autre pour traiter les données mises à jour.

public function edit($id = null)
{
    $devisModel = new DevisModel();

    $data['devis'] = $devisModel->where('id', $id)->first();

    return view('devis/edit', $data);
}

public function update($id = null)
{
    $devisModel = new DevisModel();

    $data = [
        'client_name' => $this->request->getVar('client_name'),
        // autres champs...
    ];

    $devisModel->update($id, $data);

    return redirect()->to('/devis');
}

 

4. Supprimer (Delete)

Pour supprimer un devis, vous pouvez ajouter une méthode delete :

public function delete($id = null)
{
    $devisModel = new DevisModel();
    $devisModel->delete($id);

    return redirect()->to('/devis');
}

 

Code complet DevisController.php

<?php
namespace App\Controllers;

use App\Models\DevisModel;
use App\Models\DevisItemModel;
use App\Models\ItemModel;

class DevisController extends BaseController
{
    public function index()
    {
        $devisModel = new DevisModel();
        $data['devis'] = $devisModel->findAll();

        return view('devis/list', $data);
    }

    // Ajouter d'autres méthodes pour créer, afficher, et gérer les devis
    public function view($id = null)
    {
        $devisModel = new DevisModel();
        $itemModel = new ItemModel(); // Assurez-vous d'avoir un modèle pour les items
    
        $data['devis'] = $devisModel->where('id', $id)->first();
    
        if (empty($data['devis'])) {
            throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the devis with id: ' . $id);
        }
    
        // Récupérer les items liés au devis avec leurs détails complets
        $data['items'] = $devisModel->getDevisItemsWithDetails($id); // Cette méthode doit être définie dans DevisModel
    
        return view('devis/view', $data);
    }
    

    public function create()
    {
        return view('devis/create');
    }

    public function store()
    {
        $devisModel = new DevisModel();

        $data = [
            'client_name' => $this->request->getVar('client_name'),
            // autres champs...
        ];

        $devisModel->save($data);

        return redirect()->to('/devis');
    }

    public function edit($id = null)
    {
        $devisModel = new DevisModel();

        $data['devis'] = $devisModel->where('id', $id)->first();

        return view('devis/edit', $data);
    }

    public function update($id = null)
    {
        $devisModel = new DevisModel();

        $data = [
            'client_name' => $this->request->getVar('client_name'),
            // autres champs...
        ];

        $devisModel->update($id, $data);

        return redirect()->to('/devis');
    }

    public function delete($id = null)
    {
        $devisModel = new DevisModel();
        $devisModel->delete($id);

        return redirect()->to('/devis');
    }


    public function compose()
    {
        $devisModel = new DevisModel();
        $itemModel = new \App\Models\ItemModel();

        // Récupérer les informations uniques des clients depuis la table devis
        $data['clients'] = $devisModel->select('client_name')->distinct()->findAll();
        $data['items'] = $itemModel->findAll();

        return view('devis/compose', $data);
    }


    public function save()
    {
        $devisModel = new DevisModel();
        $devisItemModel = new DevisItemModel();

        // Récupération des données du formulaire
        $client_name = $this->request->getVar('client_name');
        $items = $this->request->getVar('items');
        $quantities = $this->request->getVar('quantities');

        // Création du devis
        $devisData = [
            'client_name' => $client_name,
            'date_created' => date("Y-m-d H:i:s") // Date et heure actuelles
        ];
        $devisModel->save($devisData);
        $devis_id = $devisModel->getInsertID(); // Récupère l'ID du devis nouvellement créé

        // Enregistrement des items du devis
        foreach ($items as $item_id) {
            $quantity = isset($quantities[$item_id]) ? $quantities[$item_id] : 1;
            $devisItemData = [
                'devis_id' => $devis_id,
                'item_id' => $item_id,
                'quantity' => $quantity
                // 'custom_price' => ... si vous avez un prix personnalisé
            ];
            $devisItemModel->save($devisItemData);
        }

        // Redirection ou affichage d'un message de succès
        return redirect()->to('/devis'); // Redirige vers la liste des devis
    }


}

Le DevisController dans CodeIgniter est un exemple de contrôleur MVC (Modèle-Vue-Contrôleur) qui gère les opérations liées aux devis dans une application. Voici une explication détaillée de chaque méthode dans ce contrôleur :

1. Méthode index()

  • Objectif : Afficher une liste de tous les devis.
  • Fonctionnement :
    • Crée une instance de DevisModel.
    • Utilise findAll() pour récupérer tous les devis.
    • Passe les données à la vue devis/list.

2. Méthode view($id = null) 

  • Objectif : Afficher les détails d'un devis spécifique.
  • Fonctionnement :
    • Récupère le devis et ses items associés en utilisant l'ID fourni.
    • Si le devis n'existe pas, une exception PageNotFoundException est levée.
    • Les détails du devis et des items sont passés à la vue devis/view.

3. Méthode create() 

  • Objectif : Afficher un formulaire pour créer un nouveau devis.
  • Fonctionnement :
    • Renvoie simplement la vue devis/create.

4. Méthode store() 

  • Objectif : Enregistrer un nouveau devis dans la base de données.
  • Fonctionnement :
    • Récupère les données du formulaire.
    • Utilise DevisModel pour enregistrer ces données.
    • Redirige l'utilisateur vers la liste des devis après l'enregistrement.

5. Méthode edit($id = null) 

  • Objectif : Afficher un formulaire pour éditer un devis existant.
  • Fonctionnement :
    • Récupère les détails du devis à éditer en utilisant l'ID fourni.
    • Passe ces détails à la vue devis/edit.

6. Méthode update($id = null) 

  • Objectif : Mettre à jour les informations d'un devis existant.
  • Fonctionnement :
    • Récupère les données mises à jour du formulaire.
    • Utilise DevisModel pour mettre à jour le devis.
    • Redirige vers la liste des devis après la mise à jour.

7. Méthode delete($id = null) 

  • Objectif : Supprimer un devis existant.
  • Fonctionnement :
    • Utilise DevisModel pour supprimer le devis spécifié par l'ID.
    • Redirige vers la liste des devis après la suppression.

8. Méthode compose() 

  • Objectif : Afficher un formulaire pour composer un devis avec des clients et des items.
  • Fonctionnement :
    • Récupère la liste des clients et des items disponibles.
    • Passe ces listes à la vue devis/compose.

9. Méthode save() 

  • Objectif : Enregistrer les détails d'un devis composé dans la base de données.
  • Fonctionnement :
    • Récupère les données du formulaire de composition du devis.
    • Enregistre le devis et ses items associés en utilisant DevisModel et DevisItemModel.
    • Redirige vers la liste des devis après l'enregistrement.

Chaque méthode dans ce contrôleur joue un rôle spécifique dans la gestion des devis, de leur création à leur affichage, en passant par leur modification et leur suppression. Ce contrôleur illustre bien l'approche MVC, où la logique métier est séparée de la présentation et de l'interaction avec la base de données.

 

Conclusion

Avec ces méthodes, vous avez un contrôleur CRUD de base pour votre système de devis. Vous devrez créer les vues correspondantes pour create, edit, et view. Assurez-vous également de gérer la validation des données et la sécurité, en particulier pour les opérations de création et de mise à jour.

 

Modifié le: vendredi 26 janvier 2024, 10:24