Plan de desarrollo y sugerencias de FacturaScripts. Los patrocinadores pueden hacer sugerencias y votarlas, el equipo de desarrollo puede escoger una tarea y encargarse. Consulte la sección colabora (menú comunidad) para colaborar.
Al hacer compras o ventas en una divisa diferente a la predeterminada, convertir los precios en el momento de añadir la línea.
Mostrar en los EditListView el paginador en la parte superior como en los ListView.
Modificar la visualización de logs para hacer los cambios en documentos más legibles, para que quede claro qué se ha cambiado.
Modificar el atributo onclick de los widgets para permitir enlaces externos como este: ``` <column name="web" order="130"> <widget type="text" fieldname="codcliente" onclick="https://www.google.es?q="/> </column> ``` Si...
Crear el informe 349 para poder presentarlo a hacienda. y poder hacerlo mensualmente. https://sede.agenciatributaria.gob.es/Sede/procedimientoini/GI28.shtml
Al marcar varios documentos de Compra o Venta desde su listado, para generar PDF o enviar por MAIL, no se está mostrando la opción de "Avanzado" para decidir el tipo de exportación, el Formato de impresión y el idioma. Ya que hay ocasiones que nos puede interesar utilizar un formato...
Al cambiar la divisa de un documento, convertir automáticamente los precios a la nueva divisa.
Añadir el campo de observaciones privadas o notaspriv en las facturas, albaranes, pedidos y presupuestos de cliente.
Al crear un cliente se añade automáticamente una dirección de contacto y siempre parte el nombre y coloca la primera parte en el campo nombre y el resto en apellidos. Hay que cambiar este comportamiento para que: - Si es empresa, meter todo en el nombre. - Si no es empresa, hacer explode...
Añadir una única imagen a las familias de los productos, para poder usarlo por ejemplo en TPVneo y quizás en alguna otra aplicación futura.
En el widget money poder añadir la divisa desde el xml y desde el controlador. EN varias ocasiones queremos que aparezca el símbolo que queramos y que no sea el de la configuración general. El widget money busca si el modelo tiene coddivisa si no tiene coge el general, pero en ocasiones el...
En los estados tenemos un único nombre, como "facturar", que tiene sentido en el botón de estado del documento, pero en el listado al ver "facturar" da la impresión de que no se ha facturado todavía. Necesitamos un segundo título, para usar uno para acción y otro para...
Posibilidad de cierre de sesión automático a los x minutos de inactividad. Configurable en el panel de Control.
Añadir columna Saldo a cada línea del asiento contable. Es muy práctico a la hora de puntear una cuenta.
Implementar sistema de detección de bots rastreadores para elevar seguridad y evitar ataques DDOS Ahora mismo cuando un bot chino / ruso intenta atacar una instalacion publica de Facturascripts, al intentar entrar en urls no conodidas da error de...
El campo "operacion" que aparece en el boton "detalles" de los presupuestos/pedidos/albaranes/facturas, actualmente solo tiene la opcion de "intracomunitarias", que aparezcan tambien "extracomunitarias" y "sujeto pasivo"
Al descargar un archivo de la biblioteca, usar el nombre original, en lugar del id. O quizás el id + el nombre original. ## Archivos a modificar - https://github.com/NeoRazorX/facturascripts/blob/master/Core/App/AppRouter.php#L139
Añadir numproveedor a los recibos de compra. De forma que aparezca en los listados y se pueda buscar e imprimir.
Mostrar el último precio de venta al cliente cuando se añade un producto, en el campo precio, como hacemos con el stock en la cantidad.
Añadir mensaje de advertencia al crear un cliente o proveedor cuyo cifnif ya existe. Pero dejar crearlo. ## Archivos a modificar - https://github.com/NeoRazorX/facturascripts/blob/master/Core/Model/Cliente.php -...
Al facturar albaranes, bien desde el listado o bien desde el albarán abierto, debería pedir la fecha de factura y, en el caso de compras, el número de la factura del proveedor
Hacer que los menús se desplieguen sin tener que hacer click en ellos sólo con el hover; ahorraríamos un click que a lo largo del día se traduce en miles de clicks.
En el caso de los **filtros SelectWhere**, como se aplica por defecto la primera opción, habría que **inciar visualmente** de alguna forma que **se está aplicando un filtro**, es decir, que no estás viendo todo. Por ejemplo, en el listado de clientes, por defecto solamente se muestran los...
Añadir la opción a la configuración general para indicar el número de caracteres que debe tener la referencia al crear un nuevo producto. Ejemplo: - Al añadir un producto pone por defecto el número 1. - Si ponemos en la configuración que queremos 5 dijitos el resultado sería:...
Añadir posibilidad de ordenar los grupos en los xmlview, cuando haces una extensión de un xmlview y añades un nuevo grupo este se añade siempre al final. Poder tener la posibilidad de ubicarlo en otro orden.
(BUG) Al **cambiar de cliente o proveedor** una factura, albarán, etc, se deben **recalcular las líneas**. ## Motivación - El nuevo cliente puede estar exento de IVA o puede tener recargo de equivalencia.
Al listar (Pantalla y PDF) registros que contienen campos de tipo divisa, y el registro tiene el campo coddivisa, se interpretan todos los campos de tipo divisa del mismo tipo de divisa que el valor de coddivisa. Esto no se cumple cuando el campo es por ejemplo 'TotalEnEuros'. Este...
Rediseño de los xmlview de listados (ListView): - El **fieldname** (nombre de la columna del modelo) se establece en la **columna**. - Por defecto todas las columnas se añaden como opciones de **ordenación**, salvo que tenga **sort='false'**. - Por defecto todas las columnas se...
Cuando se generá un error se muestra la **pantalla de error** y los botones de **reconstruir** y **desactivar los plugins**. El botón de desactivar plugins solo debería de poder verlo los usuarios administradores. Se han dado casos en los que se genera un error, y el usuario en cuestión no...
Añadir columna materialenviado a los documentos de venta, o una nueva columna para el estado del envío. ## Motivación Ya tenemos columnas para indicar la dirección de envío, la agencia de transporte y el código de envío, pero no tenemos nada para filtar lo que ya se ha enviado ¿Cómo...
Cuando se establecen los permisos en los grupos de usuarios no mostrar aquellos que no tienen opción de filtrar los listados de "solo ver lo tuyo". Por ejemplo, el listado de productos no tiene dicha opción y aunque la marques en el grupo seguirás viendo todos los productos y eso...
Mostrar la cola de procesos pendientes de ejecución en segundo plano e incluso poder cancelarlos antes de que empiece su ejecución. **Ojo** para cancelar un proceso se debería de tener en cuenta si va encadenado con otro subproceso, quizás al cancelar un proceso existán otros procesos que...
Cambiar icono autocomplete (lupa) por otro que no induzca a "pulsar para buscar". En muchas ocasiones los usuarios pulsan el icono pensando que es un botón. Para intentar evitar una mayor claridad se propone cambiar el icono por "far fa-list-alt" o similar que no sea el icono...
Usar **flow.js** para poder subir plugins grandes en partes y evitar así los límites de PHP. Ejemplo: - https://github.com/channaveer/php-flowjs-resumable-file-upload ## Motivación Los plugins grandes como PlantillasPDF no se pueden subir en algunas instalaciones de FacturaScripts debido...
Añadir los tipos SIREN y SIRET a la lista de identificadores fiscales. Son los tipos para Francia.
Necesitamos mostrar los totales de los documentos a agrupar en el asistente para agupar o partir, es decir, cuando seleccionamos dos albaranes y pulsamos agrupar, en la parte de abajo deberían aparecer la suma de los netos, ivas y totales de todos los documentos a...
MOSTRAR VARIAS CUENTAS EN FORMA DE PAGO TRANSFERENCIA. ¿CÓMO PODRÍAMOS HACERLO?
Añadir funcionalidad de copiar y pegar líneas en los documentos de compra y venta, como se hacía antes con el modo rejilla.
Dar soporte de **HAVING** al construir las consultas sql para los filtros. Necesitamos por crear por ejemplo un filtro númerico sobre una columna de suma desde un JoinModel(). JoinModel de ejemplo ``` protected function getFields(): array { return [ ...
Al agrupar documentos, en el formulario, hay que poner tabindex="-1" en los campos desactivados, para que al pulsar tabulador para moverse entre campos, que no se mueva a esos campos desactivados. ![boceto](https://i.imgur.com/ulKTpVR.png)
Al devolver un recibo el asiento en el titulo pone cobro, quizás sería mejor poner devolución.
Añadir Fecha de Operación a las facturas. Usar el actual campo fecha como "Fecha de Expedición" (Es lo que ya se hace) y añadir otro "Fecha de Operación" para enviar esta fecha en la etiqueta opcional "Fecha de Operación". Varios clientes preguntaron sobre qué...
¿Qué problema hay que solucionar? Mismo producto se compra por varios proveedores. Poder ver las variaciones de precio en un mismo lugar, con todos los movimientos del mismo.
Crear en la ficha de clientes dos tipos de observaciones, publicas y privadas, al mas puro estilo puglin documentos recurrentes. Las observaciones públicas aparecerian siempre por defecto en las facturas que se emitan de ese cliente, mientras que las privadas permanecerían para uso...
Añadir opcion para poder marcar proveedores y clientes para que siempre que se hagan facturas intracomunitarias sin tener que ir al modal y seleccionar operacion --> intracomunitaria.
# Registro de Logs en archivo Actualmente todos los registros de logs se guardan en la base de datos. Algunos usuarios reportan que la tabla logs se hace enorme con el paso del tiempo. Se sugiere dotar a FacturaScripts de la opción que permita elegir entre guardar los registros de logs en...
Herramienta en línea de comandos para el desarrollo...
Plugin: Sincronización de Pedidos PrestaShop a...
Permite crear datos de pruebas para usar en demos o...
Permite migrar los datos de FacturaScripts 2017 a la...
Plugin que permite generar cobros y pagos a cuenta. Se...
El Modelo 111 es una declaración trimestral de las...
Permite eliminar todos los datos de la base de datos y...
Añade el campo grupo de clientes a los contactos del...
Agrega un punto de venta (TPV, Point of Sale) que permite...
Sistema de localización de productos en almacenes para...
Añade plazos a las formas de pago y los aplica en los...
Permite gestionar contactos, listas, notas y...
El Modelo 347 de la hacienda española es un modelo...
Permite importar clientes, proveedores, productos o...
Incluye herramientas para corregir automáticamente...
Permite imprimir etiquetas de códigos de barras de...
Permite asignar un segundo agente comercial a los...
Añade gestión de descuentos de venta, ya sea por...
Permite ver los movimientos de stock de cada producto del...
Permite gestionar servicios (SAT) en negocios como...
Añade un botón email en el listado de facturas de...
Modifica el aspecto de FacturaScripts para usar una barra...
Añade soporte para la factura electrónica española: el...
Este Plugin te permite administrar los informes...
Este plugin está abandonado por el autor, solo se...
Modifica el diario contable para agrupar por cuenta y...
El Modelo 130 es una declaración trimestral del impuesto...
Con este plugin puede crear plantillas de asientos para...
Permite agrupar documentos de distintos almacenes,...
Permite generar etiquetas de envío en base a la...
Añade fecha de proveedor a las facturas de compra e...
Modifica el plugin Servicios y permite añadir varias...
Añade un nueva plantilla al plugin PlantillasPDF. La...
Añade la columna fecha a las líneas de facturas,...
Plugin de Control de Impresión para Documentos Este...
Añade los informes necesarios para el "Suministro...
Plugin que permite administrar textos de uso cotidiano,...
Plugin de conciliación bancaria: - Permite importar los...
Añade un sistema de notificaciones y avisos tanto en el...
Un plugin que permite llevar registro de información...
Añadir soporte para VERI-FACTU al core. Debe estar implementado antes del 1 de enero de 2025. ## Documentación -...
(BUG) Cuando aprobamos un pedido, generamos un albarán, y luego eliminamos una línea del albarán, no se está restaurando el stock (reservado / pendiente) del producto de la línea eliminada. ## Implementación Hay que implementar el correspondiente test unitario. ### Cliente...
La clase ExportManager, que combina la generación de PDF, CSV y Excel fue una mala idea. Estos formatos son demasiando diferentes como para unificarlos. En su lugar se deben crear clases independientes para cada uno. Necesitamos una nueva clase ExportPDF que permita: - Poder añadir...
Reemplazar **bootbox**, la librería javascript que utilizamos para mostrar los modal de confirmación y eliminar, por algo nativo. ## Motivación Bootbox es una dependencia que va ligada a bootstrap, y que aporta una funcionalidad que tampoco es demasiado compleja como para hacerla nosotros....
En el wizard, el paso donde se inicializan todos los modelos, se debe partir en varios pasos, ya que es lento en muchas ocasiones. Convendría cargar primer los modelos de 5 en 5, es decir, cargar 5, recargar la página, cargar los siguientes 5, etc. Para ello se puede usar un offset.
Los métodos ``max()`` y ``min()`` de la clase ``DbQuery`` devuelven siempre un float, pero en ocaciones queremos operar con cadenas, fechas o bien horas, por lo que hay que añadir los métodos ``maxString()`` y ``minString()`` que no hagan esta conversión a float que hacen los métodos...
(BUG) al instalar con MySql/Mariadb, nos permite poner mayúsculas en el nombre de la base de datos, lo cual es muy problemático. No debe dejar poner mayúsculas en el nombre de la base de datos en ningún caso.
El proceso de cierre del ejercicio, cuando crea los asientos de regularización, cierre y apertura, no debería tener en cuenta los bloqueos de regularizaciones de impuestos. ## Implementación Habrá que modificar tanto el modelo Asiento o Partida como la clase para cerrar el...
Modificar las **secuencias** para poder indicar que queremos usar el último número disponible, pero sin cambiar la fecha. ## Ejemplo - El último albarán es el 100. - Aprobamos un pedido para convertirlo en albarán, pero no hay suficiente stock. - Añadimos el stock. - Aprobamos de...
Poder agrupar todos los albaranes de un rango de fechas de todos los clientes en sus respectivas facturas en un solo click. Ejemplo, clientes que generan 500 albaranes al mes.
Poder bloquear las variantes de un producto sin bloquear el producto. Esto es necesario porque en ocasiones simplemente se deja de distribuir una variante del producto (color, talla, temporada, etc) pero el producto se sigue vendiendo en otras variantes.
Necesitamos ampliar algunas funciones del logger, así como moverlo fuera de la carpeta Core/Base. La nueva clase se llamará Core/Logger y será una copia del MiniLog, pero con las siguientes funciones adicionales: ### readLast(int $count = 1, string $channel = '', string $level =...
En los ListView y EditListView cuando ejecutamos una acción y estamos en una página o tenemos un filtro aplicado mantener dichos filtros o página activa.
Restaurar las cuentas 4000, 4100 y 4300 del plan contable de España. Solamente estas cuentas tienen que tener la cuenta especial de clientes, proveedores y acreedores, para que al crear clientes, se cree una subcuenta dentro de la 4300, al crear un proveedor lo haga dentro de la 4100, etc. ##...
Modificar el formulario de devoluciones para poder indicar al crear si las 2 facturas (la rectificada y la nueva) se van a marcar como pagadas y con qué forma de pago. ## Motivación Cuando te devuelven una factura entera que no te han pagado, además de la rectificativa tienes que marcar...
En TPVneo, si añades una línea en negativo y otra en positivo, con el mismo importe. (Típico caso de cambio de producto). El botón de cobrar desaparece. Si lo haces a la inversa. Es decir, primero añades el positivo y luego negativo, funciona correctamente. Sería conveniente preguntarse...
(BUG) al poner una fecha de pago para la cual todavía no existe ejercicio, se genera el pago, pero no se genera el asiento porque el ejercicio no existe. La única forma de solucionar esto es por sql. Necesitamos poder hacerlo desde la interfaz. ## Necesitamos - Poder generar el asiento de...
Al generar el asiento de la factura, debe generarlo bloqueado, o por lo menos bloquearlo al terminar de generarlo. ## Pruebas 1. Hacer una factura con una línea con precio 100 y cantidad 1. 2. Comprobar que se ha creado un asiento y que está bloqueado. 3. Modificar el precio de la línea....
En los asientos se está colocando un enlace para abrir el documento relacionado solamente cuando es factura, pero tenemos asientos que son de recibos, asientos que son de remesas, etc. En todos estos casos deberíamos poder ir igualmente al modelo original. ## Implementación Hay que añadir...
(BUG) Cuando tenemos alguna columna con nombre reservado como **user** y además tenemos una clave ajena ahí, en PostgreSQL es necesario poner el nombre de la columna entre comillas dobles, pero en MySQL con comillas tipo acento. Necesitamos poder poner comillas en las constraints del xml de las...
Necesitamos poder establecer una fortaleza mínima para las contraseñas de usuarios, en una constante en el config.php, por ejemplo FS_PASSWORDS_STRENGTH, con valores posibles ``low``, ``medium`` y ``hard``: - low: mínimo 6 caracteres. - medium: mínimo 10 caracteres, con números, letras y...
Modificar el javascript que envía el los datos por ajax en la edición de asientos, compras y ventas para modificar el token en cada petición. Posteriormente añadir la validación de token en los respectivos controladores. ## Token de formulario - El token (input multireqtoken) tiene este...
Añadir las traducciones cortas save-ok, save-error, delete-ok y delete-error para usarlas al mostrar los mensajes al guardar o eliminar registros.
En ocasiones necesitamos procesar un trabajo rápido, pero dentro de un par de minutos. La cola de trabajo no nos sirve porque procesa los trabajos conforme se crean, sin esperar. Pero podemos hacer que la cola de trabajo pueda gestionar trabajos futuros. ## Solución Al registrar un evento,...
(TEST) comprobar qué sucede cuando creamos un estado que genera el mismo tipo de documento. Si es problemático, impedir que un estado genere el mismo tipo de documento y añadir la comprobación al correspondiente test unitario.
Resolver bug con postgresql al inicializar modelos con datos predefinidos en data. ## Problema - Se están importando correctamente los datos de data, pero no se están actualizando la secuencias. Eso produce errores al añadir nuevos registros. - Se han tenido que modificar los tests...
Al añadir líneas a un **documento de compra o venta**, debemos rellenar el **campo orden** con un valor cada vez más alto. De esta forma cuando usamos un plugin como **ProductoPack**, que añade más líneas, las añadirá justo debajo de la original, en lugar de al final del documento.
Añadir el **widget subcuenta**, similar al [widget variante](/publicaciones/widget-variante), pero para seleccionar una subcuenta. En muchas pantallas tenemos campo autocompletar para las subcuentas, pero a veces queremos buscar la subcuenta por el nombre y no podemos. O tenemos cuentas...
(Posible bug) al instalar un plugin, consultar la forja para ver la versión máxima del core para ese plugin. Si es menor que la actual, sacar un aviso.
Añadir la columna total_pendiente a las facturas de compra y de venta, para indicar el importe pendiente de pago. Mostrar este campo en los listados y actualizarlo conforme a los recibos. ## Implementación Ya existe una clase que actualiza la factura cuando se modifican los recibos. Hay que...
Añadir el régimen especial para agricultores a la lista de regímenes de IVA. Y modificar el Calculator para soportar este nuevo régimen. ## Test Añadir el correspondiente test unitario.
(BUG) ahora mismo 2 procesos que se ejecuten en paralelo pueden llegar a procesar el mismo evento. Esto es debido al tiempo que pasa entre que se obtiene de la base de datos el siguiente evento a procesar y cuando se bloquea el proceso. En esos milisegundos puede que otro proceso llegue casi a la...
(Bug) el widget datetime en safari no rellena automáticamente la hora y minutos. Además, si el usuario cambia la fecha con el teclado, puede pulsar intro y enviar el formulario sin rellenar completamente la fecha. ## Posible solución Añadir una función onchange() al input datetime para...
Al crear un **cliente o proveedor**, si existe el Plan Contable, **crear subcuenta automáticamente** y relacionarla. Añadir también un botón a la pestaña de subcuentas, en la página del cliente o proveedor, para poder crear la subcuenta del cliente, si no existe.
Añadir el campo **dailyexec** al modelo CronJob para poder almacenar el número de ejecuciones diarias del trabajo. Modificar: - Tabla - Modelo - XMLViews ## CronClass Modificar CronClass::jobDone() para que: - Ponga a 0 dailyexec cuando la fecha de la última ejecución no es de hoy. -...
Modificar el actualizador para que la acción de actualizar, una vez se ha descargado el zip, sea una llamada ajax, al igual que la acción de actualizar el dinamic. ## Motivación Hay que mejorar la tolerancia a errores del actualizador. No puede ser que cada vez que hagamos un cambio...
Modificar la clases de Core/AjaxForms para poner la mayoría de métodos estáticos como públicos, para poder llamarlos desde fuera en los mods (para cuando solamente queremos añadir algo después, o modificar levemente el html). ## Requisito Hay que completar primero la [tarea...
En ocasiones es necesario hacer facturas a cero, por distintos motivos. El problema es que estas facturas no están generando asientos y por tanto no aparecen en los informes de impuestos, ni los modelos fiscales. Hay que dar soporte a este tipo de facturas para que si aparezca en el informe de...
Crear un **test unitario** para el **modelo Impuesto**. ## Comprobar - Se puede crear un impuesto y borrarlo. - Se pueden crear dos impuestos con el mismo iva. - Si se crea un impuesto de **tipo porcentaje** y 10 de iva, al hacer una compra con una línea con ese impuesto, cantidad 2 y...
(API) Necesitamos poder obtener los tokens para los archivos de myfiles. Hay que añadir un endpoint a la API para obtener rápidamente el token y la url completa, con token incluído, para un archivo de MyFiles. ## Ejemplo de uso En ocasiones leemos la lista de producto de la API y...
(BUG) al aprobar documentos de compra, no debería copiar el campo ``numproveedor`` al siguiente documento, ya que si apruebas el albarán 123, puede que la factura no sea la 123.
(BUG) al hacer un asiento de venta (pasa lo mismo en compras), en ocasiones tenemos líneas a 0 en la cuenta 700.0. Esto es porque en la instalación hay una 700.1 y todos los productos vinculados a ella, pero cuando hacemos una compra o venta y metemos alguna líne de texto, se desglosa en la...
Añadir el método ``getLogo()`` al modelo **Empresa**, para que devuelva el AttachedFile del logotipo vinculado en el campo ``idlogo``.
(API) al igual que podemos crear facturas de cliente con una sola llamada, hay que poder crear también albaranes, pedidos y presupuestos. Tanto de compra como de venta. ## Posible implementación Hay que añadir un endpoint a la API para cada tipo de documento de compra o venta.
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 si el...
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.
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](/roadmap/1268). La versión original permanecería en Core/Model/Base para mantener compatibilidad durante unos...
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.
(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.
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 endpoint nuevo para...