name : CreateCaution.php
<?php

namespace App\Livewire\Caution;

use Livewire\Component;

use Livewire\Attributes\Title;
use App\Models\contrat\autocontrat;
use App\Models\{Garanties,Produit,
    Compagnie, Energie,DureeContrat,
    Avenant, Paiement,Devise, Souscripteur,
    Assure, Vehicule,Agence,
};
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Livewire\Attributes\Rule;
use Illuminate\Support\Facades\Auth;

class CreateCaution extends Component
{
     public $currentStep = 1;
    public $total_steps = 6;


    //------------variable souscripteur
    public $typeSouscripteur;
    public $raison_sociale;
    public $email_souscripteur;
    public $tel_souscripteur;
    //--------------------------------

    public $devise;
    
    public $montant_recu;

    //------------variable assuré
    public $Oui_assure ;
    public $Nom_assure;
    public $contact_assure;
    public $email_assure;
    //--------------------------------

     //--------------------------------variable CHOIX COMPAGNIE
    public $compagnie;
    public $agence;
    public $date_creation;

    public $duree;  
    public $resultDate;
    public $resultDateEffet;
    //------------

    public $Sous_Nom_produit;
    public $Nom_produit;

    //------------variable contrat
    public $prime_nette;
    public $police;
    public $accs_compagnie;
    public $accs_courtier;
    public $taxe;
    public $montantMarche;
    public $montantCaution;
    public $date_effet;
    public $duree_contrat;
    public $date_echeance;
    public $taux_commission;
    public $total_ttc;
    public $total_commission;
    //------------variable contrat

    public $res;

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

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

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

    public function CalculePrimeTTC(){// cacule de la prime ttc
       
        $this->total_ttc = (int)((int) $this->prime_nette + (int) $this->accs_compagnie + (int) $this->accs_courtier + (int) $this->taxe);
        
    }

    public function DureeContrat(){//detertminer la date d'échéance du contrat
        
        // Créez une instance de la date  
        $date = Carbon::parse($this->date_effet); // Obtenez la date sous forme d'objet Carbon  
        $dateEffet = Carbon::parse($this->date_effet);
        // 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(){//-------------FUNCTION D'ENREGISTREMENT AFFAIRE NOUVELLE MONO VEHICULE-------------
        
            $this->validateForm();//---------APPEL DE LA FUNCTION DE VALIDATION
            // sleep(2);
            
            $pttc = (int)((int) $this->prime_nette + (int) $this->accs_compagnie + (int) $this->accs_courtier + (int) $this->taxe);// CALCULE DE LA PRIME TTC

            if ( (int)$pttc < (int)$this->montant_recu) {
                $this->res = 'Vérifiez le montant reçu !';
                return false;
            }else{
                $this->res ='';
                
            }
           
            $soucripteur = Souscripteur::create(//-----------SOUSCRIPTEUR
                [
                    'raison_sociale'=> $this->raison_sociale,
                    'tel_souscripteur'=> $this->tel_souscripteur,
                    'email_souscripteur'=> $this->email_souscripteur,
                    'typeSouscripteur'=> $this->typeSouscripteur,
                ]
            );//--------------SOUSCRIPTEUR

            
            $assure = Assure::create(//----------ASSURE
                [
                    'IDsouscripteur'=>$soucripteur->id,
                    'nomAssure'=> $this->Nom_assure,
                    'telAssure'=> $this->contact_assure,
                    'emailAssure'=> $this->email_assure,
                ]
            );//--------------ASSURE
            
           
            $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,
                    'IDuser'=> Auth::user()->id,
                    'IDcompagnie'=>$this->compagnie,
                    'date_effet'=>date('Y-m-d',strtotime(str_replace('/','-',$this->date_effet))),
                    'date_echeance'=>date('Y-m-d',strtotime(str_replace('/','-',$this->resultDate))),
                    'mvt_ordre'=> 0,
                    'mvt_avenant'=> "NOUVELLE AFFAIRE",
                    'status_avenant'=>"production",
                    'typeAvenant'=>'mono',
                    'date_creation'=>date('Y-m-d',strtotime(str_replace('/','-',$this->date_creation)))
                ]
            );//-----------AVENANT

        
            $commissionBrute = (int) ((int) $this->prime_nette * ((int)$this->taux_commission/100));//calcule commission brute
          
            $autocontrat = autocontrat::create(//----------------------CONTRAT
                [
                    'refcontratAuto'=>$avenant->refAvenant,
                    'IDavenant'=>$avenant->id,
                    'IDagence'=>$this->agence,
                    'bonus_commerciale'=>(int)$this->taux_commission,
                    'IDproduit'=>$this->Nom_produit,
                    'sousCategorie'=>$this->Sous_Nom_produit,
                    'IDrisque'=>2,//Id risque automobile 
                    'exercice'=>date("Y"),//année de l'execice courant
                    'montantMarche'=>$this->montantMarche,
                    'montantCautionne'=>$this->montantCaution,
                    'prime_ttc'=>(int)((int) $this->prime_nette + (int) $this->accs_compagnie + (int) $this->accs_courtier + (int) $this->taxe),
                    'prime_nette'=>(int)$this->prime_nette,
                    'accs_compagnie'=>(int)$this->accs_compagnie,
                    'accs_courtier'=>(int)$this->accs_courtier,
                    'taxe'=>(int)$this->taxe,
                    'commission'=>(int)$commissionBrute,
                    'etat'=>'production',
                    'commission_nette'=>(int)(((int)$commissionBrute - ((int)$commissionBrute*7.5/100)) + $this->accs_courtier),
                ]
            );//----------------------CONTRAT


            

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

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

            session()->flash('message', 'Bordereau mis à jour avec succès.');
            return redirect()->to('/contrat/bordereau/caution');
        
    }//-------------FIN DE FUNCTION D'ENREGISTREMENT AFFAIRE NOUVELLE MONO VEHICULE-------------


     public function validateForm(){//-------------FUNCTION DE VALIDATION-------------
        if ($this->currentStep===1) {
            $validate = $this->validate([
              'typeSouscripteur'=>'required',
              'raison_sociale'=>'required',
            ]);
        } elseif($this->currentStep===2){
            $validate = $this->validate([
             'compagnie'=>'required',
             'agence'=>'required|exists:agences,id',
             'date_creation'=>'required|date',
           ]);
        }elseif ($this->currentStep===3) {
            $validate = $this->validate([
                'police'=>'required|unique:avenants,police',
                'prime_nette'=>'required|numeric',
                'accs_compagnie'=>'required|numeric',
                'accs_courtier'=>'required|numeric',
                'taxe'=>'required|numeric',
                'montantCaution'=>'required|numeric',
                'montantMarche'=>'required|numeric',
                'taux_commission'=>'required|numeric|',
              ]);
        }elseif ($this->currentStep===4) {
            $validate = $this->validate([
                'Nom_assure'=>'required',
                'contact_assure'=>'required',
              ]);
        }elseif($this->currentStep===5){
            $validate = $this->validate([
                'date_effet'=>'required|date',
                'duree_contrat'=>'required',
                'Nom_produit'=>'required|exists:produits,id',
                'Sous_Nom_produit'=>'required',
              ]);
        }
        elseif($this->currentStep===6){
            $validate = $this->validate([
                'devise'=>'required',
                'montant_recu'=>'required|numeric',
              ]);
        }
    }//-------------FIN DE FUNCTION DE VALIDATION-------------

    public function souscripteurAssure(){//-------------FUNCTION SOUSCRIPTEUR EST IL ASSURE ?-------------
        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('Caution')]
    public function render()
    {
        $compagnies = Compagnie::orderBy('id','desc')->get();
        $dureesContrats = DureeContrat::get();
        $devises = Devise::get();
        $produits = Produit::Where('codeProduit','caution')->orderBy('id','desc')->get();

        return view('livewire.caution.create-caution',[
            'compagnies'=>$compagnies,
            'dureesContrats'=>$dureesContrats,
            'devises'=>$devises,
            'agences'=>Agence::get(),
            'produits'=>$produits,
        ]);
    }
}

© 2025 UnknownSec
afwwrfwafr45458465
Password