{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "TARGET_HOST",
          "value" : "192.168.12.68"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "BRANCH",
          "value" : "dev"
        }
      ]
    },
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$RemoteCause",
          "shortDescription" : "Started by remote host 127.0.0.1",
          "addr" : "127.0.0.1",
          "note" : null
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 4,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
            "branch" : [
              {
                "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
            "branch" : [
              {
                "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
        "branch" : [
          {
            "SHA1" : "bf69e20f22003bbc73714edec19512152cea83bd",
            "name" : "refs/remotes/origin/dev"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/younex1/erp-nuxt-frontend.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#4",
  "duration" : 586011,
  "estimatedDuration" : 593163,
  "executor" : null,
  "fullDisplayName" : "erp-frontend-deploy-instance #4",
  "id" : "4",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 4,
  "queueId" : 5888,
  "result" : "SUCCESS",
  "timestamp" : 1793034500623,
  "url" : "https://jenkins.younex.de/job/erp-frontend-deploy-instance/4/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/offers/conditions/index.post.ts",
          "app/components/offers/QuoteModal.vue",
          "server/api/settings/software-catalog/lists.get.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "server/api/offers/quote/preview.post.ts",
          "app/pages/settings/software-catalog/index.vue",
          "reference/template-cleanup/01-idempiere-truncate.sql",
          "app/utils/softwareCatalogDefaults.ts",
          "server/utils/chatAccess.ts",
          "app/pages/users/leads/[id]/edit.vue",
          "server/api/settings/software-catalog/seed.post.ts",
          "reference/template-cleanup/README.md",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js",
          "server/api/settings/software-catalog/save.post.ts",
          "server/api/settings/software-catalog/seed-lists.post.ts",
          "server/api/offers/software-catalog/index.get.ts",
          "app/components/leads/ChatConsoleModal.vue",
          "reference/test-scripts/software-catalog-seed-lists.mts",
          "server/utils/offers/softwareCatalog.ts",
          ".claude/rules/offers/software-quote.md",
          "app/composables/menu/admin/sales.ts",
          "app/components/MainNavigationMenu.vue",
          "server/utils/offers/softwareQuotePdf.ts",
          "server/api/offers/quote/send.post.ts"
        ],
        "commitId" : "7247b7d3b3973109586dfc39741d445d9fa06b91",
        "timestamp" : 1793023127000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Software offer type \"LogShip Cloud\" + maintainable catalog in iDempiere\u000a\u000aSecond offer type next to the 3PL fulfillment quote on the lead page: a SaaS\u000aoffer for the LogShip Cloud product with its own modal (packages, overage\u000astaffel, feature matrix, add-ons, onboarding package with phases/highlights,\u000apositions, requirements, texts) and branded PDF (package card, prices, 4–5\u000acolumn package comparison, onboarding section, example calculation). Header\u000aswitch \"Fulfillment | LogShip Cloud\" in both modals; offers/quote preview+send\u000abranch on payload.offerType, conditions saved as offer_conditions.softwareQuote.\u000a\u000aCatalog persisted in iDempiere (CUST_SoftwarePlan / CUST_SoftwareCatalogItem,\u000aenum columns as AD_Reference lists): server util with 5-min cache and fail-soft\u000adefaults, routes for read / lists / whole-catalog save / seed / seed-lists,\u000astaff gate option requireChat=false. Settings → Software-Katalog is a matrix\u000aeditor (packages = columns, features = rows, click cell = minimum package,\u000amode pill, drag & drop rows/columns, inline rename, details panel, add-ons\u000alist, one save) — linked from Sales in both menus. Offers carry a catalog\u000asnapshot so old PDFs stay reproducible.\u000a\u000aAlso: backdrop close only on a real backdrop click (both offer modals), feature\u000arows no longer squeezed by the global select width, dark-mode styling for the\u000acatalog page, the KI console and the offer modals, template clean-up keeps the\u000atwo new tables, recipe .claude/rules/offers/software-quote.md.\u000a",
        "date" : "2026-10-26 14:58:47 +0100",
        "id" : "7247b7d3b3973109586dfc39741d445d9fa06b91",
        "msg" : "Software offer type \"LogShip Cloud\" + maintainable catalog in iDempiere",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/seed.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/software-catalog/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/sales.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/offers/software-quote.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/conditions/index.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/quote/send.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/quote/preview.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/lists.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/01-idempiere-truncate.sql"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/seed-lists.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/software-catalog/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/README.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/leads/ChatConsoleModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/softwareCatalog.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/save.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "add",
            "file" : "app/utils/softwareCatalogDefaults.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/chatAccess.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/software-catalog-seed-lists.mts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/softwareQuotePdf.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50",
        "timestamp" : 1793024418000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "LogShip offer: onboarding package marked optional, \"ab\" price, travel costs excluded\u000a\u000aThe onboarding package prints as optional with an \"ab 3.250 €\" starting price\u000a(final fixed price after the kickoff) and a note that travel and accommodation\u000acosts for on-site appointments are billed as incurred — in the price table, the\u000aonboarding section, the example calculation and the Hinweise. Both aspects are\u000aper-offer switches in the modal (default on) and persist with the conditions.\u000a",
        "date" : "2026-10-26 15:20:18 +0100",
        "id" : "e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50",
        "msg" : "LogShip offer: onboarding package marked optional, \"ab\" price, travel costs excluded",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/softwareQuotePdf.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "app/utils/softwareCatalogDefaults.ts",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "a08361cbd2c664f0b42f95f54c50f2e7272e01ac",
        "timestamp" : 1793025148000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "LogShip offer: editable fee-line name and subtext, package taglines\u000a\u000aThe monthly software-fee row prints \"<package> — monatliche Softwaregebühr\"\u000awith the package tagline (catalog Description) and the included volumes as\u000asubtext; name and subtext can be overridden per offer (empty = automatic).\u000aThe package card shows the tagline too. Default catalog names are now\u000aStart / Wachstum / Premium / Enterprise with taglines (e.g. Start: \"Der\u000akomplette Fulfillment-Kern für Ihren Einstieg.\"); the live rows were updated\u000ato match. Modal gets tagline, fee-name and fee-subtext fields (de/en/es).\u000a",
        "date" : "2026-10-26 15:32:28 +0100",
        "id" : "a08361cbd2c664f0b42f95f54c50f2e7272e01ac",
        "msg" : "LogShip offer: editable fee-line name and subtext, package taglines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/utils/softwareCatalogDefaults.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/inouts/quick-rma.post.ts",
          "app/pages/mobile/return.vue",
          "app/pages/integrations/returns-desktop.vue",
          "app/composables/useReturnedQty.ts"
        ],
        "commitId" : "a332853cd2e7e11a943633fdca396c6ac7a54586",
        "timestamp" : 1793031078000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines\u000a\u000aThe mobile + desktop return pages summed every completed M_RMA on the\u000ashipment as already returned. Marketplace-imported RMAs (Amazon) are\u000aCompleted with the expected qty before the parcel arrives, so unprocessed\u000areturns showed Remaining 0/1 and could not be entered (e.g. shipment\u000a536925 / RMA 30614). Shared useReturnedQty composable now counts only\u000acompleted/closed customer-return receipts linked via M_RMA_ID.\u000a\u000aquick-rma: when reusing such an RMA, receipt lines are matched to RMA\u000alines by shipment line id (then product, then line number restricted to\u000aunlinked lines) instead of the bare line number, which the Amazon\u000aimporter assigns as a counter. Orphan check also accepts closed receipts.\u000a",
        "date" : "2026-10-26 17:11:18 +0100",
        "id" : "a332853cd2e7e11a943633fdca396c6ac7a54586",
        "msg" : "Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/returns-desktop.vue"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useReturnedQty.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/return.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/inouts/quick-rma.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/inouts/quick-rma.post.ts"
        ],
        "commitId" : "ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d",
        "timestamp" : 1793031125000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "quick-rma: prefer line-number match over product match for unlinked RMA lines\u000a\u000aKeeps the previous behaviour for RMAs created without M_InOutLine_ID\u000a(sales-order return page) when the same product appears on two lines.\u000a",
        "date" : "2026-10-26 17:12:05 +0100",
        "id" : "ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d",
        "msg" : "quick-rma: prefer line-number match over product match for unlinked RMA lines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/inouts/quick-rma.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/materials/products/index.vue",
          "reference/demo-instance/hess/catalog.json",
          "reference/demo-instance/hess/build-catalog.py",
          "reference/demo-instance/create-master-articles.sh",
          "server/utils/productsGrid.ts",
          "reference/demo-instance/add-purchase-prices.sh",
          "app/components/materials/ProductVariantsCard.vue",
          "reference/demo-instance/hess/cattree.json",
          "app/pages/materials/products/[id]/edit.vue",
          "server/api/materials/products/[id]/variants.get.ts",
          "reference/demo-instance/hess/masters.json",
          "reference/demo-instance/set-parent-ids.sh",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "bf69e20f22003bbc73714edec19512152cea83bd",
        "timestamp" : 1793034452000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling\u000a",
        "date" : "2026-10-26 18:07:32 +0100",
        "id" : "bf69e20f22003bbc73714edec19512152cea83bd",
        "msg" : "Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/demo-instance/create-master-articles.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/masters.json"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/productsGrid.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/build-catalog.py"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/set-parent-ids.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/add-purchase-prices.sh"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/index.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/materials/ProductVariantsCard.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/variants.get.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/cattree.json"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/catalog.json"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}