Last active
December 7, 2016 12:53
-
-
Save mdornseif/cb5c43a12be37de8132b9b28e1890e5b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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