{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 745,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
            "branch" : [
              {
                "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
            "branch" : [
              {
                "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
        "branch" : [
          {
            "SHA1" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
            "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" : None,
  "displayName" : "#745",
  "duration" : 63351,
  "estimatedDuration" : 61503,
  "executor" : None,
  "fullDisplayName" : "build-logship-frontend #745",
  "id" : "745",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 745,
  "queueId" : 5767,
  "result" : "SUCCESS",
  "timestamp" : 1790121600766,
  "url" : "https://jenkins.younex.de/job/build-logship-frontend/745/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/AgGrid/Products/AgTrackingUnits.vue",
          "app/composables/useReceiptTracking.ts",
          "app/components/receive/TrackingCaptureModal.vue",
          "app/pages/mobile/receive.vue",
          "server/api/materials/products/[id]/tracking.post.ts",
          "app/composables/menu/admin/materials.ts",
          "server/utils/productsGrid.ts",
          "server/utils/attributeTracking.ts",
          "server/api/inouts/store.post.ts",
          "server/api/materials/products/ag-grid/products.post.ts",
          "app/components/materials/ProductUnitsPanel.vue",
          "server/api/materials/products/ag-grid/products-v2.post.ts",
          "app/components/AgGrid/Products/AgTrackingMode.vue",
          "server/api/materials/tracking-overview.get.ts",
          "app/pages/materials/products-v2/index.vue",
          "app/pages/integrations/receive-desktop.vue",
          "server/api/orders/[id]/order-line/index.get.ts",
          "app/components/MainNavigationMenu.vue",
          "app/components/receive/TrackingEnableDialog.vue",
          "reference/recipes.md",
          "server/api/materials/products/[id]/units.get.ts",
          "server/api/inouts/check-serials.post.ts",
          "app/assets/langs/shared.js",
          "server/api/mobile/product-lookup.post.ts"
        ],
        "commitId" : "5297eb3c1feed3bb828a0ac35972b89c90c8f744",
        "timestamp" : 1790067723000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Unit tracking on goods receipt: serial numbers and charges (lot + MHD) as iDempiere attribute set instances\u000a\u000aPort of the blut24 ASI mechanics to the LogShip catalogue. Three attribute sets are created lazily by name\u000a(LogShip Seriennummer / Charge / Seriennummer + Charge, all fields optional, FEFO via\u000aUseGuaranteeDateForMPolicy); a product is tracked when its M_AttributeSet_ID points at one of them.\u000a\u000aServer: attributeTracking.ts (set bootstrap + cache, ASI create/lookup, line expansion) hooked into\u000aPOST /api/inouts/store — a receive line may carry tracking { attributeSetId, serials[], charges[] } and is\u000aexpanded into one qty-1 line per serial, one line per charge (identical set/org/lot/MHD charges reused),\u000aremainder untracked; serials already in stock are rejected with a 400 before anything is written. New\u000aroutes products/[id]/tracking (enable/switch/clear), products/[id]/units, materials/tracking-overview,\u000ainouts/check-serials, ag-grid/products-v2 (grid body shared via productsGrid.ts); product-lookup and\u000aorders/[id]/order-line return the tracking flags and C_UOM_ID.\u000a\u000aDesktop receive: per-line tracking chip, enable dialog, capture modal with scan/paste input, CSV import\u000a(serial;lot;mhd[;qty], header optional), several lot/MHD groups per position, in-stock serial warnings,\u000awarn + confirm on incomplete capture. Mobile receive: serial scan mode (every scan = one serial until the\u000aqty is reached), one lot/MHD per position via native inputs with the scanner-focus pause, mode picker,\u000aincomplete-capture confirm; fixes the stray \"On\" before <script setup>. Staff-only products clone\u000a/materials/products-v2 with Tracking + Einheiten columns and a units side panel; menu entries only in the\u000astaff branches. Recipe added to reference/recipes.md.\u000a",
        "date" : "2026-09-22 11:02:03 +0200",
        "id" : "5297eb3c1feed3bb828a0ac35972b89c90c8f744",
        "msg" : "Unit tracking on goods receipt: serial numbers and charges (lot + MHD) as iDempiere attribute set instances",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/receive-desktop.vue"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useReceiptTracking.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/materials/products/ag-grid/products.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/AgGrid/Products/AgTrackingMode.vue"
          },
          {
            "editType" : "add",
            "file" : "app/pages/materials/products-v2/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/tracking-overview.get.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/materials/ProductUnitsPanel.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/AgGrid/Products/AgTrackingUnits.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/ag-grid/products-v2.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/receive/TrackingCaptureModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/receive.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/product-lookup.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/recipes.md"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/units.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/attributeTracking.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/productsGrid.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/materials.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/tracking.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/inouts/store.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/inouts/check-serials.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/[id]/order-line/index.get.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/receive/TrackingEnableDialog.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/materials/products/ag-grid/products-v2.post.ts",
          "app/components/AgGrid/Products/AgTrackingMode.vue",
          "app/composables/useReceiptTracking.ts",
          "app/pages/materials/products-v2/index.vue",
          "app/pages/mobile/receive.vue",
          "server/api/materials/products/[id]/tracking.post.ts",
          "app/components/receive/TrackingEnableDialog.vue",
          "server/utils/attributeTracking.ts",
          "reference/recipes.md",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "c466a90e190da1bede631c4e2904d390acfabf05",
        "timestamp" : 1790069095000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Unit tracking: MHD-only mode (LogShip MHD attribute set, no lot)\u000a\u000aFourth lazily created set \"LogShip MHD\" (IsGuaranteeDate + FEFO, no IsLot) and mode 'mhd' across the\u000aserver util, tracking route, products-v2 filter, the composable (label, badge \"MHD n/qty\"), the desktop\u000aenable dialog (mhd can be widened to charge or both), the mobile mode picker and the products-v2 mode\u000aselect; translation key tracking_mhd in all four locales. ensureTrackingSets re-resolves a cached map that\u000alacks a mode and the tracking route refuses to clear a product when the requested mode's set cannot be\u000aresolved.\u000a",
        "date" : "2026-09-22 11:24:55 +0200",
        "id" : "c466a90e190da1bede631c4e2904d390acfabf05",
        "msg" : "Unit tracking: MHD-only mode (LogShip MHD attribute set, no lot)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/components/receive/TrackingEnableDialog.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/AgGrid/Products/AgTrackingMode.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/materials/products/[id]/tracking.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/recipes.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/attributeTracking.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products-v2/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useReceiptTracking.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/materials/products/ag-grid/products-v2.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/receive.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/orders/openso-generation-queue.get.ts",
          "app/components/sales/GenerateShipmentsPanel.vue",
          "app/pages/mobile/generate-shipments.vue",
          "app/composables/states.ts",
          "app/components/TopMegaBar.vue",
          "server/api/orders/openso-count-by-warehouse.get.ts",
          "app/pages/generate-shipments.vue",
          "app/components/sales/GenerateShipmentsModal.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "afa845908e73499e48e0a4c62dde34934b0c8795",
        "timestamp" : 1790070846000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Generate shipments: Simple/Advanced tabs with merchant cards, admin top-bar modal, mobile parity\u000a\u000aSimple mode (default) shows one card per merchant (org) with the fulfillable / open\u000aorder counts from the dashboard universe (openso-count-by-warehouse now also returns\u000a`fulfillable` per warehouse/org via the same stock rule as unfulfillable-count). All\u000amerchants are in scope by default, cards can be picked to narrow the run; one button\u000agenerates for the merchants' warehouses with plain defaults and prints every shipment\u000aright away. Advanced keeps the full parameter form; the merchant cards act as an org\u000afilter for the selected/all warehouse scopes and the sequential queue (new `orgIds`).\u000a\u000aThe page body moved to components/sales/GenerateShipmentsPanel.vue so the admin\u000aquick link in TopMegaBar can open it in a big modal (GenerateShipmentsModal.vue,\u000akept alive across closes). Runs set a shared busy flag: the modal asks before\u000aclosing, the page guards route leave, both warn on unload; keep-open notices show\u000aon the Advanced tab when a queue-driven filter is on and while any run is going.\u000aMobile generate-shipments gets the same Simple/Advanced split and merchant cards.\u000a",
        "date" : "2026-09-22 11:54:06 +0200",
        "id" : "afa845908e73499e48e0a4c62dde34934b0c8795",
        "msg" : "Generate shipments: Simple/Advanced tabs with merchant cards, admin top-bar modal, mobile parity",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/orders/openso-count-by-warehouse.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/generate-shipments.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/generate-shipments.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/TopMegaBar.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/states.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/GenerateShipmentsModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/openso-generation-queue.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/GenerateShipmentsPanel.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/TopMegaBar.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
        "timestamp" : 1790073768000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Top bar: admin shortcuts (Shipments modal + Commission page) moved left of the Ticket/Order quick buttons\u000a",
        "date" : "2026-09-22 12:42:48 +0200",
        "id" : "e8c7fd8e4778aacc2e5850afe4f018b87a3b763e",
        "msg" : "Top bar: admin shortcuts (Shipments modal + Commission page) moved left of the Ticket/Order quick buttons",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/components/TopMegaBar.vue"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}