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

Symfony PHP Discussion :

Calcul de différence de date pour calcul de tarif journalier


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut Calcul de différence de date pour calcul de tarif journalier
    Bonjour,

    Je débute complètement en symfony et suis perdue. Je fais un petit site pour faire des réservations et souhaite faire la difference de 2 dates pour obtenir le nombre de jours et ainsi calculer le tarif du sejour sachant que 3 tarifs sont proposés selon le type d'hebergement (eco,standard,luxe), j'ai donc fait un formulaire avec id, nom, date de depart date de retour, prix. Je voudrais insérer le calcul du prix dans un tableau récapitulatif twig qui apparait apres la validation du formulaire afin d'afficher le prix en fonction du nb de jours.
    mon controller :
    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
    #Date de départ type calendrier
                ->add('dateStart', DateType::class, [
                    'label'=>'date de départ',
                    'required'=>true,
                    // prevents rendering it as type="date", to avoid HTML5 date pickers
                    'html5' => false,
                    'widget'=>'single_text',
                    'format' => 'dd-MM-yyyy',
                    // adds a class that can be selected in JavaScript
                    'attr' => ['class' => 'js-datepicker'],
     
                ])
     
                # Date de retour type calendrier
                ->add('dateEnd', DateType::class, [
                    'label'=>'date de retour',
                    'widget'=>'single_text',
                    'required'=>true,
                    'format' => 'dd-MM-yyyy',
                    // prevents rendering it as type="date", to avoid HTML5 date pickers
                    'html5' => false,
                    'attr' => ['class' => 'js-datepicker'],
                ])
     
                ->getForm();
     
     
                $form->handleRequest($request);
     
     
                if ($form->isSubmitted() && $form->isValid()) {
     
                    # CALCUL DES TARIFS       
                    $price = 0;
                    $dateStart = DateTime::createFromFormat('m-d-Y', $dateStart)->getTimestamp();
                    $dateEnd = DateTime::createFromFormat('m-d-Y', $dateEnd)->getTimestamp();
                    echo ($dateStart- $dateEnd) / (24*60*60);  // 86400 might save some math
     
                     #registration.accommodation sont les données recueillies apres validation du formulaire, c'est ce que je veux mais ça ne se présente pas comme ça
                    // if (registration.accommodation_type = 'economique'){
                    // $price = $nbJours * 5000,
                    // elseif (registration.accommodation_type = 'standard') {
                    //   $price =$nbJours * 8000;
                    // }
                    // else {
                    //   $price=$nbJours * 15000;
                    // }
                    $registration->setPrice($price);
    mon twig
    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
      <tr>
      <th>Date de départ</th>
      <td>{{ registration.dateStart|date("d-M-Y") }}</td>
     </tr>
      <tr>
      <th>Date de retour</th>
      <td>{{ registration.dateEnd|date("d-M-Y") }}</td>
      </tr>
     
      <tr>
      <th>Type d'hébergement</th>
      <td>{{ registration.accommodation_type}}</td>
     </tr>
      <tr>
      <th>Cout</th>
      <td> {{ price }}</td> // ici le montant price selon le type d'hébergement (accommodation_type) sélectionné dans le formulaire-> if eco *500 /if standard *800 /if luxe*1000
     </tr>

    Pouvez m'éclairer s'il vous plait !!! Mille mercis pour votre aide !!

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    Petit conseil général pour commencer, lire la documentation est (presque) toujours une bonne idée pour se familiariser avec les composants, voir comment il s'utilisent/se paramètrent (souvent avec des exemples de code et pas trop de blabla théorique. Pour les formulaires à mon avis tu peux commencer ici : https://symfony.com/doc/current/form...building-forms (si la barrière de la langue n'est pas trop un problème pour toi, n'hésite pas à prendre le temps de te plonger dans la lecture avant de coder).

    Ensuite pour répondre plus spécifiquement à ta question d'origine, à mon avis il y a deux sujets précis :
    - https://symfony.com/doc/current/form...ocessing-forms
    - https://symfony.com/doc/current/temp...ting-templates

    Le premier lien détaille comme traiter un formulaire, c'est-à-dire comment détecter qu'il a été soumis, valider les données et utiliser ces données pour en faire ce qu'on veut (dans ton cas, calculer un tarif, probablement le sauvegarder quelque part et l'afficher à l'utilisateur).

    Le deuxième lien montre comment depuis un contrôleur on peut "passer" des variables à un template Twig et en faire le rendu (afficher ce rendu en réponse).

    Normalement tu devrais avoir toutes les informations pour :
    - récupérer les dates choisies
    - récupérer le type d'hébergement sélectionné
    - calculer ton tarif
    - éventuellement sauvegarder ce tarif
    - passer les informations pertinentes à un template
    - retourner à l'utilisateur le rendu du template pour lui afficher un récapitulatif du tarif/de sa réservation (selon ce que tu veux faire)

    Bon courage et n'hésite pas à revenir poser des questions ici !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Merci beaucoup Thomas pour ton aide, je vais regarder attentivement les docs..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de date pour un projet
    Par sarahjayne dans le forum ALM
    Réponses: 4
    Dernier message: 29/05/2011, 08h51
  2. Difference entre deux dates pour une alertes
    Par litlepom dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/05/2010, 17h59
  3. Probleme de calcul: resultat different avec long et float
    Par Dazdh dans le forum Général Java
    Réponses: 4
    Dernier message: 11/03/2009, 14h59
  4. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 08h31
  5. Decode avec des dates pour calculer une valeur
    Par decisio dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2009, 12h50

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