/// <summary>
        /// Metodo llamado cuando se presiona "Guardar"
        /// Actualiza la información del cliente y las preferencias en la base de datos
        /// </summary>
        /// <param name="sender">
        /// El objeto que genero el evento
        /// </param>
        /// <param name="e">
        /// Un objeto que contiene información sobre el evento
        /// </param>
        private void menuItemSave_Click(object sender, EventArgs e)
        {
            if (!ValidateFields())
            {
                return;
            }

            // Establecer la información del cliente
            customer.Name        = txtName.Text;
            customer.Surname     = txtSurname.Text;
            customer.Address     = txtAddress.Text;
            customer.PhoneNumber = txtPhoneNumber.Text;

            CustomerEntity returnCustomer;

            Cursor.Current = Cursors.WaitCursor;
            try
            {
                returnCustomer = UtnEmallClientApplication.UpdateCustomerProfile(customer);
            }
            catch (TargetInvocationException)
            {
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.TargetInvocationExceptionMessage,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                this.Close();
                return;
            }
            catch (CommunicationException)
            {
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.CommunicationException,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                this.Close();
                return;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            if (returnCustomer == null)
            {
                Utilities.ShowWarning(
                    global::PresentationLayer.GeneralResources.SuccessTitle,
                    global::PresentationLayer.GeneralResources.SaveCustomerSuccess);
                this.Close();
            }
            else
            {
                // Mostrar los errores si es necesario
                string messageError = "";
                foreach (Error error in returnCustomer.Errors)
                {
                    messageError += error.Description + "\n";
                }
                Utilities.ShowError(global::PresentationLayer.GeneralResources.ErrorTitle,
                                    messageError);
            }
        }
        /// <summary>
        /// Metodo llamado cuando se presiona "Guardar" en el ménu.
        /// </summary>
        /// <param name="sender">
        /// El objeto que genero el evento
        /// </param>
        /// <param name="e">
        /// Un objeto que contiene información sobre el evento
        /// </param>
        private void menuItemSave_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            string ipServer = textBoxServerIp.Text;

            try
            {
                // Intenta resolver por nombre o ip
                IPHostEntry hostEntry = Dns.GetHostEntry(ipServer);

                if (hostEntry.AddressList.Length > 0)
                {
                    ipServer = hostEntry.AddressList[0].ToString();
                    if (ipServer.StartsWith("::", StringComparison.Ordinal))
                    {
                        ipServer = "[" + ipServer + "]";
                    }
                }
                else
                {
                    // Controlar la dirección IP
                    IPAddress ip = IPAddress.Parse(ipServer);
                    ipServer = ip.ToString();
                }

                string portServer = BackgroundBroadcastService.BackgroundBroadcast.DefaultServerPort;
                string pingTime   = BackgroundBroadcastService.BackgroundBroadcast.DefaultPingTime;

                UtnEmallClientApplication.CreateMallServerFile(ipServer, portServer, pingTime);
                UtnEmallClientApplication.Instance.ReconfigureBackgroundBroadcastService();

                Cursor.Current = Cursors.Default;
                BaseForm.ShowMessage(
                    global::PresentationLayer.GeneralResources.SaveMallSuccess,
                    global::PresentationLayer.GeneralResources.SuccessTitle);

                this.Close();
            }
            catch (SocketException)
            {
                Cursor.Current = Cursors.Default;
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.InvalidHostAddressError + ipServer,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            catch (System.FormatException)
            {
                Cursor.Current = Cursors.Default;
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.InvalidHostAddressError + ipServer,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        /// <summary>
        /// Metodo llamado cuando se presiona "Guardar" en el ménu.
        /// Valida y guarda el usuario a la base de datos local.
        /// </summary>
        /// <param name="sender">
        /// El objeto que genero el evento
        /// </param>
        /// <param name="e">
        /// Un objeto que contiene información sobre el evento
        /// </param>
        private void menuItemSave_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            string username = textBoxUserName.Text;
            string password = textBoxPassword.Text;

            try
            {
                // Valida y obtiene la entidad del cliente desde el servidor
                CustomerEntity customer = UtnEmallClientApplication.ValidateAndGetCustomer(username, password);
                // guarda el cliente a la base de datos local
                UtnEmallClientApplication.SaveCustomerToLocalDatabase(customer);
            }
            catch (TargetInvocationException)
            {
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.TargetInvocationExceptionMessage,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            catch (CFFaultException)
            {
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.LoginPermissionError,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            catch (CommunicationException)
            {
                BaseForm.ShowErrorMessage(
                    global::PresentationLayer.GeneralResources.CommunicationException,
                    global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            catch (ArgumentException ex)
            {
                BaseForm.ShowErrorMessage(ex.Message,
                                          global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            catch (UtnEmallBusinessLogicException utnEmallBusinessLogicException)
            {
                BaseForm.ShowErrorMessage(utnEmallBusinessLogicException.Message,
                                          global::PresentationLayer.GeneralResources.ErrorTitle);
                return;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            BaseForm.ShowMessage(
                global::PresentationLayer.GeneralResources.ConnectionStateSuccess,
                global::PresentationLayer.GeneralResources.SuccessTitle);

            this.Close();
        }
        private static bool InstallService(ServiceEntity serviceEntity, string uriString)
        {
            try
            {
                bool error = false;
                // Establecer el mensaje de error
                string errorMsg = global::PresentationLayer.GeneralResources.ServiceInstallationError;

                // Transferir el archivo de servicio principal
                UtnEmallClientApplication.TransferFile(uriString);
                // Transferir el archivo de depuración
                #if TransferPdbFiles
                UtnEmallClientApplication.TransferFile(Path.ChangeExtension(uriString, ".pdb"));
                #endif

                // Si el archivo no existe hubo un error
                if (!File.Exists(Path.Combine(Utilities.AppPath, uriString)))
                {
                    error = true;
                }
                else
                {
                    // Transferir el servicio de infraestructura si es necesario
                    string infrastructureServiceFile = Path.Combine(UtnEmallClientApplication.AssembliesFolder,
                                                                    "Store" + serviceEntity.IdStore + "Infrastructure_Mobile.dll");

                    if (!File.Exists(Path.Combine(Utilities.AppPath, infrastructureServiceFile)))
                    {
                        UtnEmallClientApplication.TransferFile(infrastructureServiceFile);
                        // Si el archivo no existe hubo un error
                        if (!File.Exists(Path.Combine(Utilities.AppPath, infrastructureServiceFile)))
                        {
                            error = true;
                        }
                    }
                }
                // Si hubo un error muestra el mensaje
                if (error)
                {
                    // Mostrar el mensaje al usuario
                    Utilities.ShowError(global::PresentationLayer.GeneralResources.ErrorTitle, errorMsg);
                    return(false);
                }
                return(true);
            }
            catch (Exception error)
            {
                Debug.WriteLine(error.Message);
                return(false);
            }
        }