5509-entryDmsBack #2079
290
CHANGELOG.md
290
CHANGELOG.md
|
@ -5,299 +5,349 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2408.01] - 2024-02-22
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2406.01] - 2024-02-08
|
||||
|
||||
### Added
|
||||
### Changed
|
||||
### Fixed
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2404.01] - 2024-01-25
|
||||
|
||||
### Added
|
||||
### Changed
|
||||
### Fixed
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2402.01] - 2024-01-11
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2400.01] - 2024-01-04
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2350.01] - 2023-12-14
|
||||
|
||||
### Características Añadidas 🆕
|
||||
- **Tickets → Expediciones:** Añadido soporte para Viaexpress
|
||||
|
||||
- **Tickets → Expediciones:** Añadido soporte para Viaexpress
|
||||
|
||||
## [2348.01] - 2023-11-30
|
||||
|
||||
### Características Añadidas 🆕
|
||||
- **Tickets → Adelantar:** Permite mover lineas sin generar negativos
|
||||
- **Tickets → Adelantar:** Permite modificar la fecha de los tickets
|
||||
- **Trabajadores → Notificaciones:** Nueva sección (lilium)
|
||||
|
||||
- **Tickets → Adelantar:** Permite mover lineas sin generar negativos
|
||||
- **Tickets → Adelantar:** Permite modificar la fecha de los tickets
|
||||
- **Trabajadores → Notificaciones:** Nueva sección (lilium)
|
||||
|
||||
### Correcciones 🛠️
|
||||
- **Tickets → RocketChat:** Arreglada detección de cambios
|
||||
|
||||
- **Tickets → RocketChat:** Arreglada detección de cambios
|
||||
|
||||
## [2346.01] - 2023-11-16
|
||||
|
||||
### Added
|
||||
### Changed
|
||||
### Fixed
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2342.01] - 2023-11-02
|
||||
|
||||
### Added
|
||||
- (Usuarios -> Foto) Se muestra la foto del trabajador
|
||||
### Fixed
|
||||
- (Usuarios -> Historial) Abre el descriptor del usuario correctamente
|
||||
|
||||
- (Usuarios -> Foto) Se muestra la foto del trabajador
|
||||
|
||||
### Fixed
|
||||
|
||||
- (Usuarios -> Historial) Abre el descriptor del usuario correctamente
|
||||
|
||||
## [2340.01] - 2023-10-05
|
||||
|
||||
## [2338.01] - 2023-09-21
|
||||
|
||||
### Added
|
||||
- (Ticket -> Servicios) Se pueden abonar servicios
|
||||
- (Facturas -> Datos básicos) Muestra valores por defecto
|
||||
- (Facturas -> Borrado) Notificación al borrar un asiento ya enlazado en Sage
|
||||
|
||||
- (Ticket -> Servicios) Se pueden abonar servicios
|
||||
- (Facturas -> Datos básicos) Muestra valores por defecto
|
||||
- (Facturas -> Borrado) Notificación al borrar un asiento ya enlazado en Sage
|
||||
|
||||
### Changed
|
||||
- (Trabajadores -> Calendario) Icono de check arreglado cuando pulsas un tipo de dia
|
||||
|
||||
- (Trabajadores -> Calendario) Icono de check arreglado cuando pulsas un tipo de dia
|
||||
|
||||
## [2336.01] - 2023-09-07
|
||||
|
||||
## [2334.01] - 2023-08-24
|
||||
|
||||
### Added
|
||||
- (General -> Errores) Botón para enviar cau con los datos del error
|
||||
|
||||
- (General -> Errores) Botón para enviar cau con los datos del error
|
||||
|
||||
## [2332.01] - 2023-08-10
|
||||
|
||||
### Added
|
||||
- (Trabajadores -> Gestión documental) Soporte para Docuware
|
||||
- (General -> Agencia) Soporte para Viaexpress
|
||||
- (Tickets -> SMS) Nueva sección en Lilium
|
||||
|
||||
- (Trabajadores -> Gestión documental) Soporte para Docuware
|
||||
- (General -> Agencia) Soporte para Viaexpress
|
||||
- (Tickets -> SMS) Nueva sección en Lilium
|
||||
|
||||
### Changed
|
||||
- (General -> Tickets) Devuelve el motivo por el cual no es editable
|
||||
- (Desplegables -> Trabajadores) Mejorados
|
||||
- (General -> Clientes) Razón social y dirección en mayúsculas
|
||||
|
||||
- (General -> Tickets) Devuelve el motivo por el cual no es editable
|
||||
- (Desplegables -> Trabajadores) Mejorados
|
||||
- (General -> Clientes) Razón social y dirección en mayúsculas
|
||||
|
||||
### Fixed
|
||||
- (Clientes -> SMS) Al pasar el ratón por encima muestra el mensaje completo
|
||||
|
||||
- (Clientes -> SMS) Al pasar el ratón por encima muestra el mensaje completo
|
||||
|
||||
## [2330.01] - 2023-07-27
|
||||
|
||||
### Added
|
||||
- (Artículos -> Vista Previa) Añadido campo "Plástico reciclado"
|
||||
- (Rutas -> Troncales) Nueva sección
|
||||
- (Tickets -> Opciones) Opción establecer peso
|
||||
- (Clientes -> SMS) Nueva sección
|
||||
|
||||
- (Artículos -> Vista Previa) Añadido campo "Plástico reciclado"
|
||||
- (Rutas -> Troncales) Nueva sección
|
||||
- (Tickets -> Opciones) Opción establecer peso
|
||||
- (Clientes -> SMS) Nueva sección
|
||||
|
||||
### Changed
|
||||
- (General -> Iconos) Añadidos nuevos iconos
|
||||
- (Clientes -> Razón social) Permite crear clientes con la misma razón social según el país
|
||||
|
||||
- (General -> Iconos) Añadidos nuevos iconos
|
||||
- (Clientes -> Razón social) Permite crear clientes con la misma razón social según el país
|
||||
|
||||
## [2328.01] - 2023-07-13
|
||||
|
||||
### Added
|
||||
- (Clientes -> Morosos) Añadida columna "es trabajador"
|
||||
- (Trabajadores -> Departamentos) Nueva sección
|
||||
- (Trabajadores -> Departamentos) Añadido listado de Trabajadores por departamento
|
||||
- (Trabajadores -> Departamentos) Añadido características de departamento e información
|
||||
|
||||
- (Clientes -> Morosos) Añadida columna "es trabajador"
|
||||
- (Trabajadores -> Departamentos) Nueva sección
|
||||
- (Trabajadores -> Departamentos) Añadido listado de Trabajadores por departamento
|
||||
- (Trabajadores -> Departamentos) Añadido características de departamento e información
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
- (Trabajadores -> Departamentos) Arreglado búscador
|
||||
|
||||
- (Trabajadores -> Departamentos) Arreglado búscador
|
||||
|
||||
## [2326.01] - 2023-06-29
|
||||
|
||||
### Added
|
||||
- (Entradas -> Correo) Al cambiar el tipo de cambio enviará un correo a las personas designadas
|
||||
- (General -> Históricos) Botón para ver el estado del registro en cada punto
|
||||
- (General -> Históricos) Al filtar por registro se muestra todo el histórial desde que fue creado
|
||||
- (Tickets -> Índice) Permite enviar varios albaranes a Docuware
|
||||
|
||||
- (Entradas -> Correo) Al cambiar el tipo de cambio enviará un correo a las personas designadas
|
||||
- (General -> Históricos) Botón para ver el estado del registro en cada punto
|
||||
- (General -> Históricos) Al filtar por registro se muestra todo el histórial desde que fue creado
|
||||
- (Tickets -> Índice) Permite enviar varios albaranes a Docuware
|
||||
|
||||
### Changed
|
||||
- (General -> Históricos) Los registros se muestran agrupados por usuario y entidad
|
||||
- (Facturas -> Facturación global) Optimizada, generación de PDFs y notificaciones en paralelo
|
||||
|
||||
- (General -> Históricos) Los registros se muestran agrupados por usuario y entidad
|
||||
- (Facturas -> Facturación global) Optimizada, generación de PDFs y notificaciones en paralelo
|
||||
|
||||
### Fixed
|
||||
- (General -> Históricos) Duplicidades eliminadas
|
||||
- (Facturas -> Facturación global) Solucionados fallos que paran el proceso
|
||||
|
||||
- (General -> Históricos) Duplicidades eliminadas
|
||||
- (Facturas -> Facturación global) Solucionados fallos que paran el proceso
|
||||
|
||||
## [2324.01] - 2023-06-15
|
||||
|
||||
### Added
|
||||
- (Tickets -> Abono) Al abonar permite crear el ticket abono con almacén o sin almmacén
|
||||
- (General -> Desplegables) Mejorada eficiencia de carga de datos
|
||||
- (General -> Históricos) Ahora, ademas de los ids, se muestra la descripión de los atributos
|
||||
- (General -> Históricos) Botón para hacer más ágil mostrar sólo los cambios en un registro
|
||||
- (General -> Históricos) Filtro por cambios
|
||||
|
||||
- (Tickets -> Abono) Al abonar permite crear el ticket abono con almacén o sin almmacén
|
||||
- (General -> Desplegables) Mejorada eficiencia de carga de datos
|
||||
- (General -> Históricos) Ahora, ademas de los ids, se muestra la descripión de los atributos
|
||||
- (General -> Históricos) Botón para hacer más ágil mostrar sólo los cambios en un registro
|
||||
- (General -> Históricos) Filtro por cambios
|
||||
|
||||
### Changed
|
||||
- (General -> Permisos) Mejorada seguridad
|
||||
- (General -> Históricos) Elementos de la interfaz reorganizados para hacerla más ágil e intuitiva
|
||||
|
||||
- (General -> Permisos) Mejorada seguridad
|
||||
- (General -> Históricos) Elementos de la interfaz reorganizados para hacerla más ágil e intuitiva
|
||||
|
||||
### Fixed
|
||||
|
||||
-
|
||||
|
||||
|
||||
|
||||
## [2322.01] - 2023-06-01
|
||||
|
||||
### Added
|
||||
- (Tickets -> Crear Factura) Al facturar se envia automáticamente el pdf al cliente
|
||||
- (Artículos -> Histórico) Filtro para mostrar lo anterior al inventario
|
||||
- (Trabajadores -> Nuevo trabajador) Permite elegir el método de pago
|
||||
|
||||
- (Tickets -> Crear Factura) Al facturar se envia automáticamente el pdf al cliente
|
||||
- (Artículos -> Histórico) Filtro para mostrar lo anterior al inventario
|
||||
- (Trabajadores -> Nuevo trabajador) Permite elegir el método de pago
|
||||
|
||||
### Changed
|
||||
- (Trabajadores -> Nuevo trabajador) Los clientes se crean sin 'TR' pero se añade tipo de negocio 'Trabajador'
|
||||
- (Tickets -> Expediciones) Interfaz mejorada y contador añadido
|
||||
|
||||
- (Trabajadores -> Nuevo trabajador) Los clientes se crean sin 'TR' pero se añade tipo de negocio 'Trabajador'
|
||||
- (Tickets -> Expediciones) Interfaz mejorada y contador añadido
|
||||
|
||||
### Fixed
|
||||
- (Tickets -> Líneas) Se permite hacer split de líneas al mismo ticket
|
||||
- (Tickets -> Cambiar estado) Ahora muestra la lista completa de todos los estados
|
||||
|
||||
|
||||
- (Tickets -> Líneas) Se permite hacer split de líneas al mismo ticket
|
||||
- (Tickets -> Cambiar estado) Ahora muestra la lista completa de todos los estados
|
||||
|
||||
## [2320.01] - 2023-05-25
|
||||
|
||||
### Added
|
||||
- (Tickets -> Crear Factura) Al facturar se envia automáticamente el pdf al cliente
|
||||
|
||||
- (Tickets -> Crear Factura) Al facturar se envia automáticamente el pdf al cliente
|
||||
|
||||
### Changed
|
||||
- (Trabajadores -> Nuevo trabajador) Los clientes se crean sin 'TR' pero se añade tipo de negocio 'Trabajador'
|
||||
|
||||
- (Trabajadores -> Nuevo trabajador) Los clientes se crean sin 'TR' pero se añade tipo de negocio 'Trabajador'
|
||||
|
||||
### Fixed
|
||||
|
||||
-
|
||||
|
||||
|
||||
|
||||
## [2318.01] - 2023-05-08
|
||||
|
||||
### Added
|
||||
- (Usuarios -> Histórico) Nueva sección
|
||||
- (Roles -> Histórico) Nueva sección
|
||||
- (Trabajadores -> Dar de alta) Permite elegir el método de pago
|
||||
|
||||
- (Usuarios -> Histórico) Nueva sección
|
||||
- (Roles -> Histórico) Nueva sección
|
||||
- (Trabajadores -> Dar de alta) Permite elegir el método de pago
|
||||
|
||||
### Changed
|
||||
- (Artículo -> Precio fijado) Modificado el buscador superior por uno lateral
|
||||
- (Trabajadores -> Dar de alta) Quitada obligatoriedad del iban
|
||||
|
||||
- (Artículo -> Precio fijado) Modificado el buscador superior por uno lateral
|
||||
- (Trabajadores -> Dar de alta) Quitada obligatoriedad del iban
|
||||
|
||||
### Fixed
|
||||
- (Ticket -> Boxing) Arreglado selección de horas
|
||||
- (Cesta -> Índice) Optimizada búsqueda
|
||||
|
||||
|
||||
- (Ticket -> Boxing) Arreglado selección de horas
|
||||
- (Cesta -> Índice) Optimizada búsqueda
|
||||
|
||||
## [2314.01] - 2023-04-20
|
||||
|
||||
### Added
|
||||
- (Clientes -> Morosos) Ahora se puede filtrar por las columnas "Desde" y "Fecha Ú. O.". También se envia un email al comercial cuando se añade una nota.
|
||||
- (Monitor tickets) Muestra un icono al lado de la zona, si el ticket es frágil y se envía por agencia
|
||||
- (Facturas recibidas -> Bases negativas) Nueva sección
|
||||
|
||||
- (Clientes -> Morosos) Ahora se puede filtrar por las columnas "Desde" y "Fecha Ú. O.". También se envia un email al comercial cuando se añade una nota.
|
||||
- (Monitor tickets) Muestra un icono al lado de la zona, si el ticket es frágil y se envía por agencia
|
||||
- (Facturas recibidas -> Bases negativas) Nueva sección
|
||||
|
||||
### Fixed
|
||||
- (Clientes -> Morosos) Ahora se mantienen los elementos seleccionados al hacer sroll.
|
||||
|
||||
- (Clientes -> Morosos) Ahora se mantienen los elementos seleccionados al hacer sroll.
|
||||
|
||||
## [2312.01] - 2023-04-06
|
||||
|
||||
### Added
|
||||
- (Monitor tickets) Muestra un icono al lado de la zona, si el ticket es frágil y se envía por agencia
|
||||
|
||||
- (Monitor tickets) Muestra un icono al lado de la zona, si el ticket es frágil y se envía por agencia
|
||||
|
||||
### Changed
|
||||
- (Monitor tickets) Cuando se filtra por 'Pendiente' ya no muestra los estados de 'Previa'
|
||||
- (Envíos -> Extra comunitarios) Se agrupan las entradas del mismo travel. Añadidos campos Referencia y Importe.
|
||||
- (Envíos -> Índice) Cambiado el buscador superior por uno lateral
|
||||
|
||||
- (Monitor tickets) Cuando se filtra por 'Pendiente' ya no muestra los estados de 'Previa'
|
||||
- (Envíos -> Extra comunitarios) Se agrupan las entradas del mismo travel. Añadidos campos Referencia y Importe.
|
||||
- (Envíos -> Índice) Cambiado el buscador superior por uno lateral
|
||||
|
||||
## [2310.01] - 2023-03-23
|
||||
|
||||
### Added
|
||||
- (Trabajadores -> Control de horario) Ahora se puede confirmar/no confirmar el registro horario de cada semana desde esta sección
|
||||
|
||||
- (Trabajadores -> Control de horario) Ahora se puede confirmar/no confirmar el registro horario de cada semana desde esta sección
|
||||
|
||||
### Fixed
|
||||
- (Clientes -> Listado extendido) Resuelto error al filtrar por clientes inactivos desde la columna "Activo"
|
||||
- (General) Al pasar el ratón por encima del icono de "Borrar" en un campo, se hacía más grande afectando a la interfaz
|
||||
|
||||
- (Clientes -> Listado extendido) Resuelto error al filtrar por clientes inactivos desde la columna "Activo"
|
||||
- (General) Al pasar el ratón por encima del icono de "Borrar" en un campo, se hacía más grande afectando a la interfaz
|
||||
|
||||
## [2308.01] - 2023-03-09
|
||||
|
||||
### Added
|
||||
- (Proveedores -> Datos fiscales) Añadido checkbox 'Vies'
|
||||
- (Client -> Descriptor) Nuevo icono $ con barrotes para los clientes con impago
|
||||
- (Trabajador -> Datos Básicos) Añadido nuevo campo Taquilla
|
||||
- (Trabajador -> PDA) Nueva sección
|
||||
|
||||
- (Proveedores -> Datos fiscales) Añadido checkbox 'Vies'
|
||||
- (Client -> Descriptor) Nuevo icono $ con barrotes para los clientes con impago
|
||||
- (Trabajador -> Datos Básicos) Añadido nuevo campo Taquilla
|
||||
- (Trabajador -> PDA) Nueva sección
|
||||
|
||||
### Changed
|
||||
- (Ticket -> Borrar ticket) Restringido el borrado de tickets con abono
|
||||
|
||||
- (Ticket -> Borrar ticket) Restringido el borrado de tickets con abono
|
||||
|
||||
## [2306.01] - 2023-02-23
|
||||
|
||||
### Added
|
||||
- (Tickets -> Datos Básicos) Mensaje de confirmación al intentar generar tickets con negativos
|
||||
- (Artículos) El visible y disponible se calcula a partir de un almacén diferente dependiendo de la sección en la que te encuentres. Se ha añadido un icono que informa sobre a partir de que almacén se esta calculando.
|
||||
|
||||
- (Tickets -> Datos Básicos) Mensaje de confirmación al intentar generar tickets con negativos
|
||||
- (Artículos) El visible y disponible se calcula a partir de un almacén diferente dependiendo de la sección en la que te encuentres. Se ha añadido un icono que informa sobre a partir de que almacén se esta calculando.
|
||||
|
||||
### Changed
|
||||
- (General -> Inicio) Ahora permite recuperar la contraseña tanto con el correo de recuperación como el usuario
|
||||
|
||||
- (General -> Inicio) Ahora permite recuperar la contraseña tanto con el correo de recuperación como el usuario
|
||||
|
||||
### Fixed
|
||||
- (Monitor de tickets) Cuando ordenas por columna, ya no se queda deshabilitado el botón de 'Actualizar'
|
||||
- (Zone -> Días de entrega) Al hacer click en un día, muestra correctamente las zonas
|
||||
- (Artículos) El disponible en la vista previa se muestra correctamente
|
||||
|
||||
- (Monitor de tickets) Cuando ordenas por columna, ya no se queda deshabilitado el botón de 'Actualizar'
|
||||
- (Zone -> Días de entrega) Al hacer click en un día, muestra correctamente las zonas
|
||||
- (Artículos) El disponible en la vista previa se muestra correctamente
|
||||
|
||||
## [2304.01] - 2023-02-09
|
||||
|
||||
### Added
|
||||
- (Rutas) Al descargar varias facturas se comprime en un zip
|
||||
- (Trabajadores -> Nuevo trabajador) Nueva sección
|
||||
- (Tickets -> Adelantar tickets) Añadidos campos "líneas" y "litros" al ticket origen
|
||||
- (Tickets -> Adelantar tickets) Nuevo icono muestra cuando las agencias de los tickets origen/destino son distintas
|
||||
|
||||
- (Rutas) Al descargar varias facturas se comprime en un zip
|
||||
- (Trabajadores -> Nuevo trabajador) Nueva sección
|
||||
- (Tickets -> Adelantar tickets) Añadidos campos "líneas" y "litros" al ticket origen
|
||||
- (Tickets -> Adelantar tickets) Nuevo icono muestra cuando las agencias de los tickets origen/destino son distintas
|
||||
|
||||
### Changed
|
||||
- (Entradas -> Compras) Cambiados los campos "Precio Grouping/Packing" por "PVP" y "Precio" por "Coste"
|
||||
- (Artículos -> Últimas entradas) Cambiados los campos "P.P.U." y "P.P.P." por "PVP"
|
||||
- (Rutas -> Sumario/Tickets) Actualizados campos de los tickets
|
||||
- (Proveedores -> Crear/Editar) Permite añadir Proveedores con la misma razón social pero con países distintos
|
||||
- (Tickets -> Adelantar tickets) Cambiados selectores de estado por checks "Pendiente origen/destino"
|
||||
- (Tickets -> Adelantar tickets) Cambiado stock de destino a origen.
|
||||
|
||||
- (Entradas -> Compras) Cambiados los campos "Precio Grouping/Packing" por "PVP" y "Precio" por "Coste"
|
||||
- (Artículos -> Últimas entradas) Cambiados los campos "P.P.U." y "P.P.P." por "PVP"
|
||||
- (Rutas -> Sumario/Tickets) Actualizados campos de los tickets
|
||||
- (Proveedores -> Crear/Editar) Permite añadir Proveedores con la misma razón social pero con países distintos
|
||||
- (Tickets -> Adelantar tickets) Cambiados selectores de estado por checks "Pendiente origen/destino"
|
||||
- (Tickets -> Adelantar tickets) Cambiado stock de destino a origen.
|
||||
|
||||
### Fixed
|
||||
- (Artículos -> Etiquetas) Permite intercambiar la relevancia entre dos etiquetas.
|
||||
- (Cliente -> Datos Fiscales) No se permite seleccionar 'Notificar vía e-mail' a los clientes sin e-mail
|
||||
- (Tickets -> Datos básicos) Permite guardar la hora de envío
|
||||
- (Tickets -> Añadir pago) Eliminado "null" en las referencias
|
||||
- (Tickets -> Adelantar tickets) Permite ordenar por importe
|
||||
- (Tickets -> Adelantar tickets) El filtrado por encajado muestra también los tickets sin tipo de encajado
|
||||
|
||||
- (Artículos -> Etiquetas) Permite intercambiar la relevancia entre dos etiquetas.
|
||||
- (Cliente -> Datos Fiscales) No se permite seleccionar 'Notificar vía e-mail' a los clientes sin e-mail
|
||||
- (Tickets -> Datos básicos) Permite guardar la hora de envío
|
||||
- (Tickets -> Añadir pago) Eliminado "null" en las referencias
|
||||
- (Tickets -> Adelantar tickets) Permite ordenar por importe
|
||||
- (Tickets -> Adelantar tickets) El filtrado por encajado muestra también los tickets sin tipo de encajado
|
||||
|
||||
## [2302.01] - 2023-01-26
|
||||
|
||||
### Added
|
||||
- (General -> Inicio) Permite recuperar la contraseña
|
||||
- (Tickets -> Opciones) Subir albarán a Docuware
|
||||
- (Tickets -> Opciones) Enviar correo con PDF de Docuware
|
||||
- (Artículos -> Datos Básicos) Añadido campo Unidades/Caja
|
||||
|
||||
- (General -> Inicio) Permite recuperar la contraseña
|
||||
- (Tickets -> Opciones) Subir albarán a Docuware
|
||||
- (Tickets -> Opciones) Enviar correo con PDF de Docuware
|
||||
- (Artículos -> Datos Básicos) Añadido campo Unidades/Caja
|
||||
|
||||
### Changed
|
||||
- (Reclamaciones -> Descriptor) Cambiado el campo Agencia por Zona
|
||||
- (Tickets -> Líneas preparadas) Actualizada sección para que sea más visual
|
||||
|
||||
- (Reclamaciones -> Descriptor) Cambiado el campo Agencia por Zona
|
||||
- (Tickets -> Líneas preparadas) Actualizada sección para que sea más visual
|
||||
|
||||
### Fixed
|
||||
- (General) Al utilizar el traductor de Google se descuadraban los iconos
|
||||
|
||||
- (General) Al utilizar el traductor de Google se descuadraban los iconos
|
||||
|
||||
### Removed
|
||||
- (Tickets -> Control clientes) Eliminada sección
|
||||
|
||||
- (Tickets -> Control clientes) Eliminada sección
|
||||
|
|
|
@ -40,11 +40,11 @@ RUN apt-get update \
|
|||
WORKDIR /salix
|
||||
|
||||
COPY print/package.json print/package-lock.json print/
|
||||
RUN npm --prefix ./print install --omit=dev ./print
|
||||
RUN npm ci --no-audit --prefer-offline --omit=dev --prefix=print
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
COPY loopback/package.json loopback/
|
||||
RUN npm install --omit=dev
|
||||
RUN npm ci --no-audit --prefer-offline --omit=dev
|
||||
|
||||
COPY loopback loopback
|
||||
COPY back back
|
||||
|
|
|
@ -1,119 +1,152 @@
|
|||
#!/usr/bin/env groovy
|
||||
|
||||
def PROTECTED_BRANCH
|
||||
def FROM_GIT
|
||||
def RUN_TESTS
|
||||
|
||||
pre: {
|
||||
switch (env.BRANCH_NAME) {
|
||||
case 'test':
|
||||
env.NODE_ENV = 'test'
|
||||
env.BACK_REPLICAS = 2
|
||||
break
|
||||
case 'master':
|
||||
env.NODE_ENV = 'production'
|
||||
env.BACK_REPLICAS = 4
|
||||
break
|
||||
default:
|
||||
env.NODE_ENV = 'dev'
|
||||
env.BACK_REPLICAS = 1
|
||||
}
|
||||
|
||||
PROTECTED_BRANCH = [
|
||||
'dev',
|
||||
'test',
|
||||
'master'
|
||||
].contains(env.BRANCH_NAME)
|
||||
|
||||
FROM_GIT = env.JOB_NAME.startsWith('gitea/')
|
||||
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
|
||||
|
||||
// Uncomment to enable debugging
|
||||
// https://loopback.io/doc/en/lb3/Setting-debug-strings.html#debug-strings-reference
|
||||
//env.DEBUG = 'strong-remoting:shared-method'
|
||||
}
|
||||
node {
|
||||
stage('Setup') {
|
||||
def packageJson = readJSON file: 'package.json'
|
||||
env.VERSION = packageJson.version
|
||||
|
||||
env.GIT_COMMIT_MSG = sh(
|
||||
script: 'git log -1 --pretty=%B ${GIT_COMMIT}',
|
||||
returnStdout: true
|
||||
).trim()
|
||||
|
||||
setEnv()
|
||||
}
|
||||
}
|
||||
pipeline {
|
||||
agent any
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
}
|
||||
tools {
|
||||
nodejs 'node-v20'
|
||||
}
|
||||
environment {
|
||||
PROJECT_NAME = 'salix'
|
||||
STACK_NAME = "${env.PROJECT_NAME}-${env.BRANCH_NAME}"
|
||||
STACK_NAME = "${env.PROJECT_NAME}-${env.BRANCH_NAME}"
|
||||
}
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
switch (env.BRANCH_NAME) {
|
||||
case 'master':
|
||||
env.NODE_ENV = 'production'
|
||||
env.BACK_REPLICAS = 4
|
||||
break
|
||||
case 'test':
|
||||
env.NODE_ENV = 'test'
|
||||
env.BACK_REPLICAS = 2
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
configFileProvider([
|
||||
configFile(fileId: "salix.groovy",
|
||||
variable: 'GROOVY_FILE')
|
||||
]) {
|
||||
load env.GROOVY_FILE
|
||||
}
|
||||
|
||||
setEnv()
|
||||
}
|
||||
}
|
||||
stage('Install') {
|
||||
environment {
|
||||
NODE_ENV = ""
|
||||
}
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'npm install --no-audit --prefer-offline'
|
||||
sh 'gulp install --ci'
|
||||
parallel {
|
||||
stage('Backend') {
|
||||
steps {
|
||||
sh 'npm install --no-audit --prefer-offline'
|
||||
}
|
||||
}
|
||||
stage('Frontend') {
|
||||
when {
|
||||
expression { FROM_GIT }
|
||||
}
|
||||
steps {
|
||||
sh 'npm install --no-audit --prefer-offline --prefix=front'
|
||||
}
|
||||
}
|
||||
stage('Print') {
|
||||
when {
|
||||
expression { FROM_GIT }
|
||||
}
|
||||
steps {
|
||||
sh 'npm install --no-audit --prefer-offline --prefix=print'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Test') {
|
||||
when { not { anyOf {
|
||||
branch 'test'
|
||||
branch 'master'
|
||||
}}}
|
||||
when {
|
||||
expression { RUN_TESTS }
|
||||
}
|
||||
environment {
|
||||
NODE_ENV = ""
|
||||
TZ = 'Europe/Madrid'
|
||||
}
|
||||
parallel {
|
||||
stage('Frontend') {
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=4'
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Backend') {
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'npm run test:back:ci'
|
||||
}
|
||||
sh 'npm run test:back:ci'
|
||||
}
|
||||
}
|
||||
stage('Frontend') {
|
||||
steps {
|
||||
sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=6'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Build') {
|
||||
when { anyOf {
|
||||
branch 'test'
|
||||
branch 'master'
|
||||
}}
|
||||
when {
|
||||
expression { PROTECTED_BRANCH && FROM_GIT }
|
||||
}
|
||||
environment {
|
||||
CREDENTIALS = credentials('docker-registry')
|
||||
}
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'gulp build'
|
||||
}
|
||||
|
||||
sh 'gulp build'
|
||||
dockerBuild()
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
when { anyOf {
|
||||
branch 'test'
|
||||
branch 'master'
|
||||
}}
|
||||
environment {
|
||||
DOCKER_HOST = "${env.SWARM_HOST}"
|
||||
when {
|
||||
expression { PROTECTED_BRANCH }
|
||||
}
|
||||
steps {
|
||||
sh "docker stack deploy --with-registry-auth --compose-file docker-compose.yml ${env.STACK_NAME}"
|
||||
}
|
||||
}
|
||||
stage('Database') {
|
||||
when { anyOf {
|
||||
branch 'test'
|
||||
branch 'master'
|
||||
}}
|
||||
steps {
|
||||
configFileProvider([
|
||||
configFile(fileId: "config.${NODE_ENV}.ini",
|
||||
variable: 'MYSQL_CONFIG')
|
||||
]) {
|
||||
sh 'mkdir -p db/remotes'
|
||||
sh 'cp "$MYSQL_CONFIG" db/remotes/$NODE_ENV.ini'
|
||||
parallel {
|
||||
stage('Database') {
|
||||
steps {
|
||||
configFileProvider([
|
||||
configFile(fileId: "config.${env.NODE_ENV}.ini",
|
||||
variable: 'MYSQL_CONFIG')
|
||||
]) {
|
||||
sh 'mkdir -p db/remotes'
|
||||
sh 'cp "$MYSQL_CONFIG" db/remotes/$NODE_ENV.ini'
|
||||
}
|
||||
|
||||
sh 'npx myt push $NODE_ENV --force --commit'
|
||||
}
|
||||
}
|
||||
nodejs('node-v20') {
|
||||
sh 'npx myt push $NODE_ENV --force --commit'
|
||||
stage('Docker') {
|
||||
when {
|
||||
expression { FROM_GIT }
|
||||
}
|
||||
environment {
|
||||
DOCKER_HOST = "${env.SWARM_HOST}"
|
||||
}
|
||||
steps {
|
||||
sh "docker stack deploy --with-registry-auth --compose-file docker-compose.yml ${env.STACK_NAME}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -121,7 +154,7 @@ pipeline {
|
|||
post {
|
||||
always {
|
||||
script {
|
||||
if (!['master', 'test'].contains(env.BRANCH_NAME)) {
|
||||
if (RUN_TESTS) {
|
||||
try {
|
||||
junit 'junitresults.xml'
|
||||
junit 'junit.xml'
|
||||
|
@ -129,18 +162,28 @@ pipeline {
|
|||
echo e.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
success {
|
||||
script {
|
||||
if (env.BRANCH_NAME == 'master' && FROM_GIT) {
|
||||
String message = env.GIT_COMMIT_MSG
|
||||
int index = message.indexOf('\n')
|
||||
if (index != -1)
|
||||
message = message.substring(0, index)
|
||||
|
||||
if (!env.COMMITTER_EMAIL || currentBuild.currentResult == 'SUCCESS') return;
|
||||
try {
|
||||
mail(
|
||||
to: env.COMMITTER_EMAIL,
|
||||
subject: "Pipeline: ${env.JOB_NAME} (${env.BUILD_NUMBER}): ${currentBuild.currentResult}",
|
||||
body: "Check status at ${env.BUILD_URL}"
|
||||
rocketSend(
|
||||
channel: 'vn-database',
|
||||
message: "*DB version uploaded:* ${message}"
|
||||
+"\n$COMMITTER_EMAIL ($BRANCH_NAME)"
|
||||
+"\n$GIT_URL/commit/$GIT_COMMIT",
|
||||
rawMessage: true
|
||||
)
|
||||
} catch (e) {
|
||||
echo e.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
unsuccessful {
|
||||
sendEmail()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* eslint-disable no-console */
|
||||
const path = require('path');
|
||||
const Myt = require('@verdnatura/myt/myt');
|
||||
const Run = require('@verdnatura/myt/myt-run');
|
||||
let dataSources = require('../loopback/server/datasources.json');
|
||||
|
||||
let myt;
|
||||
let server;
|
||||
|
||||
process.on('warning', warning => {
|
||||
console.log(warning.name);
|
||||
|
@ -11,25 +12,33 @@ process.on('warning', warning => {
|
|||
console.log(warning.stack);
|
||||
});
|
||||
|
||||
process.on('SIGUSR2', async() => {
|
||||
if (myt) await myt.deinit();
|
||||
});
|
||||
process.on('SIGUSR2', rmServer);
|
||||
process.on('exit', rmServer);
|
||||
|
||||
process.on('exit', async function() {
|
||||
if (myt) await myt.deinit();
|
||||
});
|
||||
async function rmServer() {
|
||||
if (!server) return;
|
||||
await server.rm();
|
||||
server = null;
|
||||
}
|
||||
|
||||
async function test() {
|
||||
console.log('Building and running DB container.');
|
||||
|
||||
const isCI = process.argv[2] === 'ci';
|
||||
|
||||
myt = new Myt();
|
||||
const myt = new Myt();
|
||||
await myt.init({
|
||||
workspace: path.join(__dirname, '..'),
|
||||
random: true,
|
||||
ci: isCI,
|
||||
tmpfs: process.platform == 'linux',
|
||||
network: isCI ? 'jenkins' : null
|
||||
});
|
||||
const {dbConfig} = await myt.run(Run);
|
||||
server = await myt.run(Run);
|
||||
await myt.deinit();
|
||||
const {dbConfig} = server;
|
||||
|
||||
console.log('Initializing backend.');
|
||||
|
||||
dataSources = JSON.parse(JSON.stringify(dataSources));
|
||||
Object.assign(dataSources.vn, {
|
||||
|
@ -46,6 +55,8 @@ async function test() {
|
|||
// FIXME: Workaround to wait for loopback to be ready
|
||||
await app.models.Application.status();
|
||||
|
||||
console.log('Running tests.');
|
||||
|
||||
const Jasmine = require('jasmine');
|
||||
const jasmine = new Jasmine();
|
||||
|
||||
|
@ -81,9 +92,13 @@ async function test() {
|
|||
});
|
||||
|
||||
await jasmine.execute();
|
||||
|
||||
console.log('Stopping.');
|
||||
|
||||
if (app) await app.disconnect();
|
||||
if (myt) await myt.deinit();
|
||||
console.log('App disconnected & container removed');
|
||||
await rmServer();
|
||||
|
||||
console.log('Tests ended.\n');
|
||||
}
|
||||
|
||||
test();
|
||||
|
|
|
@ -6,9 +6,10 @@
|
|||
*/
|
||||
SET foreign_key_checks = 0;
|
||||
|
||||
-- CREATE ROLE 'salix';
|
||||
-- GRANT 'salix' TO 'root'@'%';
|
||||
-- SET DEFAULT ROLE 'salix' FOR 'root'@'%';
|
||||
DROP ROLE 'salix';
|
||||
CREATE ROLE 'salix';
|
||||
GRANT 'salix' TO 'root'@'%';
|
||||
SET DEFAULT ROLE 'salix' FOR 'root'@'%';
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS `vn2008`;
|
||||
CREATE SCHEMA IF NOT EXISTS `tmp`;
|
||||
|
@ -941,25 +942,25 @@ INSERT INTO `vn`.`itemFamily`(`code`, `description`)
|
|||
('VT', 'Sales');
|
||||
|
||||
INSERT INTO `vn`.`item`(`id`, `typeFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenseFk`,
|
||||
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `family`, `isFloramondo`, `genericFk`, `itemPackingTypeFk`, `hasMinPrice`, `packingShelve`, `weightByPiece`)
|
||||
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `family`, `isFloramondo`, `genericFk`, `itemPackingTypeFk`, `hasMinPrice`, `weightByPiece`)
|
||||
VALUES
|
||||
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 'EMB', 0, NULL, 'V', 0, 15,3),
|
||||
(2, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 'VT', 0, NULL, 'H', 0, 10,2),
|
||||
(3, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 'VT', 0, NULL, NULL, 0, 5,5),
|
||||
(4, 1, 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(5, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(6, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(7, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(8, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(9, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL,NULL),
|
||||
(10, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(11, 1, 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(12, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(13, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 1, 'VT', 1, NULL, NULL, 1, NULL,NULL),
|
||||
(14, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL,NULL),
|
||||
(15, 4, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(16, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL,NULL),
|
||||
(71, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL,NULL);
|
||||
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 'EMB', 0, NULL, 'V', 0, 3),
|
||||
(2, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 'VT', 0, NULL, 'H', 0, 2),
|
||||
(3, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 'VT', 0, NULL, NULL, 0, 5),
|
||||
(4, 1, 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(5, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(6, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(7, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(8, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(9, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL),
|
||||
(10, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(11, 1, 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(12, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
||||
(13, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 1, 'VT', 1, NULL, NULL, 1, NULL),
|
||||
(14, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL),
|
||||
(15, 4, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL),
|
||||
(16, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL),
|
||||
(71, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL);
|
||||
|
||||
-- Update the taxClass after insert of the items
|
||||
UPDATE `vn`.`itemTaxCountry` SET `taxClassFk` = 2
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
|
||||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
|
||||
BEGIN
|
||||
DECLARE vLastMonth DATE;
|
||||
|
||||
|
@ -32,7 +32,7 @@ BEGIN
|
|||
tm.year AS Año,
|
||||
tm.month AS Mes,
|
||||
tm.week AS Semana,
|
||||
v.vista AS Vista,
|
||||
dm.description AS Vista,
|
||||
bt.importe AS Importe
|
||||
FROM bs.ventas bt
|
||||
LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id
|
||||
|
@ -44,10 +44,10 @@ BEGIN
|
|||
JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento
|
||||
LEFT JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
|
||||
JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
|
||||
LEFT JOIN vn2008.Vistas v ON v.vista_id = a.Vista
|
||||
LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista
|
||||
LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna
|
||||
LEFT JOIN vn2008.province p ON p.province_id = cs.province_id
|
||||
LEFT JOIN vn2008.warehouse w ON w.id = t.warehouse_id
|
||||
WHERE bt.fecha >= vLastMonth AND r.mercancia;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_updatePackingShelve`(vSelf INT, vPacking INT)
|
||||
BEGIN
|
||||
|
||||
/**
|
||||
* Actualiza el valor de item.packingShelve
|
||||
*
|
||||
* @param vSelf Identificador de vn.item
|
||||
* @param vPacking Cantidad de unidades de venta que caben en una bandeja
|
||||
*/
|
||||
|
||||
UPDATE vn.item i
|
||||
SET i.packingShelve = vPacking
|
||||
WHERE i.id = vSelf;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -77,7 +77,6 @@ DECLARE vIsCollection BOOL;
|
|||
s.isAdded,
|
||||
IF(c.workerFk IS NULL, getUser(), c.workerFk) workerFk,
|
||||
IF(SUM(iss.quantity) IS NULL, 0, SUM(iss.quantity)) pickedQuantity,
|
||||
i.packingShelve,
|
||||
MIN(iss.created) picked,
|
||||
IF(sm.id, TRUE, FALSE) hasMistake,
|
||||
sg.sectorFk
|
||||
|
|
|
@ -21,11 +21,8 @@ BEGIN
|
|||
DECLARE vAgencyModeFk INT;
|
||||
DECLARE vNewPrice DECIMAL(10,2);
|
||||
DECLARE vOldPrice DECIMAL(10,2);
|
||||
DECLARE vOption INT DEFAULT NULL;
|
||||
DECLARE vOption VARCHAR(255);
|
||||
DECLARE vNewSaleFk INT;
|
||||
DECLARE vChangePrice INT DEFAULT 1;
|
||||
DECLARE vBuyerDiscount INT DEFAULT 4;
|
||||
DECLARE vManaDiscount INT DEFAULT 3;
|
||||
DECLARE vForceToGrouping INT DEFAULT 1;
|
||||
DECLARE vForceToPacking INT DEFAULT 2;
|
||||
DECLARE vFinalPrice DECIMAL(10,2);
|
||||
|
@ -85,16 +82,13 @@ BEGIN
|
|||
IF vNewPrice IS NULL THEN
|
||||
CALL util.throw('price retrieval failed');
|
||||
END IF;
|
||||
|
||||
IF vNewPrice > vOldPrice THEN
|
||||
SET vFinalPrice = vOldPrice;
|
||||
IF worker_isInDepartment('vt') THEN
|
||||
SET vOption = vManaDiscount;
|
||||
ELSE
|
||||
SET vOption = vBuyerDiscount;
|
||||
END IF;
|
||||
SET vOption = 'substitution';
|
||||
ELSE
|
||||
SET vFinalPrice = vNewPrice;
|
||||
SET vOption = vChangePrice;
|
||||
SET vOption = 'renewPrices';
|
||||
END IF;
|
||||
|
||||
START TRANSACTION;
|
||||
|
|
|
@ -31,8 +31,8 @@ BEGIN
|
|||
CALL util.throw('ASSIGN_ZONE_FIRST');
|
||||
END IF;
|
||||
|
||||
SET vCanChangeState = (
|
||||
vStateCode <> 'ON_CHECKING' OR
|
||||
SET vCanChangeState = ((
|
||||
vStateCode <> 'ON_CHECKING' AND vStateCode <> 'CHECKED') OR
|
||||
vticketAlertLevel < vPackedAlertLevel
|
||||
)AND NOT (
|
||||
vTicketStateCode IN ('CHECKED', 'CHECKING')
|
||||
|
@ -51,5 +51,6 @@ BEGIN
|
|||
ELSE
|
||||
CALL util.throw('INCORRECT_TICKET_STATE');
|
||||
END IF;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -2,21 +2,23 @@ DELIMITER $$
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`workerTimeControl_clockIn`(
|
||||
vWorkerFk INT,
|
||||
vTimed DATETIME,
|
||||
vDirection VARCHAR(10)
|
||||
vDirection VARCHAR(10),
|
||||
vDevice VARCHAR(255)
|
||||
)
|
||||
BEGIN
|
||||
/**
|
||||
* Verifica si el empleado puede fichar
|
||||
* @param vWorkerFk Identificador del trabajador
|
||||
* @param vTimed valor de la fichada, IF vTimed IS NULL vTimed = NOW
|
||||
* @param vDirection solo se pueden pasa los valores del campo
|
||||
* workerTimeControl.direction ENUM('in', 'out', 'middle')
|
||||
* @return Si todo es correcto, retorna el número de id la tabla workerTimeControl.
|
||||
* Si hay algún problema, devuelve el mesaje que se debe mostrar al usuario
|
||||
* Solo retorna el primer problema, en caso de no ocurrir ningún error se añadirá
|
||||
* fichada a la tabla vn.workerTimeControl
|
||||
*/
|
||||
|
||||
* Verifica si el empleado puede fichar
|
||||
* @param vWorkerFk Identificador del trabajador
|
||||
* @param vTimed Balor de la fichada, IF vTimed IS NULL vTimed = NOW
|
||||
* @param vDirection Solo se pueden pasa los valores del campo
|
||||
* workerTimeControl.direction ENUM('in', 'out', 'middle')
|
||||
* @param vDevice Dispositivo en el que se ha fichado
|
||||
* @return Si todo es correcto, retorna el número de id la tabla workerTimeControl.
|
||||
* Si hay algún problema, devuelve el mesaje que se debe mostrar al usuario
|
||||
* Solo retorna el primer problema, en caso de no ocurrir ningún error se añadirá
|
||||
* fichada a la tabla vn.workerTimeControl
|
||||
*/
|
||||
|
||||
DECLARE vLastIn DATETIME;
|
||||
DECLARE vLastOut DATETIME;
|
||||
DECLARE vNextIn DATETIME;
|
||||
|
@ -269,16 +271,16 @@ BEGIN
|
|||
GROUP BY breakCounter
|
||||
HAVING hasError
|
||||
LIMIT 1;
|
||||
|
||||
|
||||
IF vIsError THEN
|
||||
SET vErrorCode = 'BREAK_WEEK';
|
||||
CALL util.throw(vErrorCode);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- SE PERMITE FICHAR
|
||||
INSERT INTO workerTimeControl(userFk, timed, direction, `manual`)
|
||||
VALUES(vWorkerFk, vTimed, vDirection, vIsManual);
|
||||
|
||||
-- Se permite fichar
|
||||
INSERT INTO workerTimeControl(userFk, timed, direction, device, `manual`)
|
||||
VALUES(vWorkerFk, vTimed, vDirection, vDevice, vIsManual);
|
||||
|
||||
SELECT LAST_INSERT_ID() id;
|
||||
|
||||
|
|
|
@ -6,15 +6,7 @@ BEGIN
|
|||
DECLARE vNewPackingShelve INT;
|
||||
|
||||
SET NEW.editorFk = account.myUser_getId();
|
||||
|
||||
IF ISNULL(NEW.packingShelve) AND NOT ISNULL(NEW.packingOut) THEN
|
||||
SELECT NEW.packingOut * vc.shelveVolume / vc.standardFlowerBox
|
||||
INTO vNewPackingShelve
|
||||
FROM vn.volumeConfig vc;
|
||||
|
||||
SET NEW.packingShelve = vNewPackingShelve;
|
||||
END IF;
|
||||
|
||||
|
||||
IF NEW.itemPackingTypeFk = '' THEN
|
||||
SET NEW.itemPackingTypeFk = NULL;
|
||||
END IF;
|
||||
|
|
|
@ -31,7 +31,7 @@ FROM (
|
|||
)
|
||||
JOIN `vn`.`route` `r` ON(`r`.`id` = `t`.`routeFk`)
|
||||
)
|
||||
LEFT JOIN `vn2008`.`Rutas_monitor` `rm` ON(`rm`.`Id_Ruta` = `r`.`id`)
|
||||
LEFT JOIN `vn`.`routesMonitor` `rm` ON(`rm`.`routeFk` = `r`.`id`)
|
||||
)
|
||||
LEFT JOIN `vn`.`expeditionTruck` `et2` ON(`et2`.`id` = `rm`.`expeditionTruckFk`)
|
||||
)
|
||||
|
|
|
@ -20,14 +20,12 @@ proc: BEGIN
|
|||
SET vDate2000 = util.VN_CURDATE() + INTERVAL (2000 - YEAR(util.VN_CURDATE())) YEAR;
|
||||
SET vRangeDeleteTicket = 60;
|
||||
|
||||
DELETE FROM Rutas_monitor WHERE fecha < vDate;
|
||||
DELETE FROM cdr WHERE calldate < vDate18;
|
||||
DELETE FROM Monitoring WHERE ODBC_TIME < vDate;
|
||||
DELETE FROM Conteo WHERE Fecha < vDate;
|
||||
DELETE FROM XDiario WHERE FECHA < vDate3 OR FECHA IS NULL;
|
||||
DELETE FROM mail WHERE DATE_ODBC < vDate;
|
||||
DELETE FROM expeditions_deleted WHERE odbc_date < vDate26;
|
||||
DELETE FROM sms WHERE DATE_ODBC < vDate18;
|
||||
DELETE FROM Movimientos_mark WHERE odbc_date < vDate;
|
||||
DELETE FROM Splits WHERE Fecha < vDate18;
|
||||
|
||||
|
@ -47,8 +45,6 @@ proc: BEGIN
|
|||
JOIN Tickets t ON m.Id_Ticket = t.Id_Ticket WHERE t.Fecha < vDate;
|
||||
|
||||
DELETE FROM Remesas WHERE `Fecha Remesa` < vDate18;
|
||||
DELETE FROM sharingcart where datEND < vDate;
|
||||
DELETE FROM sharingclient where datEND < vDate;
|
||||
|
||||
DELETE tt.*
|
||||
FROM Tickets_turno tt
|
||||
|
|
|
@ -17,7 +17,20 @@ BEGIN
|
|||
SELECT t.Id_Ticket, Alias, cast(amount as decimal(10,2)) Importe, Domicilio, POBLACION
|
||||
FROM Tickets t
|
||||
JOIN Consignatarios cs ON t.Id_Consigna = cs.Id_Consigna
|
||||
JOIN v_ticket_amount v ON v.Id_Ticket = t.Id_Ticket
|
||||
JOIN (
|
||||
SELECT `Movimientos`.`Id_Ticket` AS `Id_Ticket`,
|
||||
sum(
|
||||
`Movimientos`.`Cantidad` * `Movimientos`.`Preu` * (100 - `Movimientos`.`Descuento`) / 100
|
||||
) AS `amount`
|
||||
FROM (
|
||||
`vn2008`.`Movimientos`
|
||||
JOIN `vn2008`.`Tickets` ON(
|
||||
`Movimientos`.`Id_Ticket` = `Tickets`.`Id_Ticket`
|
||||
)
|
||||
)
|
||||
WHERE `Tickets`.`Fecha` >= `util`.`VN_CURDATE`() + INTERVAL -6 MONTH
|
||||
GROUP BY `Movimientos`.`Id_Ticket`
|
||||
) v ON v.Id_Ticket = t.Id_Ticket
|
||||
WHERE t.Fecha BETWEEN v_Date AND util.dayEnd(v_Date)
|
||||
AND t.Id_Cliente = v_Client_Id;
|
||||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
|
||||
CREATE OR REPLACE DEFINER = `root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`Rutas_Master`
|
||||
AS SELECT
|
||||
`rm`.`id` AS `id`,
|
||||
`rm`.`warehoseFk` AS `warehouse_id`,
|
||||
`rm`.`km` AS `km`,
|
||||
`rm`.`packages` AS `bultos`,
|
||||
`rm`.`vehicleCost` AS `vehiculos_coste`,
|
||||
`rm`.`staffCost` AS `personal_coste`,
|
||||
`rm`.`vehicle` AS `vehiculos_numero`,
|
||||
`rm`.`staff` AS `personal_numero`,
|
||||
`rm`.`fuel` AS `gasoil`,
|
||||
`rm`.`freelancers` AS `autonomos`,
|
||||
`rm`.`year` AS `año`,
|
||||
`rm`.`mounth` AS `mes`,
|
||||
`rm`.`expense` AS `gastos`,
|
||||
`rm`.`freelancersPackages` AS `bultos_autonomos`,
|
||||
`rm`.`kmCost` AS `coste_km`,
|
||||
`rm`.`packageCost` AS `coste_bulto`,
|
||||
`rm`.`freelancerPackageCost` AS `coste_bulto_autonomo` ,
|
||||
`rm`.`created` AS `odbc_date`
|
||||
FROM `vn`.`routeMaster` `rm`
|
|
@ -1,22 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`Rutas_Master`
|
||||
AS SELECT `rm`.`id` AS `id`,
|
||||
`rm`.`warehouseFk` AS `warehouse_id`,
|
||||
`rm`.`km` AS `km`,
|
||||
`rm`.`packages` AS `bultos`,
|
||||
`rm`.`vehicleCost` AS `vehiculos_coste`,
|
||||
`rm`.`staffCost` AS `personal_coste`,
|
||||
`rm`.`vehicle` AS `vehiculos_numero`,
|
||||
`rm`.`staff` AS `personal_numero`,
|
||||
`rm`.`fuel` AS `gasoil`,
|
||||
`rm`.`freelancers` AS `autonomos`,
|
||||
`rm`.`year` AS `año`,
|
||||
`rm`.`month` AS `mes`,
|
||||
`rm`.`expense` AS `gastos`,
|
||||
`rm`.`freelancersPackages` AS `bultos_autonomos`,
|
||||
`rm`.`kmCost` AS `coste_km`,
|
||||
`rm`.`packageCost` AS `coste_bulto`,
|
||||
`rm`.`freelancerPackageCost` AS `coste_bulto_autonomo`,
|
||||
`rm`.`created` AS `odbc_date`
|
||||
FROM `vn`.`routeMaster` `rm`
|
|
@ -1,18 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`Rutas_monitor`
|
||||
AS SELECT `vn`.`routesMonitor`.`routeFk` AS `Id_Ruta`,
|
||||
`vn`.`routesMonitor`.`name` AS `name`,
|
||||
`vn`.`routesMonitor`.`beachFk` AS `Ubicacion`,
|
||||
`vn`.`routesMonitor`.`ticketPacked` AS `pedidosEncajados`,
|
||||
`vn`.`routesMonitor`.`ticketFree` AS `pedidosLibres`,
|
||||
`vn`.`routesMonitor`.`ticketProduction` AS `pedidosProduccion`,
|
||||
`vn`.`routesMonitor`.`packages` AS `bultos`,
|
||||
`vn`.`routesMonitor`.`note` AS `notas`,
|
||||
`vn`.`routesMonitor`.`dated` AS `fecha`,
|
||||
`vn`.`routesMonitor`.`dockFk` AS `dockFk`,
|
||||
`vn`.`routesMonitor`.`m3` AS `m3`,
|
||||
`vn`.`routesMonitor`.`priority` AS `priority`,
|
||||
`vn`.`routesMonitor`.`etd` AS `etd`,
|
||||
`vn`.`routesMonitor`.`expeditionTruckFk` AS `expeditionTruckFk`
|
||||
FROM `vn`.`routesMonitor`
|
|
@ -1,17 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`VerEspionaje`
|
||||
AS SELECT `Trabajadores`.`CodigoTrabajador` AS `CodigoTrabajador`,
|
||||
`vn2008`.`Espionajes`.`Fecha` AS `Fecha`,
|
||||
`vn2008`.`Espionajes`.`HoraEntrada` AS `HoraEntrada`,
|
||||
`vn2008`.`Espionajes`.`HoraSalida` AS `HoraSalida`,
|
||||
`vn2008`.`Espionajes`.`Id_Equipo` AS `Id_Equipo`,
|
||||
`Trabajadores`.`Id_Trabajador` AS `Id_Trabajador`
|
||||
FROM (
|
||||
`vn2008`.`Espionajes`
|
||||
JOIN `vn2008`.`Trabajadores` ON(
|
||||
`vn2008`.`Espionajes`.`Id_Trabajador` = `Trabajadores`.`Id_Trabajador`
|
||||
)
|
||||
)
|
||||
ORDER BY `Trabajadores`.`CodigoTrabajador`,
|
||||
`vn2008`.`Espionajes`.`Fecha`
|
|
@ -1,7 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`Vistas`
|
||||
AS SELECT `dm`.`id` AS `vista_id`,
|
||||
`dm`.`code` AS `code`,
|
||||
`dm`.`description` AS `vista`
|
||||
FROM `vn`.`deliveryMethod` `dm`
|
|
@ -1,6 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`observation_type`
|
||||
AS SELECT `co`.`id` AS `observation_type_id`,
|
||||
`co`.`description` AS `description`
|
||||
FROM `vn`.`observationType` `co`
|
|
@ -1,15 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`order`
|
||||
AS SELECT `hedera`.`order`.`id` AS `id`,
|
||||
`hedera`.`order`.`date_make` AS `date_make`,
|
||||
`hedera`.`order`.`date_send` AS `date_send`,
|
||||
`hedera`.`order`.`customer_id` AS `customer_id`,
|
||||
`hedera`.`order`.`delivery_method_id` AS `delivery_method_id`,
|
||||
`hedera`.`order`.`agency_id` AS `agency_id`,
|
||||
`hedera`.`order`.`address_id` AS `address_id`,
|
||||
`hedera`.`order`.`note` AS `note`,
|
||||
`hedera`.`order`.`confirmed` AS `confirmed`,
|
||||
`hedera`.`order`.`is_bionic` AS `is_bionic`,
|
||||
`hedera`.`order`.`source_app` AS `source_app`
|
||||
FROM `hedera`.`order`
|
|
@ -1,6 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`order_Tickets`
|
||||
AS SELECT `ot`.`orderFk` AS `order_id`,
|
||||
`ot`.`ticketFk` AS `Id_Ticket`
|
||||
FROM `vn`.`orderTicket` `ot`
|
|
@ -1,7 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`order_component`
|
||||
AS SELECT `c`.`order_row_id` AS `order_row_id`,
|
||||
`c`.`component_id` AS `component_id`,
|
||||
`c`.`price` AS `price`
|
||||
FROM `hedera`.`order_component` `c`
|
|
@ -1,14 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`order_row`
|
||||
AS SELECT `order_row`.`id` AS `id`,
|
||||
`order_row`.`order_id` AS `order_id`,
|
||||
`order_row`.`item_id` AS `item_id`,
|
||||
`order_row`.`warehouse_id` AS `warehouse_id`,
|
||||
`order_row`.`shipment` AS `shipment`,
|
||||
`order_row`.`amount` AS `amount`,
|
||||
`order_row`.`price` AS `price`,
|
||||
`order_row`.`rate` AS `rate`,
|
||||
`order_row`.`created` AS `created`,
|
||||
`order_row`.`Id_Movimiento` AS `Id_Movimiento`
|
||||
FROM `hedera`.`order_row`
|
|
@ -1,10 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`sharingcart`
|
||||
AS SELECT `sc`.`id` AS `id`,
|
||||
`sc`.`workerFk` AS `Id_Trabajador`,
|
||||
`sc`.`started` AS `datSTART`,
|
||||
`sc`.`ended` AS `datEND`,
|
||||
`sc`.`workerSubstitute` AS `Id_Suplente`,
|
||||
`sc`.`created` AS `odbc_date`
|
||||
FROM `vn`.`sharingCart` `sc`
|
|
@ -1,9 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`sharingclient`
|
||||
AS SELECT `sc`.`id` AS `id`,
|
||||
`sc`.`workerFk` AS `Id_Trabajador`,
|
||||
`sc`.`started` AS `datSTART`,
|
||||
`sc`.`ended` AS `datEND`,
|
||||
`sc`.`clientFk` AS `Id_Cliente`
|
||||
FROM `vn`.`sharingClient` `sc`
|
|
@ -1,12 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`sms`
|
||||
AS SELECT `t`.`id` AS `id`,
|
||||
`t`.`senderFk` AS `Id_trabajador`,
|
||||
`t`.`sender` AS `from`,
|
||||
`t`.`destination` AS `to`,
|
||||
`t`.`message` AS `text`,
|
||||
`t`.`statusCode` AS `sent`,
|
||||
`t`.`status` AS `response`,
|
||||
`t`.`created` AS `DATE_ODBC`
|
||||
FROM `vn`.`sms` `t`
|
|
@ -1,11 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`tarifas`
|
||||
AS SELECT `r`.`id` AS `tarifa_id`,
|
||||
`r`.`dated` AS `fecha`,
|
||||
`r`.`warehouseFk` AS `warehouse_id`,
|
||||
`r`.`rate0` AS `t0`,
|
||||
`r`.`rate1` AS `t1`,
|
||||
`r`.`rate2` AS `t2`,
|
||||
`r`.`rate3` AS `t3`
|
||||
FROM `vn`.`rate` `r`
|
|
@ -1,9 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`ticketCreationData`
|
||||
AS SELECT dayname(`h`.`confirm_date`) AS `DiadelaSemana`,
|
||||
HOUR(`h`.`confirm_date`) AS `Hora`,
|
||||
cast(`h`.`confirm_date` AS date) AS `Fecha`,
|
||||
`h`.`source_app` AS `Dispositivo`
|
||||
FROM `hedera`.`order` `h`
|
||||
WHERE `h`.`confirm_date` <> 0
|
|
@ -1,38 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`ticketMRW`
|
||||
AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`,
|
||||
`Tickets`.`empresa_id` AS `empresa_id`,
|
||||
`Consignatarios`.`consignatario` AS `Consignatario`,
|
||||
`Consignatarios`.`domicilio` AS `DOMICILIO`,
|
||||
`Consignatarios`.`poblacion` AS `POBLACION`,
|
||||
`Consignatarios`.`codPostal` AS `CODPOSTAL`,
|
||||
`Consignatarios`.`telefono` AS `telefono`,
|
||||
`Consignatarios`.`movil` AS `movil`,
|
||||
`Clientes`.`if` AS `IF`,
|
||||
`Tickets`.`Id_Ticket` AS `Id_Ticket`,
|
||||
`Tickets`.`warehouse_id` AS `warehouse_id`,
|
||||
`Consignatarios`.`id_consigna` AS `Id_Consigna`,
|
||||
`Paises`.`Codigo` AS `CodigoPais`,
|
||||
`Tickets`.`Fecha` AS `Fecha`,
|
||||
`province`.`province_id` AS `province_id`,
|
||||
`Tickets`.`landing` AS `landing`
|
||||
FROM (
|
||||
(
|
||||
(
|
||||
(
|
||||
`vn2008`.`Clientes`
|
||||
JOIN `vn2008`.`Consignatarios` ON(
|
||||
`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`
|
||||
)
|
||||
)
|
||||
JOIN `vn2008`.`Tickets` ON(
|
||||
`Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna`
|
||||
)
|
||||
)
|
||||
JOIN `vn2008`.`province` ON(
|
||||
`Consignatarios`.`province_id` = `province`.`province_id`
|
||||
)
|
||||
)
|
||||
JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`)
|
||||
)
|
|
@ -1,19 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`tr2`
|
||||
AS SELECT `vn`.`travel`.`id` AS `id`,
|
||||
`vn`.`travel`.`shipped` AS `shipped`,
|
||||
`vn`.`travel`.`shipmentHour` AS `shipmentHour`,
|
||||
`vn`.`travel`.`landed` AS `landed`,
|
||||
`vn`.`travel`.`landingHour` AS `landingHour`,
|
||||
`vn`.`travel`.`warehouseInFk` AS `warehouseInFk`,
|
||||
`vn`.`travel`.`warehouseOutFk` AS `warehouseOutFk`,
|
||||
`vn`.`travel`.`agencyModeFk` AS `agencyFk`,
|
||||
`vn`.`travel`.`ref` AS `ref`,
|
||||
`vn`.`travel`.`isDelivered` AS `isDelivered`,
|
||||
`vn`.`travel`.`isReceived` AS `isReceived`,
|
||||
`vn`.`travel`.`m3` AS `m3`,
|
||||
`vn`.`travel`.`kg` AS `kg`,
|
||||
`vn`.`travel`.`cargoSupplierFk` AS `cargoSupplierFk`,
|
||||
`vn`.`travel`.`totalEntries` AS `totalEntries`
|
||||
FROM `vn`.`travel`
|
|
@ -1,11 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`travel_thermograph`
|
||||
AS SELECT `tt`.`thermographFk` AS `thermograph_id`,
|
||||
`tt`.`created` AS `odbc_date`,
|
||||
`tt`.`warehouseFk` AS `warehouse_id`,
|
||||
`tt`.`travelFk` AS `travel_id`,
|
||||
`tt`.`temperatureFk` AS `temperature`,
|
||||
`tt`.`result` AS `result`,
|
||||
`tt`.`dmsFk` AS `gestdoc_id`
|
||||
FROM `vn`.`travelThermograph` `tt`
|
|
@ -1,5 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_account`
|
||||
AS SELECT `a`.`id` AS `user_id`
|
||||
FROM `account`.`account` `a`
|
|
@ -1,15 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_analisis_ventas`
|
||||
AS SELECT `bi`.`analisis_ventas`.`Familia` AS `Familia`,
|
||||
`bi`.`analisis_ventas`.`Reino` AS `Reino`,
|
||||
`bi`.`analisis_ventas`.`Comercial` AS `Comercial`,
|
||||
`bi`.`analisis_ventas`.`Comprador` AS `Comprador`,
|
||||
`bi`.`analisis_ventas`.`Provincia` AS `Provincia`,
|
||||
`bi`.`analisis_ventas`.`almacen` AS `almacen`,
|
||||
`bi`.`analisis_ventas`.`Año` AS `Año`,
|
||||
`bi`.`analisis_ventas`.`Mes` AS `Mes`,
|
||||
`bi`.`analisis_ventas`.`Semana` AS `Semana`,
|
||||
`bi`.`analisis_ventas`.`Vista` AS `Vista`,
|
||||
`bi`.`analisis_ventas`.`Importe` AS `Importe`
|
||||
FROM `bi`.`analisis_ventas`
|
|
@ -1,21 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_barcodes`
|
||||
AS SELECT `Articles`.`Id_Article` AS `code`,
|
||||
`Articles`.`Id_Article` AS `Id_Article`
|
||||
FROM `vn2008`.`Articles`
|
||||
UNION ALL
|
||||
SELECT `barcodes`.`code` AS `code`,
|
||||
`barcodes`.`Id_Article` AS `Id_Article`
|
||||
FROM `vn2008`.`barcodes`
|
||||
UNION ALL
|
||||
SELECT `c`.`Id_Compra` AS `Id_Compra`,
|
||||
`c`.`Id_Article` AS `Id_Article`
|
||||
FROM (
|
||||
(
|
||||
`vn2008`.`Compres` `c`
|
||||
JOIN `vn2008`.`Entradas` `e` ON(`c`.`Id_Entrada` = `e`.`Id_Entrada`)
|
||||
)
|
||||
JOIN `vn2008`.`travel` `tr` ON(`tr`.`id` = `e`.`travel_id`)
|
||||
)
|
||||
WHERE `tr`.`landing` >= `util`.`VN_CURDATE`() + INTERVAL -15 DAY
|
|
@ -1,8 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_departure_limit`
|
||||
AS SELECT `cache`.`departure_limit`.`warehouse_id` AS `warehouse_id`,
|
||||
`cache`.`departure_limit`.`fecha` AS `fecha`,
|
||||
`cache`.`departure_limit`.`hora` AS `hora`,
|
||||
`cache`.`departure_limit`.`minSpeed` AS `minSpeed`
|
||||
FROM `cache`.`departure_limit`
|
|
@ -1,41 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_descuadre_bionic`
|
||||
AS SELECT `t`.`Id_Ticket` AS `Id_Ticket`,
|
||||
`t`.`Alias` AS `Alias`,
|
||||
`m`.`Concepte` AS `Concepte`,
|
||||
sum(`mc`.`Valor`) AS `suma_componente`,
|
||||
`m`.`Preu` AS `Preu`,
|
||||
`m`.`Descuento` AS `Descuento`,
|
||||
`m`.`Preu` * (100 - `m`.`Descuento`) / 100 - sum(`mc`.`Valor`) AS `diferencia`,
|
||||
`t`.`Fecha` AS `Fecha`,
|
||||
`m`.`Preu` > 0
|
||||
AND `tp`.`reino_id` <> 6
|
||||
AND `a`.`tipo_id` NOT IN (7, 115) AS `benvenut`
|
||||
FROM (
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
`vn2008`.`Movimientos` `m`
|
||||
JOIN `vn2008`.`Tickets` `t` ON(`m`.`Id_Ticket` = `t`.`Id_Ticket`)
|
||||
)
|
||||
JOIN `vn2008`.`Clientes` `c` ON(`t`.`Id_Cliente` = `c`.`id_cliente`)
|
||||
)
|
||||
JOIN `vn2008`.`warehouse` `w` ON(`w`.`id` = `t`.`warehouse_id`)
|
||||
)
|
||||
JOIN `vn2008`.`Articles` `a` ON(`m`.`Id_Article` = `a`.`Id_Article`)
|
||||
)
|
||||
JOIN `vn2008`.`Tipos` `tp` ON(`a`.`tipo_id` = `tp`.`tipo_id`)
|
||||
)
|
||||
LEFT JOIN `vn2008`.`Movimientos_componentes` `mc` ON(`m`.`Id_Movimiento` = `mc`.`Id_Movimiento`)
|
||||
)
|
||||
WHERE `t`.`Fecha` >= '2015-09-01'
|
||||
AND `t`.`empresa_id` IN (442, 791, 567)
|
||||
AND `w`.`reserve` <> 0
|
||||
AND `c`.`real` <> 0
|
||||
AND `tp`.`reino_id` <> 6
|
||||
GROUP BY `m`.`Id_Movimiento`
|
||||
HAVING abs(`diferencia`) > 0.01
|
||||
OR `diferencia` IS NULL
|
|
@ -1,11 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_inter`
|
||||
AS SELECT `tt`.`id` AS `inter_id`,
|
||||
`tt`.`stateFk` AS `state_id`,
|
||||
`tt`.`notes` AS `nota`,
|
||||
`tt`.`created` AS `odbc_date`,
|
||||
`tt`.`ticketFk` AS `Id_Ticket`,
|
||||
`tt`.`userFk` AS `Id_Trabajador`,
|
||||
`tt`.`supervisorFk` AS `Id_supervisor`
|
||||
FROM `vn`.`ticketTracking` `tt`
|
|
@ -1,23 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_miriam`
|
||||
AS SELECT `M`.`Id_Article` AS `Id_Article`,
|
||||
`M`.`Concepte` AS `Concepte`,
|
||||
`M`.`Cantidad` AS `Cantidad`,
|
||||
`M`.`Preu` AS `Preu`,
|
||||
`M`.`Descuento` AS `Descuento`,
|
||||
`T`.`Fecha` AS `Fecha`,
|
||||
`T`.`Id_Cliente` AS `Id_Cliente`,
|
||||
`M`.`Cantidad` * `M`.`Preu` * (100 - `M`.`Descuento`) / 100 AS `Importe`
|
||||
FROM (
|
||||
(
|
||||
(
|
||||
`vn2008`.`Tickets` `T`
|
||||
JOIN `vn2008`.`Movimientos` `M` ON(`T`.`Id_Ticket` = `M`.`Id_Ticket`)
|
||||
)
|
||||
JOIN `vn2008`.`Articles` `A` ON(`M`.`Id_Article` = `A`.`Id_Article`)
|
||||
)
|
||||
JOIN `vn2008`.`Tipos` `TP` ON(`A`.`tipo_id` = `TP`.`tipo_id`)
|
||||
)
|
||||
WHERE `T`.`Fecha` >= '2011-01-01'
|
||||
AND `A`.`tipo_id` = 7
|
|
@ -1,35 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_price_fixed`
|
||||
AS SELECT `pf`.`warehouse_id` AS `warehouse_id`,
|
||||
`pf`.`item_id` AS `item_id`,
|
||||
`pf`.`rate_0` AS `rate_0`,
|
||||
`pf`.`rate_1` AS `rate_1`,
|
||||
`pf`.`rate_2` AS `rate_2`,
|
||||
`pf`.`rate_3` AS `rate_3`,
|
||||
`pf`.`date_start` AS `date_start`,
|
||||
`pf`.`date_end` AS `date_end`,
|
||||
`pf`.`bonus` AS `bonus`,
|
||||
`pf`.`grouping` AS `grouping`,
|
||||
`pf`.`Packing` AS `Packing`,
|
||||
`pf`.`caja` AS `caja`
|
||||
FROM `vn2008`.`price_fixed` `pf`
|
||||
WHERE `pf`.`warehouse_id` < 1000
|
||||
UNION ALL
|
||||
SELECT `wg`.`warehouse_id` AS `warehouse_id`,
|
||||
`pf`.`item_id` AS `item_id`,
|
||||
`pf`.`rate_0` AS `rate_0`,
|
||||
`pf`.`rate_1` AS `rate_1`,
|
||||
`pf`.`rate_2` AS `rate_2`,
|
||||
`pf`.`rate_3` AS `rate_3`,
|
||||
`pf`.`date_start` AS `date_start`,
|
||||
`pf`.`date_end` AS `date_end`,
|
||||
`pf`.`bonus` AS `bonus`,
|
||||
`pf`.`grouping` AS `grouping`,
|
||||
`pf`.`Packing` AS `Packing`,
|
||||
`pf`.`caja` AS `caja`
|
||||
FROM (
|
||||
`vn2008`.`price_fixed` `pf`
|
||||
JOIN `vn2008`.`warehouse_group` `wg`
|
||||
)
|
||||
WHERE `wg`.`warehouse_alias_id` + 1000 = `pf`.`warehouse_id`
|
|
@ -1,20 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_price_fixed_group`
|
||||
AS SELECT `pf`.`warehouse_id` AS `warehouse_id`,
|
||||
`pf`.`item_id` AS `item_id`,
|
||||
`pf`.`rate_0` AS `rate_0`,
|
||||
`pf`.`rate_1` AS `rate_1`,
|
||||
`pf`.`rate_2` AS `rate_2`,
|
||||
`pf`.`rate_3` AS `rate_3`,
|
||||
`pf`.`date_start` AS `date_start`,
|
||||
`pf`.`date_end` AS `date_end`,
|
||||
`pf`.`bonus` AS `bonus`,
|
||||
`pf`.`grouping` AS `grouping`,
|
||||
`pf`.`Packing` AS `Packing`,
|
||||
`pf`.`caja` AS `caja`
|
||||
FROM `vn2008`.`v_price_fixed` `pf`
|
||||
GROUP BY `pf`.`warehouse_id`,
|
||||
`pf`.`item_id`,
|
||||
`pf`.`date_start`,
|
||||
`pf`.`date_end`
|
|
@ -1,15 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_ticket_amount`
|
||||
AS SELECT `Movimientos`.`Id_Ticket` AS `Id_Ticket`,
|
||||
sum(
|
||||
`Movimientos`.`Cantidad` * `Movimientos`.`Preu` * (100 - `Movimientos`.`Descuento`) / 100
|
||||
) AS `amount`
|
||||
FROM (
|
||||
`vn2008`.`Movimientos`
|
||||
JOIN `vn2008`.`Tickets` ON(
|
||||
`Movimientos`.`Id_Ticket` = `Tickets`.`Id_Ticket`
|
||||
)
|
||||
)
|
||||
WHERE `Tickets`.`Fecha` >= `util`.`VN_CURDATE`() + INTERVAL -6 MONTH
|
||||
GROUP BY `Movimientos`.`Id_Ticket`
|
|
@ -1,10 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_warehouse`
|
||||
AS SELECT `warehouse`.`id` AS `id`,
|
||||
`warehouse`.`name` AS `almacen`
|
||||
FROM `vn2008`.`warehouse`
|
||||
UNION ALL
|
||||
SELECT 1000 + `warehouse_alias`.`warehouse_alias_id` AS `warehouse_alias_id`,
|
||||
concat(`warehouse_alias`.`alias`, '(G)') AS `concat(alias, '(G)')`
|
||||
FROM `vn2008`.`warehouse_alias`
|
|
@ -1,12 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_xsubclien`
|
||||
AS SELECT DISTINCT `Facturas`.`Id_Cliente` AS `Id_Cliente`,
|
||||
`Facturas`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`Facturas`
|
||||
WHERE `Facturas`.`Fecha` > `util`.`VN_CURDATE`() + INTERVAL -2 MONTH
|
||||
UNION
|
||||
SELECT `Recibos`.`Id_Cliente` AS `Id_Cliente`,
|
||||
`Recibos`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`Recibos`
|
||||
WHERE `Recibos`.`Fechacobro` > `util`.`VN_CURDATE`() + INTERVAL -2 MONTH
|
|
@ -17,7 +17,7 @@ AS SELECT `Clientes`.`Cuenta` AS `COD`,
|
|||
`province`.`name` AS `PROVINCIA`,
|
||||
`Clientes`.`codPostal` AS `CODPOSTAL`,
|
||||
`p`.`Codigo` AS `country_code`,
|
||||
`v_xsubclien`.`empresa_id` AS `empresa_id`,
|
||||
sub.`empresa_id` AS `empresa_id`,
|
||||
substr(
|
||||
`Clientes`.`e-mail`,
|
||||
1,
|
||||
|
@ -39,8 +39,18 @@ FROM (
|
|||
(
|
||||
(
|
||||
`vn2008`.`Clientes`
|
||||
JOIN `vn2008`.`v_xsubclien` ON(
|
||||
`Clientes`.`id_cliente` = `v_xsubclien`.`Id_Cliente`
|
||||
JOIN (
|
||||
SELECT DISTINCT `Facturas`.`Id_Cliente` AS `Id_Cliente`,
|
||||
`Facturas`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`Facturas`
|
||||
WHERE `Facturas`.`Fecha` > `util`.`VN_CURDATE`() + INTERVAL -2 MONTH
|
||||
UNION
|
||||
SELECT `Recibos`.`Id_Cliente` AS `Id_Cliente`,
|
||||
`Recibos`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`Recibos`
|
||||
WHERE `Recibos`.`Fechacobro` > `util`.`VN_CURDATE`() + INTERVAL -2 MONTH
|
||||
) sub ON(
|
||||
`Clientes`.`id_cliente` = sub.`Id_Cliente`
|
||||
)
|
||||
)
|
||||
LEFT JOIN `vn2008`.`Paises` `p` ON(`p`.`Id` = `Clientes`.`Id_Pais`)
|
||||
|
@ -50,7 +60,7 @@ FROM (
|
|||
)
|
||||
)
|
||||
GROUP BY `Clientes`.`id_cliente`,
|
||||
`v_xsubclien`.`empresa_id`
|
||||
sub.`empresa_id`
|
||||
UNION ALL
|
||||
SELECT `Proveedores`.`cuenta` AS `Cuenta`,
|
||||
`Proveedores`.`Proveedor` AS `Proveedor`,
|
||||
|
@ -68,7 +78,7 @@ SELECT `Proveedores`.`cuenta` AS `Cuenta`,
|
|||
`prov`.`name` AS `Provincia`,
|
||||
`Proveedores`.`codpos` AS `CP`,
|
||||
`p`.`Codigo` AS `country_code`,
|
||||
`v_xsubprov`.`empresa_id` AS `empresa_id`,
|
||||
sub.`empresa_id` AS `empresa_id`,
|
||||
substr(
|
||||
`c`.`email`,
|
||||
1,
|
||||
|
@ -80,8 +90,22 @@ FROM (
|
|||
(
|
||||
(
|
||||
`vn2008`.`Proveedores`
|
||||
JOIN `vn2008`.`v_xsubprov` ON(
|
||||
`Proveedores`.`Id_Proveedor` = `v_xsubprov`.`proveedor_id`
|
||||
JOIN (
|
||||
SELECT `recibida`.`proveedor_id` AS `proveedor_id`,
|
||||
`recibida`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`recibida`
|
||||
WHERE `recibida`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `recibida`.`proveedor_id`,
|
||||
`recibida`.`empresa_id`
|
||||
UNION ALL
|
||||
SELECT `pago`.`id_proveedor` AS `id_proveedor`,
|
||||
`pago`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`pago`
|
||||
WHERE `pago`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `pago`.`id_proveedor`,
|
||||
`pago`.`empresa_id`
|
||||
) sub ON(
|
||||
`Proveedores`.`Id_Proveedor` = sub.`proveedor_id`
|
||||
)
|
||||
)
|
||||
LEFT JOIN `vn2008`.`Paises` `p` ON(`p`.`Id` = `Proveedores`.`pais_id`)
|
||||
|
@ -93,8 +117,8 @@ FROM (
|
|||
LEFT JOIN `vn`.`supplierContact` `c` ON(`c`.`supplierFk` = `Proveedores`.`Id_Proveedor`)
|
||||
)
|
||||
WHERE `Proveedores`.`oficial` <> 0
|
||||
GROUP BY `v_xsubprov`.`proveedor_id`,
|
||||
`v_xsubprov`.`empresa_id`
|
||||
GROUP BY sub.`proveedor_id`,
|
||||
sub.`empresa_id`
|
||||
UNION ALL
|
||||
SELECT `Gastos`.`Id_Gasto` COLLATE utf8mb3_unicode_ci AS `Id_Gasto`,
|
||||
`Gastos`.`Gasto` COLLATE utf8mb3_unicode_ci AS `Gasto`,
|
||||
|
@ -136,7 +160,7 @@ SELECT lpad(right(`Proveedores`.`cuenta`, 5), 10, '47510000') AS `Cuenta`,
|
|||
`prov`.`name` AS `Provincia`,
|
||||
`Proveedores`.`codpos` AS `CP`,
|
||||
`p`.`Codigo` AS `country_code`,
|
||||
`v_xsubprov`.`empresa_id` AS `empresa_id`,
|
||||
sub.`empresa_id` AS `empresa_id`,
|
||||
substr(
|
||||
`c`.`email`,
|
||||
1,
|
||||
|
@ -148,8 +172,22 @@ FROM (
|
|||
(
|
||||
(
|
||||
`vn2008`.`Proveedores`
|
||||
JOIN `vn2008`.`v_xsubprov` ON(
|
||||
`Proveedores`.`Id_Proveedor` = `v_xsubprov`.`proveedor_id`
|
||||
JOIN (
|
||||
SELECT `recibida`.`proveedor_id` AS `proveedor_id`,
|
||||
`recibida`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`recibida`
|
||||
WHERE `recibida`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `recibida`.`proveedor_id`,
|
||||
`recibida`.`empresa_id`
|
||||
UNION ALL
|
||||
SELECT `pago`.`id_proveedor` AS `id_proveedor`,
|
||||
`pago`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`pago`
|
||||
WHERE `pago`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `pago`.`id_proveedor`,
|
||||
`pago`.`empresa_id`
|
||||
) sub ON(
|
||||
`Proveedores`.`Id_Proveedor` = sub.`proveedor_id`
|
||||
)
|
||||
)
|
||||
LEFT JOIN `vn2008`.`Paises` `p` ON(`p`.`Id` = `Proveedores`.`pais_id`)
|
||||
|
@ -165,5 +203,5 @@ WHERE (
|
|||
OR `Proveedores`.`cuenta` LIKE '_____2____'
|
||||
)
|
||||
AND `Proveedores`.`oficial` = 1
|
||||
GROUP BY `v_xsubprov`.`proveedor_id`,
|
||||
`v_xsubprov`.`empresa_id`
|
||||
GROUP BY sub.`proveedor_id`,
|
||||
sub.`empresa_id`
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`v_xsubprov`
|
||||
AS SELECT `recibida`.`proveedor_id` AS `proveedor_id`,
|
||||
`recibida`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`recibida`
|
||||
WHERE `recibida`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `recibida`.`proveedor_id`,
|
||||
`recibida`.`empresa_id`
|
||||
UNION ALL
|
||||
SELECT `pago`.`id_proveedor` AS `id_proveedor`,
|
||||
`pago`.`empresa_id` AS `empresa_id`
|
||||
FROM `vn2008`.`pago`
|
||||
WHERE `pago`.`fecha` > `util`.`VN_CURDATE`() + INTERVAL -3 MONTH
|
||||
GROUP BY `pago`.`id_proveedor`,
|
||||
`pago`.`empresa_id`
|
|
@ -1,8 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`vnCreditClassification`
|
||||
AS SELECT `vn`.`creditClassification`.`id` AS `id`,
|
||||
`vn`.`creditClassification`.`client` AS `client`,
|
||||
`vn`.`creditClassification`.`dateStart` AS `dateStart`,
|
||||
`vn`.`creditClassification`.`dateEnd` AS `dateEnd`
|
||||
FROM `vn`.`creditClassification`
|
|
@ -1,9 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`vnCreditInsurance`
|
||||
AS SELECT `vn`.`creditInsurance`.`id` AS `id`,
|
||||
`vn`.`creditInsurance`.`creditClassification` AS `creditClassification`,
|
||||
`vn`.`creditInsurance`.`credit` AS `credit`,
|
||||
`vn`.`creditInsurance`.`creationDate` AS `creationDate`,
|
||||
`vn`.`creditInsurance`.`grade` AS `grade`
|
||||
FROM `vn`.`creditInsurance`
|
|
@ -1,8 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`vnSolunionCAP`
|
||||
AS SELECT `vn`.`solunionCAP`.`creditInsurance` AS `creditInsurance`,
|
||||
`vn`.`solunionCAP`.`dateStart` AS `dateStart`,
|
||||
`vn`.`solunionCAP`.`dateEnd` AS `dateEnd`,
|
||||
`vn`.`solunionCAP`.`dateLeaving` AS `dateLeaving`
|
||||
FROM `vn`.`solunionCAP`
|
|
@ -1,6 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`warehouse_alias`
|
||||
AS SELECT `wa`.`id` AS `warehouse_alias_id`,
|
||||
`wa`.`name` AS `alias`
|
||||
FROM `vn`.`warehouseAlias` `wa`
|
|
@ -1,7 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`workcenter_holiday`
|
||||
AS SELECT `wh`.`workCenterFk` AS `workcenter_id`,
|
||||
`wh`.`days` AS `day`,
|
||||
`wh`.`year` AS `year`
|
||||
FROM `vn`.`workCenterHoliday` `wh`
|
|
@ -1,19 +0,0 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn2008`.`zoneNickname`
|
||||
AS SELECT `ap`.`warehouse_id` AS `warehouse_id`,
|
||||
`ap`.`agency_id` AS `agency_id`,
|
||||
`ap`.`zona` AS `zona`,
|
||||
concat(
|
||||
'ZONA ',
|
||||
`ap`.`zona`,
|
||||
' ',
|
||||
IF(`ap`.`zona` = 20, 'Madrid', `p`.`name`)
|
||||
) AS `alias`
|
||||
FROM (
|
||||
`vn2008`.`Agencias_province` `ap`
|
||||
JOIN `vn2008`.`province` `p` ON(`p`.`province_id` = `ap`.`province_id`)
|
||||
)
|
||||
GROUP BY `ap`.`zona`,
|
||||
`ap`.`warehouse_id`,
|
||||
`ap`.`agency_id`
|
|
@ -0,0 +1,3 @@
|
|||
ALTER TABLE `vn`.`operator` MODIFY COLUMN linesLimit int(11) DEFAULT 20 NULL COMMENT 'Límite de lineas en una colección para la asignación de pedidos';
|
||||
ALTER TABLE `vn`.`operator` MODIFY COLUMN volumeLimit decimal(10,6) DEFAULT 0.5 NULL COMMENT 'Límite de volumen en una colección para la asignación de pedidos';
|
||||
ALTER TABLE `vn`.`operator` MODIFY COLUMN numberOfWagons int(11) DEFAULT 2 NULL;
|
|
@ -0,0 +1,3 @@
|
|||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES
|
||||
('Ticket', 'makePdfList', '*', 'ALLOW', 'ROLE', 'employee'),
|
||||
('Ticket', 'invoiceTicketsAndPdf', '*', 'ALLOW', 'ROLE', 'employee');
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE account.roleLog DROP FOREIGN KEY roleLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE account.userLog DROP FOREIGN KEY userLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.entryLog DROP FOREIGN KEY entryLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.clientLog DROP FOREIGN KEY clientLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.itemLog DROP FOREIGN KEY itemLogItemFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.shelvingLog DROP FOREIGN KEY shelvingLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.workerLog DROP FOREIGN KEY workerFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.deviceProductionLog DROP FOREIGN KEY deviceProductionOriginFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.zoneLog DROP FOREIGN KEY zoneLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.rateLog DROP FOREIGN KEY rateOriginFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.ticketLog DROP FOREIGN KEY ticketLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.userLog DROP FOREIGN KEY userLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.routeLog DROP FOREIGN KEY routeLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.claimLog DROP FOREIGN KEY claimOriginFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.supplierLog DROP FOREIGN KEY supplierLog_supplierFk;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.invoiceInLog DROP FOREIGN KEY invoiceInLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.travelLog DROP FOREIGN KEY travelLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.packingSiteDeviceLog DROP FOREIGN KEY packingSiteDeviceLog_ibfk_1;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.workerTimeControl ADD device varchar(255) DEFAULT NULL NULL COMMENT 'Dispositivo en el que se ha fichado' AFTER `order`;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.workerTimeControl CHANGE direction direction enum('in','out','middle') CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT 'middle' NULL AFTER timed;
|
|
@ -0,0 +1,6 @@
|
|||
-- Place your SQL code here
|
||||
|
||||
USE vn;
|
||||
|
||||
ALTER TABLE vn.item CHANGE packingShelve packingShelve__ int(11) DEFAULT NULL NULL COMMENT '@deprecated 2024-31-01';
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
REVOKE SELECT, INSERT, UPDATE ON TABLE vn2008.Rutas_Master FROM productionAssi;
|
||||
REVOKE SELECT ON TABLE vn2008.Rutas_monitor FROM employee;
|
||||
REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE vn2008.tarifas FROM buyer;
|
||||
REVOKE SELECT, UPDATE ON TABLE vn2008.tarifas FROM buyerBoss;
|
|
@ -0,0 +1 @@
|
|||
REVOKE SELECT ON TABLE vn2008.Vistas FROM employee;
|
|
@ -1,7 +1,7 @@
|
|||
version: '3.7'
|
||||
services:
|
||||
front:
|
||||
image: registry.verdnatura.es/salix-front:${BRANCH_NAME:?}
|
||||
image: registry.verdnatura.es/salix-front:${VERSION:?}
|
||||
build:
|
||||
context: .
|
||||
dockerfile: front/Dockerfile
|
||||
|
@ -16,12 +16,13 @@ services:
|
|||
limits:
|
||||
memory: 1G
|
||||
back:
|
||||
image: registry.verdnatura.es/salix-back:${BRANCH_NAME:?}
|
||||
image: registry.verdnatura.es/salix-back:${VERSION:?}
|
||||
build: .
|
||||
ports:
|
||||
- 3000
|
||||
environment:
|
||||
- NODE_ENV
|
||||
- DEBUG
|
||||
configs:
|
||||
- source: datasources
|
||||
target: /etc/salix/datasources.json
|
||||
|
|
|
@ -27,6 +27,6 @@ describe('Ticket expeditions and log path', () => {
|
|||
const result = await page
|
||||
.countElement(selectors.ticketExpedition.expeditionRow);
|
||||
|
||||
expect(result).toEqual(4);
|
||||
expect(result).toEqual(6);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -41,10 +41,10 @@ describe('Supplier basic data path', () => {
|
|||
expect(result).toEqual('Plants Nick SL');
|
||||
});
|
||||
|
||||
it('should check the isSerious checkbox is now unchecked', async() => {
|
||||
it('should check the isSerious checkbox is now checked', async() => {
|
||||
const result = await page.checkboxState(selectors.supplierBasicData.isSerious);
|
||||
|
||||
expect(result).toBe('unchecked');
|
||||
expect(result).toBe('checked');
|
||||
});
|
||||
|
||||
it('should check the isActive checkbox is now unchecked', async() => {
|
||||
|
|
|
@ -62,8 +62,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/angular-translate": {
|
||||
"version": "2.19.0",
|
||||
"license": "MIT",
|
||||
"version": "2.19.1",
|
||||
"resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.19.1.tgz",
|
||||
"integrity": "sha512-SrU40ndnL422vXiVoqVveCmSnCzMcIXxQgnl7Cv9krOKUg6B8KZK3ddYzidHR/rxVuySezYHNDgRvzQNKwAdNQ==",
|
||||
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
||||
"dependencies": {
|
||||
"angular": "^1.8.0"
|
||||
},
|
||||
|
@ -185,7 +187,9 @@
|
|||
}
|
||||
},
|
||||
"angular-translate": {
|
||||
"version": "2.19.0",
|
||||
"version": "2.19.1",
|
||||
"resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.19.1.tgz",
|
||||
"integrity": "sha512-SrU40ndnL422vXiVoqVveCmSnCzMcIXxQgnl7Cv9krOKUg6B8KZK3ddYzidHR/rxVuySezYHNDgRvzQNKwAdNQ==",
|
||||
"requires": {
|
||||
"angular": "^1.8.0"
|
||||
}
|
||||
|
|
|
@ -333,9 +333,10 @@
|
|||
"It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}",
|
||||
"This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada",
|
||||
"This user does not have an assigned tablet": "Este usuario no tiene tablet asignada",
|
||||
"Incorrect pin": "Pin incorrecto.",
|
||||
"Incorrect pin": "Pin incorrecto",
|
||||
"You already have the mailAlias": "Ya tienes este alias de correo",
|
||||
"The alias cant be modified": "Este alias de correo no puede ser modificado",
|
||||
"No tickets to invoice": "No hay tickets para facturar",
|
||||
"this warehouse has not dms": "El Almacén no acepta documentos"
|
||||
"this warehouse has not dms": "El Almacén no acepta documentos",
|
||||
alexm marked this conversation as resolved
|
||||
"An email is necessary": "Es necesario un email"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import './index';
|
||||
|
||||
fdescribe('component vnRoleCard', () => {
|
||||
describe('component vnRoleCard', () => {
|
||||
let controller;
|
||||
let $httpBackend;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import './index';
|
||||
|
||||
fdescribe('component vnRoleDescriptor', () => {
|
||||
describe('component vnRoleDescriptor', () => {
|
||||
let controller;
|
||||
let $httpBackend;
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
const UserError = require('vn-loopback/util/user-error');
|
||||
|
||||
module.exports = function(Self) {
|
||||
Self.remoteMethod('createWithUser', {
|
||||
description: 'Creates both client and its web account',
|
||||
|
@ -29,7 +31,11 @@ module.exports = function(Self) {
|
|||
myOptions.transaction = tx;
|
||||
}
|
||||
|
||||
const firstEmail = data.email ? data.email.split(',')[0] : null;
|
||||
if (!data.email)
|
||||
throw new UserError('An email is necessary');
|
||||
|
||||
const firstEmail = data.email.split(',')[0];
|
||||
|
||||
const user = {
|
||||
name: data.userName,
|
||||
email: firstEmail,
|
||||
|
|
|
@ -13,6 +13,8 @@ describe('Client Create', () => {
|
|||
businessTypeFk: 'florist',
|
||||
provinceFk: 1
|
||||
};
|
||||
const newAccountWithoutEmail = JSON.parse(JSON.stringify(newAccount));
|
||||
delete newAccountWithoutEmail.email;
|
||||
|
||||
beforeAll(async() => {
|
||||
const activeCtx = {
|
||||
|
@ -48,6 +50,24 @@ describe('Client Create', () => {
|
|||
}
|
||||
});
|
||||
|
||||
it('should not create a new account', async() => {
|
||||
const tx = await models.Client.beginTransaction({});
|
||||
|
||||
let error;
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
await models.Client.createWithUser(newAccountWithoutEmail, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
error = e.message;
|
||||
|
||||
await tx.rollback();
|
||||
}
|
||||
|
||||
expect(error).toEqual(`An email is necessary`);
|
||||
});
|
||||
|
||||
it('should create a new account', async() => {
|
||||
const tx = await models.Client.beginTransaction({});
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
module.exports = Self => {
|
||||
Self.remoteMethodCtx('makePdfList', {
|
||||
description: 'Handle a list of invoices to generate PDF and send it to client',
|
||||
accessType: 'WRITE',
|
||||
accepts: [
|
||||
{
|
||||
arg: 'ids',
|
||||
type: ['number'],
|
||||
description: 'The invoice id',
|
||||
required: true,
|
||||
http: {source: 'path'}
|
||||
}, {
|
||||
arg: 'printerFk',
|
||||
type: 'number',
|
||||
description: 'The printer to print'
|
||||
}
|
||||
],
|
||||
http: {
|
||||
path: '/:id/makePdfList',
|
||||
verb: 'POST'
|
||||
}
|
||||
});
|
||||
|
||||
Self.makePdfList = async function(ctx, ids, printerFk, options) {
|
||||
const pdfs = ids.map(id =>
|
||||
Self.makePdfAndNotify(ctx, id, printerFk, options)
|
||||
);
|
||||
await Promise.all(pdfs);
|
||||
};
|
||||
};
|
|
@ -17,6 +17,7 @@ describe('InvoiceOut transferInvoice()', () => {
|
|||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||
active: activeCtx
|
||||
});
|
||||
spyOn(models.InvoiceOut, 'makePdfAndNotify');
|
||||
});
|
||||
|
||||
it('should return the id of the created issued invoice', async() => {
|
||||
|
|
|
@ -86,17 +86,17 @@ module.exports = Self => {
|
|||
clonedTicketIds.push(clonedTicket.id);
|
||||
}
|
||||
|
||||
const invoiceCorrection =
|
||||
{correctedFk: id, cplusRectificationTypeFk, siiTypeInvoiceOutFk, invoiceCorrectionTypeFk};
|
||||
const invoiceCorrection = {
|
||||
correctedFk: id,
|
||||
cplusRectificationTypeFk,
|
||||
siiTypeInvoiceOutFk,
|
||||
invoiceCorrectionTypeFk
|
||||
};
|
||||
const refundTicketIds = refundTickets.map(ticket => ticket.id);
|
||||
|
||||
await models.Ticket.invoiceTickets(ctx, refundTicketIds, invoiceCorrection, myOptions);
|
||||
const [invoiceId] = await models.Ticket.invoiceTickets(ctx, clonedTicketIds, null, myOptions);
|
||||
|
||||
if (tx) {
|
||||
await tx.commit();
|
||||
await models.InvoiceOut.makePdfAndNotify(ctx, invoiceId, null);
|
||||
}
|
||||
const [invoiceId] = await models.Ticket.invoiceTicketsAndPdf(ctx, clonedTicketIds, null, myOptions);
|
||||
|
||||
return invoiceId;
|
||||
} catch (e) {
|
||||
|
|
|
@ -13,6 +13,7 @@ module.exports = Self => {
|
|||
require('../methods/invoiceOut/createManualInvoice')(Self);
|
||||
require('../methods/invoiceOut/clientsToInvoice')(Self);
|
||||
require('../methods/invoiceOut/invoiceClient')(Self);
|
||||
require('../methods/invoiceOut/makePdfList')(Self);
|
||||
require('../methods/invoiceOut/makePdfAndNotify')(Self);
|
||||
require('../methods/invoiceOut/refund')(Self);
|
||||
require('../methods/invoiceOut/invoiceEmail')(Self);
|
||||
|
|
|
@ -143,15 +143,12 @@
|
|||
"isFloramondo": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"packingShelve": {
|
||||
"type": "number"
|
||||
},
|
||||
"isLaid": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"isPhotoRequested": {
|
||||
"type": "boolean",
|
||||
"mysql":{
|
||||
"mysql": {
|
||||
"columnName": "doPhoto"
|
||||
}
|
||||
},
|
||||
|
@ -226,4 +223,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -63,7 +63,7 @@ module.exports = Self => {
|
|||
|
||||
const isAvailable = itemStock.available > 0;
|
||||
|
||||
if (!isAvailable || !ctx.args.quantity)
|
||||
if (!isAvailable)
|
||||
throw new UserError(`This item is not available`);
|
||||
|
||||
if (request.saleFk)
|
||||
|
|
|
@ -76,15 +76,11 @@ module.exports = function(Self) {
|
|||
for (const ticketIds of ticketsByAddress)
|
||||
invoicesIds.push(await createInvoice(ctx, companyId, ticketIds, invoiceCorrection, myOptions));
|
||||
|
||||
if (tx) await tx.commit();
|
||||
tx && await tx.commit();
|
||||
} catch (e) {
|
||||
if (tx) await tx.rollback();
|
||||
throw e;
|
||||
}
|
||||
if (tx) {
|
||||
for (const invoiceId of invoicesIds)
|
||||
await models.InvoiceOut.makePdfAndNotify(ctx, invoiceId, null);
|
||||
}
|
||||
|
||||
return invoicesIds;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
module.exports = function(Self) {
|
||||
Self.remoteMethodCtx('invoiceTicketsAndPdf', {
|
||||
description: 'Make out an invoice from one or more tickets',
|
||||
accessType: 'WRITE',
|
||||
accepts: [
|
||||
{
|
||||
arg: 'ticketsIds',
|
||||
description: 'The tickets id',
|
||||
type: ['number'],
|
||||
required: true
|
||||
},
|
||||
{
|
||||
arg: 'invoiceCorrection',
|
||||
description: 'The invoice correction',
|
||||
type: 'object',
|
||||
}
|
||||
|
||||
],
|
||||
returns: {
|
||||
type: ['object'],
|
||||
root: true
|
||||
},
|
||||
http: {
|
||||
path: `/invoiceTicketsAndPdf`,
|
||||
verb: 'POST'
|
||||
}
|
||||
});
|
||||
|
||||
Self.invoiceTicketsAndPdf = async(ctx, ticketsIds, invoiceCorrection, options) => {
|
||||
const invoiceIds = await Self.invoiceTickets(ctx, ticketsIds, invoiceCorrection, options);
|
||||
await Self.app.models.InvoiceOut.makePdfList(ctx, invoiceIds, null, options);
|
||||
return invoiceIds;
|
||||
};
|
||||
};
|
||||
|
|
@ -72,24 +72,25 @@ module.exports = Self => {
|
|||
|
||||
async function createGestDoc(id) {
|
||||
const ticket = await models.Ticket.findById(id,
|
||||
{include: [
|
||||
{
|
||||
relation: 'warehouse',
|
||||
scope: {
|
||||
fields: ['id']
|
||||
{
|
||||
include: [
|
||||
{
|
||||
relation: 'warehouse',
|
||||
scope: {
|
||||
fields: ['id']
|
||||
}
|
||||
}, {
|
||||
relation: 'client',
|
||||
scope: {
|
||||
fields: ['name']
|
||||
}
|
||||
}, {
|
||||
relation: 'route',
|
||||
scope: {
|
||||
fields: ['id']
|
||||
}
|
||||
}
|
||||
}, {
|
||||
relation: 'client',
|
||||
scope: {
|
||||
fields: ['name']
|
||||
}
|
||||
}, {
|
||||
relation: 'route',
|
||||
scope: {
|
||||
fields: ['id']
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}, myOptions);
|
||||
const dmsType = await models.DmsType.findOne({where: {code: 'Ticket'}, fields: ['id']}, myOptions);
|
||||
const ctxUploadFile = Object.assign({}, ctx);
|
||||
|
@ -125,17 +126,17 @@ module.exports = Self => {
|
|||
if (await gestDocExists(ticketId))
|
||||
throw new UserError('Ticket is already signed');
|
||||
|
||||
if (location) setLocation(ticketId);
|
||||
if (location) await setLocation(ticketId);
|
||||
if (!gestDocCreated) await createGestDoc(ticketId);
|
||||
await models.TicketDms.create({ticketFk: ticketId, dmsFk: dms[0].id}, myOptions);
|
||||
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
|
||||
await ticket.updateAttribute('isSigned', true, myOptions);
|
||||
|
||||
const deliveryState = await models.State.find({
|
||||
const deliveryState = await models.State.findOne({
|
||||
where: {
|
||||
code: 'DELIVERED'
|
||||
}
|
||||
}, options);
|
||||
}, myOptions);
|
||||
|
||||
await models.Ticket.state(ctx, {
|
||||
ticketFk: ticketId,
|
||||
|
|
|
@ -102,7 +102,7 @@ describe('ticket invoiceTickets()', () => {
|
|||
const options = {transaction: tx};
|
||||
|
||||
const ticketsIds = [11];
|
||||
const invoicesIds = await models.Ticket.invoiceTickets(ctx, ticketsIds, null, options);
|
||||
const invoicesIds = await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
|
||||
expect(invoicesIds.length).toBeGreaterThan(0);
|
||||
|
||||
|
|
|
@ -0,0 +1,115 @@
|
|||
const models = require('vn-loopback/server/server').models;
|
||||
const LoopBackContext = require('loopback-context');
|
||||
|
||||
describe('ticket invoiceTicketsAndPdf()', () => {
|
||||
const userId = 19;
|
||||
const clientId = 1102;
|
||||
const activeCtx = {
|
||||
getLocale: () => {
|
||||
return 'en';
|
||||
},
|
||||
accessToken: {userId: userId},
|
||||
headers: {origin: 'http://localhost:5000'},
|
||||
};
|
||||
const ctx = {req: activeCtx};
|
||||
|
||||
beforeAll(async() => {
|
||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||
active: activeCtx
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error when invoicing tickets from multiple clients', async() => {
|
||||
const invoiceOutModel = models.InvoiceOut;
|
||||
spyOn(invoiceOutModel, 'makePdfAndNotify');
|
||||
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
const ticketsIds = [11, 16];
|
||||
await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
error = e;
|
||||
await tx.rollback();
|
||||
}
|
||||
|
||||
expect(error.message).toEqual(`You can't invoice tickets from multiple clients`);
|
||||
});
|
||||
|
||||
it(`should throw an error when invoicing a client without tax data checked`, async() => {
|
||||
const invoiceOutModel = models.InvoiceOut;
|
||||
spyOn(invoiceOutModel, 'makePdfAndNotify');
|
||||
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
const client = await models.Client.findById(clientId, null, options);
|
||||
await client.updateAttribute('isTaxDataChecked', false, options);
|
||||
|
||||
const ticketsIds = [11];
|
||||
await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
error = e;
|
||||
await tx.rollback();
|
||||
}
|
||||
|
||||
expect(error.message).toEqual(`This client can't be invoiced`);
|
||||
});
|
||||
|
||||
it('should invoice a ticket, then try again to fail', async() => {
|
||||
const invoiceOutModel = models.InvoiceOut;
|
||||
spyOn(invoiceOutModel, 'makePdfAndNotify');
|
||||
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
const ticketsIds = [11];
|
||||
await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
error = e;
|
||||
await tx.rollback();
|
||||
}
|
||||
|
||||
expect(error.message).toEqual(`This ticket is already invoiced`);
|
||||
});
|
||||
|
||||
it('should success to invoice a ticket', async() => {
|
||||
const invoiceOutModel = models.InvoiceOut;
|
||||
spyOn(invoiceOutModel, 'makePdfAndNotify');
|
||||
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
const ticketsIds = [11];
|
||||
const invoicesIds = await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options);
|
||||
|
||||
expect(invoicesIds.length).toBeGreaterThan(0);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
await tx.rollback();
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
});
|
|
@ -42,5 +42,6 @@ module.exports = function(Self) {
|
|||
require('../methods/ticket/expeditionPalletLabel')(Self);
|
||||
require('../methods/ticket/saveSign')(Self);
|
||||
require('../methods/ticket/invoiceTickets')(Self);
|
||||
require('../methods/ticket/invoiceTicketsAndPdf')(Self);
|
||||
require('../methods/ticket/docuwareDownload')(Self);
|
||||
};
|
||||
|
|
|
@ -265,7 +265,7 @@ class Controller extends Section {
|
|||
});
|
||||
}
|
||||
|
||||
return this.$http.post(`Tickets/invoiceTickets`, {ticketsIds: [this.id]})
|
||||
return this.$http.post(`Tickets/invoiceTicketsAndPdf`, {ticketsIds: [this.id]})
|
||||
.then(() => this.reload())
|
||||
.then(() => this.vnApp.showSuccess(this.$t('Ticket invoiced')));
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
No encuentro ocurrencias
Si las hay, es correcto que empiece por minúscula?
Viene en minúsculas de :
db/dump/.dump/triggers.sql
db/routines/vn/triggers/dms_beforeInsert.sql