Skip to content
99nnss edited this page Mar 30, 2024 · 178 revisions

Tecnología Spring: Proyecto TPV - Back-end

Back-end con Tecnologías de Código Abierto (SPRING)


Curso 2023-24. Enunciado de prácticas

story: TPV

Autor: Jesús Bernal
GitHub: @miw-upm
User on commit: jbernal

  • Crear las arquitecturas de los proyectos & Core.

story: Advertising

Autor: Qiuwei Ma
GitHub:qiuweima
User on commit: qiuweima

Permitir mandar publicidad y ofertas a los clientes mediante email que llevan tiempo sin comprar.

Modelo recomendado:

class Advertising{reference:String; articleBarcode:String; userMobile:String; discount:Double; expiryDate:LocalDate }
  • En el menu de administración de Shop, en el menú Products, crear un submenú llamado Run Advertising, cuando se pulsa, se lanza la publicidad con la oferta cuando se cumple una de estas dos condiciones:

    • Si un cliente ha comprado un artículo mas de dos veces y lleva mas de 3 meses y menos de un año sin comprar, se le manda un email con un código de descuento (este código es el atributo Reference del modelo y es de tipo hash), para que se le pueda aplicar el 15% a ese artículo.
    • Si un cliente lleva 12 meses sin comprar, se le manda un email con un código de descuento de un 20%.
  • En el menu de administración de Shop, en el menú Products, crear un submenú llamado Advertising, te muestra una lista de las publicidades mandadas, se puede eliminar cualquiera de ellas, es decir, de las funciones CRUD, solo se implementa Read & Delete.

  • En la página del carrito de la compra de Shop, añadir una nueva caja de texto para poder introducir el código promocional, y si se introduce, se aplica el descuento a los artículos del carrito cuando proceda.

Articles Family Creator

Autor: Wael Louati
GitHub:@wzzzzwwzw
User on commit: Wael Louati

  • Permitir realizar una creación rápida de familias de artículos de un solo proveedor, incluyendo la creación de artículos con asignación automática de código.
  • Las tallas podrían ser 0..60, se podrá configurar la distancia entre tallas, o "XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL", "Especial".

story: Budgets

Autor: Feiyu
GitHub:@feiyu28
User on commit: feiyu

Gestionar los presupuestos. Es similar a un ticket, pero sin la gestión de pago.

class Budget {reference:String; creationDate:LocalDate; shoppings:Shopping[];}
  • Una vez relleno un carro de la compra, si se pulsa Budge se genera el presupuesto con código QR de la referencia.
  • Se permite rellenar un carro de la compra desde un presupuesto, si el precio hubiese cambiado, se le aplica el descuento necesario. La búsqueda es de tipo like, si la respuestas son varios, muestra un dialogo para que se elija entre las encontrados. Tienen una caducidad de un mes.
  • En el menú de presupuestos, permitir la visualización de presupuestos.

story: Cashier

Autor: Álvaro Rodríguez Gómez
GitHub:@AlvaroRGZ
User on commit: AlvaroRGZ

Registrar movimientos de caja: ingresos o extracciones de dinero de la caja. Permitir procesar los cierres de caja.

  • Si se pulsa en el menú de administración Cash Movement, abre un dialogo para realizar un movimiento de efectivo de caja. En el proceso de cierre de caja, existe el botón Cash movement que lanza el mismo dialogo. Solo se permite si la caja está abierta.
  • Si se pulsa en el menú de administración Cashier Closure, se cambia de visualización para ver los cierres de caja.
  • Tiene un filtro para buscar el mes presente, un mes concreto, año presente o un año concreto.
  • Después de buscar, muestra al principio de la página, los totales.

story: Complaints

Autor: José Daniel González García
GitHub:@jdggLgns
User on commit: jdggLgns

Quejas de productos comprados. Son quejas por productos que no son satisfactorios, porque no cumplen las espectativas.

interface Complaint{id:string; registrationDate:date; mobile: number; barcode: string; description: string, state: OpenedClosed; reply: string;}
  • El cliente, una vez logeado, puede poner una reclamación.
  • El cliente puede ver sus quejas, y puede actualizar la descripción. Tambien puede eliminarla si se arrepiente.
  • El empleado (MANAGER), puede establecer la respuesta y se evoluciona a cerrado. En este caso, el cliente, ya no la puede eliminar.

story: Credit Line

Autor: Daniel Reynés Fernández
GitHub:@dreynes
User on commit: dreynes

Gestionar una línea de crédito de clientes especiales.

interface Credit{reference:string; users:User; sales:CreditSale[] }
interface CreditSale{ticket:Ticket, payed:boolean}
  • En el menú de administración, crear una línea de crédito para un usuario.
  • En el proceso de pago de un ticket, ampliarlo para que se pueda pueda pagar con una línea de crédito. En este caso, el cash es 0, y no habrá ingresos en caja, pero se añade a la lista del cliente con el estado de no pagado.
  • En la administración, permitir que el cliente pague el total de los tickets pendientes. Esto solo se puede realizar con la caja abierta, y se debe alterar el estado de cash y card, dependiendo como pague, y añadiendo un mensaje al campo note, de la operación realizada.

story: Customer Discount

Autor: Le Liu
GitHub:@99nnss
User on commit: LeLiu

Gestionar el descuento de los clientes especiales, tienen descuento en todas sus compras siempre que sean superiores a una cantidad.

class CustomerDiscount {user:User; note:String; registrationDate:LocalDate; discount:Integer; minimmumPurchase:Integer; }
  • En la pantalla del carrito de la compra de Shop en caja abierta, se debe poder aplicar el descuento a un cliente especial, a través de su móvil.
  • Nota: A la hora de aplicar el descuento en el carrito de compra, si el descuento ya existente es superior o igual al descuento especial del cliente, se mantiene el descuento del carrito, en caso contrario, se actualiza el descuento del carrito según el descuento especial del cliente.
  • Permitir CRUD sobre los descuentos de clientes.

story: Customer Accounts

Autor: Leonardo Alfonso Cruz Rodríguez
GitHub:@alu0101233093
User on commit: alu0101233093

Gestionar la cuenta de los clientes, con auto registro y recuperación de contraseña.

  • Crear un recurso independiente "/customers", facilita toda la gestión de permisos, aunque se pueden reutilizar el resto de capa si asi se prefiere.
  • En el dialogo de login, surge la posibilidad de darse de alta como nuevo usuario, mostrando un dialogo independiente.
  • En el dialogo de login, surge la posibilidad de recuperar la contraseña.

story: Customer Points

Autor: Bate Ye
GitHub:@bate-ye-edo
User on commit: WolfYe98

Gestionar los puntos de clientes. En función de la compra del usuario (de la cantidad) se darán una serie de puntos. Se almacena la fecha de la última vez que se añadieron puntos. Si durante un año, no se realizan compras, se pierden los puntos. Cuando se leen los puntos o se modifican, es un buen momento para comprobar su validez, pero eisten otras opciones. Los puntos equivalen a dinero que se puede descontar en una compra, pero no puede superar al 50% del valor de la compra y hay un mínimo de puntos para canjear.

interface CustomerPoints{value:number; lastDate:date; user:User;}
  • En el carrito de la compra, se permite el consumo de puntos de un usuario.
  • Cuando se realiza una compra, si el ticket tiene asociado un usuario, añadir los puntos.
  • Si un ticket está asociado a un usuario, en la impresión del ticket se le indica los puntos acumulados hasta el momento.
  • El usuario puede consultar los puntos dentro de su perfil.

story: Customer Reviews

Autor: Mengling Yang
GitHub:@Meng80
User on commit: Meng80

Gestión de votaciones con comentarios de los productos comprados, con valores 1..5, utilizando algún elemento visual, por ejemplo estrellas. Esta funcionalidad se encuentra en la página de Home.

interface Review{user:User; article:Article; stars:number; opinion: string}
  • El usuario puede ver sus productos comprados, y valorar cada uno de ellos con un voto (stars) (1..5) y un comentario.
  • El usuario puede cambiar sus valoraciones.
  • Implementar un método que devuelve los artículos mas valorados, debe situarse en Home, y se resuelve en el menú secundario adviser - Popular. Esta relacionada con la historia News

story: Data Protection Act

Autor: Yifan Jin
GitHub:@jyf0209
User on commit: jinyifan

Ley de Protección de Datos. existen tres niveles:

  • Básico Se conceden permisos para registrar los datos única y exclusivamente para realizar correctamente la compra y envío de los productos de la tienda.
  • Medio: Además del anterior, el usuario concede permisos para que se realicen envíos informándole de ofertas u oportunidades especiales para adquirir productos en oferta.
  • Avanzado: Incluye todo lo del contrato medio, y además el usuario concede permiso para que la empresa ceda sus datos a terceros. El texto a firmar podría ser: una aproximación del texto a imprimir para firmar
enum RgpdType{BASIC,MEDIUM,AVANCE}
interface Rgpd{type:RgpdType, agreement:byte[], user:User}
  • En el menú de administración, en Data Protection Act, dado un usuario, te informa si tiene aceptado el tratamiento de datos, y te deja bajarte el texto firmado.
  • Además, te permite imprimir un texto con los datos del usuario y el texto legal.
  • Te deja subir el fichero con el texto y firma, y se le asocia al cliente un nivel.

story: Gift Tickets

Autor: Mario Blanco Domínguez
GitHub:https://github.com/bdmariobd
User on commit: Mario Blanco

Es un documento que referencia a un ticket con una reference no predecible. Se puede añadir un mensaje personalizado. La reference se imprime con el código QR

class GiftTicket {reference:String; message:String; ticket:Ticket;}
  • En el proceso de Check-out se puede activar y se imprime aparte, debe aparecer los datos básicos de la empresa y la fecha de caducidad.
  • Debe ser posible localizar un ticket a partir del ticket-regalo, en el CRUD tickets.

story: Github Issues

Autor: Bastian Tobar
GitHub:https://github.com/bastiantobar
User on commit: Bastian Tobar

Conectar con GitHUb para la publicación de un issue por problemas con la aplicación.

  • En el menú de administración, Publish a Issue, saca un formulario para rellenar y publicar un Error/Mejora de la aplicación como un issue, en el repositorio betca-tpv. Debería tener title, body con el conenido del issue, label (bug o enhancement).
  • En el menú de administración, te permite leer los issues (bug, enhancement), indicando si esta asignado, si esta abierto/cerrado, el hito asociado estimado y la fecha de creación, además de los datos enviados.
  • Cuando se ejecutan los test, se utilizan mooks, y no se envía a GitHub, y no pueden fallar aunque no se tenga la variable de entorno GITHUB_SECRET definida.

Para mas información: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues#create-an-issue.

Para la autenticación se realiza mediante Basic Auth, con usuario:'miw-upm' y clave '${GITHUB_SECRET}'. La api-key se debe solicitar al profesor y tenerla siempre oculta mediante variable de entorno. Se consigue en la ruta: Perfil de cunta >> Settings > Developer settings > Personal access tokens Si se utiliza en ejecución local, y no existe la variable de entorno, debe lanzar una excepción indicando el problema.

story: Invoices

Autor: Jiaan
GitHub:@abvsba
User on commit: feiwu14

Implementar la creación de facturas. Deberá tener los datos completos del usuario (DNI, nombre completo y dirección completa). Cuando se cree una factura se debe calcular baseTax & tax. Un ticket puede tener solo una factura positiva y varias negativas. Tener en cuenta que cada artículo puede tener un Tax diferente. El precio de los artículos es con Tax incluido. Por cada articulo, se calcula: baseTax=retailPrice/(1+Tax/100) & taxValue=retailPrice-baseTax, se suma todo y en la factura se pone los totales.

class Invoice {identity:Integer; creationDate:date; baseTax:BigDecimal; taxValue:BigDecimal; user: User; ticket: Ticket;}
  • Identity tiene que ser secuencial por años
  • Implementar la creación de facturas a partir de un ticket, en el proceso de creación del ticket.
  • En el menú de administración, invoices, se enlaza a la gestión de facturas
  • Permitir la búsqueda de facturas por móvil o por ticket.
  • Permitir la creación de facturas a partir de un ticket, se debe asegurar que no tiene factura previa creada.
  • Permitir la reimpresión de facturas existentes.
  • Se puede modificar una factura, pero sólo los datos del usuario y tiene que ser a un usuario existente.
  • En el servicio de facturas, se podrá crear una factura negativa a partir de una devolución. Se debe sincronizar con la práctica de Ticket.

story: Messengers

Autor: Iván Pulido
GitHub: @bm0631
User on commit: Ivan Pulido

Crear notas internas entre vendedores.

interface Message{fromUser:User; toUser:User; subject:string; text:string;}
  • Cuando se realiza el login, si existe mensaje pendiente, se muestra con un dialogo emergente.
  • En el menú de administración, Se puede crear un mensaje nuevo.
  • Se puede consultar el historial de mensajes enviados o recibidos.

story: News

Autor: Rodrigo de la Calle Alonso
GitHub:@rodriCalleA
User on commit: Rodrigo de la Calle

Gestión de noticias en la pantalla principal

  • En el menú segundario, adviser si se elige New aparecen los productos nuevos, se presenta en tipo carrusel. Este se ejecuta de forma automática al cargar la página. Se considera nuevo si su fecha de creación esta entre los X días anteriores.
  • En el menú segundario, adviser si se elige Popular aparecen los productos más populares, se presenta en tipo carrusel. Los más populares son aquellos con mejores votaciones, pero esto se debe calcular en la historia Reviews, en esta historia simplemente se realiza un método mock de devuelve una lista fija de artículos.
  • En el menú segundario, Top 5 aparecen los productos mas vendidos, en la última semana. Se deben mirar los tickets para calcular dicho valor

story: Offers

Autor: Daniel Hernández Fajardo
GitHub:alu0101320489
User on commit: alu0101320489

Una oferta es un conjunto de artículos donde se aplica un descuento (%) igual para todos los artículos. Se identifican por reference, que debe ser de tipo UUID.

class Offer {reference:String; description:String; creationDate:LocalDate; expiryDate:LocalDate; discount:Integer; articles: Article;}
  • En el menu de administración, offers, enlazar con el CRUD ofertas.
  • En la pantalla del carrito de la compra, si se escribe la referencia de la oferta, revisa el carrito de la compra y se lo aplica a los artículos que la tienen.
  • Se permite imprimir con código QR de la URL, con la referencia de la oferta, descripción, fecha caducidad.
  • Se permite conocer los detalles completos a través de la URL, en entorno dev, http://localhost:4200/home/offers/WNX5uTC5SIeC60M6noyhWg. Esta URL debe ser pública.

story: Online Orders

Autor: Jorge Da Silva Del Palacio
GitHub:@JorgeDSDP
User on commit: JorgeDSDP

Gestionar la compra realizada directamente por nuestros clientes en la Web.

interface OnlineOrder {reference:string; state:OnlineOrderState; deliveryDate:date; ticket:Ticket;}
enum OnlineOrderState{PREPARING, SENT, DELIVERED}
  • Realizar la cesta de la compra. Al final se utiliza el recurso Ticket para crear primero un ticket, con todos sus productos a no entregados, y luego se crea el pedido. El pago es contra rembolso.
  • Un cliente, si está logeado, en el perfil, puede ver sus pedidos y el estado en que se encuentran.
  • En el menú de administración, se puede hacer evolucionar un pedido online. El estado de los productos del ticket, tienen que ser coherentes con el estado del pedido.

story: Provider Orders

Autor: Diego Guerrero Carrasco
GitHub:@diego-guerrero
User on commit: diego-guerrero

Gestión de pedidos. Se organizarán por proveedor, es decir, un pedido solo puede tener productos de un proveedor. Deberá tener una lista de artículos con una cantidad pedida. Un pedido sin cerrar se podrá eliminar. Se permite modificar la cantidad pedida, antes de cerrar el pedido. Se podrá cerrar un pedido, poniendo la cantidad que realmente llego a tienda. Un vez cerrado no se puede modificar ni eliminar.

interface Order{reference:string, description:string, providerCompany:string, openingDate:date, closingDate:date, orderLines:OrdenLine[]}
interface OrderLine{articleBarcode:string, requiredAmount:number, finalAmount:number}
  • Realizar el CRUD con las limitaciones expuestas.
  • Permitir crear un pedido a partir de algún pedido anterior.
  • Cuando se crea un pedido, en el back-end, se llamara al servicio de ticket-tracking, para actualizar el estado de los artículos pendientes de entregar a REQUIRE_PROVIDER en los tickets. Sincronizarse con la práctica de Ticket-tracking.
  • Cuando se cierra un pedido, en el back-end, se llamara al servicio de ticket-tracking, para actualizar el estado de los artículos pendientes de entregar a IN_STOCK en los tickets. Sincronizarse con la práctica de Ticket-tracking.

story: Refunds

Autor: Igor Lopez
GitHub:@IgorLopezSalazar
User on commit: IgorLopezSalazar

Gestión de devoluciones de pedidos on-line

story: Salespeople

Autor: Marta Hidalgo Cardeñoso
GitHub: @Martahc
User on commit: Martahc

Asociar los tickets a los vendedores.

interface Salesperson{salesperson:User; ticket:Ticket}
  • En el proceso de creación de tickets, check-out, asociar al ticket el vendedor. Debe aparecer en la impresión del ticket el nombre del vendedor, dentro del campo note del ticket.
  • En el menú de administración, Salespeople, se pueden realizar buscas varias.
  • Dado un vendedor y un rango de fechas, ver sus ventas por días, especificando: tickets, artículos y valor final.
  • Dado un mes o el mes en curso, ver las ventas de cada vendedor en el mes indicado, en orden descendiente por valor final vendido.

story: Slack Webhook

Autor: Ricardo Vente
GitHub: @rvemon
User on commit: rvemon

Conectar con Slack para la publicación de mensajes.

  • En el menú de administración, Publish on Slack, saca un formulario para rellenar y publicar en Slack, en el canal #betca-tpv. Debería tener nivel del mensaje (info, warning, critical), varios campos... El mensaje debiera tener aspecto gráfico del TPV, UPM con iconos o imágenes.
  • Cuando se cierra la caja, se publica automáticamente un resumen en Slack del cierre de caja.
  • Cuando se ejecutan los test, se utilizan mooks, y no se envía a Slack.

Para mas información: https://api.slack.com/messaging/webhooks. Habrá que realizar la publicación con formato (https://api.slack.com/reference/surfaces/formatting) y diseño (https://api.slack.com/messaging/composing/layouts).

Para la autenticación, Slack funciona mediante api-key en la url de la petición, se debe mantener oculta mediante variable de entorno: ${SLACK_URI}. La URL se debe solicitar al profesor y tenerla siempre oculta. Si se utiliza ejecución en el perfil dev y si no existe la variable de entorno, debe lanzar una excepción indicando el problema.

Mostramos abajo un ejemplo sencillo, metiendo en el cuerpo el mensaje. POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

{
    "text": "Hello, world."
}

story: Staff

Autor: Raúl Fernández
GitHub:@ruliworst
User on commit: ruliworst

Gestionar vendedores (operator & Manager). Gestiona la ficha de entrada y salida por día. Tiene que ser automático con el login-logout, pero se debe tener en cuenta que puede haber varios login-logout al día, pero sólo se almacena el primer login y el último logout.

interface Staff{login:date; logout:date; user:User;}
  • Dado un empleado y un rango de días, listar las horas trabajadas de cada día.
  • Dado un empleado y un rango de meses, listar las horas trabajadas de cada mes.
  • Dar un informe mensual de las horas trabajadas por día entre todos los empleados, se puede elegir un mes cualquiera.

story: Stock Alarms

Autor: Adrian Castro Vilar
GitHub:@adriancastrovilar
User on commit: adriancastrovilar

Establecer valores mínimos (con nivel WARNING y CRITICAL) de un conjunto de artículos. Los warning-critical específicos predominan respecto a los genéricos.

class StockAlarm{name:String; description:String; warning:Integer; critical:Integer; stockAlarmLines:StockAlarmLine[];}
class StockAlarmLine{Article:Article; warning:number; critical:number;}
  • Realizar el CRUD. Al trabajar con alarmas, siempre se debe mostrar el stock actual de cada artículo
  • Realizar una consulta de artículos que se encuentran en WARNING o CRITICAL

story: Stock Audit

Autor: Oliver Fernández García
GitHub: @oliver-upm
User on commit: Oliver Fernandez

Auditar el stock existente, en un momento dado. Cuando se abre una auditoría, se crea con la lista de todos los artículos. Poco a poco, se va mirando artículo a artículo el stock existente y si coincide con el teórico. Cuando se cierra deben quedar los artículos no auditados y la lista de artículo con su cantidad, que han tenido perdidas, y con el valor monetario de la perdida total. Una vez cerrado ya no se puede alterar.

class StockAudit {creationDate:LocalDate; closeDate:LocalDate; articlesWithouAudit:Article[]; lossValue:number; losses:ArticleLoss[];}
class ArticleLoss {barcode:string; amount:number;}
  • En la administración, Stock Audit, realizar la gestión de la auditoría.
  • Realizar el CRUD, pero update solo antes de cerrar la auditoria.

story: Stock Manager

Autor: Manuel Calvo Martín
GitHub:@athenyx04
User on commit: Manuel Calvo Martín

Ayudar a gestionar el stock. Permite realizar búsquedas variadas.

  • Productos por debajo de un stock. El stock puede ser negativo, indicando que existen reservas del mismo.
  • Productos vendidos en un determinado rango.
  • Ayuda a predecir el stock de futuro. Dado un producto, te indica que stock va haber a lo largo del tiempo.
  • Dado un producto, te dice cuando llegará a stock 0

story: Tags

Autor: David Yareth Macaya Albericio
GitHub: @DavidYareth
User on commit: DavidYareth

Agrupar artículos. Una etiqueta, se referencia por un nombre.

interface Tag {name:string; group:string; description:string, articles:Article[];}
  • En el menú de administración, permitir la creación, lectura, modificación y borrado de etiquetas (CRUD).
  • Dar funcionalidad al menú Adviser de la página Home listando un conjunto de artículos asociados a la etiqueta. Permitir añadir a la cesta de la compra el artículo (ShoppingBasketService).

story: Technical Support

Autor: HUGO VÁZQUEZ DOCAMPO
GitHub:hugovdocampo
User on commit: Hugo Vazquez Docampo

Asistencia técnica vía chat

  • El cliente inicia un chat realizando una consulta técnica sobre un producto. El Empleado ve los chats abiertos y puede contestar a las consultas realizadas.

story: Tickets

Autor: Junjie Li
GitHub:@AimerSQL
User on commit: Junjie Li

Facilitar la lectura y modificación de tickets, permitiendo sólo la reducción de la cantidad y el estado. Si se tiene que devolver dinero se llamara a: SharedVoucherService::printVoucher para la impresión de uno. Cuando un producto pase a estado de commited, se debe cobrar el dinero que falta.

  • En el menú de administración, al pulsar Tickets, cambia la vista para su gestión.
  • Se realizará una búsqueda por id de ticket o reference o mobile, pero utilizando la función like y un sola caja de entrada.
  • Se puede realizar modificaciones de ticket solo con la caja abierta.

story: Ticket Tracking

Autor: Michael Hernández
GitHub: @michaelhr97
User on commit: michaelhr97

Facilitar el seguimiento de artículos por falta de stock de los clientes. Cuando se cree un ticket con una compra no entregada, se habilitará la referencia del ticket para que el cliente pueda acceder al ticket vía Internet para comprobar su estado. El usuario podrá escanear la referencia del ticket mediante un código QR, la cual referencia una URL en la que podrá seguir el estado de los artículos que no se le entregaron por falta de stock.

  • Permitir el acceso mediante la URL: http://localhost:4200/home/ticket-traking/xxxxxxxxxxxxxx, siendo xxxx una referencia generada automáticamente al crear el ticket, no hace falta logearse para ver su contenido.
  • Incluir un servicio, por el cual, a partir de una lista de barcode - amount, devolver los teléfonos & nombres de los tickets involucrados, por orden de antigüedad del ticket.
  • Incluir un servicio en el back-end, por el cual, a partir de una lista de barcode - amount, modifica el estado de los artículos del ticket a REQUIRE_PROVIDER, por orden de antigüedad del ticket.
  • Incluir un servicio en el back-end, por el cual, a partir de una lista de barcode - amount, modifica el estado de los artículos del ticket a IN_STOCK, por orden de antigüedad del ticket. En este caso, enviar un email al cliente. Para los test se debe emplear un mock. Cuidado de no exponer la cuenta y clave personal de Gmail!

story: Users

Autor: Jorge Muñoz Pavón
GitHub: https://github.com/jorgempavon User on commit: jorgempavon

  • Permitir que los usuarios cambien sus datos personales a través de su perfil`, tanto en home como en shop, pero el rol, la fecha de creación y la desactivación de la cuenta son inalterables.
  • Terminar el desarrollo para la creación rápida (móvil-nombre) o/y (datos para factura), en el dialogo del proceso de realizar el check out, permitiendo asociar el ticket a un usuario. Cuando se busca a un usuario, si no se encuentra, debe sacar dialogo de creación rápida, donde el _firstName _& _mobile _son obligatorios, el resto familyName, dni, _address _son opcionales.
  • Permitir la creación y actualización de usuarios, incluido el rol, cumpliendo una lógica de autorizaciones. Un admin puede todo. Un manager puede modificar manager, operator y customer. Un operator no puede alterar roles pero si activación de customer.

story: VAT Management

Autor: Juan Carlos Guillén Soto
GitHub: @juancaguillens01
User on commit: juancaguillens01

Gestionar el Tax trimestral: A partir de un trimestre introducido por el usuario, el sistema devolverá el calculo del Tax para ese trimestre asociado a cada uno de los tipos de Tax. El año se divide en cuatro trimestres. Dado un trimestre se debe calcular el baseTax y valueTax, de todos los artículos sumados, de todos los tickets creados en el trimestre de análisis, agrupados según los tres tipos de Tax: SUPER_REDUCED("4"), REDUCED("10"), GENERAL("21").

  • Se solicita un trimestre de un año, y devuelve: año, trimestre, baseTax(4):?, valueTax(4):?, baseTax(10):?, valueTax(10):?, baseTax(21):?, valueTax(21):?, totalBaseTax y totalValueTax.

story: Vouchers

Autor: Guillermo Navío Delicado
GitHub: @gnavio
User on commit: Guillermo Navío

Gestionar los vales. En la tienda no se devuelve dinero, se dan vales. Su referencia debe ser tipo UUID

class Voucher{reference:String; value:BigDecimal; creationDate:LocalDate; dateOfUse:LocalDate; user:User}
  • Realizar la creación y lectura. No se debe permitir el borrado ni cambiar su contenido.
  • Permitir la impresión de vales.
  • Permitir el consumo de un vale. Se debe asegurar previamente que el vale no ha sido ya consumido.
  • Implementar SharedVoucherService::printVoucher en Angular. A partir de una cantidad, crea e imprime un vale.
  • Realizar una consulta de vales generados entre dos fechas, pendientes de ser consumidos.