fix(review): palle/bulk pr. kilde, pallefabrikker uden læssestation, hold-omdirigering, last ved Start, tomme kilder udelukkes, færre rutetjek, advarsler huskes, paller kun Fra/Salg
This commit is contained in:
@@ -5,12 +5,24 @@
|
||||
|
||||
-- Bedste pris-% for varen over alle salgssteder (uanset vejnet — det er til visning; turen
|
||||
-- bruger kun nåelige). {percent, stationName} eller nil.
|
||||
SmartPickupFrame.SELL_MARKERS_CACHE_MS = 30000
|
||||
|
||||
-- Salgsstederne slås op over alle markører × stationer; cachet, så det ikke sker pr. vare pr. sekund.
|
||||
function SmartPickupFrame:getSellMarkersCached(adEnv)
|
||||
local time = g_time or (os.clock ~= nil and os.clock() * 1000) or 0
|
||||
if self.sellMarkersCache == nil or (time - (self.sellMarkersCacheTime or 0)) > SmartPickupFrame.SELL_MARKERS_CACHE_MS then
|
||||
self.sellMarkersCache = ADSources.getSellMarkers(adEnv, g_currentMission:getFarmId())
|
||||
self.sellMarkersCacheTime = time
|
||||
end
|
||||
return self.sellMarkersCache
|
||||
end
|
||||
|
||||
function SmartPickupFrame:getProductQuote(adEnv, fillType)
|
||||
if ADSources == nil or ADPrices == nil then
|
||||
return nil
|
||||
end
|
||||
local best = nil
|
||||
for _, entry in ipairs(ADSources.getSellMarkers(adEnv, g_currentMission:getFarmId())) do
|
||||
for _, entry in ipairs(self:getSellMarkersCached(adEnv)) do
|
||||
if ADSources.stationAccepts(entry.station, fillType) then
|
||||
local quote = ADPrices.getQuote(entry.station, fillType)
|
||||
if quote ~= nil and (best == nil or quote.percent > best.percent) then
|
||||
@@ -31,8 +43,15 @@ function SmartPickupFrame:describeProduct(adEnv, product)
|
||||
return string.format(self.i18n:getText("spu_product_row"), tostring(product.title), SmartPickupFrame.formatCompact(product.available or 0), price)
|
||||
end
|
||||
|
||||
function SmartPickupFrame:getPolicyIndex(policy)
|
||||
for index, name in ipairs(SmartPickupFrame.POLICIES) do
|
||||
-- Paller kan ikke lagres i en silo: kun Fra/Salg for pallevarer.
|
||||
SmartPickupFrame.PALLET_POLICIES = {"off", "sell"}
|
||||
|
||||
function SmartPickupFrame.getPoliciesFor(product)
|
||||
return product.isPallet and SmartPickupFrame.PALLET_POLICIES or SmartPickupFrame.POLICIES
|
||||
end
|
||||
|
||||
function SmartPickupFrame.getPolicyIndex(policies, policy)
|
||||
for index, name in ipairs(policies) do
|
||||
if name == policy then
|
||||
return index
|
||||
end
|
||||
@@ -59,16 +78,17 @@ end
|
||||
|
||||
function SmartPickupFrame:fillProductRows(adEnv, run)
|
||||
self.productRows = {}
|
||||
local policyTexts = {}
|
||||
for _, policy in ipairs(SmartPickupFrame.POLICIES) do
|
||||
table.insert(policyTexts, self.i18n:getText("spu_policy_" .. policy))
|
||||
end
|
||||
local products = ADRunsController.getRunProducts(adEnv, run)
|
||||
for _, product in ipairs(products) do
|
||||
local row = self:addRow(self.productPrefab, {kind = "product", name = product.name})
|
||||
local policies = SmartPickupFrame.getPoliciesFor(product)
|
||||
local policyTexts = {}
|
||||
for _, policy in ipairs(policies) do
|
||||
table.insert(policyTexts, self.i18n:getText("spu_policy_" .. policy))
|
||||
end
|
||||
local row = self:addRow(self.productPrefab, {kind = "product", name = product.name, policies = policies})
|
||||
local option = row:getDescendantByName("option")
|
||||
option:setTexts(policyTexts)
|
||||
option:setState(self:getPolicyIndex(product.policy), false)
|
||||
option:setState(SmartPickupFrame.getPolicyIndex(policies, product.policy), false)
|
||||
local title = row:getDescendantByName("title")
|
||||
title:setText(self:describeProduct(adEnv, product))
|
||||
table.insert(self.productRows, {name = product.name, title = title, option = option})
|
||||
@@ -163,7 +183,7 @@ function SmartPickupFrame:onClickProduct(state, element)
|
||||
self:safe(function(frame)
|
||||
local run, data = frame:getRun(), frame.rowData[element]
|
||||
if run == nil or data == nil or data.kind ~= "product" then return end
|
||||
local policy = SmartPickupFrame.POLICIES[state] or "off"
|
||||
local policy = (data.policies or SmartPickupFrame.POLICIES)[state] or "off"
|
||||
ADRunsController.store = ADRuns.setProductPolicy(ADRunsController.store, run.id, data.name, policy)
|
||||
Logging.info(SmartPickupFrame.LOG_PREFIX .. "run '%s': %s=%s", tostring(run.name), tostring(data.name), policy)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user