intermediate commit
This commit is contained in:
parent
d91b120bd0
commit
74a22c2721
4 changed files with 24 additions and 83 deletions
292
app/abrechnung.py
Normal file
292
app/abrechnung.py
Normal file
|
|
@ -0,0 +1,292 @@
|
|||
#
|
||||
# Abrechnung v0.4
|
||||
#
|
||||
|
||||
import logging
|
||||
import sys
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
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
|
||||
|
||||
def spielwert(**kwargs):
|
||||
#print(kwargs)
|
||||
grundtarif = 20
|
||||
vergebetarif = grundtarif
|
||||
extras = 10
|
||||
solo = 50
|
||||
|
||||
result = [0,0,0,0]
|
||||
|
||||
if not kwargs["endzeit"]:
|
||||
return {
|
||||
kwargs["spieler0"]: result[0],
|
||||
kwargs["spieler1"]: result[1],
|
||||
kwargs["spieler2"]: result[2],
|
||||
kwargs["spieler3"]: result[3],
|
||||
}
|
||||
|
||||
if "manual_res0" in kwargs:
|
||||
return {
|
||||
kwargs["spieler0"]: kwargs["manual_res0"],
|
||||
kwargs["spieler1"]: kwargs["manual_res1"],
|
||||
kwargs["spieler2"]: kwargs["manual_res2"],
|
||||
kwargs["spieler3"]: kwargs["manual_res3"],
|
||||
}
|
||||
|
||||
if kwargs["vergeben"]:
|
||||
if kwargs["leger0"]:
|
||||
result[0] = vergebetarif
|
||||
if kwargs["leger1"]:
|
||||
result[1] = vergebetarif
|
||||
if kwargs["leger2"]:
|
||||
result[2] = vergebetarif
|
||||
if kwargs["leger3"]:
|
||||
result[3] = vergebetarif
|
||||
sum_vergeben = sum(result)
|
||||
if kwargs["spieler0"] == kwargs["geber"]:
|
||||
result[0] -= sum_vergeben
|
||||
elif kwargs["spieler1"] == kwargs["geber"]:
|
||||
result[1] -= sum_vergeben
|
||||
elif kwargs["spieler2"] == kwargs["geber"]:
|
||||
result[2] -= sum_vergeben
|
||||
elif kwargs["spieler3"] == kwargs["geber"]:
|
||||
result[3] -= sum_vergeben
|
||||
else:
|
||||
return {
|
||||
kwargs["spieler0"]: result[0],
|
||||
kwargs["spieler1"]: result[1],
|
||||
kwargs["spieler2"]: result[2],
|
||||
kwargs["spieler3"]: result[3],
|
||||
kwargs["geber"]: -sum_vergeben,
|
||||
}
|
||||
return {
|
||||
kwargs["spieler0"]: result[0],
|
||||
kwargs["spieler1"]: result[1],
|
||||
kwargs["spieler2"]: result[2],
|
||||
kwargs["spieler3"]: result[3],
|
||||
}
|
||||
|
||||
|
||||
if kwargs["spieltyp"] == "Sauspiel":
|
||||
spieler = set([kwargs["spieler"],kwargs["mitspieler"]])
|
||||
nichtspieler = list(set([0,1,2,3])-spieler)
|
||||
sauspiel_total = grundtarif + kwargs["schneider"]*extras+ kwargs["laufende"]*extras
|
||||
|
||||
if kwargs["gewonnen"]:
|
||||
result[kwargs["spieler"]] = sauspiel_total
|
||||
result[kwargs["mitspieler"]] = sauspiel_total
|
||||
result[nichtspieler[0]] = -sauspiel_total
|
||||
result[nichtspieler[1]] = -sauspiel_total
|
||||
else:
|
||||
result[kwargs["spieler"]] = -sauspiel_total
|
||||
result[kwargs["mitspieler"]] = -sauspiel_total
|
||||
result[nichtspieler[0]] = sauspiel_total
|
||||
result[nichtspieler[1]] = sauspiel_total
|
||||
|
||||
addExtras(result, kwargs["schneider"], extras)
|
||||
addExtras(result, kwargs["laufende"], extras)
|
||||
|
||||
elif kwargs["spieltyp"] == "Wenz" or kwargs["spieltyp"] == "Solo":
|
||||
spieler = set([kwargs["spieler"]])
|
||||
nichtspieler = list(set([0,1,2,3])-spieler)
|
||||
solo_total = solo + kwargs["schneider"]*extras+ kwargs["laufende"]*extras
|
||||
if kwargs["gewonnen"]:
|
||||
result[kwargs["spieler"]] = 3*solo_total
|
||||
result[nichtspieler[0]] = -solo_total
|
||||
result[nichtspieler[1]] = -solo_total
|
||||
result[nichtspieler[2]] = -solo_total
|
||||
else:
|
||||
result[kwargs["spieler"]] = -3*solo_total
|
||||
result[nichtspieler[0]] = solo_total
|
||||
result[nichtspieler[1]] = solo_total
|
||||
result[nichtspieler[2]] = solo_total
|
||||
|
||||
elif kwargs["spieltyp"] == "Ramsch":
|
||||
|
||||
if kwargs["durchmarsch_gewinner"] is not None:
|
||||
gewinner = set([kwargs["durchmarsch_gewinner"]])
|
||||
nichtGewinner= list(set([0,1,2,3])-gewinner)
|
||||
|
||||
result[kwargs["durchmarsch_gewinner"]] = 3*solo
|
||||
result[nichtGewinner[0]] = -solo
|
||||
result[nichtGewinner[1]] = -solo
|
||||
result[nichtGewinner[2]] = -solo
|
||||
|
||||
else:
|
||||
verlierer = set([kwargs["verlierer"]])
|
||||
nichtVerlierer = list(set([0,1,2,3])-verlierer)
|
||||
|
||||
sum_verloren = 0
|
||||
# result[nichtVerlierer[0]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[0]}"]
|
||||
# result[nichtVerlierer[1]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[1]}"]
|
||||
# result[nichtVerlierer[2]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[2]}"]
|
||||
|
||||
nJungfrau = kwargs["jungfrau0"] + kwargs["jungfrau1"] + kwargs["jungfrau2"] + kwargs["jungfrau3"]
|
||||
result[nichtVerlierer[0]] = grundtarif * 2**nJungfrau
|
||||
result[nichtVerlierer[1]] = grundtarif * 2**nJungfrau
|
||||
result[nichtVerlierer[2]] = grundtarif * 2**nJungfrau
|
||||
|
||||
result[kwargs["verlierer"]] = - result[nichtVerlierer[0]] - result[nichtVerlierer[1]] - result[nichtVerlierer[2]]
|
||||
|
||||
|
||||
nLeger = 0
|
||||
if kwargs["leger0"]:
|
||||
nLeger += 1
|
||||
if kwargs["leger1"]:
|
||||
nLeger += 1
|
||||
if kwargs["leger2"]:
|
||||
nLeger += 1
|
||||
if kwargs["leger3"]:
|
||||
nLeger += 1
|
||||
result = [2**nLeger*i for i in result]
|
||||
|
||||
nKontra = kwargs["kontra0"] + kwargs["kontra1"] + kwargs["kontra2"] + kwargs["kontra3"]
|
||||
result = [2**nKontra*i for i in result]
|
||||
if kwargs["tout"]:
|
||||
result = [2*i for i in result]
|
||||
if kwargs["sie"]:
|
||||
result = [4*i for i in result]
|
||||
|
||||
# if kwargs["verspielt"] is not None:
|
||||
# print kwargs["verspielt"], result
|
||||
# if kwargs["verspielt"] < 0:
|
||||
|
||||
|
||||
return {
|
||||
kwargs["spieler0"]: result[0],
|
||||
kwargs["spieler1"]: result[1],
|
||||
kwargs["spieler2"]: result[2],
|
||||
kwargs["spieler3"]: result[3],
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
g1 = {
|
||||
"spieler0": "Michi",
|
||||
"spieler1": "Moritz",
|
||||
"spieler2": "Philipp",
|
||||
"spieler3": "Andi",
|
||||
"geber": "Balthasar",
|
||||
"spieltyp": "Sauspiel",
|
||||
"leger0": False,
|
||||
"leger1": False,
|
||||
"leger2": False,
|
||||
"leger3": False,
|
||||
"spieler": 0,
|
||||
"mitspieler": 1,
|
||||
"kontra0": 0,
|
||||
"kontra1": 0,
|
||||
"kontra2": 0,
|
||||
"kontra3": 0,
|
||||
"tout": False,
|
||||
"sie": False,
|
||||
"schneider": 0,
|
||||
"laufende": 3,
|
||||
"gewonnen": True,
|
||||
"durchmarsch_gewinner": None,
|
||||
"verlierer": None,
|
||||
"jungfrau0": False,
|
||||
"jungfrau1": False,
|
||||
"jungfrau2": False,
|
||||
"jungfrau3": False,
|
||||
"vergeben": False,
|
||||
"verspielt": False,
|
||||
"farbe": "?",
|
||||
"startzeit": 1578346907,
|
||||
"endzeit": None,
|
||||
"kommentar": "?"}
|
||||
print(spielwert(**g1))
|
||||
g2 = {
|
||||
"spieler0": "Michi",
|
||||
"spieler1": "Moritz",
|
||||
"spieler2": "Philipp",
|
||||
"spieler3": "Andi",
|
||||
"geber": "Balthasar",
|
||||
"spieltyp": "Wenz",
|
||||
"leger0": False,
|
||||
"leger1": False,
|
||||
"leger2": False,
|
||||
"leger3": True,
|
||||
"spieler": 3,
|
||||
"mitspieler": None,
|
||||
"kontra0": 0,
|
||||
"kontra1": 0,
|
||||
"kontra2": 0,
|
||||
"kontra3": 0,
|
||||
"tout": False,
|
||||
"sie": False,
|
||||
"schneider": 1,
|
||||
"laufende": 2,
|
||||
"gewonnen": True,
|
||||
"durchmarsch_gewinner": None,
|
||||
"verlierer": None,
|
||||
"jungfrau0": False,
|
||||
"jungfrau1": False,
|
||||
"jungfrau2": False,
|
||||
"jungfrau3": False,
|
||||
"vergeben": False,
|
||||
"verspielt": False,
|
||||
"farbe": "?",
|
||||
"startzeit": 1578346907,
|
||||
"endzeit": None,
|
||||
"kommentar": "?"}
|
||||
print(spielwert(**g2))
|
||||
g3 = {
|
||||
"spieler0": "Michi",
|
||||
"spieler1": "Moritz",
|
||||
"spieler2": "Philipp",
|
||||
"spieler3": "Andi",
|
||||
"geber": "Balthasar",
|
||||
"spieltyp": "Ramsch",
|
||||
"leger0": False,
|
||||
"leger1": False,
|
||||
"leger2": False,
|
||||
"leger3": False,
|
||||
"spieler": 3,
|
||||
"mitspieler": None,
|
||||
"kontra0": 0,
|
||||
"kontra1": 0,
|
||||
"kontra2": 0,
|
||||
"kontra3": 0,
|
||||
"tout": False,
|
||||
"sie": False,
|
||||
"schneider": 1,
|
||||
"laufende": 2,
|
||||
"gewonnen": True,
|
||||
"durchmarsch_gewinner": None,
|
||||
"verlierer": 2,
|
||||
"jungfrau0": False,
|
||||
"jungfrau1": False,
|
||||
"jungfrau2": False,
|
||||
"jungfrau3": True,
|
||||
"vergeben": False,
|
||||
"verspielt": False,
|
||||
"farbe": "?",
|
||||
"startzeit": 1578346907,
|
||||
"endzeit": None,
|
||||
"kommentar": "?"}
|
||||
print(spielwert(**g3))
|
||||
import json
|
||||
g4 = json.loads("""{"spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "aktuelleSpieler": ["Michi", "Moritz", "Philipp", "Andi"], "spieltyp": "Ramsch", "leger0": false, "leger1": false, "leger2": false, "leger3": false, "spieler": -1, "mitspieler": null, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": false, "sie": false, "schneider": 0, "laufende": 0, "gewonnen": null, "durchmarsch_gewinner": null, "verlierer": 0, "jungfrau0": false, "jungfrau1": false, "jungfrau2": false, "jungfrau3": false, "vergeben": false, "verspielt": null, "farbe": "?", "startzeit": 1578351992, "endzeit": 1578351997, "kommentar": ""}""")
|
||||
print(spielwert(**g4))
|
||||
g4 = json.loads("""{"spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "aktuelleSpieler": ["Michi", "Moritz", "Philipp", "Andi"], "spieltyp": "Ramsch", "leger0": false, "leger1": false, "leger2": false, "leger3": false, "spieler": -1, "mitspieler": null, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": false, "sie": false, "schneider": 0, "laufende": 0, "gewonnen": null, "durchmarsch_gewinner": null, "verlierer": 0, "jungfrau0": true, "jungfrau1": true, "jungfrau2": false, "jungfrau3": false, "vergeben": false, "verspielt": null, "farbe": "?", "startzeit": 1578351992, "endzeit": 1578351997, "kommentar": ""}""")
|
||||
print(spielwert(**g4))
|
||||
|
||||
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
|
||||
args = parser.parse_args()
|
||||
|
||||
js = json.load(args.infile)
|
||||
print(spielwert(**js))
|
||||
|
|
@ -2,6 +2,8 @@ from flask_appbuilder import Model
|
|||
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from .abrechnung import spielwert
|
||||
|
||||
"""
|
||||
|
||||
You can use the extra Flask-AppBuilder fields and Mixin's
|
||||
|
|
@ -62,6 +64,7 @@ class Spiel(Model):
|
|||
|
||||
schneider = Column(Integer(), default=0)
|
||||
laufende = Column(Integer(), default=0)
|
||||
mit = Column(Boolean)
|
||||
|
||||
# Hat der Spieler gewonnen?
|
||||
gewonnen = Column(Boolean, nullable=True)
|
||||
|
|
@ -84,88 +87,16 @@ class Spiel(Model):
|
|||
endzeit = Column(Integer(), nullable=True)
|
||||
kommentar = Column(String())
|
||||
|
||||
# Meta
|
||||
device_ID = Column(String())
|
||||
version = Column(String())
|
||||
|
||||
def spielwert(self):
|
||||
grundtarif = 20
|
||||
extras = 10
|
||||
solo = 50
|
||||
|
||||
result = [0,0,0,0]
|
||||
|
||||
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] = sauspiel_total
|
||||
result[self.mitspieler-1] = sauspiel_total
|
||||
result[nichtspieler[0]] = -sauspiel_total
|
||||
result[nichtspieler[1]] = -sauspiel_total
|
||||
else:
|
||||
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_total
|
||||
result[nichtspieler[0]] = -solo_total
|
||||
result[nichtspieler[1]] = -solo_total
|
||||
result[nichtspieler[2]] = -solo_total
|
||||
else:
|
||||
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_gewinner:
|
||||
gewinner = set([self.durchmarsch_gewinner-1])
|
||||
nichtGewinner= list(set([0,1,2,3])-gewinner)
|
||||
|
||||
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]]
|
||||
|
||||
|
||||
if self.leger1 or self.leger2 or self.leger3 or self.leger4:
|
||||
result = [2*i for i in result]
|
||||
|
||||
result = [2**self.kontra*i for i in result]
|
||||
if self.tout:
|
||||
result = [2*i for i in result]
|
||||
if self.sie:
|
||||
result = [4*i for i in result]
|
||||
|
||||
return {
|
||||
self.spieler1: result[0],
|
||||
self.spieler2: result[1],
|
||||
self.spieler3: result[2],
|
||||
self.spieler4: result[3],
|
||||
}
|
||||
return spielwert(**self.__dict__)
|
||||
|
||||
def check(self):
|
||||
if sum(self.spielwert().values())==0:
|
||||
return u"\U0001F44D"
|
||||
else:
|
||||
return u"\U0001F44E"
|
||||
return u"\U0001F44E"
|
||||
|
|
|
|||
16
app/views.py
16
app/views.py
|
|
@ -38,7 +38,15 @@ from . import appbuilder, db
|
|||
"""
|
||||
Application wide 404 error handler
|
||||
"""
|
||||
class SpielModelApi(ModelRestApi):
|
||||
resource_name = 'spiel'
|
||||
datamodel = SQLAInterface(Spiel)
|
||||
appbuilder.add_api(SpielModelApi)
|
||||
|
||||
class SpielerModelApi(ModelRestApi):
|
||||
resource_name = 'spieler'
|
||||
datamodel = SQLAInterface(Spieler)
|
||||
appbuilder.add_api(SpielerModelApi)
|
||||
|
||||
@appbuilder.app.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
|
|
@ -72,17 +80,17 @@ class MySpielView(ModelView):
|
|||
# }
|
||||
# add_columns = ['spieler1','spieler2','spieler3','spieler4']
|
||||
|
||||
list_columns = ('spieler1','spieler2','spieler3','spieler4', "spielwert", "check")
|
||||
list_columns = ('spieler0','spieler1','spieler2','spieler3', "spielwert", "check")
|
||||
# column_list = (Spiel.spieler1, Spiel.spieler2, Spiel.spieler3, Spiel.spieler4)
|
||||
|
||||
show_fieldsets = [
|
||||
(
|
||||
'Spieler',
|
||||
{'fields':['spieler1','spieler2','spieler3','spieler4']}
|
||||
{'fields':['spieler0','spieler1','spieler2','spieler3']}
|
||||
),
|
||||
(
|
||||
'Leger',
|
||||
{'fields':['leger1','leger2','leger3','leger4'],
|
||||
{'fields':['leger0','leger1','leger2','leger3'],
|
||||
'expanded':False}
|
||||
),
|
||||
(
|
||||
|
|
@ -114,3 +122,5 @@ appbuilder.add_view(
|
|||
category="Schafkopf",
|
||||
category_icon='fa-envelope'
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue