fix ramsch, finalise db format

This commit is contained in:
Balthasar Schachtner 2019-06-18 16:37:25 +02:00
parent b2f92e7d27
commit 1d5dcfeb93

View file

@ -11,6 +11,16 @@ AuditMixin will add automatic timestamp of created and modified by who
"""
def addExtras(result, nExtras, extrasTarif):
"""takes result array and adds/subtracts the extras and return modified results"""
newResult = []
for res in result:
if res > 0:
newResult.append(res+nExtras*extrasTarif)
else:
newResult.append(res-nExtras*extrasTarif)
return newResult
class Spieler(Model):
id = Column(Integer, primary_key=True)
name = Column(String())
@ -50,11 +60,9 @@ class Spiel(Model):
# Hat der Spielr gewonnen?
gewonnen = Column(Boolean, nullable=True)
# Wenn Ramsch gespielt wird
durchmarsch = Column(Boolean)
verlierer1 = Column(Boolean)
verlierer2 = Column(Boolean)
verlierer3 = Column(Boolean)
verlierer4 = Column(Boolean)
durchmarsch_gewinner = Column(Integer(), nullable=True)
verlierer = Column(Integer(), nullable=True)
jungfrau1 = Column(Boolean())
jungfrau2 = Column(Boolean())
jungfrau3 = Column(Boolean())
@ -63,6 +71,7 @@ class Spiel(Model):
# Bonus info
farbe = Column(String())
kommentar = Column(String())
def spielwert(self):
grundtarif = 20
@ -74,73 +83,59 @@ class Spiel(Model):
if self.spieltyp == "Sauspiel":
spieler = set([self.spieler-1,self.mitspieler-1])
nichtspieler = list(set([0,1,2,3])-spieler)
sauspiel_total = grundtarif + self.schneider*extras+ self.laufende*extras
if self.gewonnen:
result[self.spieler-1] = grundtarif
result[self.mitspieler-1] = grundtarif
result[nichtspieler[0]] = -grundtarif
result[nichtspieler[1]] = -grundtarif
result[self.spieler-1] = sauspiel_total
result[self.mitspieler-1] = sauspiel_total
result[nichtspieler[0]] = -sauspiel_total
result[nichtspieler[1]] = -sauspiel_total
else:
result[self.spieler-1] = -grundtarif
result[self.mitspieler-1] = -grundtarif
result[nichtspieler[0]] = grundtarif
result[nichtspieler[1]] = grundtarif
result[self.spieler-1] = -sauspiel_total
result[self.mitspieler-1] = -sauspiel_total
result[nichtspieler[0]] = sauspiel_total
result[nichtspieler[1]] = sauspiel_total
addExtras(result, self.schneider, extras)
addExtras(result, self.laufende, extras)
elif self.spieltyp == "Wenz" or self.spieltyp == "Solo":
spieler = set([self.spieler-1])
nichtspieler = list(set([0,1,2,3])-spieler)
solo_total = solo + self.schneider*extras+ self.laufende*extras
if self.gewonnen:
result[self.spieler-1] = 3*solo
result[nichtspieler[0]] = -solo
result[nichtspieler[1]] = -solo
result[nichtspieler[2]] = -solo
result[self.spieler-1] = 3*solo_total
result[nichtspieler[0]] = -solo_total
result[nichtspieler[1]] = -solo_total
result[nichtspieler[2]] = -solo_total
else:
result[self.spieler-1] = -3*solo
result[nichtspieler[0]] = solo
result[nichtspieler[1]] = solo
result[nichtspieler[2]] = solo
result[self.spieler-1] = -3*solo_total
result[nichtspieler[0]] = solo_total
result[nichtspieler[1]] = solo_total
result[nichtspieler[2]] = solo_total
elif self.spieltyp == "Ramsch":
if self.durchmarsch:
if self.verlierer1:
result[0] = -solo
else:
result[0] = 3*solo
if self.verlierer2:
result[1] = -solo
else:
result[1] = 3*solo
if self.verlierer3:
result[2] = -solo
else:
result[2] = 3*solo
if self.verlierer4:
result[3] = -solo
else:
result[3] = 3*solo
else:
nGewinner = 0
if not self.verlierer1:
result[0] = grundtarif * (self.jungfrau1 + 1)
nGewinner += 1 + self.jungfrau1
if not self.verlierer2:
result[1] = grundtarif * (self.jungfrau2 + 1)
nGewinner += 1 + self.jungfrau2
if not self.verlierer3:
result[2] = grundtarif * (self.jungfrau3 + 1)
nGewinner += 1 + self.jungfrau3
if not self.verlierer4:
result[3] = grundtarif * (self.jungfrau4 + 1)
nGewinner += 1 + self.jungfrau4
if self.durchmarsch_gewinner:
gewinner = set([self.durchmarsch_gewinner-1])
nichtGewinner= list(set([0,1,2,3])-gewinner)
if self.verlierer1:
result[0] = -nGewinner*grundtarif
if self.verlierer2:
result[1] = -nGewinner*grundtarif
if self.verlierer3:
result[2] = -nGewinner*grundtarif
if self.verlierer4:
result[3] = -nGewinner*grundtarif
result[self.durchmarsch_gewinner-1] = 3*solo
result[nichtGewinner[0]] = -solo
result[nichtGewinner[1]] = -solo
result[nichtGewinner[2]] = -solo
else:
verlierer = set([self.verlierer-1])
nichtVerlierer = list(set([0,1,2,3])-verlierer)
sum_verloren = 0
result[nichtVerlierer[0]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[0]+1))
result[nichtVerlierer[1]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[1]+1))
result[nichtVerlierer[2]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[2]+1))
result[self.verlierer-1] = - result[nichtVerlierer[0]] - result[nichtVerlierer[1]] -result[nichtVerlierer[2]]
result = [i * (self.schneider * extras+grundtarif) /grundtarif for i in result]
if self.leger1 or self.leger2 or self.leger3 or self.leger4:
result = [2*i for i in result]