shell bypass 403
<?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, ]); } }