name : Souscription.php
<?php

namespace App\Livewire\Auto;

use Livewire\Component;
use Livewire\Attributes\Title;
use App\Models\contrat\autocontrat;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Models\{Garanties,Produit,
    Compagnie, Energie,DureeContrat,
    Avenant, Paiement,Devise, Souscripteur,
    Assure, TypeVehicule, Vehicule,PrimeAuto,
    Pay,Ville,Puissance,PlaceVehicule,
};
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Rule;
use Illuminate\Support\Facades\Auth;


class Souscription extends Component
{
    

    public $currentStep = 1;
    public $total_steps = 8;

    public $typeSouscripteur;
    
    public $raison_sociale;
    public $email_souscripteur;
    public $tel_souscripteur;
    public $pays;
    public $ville;
    public $produit;
    public $immatriculation;
    public $marque;
    public $modele;
    public $energie;
    public $date_mec;
    public $NombrePlaces;
    public $genre;
    public $valeur_neuve;
    public $valeur_venale;
    public $NombrePlace;
    public $zone_circulation;
    public $Oui_assure ;
    public $Nom_assure;
    public $contact_assure;
    public $email_assure;
    public $compagnie;
    public $typeVehicule;
    public $puissance;
    public $date_debut;
    public $duree_contrat;
    public $accs_courtier;
    public $devise;
    public $cours;
    public $resultDate;
    public $resultDateEffet;
    public $garanties = [];
    public $prime;
    public $itemGarantie = [];
    public $totalPrimeBrute; // Initialisez la somme à 0
    public $totalPrimeNette; // Initialisez la somme à 0  
    public $totalAccessoire; // Initialisez la somme à 0  
    public $totalTaxe; // Initialisez la somme à 0  
    public $totalCedeao; // Initialisez la somme à 0
    public $primeTTC; // Initialisez la somme à 0primeTTC
    public $accs_compagnie;
    public $taux_commission;
    public $fga;
    public $calculefga;
    public $rc;
    public $dr;
    public $defaultGarantieIds =[1,2,16,22,15];// Initialisez des garanties a coché par defaut
    public $puissanceVehicule=[];
    public $placesVehicules=[];
    public $puissances;
    public $bonus_com;
    public $commissionBrute;
    


    public function suivant(){
        $this->validateForm();
        if ($this->currentStep < $this->total_steps) {
            $this->currentStep ++;
        }
    }

    public function precedent(){
        if ($this->currentStep > 1) {
            $this->currentStep --;
        }
    }

    
    public function mount(){
        if (!Auth::check()) {
            return redirect()->route('post.login');
        }

        $this->garanties = Garanties::get(["id","Nom_garantie"]);
        $this->itemGarantie = array_unique(array_merge($this->itemGarantie, $this->defaultGarantieIds)); 
        // Trier les garanties pour que CDEAo, FOND DE GARANTIE, et ACCESSOIRE apparaissent à la fin  
    
        foreach ($this->garanties as $g) {
            $prime = DB::table('prime_autos')  
            ->join('garanties', 'prime_autos.IDgarantie', '=', 'garanties.id')  
            ->join('energies', 'prime_autos.IDenergie', '=', 'energies.id')  
            ->join('produits', 'prime_autos.IDproduit', '=', 'produits.id')
            ->join('compagnies', 'prime_autos.IDcompagnie', '=', 'compagnies.id')  
            ->join('duree_contrats', 'prime_autos.IDdureecontrat', '=', 'duree_contrats.id')
            ->join('puissances', 'prime_autos.IDpuissance', '=', 'puissances.id')
            ->join('place_vehicules', 'prime_autos.IDplaceAuto', '=', 'place_vehicules.id') 
            ->where('prime_autos.IDgarantie', $g->id)  
            ->where('prime_autos.IDenergie', $this->energie)  
            ->where('prime_autos.IDproduit', $this->produit)  
            ->where('prime_autos.IDcompagnie', $this->compagnie)  
            ->where('prime_autos.IDdureecontrat', $this->duree_contrat)
            ->orWhere('prime_autos.IDpuissance', $this->puissances)
            ->orWhere('prime_autos.IDplaceAuto', $this->NombrePlace)
            ->get(["prime_autos.primeNette"]);
            $g->prime = count($prime) > 0 ? $prime[0]->primeNette : 0;
        }
        
    }

    public function getPrimeCotation($id) {  

        // Réinitialiser les totaux avant de commencer le calcul 
        $this->calculefga = 0; 
        $this->totalPrimeBrute = 0;
        $this->totalPrimeNette = 0;  
        $this->totalAccessoire = 0;  
        $this->totalTaxe = 0;  
        $this->totalCedeao = 0;  
        $this->primeTTC = 0; // Initialisation de la prime TTC  
    
        // Récupérer toutes les garanties  
        $this->garanties = Garanties::all(["id", "Nom_garantie", "sigle"]);  
    
        // Définir les types à exclure dans le calcule de la prime nette  
        $typesToExclude = ['ACCESSOIRE', 'TAXE', 'CEDEAO','FGA']; // Liste des types à exclure 
    
        // Calculer les primes et stocker dans chaque garantie selon leur type  
        foreach ($this->garanties as $g) { 
            if ($this->puissances) {
                // Activer les montants des garanties uniquement si cochées  
                if (in_array($g->id, $this->itemGarantie) || in_array($g->id, $this->defaultGarantieIds)) {  
                    $prime = DB::table('prime_autos')  
                        ->join('garanties', 'prime_autos.IDgarantie', '=', 'garanties.id')  
                        ->join('energies', 'prime_autos.IDenergie', '=', 'energies.id')  
                        ->join('produits', 'prime_autos.IDproduit', '=', 'produits.id')  
                        ->join('compagnies', 'prime_autos.IDcompagnie', '=', 'compagnies.id')  
                        ->join('duree_contrats', 'prime_autos.IDdureecontrat', '=', 'duree_contrats.id')  
                        ->where('prime_autos.IDgarantie', $g->id)  
                        ->where('prime_autos.IDenergie', $this->energie)  
                        ->where('prime_autos.IDproduit', $this->produit)  
                        ->where('prime_autos.IDcompagnie', $this->compagnie)  
                        ->where('prime_autos.IDdureecontrat', $this->duree_contrat)
                        ->where('prime_autos.IDpuissance', $this->puissances)
                        ->value("prime_autos.primeNette");  
        
                    // Stocker la prime dans l'objet de garantie  
                    $g->prime = $prime ? $prime : 0;  

                    if ($g->sigle == 'RC') {
                        $this->rc = $g->prime;
                    } 
                    // Vérifier les types et additionner dans les variables appropriées  
                    if (in_array($g->sigle, $typesToExclude)) {  
                        if ($g->sigle == 'ACCESSOIRE') {  
                            $this->totalAccessoire += $g->prime;
                            
                        } elseif ($g->sigle == 'TAXE') {  
                            
                        } elseif ($g->sigle == 'CEDEAO') {  
                            $g->prime = 1000;
                            $this->totalCedeao += $g->prime;  
                        }
                        elseif ($g->sigle == 'FGA') {// calcule FOND DE GARANTIE FGA (2% RC)
                            $g->prime = (int)($this->rc * (0.02));
                            $this->calculefga = $g->prime;
                        }
                    } else {  
                        // Ajouter à la prime nette seulement si cochée et exclue  
                        $this->totalPrimeBrute += $g->prime;
                        $this->totalPrimeNette = $this->totalPrimeBrute;
                        
                    } 
                    //calcule de taxe, en fonction de l'accessoire compagnie
                    $this->totalTaxe = (int)(((int)$this->totalAccessoire + (int)$this->totalPrimeNette)*(0.145)); 
                    
                } 
            }elseif($this->puissances &&  $this->NombrePlace){
                // Activer les montants des garanties uniquement si cochées  
                if (in_array($g->id, $this->itemGarantie) || in_array($g->id, $this->defaultGarantieIds)) {  
                    $prime = DB::table('prime_autos')  
                        ->join('garanties', 'prime_autos.IDgarantie', '=', 'garanties.id')  
                        ->join('energies', 'prime_autos.IDenergie', '=', 'energies.id')  
                        ->join('produits', 'prime_autos.IDproduit', '=', 'produits.id')  
                        ->join('compagnies', 'prime_autos.IDcompagnie', '=', 'compagnies.id')  
                        ->join('duree_contrats', 'prime_autos.IDdureecontrat', '=', 'duree_contrats.id')  
                        ->where('prime_autos.IDgarantie', $g->id)  
                        ->where('prime_autos.IDenergie', $this->energie)  
                        ->where('prime_autos.IDproduit', $this->produit)  
                        ->where('prime_autos.IDcompagnie', $this->compagnie)  
                        ->where('prime_autos.IDdureecontrat', $this->duree_contrat)
                        ->where('prime_autos.IDpuissance', $this->puissances)
                        ->where('prime_autos.IDplaceAuto', $this->NombrePlace)
                        ->value("prime_autos.primeNette");  
        
                    // Stocker la prime dans l'objet de garantie  
                    $g->prime = $prime ? $prime : 0;  

                    if ($g->sigle == 'RC') {
                        $this->rc = $g->prime;
                    }

                    // Vérifier les types et additionner dans les variables appropriées  
                    if (in_array($g->sigle, $typesToExclude)) {  
                        if ($g->sigle == 'ACCESSOIRE') {  
                            $this->totalAccessoire += $g->prime;
                            
                        } elseif ($g->sigle == 'TAXE') {  
                            
                        } elseif ($g->sigle == 'CEDEAO') {  
                                $g->prime = 1000;  
                                $this->totalCedeao += $g->prime;  
                        }
                        elseif ($g->sigle == 'FGA') {// calcule FOND DE GARANTIE FGA (2% RC) 
                            $g->prime = (int)($this->rc * (0.02));
                            $this->calculefga = $g->prime;
                        }
                    } else {  
                        // Ajouter à la prime nette seulement si cochée et exclue  
                        $this->totalPrimeBrute += $g->prime; 
                        $this->totalPrimeNette = $this->totalPrimeBrute;
                    } 
                    //calcule de taxe, en fonction de l'accessoire compagnie
                    $this->totalTaxe = (int)(((int)$this->totalAccessoire + (int)$this->totalPrimeNette)*(0.145)); 
                    
                } 
            }elseif($this->NombrePlace){
                // Activer les montants des garanties uniquement si cochées  
                if (in_array($g->id, $this->itemGarantie) || in_array($g->id, $this->defaultGarantieIds)) {  
                    $prime = DB::table('prime_autos')  
                        ->join('garanties', 'prime_autos.IDgarantie', '=', 'garanties.id')  
                        ->join('energies', 'prime_autos.IDenergie', '=', 'energies.id')  
                        ->join('produits', 'prime_autos.IDproduit', '=', 'produits.id')  
                        ->join('compagnies', 'prime_autos.IDcompagnie', '=', 'compagnies.id')  
                        ->join('duree_contrats', 'prime_autos.IDdureecontrat', '=', 'duree_contrats.id')  
                        ->where('prime_autos.IDgarantie', $g->id)  
                        ->where('prime_autos.IDenergie', $this->energie)  
                        ->where('prime_autos.IDproduit', $this->produit)  
                        ->where('prime_autos.IDcompagnie', $this->compagnie)  
                        ->where('prime_autos.IDdureecontrat', $this->duree_contrat)
                        ->where('prime_autos.IDplaceAuto', $this->NombrePlace)
                        ->value("prime_autos.primeNette");  
        
                    // Stocker la prime dans l'objet de garantie  
                    $g->prime = $prime ? $prime : 0;  

                    if ($g->sigle == 'RC') {
                        $this->rc = $g->prime;
                    }

                    // Vérifier les types et additionner dans les variables appropriées  
                    if (in_array($g->sigle, $typesToExclude)) {  
                        if ($g->sigle == 'ACCESSOIRE') {  
                            $this->totalAccessoire += $g->prime;
                            
                        } elseif ($g->sigle == 'TAXE') {  
                            
                        } elseif ($g->sigle == 'CEDEAO') {
                            $g->prime = 1000;  
                            $this->totalCedeao += $g->prime;  
                        }
                        elseif ($g->sigle == 'FGA') {// calcule FOND DE GARANTIE FGA (2% RC)  
                            $g->prime = (int)($this->rc * (0.02)); 
                            $this->calculefga = $g->prime; 
                        }
                    } else {  
                        // Ajouter à la prime nette seulement si cochée et exclue  
                        $this->totalPrimeNette += $g->prime;
                        $this->totalPrimeNette = $this->totalPrimeBrute;
                        
                    } 
                    //calcule de taxe, en fonction de l'accessoire compagnie
                    $this->totalTaxe = (int)(((int)$this->totalAccessoire + (int)$this->totalPrimeNette)*(0.145)); 
                    
                }   
            } 
        }  
       
        // Calculer la prime TTC  
        $this->primeTTC =((int)$this->calculefga + (int)$this->totalPrimeNette + (int)$this->totalAccessoire + (int)$this->accs_courtier + (int)$this->totalTaxe + (int)$this->totalCedeao);
        
        $this->updateTotalAccessoire(); 
        $this->calculeBonusCommercial();
    }

    public function updateTotalAccessoire() {  
        // Ajout de la valeur du champ accs_courtier à totalAccessoire  
    
        if (is_numeric($this->accs_courtier)) {  
            // Convertir accs_courtier en float  
            $accsCourtierValue = (float)$this->accs_courtier;  
    
            // Mettre à jour totalAccessoire  
            $this->totalAccessoire += $accsCourtierValue; 
            $this->primeTTC =((int)$this->calculefga + (int)$this->totalPrimeNette + (int)$this->totalAccessoire + (int)$this->totalTaxe + (int)$this->totalCedeao);
    
            // Calculer accs_compagnie seulement si totalAccessoire est différent de accs_courtier  
            if ($this->totalAccessoire > $accsCourtierValue) {  
                $this->accs_compagnie = $this->totalAccessoire - $accsCourtierValue;  
            } else {  
                $this->accs_compagnie = 0; // Optionnel : définit accs_compagnie à 0 si totalAccessoire est égal à accs_courtier  
            }  
        }  
    } 

    public function calculeBonusCommercial(){ //calcule du bonus commercial
        if ($this->bonus_com && $this->bonus_com !='') {
            $this->totalPrimeNette = (int) ($this->totalPrimeBrute * ((int)$this->bonus_com/100));
            $this->totalTaxe = (int)(((int)$this->totalAccessoire + (int)$this->totalPrimeNette)*(0.145));
            $this->primeTTC =((int)$this->calculefga + (int)$this->totalPrimeNette + (int)$this->totalAccessoire + (int)$this->totalTaxe + (int)$this->totalCedeao); 
        }elseif(!$this->bonus_com && $this->bonus_com ==''){
            $this->totalPrimeNette = $this->totalPrimeBrute;
            $this->totalTaxe = (int)(((int)$this->totalAccessoire + (int)$this->totalPrimeNette)*(0.145));
            $this->primeTTC =((int)$this->calculefga + (int)$this->totalPrimeNette + (int)$this->totalAccessoire + (int)$this->totalTaxe + (int)$this->totalCedeao); 
        }
    }

    public function GetPuissance(){//affichage des puissances par rapport au produit et l'energie
        
        if ($this->produit || $this->energie) {
            switch ($this->produit) {
                case '9'://produit tourisme
                    $this->puissanceVehicule = Puissance::Where('IDproduit',$this->produit)
                     ->where('IDenergie', $this->energie)->get();
                     $this->placesVehicules =[];
                    break;
                case '2'://produit TPPC
                    $this->puissanceVehicule = Puissance::Where('IDproduit',$this->produit)->get();
                    $this->placesVehicules =[];
                    break;
                case '3'://produit TPM
                    $this->puissanceVehicule = Puissance::Where('IDproduit',$this->produit)->get();
                    $this->placesVehicules =[];
                    break;
                case '4'://produit deux roues ou trois roues
                    $this->puissanceVehicule = Puissance::Where('IDproduit',$this->produit)->get();
                    $this->placesVehicules =[];
                    break;
                case '1'://produit TPV
                    $this->placesVehicules = PlaceVehicule::orderBy('id','asc')->get();
                    $this->puissanceVehicule =[];
                    break;
                default:
                $this->puissanceVehicule =[];
                $this->placesVehicules =[];
                    break;
            }
        }
        
    }


    public function DureeContrat(){//detertminer la date d'échéance du contrat
        
        // Créez une instance de la date  
        $date = Carbon::parse($this->date_debut); // Obtenez la date sous forme d'objet Carbon  
        $dateEffet = Carbon::parse($this->date_debut);
        // Ajoutez le nombre de mois   
        $duree = (int) $this->duree_contrat; 
        
        $date->addMonths($duree);
        // Soustrayez le nombre de jours  
        $date->subDays(1);   

        // Obtenez la nouvelle date au format 'd/m/Y'  
        $this->resultDate = $date->format('d/m/Y');
        $this->resultDateEffet = $dateEffet->format('d/m/Y');
    }

    

    public function enregistrer(){
        $this->validateForm();
        // sleep(2);
        // dd($this->itemGarantie);
        
        $soucripteur = Souscripteur::create(//-----------SOUSCRIPTEUR
            [
                'raison_sociale'=> $this->raison_sociale,
                'tel_souscripteur'=> $this->tel_souscripteur,
                'email_souscripteur'=> $this->email_souscripteur,
                'IDpays_souscripteur'=> $this->pays,
                'IDville_souscripteur'=> $this->ville,
                'typeSouscripteur'=> $this->typeSouscripteur,
            ]
        );//--------------SOUSCRIPTEUR

        
        $assure = Assure::create(//----------ASSURE
            [
                'IDsouscripteur'=>$soucripteur->id,
                'nomAssure'=> $this->Nom_assure,
                'telAssure'=> $this->contact_assure,
                'emailAssure'=> $this->email_assure,
            ]
        );//--------------ASSURE

        $vehicule = Vehicule::create(//----------VEHICULE
            [
                'IDenergie'=>$this->energie,
                'immatriculation'=> $this->immatriculation,
                'marque'=> $this->marque,
                'modele'=> $this->modele,
                'puissance'=>$this->puissance,
                'typeVehicule'=>$this->typeVehicule,
                'NombrePlace'=>$this->NombrePlaces,
                'genre'=>$this->genre,
                'date_mec'=>date('Y-m-d',strtotime(str_replace('/','-',$this->date_mec))),
            ]
        );//--------------VEHICULE

        $avenant = Avenant::create(//-----------AVENANT
            [
                'refAvenant'=>'REF-' . str_pad(rand(1, 100), 5, '0', STR_PAD_LEFT).'-'. str_pad(Carbon::now()->year, 3, '0', STR_PAD_LEFT).'-'.$assure->id,
                'police'=>$this->police ??'',
                'IDassure'=> $assure->id,
                'IDcompagnie'=>$this->compagnie,
                'date_effet'=>date('Y-m-d',strtotime(str_replace('/','-',$this->date_debut))),
                'date_echeance'=>date('Y-m-d',strtotime(str_replace('/','-',$this->resultDate))),
                'mvt_ordre'=> 0,
                'mvt_avenant'=> "NOUVELLE AFFAIRE",
                'status_avenant'=>"devis",
                'typeAvenant'=>'mono'
            ]
        );//-----------AVENANT

        $this->commissionBrute = (int) ((int) $this->totalPrimeNette * ((int)$this->taux_commission/100));//calcule commission brute
        
        if ($this->puissances) {
            $autocontrat = autocontrat::create(//----------------------CONTRAT
                [
                    'refcontratAuto'=>$avenant->refAvenant,
                    'IDavenant'=>$avenant->id,
                    'IDvehicule'=> $vehicule->id,
                    'IDproduit'=>$this->produit,
                    'IDrisque'=>1,//Id risque automobile
                    'exercice'=>date("Y"),//année de l'execice courant
                    'garanties'=>implode(',', $this->itemGarantie),
                    'IDpuissance'=>$this->puissances,
                    'bonus_commerciale'=>$this->bonus_com,
                    'prime_ttc'=>(int) $this->primeTTC,
                    'prime_brute'=>(int)$this->totalPrimeBrute,
                    'prime_nette'=>(int)$this->totalPrimeNette,
                    'accs_compagnie'=>(int)$this->accs_compagnie,
                    'accs_courtier'=>(int)$this->accs_courtier,
                    'taxe'=>(int)$this->totalTaxe,
                    'fga'=>(int)$this->calculefga,
                    'cdeao'=>(int)$this->totalCedeao,
                    'commission'=>(int)$this->commissionBrute,
                    'etat'=>'devis',
                    'valeurNeuve'=>(int)$this->valeur_neuve,
                    'ValeurVenale'=>(int)$this->valeur_venale,
                    'commission_nette'=>(int)(((int)$this->commissionBrute - ((int)$this->commissionBrute*7.5/100)) + $this->accs_courtier),
                ]
            );//----------------------CONTRAT
        }elseif($this->NombrePlace){
            $autocontrat = autocontrat::create(//----------------------CONTRAT
                [
                    'refcontratAuto'=>$avenant->refAvenant,
                    'IDavenant'=>$avenant->id,
                    'IDvehicule'=> $vehicule->id,
                    'IDproduit'=>$this->produit,
                    'IDrisque'=>1,//Id risque automobile
                    'exercice'=>date("Y"),//année de l'execice courant
                    'garanties'=>implode(',', $this->itemGarantie),
                    'IDplaceAssise'=>$this->NombrePlace,
                    'bonus_commerciale'=>$this->bonus_com,
                    'prime_ttc'=>(int) $this->primeTTC,
                    'prime_brute'=>(int)$this->totalPrimeBrute,
                    'prime_nette'=>(int)$this->totalPrimeNette,
                    'accs_compagnie'=>(int)$this->accs_compagnie,
                    'accs_courtier'=>(int)$this->accs_courtier,
                    'taxe'=>(int)$this->totalTaxe,
                    'fga'=>(int)$this->calculefga,
                    'cdeao'=>(int)$this->totalCedeao,
                    'commission'=>(int)$this->commissionBrute,
                    'etat'=>'devis',
                    'valeurNeuve'=>(int)$this->valeur_neuve,
                    'ValeurVenale'=>(int)$this->valeur_venale,
                    'commission_nette'=>(int)(((int)$this->commissionBrute - ((int)$this->commissionBrute*7.5/100)) + $this->accs_courtier),
                ]
            );//----------------------CONTRAT
        }elseif($this->puissances && $this->NombrePlace){
            $autocontrat = autocontrat::create(//----------------------CONTRAT
                [
                    'refcontratAuto'=>$avenant->refAvenant,
                    'IDavenant'=>$avenant->id,
                    'IDvehicule'=> $vehicule->id,
                    'IDproduit'=>$this->produit,
                    'IDrisque'=>1,//Id risque automobile
                    'exercice'=>date("Y"),//année de l'execice courant
                    'garanties'=>implode(',', $this->itemGarantie),
                    'IDplaceAssise'=>$this->NombrePlace,
                    'IDpuissance'=>$this->puissances,
                    'bonus_commerciale'=>$this->bonus_com,
                    'prime_ttc'=>(int) $this->primeTTC,
                    'prime_brute'=>(int)$this->totalPrimeBrute,
                    'prime_nette'=>(int)$this->totalPrimeNette,
                    'accs_compagnie'=>(int)$this->accs_compagnie,
                    'accs_courtier'=>(int)$this->accs_courtier,
                    'taxe'=>(int)$this->totalTaxe,
                    'fga'=>(int)$this->calculefga,
                    'cdeao'=>(int)$this->totalCedeao,
                    'commission'=>(int)$this->commissionBrute,
                    'etat'=>'devis',
                    'valeurNeuve'=>(int)$this->valeur_neuve,
                    'ValeurVenale'=>(int)$this->valeur_venale,
                    'commission_nette'=>(int)(((int)$this->commissionBrute - ((int)$this->commissionBrute*7.5/100)) + $this->accs_courtier),
                ]
            );//----------------------CONTRAT
        }


            $reste_a_payer = (int) ((int)$this->primeTTC - 0);// CALCULE DU RESTE A PAYER

            $paiement = Paiement::create([//--------------PAIEMANT
            'IDavenant'=> $avenant->id,
            'IDdevise'=> $this->devise,
            'status_paiement'=> $reste_a_payer == 0 ? 'payé' : 'impayé',
            'reglement'=>0,
            'cours'=>$this->cours,
            'montantRecu'=> 0,
            'Reste_a_payer'=> (int)$reste_a_payer,
            ]);//-------------PAIEMENT

            session()->flash('message', 'Cotation ajoutée à jour avec succès.');
            return redirect()->to('/cotation/momo-vehicule');
    }

    public function validateForm(){
        if ($this->currentStep===1) {
            $validate = $this->validate([
              'typeSouscripteur'=>'required',
              'raison_sociale'=>'required',
              'pays'=>'required',
              'ville'=>'required',
            ]);
        } elseif($this->currentStep===2){
            $validate = $this->validate([
             'produit'=>'required',
             'compagnie'=>'required',
           ]);
        }elseif($this->currentStep===3){
         $validate = $this->validate([
             'immatriculation'=>'required',
             'marque'=>'required',
             'modele'=>'required',
             'energie'=>'required',
             'date_mec'=>'required|date',
             'typeVehicule'=>'required',
             'puissance'=>'required|numeric',
             'NombrePlaces'=>'required|numeric',
             'genre'=>'required',
           ]);
        }elseif ($this->currentStep===4) {
            $validate = $this->validate([
                'valeur_neuve'=>'required|numeric',
                'valeur_venale'=>'required|numeric',
                'NombrePlace'=>'nullable|exists:place_vehicules,id',
                'zone_circulation'=>'required',
                'puissances'=>'nullable|exists:puissances,id',
              ]);
        }elseif ($this->currentStep===5) {
            $validate = $this->validate([
                'Nom_assure'=>'required',
                'contact_assure'=>'required',
              ]);
        }
        elseif ($this->currentStep===6) {
            $validate = $this->validate([
                'date_debut'=>'required|date',
                'duree_contrat'=>'required',
              ]);
        }
        elseif ($this->currentStep===7) {
            $validate = $this->validate([
                'accs_courtier'=>'required|numeric',
                'taux_commission'=>'required|numeric',
                'bonus_com'=>'nullable',
              ]);
              $this->getPrimeCotation('id');
        }
        elseif ($this->currentStep===8) {
            $validate = $this->validate([
                'devise'=>'required',
                'cours'=>'required',
              ]);
        }
    }

    public function souscripteurAssure(){
        
        if ($this->Oui_assure =='oui') {
           $this->Nom_assure = $this->raison_sociale;
           $this->email_assure = $this->email_souscripteur;
           $this->contact_assure = $this->tel_souscripteur;
        }elseif($this->Oui_assure =='non'){
           $this->Nom_assure = '';
           $this->email_assure = '';
           $this->contact_assure = '';
        }
    }


    #[Title('Dévis véhicule')]
    public function render()
    {
        $produits = Produit::orderBy('id','desc')->get();
        $compagnies = Compagnie::orderBy('id','desc')->get();
        $energies = Energie::orderBy('id','desc')->get();
        $dureesContrats = DureeContrat::get();
        $devises = Devise::get();
        $type_vehicules = TypeVehicule::get();
        $pays = Pay::get();
        $villes = Ville::get();
        return view('livewire.auto.souscription',[
            'produits'=>$produits,
            'compagnies'=>$compagnies,
            'energies'=>$energies,
            'dureesContrats'=>$dureesContrats,
            'garanties'=>Garanties::get(),
            'devises'=>$devises,
            'type_vehicules'=>$type_vehicules,
            'pays_c'=>$pays,
            'villes'=>$villes,
        ]);
    }
}

© 2025 UnknownSec
afwwrfwafr45458465
Password