/**
  * Método estatico de inserción de registros en persona
  * + FECHA DE ALTA
  * @return [type]              [description]
  */
 public static function insert($actualiza = false)
 {
     // Comprobamos que los campos requeridos están sino error
     if (isset($_POST["nombre"]) && isset($_POST["apellidos"]) && isset($_POST["email"])) {
         // variable del método para poder hacer un rapido bindeo de parametros y errores
         $errores = [];
         $campos = [];
         //  validamos el nombre
         if (isset($_POST["nombre"])) {
             if (($err = Validaciones::validarNombre($_POST["nombre"])) !== true) {
                 $errores["nombre"] = $err;
             } else {
                 // si hay nombre lo ponemos en un array
                 $campos[":nombre"] = $_POST["nombre"];
             }
         }
         if (isset($_POST["apellidos"])) {
             // Validamos los apellidos
             if (($err = Validaciones::validarApellidos($_POST["apellidos"])) !== true) {
                 $errores["apellidos"] = $err;
             } else {
                 // si son validos los apellidos lo preparamos para el bindeo
                 $campos[":apellidos"] = $_POST["apellidos"];
             }
         }
         if (isset($_POST["email"])) {
             // validamos el email
             if (($err = Validaciones::validarEmail($_POST["email"])) !== true) {
                 $errores["email"] = $err;
             } else {
                 if (self::comprobarUnique("email", $_POST["email"]) === true) {
                     $errores["email"][] = "El email insertado ya está registrado.";
                 } else {
                     $campos[":email"] = $_POST["email"];
                 }
             }
         }
         if (isset($_POST["direccion"])) {
             // Si existe la dirección se valida
             if (($err = Validaciones::validarDireccion($_POST["direccion"])) !== true) {
                 $errores["direccion"] = $err;
             } else {
                 // si existe, preparamos el bindeo
                 $campos[":direccion"] = $_POST["direccion"];
             }
         }
         // si existe la provincia
         if (isset($_POST["provincia"])) {
             // se valida la provincia
             if (($err = provinciaModel::getProvinciaByNombre($_POST["provincia"])) !== true) {
                 $errores["provincia"][] = "La provincia no existe";
             } else {
                 $prov = ProvinciaModel::getProvinciaId($_POST["provincia"]);
                 $campos[":provincia"] = $prov[0]['id'];
             }
         }
         // si existe provincia
         // si exite el nif
         if (isset($_POST["nif"])) {
             // se valida
             if (($err = Validaciones::validarNif($_POST["nif"])) !== true) {
                 $errores["nif"][] = "El DNI o NIF no cumple el formato.";
             } else {
                 if (self::comprobarUnique("nif", $_POST["nif"]) === true) {
                     $errores["nif"][] = "El DNI o NIF insertado ya está registrado.";
                 } else {
                     $campos[":nif"] = $_POST["nif"];
                 }
             }
         }
         // si existe telefono
         if (isset($_POST["telefono"])) {
             // se valida
             if (($err = Validaciones::validarTelefono($_POST["telefono"])) !== true) {
                 $errores["telefono"] = $err;
             } else {
                 // si existe la preparo
                 $campos[":telefono"] = $_POST["telefono"];
             }
         }
         // si exite newsletter
         if (isset($_POST["newsletter"])) {
             // se valida
             if (($err = Validaciones::validarTelefono($_POST["newsletter"])) !== true) {
                 $errores["newsletter"] = $err;
             } else {
                 // si existe la preparo
                 $campos[":newsletter"] = $_POST["newsletter"];
             }
         }
         // si no hay errores
         if (!$errores) {
             // Si ha pasado las validaciones y estoy actualizando paro aquí y devuelvo true.
             if ($actualiza === true) {
                 return true;
             }
             try {
                 // Montamos las consultas
                 $fields = "";
                 $values = "";
                 // $values = " :campo1 :campo2 ..."
                 // $fields = "campo1, campo2,"
                 foreach ($campos as $indice => $valor) {
                     $values .= " " . $indice . ",";
                     $aux = mb_substr($indice, 1);
                     $fields .= $aux . ",";
                 }
                 // le quito la última coma de más
                 $fields = trim($fields, ",");
                 $values = trim($values, ",");
                 // conexión a la base de datos
                 $conn = Database::getInstance()->getDatabase();
                 // consulta de la base de datos
                 // Añadimos a la consulta la fecha de alta formateada
                 $fecha = "'" . date("Y-m-d") . "'";
                 $ssql = "INSERT INTO persona({$fields}, fecha_alta) VALUES ({$values}, {$fecha})";
                 // preparamos la consulta
                 $query = $conn->prepare($ssql);
                 $query->execute($campos);
                 if ($query->rowCount() === 1) {
                     return $conn->lastInsertId();
                 }
                 return false;
             } catch (PDOException $e) {
                 // Lanzamos una excepción a tratar en el controlador
                 throw new Exception('Error con la base de datos');
             }
         } else {
             // devolvemos los errores
             return Validaciones::resultado($errores);
         }
     } else {
         // si los campos requeridos no existen
         $errores['generic'][] = "Los campos requeridos no han sido introducidos";
         return Validaciones::resultado($errores);
     }
 }