IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Gérer les dates et les heures


Sujet :

Laravel PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut Gérer les dates et les heures
    Bonsoir,

    Je suis confronté à un soucis que je ne parviens pas à résoudre seul.

    Admettons que j'ai un formulaire qui est appelé Training et que j'encode des enregistrements.

    date training : 15/09/2019 | hour_start : 18:00 | hour_end : 20:00 | motorbike : 000001



    Mon problème est que si j'ai une moto qui est en révision je ne sais pas faire de vérification...

    Ici, on a la moto en révision du 01 septembre au 15 septembre 2019.



    Donc, si dans mon formulaire Training j'encode un entrainement, normalement, ça doit bloquer parce que la moto est en révision mais là, l'enregistrement s'ajoute.

    la date training : 15/09/2019 | hour_start : 08:00 | hour_end : 10:00 | motorbike : 000001




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
           $date_seance = Carbon::parse($request->get('date_seance'))->format('Y-m-d');
           $hour_start = $request->get('hour_start'); 
           $hour_end = $request->get('hour_end'); 
           $fk_motorbike = $request->get('fk_motorbike');
           $fk_student = $request->get('fk_student');
           $fk_former = $request->get('fk_former');
           $fk_typeseance = $request->get('fk_typeseance');
     
     
          $conflictTraining1 = Training::where('fk_motorbike', $request->get('fk_motorbike')) 
           ->whereDate('date_seance', "=" , Carbon::parse($date_seance)) 
           ->where('hour_start', "<=" , $request->get('hour_start')) 
           ->where('hour_end', ">=" , $request->get('hour_end'))
           ->where('fk_former', $request->get('fk_former'))
           ->first();
     
          $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
           ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
           ->where('hour_start', "<=" , $request->get('hour_start')) 
           ->where('hour_end', ">=" , $request->get('hour_end'))
           ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
           ->first();
    Avez-vous une idée du comment je pourrais gérer mes dates et mes heures? Pour information, j'utilise un time pour mes heures de débuts et de fins, je ne sais pas si c'est exacte?

    Merci pour votre aide.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Vous retournez quoi de vos deux requêtes ?

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour


    Dans ma requête `conflictTraining1`, je récupère le numéro de la moto et ensuite je compare la date de la séance qui est déjà enregistré dans ma database à celle que j'entre dans mon formulaire, pareil pour mes heures.

    Dans ma requête `conflictRevision`, idem je récupère le numéro de la moto, je compare la date de début de la révision avec la date de la séance et je fais cela aussi avec mes heures de début et de fin.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    ok, donc si vous avez une réponse à une des deux requêtes la moto n'est pas disponible.
    Quel est votre souci ?

  5. #5
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Disons que si j'encode un entrainement le 15/09/2019 | hour_start : 18:00 | hour_end : 20:00 | motorbike : 000001
    Et que j'encode ensuite une révision pour la moto 000001, le 01 septembre à partir de 14 heures jusqu'au 15 septembre 2019 à 16 heures.

    Et qu'après j'encode un entrainement le 15/09/2019 | hour_start : 08:00 | hour_end : 10:00 | motorbike : 000001, normalement ça doit bloquer vu que la moto est en révision, dans mon code cela ne bloque pas.. L'enregistrement passe; Donc j'ai un soucis de vérification.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    je peux voir l'ensemble du code ?

  7. #7
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Oui bien sûr, voici mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    <?php
     
    namespace App\Http\Controllers;
     
    use App\Motorbike;
    use App\Former;
    use App\Training;
    use App\Revision;
    use App\Student; 
    use App\Payment; 
    use App\Typeseance; 
     
    use Carbon\Carbon;
     
    use Illuminate\Http\Request;
     
    class TrainingController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
     
        public function index()
        {
            $trainings = Training::oldest()->paginate(5);
            return view('admin.trainings.index', compact('trainings'));
                    with('i', (request()->input('page', 1) -1) *5);
        }
     
     
     
        /**
         * Show the form for creating a new resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function create()
        {   
            $motorbikes = Motorbike::all();
            $formers = Former::all();
            $students = Student::all();
            $typeseances = Typeseance::all();
            return view('admin.trainings.create', compact('motorbikes','formers', 'students', 'typeseances', 'trainings'));
        }
     
        /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        public function store(Request $request)
        {
            $request->validate([
                    'date_seance' => 'required',
                    'hour_start' => 'required',
                    'hour_end' => 'required',
                    'fk_motorbike' => 'required',
                    'fk_former' => 'required',
                    'fk_student' => 'required',
                    'fk_typeseance' => 'required'
     
     
            ]);
     
     
           $date_seance = Carbon::parse($request->get('date_seance'))->format('Y-m-d');
           $hour_start = $request->get('hour_start'); 
           $hour_end = $request->get('hour_end'); 
           $fk_motorbike = $request->get('fk_motorbike');
           $fk_student = $request->get('fk_student');
           $fk_former = $request->get('fk_former');
           $fk_typeseance = $request->get('fk_typeseance');
     
     
         $conflictTraining1 = Training::where('fk_motorbike', $request->get('fk_motorbike')) 
           ->whereDate('date_seance', "=" , Carbon::parse($date_seance)) 
           ->where('hour_start', "<=" , $request->get('hour_start')) 
           ->where('hour_end', ">=" , $request->get('hour_end'))
           ->where('fk_former', $request->get('fk_former'))
           ->first();
     
          $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
           ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
           ->where('hour_start', "<=" , $request->get('hour_start')) 
           ->where('hour_end', ">=" , $request->get('hour_end'))
           ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
           ->first();
     
          if(isset($conflictRevision)) {
                return redirect()->route('trainings.index')
                 ->with('error', 'revision');
            }
     
           if(isset($conflictTraining1)){
                return redirect()->route('trainings.index')
                 ->with('error', 'training');
            }
     
          else{
                Training::create($request->all());
                    return redirect()->route('trainings.index')
                        ->with('success', 'Add');
            }
     
     
     
        }
     
        /**
         * Display the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function show($id)
        {
            //
        }
     
        /**
         * Show the form for editing the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function edit($id)
        {
            //
        }
     
        /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $id)
        {
            //
        }
     
        /**
         * Remove the specified resource from storage.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function destroy($id)
        {
            //
        }
    }

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,

    Vous avez une erreur de conception dans votre raisonnement.

    Vous associez deux dates de révision sur une seule période de temps en les comparant.

    Votre révision démarre le 01/09/2019 à 14:00 et se termine le 15/09/2019 à 16:00

    Votre entrainement démarre le 15/09/2019 de 18h à 20h hors cette date est une seule requête et vous la présentez en tant que telle.
    Je décortique votre requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike) // on cherche la moto : ok
           ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) est-ce que le 01/09/2019  est <= à 15/09/2019 : ok 
    
           ->where('hour_start', "<=" , $request->get('hour_start'))  est ce que 14h est <= à 16h , oui,  mais dans votre table et pour être exacte, vous essayer de comparer le 14h du 01.09.2019  au 18h du 15.09.2019, donc ici on a une incohérence
    
           ->where('hour_end', ">=" , $request->get('hour_end')) est ce que le 16h est >= au 20h ben non
     
           ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance)) est ce que la date de fin <= au 15.09 ok
           ->first();
    Donc votre souci, si situe ici : ->where('hour_end', ">=" , $request->get('hour_end')) est ce que le 16h est >= au 20h ben non
    Mais j'espère vous avoir fais prendre conscience que les heures, ne correspondent pas à vos dates

    Rapidement comme ça, je rajouterais deux attributs dans votre table :

    start : timestamp
    end : timestamp

    ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //revision
            $rStart = new Carbon('2019-09-01 08:00');
            $rStart->timestamp; // valeur à insérer
     
            $rStop = new Carbon('2019-09-15 14:00');
            $rStop->timestamp; // valeur à insérer
     
            //training
            $tStart = new Carbon('2019-09-15 16:00');
            $tStart->timestamp; // valeur à insérer
     
            $tStop = new Carbon('2019-09-15 20:00');
            $tStop->timestamp; // valeur à insérer
     
            // je vérifie que ces deux timestamp ne sont pas between avec les deux timestamp de la revision (en deux requêtes donc)
    En espérant ne pas vous avoir perdu

  9. #9
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir MaitrePylos,

    Je vous remercie avant tout pour votre réponse et vos explications.

    Je comprends un tout petit mieux, d'après ce que j'ai pu comprendre, mes heures ne correspondent pas à mes dates et je dois utiliser le format timestamp ?

    Après, je suis perdu... Désolé

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    En gros vous ajouter deux attributs à votre table

    start_time
    stop_time

    C'est deux attributs sont de type Timestamp

    pour une révision(ou trainig) vous les remplissez comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $start_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_start);
    $stop_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_stop);
     
    //ensuite dans votre dbime-
     
    $revision = new Revision();
     
    $revision->start_time = $start_time->timestamp // puisque objet Carbon
    $revision->start_time = $stop_time->timestamp // puisque objet Carbon
    $revision->.....
     
    $revision->save();

    Ensuite vous faites des test sur les timestamp plutôt que vos heures et dates

    exemple avec révision
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
           $date_seance = Carbon::parse($request->date_seance)->format('Y-m-d');
           $hour_start = $request->hour_start; 
           $hour_end = $request->hour_end; 
           $fk_motorbike = $request->fk_motorbike;
           $fk_student = $request->fk_student;
           $fk_former = $request->fk_former;
           $fk_typeseance = $request->fk_typeseance;
     
           $start_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_start);
           $stop_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_stop);
     
     
     
          $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
           ->where('start_time', "<=" , $start_time) 
           ->where('stop_time', ">=" , $stop_time)
           ->first();

    Une fois compris le concept, on pourras alors faire des mutator

  11. #11
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    Merci pour vos explications... Ca me parait compliqué tout ça...

    Ceci c'est dans la méthode store() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $start_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_start);
    $stop_time =  Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start.' '.$request->hour_stop);
     
    //ensuite dans votre dbime-
     
    $revision = new Revision();
     
    $revision->start_time = $start_time->timestamp // puisque objet Carbon
    $revision->start_time = $stop_time->timestamp // puisque objet Carbon
    $revision->....
     
    $revision->save();
    ici j'ajoute la date_revision_start, date_revision_end, hour_start, hour_end ?

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Alors en ajoutant les deux attributs (start_time et stop_time) dans les tables de la db.
    cela doit ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
        public function store(Request $request)
        {
            $request->validate([
                'date_seance' => 'required',
                'hour_start' => 'required',
                'hour_end' => 'required',
                'fk_motorbike' => 'required',
                'fk_former' => 'required',
                'fk_student' => 'required',
                'fk_typeseance' => 'required'
     
     
            ]);
     
     
            $start_time = Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start . ' ' . $request->hour_start);
            $stop_time = Carbon::createFromFormat('d-m-Y HH:ss', $request->date_revision_start . ' ' . $request->hour_stop);
     
            $conflictTraining1 = Training::where('fk_motorbike', $request->fk_motorbike)
                ->where('start_time', "<=", $start_time)
                ->where('stop_time', ">=", $stop_time)
                ->first();
     
            $conflictRevision = Revision::where('fk_motorbike', $request->fk_motorbike)
                ->where('start_time', "<=", $start_time)
                ->where('stop_time', ">=", $stop_time)
                ->first();
     
            if (isset($conflictRevision)) {
                return redirect()->route('trainings.index')
                    ->with('error', 'revision');
            }
     
            if (isset($conflictTraining1)) {
                return redirect()->route('trainings.index')
                    ->with('error', 'training');
            }
     
            $data = $request->all();
            $data->start_time = $start_time;
            $data->stop_time = $stop_time;
            Training::create($data);
            return redirect()->route('trainings.index')
                ->with('success', 'Add');
     
     
        }

  13. #13
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour MaitrePylos,

    Un grand merci pour votre aide, je vais tester cela dès que je serais à la maison ce soir.

    Pour info, on est d'accord pour ce qui est du Model et de la Database?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected $fillable = [ 'date_seance' , 'hour_start' ,'hour_end' , 'fk_motorbike', 'fk_former' , 'fk_student' , 'fk_typeseance',  'start_time', 'stop_time'];
     
    protected $dates = [ 'date_seance' , 'start_time', 'stop_time'];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     {
        $table->increments('id');
        $table->date('date_seance');
        $table->time('hour_start');
        $table->time('hour_end');
        etc...
        $table->timestamp('start_time');
        $table->timestamp('stop_time');
        $table->timestamps();


    J'ai encore une dernière petite question, dans mon formulaire

  14. #14
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    mes exemples sont juste des exemples.
    Maintenant j'aurais suivi la convention Laravel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    protected $dates = [ 'date_seance' , 'start_at', 'stop_at'];
    Ces deux attributs vous devez les ajouter dans la table training et revision
    Une fois que tout roule, après quelques essais

    Je vous expliquerais alors comment vérifier cela dans un validateur

  15. #15
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Merci beaucoup MaitrePylos, je test cela dès que je rentre à la maison ce soir.

    Je vous remercie encore pour votre aide.

  16. #16
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    En copiant votre code j'ai un petit message d'erreur
    Attempt to assign property 'start_time' of non-object
    je suppose que je dois déclarer la variable, plus haut ?

    Aussi, pour la création du formulaire, vous aurez bien ceci ?
    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <form action="{{route('trainings.store')}}" method="post">
     
      				{{ csrf_field() }}
     
     
              <div class="form-group{{ $errors->has('date_seance') ? 'has-error' : '' }}">
                    <label for="form-group-input-1">Date seance</label>
                    <input type="date" name="date_seance" id="date_seance" class="form-control" required="required" value="{{ old('date_seance')}}"/>
                    {!! $errors->first('date_seance', '<span class="help-block">:message</span>') !!}
              </div>
     
              <div class="form-group{{ $errors->has('hour_start') ? 'has-error' : '' }}">
                    <label for="form-group-input-1">Hour start</label>
                    <input type="text" name="hour_start" id="hour_start" class="form-control" required="required" value="{{ old('hour_start')}}"/>
                    {!! $errors->first('hour_start', '<span class="help-block">:message</span>') !!}
              </div>
     
               <div class="form-group{{ $errors->has('hour_end') ? 'has-error' : '' }}">
                    <label for="form-group-input-1">Hour end</label>
                    <input type="text" name="hour_end" id="hour_end" class="form-control" required="required" value="{{ old('hour_end')}}"/>
                    {!! $errors->first('hour_end', '<span class="help-block">:message</span>') !!}
              </div>
     
     
              <div class="form-group {{ $errors->has('fk_motorbike') ? 'has-error' : '' }}">
                   <label for="company-content">Number motorbike </label>
                  <select name="fk_motorbike" id="fk_motorbike" class="form-control" required="required" value="{{ old('fk_motorbike')}}"/>
                    <option value="">Choice motorbike</option>
                      @foreach($motorbikes as $motorbike)
                        <option value="{{$motorbike->id}}" {{ old('fk_motorbike') == $motorbike->id ?  'selected' : '' }} >
                      {{$motorbike->number_motorbike}} 
                    </option>
                      @endforeach
                      {!! $errors->first('fk_motorbike', '<span class="help-block">:message</span>') !!}
                  </select>
              </div>
     
              <div class="form-group {{ $errors->has('fk_former') ? 'has-error' : '' }}">
                   <label for="company-content">Name former </label>
                  <select name="fk_former" id="fk_former" class="form-control" required="required" value="{{ old('fk_former')}}"/>
                    <option value="">Choice former</option>
                      @foreach($formers as $former)
                        <option value="{{$former->id}}" {{ old('fk_former') == $former->id ?  'selected' : '' }} >
                      {{$former->name}} 
                    </option>
                      @endforeach
                      {!! $errors->first('fk_former', '<span class="help-block">:message</span>') !!}
                  </select>
              </div>
     
              <div class="form-group {{ $errors->has('fk_student') ? 'has-error' : '' }}">
                   <label for="company-content">Name student </label>
                  <select name="fk_student" id="fk_student" class="form-control" required="required" value="{{ old('fk_student')}}"/>
                    <option value="">Choice student</option>
                      @foreach($students as $student)
                        <option value="{{$student->id}}" {{ old('fk_student') == $student->id ?  'selected' : '' }} >
                      {{$student->name}} 
                    </option>
                      @endforeach
                      {!! $errors->first('fk_student', '<span class="help-block">:message</span>') !!}
                  </select>
              </div>
     
              <div class="form-group {{ $errors->has('fk_typeseance') ? 'has-error' : '' }}">
                   <label for="company-content">Type seance </label>
                  <select name="fk_typeseance" id="fk_typeseance" class="form-control" required="required" value="{{ old('fk_typeseance')}}"/>
                    <option value="">Choice typeseance</option>
                      @foreach($typeseances as $typeseance)
                        <option value="{{$typeseance->id}}" {{ old('fk_typeseance') == $typeseance->id ?  'selected' : '' }} >
                      {{$typeseance->duration}}  {{$typeseance->price}} 
                    </option>
                      @endforeach
                      {!! $errors->first('fk_typeseance', '<span class="help-block">:message</span>') !!}
                  </select>
              </div>

  17. #17
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Le formulaire il y a rien à changer:

    Pour l'erreur c'est ici je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $data = $request->all();
            $data->start_time = $start_time;
            $data->stop_time = $stop_time;
    //remplacer par
     $data = $request->all();
            $data['start_time'] = $start_time;
            $data['stop_time'] = $stop_time;

  18. #18
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir MaitrePylos,

    Merci beaucoup !! Mon problème concernant le planning Revision => Training semble fonctionner correctement !! Je vous en suis infiniment reconnaissant.

    Maintenant, j'aimerais créer mon système de planning, Training => Revision via mon Controller Revision.

    Donc dans ma database j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Schema::create('revisions', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->date('date_revision_start');
                $table->date('date_revision_end');
                $table->time('hour_start');
                $table->time('hour_end');
                $table->string('garage');
                $table->integer('fk_motorbike')->unsigned();
                $table->foreign('fk_motorbike')->references('id')->on('motorbikes');
                $table->timestamp('start_time');
                $table->timestamp('stop_time');
                $table->timestamps();
    Mon model Revision:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       protected $fillable = ['date_revision_start', 'date_revision_end', 'hour_start', 'hour_end', 'garage', 'fk_motorbike', 'start_time', 'stop_time'];
     
        protected $dates = ['date_revision_start', 'date_revision_end', 'start_time', 'stop_time'];

    Donc, pour revenir à ce que je souhaite faire. J'aimerais vérifier 2 choses:

    Premier problème:

    Tout d'abord j'aimerais vérifier ma date de début de la révision et de fin ainsi que les heures de début et de fin.

    Ici, j'encode le 01/09/2019 au 15/09/2019 de 14:00 à 16:00




    Et que j'encode maintenant par exemple un autre enregistrement: 10/09/2019 au 12/09/2019 de 14:00 à 16:00 normalement ça doit bloquer ??

    Auparavant j'utilisais cette ligne de code: le problème est que je prends pas en compte les heures, ce qui est un problème
    Normalement, si j'ai une formation le 15/09/2019 de 17:00 à 19:00 ça doit passer!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $conflictRevision = Revision::where('fk_motorbike', $request->get('fk_motorbike'))
    ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_revision_start)) 
    ->whereDate('date_revision_end', ">=", Carbon::parse($date_revision_end)) 
    ->first();

    J'ai essayé de reprendre votre code, qui concernant le Controller Training, mais je rencontre encore des difficultés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public function store(Request $request)
        {
            $request->validate([
                    'date_revision_start' => 'required',
                    'date_revision_end' => 'required',
                    'hour_start' => 'required',
                    'hour_end' => 'required',
                    'garage' => 'required',
                    'fk_motorbike' => 'required'
     
            ]);
     
     
     
            $start_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_start);
            $stop_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_end);
     
     
     
            $conflictRevision = Revision::where('fk_motorbike', $request->get('fk_motorbike'))
            ->where('start_time', "<=", $start_time)
            ->where('stop_time', ">=", $stop_time)
            ->first();
     
     
     
            if (isset($conflictRevision)) {
                return redirect()->route('revisions.index')
                    ->with('error', 'La moto est déjà en révision');
            }
     
     
     
     
            $data = $request->all();
            $data['start_time'] = $start_time;
            $data['stop_time'] = $stop_time;
            Revision::create($data);
            return redirect()->route('revisions.index')
                ->with('success', 'Add');
     
        }

    Voici une idée de mon ancien code, qui fonctionnait à moitié...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public function store(Request $request)
        {
            $request->validate([
                    'date_revision_start' => 'required',
                    'date_revision_end' => 'required',
                    'hour_start' => 'required',
                    'hour_end' => 'required',
                    'garage' => 'required',
                    'fk_motorbike' => 'required'
     
            ]);
     
            $date_revision_start = Carbon::parse($request->get('date_revision_start'))->format('Y-m-d');
            $date_revision_end = Carbon::parse($request->get('date_revision_end'))->format('Y-m-d');
            $hour_start = $request->get('hour_start');
            $hour_end = $request->get('hour_end');
            $garage = $request->get('garage');
            $fk_motorbike = $request->get('fk_motorbike');
     
     
     
            $conflictRevision = Revision::where('fk_motorbike', $request->get('fk_motorbike'))
            ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_revision_start))
            ->whereDate('date_revision_end', ">=", Carbon::parse($date_revision_end))
            ->first();
     
            $conflictTraining1 = Training::where('fk_motorbike', $fk_motorbike)
            ->whereDate('date_seance', "<=" ,  Carbon::parse($date_revision_start))
            ->where('hour_start', "<=" , $request->get('hour_start'))  
            ->where('hour_end', ">=" , $request->get('hour_end'))
            ->first();
     
            $conflictTraining2 = Training::where('fk_motorbike', $fk_motorbike)
            ->whereDate('date_seance', ">=" , Carbon::parse($date_revision_end))
            ->where('hour_start', "<=" , $request->get('hour_start'))  
            ->where('hour_end', ">=" , $request->get('hour_end'))
            ->first();



    Merci pour votre temps et bonne soirée.

  19. #19
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Vous devez apprendre à lire vos requêtes SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      $conflictRevision = Revision::where('fk_motorbike', $request->get('fk_motorbike'))
            ->where('start_time', "<=", $start_time)
            ->where('stop_time', ">=", $stop_time)
            ->first();
    Voici ce que je lis.

    Citation Envoyé par maitrepylos

    Sélectionne tous les attribut de la table 'revision'
    qui ont l'attribut 'fk_motorbike' égale à ce que récupère mon formulaire
    que le début de la révision soit inférieur ou égale au début de ma recherche 'ET' que la fin de revision soit supérieur ou égale à la fin de ma recherche

    Hors vous devez chercher des correspondances :

    1 - Si la moto existe
    2- si le début du training est compris entre le debut et la fin de la revision
    3- si la fin du training est compris entre le debut et la fin de la revision

  20. #20
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Je pense que ça doit être comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $conflictRevision = Revision::where('fk_motorbike', $request->get('fk_motorbike'))
    ->where('start_time', "=", $start_time)
    ->where('stop_time', "=", $stop_time)
    ->first();

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/02/2007, 12h10
  2. Gérer les heures sur un forum.
    Par psychoBob dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 18/04/2006, 09h59
  3. Comment tronquer une date (supprimer les heures)
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 27/01/2006, 15h58
  4. Gérer les dates avec SQL Server 2000
    Par saby dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/01/2006, 18h06
  5. [Modèle Relationnel] gérer les dates
    Par allowen dans le forum Schéma
    Réponses: 10
    Dernier message: 13/10/2004, 19h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo