//
        /// <summary>
        /// Compares the empresa.
        /// </summary>
        /// <param name="e1">The e1.</param>
        /// <param name="e2">The e2.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool CompareEmpresa(Objecto.FichaTecnicaEmpresa e1, Objecto.FichaTecnicaEmpresa e2)
        {
            if (e1 == null || e2 == null)
            {
                return(false);
            }

            else
            {
                Empresa fe1 = new Empresa(e1);
                Empresa fe2 = new Empresa(e2);

                try
                {
                    if (fe1 == fe2)
                    {
                        return(true);
                    }

                    return(false);
                }
                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        //esta
        /// <summary>
        /// Hows the much worker.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns>System.Int32.</returns>
        public static int HowMuchWorker(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(0);
            }

            else
            {
                Empresa fe = new Empresa(e);

                if (Multinacional.multinacionais.ContainsKey(fe.Nif))
                {
                    foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                    {
                        foreach (Empresa empresa in lista)
                        {
                            if (fe == empresa)
                            {
                                return(empresa.totEmpregados);
                            }
                        }
                    }
                }
                return(0);
            }
        }
        //esta
        /// <summary>
        /// Sorts the work.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns>False error | True good</returns>
        public static bool SortWorker(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                if (Multinacional.ExisteEmpresa(e))
                {
                    Empresa fe = new Empresa(e);

                    foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                    {
                        foreach (Empresa empresa in lista)
                        {
                            if (fe == empresa)
                            {
                                empresa.empregados.Sort();
                                return(true);
                            }
                        }
                    }
                    return(false);
                }

                else
                {
                    return(false);
                }
            }
        }
        /// <summary>
        /// Existes the colmeia.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="ap">The ap.</param>
        /// <param name="a">a.</param>
        /// <param name="c">The c.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool ExisteColmeia(Objecto.FichaTecnicaEmpresa e, Objecto.FichaTecnicaApicultor ap, Objecto.FichaTecnicaApiario a, Objecto.FichaTecnicaColmeia c)
        {
            if (e == null || ap == null || a == null || c == null)
            {
                return(false);
            }

            else
            {
                Empresa   fe        = new Empresa(e);
                Apicultor apicultor = new Apicultor(ap);
                Apiario   apiario   = new Apiario(a);
                Colmeia   colmeia   = new Colmeia(c);

                try
                {
                    if (multinacionais.ContainsKey(fe.Nif))
                    {
                        foreach (List <Empresa> lista in multinacionais.Values)
                        {
                            foreach (Empresa empresa in lista)
                            {
                                if (fe == empresa)
                                {
                                    foreach (Apicultor item in empresa.empregados)
                                    {
                                        if (apicultor == item)
                                        {
                                            foreach (Apiario value in item.apiarios)
                                            {
                                                if (value == apiario)
                                                {
                                                    foreach (Colmeia cc in value.colmeias)
                                                    {
                                                        if (cc == colmeia)
                                                        {
                                                            return(true);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    return(false);
                }
                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="Empresa"/> class.
 /// </summary>
 /// <param name="f">The f.</param>
 public Empresa(Objecto.FichaTecnicaEmpresa f)
 {
     this.nome         = f.Nome;
     this.pais         = f.Pais;
     this.localidade   = f.Localidade;
     this.nif          = f.Nif;
     this.morada       = f.Morada;
     this.areaComercio = f.Area;
     empregados        = new List <Apicultor>();
 }
        //
        /// <summary>
        /// Adds the work.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns>False error | True good</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool AddEmpresa(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                Empresa fe = new Empresa(e);

                try
                {
                    if (multinacionais.ContainsKey(fe.Nif))
                    {
                        foreach (List <Empresa> lista in multinacionais.Values)
                        {
                            foreach (Empresa empresa in lista)
                            {
                                if (fe == empresa)
                                {
                                    return(false);
                                }
                            }
                        }

                        multinacionais[fe.Nif].Add(fe);
                    }

                    else
                    {
                        List <Empresa> listaEmpresas = new List <Empresa>();
                        listaEmpresas.Add(fe);
                        multinacionais.Add(e.Nif, listaEmpresas);
                    }

                    totEmpresas++;

                    return(true);
                }
                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        /// <summary>
        /// Defines the entry point of the application.
        /// </summary>
        /// <param name="args">The arguments.</param>
        static void Main(string[] args)
        {
            Objecto.FichaTecnicaEmpresa empresa1 = new Objecto.FichaTecnicaEmpresa();

            //Validar os dados


            if (RegrasNegocio.Regras.MandaParaForaEmpresa("BarcelosMel", "Barcelos", "Aldão", 00000000001, "Rua Ipca", "Mel", out empresa1))
            {
                if (RegrasNegocio.Regras.InsereEmpresa(RegrasNegocio.Regras.RecebeFichaCriaObjectoEmpresa(empresa1)))
                {
                    Console.WriteLine("Criou uma empresa.");
                }
            }
            Console.ReadKey();
        }
        //esta
        /// <summary>
        /// Dispenses the worker.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="a">a.</param>
        /// <returns>False error | True good</returns>
        /// <exception cref="Exception.EmpresaException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool DipensesWorker(Objecto.FichaTecnicaEmpresa e, Objecto.FichaTecnicaApicultor a)
        {
            if (e == null || a == null)
            {
                return(false);
            }

            else
            {
                try
                {
                    if (Multinacional.ExisteApicultor(e, a))
                    {
                        Empresa   fe = new Empresa(e);
                        Apicultor ap = new Apicultor(a);

                        foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                        {
                            foreach (Empresa empresa in lista)
                            {
                                if (fe == empresa)
                                {
                                    empresa.empregados.Remove(ap);
                                    empresa.totEmpregados--;
                                    return(true);
                                }
                            }
                        }
                        return(false);
                    }

                    else
                    {
                        return(false);
                    }
                }

                catch (Exception.EmpresaException)
                {
                    throw new Exception.EmpresaException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        //elimina empresa
        /// <summary>
        /// Handles the Click event of the button2 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void button2_Click(object sender, EventArgs e)
        {
            Objecto.FichaTecnicaEmpresa empresa1 = new Objecto.FichaTecnicaEmpresa();

            //Validar os dados
            if (RegrasNegocio.Regras.MandaParaForaEmpresa("BarcelosMel", "Barcelos", "Aldão", 00000000001, "Rua Ipca", "Mel", out empresa1))
            {
                if (RegrasNegocio.Regras.EliminarEmpresa(RegrasNegocio.Regras.RecebeFichaCriaObjectoEmpresa(empresa1)))
                {
                    toolStripStatusLabel1.Text = "Eliminou uma empresa";
                }
                else
                {
                    toolStripStatusLabel1.Text = "Empresa não existente";
                }
            }
        }
        /// <summary>
        /// Existes the apicultor.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="ap">The ap.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool ExisteApicultor(Objecto.FichaTecnicaEmpresa e, Objecto.FichaTecnicaApicultor ap)
        {
            if (e == null || ap == null)
            {
                return(false);
            }

            else
            {
                Empresa   fe        = new Empresa(e);
                Apicultor apicultor = new Apicultor(ap);

                try
                {
                    if (multinacionais.ContainsKey(fe.Nif))
                    {
                        foreach (List <Empresa> lista in multinacionais.Values)
                        {
                            foreach (Empresa empresa in lista)
                            {
                                if (fe == empresa)
                                {
                                    foreach (Apicultor item in empresa.empregados)
                                    {
                                        if (apicultor == item)
                                        {
                                            return(true);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    return(false);
                }
                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        //esta
        /// <summary>
        /// Searches for determinate worker.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="a">apicultur</param>
        /// <returns>False error | True good and posicao of apicultor</returns>
        public static bool SearchWorker(Objecto.FichaTecnicaEmpresa e, Objecto.FichaTecnicaApicultor a)
        {
            if (e == null || a == null)
            {
                return(false);
            }

            else
            {
                if (Multinacional.ExisteApicultor(e, a))
                {
                    return(true);
                }

                else
                {
                    return(false);
                }
            }
        }
        /// <summary>
        /// Sees all.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="todosEmpregados">The todos empregados.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public static bool SeeAll(Objecto.FichaTecnicaEmpresa e, ref List <string> todosEmpregados)
        {
            string texto;

            todosEmpregados.Clear();

            if (e == null)
            {
                return(false);
            }

            else
            {
                Empresa fe = new Empresa(e);

                if (Multinacional.multinacionais.ContainsKey(fe.Nif))
                {
                    foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                    {
                        foreach (Empresa empresa in lista)
                        {
                            if (fe == empresa)
                            {
                                foreach (Apicultor item in empresa.empregados)
                                {
                                    texto  = string.Empty;
                                    texto += item.Associacao.ToString() + "\n";
                                    texto += item.Comeco.ToString() + "\n";
                                    texto += item.Nome.ToString() + "\n";
                                    texto += item.NumeroApicutor.ToString() + "\n";
                                    texto += item.NumeroContacto.ToString() + "\n";
                                    todosEmpregados.Add(texto);
                                }
                                return(true);
                            }
                        }
                    }
                }
                return(false);
            }
        }
        /// <summary>
        /// Searches for determinate work.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns>False error | True good and posicao of apiario</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool SearchEmpresa(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                Empresa fe = new Empresa(e);

                try
                {
                    if (multinacionais.ContainsKey(e.Nif))
                    {
                        foreach (KeyValuePair <long, List <Empresa> > chave in multinacionais)
                        {
                            foreach (Empresa empresa in multinacionais[chave.Key])
                            {
                                if (fe == empresa)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                    return(false);
                }

                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        /// <summary>
        /// Existes the empresa.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.MultinacionalException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool ExisteEmpresa(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                Empresa fe = new Empresa(e);

                try
                {
                    if (multinacionais.ContainsKey(fe.Nif))
                    {
                        foreach (List <Empresa> lista in multinacionais.Values)
                        {
                            foreach (Empresa empresa in lista)
                            {
                                if (fe == empresa)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                    return(false);
                }
                catch (Exception.MultinacionalException)
                {
                    throw new Exception.MultinacionalException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        //esta
        /// <summary>
        /// Dispenses the empresa.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns>False error | True good</returns>
        public static bool DipensesEmpresa(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                List <Empresa> aux = new List <Empresa>();
                Empresa        fe  = new Empresa(e);


                if (multinacionais.ContainsKey(e.Nif))
                {
                    foreach (List <Empresa> chave in multinacionais.Values)
                    {
                        foreach (Empresa empresa in chave)
                        {
                            if (fe == empresa)
                            {
                                aux = chave;
                                aux.Remove(empresa);
                                multinacionais.Remove(fe.Nif);
                                multinacionais.Add(fe.Nif, aux);
                                totEmpresas--;
                                return(true);
                            }
                        }
                    }
                }
            }



            return(false);
        }
        /// <summary>
        /// Limpa
        /// </summary>
        /// <param name="e">The e.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.EmpresaException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool LimpaEmpregados(Objecto.FichaTecnicaEmpresa e)
        {
            if (e == null)
            {
                return(false);
            }

            else
            {
                Empresa fe = new Empresa(e);

                try
                {
                    foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                    {
                        foreach (Empresa empresa in lista)
                        {
                            if (fe == empresa)
                            {
                                empresa.empregados.Clear();
                                return(true);
                            }
                        }
                    }
                    return(false);
                }
                catch (Exception.EmpresaException)
                {
                    throw new Exception.EmpresaException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }
        // tá
        /// <summary>
        /// Agendars the acao.
        /// </summary>
        /// <param name="e">The e.</param>
        /// <param name="ap">The ap.</param>
        /// <param name="a">a.</param>
        /// <param name="c">The c.</param>
        /// <param name="ac">The ac.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="Exception.EmpresaException"></exception>
        /// <exception cref="System.Exception"></exception>
        public static bool AgendarAcao(Objecto.FichaTecnicaEmpresa e, Objecto.FichaTecnicaApicultor ap, Objecto.FichaTecnicaApiario a, Objecto.FichaTecnicaColmeia c, Objecto.Acao ac)
        {
            int dia = ac.Data.DayOfYear - 1;
            int k   = 0;

            if (e == null || ap == null || c == null || a == null || ac == null)
            {
                return(false);
            }

            else
            {
                try
                {
                    if (!Multinacional.ExisteAccao(e, ap, a, c, ac))
                    {
                        Empresa fe = new Empresa(e);

                        if (Ano.TemEventosNumDia(fe, ac))
                        {
                            return(false);
                        }

                        else
                        {
                            foreach (List <Empresa> lista in Multinacional.multinacionais.Values)
                            {
                                foreach (Empresa empresa in lista)
                                {
                                    if (fe == empresa)
                                    {
                                        Ano.InsereAcaoAno(empresa, ac);
                                    }
                                }
                            }
                        }

                        if (Colmeia.Intervention(e, ap, a, c, ac) && k == 1)
                        {
                            return(true);
                        }

                        return(false);
                    }

                    else
                    {
                        return(false);
                    }
                }

                catch (Exception.EmpresaException)
                {
                    throw new Exception.EmpresaException();
                }
                catch (System.Exception)
                {
                    throw new System.Exception();
                }
            }
        }