from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey, Boolean from sqlalchemy.orm import relationship """ You can use the extra Flask-AppBuilder fields and Mixin's 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()) def __repr__(self): return self.name class Spiel(Model): id = Column(Integer, primary_key=True) spieler0_id = Column(Integer, ForeignKey('spieler.id')) spieler0 = relationship('Spieler', foreign_keys=[spieler0_id]) spieler1_id = Column(Integer, ForeignKey('spieler.id')) spieler1 = relationship('Spieler', foreign_keys=[spieler1_id]) spieler2_id = Column(Integer, ForeignKey('spieler.id')) spieler2 = relationship('Spieler', foreign_keys=[spieler2_id]) spieler3_id = Column(Integer, ForeignKey('spieler.id')) spieler3 = relationship('Spieler', foreign_keys=[spieler3_id]) geber_id = Column(Integer, ForeignKey('spieler.id')) geber = relationship('Spieler', foreign_keys=[geber_id]) spieltyp = Column(String()) leger0 = Column(Boolean) leger1 = Column(Boolean) leger2 = Column(Boolean) leger3 = Column(Boolean) spieler = Column(Integer(), nullable=True) mitspieler = Column(Integer(), nullable=True) kontra0 = Column(Integer(), default=0) kontra1 = Column(Integer(), default=0) kontra2 = Column(Integer(), default=0) kontra3 = Column(Integer(), default=0) tout = Column(Boolean, default=False) sie = Column(Boolean, default=False) schneider = Column(Integer(), default=0) laufende = Column(Integer(), default=0) # Hat der Spieler gewonnen? gewonnen = Column(Boolean, nullable=True) # Wenn Ramsch gespielt wird durchmarsch_gewinner = Column(Integer(), nullable=True) verlierer = Column(Integer(), nullable=True) jungfrau0 = Column(Boolean()) jungfrau1 = Column(Boolean()) jungfrau2 = Column(Boolean()) jungfrau3 = Column(Boolean()) # sonstiges vergeben = Column(Boolean()) verspielt = Column(Integer(), nullable=True) # Bonus info farbe = Column(String()) startzeit = Column(Integer(), nullable=True) endzeit = Column(Integer(), nullable=True) kommentar = 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], } def check(self): if sum(self.spielwert().values())==0: return u"\U0001F44D" else: return u"\U0001F44E"