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): class Spieler(Model):
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
name = Column(String()) name = Column(String())
@ -50,11 +60,9 @@ class Spiel(Model):
# Hat der Spielr gewonnen? # Hat der Spielr gewonnen?
gewonnen = Column(Boolean, nullable=True) gewonnen = Column(Boolean, nullable=True)
# Wenn Ramsch gespielt wird # Wenn Ramsch gespielt wird
durchmarsch = Column(Boolean) durchmarsch_gewinner = Column(Integer(), nullable=True)
verlierer1 = Column(Boolean) verlierer = Column(Integer(), nullable=True)
verlierer2 = Column(Boolean)
verlierer3 = Column(Boolean)
verlierer4 = Column(Boolean)
jungfrau1 = Column(Boolean()) jungfrau1 = Column(Boolean())
jungfrau2 = Column(Boolean()) jungfrau2 = Column(Boolean())
jungfrau3 = Column(Boolean()) jungfrau3 = Column(Boolean())
@ -63,6 +71,7 @@ class Spiel(Model):
# Bonus info # Bonus info
farbe = Column(String()) farbe = Column(String())
kommentar = Column(String())
def spielwert(self): def spielwert(self):
grundtarif = 20 grundtarif = 20
@ -74,73 +83,59 @@ class Spiel(Model):
if self.spieltyp == "Sauspiel": if self.spieltyp == "Sauspiel":
spieler = set([self.spieler-1,self.mitspieler-1]) spieler = set([self.spieler-1,self.mitspieler-1])
nichtspieler = list(set([0,1,2,3])-spieler) nichtspieler = list(set([0,1,2,3])-spieler)
sauspiel_total = grundtarif + self.schneider*extras+ self.laufende*extras
if self.gewonnen: if self.gewonnen:
result[self.spieler-1] = grundtarif result[self.spieler-1] = sauspiel_total
result[self.mitspieler-1] = grundtarif result[self.mitspieler-1] = sauspiel_total
result[nichtspieler[0]] = -grundtarif result[nichtspieler[0]] = -sauspiel_total
result[nichtspieler[1]] = -grundtarif result[nichtspieler[1]] = -sauspiel_total
else: else:
result[self.spieler-1] = -grundtarif result[self.spieler-1] = -sauspiel_total
result[self.mitspieler-1] = -grundtarif result[self.mitspieler-1] = -sauspiel_total
result[nichtspieler[0]] = grundtarif result[nichtspieler[0]] = sauspiel_total
result[nichtspieler[1]] = grundtarif result[nichtspieler[1]] = sauspiel_total
addExtras(result, self.schneider, extras)
addExtras(result, self.laufende, extras)
elif self.spieltyp == "Wenz" or self.spieltyp == "Solo": elif self.spieltyp == "Wenz" or self.spieltyp == "Solo":
spieler = set([self.spieler-1]) spieler = set([self.spieler-1])
nichtspieler = list(set([0,1,2,3])-spieler) nichtspieler = list(set([0,1,2,3])-spieler)
solo_total = solo + self.schneider*extras+ self.laufende*extras
if self.gewonnen: if self.gewonnen:
result[self.spieler-1] = 3*solo result[self.spieler-1] = 3*solo_total
result[nichtspieler[0]] = -solo result[nichtspieler[0]] = -solo_total
result[nichtspieler[1]] = -solo result[nichtspieler[1]] = -solo_total
result[nichtspieler[2]] = -solo result[nichtspieler[2]] = -solo_total
else: else:
result[self.spieler-1] = -3*solo result[self.spieler-1] = -3*solo_total
result[nichtspieler[0]] = solo result[nichtspieler[0]] = solo_total
result[nichtspieler[1]] = solo result[nichtspieler[1]] = solo_total
result[nichtspieler[2]] = solo result[nichtspieler[2]] = solo_total
elif self.spieltyp == "Ramsch": elif self.spieltyp == "Ramsch":
if self.durchmarsch: if self.durchmarsch_gewinner:
if self.verlierer1: gewinner = set([self.durchmarsch_gewinner-1])
result[0] = -solo nichtGewinner= list(set([0,1,2,3])-gewinner)
else:
result[0] = 3*solo result[self.durchmarsch_gewinner-1] = 3*solo
if self.verlierer2: result[nichtGewinner[0]] = -solo
result[1] = -solo result[nichtGewinner[1]] = -solo
else: result[nichtGewinner[2]] = -solo
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: else:
nGewinner = 0 verlierer = set([self.verlierer-1])
if not self.verlierer1: nichtVerlierer = list(set([0,1,2,3])-verlierer)
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.verlierer1: sum_verloren = 0
result[0] = -nGewinner*grundtarif result[nichtVerlierer[0]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[0]+1))
if self.verlierer2: result[nichtVerlierer[1]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[1]+1))
result[1] = -nGewinner*grundtarif result[nichtVerlierer[2]] = grundtarif + grundtarif* getattr(self, "jungfrau{}".format(nichtVerlierer[2]+1))
if self.verlierer3:
result[2] = -nGewinner*grundtarif result[self.verlierer-1] = - result[nichtVerlierer[0]] - result[nichtVerlierer[1]] -result[nichtVerlierer[2]]
if self.verlierer4:
result[3] = -nGewinner*grundtarif
result = [i * (self.schneider * extras+grundtarif) /grundtarif for i in result]
if self.leger1 or self.leger2 or self.leger3 or self.leger4: if self.leger1 or self.leger2 or self.leger3 or self.leger4:
result = [2*i for i in result] result = [2*i for i in result]