/// <summary>
        ///
        /// </summary>
        /// <param name="element"></param>
        /// <param name="client"></param>
        public ProjectNotification(XElement element, ContentAPI client)
            : this()
        {
            if (element != null)
            {
                this.ProjectID = element.GetChildValueAsInt32("ProjectID");

                this.Status = element.GetChildValue("Status");

                this.URL = new Uri(element.GetChildValue("URL"));

                this.CreationDate = element.GetChildValueAsDateTime("CreationDate");

                this.DueDate = element.GetChildValueAsDateTime("DueDate");

                this.CompletionDate = element.GetChildValueAsDateTime("CompletionDate");

                XElement errors = element.Element("Errors");

                if (errors != null)
                {
                    foreach (XElement error in errors.Elements("Error"))
                    {
                        this.ErrorsList.Add(error.Value);
                    }
                }

                XElement sourceLanguage = element.Element("SourceLanguage");

                if (sourceLanguage != null)
                {
                    this.SourceLanguage = sourceLanguage.GetChildValue("LanguageCode");
                }

                XElement targetLanguages = element.Element("TargetLanguages");

                if (targetLanguages != null)
                {
                    foreach (XElement targetLanguage in targetLanguages.Descendants("LanguageCode"))
                    {
                        this.TargetLanguagesList.Add(targetLanguage.Value);
                    }
                }

                XElement products = element.Element("Products");

                if (products != null)
                {
                    this.Products = Product.CreateEnumerable(products, client);
                }

                XElement files = element.Element("Files");

                if (files != null)
                {
                    this.Files = File.CreateEnumerable(files, client);
                }
            }
        }
        /// <summary>
        /// Update the Project from XML
        /// </summary>
        /// <param name="element"></param>
        internal void UpdateFromXElement(XElement element)
        {
            if (element != null)
            {
                this.ProjectID = element.GetChildValueAsInt32("ProjectID");
                this.ServiceID = element.GetChildValueAsInt32("ServiceID");
                this.Status    = element.GetChildValue("Status");

                this.URL = element.GetChildValueAsUri("ProjectURL");

                this.Name = element.GetChildValue("ProjectName");

                this.Price        = element.GetChildValueAsDecimal("Price");
                this.Currency     = element.GetChildValue("Currency");
                this.CreationDate = element.GetChildValueAsDateTime("CreationDate");

                this.DueDate = element.GetChildValueAsDateTime("ProjectDueDate");
                this.DueDate = (this.DueDate == DateTime.MinValue) ? element.GetChildValueAsDateTime("DueDate") : this.DueDate;

                this.CompletionDate = element.GetChildValueAsDateTime("CompletionDate");

                XElement sourceLanguage = element.Element("SourceLanguage");
                if (element.Element("SourceLanguage") != null)
                {
                    this.SourceLanguage = sourceLanguage.GetChildValue("LanguageCode");
                }

                XElement targetLanguages = element.Element("TargetLanguages");
                this.TargetLanguagesList = new List <string>();

                if (targetLanguages != null)
                {
                    foreach (XElement targetLanguage in targetLanguages.Descendants("LanguageCode"))
                    {
                        this.TargetLanguagesList.Add(targetLanguage.Value);
                    }
                }

                if (element.Element("Products") != null)
                {
                    this.ProductsList = new List <Product>(Product.CreateEnumerable(element.Element("Products"), this.Client));
                }

                if (element.Element("Files") != null)
                {
                    if (this.FilesList != null && this.FilesList.Count == element.Descendants("File").Count())
                    {
                        for (int i = 0; i < this.FilesList.Count; i++)
                        {
                            this.FilesList[i].UpdateFromXElement(element.Descendants("File").InDocumentOrder().ElementAt(i));
                        }
                    }
                    else
                    {
                        this.FilesList = new List <File>(File.CreateEnumerable(element.Element("Files"), this.Client));
                    }
                }

                if (element.Element("ReferenceFiles") != null)
                {
                    if (this.ReferenceFilesList != null && this.ReferenceFilesList.Count == element.Descendants("ReferenceFile").Count())
                    {
                        for (int i = 0; i < this.ReferenceFilesList.Count; i++)
                        {
                            this.ReferenceFilesList[i].UpdateFromXElement(element.Descendants("ReferenceFile").InDocumentOrder().ElementAt(i));
                        }
                    }
                    else
                    {
                        this.ReferenceFilesList = new List <File>(File.CreateEnumerable(element.Element("ReferenceFiles"), this.Client));
                    }
                }
            }
        }