from django.forms import CheckboxSelectMultiple from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) from otree_tools.models.fields import ListField, OtherModelField, MultipleChoiceModelField author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'Online_Block_3' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): def scale15(q1): return models.IntegerField( widget=widgets.RadioSelectHorizontal, min=1, max=5, label=q1, choices=[ [1, ''], [2, ''], [3, ''], [4, ''], [5, ''] ] ) def scale010(q1): return models.IntegerField( widget=widgets.RadioSelectHorizontal, min=0, max=10, label=q1, choices=[ [0, ''], [1, ''], [2, ''], [3, ''], [4, ''], [5, ''], [6, ''], [7, ''], [8, ''], [9, ''], [10, ''] ] ) Household = models.IntegerField(label='Wie viele Personen (inklusive Ihnen) wohnen in Ihrem Haushalt?', choices = [ [0, '1 Person'], [1, '2 Personen'], [2, '3 Personen'], [3, '4 Personen'], [4, '5 Personen'], [3, '6 Personen oder mehr'] ]) Invididual = models.IntegerField() def household_vs_individual(self): if self.Household == 0: self.household_vs_individual = 0 else: self.household_vs_individual = 1 ############# Einkommen & Sparen ############## income_1 = MultipleChoiceModelField(label='Bitte kreuzen Sie an, welche der genannten Optionen in den letzten 12 Monaten zu Ihrem Einkommen beigetragen haben. (Mehrfachnennung möglich)', choices = [ [1, 'Unselbständige Arbeit'], [2, 'Selbständige Arbeit'], [3, 'Immobilien'], [4, 'Erträge aus Finanzanlagen'], [6, 'Stipendien'], [7, 'Rente'], [8, 'Invaliden-Versicherung'], [9, 'Sonstige Unterstützung'] ]) income_2 = models.IntegerField(label= 'Wie hoch ist Ihr gesamtes jährliches Einkommen?', choices = [ [1, '<20`000 CHF'], [2, '20`001 - 30`000 CHF'], [3, '30`001 - 40`000'], [4, '40`001 - 50`000'], [5, '50`001 - 60`000'], [6, '60`001 - 70`000'], [7, '70`001 - 80`000'], [8, '80`001 - 90`000'], [9, '90`001 - 100`000'], [10, '100´001 - 120´000'], [11, '120´001 - 150´000'], [12, '150´001 - 200´000'], [13, 'über 200´000'] ]) ease = scale15('') happy_ease = scale15('') money_aside = models.IntegerField(label='label', choices = [ [0, 'kein Geld angespart'], [1, 'weniger als 5`000 CHF'], [2, '5`001 - 10`000 CHF'], [3, '10`001 - 15`000 CHF'], [4, '15`001 - 20`000 CHF'], [5, '20`001 - 50`000 CHF'], [6, 'über 50`000 CHF'], [7, 'weiss nicht'], ]) save_purpose = MultipleChoiceModelField(label='Wofür sparen Sie Geld? Mehrfachnennung möglich', choices = [ 'Ausgaben aufgrund unvorhersehbarer Ereignisse', 'Altersvorsorge', 'Ferien', 'Grössere Anschaffungen (Auto, Möbel etc.)', 'Ausbildung/ Unterstützung von Kindern oder Enkeln', 'Damit meine Kinder/ Enkel mehr erben', 'Rückzahlung von Schulden (ausser Hypothek)', 'Kauf eines Hauses/ Abzahlung Hypothek' ]) cannot_save = MultipleChoiceModelField(label='Wieso konnten Sie kein Geld ansparen? Mehrfachnennung möglich', choices = [ 'Ich hatte kein Geld übrig am Ende des Jahres', 'Ich bin aktuell nicht erwerbstätig', 'Ich denke, dass für die Rente Säule 1 & 2 genug sind', 'Ich habe mein Geld bereits ausgegeben', 'Ich denke nicht, dass ich aktuell sparen sollte', 'Ich habe andere Prioritäten als zu sparen' ]) ########### Vermögen ########## asset_1 = models.IntegerField(label='Wie gross ist das Vermögen in Ihrem Haushalt (inklusive Immobilien, Aktien etc.), abzüglich sämtlicher Schulden? (Dies entspricht ungefähr Ihrem steuerbaren Vermögen) ', choices=[ [1, '0-50`000 CHF'], [2, '50`001 - 100`000 CHF'], [3, '100`001 - 200`000 CHF'], [4, '200`001 - 500`000 CHF'], [5, '500`001 - 1`000`000 CHF'], [6, '>1`000`0000 CHF'], [0, 'Weiss nicht'] ]) asset_2 = MultipleChoiceModelField(label='Bitte kreuzen Sie sämtliche Vermögenswerte an, welche Sie in den letzten 12 Monaten bessesen haben (Mehrfachnennung möglich)', choices=[ [1, 'Bankkonto'], [2, 'Aktien'], [3, 'Anleihen'], [4, 'Derivate/ Strukturierte Produkte'], [5, 'Investmentfonds'], [6, 'Immobilien'], [7, 'Kunst/ Antike Gegenstände'], [8, 'Versicherungen'] ]) asset_bank = models.IntegerField(label='Bankkonto', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_shares = models.IntegerField(label='Aktien', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_bonds = models.IntegerField(label='Anleihen', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_derivative = models.IntegerField(label='Derivate/ Strukturierte Produkte', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_fund = models.IntegerField(label='Investmentfonds', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_realestate = models.IntegerField(label='Immobilien', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_art = models.IntegerField(label='Kunst/ Antike Gegenstände', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) asset_insurance = models.IntegerField(label='Versicherungen', widget=widgets.Slider (attrs={'step': '5'}), initial=0, min=0, max=100) own_house = models.IntegerField(label='Ist eine der Personen in Ihrem Haushalt der/ die BesitzerIn des Hauses/ der Wohnung in der Sie leben?', widget=widgets.RadioSelect, choices=[ [0, 'Nein'], [1, 'Ja'] ]) risk_capacity = models.IntegerField(label='Wie viel Prozent Ihres Vermögens könnten Sie verlieren, ohne dass Sie deswegen Ihren Lebensstil ändern müssten?', choices = [10,20,30,40,50,60,70,80,90], initial=0, widget=widgets.Slider (attrs={'step': '10'})) status = MultipleChoiceModelField(label='label', choices=[ [1, 'Leasing für ein Fahrzeug'], [2, 'Hypothek für Hauptwohnsitz'], [3, 'Hypothek für Zweitwohnsitz'], [4, 'Eine oder mehrere kleine Kredite (inbegriffen Verbraucherkredite von Kundenkarten)'], [5, 'Einen Kauf getätigt, der in Raten abbezahlt wird'], [6, 'Schulden gegenüber Familie oder Freunden'], [7, 'Überzogenes Bankkonto'], [8, 'Studiendarlehen'], [9, 'Verzugshandlungen'], [10, 'Keiner der oben genannten Punkte'] ]) credit_card = models.IntegerField(label='Besitzen Sie persönlich eine Kreditkarte oder Kundenkarte mit Kreditoption (bspw. Manor-Karte)', choices=[ [0, 'Ja, eine'], [1, 'Ja, zwei'], [2, 'Ja, drei oder mehrere'], [3, 'Nein'] ]) personal_debt = models.IntegerField(label='Wie hoch sind Ihre gesamten persönlichen Schulden in CHF (inklusive jener ohne Zinsen), unter nichtbeachtung einer Hypothek',) insurance = MultipleChoiceModelField(label='label', choices=[ 'Haushaltsversicherung', 'Autoversicherung', 'Motorradversicherung', 'Bootversicherung', 'Fahrradversicherung', 'Rechtsschutz', 'Persönliche Haftung', 'Reiseversicherung', 'Gesundheitsversicherung - standard (obligatorisch)', 'Gesundheitsversicherung - Zusätze', 'Mietgarantieversicherung', 'Kreditkartenversicherung', 'Lebensversicherung', 'Versicherung für Wertgegenstände', 'Gebäudeversicherung' ]) ############ Motivation Sparen & Investition ################ imp_afford = scale15('') imp_company = scale15('') imp_selffulfilling = scale15('') imp_job_success = scale15('') imp_owning_house = scale15('') imp_relationship = scale15('') imp_children = scale15('') imp_engagement = scale15('') imp_travel = scale15('') ############ Finanzentscheidungen ############### fin_involvement = scale010('') fin_involvement_2 = scale010('') fin_advice = MultipleChoiceModelField(label='Welche Personen ziehen Sie zu Rate, wenn Sie wichtige finanzielle Entscheidungen treffen? Welche Informationsquellen nutzen Sie?', choices= [ [1, 'Eltern, Freunde, Bekannte'], [2, 'Zeitungen'], [3, 'Finanzmagazine/ -Bücher'], [4, 'Bank-Broschüren'], [5, 'Werbung aus den Medien'], [6, 'Professionelle Finanzberater'], [7, 'Finanzielle Computerprogramme'], [8, 'Informationen aus dem Internet'], [0, 'Andere'], ]) fin_check_news = models.IntegerField(label='Wie oft informieren Sie sich über finanzielle Nachrichten?', choices=[ [1, 'Täglich'], [1, 'Mindestens ein Mal pro Woche'], [1, 'Mindestens ein Mal pro Monat'], [1, 'Ungefähr 4-6 Mal im Jahr'], [1, 'Ein Mal pro Jahr'], [1, 'Nie'], ]) fin_check_acc = models.IntegerField(label='Wie oft kontrollieren Sie Ihren Kontostand?', choices=[ [1, 'Täglich'], [1, 'Mindestens ein Mal pro Woche'], [1, 'Mindestens ein Mal pro Monat'], [1, 'Ungefähr 4-6 Mal im Jahr'], [1, 'Ein Mal pro Jahr'], [1, 'Nie'], ]) fin_check_portfolio = models.IntegerField(label='Wie oft kontrollieren Sie Ihr Investitions-Portfolio?', choices=[ [1, 'Täglich'], [1, 'Mindestens ein Mal pro Woche'], [1, 'Mindestens ein Mal pro Monat'], [1, 'Ungefähr 4-6 Mal im Jahr'], [1, 'Ein Mal pro Jahr'], [1, 'Nie'], ]) fin_check_advice = models.IntegerField(label = 'Wie oft nehmen Sie finanzielle Ratschläge/ Beratung in Anspruch?', choices=[ [1, 'Täglich'], [1, 'Mindestens ein Mal pro Woche'], [1, 'Mindestens ein Mal pro Monat'], [1, 'Ungefähr 4-6 Mal im Jahr'], [1, 'Ein Mal pro Jahr'], [1, 'Nie'], ]) fin_talk = MultipleChoiceModelField(label='Mit wem sprechen Sie über Ihre Finanzen? (Mehrfachauswahl möglich)', choices = [ [1, 'Verwandte'], [2, 'Freunde, Kollegen, und/ oder Nachbarn'], [3, 'Professionelle Finanzberater'], [4, 'Mit niemandem'], [5, 'Mit anderen Personen als hier genannt'] ]) fin_advice_prof = models.IntegerField(label='Wie oft wenden Sie sich an professionelle Berater bezüglich Ihrer Finanzen?', choices=[ [1, 'Mindestens ein Mal pro Monat'], [2, 'Ungefähr 4 Mal pro Jahr'], [3, 'Etwa 1 Mal pro Jahr'], [3, 'Weniger als 1 Mal pro Jahr'], [4, 'Nie'] ]) fin_prof_dec = scale010('') investment_portfolio_1 = MultipleChoiceModelField(label='Wer hat Sie beim Aufbau Ihres Portfolios beraten? (Mehrfachnennung möglich)', choices=[ [1, 'Selbständig'], [2, 'Durch Ratschläge von Freunden'], [3, 'Durch Ratschläge aus der Familie'], [4, 'Durch Beratung von Versicherungsberatern'], [5, 'Durch Beratung von Bankberatern'], [6, 'Durch Beratung von unabähngigen Beratern'], [0, 'Andere'], ]) trade_stocks = models.IntegerField(label='Handeln Sie selbst mit Aktien?', widget=widgets.RadioSelect, choices=[ [0, 'Nein'], [1, 'Ja'] ]) investment_portfolio_2 = models.IntegerField(label='Wie oft kaufen oder verkaufen Sie Aktien?', choices= [ [1, 'Mindestens ein mal im Monat'], [2, 'Ungefähr 4-6 Mal im Jahr'], [3, 'Ein Mal pro Jahr'], [4, 'Ein Mal alle 1-5 Jahre'], [5, 'Weniger als ein Mal alle 5 Jahre'], [6, 'Nie'] ]) change_fin_dec = models.IntegerField(label='Wie oft ändern Sie Ihre finanziellen Investitionen?', widget=widgets.RadioSelect, choices=[ [0, 'Mehr als 1 Mal im Jahr'], [1, 'Alle 1-5 Jahre'], [2, 'Weniger als 1 Mal alle 5 Jahre'] ]) invest_reason = models.StringField(label='Bitte beschreiben Sie Ihre Investitionsstrategie in Ihren eigenen Worten:') household_knowledge = models.IntegerField(label='Wer in Ihrem Haushalt besitzt in Bezug auf Finanzen das meiste Wissen?', choices = [ [1, 'Ich'], [2, 'Mein/e Partner/In'], [3, 'Ich und mein/e Partner/In, gleichermassen'], [4, 'Jemand anderes'] ]) household_decisions = models.IntegerField(label='Wer in Ihrem Haushalt trifft die meisten finanziellen Entscheidungen?', choices = [ [1, 'Vor allem ich'], [2, 'Vor allem mein/e Partner/In'], [3, 'Ich und mein/e Partner/In, gleichermassen'], [4, 'Jemand anderes'] ]) ############## Risk-Benefit Anlageprodukte ################# knowledge_bank = scale010('') risk_bank = scale010('') benefit_bank = scale010('') invest_bank = scale010('') knowledge_stocks = scale010('') risk_stocks = scale010('') benefit_stocks = scale010('') invest_stocks = scale010('') knowledge_bonds = scale010('') risk_bonds = scale010('') benefit_bonds = scale010('') invest_bonds = scale010('') knowledge_fund = scale010('') risk_fund = scale010('') benefit_fund = scale010('') invest_fund = scale010('') knowledge_pillar3a = scale010('') risk_pillar3a = scale010('') benefit_pillar3a = scale010('') invest_pillar3a = scale010('') ############ Finanzentscheidungen ################ #todo skalencheck 0-10 invest_choices = scale15('') invest_fear = scale15('') save_money = scale15('') debt_unpleasant = scale15('') excitement_risk = scale15('') check_risks = scale15('') fin_expertise_trust = scale15('') urge_win = scale15('') stress_fin_risk = scale15('') speculation = scale15('') abilities_math = scale010('') abilities_fin = scale010('') abilities_pillar3a =scale010('') ######### Pillar 3a ################ pillar3a = models.IntegerField(label='Besitzen Sie ein Säule 3a Vorsorgekonto?', choices = [ [0, 'Weiss nicht'], [1, '3a Vorsorgedepot/ -fonds'], [2, '3a Vorsorgekonto'], [3, '3a Vorsorgedepot/ -fonds UND 3a Vorsorgekonto'], [4, 'Ich besitze kein Säule 3a Konto'] ]) pillar_3_num = models.IntegerField(label='Wie viele Vorsorge-Konten besitzen Sie?', choices=[ [0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, 'Mehr als 3'], ]) pillar_3_regsave = models.IntegerField(label='Wann Zahlen Sie in ihre Vorsorge der dritten Säule ein?', widget=widgets.RadioSelect, choices=[ [1, 'Regelmässig'], [2, 'Ein Mal pro Jahr'] ]) pillar3a_shares = models.IntegerField(label='Wie hoch ist der Aktienanteil in ihrem Vorsorgedepot/ -fonds in Prozent?', min = 0, max = 100, initial = 0, widget=widgets.Slider (attrs={'step': '5'})) pillar3a_deposit = models.IntegerField(label='Wie viel Geld in CHF haben Sie in Ihre 3a Konten/ Depots letztes Jahr einbezahlt?') retirement_country = models.IntegerField(label='Planen Sie, in der Schweiz in Rente zu gehen oder im Ausland?', choices=[ [0, 'weiss nicht'], [1, 'in der Schweiz'], [2, 'im Ausland'] ]) ################# Erwartungen #################### fin_ladder = scale010('') fin_sit_change = scale010('') fin_sit_improve = scale010('') fin_sit_deteriorate = scale010('') happiness = scale010('') salary_increase = scale010('') salary_decrease = scale010('') costs_health = models.IntegerField(label='Was denken Sie, wie sich die Kosten im Bereich Gesundheit für Sie nach der Rente im Vergleich zu vor der Rente ändern werden?', widget=widgets.RadioSelect, choices = [ [0, 'Tiefer'], [1, 'Gleich'], [2, 'Höher'] ]) costs_holiday = models.IntegerField(label='Was denken Sie, wie sich die Kosten im Bereich Ferien für Sie nach der Rente im Vergleich zu vor der Rente ändern werden?', widget=widgets.RadioSelect, choices = [ [0, 'Tiefer'], [1, 'Gleich'], [2, 'Höher'] ]) costs_hobbies = models.IntegerField(label='Was denken Sie, wie sich die Kosten im Bereich Hobbies für Sie nach der Rente im Vergleich zu vor der Rente ändern werden?', widget=widgets.RadioSelect, choices = [ [0, 'Tiefer'], [1, 'Gleich'], [2, 'Höher'] ]) lifestyle_change = models.IntegerField(label='Was denken Sie, wie sich Ihr Lebensstil nach der Rente ändern im Vergleich zu vor der Rente?', widget=widgets.RadioSelect, choices=[ [0, 'Schlichter'], [1, 'Etwa gleich'], [2, 'Luxuriöser'] ]) longevity_60 = models.IntegerField(label='Was ist Ihrer Meinung nach die Wahrscheinlichkeit in Prozent für Sie, mindestens 60 Jahre alt zu werden', min = 0, max = 100, initial = 0, widget=widgets.Slider (attrs={'step': '5'})) longevity_70 = models.IntegerField(label='Was ist Ihrer Meinung nach die Wahrscheinlichkeit in Prozent für Sie, mindestens 70 Jahre alt zu werden', min = 0, max = 100, initial = 0, widget=widgets.Slider (attrs={'step': '5'})) longevity_80 = models.IntegerField(label='Was ist Ihrer Meinung nach die Wahrscheinlichkeit in Prozent für Sie, mindestens 80 Jahre alt zu werden', min = 0, max = 100, initial = 0, widget=widgets.Slider (attrs={'step': '5'})) longevity_90 = models.IntegerField(label='Was ist Ihrer Meinung nach die Wahrscheinlichkeit in Prozent für Sie, mindestens 90 Jahre alt zu werden', min = 0, max = 100, initial = 0, widget=widgets.Slider (attrs={'step': '5'})) ############# Handelsstrategien ################# tradingstyle_safetyfirst = scale15('') tradingstyle_buyandhold = scale15('') tradingstyle_rebalancing = scale15('') tradingstyle_carry = scale15('') tradingstyle_momentum = scale15('') tradingstyle_value = scale15('') tradingstyle_growth = scale15('')