Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 13h25   #1
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Par défaut Symfony formulaire multiple type facture

Bonjour,

Je veux créer un formulaire de facture avec plusieurs articles. Voilà des jours que je cherche comment y arriver mais c'est l'impasse. J'essaie de télécharger le plugin ahEasyDoctrineEmbeddedRelationPlugin mais c'est pas possible j'ai un probléme avec pear.php. J'ai symfony 1.4.5 avec php5.3.0

Je vous mets le max de code pour pouvoir m'aider car je dois terminer cette application dans une semaine et c'est pour mon rapport de stage.

voilà mon schéma.yml il me semble correct mais j'ai des doutes quant aux relations entre facture et prestation.
Code :
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
Client:
  columns:
    id:
      type: integer(4)      
      primary: true
      autoincrement: true
    rais_soc:
      type: string(250)      
    adresse:
      type: string(250)      
    cod_postal:
      type: integer(5)      
    ville:
      type: string(30)      
    tel:
      type: integer(10)
 
Contenir:  
  columns:
    prestation_id:
      type: integer(4)
      primary: true      
    facture_id:
      type: integer(4) 
      primary: true     
    quantite:
      type: integer(4)      
  relations:
    Facture:
      foreignAlias: Contenirs
    Prestation:
      foreignAlias: Contenirs
 
Facture:  
  columns:
    id:
      type: integer(4)      
      primary: true      
    client_id:
      type: integer(4)            
    date_fre:
      type: string(10)      
    montant_fre:
      type: integer      
  relations:
    Client:
      foreignAlias: Factures     
 
Prestation:  
  columns:
    id:
      type: integer(4)      
      primary: true
      autoincrement: true
    designation:
      type: string(250)      
    pu:
      type: integer(4)      
  relations:
    Factures:
      foreignAlias: Prestations
      class: Facture
      refClass: Contenir
 
Reglement:  
  columns:
    id:
      type: integer(4)      
      primary: true
      autoincrement: true
    facture_id:
      type: integer(4)      
    date_reglement:
      type: string(10)      
    montant_reglement:
      type: integer(4)
 
  relations:
    Facture:
      foreignAlias: Reglements
voilà mon action class de facture:
Code :
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
public function executeNew(sfWebRequest $request)
  {
    $this->form = new factureForm();
	//$this->form1 = new prestationForm();
  }
 
  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));
 
    $this->form = new factureForm();
	//$this->form1 = new prestationForm();
 
    $this->processForm($request, $this->form);
 
    $this->setTemplate('new');
  }
 
  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($facture = Doctrine::getTable('facture')->find(array($request->getParameter('id'))), sprintf('Object facture does not exist (%s).', $request->getParameter('id')));
    $this->form = new factureForm($facture);
  }
 
  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($facture = Doctrine::getTable('facture')->find(array($request->getParameter('id'))), sprintf('Object facture does not exist (%s).', $request->getParameter('id')));
    $this->form = new factureForm($facture);
 
    $this->processForm($request, $this->form);
 
    $this->setTemplate('edit');
  }
 
  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();
 
    $this->forward404Unless($facture = Doctrine::getTable('facture')->find(array($request->getParameter('id'))), sprintf('Object facture does not exist (%s).', $request->getParameter('id')));
    $facture->delete();
 
    $this->redirect('facture/index');
  }
 
  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
	//$form1->bind($request->getParameter($form1->getName()), $request->getFiles($form1->getName()));
 
    if ($form->isValid())
    {
      $facture = $form->save();
 
      $this->redirect('facture/edit?id='.$facture->getId());
    }
  }
}
voilà le formulaire facture :
A noter que quand je met $this-> embedRelation ça marche pas, j'ai un message d'erreur.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
class FactureForm extends BaseFactureForm
{
  public function configure()
  { 
	unset($this['PU']);	
 
		$this->embedForm('prestations', new PrestationForm());
 
  }
 
 
}
avec ce formulaire j'ai le formulaire prestation(equivalent à article) mais une seule ligne. Si quelqu'un peut m'aider à résoudre ce probléme svp.Merci.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 13h47   #2
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Bonjour sipap,

La relation entre Facture et Prestation n'est pas claire en effet, d'après ton schema c'est une relation many to many : pour une prestation tu peux avoir plusieurs factures et pour une facture tu peux avoir plusieurs prestation. Est-ce bien ce que tu veux ? Si ce n'est pas le cas, alors pas de many-many et pas de table 'contenir'.

Si c'est bien le cas je reverrai le schema de Contenir plutôt de cette manière :

Code :
1
2
3
4
5
6
7
8
Contenir:
  columns:
    prestation_id:  { type: integer(11), primary: true }
    facture_id:     { type: integer(11), primary: true }
    quantite:       { type: integer(4) }
  relations:
    Prestation:     { local: prestation_id, foreign: id, onDelete: CASCADE }
    Facture:        { local: facture_id, foreign: id, onDelete: CASCADE }
Je ne me suis pas vraiment occupé de ce qu'il y avait autour.

Ensuite deuxième point, si tu n'arrives pas à utiliser la commande plugin install à cause de pear (comme beaucoup de gens) je te suggère l'installation manuelle tout simplement. En lisant la doc tu devrais trouver ou placer quels répertoires.

Et enfin pour l'embarquement des formulaires j'ai peur de ne pas bien comprendre ce que tu cherches à faire : peux-tu le décrire de manière plus explicite ? Si tu parviens à installer ton plugin tu y arriveras peut-être de manière plus simple, mais pour ma part je ne l'ai jamais utilisé, j'ai toujours fait mes embarquements de formulaire à la main.

Bon courage !
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 20h24   #3
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Bjr Nico,

Merci pour ta réponse. Donc j'ai modifié le schema.yml. En ce qui concerne l'installation du plugin à la main c'est trop galére, quand je dépasse une étape j'ai un nouveau probléme, au finish j'étais à l'étape où il faut faire entrée mais quand je faisais entrée j'avais un bug mon ordi ne répondait pas. Même si j'aurais bien aimé pouvoir installer le plugin car aprés je dois installer le plugin fpdf pour pouvoir imprimer la facture par la suite mais pour le moment c'est une autre paire de manche.
Pour revenir à mon probléme de formulaire, je veux créer un formulaire de la facture et donc dans une facture j'ai plusieurs lignes de prestations ( sachant que les prestations existent déjà) il faut juste afficher le nbre de prestations souhaitées ainsi que le PU ( qui existe déjà aussi). Aprés je dois pouvoir ajouter une ligne pour la quantité ( de ce fait sur une ligne de prestation je dois avoir la designation, le PU et la quantité et le montant pour la ligne de prestation). Donc voilà je crois qu'il est beaucoup plus interessant pour moi de le faire à la main aussi et j'apprendrai plus de ce fait.
Pour le moment j'arrive à afficher dans mon formulaire, fait à la main, une ligne de prestation avec la designation et le PU (seulement j'arrive pas à avoir une liste déroulante pour selectionner la désignation souhaitée ainsi que le PU qui va avec). Merci à toi c'est vraiment hyper important pour moi car l'obtention de mon diplôme en dépend.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 17h34   #4
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : avril 2011
Messages : 95
Points : 142
Points : 142
Ok alors voila ce que j'ai compris :

Pour une facture, la relation avec les prestations existe déjà, donc du coup tu peux déjà afficher un formulaire de facture avec le nombre de ligne correspondant au nombre de prestations déja associées et avec des champs vides et des champs remplis pour chaque ligne.

J'ai été confronté à ce cas et j'ai résolu mon problème avec les formulaires embarqués : tu peux jeter un oeil à ma démarche qui se rapproche beaucoup de la tienne sur ce topic.

Ensuite pour ce qui est de ta liste déroulante sur la désignation : vu ton schéma la désignation est propre à une prestation, si tu veux proposer plusieurs choix il faut que tu surcharges toi même le widget de la désignation pour en faire un sfWidgetFormChoice par exemple et dans lequel tu mettras les valeurs en brut de ce que tu veux proposer.

Aide toi de mon topic, approprie-le toi et refais le avec tes objets. Ça devrait être ok :-)
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 20h17   #5
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
ok en effet, j'avais déjà vu ton topic. Mais je l'avais déjà essayé mais ça ne marche pas. En fait quand je fais getPrestations dans l'action ça ne marche pas, j'ai ce message d'erreur :
Fatal error: Call to a member function getPrestations() on a non-object in C:\dev\sfproject\APPLI\apps\frontend\modules\facture\actions\actions.class.php on line 58.
Donc voilà je ne sais plus à quel saint me vouer avec ce formulaire. J'ai eu dans un post içi qu'avec symfony pour avoir un formulaire de facture c'est galére. Bin je le constate amérement.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 23h34   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
As-tu pu installer le plugin ?

Peux-tu mettre ton shema actuel (il a changé semblerait-il).

Mettre le code qui génère l'erreur je suppose que, lui aussi, à évolué.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h49.


 
 
 
 
Partenaires

Hébergement Web