Tarea #1333

Fecha de creación: 22-07-2022 19:49:33 CORE v2023.2
PRO
neorazorx_1

Autor / Asignado


Nueva clase Where para reemplazar a DataBaseWhere. Esta clase iría directamente en la carpeta Core dado su uso intensivo. La clase original permanecerá en la carpeta Core/Base/DataBase para dar compatibilidad durante unos meses.

Ejemplo de uso

// WHERE sevende = true AND secompra = true
$where = [
    Where::eq('sevende', true),
    Where::eq('secompra', true)
];

// los métodos or() y and() son simplemente para dar más expresividad,
// igualmente se puede poner la operación como cuarto parámetro del column
$where2 = [
    Where::eq('sevende', true),
    Where::orEq('secompra', true)
];
$where3 = [
    Where::column('sevende', true),
    Where::column('secompra', true, '=', 'OR')
];
// $where2 y $where3 son iguales

NOT LIKE

Aprovechando el rediseño, hay que añadir el operador NOT LIKE, que se usa para mostrar los registros que no contienen una cadena dada.

Obtener el SQL resultante

En caso de duda, debemos tener un método intuitivo para obtener el SQL resultante de un array where que estemos haciendo.

$where = [
    Where::eq('sevende', true),
    Where::eq('secompra', true)
];
echo Where::multiSql($where);
// sevende = true AND secompra = true

Uso de paréntesis

El siguiente where generaría este SQL: sevende = true AND ventasinstock = false OR secompra = true AND nostock = false

$where = [
    Where::eq('sevende', true),
    Where::eq('ventasinstock', false),
    Where::orEq('secompra', true),
    Where::eq('nostock', false)
];

Pero quizás queríamos agrupar el segundo y tercer elemento o el tercero y el cuarto. Para evitar sorpresas necesitamos una forma intuitiva de indicar cuando agrupar y qué elementos agrupar. Vemos cada una de las posibles combinaciones:

( and ) or ( and )

$where = [
    Where::sub([
        Where::eq('sevende', true),
        Where::eq('ventasinstock', false)
    ]),
    Where::orSub([
        Where::eq('secompra', true),
        Where::eq('nostock', false),
    ]),
];

and ( or ) and

$where = [
    Where::eq('sevende', true),
    Where::andSub([
        Where::eq('ventasinstock', false),
        Where::orEq('secompra', true),
    ]),
    Where::eq('nostock', false)
];

Modificadores integer:, string:, lower: y upper:

Tenemos muchos casos donde nos interesa tratar una cadena como un entero o un entero como una cadena. Hasta ahora veníamos usando las funciones específicas de cast de mysql o postgresql, pero es más interesante tener los modificadores integer: y string: para que sea la base de datos la que se encargue de la conversión.

$asientoModel = new Asiento();
// numero es un string
$where = [Where::lte('integer:numero', 100)];
$orderBy = ['integer:numero' => 'ASC'];
$primeros = $asientoModelo->all($where, $orderBy, 0, 0);

Migración de plugins antiguos

Podríamos implementar una función en el fsmaker para realizar este cambio de forma masiva en todos los archivos del plugin:

fsmaker migrate:where

El fsmaker recorrería todos los archivos php del directorio (y subdirectorios) reemplazando new DataBaseWhere por Where::column.

PRO
neorazorx_1

Completada por neorazorx_1

España, 11 años, nivel 100

1 Comentarios

PRO
neorazorx_1

09-12-2023 00:26:38 neorazorx_1

ENVIADA
Ya no se pueden hacer más comentarios.

Tarea #3606

Hay un cronjob en forja, core-data-agent, que genera en MyFiles/Public una carpeta para cada país con su listado de impuestos, provincias y ciudades. Hay que añadir un script Core/Data/updater.php para descargar los archivos de forja y guardarlos en la carpeta...

CORE - Pendiente 04-10-2024
Tarea #3596

En ocasiones tenemos trabajos en segundo plano que pueden tardar varios segundos y es mejor que los procese el cron (el cron ejecuta hasta 1000 eventos de la cola de trabajos), pero no queremos un cronjob porque no se va a ejecutar todos los días, solamente cuando se dispare...

CORE - Pendiente 03-10-2024
Tarea #3585

Crear una nueva versión del EditController pero basada en el controlador UI, para simplificar las migraciones de plugins antiguos y para simplificar el desarrollo de controladores de formularios. Cuando en el EditController llamemos al método addListView() debe añadir la...

CORE - Pendiente 01-10-2024
Tarea #3586

Al hacer una compra, cuando tenemos un producto con referencia de ese proveedor, si escribimos esa referencia en el campo referencia, no la encuentra. Necesitamos que el buscador de referencias, en el caso de compras, busque también en las referencias de los proveedores.

CORE - Pendiente 01-10-2024
Tarea #3572

Debemos diseñar un controlador y vista que permita añadirle componentes UI de forma muy sencilla. De esta forma podemos diseñar todo tipo de controladores, pero siguiendo una misma lógica. Implementación El controlador UI debe ir en la carpeta Core/Template/ControllerUI....

CORE - Pendiente 01-10-2024
Tarea #3584

Crear una nueva versión del ListController pero basada en el controlador UI, para simplificar las migraciones de plugins antiguos y para simplificar el desarrollo de controladores de listados. Cuando en el ListController llamemos al método addListView() debe añadir la...

CORE - Pendiente 01-10-2024
Tarea #3570

Hay que modificar las facturas de cliente para no generar código y número a menos que la factura esté marcada como emitida. Las facturas de cliente deben tener un tratamiento especial, distinto al resto de modelos: No se debe generar número y código a menos que estén...

CORE - Pendiente 01-10-2024
Tarea #3571

Añadir bootstrap icons y combinar todo el CSS en un único archivo. AssetManager El AssetManager permite ahora combinar todo el CSS en un único archivo. Para ello simplemente hay que reemplazar la carga de archivos CSS en la plantilla twig de esto: {% block css %} ...

CORE - Pendiente 01-10-2024
Tarea #3568

Hay que crear la nueva clase Controller, que será la base de los nuevos controladores. Su ubicación será Core/Template/Controller. Abandono de privateCore() y publicCore() Esta nueva clase debe abandonar el enfoque de tener un método para cuando el usuario ha iniciado...

CORE - Pendiente 01-10-2024
Tarea #3569

Eliminación de clases obsoletas: Core/App/AppSettings.php Core/Base/CronClass.php Core/Base/DivisaTools.php Core/Base/InitClass.php Core/Base/NumberTools.php Core/Base/ToolBox.php Core/Base/Translator.php

CORE - Pendiente 01-10-2024
Tarea #3552

Hay que rediseñar la clase que maneja la base de datos para implementarla con PDO, soportar SQLite y permitir conectar a varias bases de datos. Implementación La nueva clase debe ser Core/DB y debe crear el objeto PDO para conectar a la base de datos y disponer de una serie...

CORE - Pendiente 27-09-2024
Tarea #3566

Hay que mover la generación de tokens a la clase Session. Ahora mismo la generación de tokens se realiza en Core/Lib/MultiRequestProtection. Pero debería realizarse en la case Core/Session, que es la que tiene la información del usuario que está ejecutando la petición....

CORE - Pendiente 01-10-2024
Tarea #3517

Al hacer una factura rectificativa con estado de no hacer nada, está modificando el stock igualmente.

CORE - Pendiente 17-09-2024
Tarea #3542

Añadir a las facturas la fecha de vencimiento. Este campo corresponde realmente a los recibos, pero podemos copiarlo a las facturas simplemente para poder verla en los listados y filtrar. Objetivo Poder ver desde el listado las fechas de vencimiento de las facturas....

CORE - Pendiente 25-09-2024
Tarea #3546

(Posible bug) hay que probar en el nuevo Where como se comporta cuando comparamos con el texto field:, integer:, etc. Para asegurarnos que no compara con una columna vacía o tenemos problemas de seguridad con estos modificadores. Problema El prefijo field: lo usamos para...

CORE - Pendiente 26-09-2024
Tarea #3448

Al cambiar el estado de un documento, cuando ese nuevo estado genera otro documento (por ejemplo al marcar un albarán como facturado), debería mostrar un modal donde poder seleccionar la fecha del nuevo documento. De esta forma al aprobar un albarán de compra podemos...

CORE - Pendiente 03-07-2024
Tarea #3494

(BUG) No se debe permitir crear un mismo producto de proveedor con la misma referencia del proveedor y el mismo proveedor en varias referencias de productos. Solo debe existir una referencia de proveedor vinculada con un producto y ese proveedor. Actualmente permite hacerlo y...

CORE - Pendiente 28-08-2024
Tarea #3499

Modificar el widget select para ponerle un color warning o alguna advertencia cuando el valor guardado no está en la lista.

CORE - Pendiente 10-09-2024
Tarea #3447

(BUG) cuando tenemos una factura impagada y emitida, es decir, bloqueada. Si la marcamos como pagada nos aparece el modal donde seleccionar forma de pago y fecha, pero los campos aparecen bloqueados. Nunca deben estar bloqueados. Implementación Originalmente se usó...

CORE - Pendiente 03-07-2024
Tarea #3435

Hay que mover la clase PluginDeploy fuera de Core/Base, y reemplazar las llamadas a funciones obsoletas.

CORE - Pendiente 27-06-2024
Tarea #3425

Necesitamos poder filtrar por país, provincia y ciudad en los listados de venta (facturas, albaranes, pedidos y presupuestos). Para ello hay que añadir esos filtros: Selector de país. Autocomplete de provincia. Autocomplete de ciudad.

CORE - Pendiente 19-06-2024
Tarea #3423

Cuando la opción google_tag_manager no está activa en el panel de control, hay que añadir un card en el Updater para preguntar al usuario si la quiere activar.

CORE - Pendiente 19-06-2024
Tarea #3363

Tenemos textos traducibles para facturas, albaranes, pedidos y presupuestos, pero no para el resto. El controlador SendMail debería crear textos predeterminados para cualquier modelo, así los podemos personalizar.

CORE - Pendiente 08-05-2024
Tarea #3389

Añadir las funciones necesarias a PDFExport para poder añadir texto, etc, en lugar de llamar a $this->pdf->ezText(). Así se puede reemplazar completamente en PlantillasPDF y otros plugins ganan compatibilidad.

CORE - Pendiente 24-05-2024
Tarea #3417

Ahora mismo para cada pantalla de error fatal se genera a su vez un archivo crash_XXX en la carpeta MyFiles. Necesitamos enviar esos archivos a facturascripts.com y eliminarlos. Para ello, en el actualizador, si hay archivos de crash debe aparecer una sección nueva (un card...

CORE - Pendiente 12-06-2024
Tarea #3356

En la tabla de productosprov es posible añadir varios productos con la misma referencia del proveedor al mismo proveedor, y eso no se debería de poder hacer. Se debe añadir un restricción única sobre las columnas codproveedor y refproveedor.

CORE - Pendiente 06-05-2024
Tarea #3305

Necesitamos poder tener textos distintos para cada idioma en las notificaciones de email. Para ello hay que añadir la columna lang al modelo, y modificar la función para enviar las notificaciones de forma que podamos especificar un idioma (opcional). Prioridades Si...

CORE - Pendiente 09-04-2024
Tarea #3304

En las notificaciones de email tenemos unos parámetros disponibles siempre: fecha, nombre, etc. Y luego tenemos una serie de parámetros que son exclusivos de la notificación (instance_uuid, price...). Hay que añadirle la columna (param_list) al modelo para poder apuntar la...

CORE - Pendiente 09-04-2024
Tarea #3155

En ocasiones tenemos documentos de compra que tienen ligeros cambios en la forma de calcular los impuestos, con variaciones de un céntimo en neto, IVA o ambos. Para estos casos la solución es modificar una de las líneas y añadirle o restarle medio céntimo hasta cuadrar...

CORE - Pendiente 21-02-2024
Tarea #3285

Añadir la opción de generar un historial de cambios: tendremos un modelo de historial, un worker para rellenarlo, un trait para mostrar la pestaña de historial en los controladores que queramos, la pestaña de listado de ListLogMessages y el correspondiente EditController....

CORE - Pendiente 02-04-2024
Tarea #3059

Modificar el instalador para poder leer los datos de configuración de variables de entorno. Issue relacionada https://github.com/truecharts/charts/issues/16824

CORE - Pendiente 20-01-2024
Tarea #2996

Añadir al ejercicio un botón para copiar las cuentas y subcuentas de otro ejercicio. Al hacer clic debe mostrar un modal para seleccionar el ejercicio del que copiar los datos.

CORE - Pendiente 10-01-2024
Tarea #3000

Necesitamos poder marcar una factura como pagada desde la API. Ahora mismo si desde la API modificamos el campo pagada a true, lo vuelve a dejar a false, ya que ese campo se actualiza al guardar, comprobando que los recibos de la factura estén pagados. Hay que añadir un...

CORE - Pendiente 11-01-2024
Tarea #2962

Al enviar un email con la clase NewMail no se vacían las listas de direcciones de correos, por lo que si queremos enviar el mismo correo a miles de emails, nos toca hacerlo varias veces. Si añadimos funciones para vaciar las direcciones de correo, podemos reducir código....

CORE - Pendiente 19-12-2023
Tarea #2955

Añadir a los balances un botón imprimir para genera el PDF con la librería del core, en lugar de PlantillasPDF (si está activado). Implementación Llamar al exportManager del core en lugar del dinamic.

CORE - Pendiente 12-12-2023
Tarea #2947

Necesitamos poder filtrar los asientos que no tienen un canal, es decir, que el canal es cero. Implementación Ahora mismo hay un filtro select, quizás es mejor un filtro select where donde pongamos que "ningún canal" o "canal 0" muestre efectivamente los...

CORE - Pendiente 12-12-2023
Tarea #2933

(Posible bug) Parece que se puede hacer una devolución de la misma línea varias veces, es decir, tienes una línea con cantidad 1, haces la rectificativa de eso y vuelves a hacerla igual. Te deja.

CORE - Pendiente 28-11-2023
Tarea #2940

Añadir un cron para generar cada diario y almacenarlo en MyFiles. Así ver el diario, si tenemos este archivo ya generado, podemos descargar este archivo en lugar de generarlo al momento.

CORE - Pendiente 05-12-2023
Tarea #2762

Añadir la opción de evitar añadir la descripción de atributos al añadir una variante a un documento. Motivación En ocasiones usamos atributos que luego no queremos que se impriman sus nombres o valores.

CORE - Pendiente 25-09-2023
Tarea #2749

Necesitamos poder añadir una imagen por familia de productos, para cuando es la misma imagen para todos los productos de la familia.

CORE - Pendiente 19-09-2023
Tarea #2896

Añadir al asistente para agrupar o partir la opción de agrupar líneas (por referencia y descripción) de forma que si tienes 50 líneas del producto 1, te genere una sola línea con la cantidad sumada de las 50.

CORE - Pendiente 13-11-2023
Tarea #2932

En la página del plugin, en la pestaña de zips, añadir el campo observaciones a los zips, para poder anutar ahí algo, de cara al propio programador.

CORE - Pendiente 28-11-2023
Tarea #2233

Parece que hay un problema al calcular el importe del asiento de cierre del ejercicio. Issue relacionada https://facturascripts.com/issues/6286

CORE - Pendiente 07-03-2023
Tarea #2273

Las miniaturas de imágenes de productos tienen mala resolución al incluirlas en los PDF (PlantillasPDF). Necesitamos aumentar la calidad de las miniaturas. Cliente interesado [email protected]

CORE - Pendiente 17-03-2023
Tarea #2392

Al añadir líneas a un asiento, se coloca automáticamente en el debe o el haber el resto correspondiente, es decir, si has añadido una línea con 50 en el debe, al añadir la segunda línea colocará 50 en el haber. Problema: si estás añadiendo varias alíneas con debe,...

CORE - Pendiente 13-04-2023
Tarea #1996

Modificar el informe de impuestos para incluir la columna País, para poder saber de qué país viene cada factura (para las ventas).

CORE - Pendiente 09-01-2023
Tarea #1892

Al pasar una factura de venta a emitida, ya no se debería volver a pasar a boceto, es decir, al pasar a emitida hay que marcar internamente la factura para no dejar cambiarla, ni eliminarla después.

CORE - Pendiente 13-12-2022
Tarea #1893

Hay que definir claramente en los modelos de documentos de compras y ventas qué campos son realmente no editables, para que no se permita modificar esos, peri el resto.

CORE - Pendiente 13-12-2022
Tarea #1334

Rediseñar la clase Model para reemplazar a ModelClass. La nueva versión que se colocaría en la carpeta Template, de acuerdo a la nueva estructura de carpetas del Core. La versión original permanecería en Core/Model/Base para mantener compatibilidad durante unos meses....

CORE - Pendiente 22-07-2022
Tarea #1682

Modificar el modelo Partida para poder desactivar la comprobación de si el asiento o el ejercicio está bloqueado. Necesitamos poder modificar el saldo de una partida independientemente de si el asiento está bloqueado. Nota No es toy seguro de si el modelo está comprobando...

CORE - Pendiente 11-10-2022
Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2024 FacturaScripts
2.97306s

Soporte