Skip to content

Bahadou-Badr/MINI-CRM-LARAVEL-10

Repository files navigation

Documentation Technique

Nous avons utilisé Laravel pour créer un MINI-CRM qui relie une entreprise à ses employés, Et installé Laravel UI Bootstrap pour concevoir un design simple et propre.

prérequis : PHP >= 8.1 | node >= 16.14.0

Sommaire

  • Configuration du projet .
  • Configuration de la base de données .
  • Configuration SMTP (utilisation de Mailtrap - dev environment) .
  • Testing .
  • Notes .

Configuration du projet

  • Clone GitHub repo git clone linktogithubrepo.com/ projectName , cd Into It.
# git clone linktogithubrepo.com/ miniCRM
# cd miniCRM
  • Install Composer Dependencies
# composer install
  • Install NPM Dependencies
# npm install

Configuration de la base de données.

  • run mysql
  • .env file

Créez une nouvelle base de donnéescrm_db(choisi un nom quelconque ) dans phpmyadmin et entrez les détails de la base de données dans le fichier .env comme indiqué ci-dessous.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crm_db
DB_USERNAME=root
DB_PASSWORD=
  • Migrate the database.
# php artisan migrate
  • Seed the database.
# php artisan db:seed
  • Generate an app encryption key.
# php artisan key:generate

Configuration SMTP (utilisation de Mailtrap - dev environment)

  • Accéder à mailtrap et inscrivez-vous.

  • Vous pouvez choisir le plan gratuit pour tester la partie mail dans l'application.

mailtrap step one

  • Choisi laravel 7+ (Fleche 1 dans la capture ci-dessous)

  • Mettre le code donné (Fleche 2 dans la capture ci-dessous) dans le fichier .env

mailtrap step one

Remplace le code qui existe déja dans le fichier.env par le code genere (Voila un example de code genere)

MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=67d3604dd2cd5d
MAIL_PASSWORD=d7f83ce409d2a7
MAIL_ENCRYPTION=tls

Testing

Pour finaliser tout cela, exécutez les commandes suivantes sur votre terminal :

# npm run dev
# php artisan serve

Voila quelque démonstartion

  • Gestion d'entreprise

entreprise

  • Gestion d'employes / inviter un employe a l'entreprise qu'on a creer dans la demo precedent

employe

  • Espace employe

espace employe

  • La rechreche

espace employe

Vous pouvez tester toutes les fonctionnalités declare dans le cahier de charge

Notes

  • Le Model User represente l'employé et l'admin, on diferencie entre les deux par le column is_admin (boolean)

  • on a créez un middleware (IsAdmin) pour vérifier les utilisateurs qui peut accéder à l'Espace administrateur ou qui peut accéder à l'Espace employé.

  • Concernant le Module Historique et pour suivre les action suivants : Envoi d'invitationtions // Annulation d’invitation // Validation d’invitation // Confirmation du profil d’un employé . j'ai creer un service (ActionLogService) qui contien la methode CreateActionLog( ) qui nous permet d'enregister la tracabilite des actions , et pour minimiser le code de controleur.

CreateActionLog(string $action_type, Invitation $invitation = NULL, User $user = NULL) {

}

Envoi d'invitation

        // Send the invitation email with a link to the registration page
        $registrationLink = url('/verify/invitation?token=' . $token);
        Mail::to($invitation->email)->send(new InvitationMail($registrationLink));

        // Create a new Action Log record for the invitation sent
        $this->actionLogService->CreateActionLog("invitation_sent", $invitation); // 👈

Annulation d’invitation

        $invitation = Invitation::find($id);
        //change the status of the invitation , status should be equal 2 : annulée
        
        $invitation->status = 2;  // 0 = en attente | 1 = validée | 2 = annulée || Default value equal 0
        $invitation->save();

        // Create a new Action Log record for the invitation cancel
        $this->actionLogService->CreateActionLog("invitation_cancel", $invitation);  // 👈

Validation d’invitation

        // Get token from the URL
        $token = $request->query('token');

        // Find the invitation with the matching token and the status != 2 (annulée)
        $invitation = Invitation::where('token', $token)->where('status', '<>', 2)->first();

        // If the token is not valid, show the error message
        if (!$invitation) {
            abort(404, 'Token invalide');
        }

        //change the status of the invitation , status should be equal 1 : validée
        $invitation->status = 1;
        $invitation->save();
        // Create a new Action Log record for the invitation valid
        $this->actionLogService->CreateActionLog("invitation_valid", $invitation); // 👈

Confirmation du profil d’un employé

        // inputs validation
         ...
        //create the Employee (compléter son profil )
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'address' => $request->address,
            'phone' => $request->phone,
            'birth_date' => $request->birth_date,
            'is_admin' => false,
            'company_id' => $request->company_id,
        ]);
        // Create a new Action Log record for the register confirmation
        $this->actionLogService->CreateActionLog("user_confirmed", null, $user); // 👈
  • Une méthode de recherche très simple sans avoir besoin d'installer des packages supplémentaires.

on'a cree un service SearchService() qui contien la methode search() qui nous permet de chercher une société ou un employé.

SearchController.php

    public function search(Request $request)
    {
        $request->validate([
            'search' => 'required|string|max:255',
            'search_type' => 'required|string|max:255',
        ]);
        // Get the search value and the search_type(Entreprises/Comanies) from the request
        $search_query = $request->input('search');
        $search_type = $request->input('search_type'); 
        
        // Search in the name column from the Comapnies Or users table
        $results = $this->searchService->search($search_type, $search_query); // 👈 SearchService

        // Return the search view with resluts
        return view('search.index', ['results' => $results]);
    }

la methode search() de SearchServices.php

    public function search(string $search_type, string $query){
        switch ($search_type) {
            case "Enreprise":
                $results = Company::select(['company_name as name', 'address'])->where('company_name', 'LIKE', "%{$query}%");
                break;
            case "Employe":
                $results = User::where('name', 'LIKE', "%{$query}%");
                break;
            default:
                $results = User::where('name', 'LIKE', "%{$query}%");
        }
        return $results->get();
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages