From e0d08307938916e059cd5f129aa53d19a387aabf Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 13:46:35 +0100
Subject: [PATCH 01/25] ci: refs #6695 comment out test stages in Jenkinsfile

---
 Jenkinsfile | 101 ++++++++++++++++++++++++++--------------------------
 1 file changed, 51 insertions(+), 50 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8efc2f8801a..6f7f18b5729 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -80,58 +80,59 @@ pipeline {
             }
             steps {
                 sh 'pnpm install --prefer-offline'
+                echo CHANGE_TARGET
             }
         }
-        stage('Test') {
-            when {
-                expression { !PROTECTED_BRANCH }
-            }
-            environment {
-                NODE_ENV = ''
-                CI = 'true'
-                TZ = 'Europe/Madrid'
-            }
-            parallel {
-                stage('Unit') {
-                    steps {
-                        sh 'pnpm run test:unit:ci'
-                    }
-                    post {
-                        always {
-                            junit(
-                                testResults: 'junit/vitest.xml',
-                                allowEmptyResults: true
-                            )
-                        }
-                    }
-                }
-                stage('E2E') {
-                    environment {
-                        CREDENTIALS = credentials('docker-registry')
-                        COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
-                        COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-                    }
-                    steps {
-                        script {
-                            def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
-                            sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
-                            image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
-                                sh 'cypress run --browser chromium'
-                            }
-                        }
-                    }
-                    post {
-                        always {
-                            sh "docker-compose ${env.COMPOSE_PARAMS} down"
-                            junit(
-                                testResults: 'junit/e2e.xml',
-                                allowEmptyResults: true
-                            )
-                        }
-                    }
-                }
-            }
-        }
+        // stage('Test') {
+        //     when {
+        //         expression { !PROTECTED_BRANCH }
+        //     }
+        //     environment {
+        //         NODE_ENV = ''
+        //         CI = 'true'
+        //         TZ = 'Europe/Madrid'
+        //     }
+        //     parallel {
+        //         stage('Unit') {
+        //             steps {
+        //                 sh 'pnpm run test:unit:ci'
+        //             }
+        //             post {
+        //                 always {
+        //                     junit(
+        //                         testResults: 'junit/vitest.xml',
+        //                         allowEmptyResults: true
+        //                     )
+        //                 }
+        //             }
+        //         }
+        //         stage('E2E') {
+        //             environment {
+        //                 CREDENTIALS = credentials('docker-registry')
+        //                 COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
+        //                 COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+        //             }
+        //             steps {
+        //                 script {
+        //                     def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
+        //                     sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
+        //                     image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
+        //                         sh 'cypress run --browser chromium'
+        //                     }
+        //                 }
+        //             }
+        //             post {
+        //                 always {
+        //                     sh "docker-compose ${env.COMPOSE_PARAMS} down"
+        //                     junit(
+        //                         testResults: 'junit/e2e.xml',
+        //                         allowEmptyResults: true
+        //                     )
+        //                 }
+        //             }
+        //         }
+        //     }
+        // }
         stage('Build') {
             when {
                 expression { PROTECTED_BRANCH }

From 64549603caeadb77dede55688c52e43cd5a494dd Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 13:54:37 +0100
Subject: [PATCH 02/25] ci: refs #6695 update docker-compose to use dynamic
 image tags

---
 Jenkinsfile                     | 101 ++++++++++++++++----------------
 test/cypress/docker-compose.yml |   4 +-
 2 files changed, 52 insertions(+), 53 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 6f7f18b5729..8efc2f8801a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -80,59 +80,58 @@ pipeline {
             }
             steps {
                 sh 'pnpm install --prefer-offline'
-                echo CHANGE_TARGET
             }
         }
-        // stage('Test') {
-        //     when {
-        //         expression { !PROTECTED_BRANCH }
-        //     }
-        //     environment {
-        //         NODE_ENV = ''
-        //         CI = 'true'
-        //         TZ = 'Europe/Madrid'
-        //     }
-        //     parallel {
-        //         stage('Unit') {
-        //             steps {
-        //                 sh 'pnpm run test:unit:ci'
-        //             }
-        //             post {
-        //                 always {
-        //                     junit(
-        //                         testResults: 'junit/vitest.xml',
-        //                         allowEmptyResults: true
-        //                     )
-        //                 }
-        //             }
-        //         }
-        //         stage('E2E') {
-        //             environment {
-        //                 CREDENTIALS = credentials('docker-registry')
-        //                 COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
-        //                 COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-        //             }
-        //             steps {
-        //                 script {
-        //                     def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
-        //                     sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
-        //                     image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
-        //                         sh 'cypress run --browser chromium'
-        //                     }
-        //                 }
-        //             }
-        //             post {
-        //                 always {
-        //                     sh "docker-compose ${env.COMPOSE_PARAMS} down"
-        //                     junit(
-        //                         testResults: 'junit/e2e.xml',
-        //                         allowEmptyResults: true
-        //                     )
-        //                 }
-        //             }
-        //         }
-        //     }
-        // }
+        stage('Test') {
+            when {
+                expression { !PROTECTED_BRANCH }
+            }
+            environment {
+                NODE_ENV = ''
+                CI = 'true'
+                TZ = 'Europe/Madrid'
+            }
+            parallel {
+                stage('Unit') {
+                    steps {
+                        sh 'pnpm run test:unit:ci'
+                    }
+                    post {
+                        always {
+                            junit(
+                                testResults: 'junit/vitest.xml',
+                                allowEmptyResults: true
+                            )
+                        }
+                    }
+                }
+                stage('E2E') {
+                    environment {
+                        CREDENTIALS = credentials('docker-registry')
+                        COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
+                        COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+                    }
+                    steps {
+                        script {
+                            def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
+                            sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
+                            image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
+                                sh 'cypress run --browser chromium'
+                            }
+                        }
+                    }
+                    post {
+                        always {
+                            sh "docker-compose ${env.COMPOSE_PARAMS} down"
+                            junit(
+                                testResults: 'junit/e2e.xml',
+                                allowEmptyResults: true
+                            )
+                        }
+                    }
+                }
+            }
+        }
         stage('Build') {
             when {
                 expression { PROTECTED_BRANCH }
diff --git a/test/cypress/docker-compose.yml b/test/cypress/docker-compose.yml
index 9d51ee34562..bf22c58778d 100644
--- a/test/cypress/docker-compose.yml
+++ b/test/cypress/docker-compose.yml
@@ -1,7 +1,7 @@
 version: '3.7'
 services:
     back:
-        image: registry.verdnatura.es/salix-back:dev
+        image: 'registry.verdnatura.es/salix-back:${CHANGE_TARGET:-dev}'
         volumes:
             - ./test/cypress/storage:/salix/storage
             - ./test/cypress/back/datasources.json:/salix/loopback/server/datasources.json
@@ -18,4 +18,4 @@ services:
             - TZ
         dns_search: .
     db:
-        image: registry.verdnatura.es/salix-db:dev
+        image: 'registry.verdnatura.es/salix-db:${CHANGE_TARGET:-dev}'

From 39b7cfbe4e79bee9fe57f766f19a84eb9ff30268 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 14:26:26 +0100
Subject: [PATCH 03/25] ci: refs #6695 update docker-compose to use dynamic
 image tags

---
 Jenkinsfile                     | 21 +++++++++++----------
 test/cypress/docker-compose.yml |  4 ++--
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8efc2f8801a..8abb846728c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -12,15 +12,16 @@ def BRANCH_ENV = [
 node {
     stage('Setup') {
         env.NODE_ENV = BRANCH_ENV[env.BRANCH_NAME] ?: 'dev'
-
-        PROTECTED_BRANCH = [
+        GIT_PROTECTED_BRANCH = [
             'dev',
             'test',
             'master',
-            'main',
-            'beta'
-        ].contains(env.BRANCH_NAME)
+        ]
 
+        PROTECTED_BRANCH = GIT_PROTECTED_BRANCH + ['main','beta']
+        TARGET_BRANCH = GIT_PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
+
+        IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 
         // https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
@@ -36,7 +37,7 @@ node {
             props.each {key, value -> echo "${key}: ${value}" }
         }
 
-        if (PROTECTED_BRANCH) {
+        if (IS_PROTECTED_BRANCH) {
             configFileProvider([
                 configFile(fileId: "salix-front.branch.${env.BRANCH_NAME}",
                 variable: 'BRANCH_PROPS_FILE')
@@ -63,7 +64,7 @@ pipeline {
     stages {
         stage('Version') {
             when {
-                expression { PROTECTED_BRANCH }
+                expression { IS_PROTECTED_BRANCH }
             }
             steps {
                 script {
@@ -84,7 +85,7 @@ pipeline {
         }
         stage('Test') {
             when {
-                expression { !PROTECTED_BRANCH }
+                expression { !IS_PROTECTED_BRANCH }
             }
             environment {
                 NODE_ENV = ''
@@ -134,7 +135,7 @@ pipeline {
         }
         stage('Build') {
             when {
-                expression { PROTECTED_BRANCH }
+                expression { IS_PROTECTED_BRANCH }
             }
             environment {
                 CREDENTIALS = credentials('docker-registry')
@@ -156,7 +157,7 @@ pipeline {
         }
         stage('Deploy') {
             when {
-                expression { PROTECTED_BRANCH }
+                expression { IS_PROTECTED_BRANCH }
             }
             environment {
                 VERSION = readFile 'VERSION.txt'
diff --git a/test/cypress/docker-compose.yml b/test/cypress/docker-compose.yml
index bf22c58778d..5b0303e07b6 100644
--- a/test/cypress/docker-compose.yml
+++ b/test/cypress/docker-compose.yml
@@ -1,7 +1,7 @@
 version: '3.7'
 services:
     back:
-        image: 'registry.verdnatura.es/salix-back:${CHANGE_TARGET:-dev}'
+        image: 'registry.verdnatura.es/salix-back:${TARGET_BRANCH:-dev}'
         volumes:
             - ./test/cypress/storage:/salix/storage
             - ./test/cypress/back/datasources.json:/salix/loopback/server/datasources.json
@@ -18,4 +18,4 @@ services:
             - TZ
         dns_search: .
     db:
-        image: 'registry.verdnatura.es/salix-db:${CHANGE_TARGET:-dev}'
+        image: 'registry.verdnatura.es/salix-db:${TARGET_BRANCH:-dev}'

From 1018a0aa905cb01f6b7467e9df604f0f277b94ce Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 14:49:32 +0100
Subject: [PATCH 04/25] ci: refs #6695 remove unnecessary echo statements from
 Jenkinsfile

---
 Jenkinsfile | 105 +++++++++++++++++++++++++---------------------------
 1 file changed, 51 insertions(+), 54 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8abb846728c..2f3012f8d07 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -20,14 +20,11 @@ node {
 
         PROTECTED_BRANCH = GIT_PROTECTED_BRANCH + ['main','beta']
         TARGET_BRANCH = GIT_PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
+        echo TARGET_BRANCH
 
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 
-        // https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
-        echo "NODE_NAME: ${env.NODE_NAME}"
-        echo "WORKSPACE: ${env.WORKSPACE}"
-
         configFileProvider([
             configFile(fileId: 'salix-front.properties',
             variable: 'PROPS_FILE')
@@ -83,56 +80,56 @@ pipeline {
                 sh 'pnpm install --prefer-offline'
             }
         }
-        stage('Test') {
-            when {
-                expression { !IS_PROTECTED_BRANCH }
-            }
-            environment {
-                NODE_ENV = ''
-                CI = 'true'
-                TZ = 'Europe/Madrid'
-            }
-            parallel {
-                stage('Unit') {
-                    steps {
-                        sh 'pnpm run test:unit:ci'
-                    }
-                    post {
-                        always {
-                            junit(
-                                testResults: 'junit/vitest.xml',
-                                allowEmptyResults: true
-                            )
-                        }
-                    }
-                }
-                stage('E2E') {
-                    environment {
-                        CREDENTIALS = credentials('docker-registry')
-                        COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
-                        COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-                    }
-                    steps {
-                        script {
-                            def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
-                            sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
-                            image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
-                                sh 'cypress run --browser chromium'
-                            }
-                        }
-                    }
-                    post {
-                        always {
-                            sh "docker-compose ${env.COMPOSE_PARAMS} down"
-                            junit(
-                                testResults: 'junit/e2e.xml',
-                                allowEmptyResults: true
-                            )
-                        }
-                    }
-                }
-            }
-        }
+        // stage('Test') {
+        //     when {
+        //         expression { !IS_PROTECTED_BRANCH }
+        //     }
+        //     environment {
+        //         NODE_ENV = ''
+        //         CI = 'true'
+        //         TZ = 'Europe/Madrid'
+        //     }
+        //     parallel {
+        //         stage('Unit') {
+        //             steps {
+        //                 sh 'pnpm run test:unit:ci'
+        //             }
+        //             post {
+        //                 always {
+        //                     junit(
+        //                         testResults: 'junit/vitest.xml',
+        //                         allowEmptyResults: true
+        //                     )
+        //                 }
+        //             }
+        //         }
+        //         stage('E2E') {
+        //             environment {
+        //                 CREDENTIALS = credentials('docker-registry')
+        //                 COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
+        //                 COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+        //             }
+        //             steps {
+        //                 script {
+        //                     def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
+        //                     sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
+        //                     image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
+        //                         sh 'cypress run --browser chromium'
+        //                     }
+        //                 }
+        //             }
+        //             post {
+        //                 always {
+        //                     sh "docker-compose ${env.COMPOSE_PARAMS} down"
+        //                     junit(
+        //                         testResults: 'junit/e2e.xml',
+        //                         allowEmptyResults: true
+        //                     )
+        //                 }
+        //             }
+        //         }
+        //     }
+        // }
         stage('Build') {
             when {
                 expression { IS_PROTECTED_BRANCH }

From 05994ba1dc23abba33a1360022871030aae4331b Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 14:52:12 +0100
Subject: [PATCH 05/25] ci: refs #6695 remove unnecessary echo statements from
 Jenkinsfile

---
 Jenkinsfile | 101 ++++++++++++++++++++++++++--------------------------
 1 file changed, 50 insertions(+), 51 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 2f3012f8d07..07c6a9bd828 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -20,7 +20,6 @@ node {
 
         PROTECTED_BRANCH = GIT_PROTECTED_BRANCH + ['main','beta']
         TARGET_BRANCH = GIT_PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
-        echo TARGET_BRANCH
 
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
@@ -80,56 +79,56 @@ pipeline {
                 sh 'pnpm install --prefer-offline'
             }
         }
-        // stage('Test') {
-        //     when {
-        //         expression { !IS_PROTECTED_BRANCH }
-        //     }
-        //     environment {
-        //         NODE_ENV = ''
-        //         CI = 'true'
-        //         TZ = 'Europe/Madrid'
-        //     }
-        //     parallel {
-        //         stage('Unit') {
-        //             steps {
-        //                 sh 'pnpm run test:unit:ci'
-        //             }
-        //             post {
-        //                 always {
-        //                     junit(
-        //                         testResults: 'junit/vitest.xml',
-        //                         allowEmptyResults: true
-        //                     )
-        //                 }
-        //             }
-        //         }
-        //         stage('E2E') {
-        //             environment {
-        //                 CREDENTIALS = credentials('docker-registry')
-        //                 COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
-        //                 COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-        //             }
-        //             steps {
-        //                 script {
-        //                     def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
-        //                     sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
-        //                     image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
-        //                         sh 'cypress run --browser chromium'
-        //                     }
-        //                 }
-        //             }
-        //             post {
-        //                 always {
-        //                     sh "docker-compose ${env.COMPOSE_PARAMS} down"
-        //                     junit(
-        //                         testResults: 'junit/e2e.xml',
-        //                         allowEmptyResults: true
-        //                     )
-        //                 }
-        //             }
-        //         }
-        //     }
-        // }
+        stage('Test') {
+            when {
+                expression { !IS_PROTECTED_BRANCH }
+            }
+            environment {
+                NODE_ENV = ''
+                CI = 'true'
+                TZ = 'Europe/Madrid'
+            }
+            parallel {
+                stage('Unit') {
+                    steps {
+                        sh 'pnpm run test:unit:ci'
+                    }
+                    post {
+                        always {
+                            junit(
+                                testResults: 'junit/vitest.xml',
+                                allowEmptyResults: true
+                            )
+                        }
+                    }
+                }
+                stage('E2E') {
+                    environment {
+                        CREDENTIALS = credentials('docker-registry')
+                        COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
+                        COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+                    }
+                    steps {
+                        script {
+                            def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
+                            sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
+                            image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
+                                sh 'cypress run --browser chromium'
+                            }
+                        }
+                    }
+                    post {
+                        always {
+                            sh "docker-compose ${env.COMPOSE_PARAMS} down -v"
+                            junit(
+                                testResults: 'junit/e2e.xml',
+                                allowEmptyResults: true
+                            )
+                        }
+                    }
+                }
+            }
+        }
         stage('Build') {
             when {
                 expression { IS_PROTECTED_BRANCH }

From 6f688c337ea90b74d2df541d2904986a4a8ea6fb Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 15:07:01 +0100
Subject: [PATCH 06/25] ci: refs #6695 update Jenkinsfile to include 'main' and
 'beta' in protected branches

---
 Jenkinsfile | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 07c6a9bd828..977f19ac263 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -12,18 +12,23 @@ def BRANCH_ENV = [
 node {
     stage('Setup') {
         env.NODE_ENV = BRANCH_ENV[env.BRANCH_NAME] ?: 'dev'
-        GIT_PROTECTED_BRANCH = [
+        PROTECTED_BRANCH = [
             'dev',
             'test',
             'master',
+            'main',
+            'beta'
         ]
 
-        PROTECTED_BRANCH = GIT_PROTECTED_BRANCH + ['main','beta']
-        TARGET_BRANCH = GIT_PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
+        TARGET_BRANCH = PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
 
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 
+       // https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
+        echo "NODE_NAME: ${env.NODE_NAME}"
+        echo "WORKSPACE: ${env.WORKSPACE}"
+
         configFileProvider([
             configFile(fileId: 'salix-front.properties',
             variable: 'PROPS_FILE')

From b2ae8c5714468e2eb4c3aa716e356f19e8c0a874 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 15:12:15 +0100
Subject: [PATCH 07/25] ci: refs #6695 update Jenkinsfile to improve
 TARGET_BRANCH assignment logic

---
 Jenkinsfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 977f19ac263..76aa2227fb3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -20,8 +20,8 @@ node {
             'beta'
         ]
 
-        TARGET_BRANCH = PROTECTED_BRANCH.find { it == env.CHANGE_TARGET } ?: "dev"
-
+        TARGET_BRANCH = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
+        echo "TARGET_BRANCH" TARGET_BRANCH
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 

From ddbae9a13daa3fb15affc3b77be84353884489aa Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 15:14:16 +0100
Subject: [PATCH 08/25] ci: refs #6695 update Jenkinsfile to improve
 TARGET_BRANCH assignment logic

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 76aa2227fb3..5927c4b8063 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,7 +21,7 @@ node {
         ]
 
         TARGET_BRANCH = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
-        echo "TARGET_BRANCH" TARGET_BRANCH
+        echo TARGET_BRANCH
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 

From 9d5e04a8aec9999407d654d998dfbfb608b6342d Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Fri, 21 Feb 2025 15:15:52 +0100
Subject: [PATCH 09/25] ci: refs #6695 update Jenkinsfile to remove echo
 statement for TARGET_BRANCH

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 5927c4b8063..c383173284d 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,7 +21,7 @@ node {
         ]
 
         TARGET_BRANCH = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
-        echo TARGET_BRANCH
+
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 

From d09b753a6679fa78863de4da644bf95af36846f1 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Mon, 24 Feb 2025 07:08:28 +0100
Subject: [PATCH 10/25] ci: refs #6695 update Jenkinsfile and
 docker-compose.yml to use COMPOSE_TAG for branch targeting

---
 Jenkinsfile                     | 3 +--
 test/cypress/docker-compose.yml | 4 ++--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index c383173284d..963b96a4093 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -20,8 +20,6 @@ node {
             'beta'
         ]
 
-        TARGET_BRANCH = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
-
         IS_PROTECTED_BRANCH = PROTECTED_BRANCH.contains(env.BRANCH_NAME)
         IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
 
@@ -112,6 +110,7 @@ pipeline {
                         CREDENTIALS = credentials('docker-registry')
                         COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
                         COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                     }
                     steps {
                         script {
diff --git a/test/cypress/docker-compose.yml b/test/cypress/docker-compose.yml
index 5b0303e07b6..8d70c5248d0 100644
--- a/test/cypress/docker-compose.yml
+++ b/test/cypress/docker-compose.yml
@@ -1,7 +1,7 @@
 version: '3.7'
 services:
     back:
-        image: 'registry.verdnatura.es/salix-back:${TARGET_BRANCH:-dev}'
+        image: 'registry.verdnatura.es/salix-back:${COMPOSE_TAG:-dev}'
         volumes:
             - ./test/cypress/storage:/salix/storage
             - ./test/cypress/back/datasources.json:/salix/loopback/server/datasources.json
@@ -18,4 +18,4 @@ services:
             - TZ
         dns_search: .
     db:
-        image: 'registry.verdnatura.es/salix-db:${TARGET_BRANCH:-dev}'
+        image: 'registry.verdnatura.es/salix-db:${COMPOSE_TAG:-dev}'

From cf30dff90556d7d5122553d172b09327e9cb7332 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Mon, 24 Feb 2025 07:23:45 +0100
Subject: [PATCH 11/25] ci: refs #6695 update Jenkinsfile to use double quotes
 for COMPOSE_TAG assignment

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 963b96a4093..90b788ec8c2 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -110,7 +110,7 @@ pipeline {
                         CREDENTIALS = credentials('docker-registry')
                         COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
                         COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
+                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
                     }
                     steps {
                         script {

From e1d91a0b1999de58b0feb98db4dd8339a45b0445 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Mon, 24 Feb 2025 07:24:37 +0100
Subject: [PATCH 12/25] ci: refs #6695 update Jenkinsfile to use single quotes
 for COMPOSE_TAG assignment

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 90b788ec8c2..3563bedd849 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -110,10 +110,10 @@ pipeline {
                         CREDENTIALS = credentials('docker-registry')
                         COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
                         COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : "dev"
                     }
                     steps {
                         script {
+                            COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                             def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
                             sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
                             image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {

From ca2e8e89df0eeaeeb7ff65a00617ab7e9632ddf4 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Mon, 24 Feb 2025 09:32:36 +0100
Subject: [PATCH 13/25] ci: refs #6695 update Jenkinsfile to assign COMPOSE_TAG
 within the pipeline block

---
 Jenkinsfile | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 3563bedd849..b82981af43c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -110,10 +110,10 @@ pipeline {
                         CREDENTIALS = credentials('docker-registry')
                         COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
                         COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
+                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                     }
                     steps {
                         script {
-                            COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                             def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
                             sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
                             image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
@@ -138,7 +138,6 @@ pipeline {
                 expression { IS_PROTECTED_BRANCH }
             }
             environment {
-                CREDENTIALS = credentials('docker-registry')
                 VERSION = readFile 'VERSION.txt'
             }
             steps {

From bb4a919c10f182584c9f6daf20cacd62804d2f64 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Mon, 24 Feb 2025 09:34:30 +0100
Subject: [PATCH 14/25] ci: refs #6695 update Jenkinsfile to assign COMPOSE_TAG
 within the pipeline block

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index b82981af43c..8e22a87dac6 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -110,10 +110,10 @@ pipeline {
                         CREDENTIALS = credentials('docker-registry')
                         COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}"
                         COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ."
-                        COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                     }
                     steps {
                         script {
+                            env.COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev'
                             def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
                             sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
                             image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {

From 5645e03a2d6168c5b795a9e4fba56fb8360929bf Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Mon, 24 Feb 2025 10:44:28 +0100
Subject: [PATCH 15/25] fix: fixed style when clicking on icons

---
 src/components/ui/VnSearchbar.vue | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue
index 30e4135e2fb..8607d9694bb 100644
--- a/src/components/ui/VnSearchbar.vue
+++ b/src/components/ui/VnSearchbar.vue
@@ -204,8 +204,9 @@ async function search() {
 }
 
 :deep(.q-field--focused) {
-    .q-icon {
-        color: black;
+    .q-icon,
+    .q-placeholder {
+        color: var(--vn-black-text-color);
     }
 }
 

From c1e4b78253288b25de9a2760afd8d68b292fff92 Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Tue, 25 Feb 2025 14:09:18 +0100
Subject: [PATCH 16/25] fix: fixed negative bases style

---
 src/pages/InvoiceOut/InvoiceOutNegativeBases.vue | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/pages/InvoiceOut/InvoiceOutNegativeBases.vue b/src/pages/InvoiceOut/InvoiceOutNegativeBases.vue
index 135eb9aca46..605a9e2cf21 100644
--- a/src/pages/InvoiceOut/InvoiceOutNegativeBases.vue
+++ b/src/pages/InvoiceOut/InvoiceOutNegativeBases.vue
@@ -97,16 +97,19 @@ const columns = computed(() => [
         align: 'left',
         name: 'isActive',
         label: t('invoiceOut.negativeBases.active'),
+        component: 'checkbox',
     },
     {
         align: 'left',
         name: 'hasToInvoice',
         label: t('invoiceOut.negativeBases.hasToInvoice'),
+        component: 'checkbox',
     },
     {
         align: 'left',
-        name: 'hasVerifiedData',
+        name: 'isTaxDataChecked',
         label: t('invoiceOut.negativeBases.verifiedData'),
+        component: 'checkbox',
     },
     {
         align: 'left',
@@ -142,7 +145,7 @@ const downloadCSV = async () => {
     await invoiceOutGlobalStore.getNegativeBasesCsv(
         userParams.from,
         userParams.to,
-        filterParams
+        filterParams,
     );
 };
 </script>

From 88b6f992369157afbc9428f15c53fbd0bbd24f97 Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Tue, 25 Feb 2025 14:40:41 +0100
Subject: [PATCH 17/25] fix: added lost code

---
 src/pages/InvoiceOut/locale/en.yml                            | 1 +
 src/pages/InvoiceOut/locale/es.yml                            | 1 +
 test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/pages/InvoiceOut/locale/en.yml b/src/pages/InvoiceOut/locale/en.yml
index f1baef432c0..17d19835149 100644
--- a/src/pages/InvoiceOut/locale/en.yml
+++ b/src/pages/InvoiceOut/locale/en.yml
@@ -2,6 +2,7 @@ invoiceOut:
     search: Search invoice
     searchInfo: You can search by invoice reference
     params:
+        id: ID
         company: Company
         country: Country
         clientId: Client
diff --git a/src/pages/InvoiceOut/locale/es.yml b/src/pages/InvoiceOut/locale/es.yml
index afca278716a..f86c5f58e2f 100644
--- a/src/pages/InvoiceOut/locale/es.yml
+++ b/src/pages/InvoiceOut/locale/es.yml
@@ -2,6 +2,7 @@ invoiceOut:
     search: Buscar factura emitida
     searchInfo: Puedes buscar por referencia de la factura
     params:
+        id: Id
         company: Empresa
         country: País
         clientId: Cliente
diff --git a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
index 7ebaf3ef32a..333f7e2c482 100644
--- a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
+++ b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
@@ -1,5 +1,5 @@
 /// <reference types="cypress" />
-describe.skip('InvoiceOut summary', () => {
+describe('InvoiceOut summary', () => {
     const transferInvoice = {
         Client: { val: 'employee', type: 'select' },
         Type: { val: 'Error in customer data', type: 'select' },

From 653259aeae14c6707b6dee1f88f60ae9b89463f8 Mon Sep 17 00:00:00 2001
From: Javier Segarra <jsegarra@verdnatura.es>
Date: Tue, 25 Feb 2025 14:41:32 +0100
Subject: [PATCH 18/25] fix: refreshData

---
 src/pages/Ticket/Card/TicketSale.vue | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 076e06deab3..8f586b23193 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -202,7 +202,7 @@ const updateQuantity = async (sale) => {
         sale.isNew = false;
         await axios.post(`Sales/${id}/updateQuantity`, { quantity });
         notify('globals.dataSaved', 'positive');
-        tableRef.value.reload();
+        resetChanges();
     } catch (e) {
         const { quantity } = tableRef.value.CrudModelRef.originalData.find(
             (s) => s.id === sale.id,
@@ -246,7 +246,7 @@ const updateConcept = async (sale) => {
     const data = { newConcept: sale.concept };
     await axios.post(`Sales/${sale.id}/updateConcept`, data);
     notify('globals.dataSaved', 'positive');
-    tableRef.value.reload();
+    resetChanges();
 };
 
 const DEFAULT_EDIT = {
@@ -297,7 +297,7 @@ const updatePrice = async (sale, newPrice) => {
     sale.price = newPrice;
     edit.value = { ...DEFAULT_EDIT };
     notify('globals.dataSaved', 'positive');
-    tableRef.value.reload();
+    resetChanges();
 };
 
 const changeDiscount = async (sale) => {
@@ -329,7 +329,7 @@ const updateDiscount = async (sales, newDiscount = null) => {
     };
     await axios.post(`Tickets/${route.params.id}/updateDiscount`, params);
     notify('globals.dataSaved', 'positive');
-    tableRef.value.reload();
+    resetChanges();
 };
 
 const getNewPrice = computed(() => {
@@ -397,7 +397,7 @@ const removeSales = async () => {
     await axios.post('Sales/deleteSales', params);
     removeSelectedSales();
     notify('globals.dataSaved', 'positive');
-    window.location.reload();
+    resetChanges();
 };
 
 const setTransferParams = async () => {

From cb220ce268b523abee4899423c99bbc219ed5496 Mon Sep 17 00:00:00 2001
From: jorgep <jorgep@verdnatura.es>
Date: Tue, 25 Feb 2025 18:14:32 +0100
Subject: [PATCH 19/25] fix: refs #8078 enhance row selection logic in VnTable
 component

---
 src/components/VnTable/VnTable.vue            | 10 ++++-
 .../VnTable/__tests__/VnTable.spec.js         | 40 ++++++++++++++++---
 2 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue
index 6e5f9fef4c6..a5173374bfa 100644
--- a/src/components/VnTable/VnTable.vue
+++ b/src/components/VnTable/VnTable.vue
@@ -295,8 +295,14 @@ function handleSelection({ evt, added, rows: selectedRows }, rows) {
     if (evt?.shiftKey && added) {
         const rowIndex = selectedRows[0].$index;
         const selectedIndexes = new Set(selected.value.map((row) => row.$index));
-        for (const row of rows) {
-            if (row.$index == rowIndex) break;
+        const minIndex = selectedIndexes.size
+            ? Math.min(...selectedIndexes, rowIndex)
+            : 0;
+        const maxIndex = Math.max(...selectedIndexes, rowIndex);
+
+        for (let i = minIndex; i <= maxIndex; i++) {
+            const row = rows[i];
+            if (row.$index == rowIndex) continue;
             if (!selectedIndexes.has(row.$index)) {
                 selected.value.push(row);
                 selectedIndexes.add(row.$index);
diff --git a/src/components/VnTable/__tests__/VnTable.spec.js b/src/components/VnTable/__tests__/VnTable.spec.js
index 74ba0698765..e5e38a63c6c 100644
--- a/src/components/VnTable/__tests__/VnTable.spec.js
+++ b/src/components/VnTable/__tests__/VnTable.spec.js
@@ -27,30 +27,58 @@ describe('VnTable', () => {
     beforeEach(() => (vm.selected = []));
 
     describe('handleSelection()', () => {
-        const rows = [{ $index: 0 }, { $index: 1 }, { $index: 2 }];
-        const selectedRows = [{ $index: 1 }];
-        it('should add rows to selected when shift key is pressed and rows are added except last one', () => {
+        const rows = [
+            { $index: 0 },
+            { $index: 1 },
+            { $index: 2 },
+            { $index: 3 },
+            { $index: 4 },
+        ];
+
+        it('should add rows to selected when shift key is pressed and rows are added in ascending order', () => {
+            const selectedRows = [{ $index: 1 }];
             vm.handleSelection(
                 { evt: { shiftKey: true }, added: true, rows: selectedRows },
-                rows
+                rows,
             );
             expect(vm.selected).toEqual([{ $index: 0 }]);
         });
 
+        it('should add rows to selected when shift key is pressed and rows are added in descending order', () => {
+            const selectedRows = [{ $index: 3 }];
+            vm.handleSelection(
+                { evt: { shiftKey: true }, added: true, rows: selectedRows },
+                rows,
+            );
+            expect(vm.selected).toEqual([{ $index: 0 }, { $index: 1 }, { $index: 2 }]);
+        });
+
         it('should not add rows to selected when shift key is not pressed', () => {
+            const selectedRows = [{ $index: 1 }];
             vm.handleSelection(
                 { evt: { shiftKey: false }, added: true, rows: selectedRows },
-                rows
+                rows,
             );
             expect(vm.selected).toEqual([]);
         });
 
         it('should not add rows to selected when rows are not added', () => {
+            const selectedRows = [{ $index: 1 }];
             vm.handleSelection(
                 { evt: { shiftKey: true }, added: false, rows: selectedRows },
-                rows
+                rows,
             );
             expect(vm.selected).toEqual([]);
         });
+
+        it('should add all rows between the smallest and largest selected indexes', () => {
+            vm.selected = [{ $index: 1 }, { $index: 3 }];
+            const selectedRows = [{ $index: 4 }];
+            vm.handleSelection(
+                { evt: { shiftKey: true }, added: true, rows: selectedRows },
+                rows,
+            );
+            expect(vm.selected).toEqual([{ $index: 1 }, { $index: 3 }, { $index: 2 }]);
+        });
     });
 });

From 754d673d0bcdfeb128c2cb734b80a19789cdd0c2 Mon Sep 17 00:00:00 2001
From: pablone <pablone@verdnatura.es>
Date: Wed, 26 Feb 2025 12:19:51 +0100
Subject: [PATCH 20/25] refactor: update ItemDescriptor to use dynamic labels
 for values

---
 src/pages/Item/Card/ItemDescriptor.vue | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/src/pages/Item/Card/ItemDescriptor.vue b/src/pages/Item/Card/ItemDescriptor.vue
index c6fee8540ef..cac11c275c2 100644
--- a/src/pages/Item/Card/ItemDescriptor.vue
+++ b/src/pages/Item/Card/ItemDescriptor.vue
@@ -122,22 +122,9 @@ const updateStock = async () => {
                 </template>
             </VnLv>
             <VnLv :label="t('globals.producer')" :value="dashIfEmpty(entity.subName)" />
-            <VnLv
-                v-if="entity.value5"
-                :label="t('item.descriptor.color')"
-                :value="entity.value5"
-            >
-            </VnLv>
-            <VnLv
-                v-if="entity.value6"
-                :label="t('item.descriptor.category')"
-                :value="entity.value6"
-            />
-            <VnLv
-                v-if="entity.value7"
-                :label="t('item.list.stems')"
-                :value="entity.value7"
-            />
+            <VnLv v-if="entity?.value5" :label="entity?.tag5" :value="entity.value5" />
+            <VnLv v-if="entity?.value6" :label="entity?.tag6" :value="entity.value6" />
+            <VnLv v-if="entity?.value7" :label="entity?.tag7" :value="entity.value7" />
         </template>
         <template #icons="{ entity }">
             <QCardActions v-if="entity" class="q-gutter-x-md">

From 1c9c703b4639f417c8b3fb407504d308594e6f74 Mon Sep 17 00:00:00 2001
From: Javier Segarra <jsegarra@verdnatura.es>
Date: Wed, 26 Feb 2025 14:39:51 +0100
Subject: [PATCH 21/25] fix: select fk

---
 src/pages/Ticket/TicketList.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pages/Ticket/TicketList.vue b/src/pages/Ticket/TicketList.vue
index 78bebc29780..60e80a6be9c 100644
--- a/src/pages/Ticket/TicketList.vue
+++ b/src/pages/Ticket/TicketList.vue
@@ -251,7 +251,7 @@ const fetchAvailableAgencies = async (formData) => {
 
     const { options, agency } = response;
     if (options) agenciesOptions.value = options;
-    if (agency) formData.agencyModeId = agency;
+    if (agency) formData.agencyModeId = agency.agencyModeFk;
 };
 
 const fetchClient = async (formData) => {

From 6718fa9a3ddd32846cd2e0fa88f82c00d4d9a29e Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Thu, 27 Feb 2025 09:18:16 +0100
Subject: [PATCH 22/25] refactor: adjust translation to standardize it

---
 src/pages/InvoiceOut/locale/es.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pages/InvoiceOut/locale/es.yml b/src/pages/InvoiceOut/locale/es.yml
index f86c5f58e2f..3df95d6b2dd 100644
--- a/src/pages/InvoiceOut/locale/es.yml
+++ b/src/pages/InvoiceOut/locale/es.yml
@@ -2,7 +2,7 @@ invoiceOut:
     search: Buscar factura emitida
     searchInfo: Puedes buscar por referencia de la factura
     params:
-        id: Id
+        id: ID
         company: Empresa
         country: País
         clientId: Cliente

From a1509500e34c910f39c7b91579ab3b073b51f8a4 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Thu, 27 Feb 2025 09:27:16 +0100
Subject: [PATCH 23/25] fix: prevent 'cypress run' error to show junit

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8e22a87dac6..71a7aa25f75 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -117,7 +117,7 @@ pipeline {
                             def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs')
                             sh "docker-compose ${env.COMPOSE_PARAMS} up -d"
                             image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") {
-                                sh 'cypress run --browser chromium'
+                                sh 'cypress run --browser chromium || true'
                             }
                         }
                     }

From 84aa5fb4011db07517c3582a17fd54659b2d315d Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Thu, 27 Feb 2025 10:29:33 +0100
Subject: [PATCH 24/25] fix: junit report

---
 Jenkinsfile       | 2 +-
 cypress.config.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 71a7aa25f75..c5424ee2719 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -125,7 +125,7 @@ pipeline {
                         always {
                             sh "docker-compose ${env.COMPOSE_PARAMS} down -v"
                             junit(
-                                testResults: 'junit/e2e.xml',
+                                testResults: 'junit/e2e-*.xml',
                                 allowEmptyResults: true
                             )
                         }
diff --git a/cypress.config.js b/cypress.config.js
index dfe963a1294..5cf075e2a4d 100644
--- a/cypress.config.js
+++ b/cypress.config.js
@@ -6,7 +6,7 @@ if (process.env.CI) {
     urlHost = 'front';
     reporter = 'junit';
     reporterOptions = {
-        mochaFile: 'junit/e2e.xml',
+        mochaFile: 'junit/e2e-[hash].xml',
         toConsole: false,
     };
 } else {

From c3c8a78fd8da2902518e39a4c666269126525e58 Mon Sep 17 00:00:00 2001
From: guillermo <guillermo@verdnatura.es>
Date: Thu, 27 Feb 2025 10:48:17 +0100
Subject: [PATCH 25/25] feat: refs #8348 Added grouping

---
 src/pages/Entry/EntryBuysTableDialog.vue | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/pages/Entry/EntryBuysTableDialog.vue b/src/pages/Entry/EntryBuysTableDialog.vue
index 86a9b018f45..7a6c4ac4359 100644
--- a/src/pages/Entry/EntryBuysTableDialog.vue
+++ b/src/pages/Entry/EntryBuysTableDialog.vue
@@ -65,7 +65,7 @@ const entriesTableColumns = computed(() => [
 ]);
 
 function downloadCSV(rows) {
-    const headers = ['id', 'itemFk', 'name', 'stickers', 'packing', 'comment'];
+    const headers = ['id', 'itemFk', 'name', 'stickers', 'packing', 'grouping', 'comment'];
 
     const csvRows = rows.map((row) => {
         const buy = row;
@@ -77,6 +77,7 @@ function downloadCSV(rows) {
             item.name || '',
             buy.stickers,
             buy.packing,
+            buy.grouping,
             item.comment || '',
         ].join(',');
     });