//ajouter dates
 /// <summary>
 /// Constructeur de la classe Task
 /// </summary>
 /// <param name="Tactivity">Activité relative à la tâche</param>
 /// <param name="Tastronauts">Liste des astronautes qui effectue la tâche</param>
 /// <param name="DureeMinute">Durée de la tâche</param>
 /// <param name="StartHour">Début de la tâche</param>
 /// <param name="X">Position X</param>
 /// <param name="Y">Position Y</param>
 public Task(Activity Tactivity, List<Astronaut> Tastronauts, int DureeMinute, int StartHour, int X, int Y)
 {
     Name = Tactivity.Name;
     Activity = Tactivity;
     this.DurationMinute = DureeMinute;
     this.StartHour = StartHour;
     Astronauts = Tastronauts;
     this.Xposition = X;
     this.Yposition = Y;
 }
        public void TaskInfoTest()
        {
            int NumberDay = 0; // TODO: initialisez à une valeur appropriée
            Day target = new Day(NumberDay); // TODO: initialisez à une valeur appropriée
            List<Astronaut> a = new List<Astronaut>();
            Activity act = new Activity("Test");
            Task task = new Task(act,a,50,50,10,10); // TODO: initialisez à une valeur appropriée

            string[] expected = { "", target.ToString(), "0H50", "1H40", task.Name }; // TODO: initialisez à une valeur appropriée
            string[] actual;
            actual = target.TaskInfo(task);
            CollectionAssert.AreEqual(expected, actual);
        }
 public void getInfoTest()
 {
     Activity Tactivity = new Activity("Test");
     List<Astronaut> Tastronauts = new List<Astronaut>();
     int DureeMinute = 120; // TODO: initialisez à une valeur appropriée
     int StartHour = 130; // TODO: initialisez à une valeur appropriée
     int X = 0; // TODO: initialisez à une valeur appropriée
     int Y = 0; // TODO: initialisez à une valeur appropriée
     Task target = new Task(Tactivity, Tastronauts, DureeMinute, StartHour, X, Y);
     string[] expected = { "", target.FormatHour(StartHour), target.FormatHour(DureeMinute + StartHour), target.Name };
     string[] actual;
     actual = target.getInfo();
     CollectionAssert.AreEqual(expected, actual);
 }
 public void FormatHourTest()
 {
     Activity Tactivity = new Activity("Test"); // TODO: initialisez à une valeur appropriée
     List<Astronaut> Tastronauts = new List<Astronaut>(); // TODO: initialisez à une valeur appropriée
     int DureeMinute = 130; // TODO: initialisez à une valeur appropriée
     int StartHour = 150; // TODO: initialisez à une valeur appropriée
     int X = 0; // TODO: initialisez à une valeur appropriée
     int Y = 0; // TODO: initialisez à une valeur appropriée
     Task target = new Task(Tactivity, Tastronauts, DureeMinute, StartHour, X, Y); // TODO: initialisez à une valeur appropriée
     int Time = DureeMinute+StartHour ; // TODO: initialisez à une valeur appropriée
     string expected = "4H40"; // TODO: initialisez à une valeur appropriée
     string actual;
     actual = target.FormatHour(Time);
     Assert.AreEqual(expected, actual);
 }
 /// <summary>
 /// Ajoute une nouvelle Activity à la Category
 /// </summary>
 /// <param name="activity">Activity : Activité que l'on souhaite ajouter</param>
 public void addActivity(Activity activity)
 {
     Activities.Add(activity);
 }
        /// <summary>
        /// Va lire le fichier Xml lancé par l'utilisateur pour une nouvelle mission
        /// </summary>
        /// <returns>Un booléen indiquant si le chargement c'est bien passé</returns>
        private bool NewMission()
        {
            this.Astronauts.Clear();
            this.Categories.Clear();
            this.AstronautList.Items.Clear();
            saveToolStripMenuItem.Enabled = true;
            XmlDocument file = new XmlDocument();
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            // Set filter options and filter index.
            openFileDialog1.Filter = "Text Files (.xml)|*.xml|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.Multiselect = false;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {

                    this.StartMission = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
                    file.Load(openFileDialog1.OpenFile());
                    XmlNode noeud = file.DocumentElement;
                    XmlNodeList nomMission = noeud.SelectNodes("Name");
                    this.Text = nomMission[0].InnerText;

                    XmlNodeList MapMars = noeud.SelectNodes("Map");
                    this.Map = MapMars[0].InnerText;

                    try
                    {
                        Image.FromFile(this.Map);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Unable to find Map picture : " + this.Map);
                        return false;
                    }

                    XmlNodeList XMap = noeud.SelectNodes("X");
                    this.xOrigin = int.Parse(XMap[0].InnerText);

                    XmlNodeList YMap = noeud.SelectNodes("Y");
                    this.yOrigin = int.Parse(YMap[0].InnerText);

                    XmlNode AstronautXml = noeud.SelectSingleNode("Astronauts");
                    XmlNodeList AstronautsXml = AstronautXml.SelectNodes("Astronaut");

                    foreach (XmlNode nodeAstro in AstronautsXml)
                    {
                        Astronaut A = new Astronaut(nodeAstro.InnerText);
                        Astronauts.Add(A);
                    }

                    XmlNode ActivityXml = noeud.SelectSingleNode("Activities");
                    XmlNodeList ActivitiesXml = ActivityXml.ChildNodes;

                    foreach (XmlNode category in ActivitiesXml)
                    {
                        Category c = new Category(category.LocalName);
                        Categories.Add(c);
                        XmlNodeList Activities = category.ChildNodes;

                        foreach (XmlNode activity in Activities)
                        {
                            if (activity.LocalName == "Activity")
                            {
                                Activity a = new Activity(activity.InnerText);
                                c.addActivity(a);
                            }
                            else
                            {
                                Category c2 = new Category(activity.Name);
                                c.addActivity(c2);
                                XmlNodeList SecondaryActivity = activity.ChildNodes;

                                foreach (XmlNode SubActivity in SecondaryActivity)
                                {
                                    Activity a2 = new Activity(SubActivity.InnerText);
                                    c2.addActivity(a2);
                                }
                            }
                        }
                    }

                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                    return false;
                }
            }
            else
                return false;
        }
        /// <summary>
        /// Va lire un fichier Xml décrivant la mission (Activité, Map...)
        /// </summary>
        /// <param name="Path">Le chemin vers un fichier Xml</param>
        /// <returns>Un booléen indiquant si le chargement c'est bien passé</returns>
        private bool LoadMissionXml(string Path)
        {
            XmlDocument file = new XmlDocument();

                try
                {
                    file.Load(Path);
                    XmlNode noeud = file.DocumentElement;
                    XmlNodeList nomMission = noeud.SelectNodes("Name");
                    this.Text = nomMission[0].InnerText;

                    XmlNodeList MapMars = noeud.SelectNodes("Map");
                    this.Map = MapMars[0].InnerText;

                    try
                    {
                        Image.FromFile(this.Map);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Unable to find Map picture : " + this.Map);
                        return false;
                    }

                XmlNodeList XMap = noeud.SelectNodes("X");
                    this.xOrigin = int.Parse(XMap[0].InnerText);

                    XmlNodeList YMap = noeud.SelectNodes("Y");
                    this.yOrigin = int.Parse(YMap[0].InnerText);

                    XmlNode AstronautXml = noeud.SelectSingleNode("Astronauts");
                    XmlNodeList AstronautsXml = AstronautXml.SelectNodes("Astronaut");

                    foreach (XmlNode nodeAstro in AstronautsXml)
                    {
                        Astronaut A = new Astronaut(nodeAstro.InnerText);
                        Astronauts.Add(A);
                    }

                    XmlNode ActivityXml = noeud.SelectSingleNode("Activities");
                    XmlNodeList ActivitiesXml = ActivityXml.ChildNodes;

                    foreach (XmlNode category in ActivitiesXml)
                    {
                        Category c = new Category(category.LocalName);
                        Categories.Add(c);
                        XmlNodeList Activities = category.ChildNodes;

                        foreach (XmlNode activity in Activities)
                        {
                            if (activity.LocalName == "Activity")
                            {
                                Activity a = new Activity(activity.InnerText);
                                c.addActivity(a);
                            }
                            else
                            {
                                Category c2 = new Category(activity.Name);
                                c.addActivity(c2);
                                XmlNodeList SecondaryActivity = activity.ChildNodes;

                                foreach (XmlNode SubActivity in SecondaryActivity)
                                {
                                    Activity a2 = new Activity(SubActivity.InnerText);
                                    c2.addActivity(a2);
                                }
                            }
                        }
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                    return false;
                }
        }
        /// <summary>
        /// Action qui se déclenche après le clique sur le bouton Add
        /// Va ajouter la tâche à l'emploi du temps de la journée
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonAddActivity_Click(object sender, EventArgs e)
        {
            if (TypeForm == "adding") //Le if est ici pour l'instant si le traitement diffère entre chaque possibilité
              {
                  DialogResult result = MessageBox.Show("Do you want to add this task ?", "Confirmation", MessageBoxButtons.YesNo);
                  bool AllAstroFree = true;

                if (ActivityView.SelectedNode == null || ActivityView.SelectedNode.Parent == null)
                    MessageBox.Show("Select a correct activity");
                else if ((int)DurationHour.Value == 0 && (int)DurationMinute.Value==0)
                {
                    MessageBox.Show("Select a correct duration for this Task");
                }
                else if(AstronautView.CheckedIndices.Count == 0)
                {
                    MessageBox.Show("Select at least one astronaut");
                }
                else if (richTextBoxDescription.Text.Length > 400)
                {
                    MessageBox.Show("Error : The description is too long");
                }

                else
                {
                    if (result == DialogResult.Yes && ActivityView.SelectedNode != null)
                    {
                        MinuteStartSend = (int)StartHour.Value * 60 + (int)MinutesStart.Value;
                        MinuteDurationSend = (int)DurationHour.Value * 60 + (int)DurationMinute.Value;

                        if (MinuteStartSend + MinuteDurationSend <= 1480)
                        {
                            String NodeCategory = ActivityView.SelectedNode.Parent.Text;
                            Category category = Categories.Find(x => x.Name == NodeCategory);

                            ActivitySend = category.Activities.Find(x => x.Name == ActivityView.SelectedNode.Text);
                            SelectedAstronaut = new List<Astronaut>();

                            foreach (int indice in AstronautView.CheckedIndices)
                            {
                                Astronaut A = Astronauts.Find(x => x.Name == AstronautView.Items[indice].Text);

                                if (AstronautIsFree(A))
                                    SelectedAstronaut.Add(A);
                                else
                                {
                                    MessageBox.Show(A.Name + " is not available for this task on this period");
                                    AllAstroFree = false;
                                }
                            }

                            Description = richTextBoxDescription.Text;

                            if (AllAstroFree)
                            {
                                DialogResult = DialogResult.OK;
                                this.Close();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Error : End of the task exceed 24h40, you can't add a task on 2 days.");
                        }
                    }
                 }

              }
              else if (TypeForm == "editing")
              {
                  DialogResult result = MessageBox.Show("Do you want to edit this task ?", "Confirmation", MessageBoxButtons.YesNo);
                  if (result == DialogResult.Yes)
                  {
                      this.Close(); //Ajouter la tâche sur l'emploi
                  }
              }
        }