Skip to content

Operadores Alternativos / Preferencias de impresión según preferencias del Cliente / Usuario system [v2.11]

Descripción

Se describe las novedades de la versión 2.11, características principales de las funcionalidades y las pruebas mínimas de rigor de funcionalidad y/o consideraciones para las mismas.

Back ZipCodes: Añadir Operador alternativo y leadtimes internos

Descripción

Untitled

Para esta funcionalidad lo que se hizo fue añadir los siguientes campos a la entidad Código Postal (ZipCode), los cuales tienen como características en común que no son requeridos ni tienen incidencia en los flujos (cotización, estadísticas de clientes,..), solo están pensandos para su “almacenamiento”:

  • Días de demora Operador: representa el tiempo de demora (leadtime) de uso “interno”. Se puso como restricción (mínima) que no puede ser mayor al Dias de Demora Hasta.

  • Operador Alternativo: Selector libre para elegir algún Operador.

  • Días de demora de Operador Alternativo:  Días de demora de dicho Operador.

Estos campos fueron añadidos dentro del flujo de los CSV de los ZipCodes, esto implica que pueden ser exportados e importados por esa vía.

Pruebas básicas del flujo

-        Asignaciones iniciales, con sus correspondiente visualización en la pantalla de detalles del CP editado. Verificación de validaciones mínimas (sobre campo Dias de demora Operador).

-        Exportación a CSV

-        Verificación de actualización via Lote de Códigos Postales.

API enpoint OrderCreate: setear print_url según configuración del cliente

Descripción

Para esta tarea lo que se hizo fue adaptar el flujo interno al serializarse la respuesta ante una creación exitosa de una Orden, para que cuando se acceda a la URL publica devuelta en el campo «print_url»:

  • Si el cliente usa ZPL → Se retorna un PDF renderizado con la configuración global/default.

-   Si el cliente usa PDF → Se retorna el PDF  renderizado con su configuración.

Pruebas básicas del flujo

-        Crear una serie de órdenes, alterando la configuración del Cliente para observar el comportamiento descrito.

Back: Añadir configuraciones al Cliente

Descripción

UntitledUntitled

Se añadieron 2 campos nuevos en la entidad de Cliente, los cuales son nuevas entidades simples, esto significa que poseen un pequeño ABM

  • Tipo de Integración (Requerido):  Se precargaron los valores iniciales que fueron indicados en el PM original.  Este mantiene una relación N a N, con lo cual es posible indicar 1 o más tipos de integración.

  • Ejecutivo de Cuentas (Requerido): más allá de su asignación, se ha  exportado su valor dentro de los detalles del CSV de la pantalla «Envios Facturación».

Pruebas básicas del flujo

  • ABM de ambas entidades

  • Asignaciones a Clientes

  • Verificación de exportación en CSV de Envios Facturación.

Front Client: Corregir el seguimiento ante Devolucion

Descripción

Siguiendo el requerimiento original, se implementó adaptaciones en el front de cliente, para que cuando un envio se encuentre en alguno de estos estados:

-       Devolución

-       En proceso de devolución

-       Devolución a Central

-       Devolución Registrada

Se renderice la leyenda «En devolución» junto con los “tres nodos” completos, indicando “fin” del recorrido.

Pruebas básicas del flujo

-        Crear diversos envios, verificando esta adaptación ante esos 4 estados indicados.

Registración de Clientes 

Descripción

                  Para satisfacer los requerimientos de esta tarea se han implementado, a grandes rasgos, las siguientes funcionalidades:

-        Endpoints para la registración y actualización de los datos del Cliente

-        Adaptaciones en el flujo de autenticación (JWT) ante la adición de una nueva  «Password de Integración».

-        Links parametrizables en el front de Clientes.

-        Usuario System con posibilidad de acceder a enpoints de API Client

Endpoints

Se generaron 2 endpoints solo disponibles para el usuario System:

                  Registración: POST /api/v1/sys/client/

                  Actualización: PUT /api/v1/sys/client/

Ambos endpoints comparten prácticamente los mismos parámetros, que se detallan a continuación, lo que difiere principalmente es que en la registración, se hace uso del seteo de valores por default:

CampoObservacionesValor DefaultRegistraciónActualización
usernameSe valida unicidad.(no aplica)requeridoopcional
password(no aplica)requeridoopcional
password_integrationCampo nuevo: usada en integración(no aplica)requeridoopcional
nombre(no aplica)requeridoopcional
apellido(no aplica)opcionalopcional
cuit_cliente(no aplica)requeridoopcional
company_nameCampo nuevo: Razón Social(no aplica)opcionalopcional
emailSe valida unicidad a nivel Cliente(no aplica)requeridoopcional
modePuerta a Puertaopcionalopcional
destinationPablo Noguésopcionalopcional
package_pickup_cost(no aplica)opcionalopcional
order_pickup_cost(no aplica)opcionalopcional
insurance_ratio0,008opcionalopcional
discount_ratio(no aplica)opcionalopcional
delivery_days10opcionalopcional
collection_days1opcionalopcional
orders_limit(no aplica)opcionalopcional
product_codevalor del parámetro client_default_values.vkm_product_codeopcionalopcional
urbano_shippervalor del parámetro urbano.shipperopcionalopcional
urbano_passwordvalor del parámetro urbano.passwordopcionalopcional
can_send_shipment_id(no aplica)opcionalopcional
prefixGeneración automáticaopcionalopcional
duplicity_controlfalseopcionalopcional
prepaidprepagotrueopcionalopcional
taxImpuestos (IVA)trueopcionalopcional
shipment_description(no aplica)opcionalopcional
sender_address_street_name(no aplica)requerido(no aplica)
sender_address_street_number(no aplica)requerido(no aplica)
sender_address_zip_code(no aplica)requerido(no aplica)
sender_address_neighborhood_name(no aplica)requerido(no aplica)
sender_address_city(no aplica)requerido(no aplica)
sender_address_floor(no aplica)opcional(no aplica)
sender_address_apartment(no aplica)opcional(no aplica)
sender_address_other_info(no aplica)opcional(no aplica)
sender_address_stateNombre de la provincia(no aplica)requerido, solo si no se envia sender_address_state_id(no aplica)
sender_address_state_idId de la provincia. Posee ponderación ante la presencia del anterior(no aplica)opcional(no aplica)
sender_address_active(no aplica)opcional(no aplica)
sender_address_aliasValor del usernameopcional(no aplica)
activefalse(no aplica)opcional

En el caso del campo «prefix», se ha definido un pequeño algoritmo que garantice la definición de 3 caracteres alfabéticos aleatorios, y que ante la duplicidad de este campo, se intente generar uno nuevo, tantas veces como sea necesario para su persistencia.

Vale aclarar que más allá de los campos, a la instancia del Cliente recientemente creada se le asignan los siguientes valores por defecto, siguiendo el comportamiento del backoffice:

  • Notificación de estados por Email: Comprador y Vendedor.

  • Cuit: El valor del parámetro client_default_values.vkm_operation_cuit.

  • Configuración de impresión: La default

  • Tipo de Integración: No integrado

  • Habilitación para Operadores: Ninguno

  • Límite de No Entregado: 5

Ejemplos en Curl

Registración:

curl --location --request POST 'iflow.local/app_dev.php/api/v1/sys/client/' \
--header 'Content-Type: application/json' \
--data-raw '{
"username":"cliente_test",
"password":"123456",
"password_integration": "abcdef",
"nombre":"Testing #01",
"apellido": "QA",
"cuit_cliente": "24123456789",
"company_name": "Mi Razon Social",
"email":"cliente_test_api01@test.com",
"sender_address_street_name":"9 de Julio",
"sender_address_street_number":"1200",
"sender_address_zip_code":"7602",
"sender_address_neighborhood_name":"El Mondongo",
"sender_address_city":"Mar del Plata",
"sender_address_floor":"3",
"sender_address_apartment":"C",
"sender_address_state":"Buenos Aires",
"sender_address_state_id":1,
"sender_address_other_info":"Some place",
"sender_address_active": true,
"sender_address_alias": "",
"package_pickup_cost":100,
"order_pickup_cost":120,
"insurance_ratio":0.42,
"discount_ratio":0.52,
"tax": true,
"delivery_days":5,
"collection_days": 1,
"orders_limit":5,
"urbano_shipper":"UR29292",
"urbano_password":"uP4ss",
"product_code":"PC3939",
"can_send_shipment_id":true,
"prefix":"QAC",
"shipment_description": "",
"duplicity_control": true,
"prepaid": true
}'

Actualización:

curl --location --request PUT 'iflow.local/app_dev.php/api/v1/sys/client/238' \
--header 'Content-Type: application/json' \
--data-raw '{
"active": true
}'

Flujo de autenticación

                  Debido a que se ha añadido un nuevo campo llamado «password_integration» (Contraseña de Integración), se ha tenido que adaptar el complejo flujo de autenticación JWT, el cual es manejado por Bundles de Symfony.

                  Con esta adaptación ahora se permite el inicio de sesión con la contraseña original y la de integración.

Untitled

Se hicieron pequeñas modificaciones al Front de Cliente para mostrar 2 enlaces hacia urls parametrizadas vía src/config.js:

-        Registración: Se añadió en el menú principal esta opción, y se renderiza con el parámetro url_register

Recuperación de contraseña: dentro de la caja de inicio de sesión, se añadió la leyenda «¿Has olvidado la contraseña?» la cual apunta a la url indicada en el parámetro url_passowrd_recovery.

Pruebas básicas del flujo

-        Creación de Clientes:

-        Verificando Unicidad de email y username

-        Correcta inicialización de campos con valores default ante un request con cuerpo “mínimo”.

-        Chequeo de usuario inactivo

-        Pruebas de creación de múltiples clientes para verificar la creación correcta de prefijos.

-        Actualización de Clientes:

-        Activación

-        Modificación de otros campos permitidos.

-        Inicio de sesión con password común y de integración.

-        Front Client navegación correcta hacia los links indicados. Al Loguearse como usuario la opción de «Registrase» no debería estar disponible (similar a lo que ocurre con Login).

-        Acceso como usuario System a algunos endpoints simples de Cliente (zip_code,etc..)