Skip to content

Instantly share code, notes, and snippets.

@mdornseif
Last active December 7, 2016 12:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mdornseif/cb5c43a12be37de8132b9b28e1890e5b to your computer and use it in GitHub Desktop.
Save mdornseif/cb5c43a12be37de8132b9b28e1890e5b to your computer and use it in GitHub Desktop.
def versionsverbesserung_fuer_sofort([{'artnr': menge}, ...]):
ret = defaultdict(0)
erfuellbar = True
# wir koennen ja theoretisch mehrfach auf den selben Artikel zugreifen
# deswegen merken wir uns, was wir schon an freier menge "verbruacht"
# haben.
freimengenspeicher = {}
for artnr, menge in ...:
eap = get_eap(artnr)
if eap.fuer_kunde:
# kundespezifische Artikel fassen wir nicht an
ret[artnr] += menge
# aber wir müssen uns merken, falls da was nicht klappt
if artnr not in freimengenspeicher:
freimengenspeicher[artnr] = get_freie_menge(artnr)
freimengenspeicher[artnr] -= menge
menge = 0
if freimengenspeicher[artnr] < 0:
erfuellbar = False
continue
# uns interessieren nur aktive versionen
versionen = set(artnr + eap.aktive_versionen)
if ist_version(artnr):
# wenn der Caller uns eine Versionsnummer bergeben hat,
# dann erzwingen wir, dass keine kleineren versionsnummern
# beachtet werden.
# wer 12345/02 bestellt, kriegt 12345/02, 12345/03, etc geliefert
# aber nie mals 12345/01.
# wir gehen davon aus, dass wir üblicherweise ohne
# Versionsnummer aufgerufen werden.
versionen = entferne_kleinere_versionen(artnr, versionen)
# uns interessieren nur artikel, die HEUTE bestand haben
versionen = sorted(filter_mit_bestand(versionen))
for version in versionen:
if version not in freimengenspeicher:
freimengenspeicher[version] = get_freie_menge(version)
# ich glaube das geht eleganter
if freimengenspeicher[version] => menge:
# wir koennen koemplett aus dieser version versorgen
ret[version] += menge
freimengenspeicher[version] -= menge
menge = 0
break
# dass kann mn bestimmt mit den vorherigen Zeilen zusammen fassen
if freimengenspeicher[version] > 0 and freimengenspeicher[version] < menge:
# wir können nur einen Teil aus dieser Version versorgen
ret[version] += freimengenspeicher[version]
menge -= freimengenspeicher[version]
freimengenspeicher[version] = 0
if menge > 0:
# wir hatten nicht genug da!
erfuellbar = False
ret[artnr] += menge
return ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment