Bonjour,
j'ai un problème de traitement d'une page contenant un formulaire.
L'objectif de cette page est de permettre à un utilisateur (chef de projet) de rentrer l'activité (nombre d'heures effectuées et facturables)de plusieurs personnes sur plusieurs contrat. Ce form doit être très pratique.
Une première page permet de sélectionner tous les contrats, puis une requête permet de savoir tous les salariés sur le contrat. (on voit apparaître deux boucles)
Voici ma vue :
et mon controlleur pour afficher la vue :
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 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<projet.Models.CreationActivite>" %> <asp:Content ID="Content2" ContentPlaceHolderID="contenuTitre" runat="server"> Saisie de l'activité </asp:Content> <asp:Content ID="Content1" ContentPlaceHolderID="contenuContenu" runat="server"> <h1>Saisie de l'activité</h1> <% Html.EnableClientValidation(); %> <% using (Html.BeginForm("CreerActivite", "Activite", null, FormMethod.Post)) {%> <%: Html.ValidationSummary(true, "Échec de la saisie de l'activité. Corrigez les erreurs et réessayez.")%> Activité du <%: (int)ViewBag.mois %> / <%: (int)ViewBag.annee %> <% foreach(int idContrat in (List<int>)ViewBag.listeIdContrat){ %> <% itsges.Models.ContratModele c = new itsges.Models.ContratModele(idContrat);%> <h2><%: c.Nom %></h2> <% List<itsges.Models.EmployeModele> l = itsges.Models.EmployeModele.ListeEmployeSurPeriode(c.Id, ViewBag.dateDeb, ViewBag.dateFin); %> <table class="presentationDonnees"> <thead> <tr> <td>Profil</td> <td>Personne</td> <td>Nb heures prestées - Nb heures facturables | Initial - Consommé - Reste à faire</td> </tr> </thead> <% if (!l.Any()) {%> </table> Pas d'affectations pour ce contrat.<br /> <%} %> <%else { %> <tbody> <% foreach(itsges.Models.EmployeModele emp in l){ %> <tr> <td><% itsges.Models.TypeProfilModele tp = new itsges.Models.TypeProfilModele(emp.IdTypeProfil); Response.Write(tp.Nom); %></td> <td><% //itsges.Models.PersonneModele pers = new itsges.Models.PersonneModele(emp.CodePers); Response.Write(emp.CodePers); %></td> <td> <%: Html.TextBoxFor(m => m.nbHPrestees, new { style = "width:50px" })%> <%: Html.ValidationMessageFor(m => m.nbHPrestees, "*")%> <%: Html.TextBoxFor(m => m.nbHFacturables, new { style = "width:50px" })%> <%: Html.ValidationMessageFor(m => m.nbHFacturables, "*")%> | 100 - 80 - 20 <input type="text" name="nbHPrest" id="Text2" value="<%= emp.Id %>" /> </td> </tr> <%} %> </tbody> </table> <%} %> <%} %> <input name="envoyer" value="Enregistrer" type="submit"/> <%} %> </asp:Content>
Ainsi que ma tentative de modele pour m'aider à valider ce formulaire :
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 public ActionResult CreerActivite(String idContrat, String date) { List<int> listeIdContrat = new List<int>(); string[] words = idContrat.Split('-'); foreach (string idString in words) { if(!idString.Equals("")) listeIdContrat.Add(Int32.Parse(idString)); } DateTime dateTest = DateTime.ParseExact(date, "dd-MM-yyyy", null); int nbJourMois = DateTime.DaysInMonth(dateTest.Year, dateTest.Month); ViewBag.mois = dateTest.Month; ViewBag.annee = dateTest.Year; ViewBag.dateDeb = dateTest.Year + "-" + dateTest.Month + "-01"; ViewBag.dateFin = dateTest.Year + "-" + dateTest.Month + "-" + nbJourMois; ViewBag.listeIdContrat = listeIdContrat; return View(); }
Comment traiter mon problème ? pour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class CreationActivite { [Required] [Display(Name = "Nb h. prestées")] public double nbHPrestees { get; set; } [Required] [Display(Name = "Nb h. facturables")] public double nbHFacturables { get; set; } }
- vérifier que les données sont OK (non vides) (un unique htmlhelper ne suffit pas car même ID) ;
- Savoir quelle ligne appartient à quel contrat (j'ai pensé mettre un champs hidden à la fin de la ligne mais c'est BOF) ;
- ne pas traiter chaque activité l'une après l'autre, ce qui prendrait trop de temps.
N'hésitez pas à me demander plus d'informations si quelque chose n'est pas clair.
Merci par avance.
@+
Partager