feat(flows): besked på skærmen når solgte traktorer fjernes fra et flow; rød når flowet står uden traktorer (v1.59.7.0)

This commit is contained in:
2026-09-29 18:18:27 +02:00
parent 45f58abcf0
commit fc646ab00b
6 changed files with 40 additions and 1 deletions
+14
View File
@@ -361,6 +361,20 @@ function ADRuns.pruneMissingVehicles(store, exists)
return new, missing
end
-- Én besked pr. berørt flow efter pruneMissingVehicles: {runName, removed, left, critical} (critical = flowet
-- står uden traktorer og virker ikke). I samme rækkefølge som flowene.
function ADRuns.pruneNotices(storeAfter, removed)
local byName = {}
for _, entry in ipairs(removed or {}) do byName[entry.runName] = (byName[entry.runName] or 0) + 1 end
local notices = {}
for _, run in ipairs(storeAfter.runs) do
if byName[run.name] ~= nil then
table.insert(notices, {runName = run.name, removed = byName[run.name], left = #run.vehicleIds, critical = #run.vehicleIds == 0})
end
end
return notices
end
-- En traktor er kun i ét run. Returnerer ny store + id på det run den blev flyttet FRA (nil = ingen).
function ADRuns.assignVehicle(store, runId, vehicleId)
local previous = ADRuns.findRunByVehicle(store, vehicleId)
+8
View File
@@ -1513,6 +1513,14 @@ function ADRunsController.pruneMissingVehicles(adEnv)
Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': køretøj %s findes ikke længere — fjernet fra flowet", tostring(entry.runName), tostring(entry.vehicleId))
end
ADRunsController.save()
-- besked på skærmen (højre side); rød når flowet står uden traktorer
if ADFieldJobs ~= nil and ADFieldJobs.notify ~= nil and g_i18n ~= nil then
for _, notice in ipairs(ADRuns.pruneNotices(store, removed)) do
local text = notice.critical and string.format(g_i18n:getText("spu_prune_empty"), notice.runName)
or string.format(g_i18n:getText("spu_prune_removed"), notice.runName, notice.removed, notice.left)
ADFieldJobs.notify(text, notice.critical)
end
end
end
function ADRunsController.installSaveHook()
+2
View File
@@ -261,6 +261,8 @@
<text name="spu_panel_flowTitle" text="Rediger flow: %s"/>
<text name="spu_panel_fieldTitle" text="Mark F%d"/>
<text name="spu_field_pausedSuffix" text="(pause)"/>
<text name="spu_prune_removed" text="Flow '%s': %d traktor(er) findes ikke længere og er fjernet (%d tilbage)"/>
<text name="spu_prune_empty" text="Flow '%s' har ingen traktorer længere og virker ikke — tildel en i Flows"/>
<text name="spu_newRunName" text="Flow %d"/>
<text name="spu_renameTitle" text="Navn på flow"/>
<text name="spu_deleteConfirm" text="Slet run '%s'? Dets kørende traktorer stoppes. Kan ikke fortrydes."/>
+2
View File
@@ -261,6 +261,8 @@
<text name="spu_panel_flowTitle" text="Edit flow: %s"/>
<text name="spu_panel_fieldTitle" text="Field F%d"/>
<text name="spu_field_pausedSuffix" text="(paused)"/>
<text name="spu_prune_removed" text="Flow '%s': %d tractor(s) no longer exist and were removed (%d left)"/>
<text name="spu_prune_empty" text="Flow '%s' has no tractors left and won't run — assign one in Flows"/>
<text name="spu_newRunName" text="Flow %d"/>
<text name="spu_renameTitle" text="Flow name"/>
<text name="spu_deleteConfirm" text="Delete run '%s'? Its running tractors will be stopped. This cannot be undone."/>
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<modDesc descVersion="107">
<author>masterdraco</author>
<version>1.59.6.0</version>
<version>1.59.7.0</version>
<title>
<en>AD Smart Pickup</en>
</title>
+13
View File
@@ -360,5 +360,18 @@ do
local _, none = ADRuns.pruneMissingVehicles(st, function() return false end)
check("prune: alle mangler -> intet fjernes", #none, 0)
end
-- beskeder på skærmen efter oprydning: én pr. flow; rød når flowet står uden traktorer
do
local st, r1 = ADRuns.createRun(ADRuns.newStore(), "TMR", "supply")
local st2, r2 = ADRuns.createRun(st, "Solo", "supply")
st2 = ADRuns.assignVehicle(st2, r1.id, "keep")
st2 = ADRuns.assignVehicle(st2, r1.id, "gone1")
st2 = ADRuns.assignVehicle(st2, r2.id, "gone2")
local pruned, removed = ADRuns.pruneMissingVehicles(st2, function(id) return id == "keep" end)
local notes = ADRuns.pruneNotices(pruned, removed)
check("besked: én pr. flow", #notes, 2)
check("besked: TMR har traktorer tilbage", notes[1].runName .. "/" .. notes[1].left .. "/" .. tostring(notes[1].critical), "TMR/1/false")
check("besked: Solo står tom -> rød", notes[2].runName .. "/" .. notes[2].left .. "/" .. tostring(notes[2].critical), "Solo/0/true")
end
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
os.exit(failures == 0 and 0 or 1)