コード例 #1
0
ファイル: demo.py プロジェクト: lino-framework/book
def objects():

    #~ slot = Instantiator('courses.Slot','name start_time end_time').build
    #~
    #~ kw = dict(monday=True,tuesday=True,wednesday=False,thursday=True,friday=True)
    #~ yield slot("Erste Stunde","16:00","17:00",**kw)
    #~ yield slot("Zweite Stunde","17:00","18:00",**kw)
    #~ yield slot("Dritte Stunde","18:00","19:00",**kw)
    #~
    #~ kw = dict(wednesday=True)
    #~ yield slot("Mittwochs 13 Uhr","13:00","14:00",**kw)
    #~ yield slot("Mittwochs 14 Uhr","14:00","15:00",**kw)
    #~ yield slot("Mittwochs 15 Uhr","15:00","16:00",**kw)
    #~ yield slot("Mittwochs 16 Uhr","16:00","17:00",**kw)
    #~ yield slot("Mittwochs 17 Uhr","17:00","18:00",**kw)
    #~ yield slot("Mittwochs 18 Uhr","18:00","19:00",**kw)

    courses = dd.resolve_app('courses')

    yield courses.Line(**dd.babelkw('name',
                                 de=u"Deutsch Anfänger",
                                 fr=u"Allemand débutants",
                                 en=u"German beginners",
                                 ))
    yield courses.Line(**dd.babelkw('name',
                                 de=u"Französisch Anfänger",
                                 fr=u"Français débutants",
                                 en=u"French beginners",
                                 ))
コード例 #2
0
ファイル: demo.py プロジェクト: forexblog/book
def objects():

    #~ slot = Instantiator('courses.Slot','name start_time end_time').build
    #~
    #~ kw = dict(monday=True,tuesday=True,wednesday=False,thursday=True,friday=True)
    #~ yield slot("Erste Stunde","16:00","17:00",**kw)
    #~ yield slot("Zweite Stunde","17:00","18:00",**kw)
    #~ yield slot("Dritte Stunde","18:00","19:00",**kw)
    #~
    #~ kw = dict(wednesday=True)
    #~ yield slot("Mittwochs 13 Uhr","13:00","14:00",**kw)
    #~ yield slot("Mittwochs 14 Uhr","14:00","15:00",**kw)
    #~ yield slot("Mittwochs 15 Uhr","15:00","16:00",**kw)
    #~ yield slot("Mittwochs 16 Uhr","16:00","17:00",**kw)
    #~ yield slot("Mittwochs 17 Uhr","17:00","18:00",**kw)
    #~ yield slot("Mittwochs 18 Uhr","18:00","19:00",**kw)

    courses = dd.resolve_app('courses')

    yield courses.Line(**dd.babelkw(
        'name',
        de=u"Deutsch Anfänger",
        fr=u"Allemand débutants",
        en=u"German beginners",
    ))
    yield courses.Line(**dd.babelkw(
        'name',
        de=u"Französisch Anfänger",
        fr=u"Français débutants",
        en=u"French beginners",
    ))
コード例 #3
0
ファイル: sectors.py プロジェクト: khchine5/welfare
def objects():

    Sector = resolve_model('cbss.Sector')

    fn = join(dirname(__file__), 'lijst_van_sectoren_liste_des_secteurs.csv')
    reader = ucsv.UnicodeReader(
        open(fn, 'r'), encoding='latin1', delimiter=';')

    headers = reader.next()
    if headers != [u'Sector', u'', u'verkorte naam', u'Omschrijving', u'Abréviation', u'Nom']:
        raise Exception("Invalid file format: %r" % headers)
    reader.next()  # ignore second header line
    code = None
    for row in reader:
        s0 = row[0].strip()
        s1 = row[1].strip()
        if s0 or s1:
            kw = {}
            if len(s0) > 0:
                code = int(s0)
            kw.update(code=code)
            if row[1]:
                kw.update(subcode=int(row[1]))
            kw.update(
                **dd.babelkw(
                    'name', de=row[5], fr=row[5], nl=row[3], en=row[5]))
            kw.update(
                **dd.babelkw(
                    'abbr', de=row[4], fr=row[4], nl=row[2], en=row[4]))
            yield Sector(**kw)

    info = settings.SITE.get_language_info('de')
    if info:
        for code, subcode, abbr, name in GERMAN:
            sect = Sector.objects.get(code=code, subcode=subcode)
            if info.index == 0:
                sect.abbr = abbr
                sect.name = name
            else:
                sect.abbr_de = abbr
                sect.name_de = name
            sect.save()
コード例 #4
0
ファイル: std.py プロジェクト: khchine5/xl
def objects():
    from lino.api import rt
    CoachingEnding = rt.models.coachings.CoachingEnding

    yield CoachingEnding(**babelkw('name',
                                   de="Übergabe an Kollege",
                                   fr="Transfert vers collègue",
                                   en="Transfer to colleague",))
    yield CoachingEnding(**babelkw('name',
                                   de="Einstellung des Anrechts auf SH",
                                   fr="Arret du droit à l'aide sociale",
                                   en="End of right on social aid"))
    yield CoachingEnding(**babelkw('name',
                                   de="Umzug in andere Gemeinde",
                                   fr="Déménagement vers autre commune",
                                   en="Moved to another town"))
    yield CoachingEnding(**babelkw('name',
                                   de="Hat selber Arbeit gefunden",
                                   fr="A trouvé du travail",
                                   en="Found a job"))
コード例 #5
0
ファイル: std.py プロジェクト: zhuangyan/lino
 def holiday(month, day, en, de, fr, et=None):
     if et is None:
         et = en
     return add(
         every_unit=cal.Recurrencies.yearly,
         monday=True, tuesday=True, wednesday=True, thursday=True,
         friday=True, saturday=True, sunday=True,
         every=1,
         start_date=datetime.date(
             year=cal.DEMO_START_YEAR,
             month=month, day=day),
         **dd.babelkw('name', en=en, de=de, fr=fr, et=et))
コード例 #6
0
ファイル: std.py プロジェクト: forexblog/xl
 def holiday(month, day, en, de, fr, et=None):
     if et is None:
         et = en
     return add(
         every_unit=Recurrencies.yearly,
         monday=True, tuesday=True, wednesday=True, thursday=True,
         friday=True, saturday=True, sunday=True,
         every=1,
         start_date=datetime.date(
             year=cal.DEMO_START_YEAR,
             month=month, day=day),
         **dd.babelkw('name', en=en, de=de, fr=fr, et=et))
コード例 #7
0
ファイル: std.py プロジェクト: forexblog/xl
def objects():
    from lino.api import rt
    CoachingEnding = rt.models.coachings.CoachingEnding

    yield CoachingEnding(**babelkw(
        'name',
        de="Übergabe an Kollege",
        fr="Transfert vers collègue",
        en="Transfer to colleague",
    ))
    yield CoachingEnding(**babelkw('name',
                                   de="Einstellung des Anrechts auf SH",
                                   fr="Arret du droit à l'aide sociale",
                                   en="End of right on social aid"))
    yield CoachingEnding(**babelkw('name',
                                   de="Umzug in andere Gemeinde",
                                   fr="Déménagement vers autre commune",
                                   en="Moved to another town"))
    yield CoachingEnding(**babelkw('name',
                                   de="Hat selber Arbeit gefunden",
                                   fr="A trouvé du travail",
                                   en="Found a job"))
コード例 #8
0
ファイル: demo.py プロジェクト: khchine5/book
def objects():
    # three methods for specifying content of babelfields in fixtures:
    yield Foo(
        designation="First", designation_de="Erster", designation_fr="Premier",
        last_visit=dt(2016, 7, 2, 23, 55, 12))
    yield Foo(
        last_visit=dt(2016, 7, 3, 0, 10, 23),
        **dd.str2kw('designation', _("January")))
    yield Foo(
        # last_visit=dt(2016, 10, 30, 4, 34, 0),
        last_visit=dt(2017, 10, 29, 3, 16, 6),
        # last_visit=dt(2012, 10, 28, 4, 34, 0),
        **dd.babelkw('designation', en="Three", de="Drei",
                     fr="Trois", et="Kolm"))
コード例 #9
0
def objects():
    # three methods for specifying content of babelfields in fixtures:
    yield Foo(designation="First",
              designation_de="Erster",
              designation_fr="Premier",
              last_visit=dt(2016, 7, 2, 23, 55, 12))
    yield Foo(last_visit=dt(2016, 7, 3, 0, 10, 23),
              **dd.str2kw('designation', _("January")))
    yield Foo(
        # last_visit=dt(2016, 10, 30, 4, 34, 0),
        last_visit=dt(2017, 10, 29, 3, 16, 6),
        # last_visit=dt(2012, 10, 28, 4, 34, 0),
        **dd.babelkw('designation',
                     en="Three",
                     de="Drei",
                     fr="Trois",
                     et="Kolm"))
コード例 #10
0
ファイル: models.py プロジェクト: TonisPiip/xl
 def full_clean(self, *args, **kw):
     if self.line_id is not None:
         if self.id is None:
             descs = dd.field2kw(self.line, 'description')
             descs = dd.babelkw('description', **descs)
             for k, v in descs.items():
                 setattr(self, k, v)
         if self.every_unit is None:
             self.every_unit = self.line.every_unit
         if self.every is None:
             self.every = self.line.every
     # if self.enrolments_until is None:
     #     self.enrolments_until = self.start_date
     # if self.id is not None:
     #     if self.enrolments_until is None:
     #         qs = self.get_existing_auto_events()
     #         if qs.count():
     #             self.enrolments_until = qs[0].start_date
     super(Course, self).full_clean(*args, **kw)
コード例 #11
0
ファイル: models.py プロジェクト: khchine5/cosi
 def full_clean(self, *args, **kw):
     if self.line_id is not None:
         if self.id is None:
             descs = dd.field2kw(self.line, 'description')
             descs = dd.babelkw('description', **descs)
             for k, v in descs.items():
                 setattr(self, k, v)
         if self.every_unit is None:
             self.every_unit = self.line.every_unit
         if self.every is None:
             self.every = self.line.every
     # if self.enrolments_until is None:
     #     self.enrolments_until = self.start_date
     # if self.id is not None:
     #     if self.enrolments_until is None:
     #         qs = self.get_existing_auto_events()
     #         if qs.count():
     #             self.enrolments_until = qs[0].start_date
     super(Course, self).full_clean(*args, **kw)
コード例 #12
0
ファイル: std.py プロジェクト: khchine5/welfare
def objects():
    from lino.api import dd, rt
    pcsw = dd.resolve_app('pcsw')

    #~ persongroup = Instantiator('pcsw.PersonGroup','name').build
    # Auswertung / Bilan
    yield pcsw.PersonGroup(ref_name='1', name=_("Evaluation"))
    # Formation / Ausbildung
    yield pcsw.PersonGroup(ref_name='2', name=_("Formation"))
    yield pcsw.PersonGroup(ref_name='4', name=_("Search"))  # Suche / Recherche
    yield pcsw.PersonGroup(ref_name='4bis', name=_("Work"))  # Arbeit / Travail
    yield pcsw.PersonGroup(ref_name='9', name=_("Standby"))
    #~ yield persongroup(u"Bilan",ref_name='1')
    #~ yield persongroup(u"Formation",ref_name='2')
    #~ yield persongroup(u"Recherche",ref_name='4')
    #~ yield persongroup(u"Travail",ref_name='4bis')
    #~ yield persongroup(u"Standby",ref_name='9',active=False)

    yield pcsw.CoachingEnding(**babelkw('name',
                                        de="Übergabe an Kollege",
                                        fr="Transfert vers collègue",
                                        en="Transfer to colleague",))
    yield pcsw.CoachingEnding(**babelkw('name',
                                        de="Einstellung des Anrechts auf SH",
                                        fr="Arret du droit à l'aide sociale",
                                        en="End of right on social aid"))
    yield pcsw.CoachingEnding(**babelkw('name',
                                        de="Umzug in andere Gemeinde",
                                        fr="Déménagement vers autre commune",
                                        en="Moved to another town"))
    yield pcsw.CoachingEnding(**babelkw('name',
                                        de="Hat selber Arbeit gefunden",
                                        fr="A trouvé du travail",
                                        en="Found a job"))

    yield pcsw.DispenseReason(**babelkw('name', de="Gesundheitlich", fr="Santé", en="Health"))
    yield pcsw.DispenseReason(**babelkw('name', de="Studium/Ausbildung", fr="Etude/Formation", en="Studies"))
    yield pcsw.DispenseReason(**babelkw('name', de="Familiär", fr="Cause familiale", en="Familiar"))
    yield pcsw.DispenseReason(**babelkw('name', de="Sonstige", fr="Autre", en="Other"))
コード例 #13
0
def O(fr, en, de, de_BE):
    return Expression(**dd.babelkw('designation', de=de, de_BE=de_BE, en=en, fr=fr))
コード例 #14
0
    def objects(self):
        VatClasses = rt.models.vat.VatClasses
        # yield PupilType(ref="M", name="Mitglied")
        # yield PupilType(ref="H", name="Helfer")
        # yield PupilType(ref="L", name="LFV")
        # yield PupilType(ref="C", name="C*K")
        #~ yield PupilType(ref="E",name="Extern")

        yield TeacherType(ref="S", **dd.str2kw('name', _("Independant")))
        yield TeacherType(ref="EP", **dd.babelkw('name', de="Ehrenamtlich pauschal", fr="Volontaire (forfait)", en="Voluntary (flat)"))
        yield TeacherType(ref="ER", **dd.babelkw('name', de="Ehrenamtlich real", fr="Volontaire (réel)", en="Voluntary (real)"))
        yield TeacherType(ref="LBA", **dd.babelkw('name', de="LBA", fr="ALE", en="LEA"))
        #~ yield TeacherType(ref="A",**dd.babelkw('name',de="Andere",fr="Autre",en="Other"))

        company = Instantiator('contacts.Company', 'name city:name').build

        we = company("Die Buche V.o.G.", "Eupen",
                     street="Birkenweg", street_no=5,
                     vat_id="BE0123456789")
        yield we
        settings.SITE.site_config.site_company = we
        yield settings.SITE.site_config

        ProductCat = rt.models.products.ProductCat
        # productcat = Instantiator('products.ProductCat').build

        self.course_fees = ProductCat(**dd.str2kw(
            'name', _("Participation fees")))
        yield self.course_fees

        self.trips = ProductCat(**dd.str2kw('name', _("Trips")))
        # et="Väljasõidud", de="Ausflüge", fr="Excursions"))
        yield self.trips

        kw = dd.str2kw('name', _("Journeys"))
        self.journeys_cat = ProductCat(**kw)
        yield self.journeys_cat

        kw.update(sales_price="295.00")
        self.journey_fee = Product(cat=self.journeys_cat, **kw)
        yield self.journey_fee

        rent = ProductCat(**dd.str2kw('name', _("Room renting")))
        # et="Ruumiüür", de="Raummiete", fr="Loyer"))
        yield rent
        # other = ProductCat(**dd.str2kw('name', _("Other")))
        # et="Muud", de="Sonstige", fr="Autres"))
        # yield other

        product = Instantiator(
            'products.Product', "sales_price cat name",
            vat_class=VatClasses.normal).build
        yield product("20", self.course_fees, "20€")
        yield product(
            "48", self.course_fees, "48€/8 hours",
            number_of_events=8, min_asset=2)
        yield product(
            "64", self.course_fees, "64€/12 hours",
            number_of_events=12, min_asset=4)
        yield product(
            "50", self.course_fees, "50€/5 hours",
            number_of_events=5, min_asset=1)
        yield product("80", self.course_fees, "80€")

        rent20 = product("20", rent, "Spiegelraum Eupen")
        yield rent20
        rent10 = product("10", rent, **dd.babelkw(
            'name',
            en="Rent per meeting", et="Ruumi üürimine",
            de="Raummiete pro Versammlung",
            fr="Loyer par réunion"))
        yield rent10

        self.PRICES = Cycler(Product.objects.filter(cat=self.course_fees))

        event_type = Instantiator('cal.EventType').build
        kw = dd.str2kw('name', _("Courses"))
        kw.update(dd.str2kw('event_label', _("Hour")))
        self.kurse = event_type(**kw)
        yield self.kurse
        settings.SITE.site_config.default_event_type = self.kurse
        yield settings.SITE.site_config

        self.seminare = event_type(**dd.str2kw('name', _("Seminars")))
        yield self.seminare

        self.excursions = event_type(
            max_days=10, **dd.str2kw('name', _("Excursions")))
        # de="Ausflüge",
        #  fr="Excursions",
        #  en="Excursions",
        yield self.excursions
        
        self.hikes = event_type(
            max_days=60, **dd.str2kw('name', _("Hikes")))
        # de="Wanderungen",
        # fr="Randonnées",
        # en="Hikes",
        yield self.hikes

        yield event_type(**dd.str2kw('name', _("Meetings")))
                                      # de="Versammlungen",
                                      # fr="Réunions",
                                      # en="Meetings",

        yield event_type(
            email_template='Team.eml.html',
            **dd.str2kw('name', _("Team Meetings")))
                         # de="Team-Besprechungen",
                         # fr="Coordinations en équipe",
                         # en="Team Meetings",

        #~ yield event_type(**dd.babelkw('name',
              #~ de="Feiertage",
              #~ fr="Jours fériés",
              #~ en="Holidays",
              #~ ))
        #~

        company = Instantiator('contacts.Company', 'name city:name').build
        eupen = company("Lern- und Begegnungszentrum", "Eupen",
                        street="Kirchstraße", street_no=39, street_box="/B2")
        yield eupen
        bbach = company("Lern- und Begegnungszentrum", "Butgenbach")
        yield bbach
        kelmis = company("Zur Klüüs", "Kelmis")
        yield kelmis
        stvith = company("Sport- und Freizeitzentrum", "Sankt Vith")
        yield stvith

        self.ext1 = company("AA Neudorf", "Raeren")
        yield self.ext1
        self.ext2 = company("Nisperter Schützenverein", "Eupen")
        yield self.ext2

        room = Instantiator('cal.Room').build
        kw = dict(company=eupen)
        kw.update(dd.str2kw('name', _("Mirrored room")))
        kw.update(fee=rent20)
        self.spiegel = room(**kw)
        yield self.spiegel

        kw.update(dd.str2kw('name', _("Computer room")))
        kw.update(fee=rent10)
        self.pc_eupen = room(**kw)
        yield self.pc_eupen

        kw = dict(company=bbach)
        kw.update(dd.str2kw('name', _("Conferences room")))
        self.konf = room(**kw)
        yield self.konf

        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_bbach = room(**kw)
        yield self.pc_bbach

        kw = dict(company=kelmis)
        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_kelmis = room(**kw)
        yield self.pc_kelmis

        kw = dict(company=stvith)
        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_stvith = room(**kw)
        yield self.pc_stvith

        # a room without company
        kw = dict()
        kw.update(dd.str2kw('name', _("Outside")))
        self.outside = room(**kw)
        yield self.outside

        COLORS = Cycler(Calendar.COLOR_CHOICES)

        for u in Room.objects.all():
            obj = Calendar(name=str(u), color=COLORS.pop())
            yield obj
            #~ logger.info("20131018 %s", obj)
            u.calendar = obj
            u.save()
コード例 #15
0
ファイル: std2.py プロジェクト: khchine5/welfare
def excerpt_types():  # also used for migration to 1.1.11

    ContentType = rt.modules.contenttypes.ContentType
    ExcerptType = rt.modules.excerpts.ExcerptType

    attType = Instantiator(
        ExcerptType,
        # build_method='appypdf',
        email_template="Default.eml.html",
    ).build

    Shortcuts = rt.modules.excerpts.Shortcuts

    yield attType(
        body_template="presence_certificate.body.html",
        template="Default.odt",
        primary=True,
        content_type=ContentType.objects.get_for_model(dd.resolve_model("cal.Guest")),
        **dd.babelkw("name", de="Anwesenheitsbescheinigung", fr="Attestation de présence", en="Presence certificate")
    )

    yield attType(
        build_method="appyrtf",
        template="cv.odt",
        shortcut=Shortcuts.cvs_emitted,
        content_type=ContentType.objects.get_for_model(dd.resolve_model("pcsw.Client")),
        **dd.str2kw("name", "Curriculum vitae")
    )

    yield attType(
        template="file_sheet.odt",
        primary=True,
        content_type=ContentType.objects.get_for_model(dd.resolve_model("pcsw.Client")),
        **dd.str2kw("name", _("File sheet"))
    )

    yield attType(
        template="eid-content.odt",
        content_type=ContentType.objects.get_for_model(dd.resolve_model("pcsw.Client")),
        **dd.str2kw("name", _("eID sheet"))
    )
    # **dd.babelkw('name',
    #              de="eID-Inhalt",
    #              fr="Contenu carte eID",
    #              en="eID sheet"))

    yield attType(
        body_template="pac.body.html",
        template="Default.odt",
        content_type=ContentType.objects.get_for_model(dd.resolve_model("pcsw.Client")),
        **dd.str2kw("name", _("Action plan"))
    )
    # **dd.babelkw('name',
    #              de="Aktionsplan",
    #              fr="Plan d'action",
    #              en="to-do list"))

    # A coaching sheet is the printout of a Coaching. Currently not
    # used in real world. But a first draft of the body template
    # exists...
    if False:
        yield attType(
            body_template="coaching.body.html",
            content_type=ContentType.objects.get_for_model(dd.resolve_model("pcsw.Coaching")),
            **dd.str2kw("name", _("Coaching sheet"))
        )

    yield ExcerptType.update_for_model("jobs.Contract", certifying=True, backward_compat=True)

    yield ExcerptType.update_for_model("isip.Contract", certifying=True, backward_compat=True)

    yield ExcerptType.update_for_model(
        "art61.Contract", certifying=True, print_recipient=False, body_template="contract.body.html"
    )
コード例 #16
0
ファイル: demo.py プロジェクト: khchine5/welfare
def objects():

    ClientContactType = rt.modules.pcsw.ClientContactType

    Person = resolve_model('contacts.Person')
    Company = resolve_model('contacts.Company')
    #~ Contact = resolve_model('contacts.Contact')
    Role = resolve_model('contacts.Role')
    RoleType = resolve_model('contacts.RoleType')
    Authority = resolve_model('users.Authority')
    #~ Country = resolve_model('countries.Country')
    Client = resolve_model('pcsw.Client')

    person = Instantiator(Person).build
    client = Instantiator(Client).build
    company = Instantiator(Company).build
    #~ contact = Instantiator(Contact).build
    role = Instantiator(Role).build
    #~ link = Instantiator(Link).build
    #~ exam_policy = Instantiator('isip.ExamPolicy').build

    Place = resolve_model('countries.Place')
    #~ Job = resolve_model('jobs.Job')
    #~ Place = settings.SITE.modules.countries.Place
    StudyType = resolve_model('cv.StudyType')
    #~ Country = resolve_model('countries.Country')
    Property = resolve_model('properties.Property')

    eupen = Place.objects.get(name__exact='Eupen')
    #~ stvith = Place.objects.get(zip_code__exact='4780')
    stvith = Place.objects.get(name__in=('Sankt Vith', 'Saint-Vith'))
    kettenis = Place.objects.get(name__exact='Kettenis')
    vigala = Place.objects.get(name__exact='Vigala')
    ee = countries.Country.objects.get(pk='EE')
    be = belgium = countries.Country.objects.get(isocode__exact='BE')
    andreas = Person.objects.get(name__exact="Arens Andreas")
    annette = Person.objects.get(name__exact="Arens Annette")
    hans = Person.objects.get(name__exact="Altenberg Hans")
    ulrike = Person.objects.get(name__exact="Charlier Ulrike")
    erna = Person.objects.get(name__exact=u"Ärgerlich Erna")

    ## Coaching types
    # We use only abbreviated names in `CoachingType.name` because the
    # users usually know these abbrevs.

    kw = dd.str2kw('name', _("Colleague"))
    COLLEAGUE = cal.GuestRole(**kw)
    yield COLLEAGUE

    # id must match `isip.ContactBase.person_changed`
    ASD = pcsw.CoachingType(
        id=isip.COACHINGTYPE_ASD,
        does_integ=False,
        does_gss=True,
        eval_guestrole=COLLEAGUE,
        **dd.babelkw(
            'name',
            de="ASD",  # (Allgemeiner Sozialdienst)
            nl="ASD",  # (Algemene Sociale Dienst)
            fr="SSG",  # (Service social général)
            en="General",  # (General Social Service)
        ))
    yield ASD

    DSBE = pcsw.CoachingType(
        id=isip.COACHINGTYPE_DSBE,
        does_gss=False,
        does_integ=True,
        eval_guestrole=COLLEAGUE,
        **dd.babelkw(
            'name',
            de="DSBE",  # (Dienst für Sozial-Berufliche Eingliederung)
            fr="SI",  # Service intégration
            en="Integ",  # Integration service
        ))
    yield DSBE

    DEBTS = pcsw.CoachingType(
        does_gss=False,
        does_integ=False,
        **dd.babelkw(
            'name',
            de="Schuldnerberatung",
            fr="Médiation de dettes",
            en="Debts mediation",
        ))
    yield DEBTS

    melanie = person(first_name="Mélanie", last_name="Mélard",
                     email=settings.SITE.demo_email,
                     city=eupen, country='BE', gender=dd.Genders.female,
                     language='fr')

    ## newcomers : Melanie does not work with newcomers because she is
    ## the boss. Hubert does live consultations (no appointments). And
    ## Alicia does only appointments but no life
    ## consultations. Caroline and Judith do both.
    yield melanie
    melanie = users.User(
        username="******", partner=melanie, profile='110',
        coaching_type=DSBE,
        newcomer_consultations=False, newcomer_appointments=False)
    yield melanie

    hubert = person(first_name=u"Hubert", last_name=u"Huppertz",
                    email=settings.SITE.demo_email,
                    city=kettenis, country='BE', gender=dd.Genders.male)
    yield hubert
    hubert = users.User(
        username="******", partner=hubert, profile='100',
        coaching_type=DSBE,
        newcomer_consultations=True, newcomer_appointments=False)
    yield hubert

    alicia = person(
        first_name=u"Alicia", last_name=u"Allmanns",
        email=settings.SITE.demo_email,
        city=kettenis, country='BE',
        # gender=dd.Genders.female,  # don't set gender
        language='fr')
    yield alicia
    alicia = users.User(
        username="******", partner=alicia, profile='100',
        coaching_type=DSBE,
        newcomer_consultations=True, newcomer_appointments=True)
    yield alicia

    theresia = person(first_name="Theresia", last_name="Thelen",
                      email=settings.SITE.demo_email,
                      city=eupen, country='BE', gender=dd.Genders.female)
    yield theresia
    theresia = users.User(username="******", partner=theresia, profile='210')
    yield theresia

    nicolas = users.User(username="******", profile='')
    yield nicolas

    # yield Authority(user=alicia, authorized=hubert)
    # yield Authority(user=alicia, authorized=melanie)
    # yield Authority(user=hubert, authorized=melanie)
    yield Authority(user=hubert, authorized=theresia)
    yield Authority(user=alicia, authorized=theresia)
    yield Authority(user=melanie, authorized=theresia)

    caroline = users.User(
        username="******", first_name="Caroline", last_name="Carnol",
        profile='200',
        coaching_type=ASD,
        newcomer_consultations=True, newcomer_appointments=True)
    yield caroline

    obj = person(first_name="Judith", last_name="Jousten",
                 email=settings.SITE.demo_email,
                 city=eupen, country='BE', gender=dd.Genders.female)
    yield obj

    judith = users.User(
        username="******", partner=obj, profile='400',
        coaching_type=ASD,
        newcomer_consultations=True, newcomer_appointments=True)
    yield judith

    yield users.User(
        username="******", first_name="Patrick",
        last_name="Paraneau", profile='910',
        email=settings.SITE.demo_email)

    # for obj in pcsw.CoachingType.objects.all():
    #     yield users.Team(**dd.babelkw('name', **field2kw(obj, 'name')))

    obj = cal.GuestRole(
        # email_template="Visitor.eml.html",
        **dd.babelkw(
            'name',
            de="Besucher",
            fr="Visiteur",
            en="Visitor",
            et="Külaline",
        ))
    yield obj
    settings.SITE.site_config.update(client_guestrole=obj)

    yield cal.GuestRole(**dd.babelkw('name',
                                     de=u"Vorsitzender",
                                     fr=u"Président",
                                     en=u"Chairman",
                                     et=u"Eesistuja",
                                 ))
    yield cal.GuestRole(**dd.babelkw('name',
                                     de=u"Schriftführer",
                                     fr=u"Greffier",
                                     en=u"Reporter",
                                     et=u"Sekretär",
                                 ))

    calendar = Instantiator('cal.EventType').build

    kw = dict(invite_client=False, is_appointment=False)
    kw.update(dd.str2kw('name', _("Consultations with client")))
    kw.update(dd.str2kw('event_label', _("Consultation")))
    # kw.update(dd.babelkw(
    #     'name',
    #     de="Visiten (ohne Verabredung)",
    #     fr="Consultations sans rendez-vous",
    #     en="Prompt consultation",
    #     et="Külaline",
    # ))
    obj = calendar(**kw)
    yield obj
    settings.SITE.site_config.update(prompt_calendar=obj)

    kw = dict(invite_client=True)
    kw.update(dd.str2kw("name", _("External meetings with client")))
    kw.update(dd.str2kw("event_label", _("External meeting")))
    yield calendar(**kw)

    kw = dict(invite_client=True)
    kw.update(dd.str2kw("name", _("Informational meetings")))
    kw.update(dd.str2kw("event_label", _("Informational meeting")))
    yield calendar(**kw)

    kw = dict(invite_client=False)
    kw.update(dd.str2kw("name", _("Internal meetings")))
    kw.update(dd.str2kw("event_label", _("Internal meeting")))
    yield calendar(**kw)
    # yield calendar(**dd.babelkw('name',
    #                             de=u"Versammlung intern",
    #                             fr=u"Réunions internes",
    #                             en=u"Internal meetings"))

    kw = dict(invite_client=False)
    kw.update(dd.str2kw("name", _("External meetings")))
    kw.update(dd.str2kw("event_label", _("External meeting")))
    yield calendar(**kw)
    # yield calendar(**dd.babelkw('name',
    #                             de=u"Versammlung extern",
    #                             fr=u"Réunions externes",
    #                             en=u"External meetings"))

    kw = dict(invite_client=False)
    kw.update(dd.str2kw("name", _("Private")))
    yield calendar(**kw)
    # yield calendar(**dd.babelkw('name',
    #                             de="Privat",
    #                             fr="Privé",
    #                             en="Private"))

    sector = Instantiator(cv.Sector).build
    for ln in SECTORS_LIST.splitlines():
        if ln:
            a = ln.split('|')
            if len(a) == 3:
                kw = dict(en=a[0], fr=a[1], de=a[2])
                yield sector(**dd.babelkw('name', **kw))

    horeca = cv.Sector.objects.get(pk=5)
    function = Instantiator(cv.Function, sector=horeca).build
    yield function(**dd.babelkw('name',
                             de=u"Kellner",
                             fr=u'Serveur',
                             en=u'Waiter',
                             ))
    yield function(**dd.babelkw('name',
                             de=u"Koch",
                             fr=u'Cuisinier',
                             en=u'Cook',
                             ))
    yield function(**dd.babelkw('name',
                             de=u"Küchenassistent",
                             fr=u'Aide Cuisinier',
                             en=u'Cook assistant',
                             ))
    yield function(**dd.babelkw('name',
                             de=u"Tellerwäscher",
                             fr=u'Plongeur',
                             en=u'Dishwasher',
                             ))

    contractType = Instantiator(jobs.ContractType, "ref",
                                exam_policy=3).build
    yield contractType('art60-7a',
                       **dd.babelkw('name',
                                 de=u"Sozialökonomie",
                                 fr=u'économie sociale',
                                 en=u'social economy',
                                 ))
    yield contractType('art60-7b',
                       **dd.babelkw('name',
                                 de=u"Sozialökonomie - majoré",
                                 fr=u'économie sociale - majoré',
                                 en=u'social economy - increased',
                                 ))
    yield contractType('art60-7c',
                       **dd.babelkw('name',
                                 de=u"mit Rückerstattung",
                                 fr=u'avec remboursement',
                                 en=u'social economy with refund',
                                 ))
    yield contractType('art60-7d',
                       **dd.babelkw('name',
                                 de=u"mit Rückerstattung Schule",
                                 fr=u'avec remboursement école',
                                 en=u'social economy school',
                                 ))
    yield contractType('art60-7e',
                       **dd.babelkw('name',
                                 de=u"Stadt Eupen",
                                 fr=u"ville d'Eupen",
                                 en=u'town',
                                 ))

    contractType = Instantiator(isip.ContractType, "ref",
                                exam_policy=1).build
    yield contractType("vsea", needs_study_type=True, **dd.babelkw(
        'name',
        de=u"VSE Ausbildung",
        fr=u"VSE Ausbildung",
        en=u"VSE Ausbildung",
    ))
    yield contractType("vseb", **dd.babelkw('name',
                                         de=u"VSE Arbeitssuche",
                                         fr=u"VSE Arbeitssuche",
                                         en=u"VSE Arbeitssuche",
                                         ))
    yield contractType("vsec", **dd.babelkw('name',
                                         de=u"VSE Lehre",
                                         fr=u"VSE Lehre",
                                         en=u"VSE Lehre",
                                         ))
    yield contractType("vsed",
                       needs_study_type=True,
                       **dd.babelkw('name',
                                 de=u"VSE Vollzeitstudium",
                                 fr=u"VSE Vollzeitstudium",
                                 en=u"VSE Vollzeitstudium",
                             ))
    yield contractType("vsee", **dd.babelkw('name',
                                         de=u"VSE Sprachkurs",
                                         fr=u"VSE Sprachkurs",
                                         en=u"VSE Sprachkurs",
                                         ))

    t = RoleType.objects.get(pk=4)  # It manager
    t.use_in_contracts = False
    t.save()

    #~ country = Instantiator('countries.Country',"isocode name").build
    #~ yield country('SUHH',"Soviet Union")
    #~ cpas = company(name=u"ÖSHZ Eupen",city=eupen,country=belgium)
    cpas = company(name=u"ÖSHZ Kettenis", city=kettenis, country=belgium)
    yield cpas
    bisa = company(name=u"BISA", city=eupen, country=belgium)
    yield bisa
    bisa_dir = role(company=bisa, person=annette, type=1)
    yield bisa_dir
    rcycle = company(name=u"R-Cycle Sperrgutsortierzentrum",
                     city=eupen, country=belgium)
    yield rcycle
    rcycle_dir = role(company=rcycle, person=andreas, type=1)
    yield rcycle_dir
    yield role(company=rcycle, person=erna, type=2)
    # IT manager : no contracts
    yield role(company=rcycle, person=ulrike, type=4)
    yield company(name=u"Die neue Alternative V.o.G.", city=eupen, country=belgium)
    proaktiv = company(name=u"Pro Aktiv V.o.G.", city=eupen, country=belgium)
    yield proaktiv
    proaktiv_dir = role(company=proaktiv, person=hans, type=1)
    # IT manager : no contracts
    yield role(company=proaktiv, person=ulrike, type=4)
    yield proaktiv_dir
    yield company(name=u"Werkstatt Cardijn V.o.G.", city=eupen, country=belgium)
    yield company(name=u"Behindertenstätten Eupen", city=eupen, country=belgium)
    yield company(name=u"Beschützende Werkstätte Eupen", city=eupen, country=belgium)

    kw = dd.str2kw('name', _("Health insurance"))
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium)
    #~ kw = dict(is_health_insurance=True,country=belgium)
    yield company(name="Alliance Nationale des Mutualités Chrétiennes", **kw)
    yield company(name="Mutualité Chrétienne de Verviers - Eupen", **kw)
    yield company(name="Union Nationale des Mutualités Neutres", **kw)
    yield company(name="Mutualia - Mutualité Neutre", **kw)
    yield company(name="Solidaris - Mutualité socialiste et syndicale de la province de Liège", **kw)

    fkw = dd.str2kw('name', _("Pharmacy"))  # Apotheke
    cct = rt.modules.pcsw.ClientContactType.objects.get(**fkw)
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield company(
        name="Apotheke Reul",
        street='Klosterstraße', street_no=20, **kw)
    yield company(
        name="Apotheke Schunck", street='Bergstraße', street_no=59, **kw)
    yield company(
        name="Pharmacies Populaires de Verviers",
        street='Aachener Straße', street_no=258, **kw)
    yield company(
        name="Bosten-Bocken A", street='Haasstraße', street_no=6, **kw)

    kw = dd.str2kw('name', _("Advocate"))
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield company(name=u"Brüll Christine", street=u'Schilsweg', street_no=4, **kw)
    yield company(name=u"Brocal Catherine", street=u'Neustraße', street_no=115, **kw)
    yield company(name=u"Bourseaux Alexandre", street=u'Aachener Straße', street_no=21, **kw)
    yield company(name=u"Baguette Stéphanie", street=u'Gospertstraße', street_no=24, **kw)

    # Bailiff = Gerichtsvollzieher = Huissier de justice
    kw = dd.str2kw('name', _("Bailiff"))
    if dd.is_installed('debts'):
        kw.update(is_bailiff=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield company(name="Demarteau Bernadette",
                  street='Aachener Straße', street_no=25, **kw)
    kw.update(city=stvith)
    yield company(name="Schmitz Marc", street='Rodter Straße',
                  street_no=43, street_box="B", **kw)

    # Inkasso-Unternehmen
    kw = dd.str2kw('name', _("Debt collecting company"))
    if dd.is_installed('debts'):
        kw.update(is_bailiff=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield company(name="Cashback sprl",
                  street='Vervierser Straße', street_no=1, **kw)
    yield company(name="Money Wizard AS",
                  street='Neustraße', street_no=1, **kw)

    # settings.SITE.site_config.debts_bailiff_type = cct
    # yield settings.SITE.site_config

    def person2client(p, **kw):
        c = mti.insert_child(p, Client)
        for k, v in kw.items():
            setattr(c, k, v)
        c.client_state = pcsw.ClientStates.coached
        c.save()
        return Client.objects.get(pk=p.pk)

    #~ luc = Person.objects.get(name__exact="Saffre Luc")
    #~ luc = person2client(luc,national_id = '680601 053-29')
    #~ luc.birth_place = 'Eupen'
    #~ luc.birth_date = '1968-06-01'
    #~ luc.birth_country = be
    #~ luc.full_clean()
    #~ luc.save()
    #~
    #~ ly = person(first_name="Ly",last_name="Rumma",
      #~ city=vigala,country='EE',
      #~ gender=dd.Genders.female)
    #~ yield ly
    #~ mari = person(first_name="Mari",last_name="Saffre",
      #~ city=vigala,country='EE',
      #~ gender=dd.Genders.female)
    #~ yield mari
    #~ iiris = person(first_name="Iiris",last_name="Saffre",
      #~ city=vigala,country='EE',
      #~ gender=dd.Genders.female)
    #~ yield iiris

    gerd = person(first_name="Gerd",
                  last_name="Gerkens", city=kettenis,
                  email=settings.SITE.demo_email,  # '*****@*****.**'
                  country='BE', gender=dd.Genders.male)
    yield gerd
    yield role(company=cpas, person=gerd, type=4)

    # see :blogentry:`20111007`
    tatjana = client(
        first_name=u"Tatjana", last_name=u"Kasennova",
        #~ first_name=u"Татьяна",last_name=u"Казеннова",
        city=kettenis, country='BE',
        #~ national_id='1237',
        birth_place="Moskau",  # birth_country='SUHH',
        client_state=pcsw.ClientStates.newcomer,
        #~ newcomer=True,
        gender=dd.Genders.female)
    yield tatjana

    michael = Person.objects.get(name__exact="Mießen Michael")
    jean = Person.objects.get(name__exact="Radermacher Jean")
    #~ yield cpas
    sc = settings.SITE.site_config
    sc.site_company = cpas
    sc.signer1 = michael
    sc.signer2 = jean
    yield sc
    yield role(company=cpas,
               person=michael,
               type=sc.signer1_function)
    yield role(company=cpas,
               person=jean,
               type=sc.signer2_function)

    bernard = Person.objects.get(name__exact="Bodard Bernard")

    kw = dd.str2kw('name', _("Employment office"))  # Arbeitsvermittler
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    adg = company(name=u"Arbeitsamt der D.G.", **kw)
    adg.save()
    yield adg
    settings.SITE.site_config.job_office = adg
    yield settings.SITE.site_config
    adg_dir = role(company=adg, person=bernard, type=1)
    yield adg_dir

    kw = dd.str2kw('name', _("Physician"))  # Arzt
    if dd.is_installed('aids'):
        kw.update(can_refund=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield person(first_name="Waltraud", last_name="Waldmann", **kw)

    kw = dd.str2kw('name', _("Family doctor"))  # Hausarzt
    if dd.is_installed('aids'):
        kw.update(can_refund=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    yield person(first_name="Werner", last_name="Wehnicht", **kw)

    kw = dd.str2kw('name', _("Dentist"))
    if dd.is_installed('aids'):
        kw.update(can_refund=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium,
              city=eupen, title="Dr.")
    yield person(first_name="Carmen", last_name="Castou", **kw)
    yield person(first_name="Walter", last_name="Waldmann", **kw)

    kw = dd.str2kw('name', _("Pediatrician"))
    if dd.is_installed('aids'):
        kw.update(can_refund=True)
    cct = ClientContactType(**kw)
    yield cct
    kw = dict(client_contact_type=cct, country=belgium,
              city=eupen, title="Dr.")
    yield person(first_name="Killian", last_name="Kimmel", **kw)

    # kw = dd.str2kw('name', _("Landlord"))  # Vermieter
    # if dd.is_installed('aids'):
    #     kw.update(can_refund=True)
    # cct = ClientContactType(**kw)
    # yield cct
    # kw = dict(client_contact_type=cct, country=belgium, city=eupen)
    # yield person(first_name="Vera", last_name="Veltz", **kw)
    # yield person(first_name="Vanessa", last_name="Veithen", **kw)

    #~ from django.core.exceptions import ValidationError
    # ~ # a circular reference: bernard is contact for company adg and also has himself as `job_office_contact`
    #~ try:
      #~ bernard.job_office_contact = adg_dir
      #~ bernard.clean()
      #~ bernard.save()
    #~ except ValidationError:
        #~ pass
    #~ else:
        #~ raise Exception("Expected ValidationError")

    DIRECTORS = (annette, hans, andreas, bernard)

    #~ USERS = Cycler(root,melanie,hubert,alicia)
    AGENTS = Cycler(melanie, hubert, alicia, judith)
    COACHINGTYPES = Cycler(pcsw.CoachingType.objects.filter(
        does_gss=False, does_integ=False))

    #~ CLIENTS = Cycler(andreas,annette,hans,ulrike,erna,tatjana)
    count = 0
    #~ for person in Person.objects.filter(gender__isnull=False):
    for person in Person.objects.exclude(gender=''):
        if not person.birth_date:  # not those from humanlinks
            if users.User.objects.filter(partner=person).count() == 0:
                if contacts.Role.objects.filter(person=person).count() == 0:
                    birth_date = settings.SITE.demo_date(-170 * count - 16 * 365)
                    national_id = generate_ssin(birth_date, person.gender)

                    client = person2client(person,
                                           national_id=national_id,
                                           birth_date=birth_date)
                    # youngest client is 16; 170 days between each client

                    count += 1
                    if count % 2:
                        client.client_state = pcsw.ClientStates.coached
                    elif count % 5:
                        client.client_state = pcsw.ClientStates.newcomer
                    else:
                        client.client_state = pcsw.ClientStates.former

                    # Dorothée is three times in our database
                    if client.first_name == "Dorothée":
                        client.national_id = None
                        client.birth_date = ''

                    client.full_clean()
                    client.save()

    #~ CLIENTS = Cycler(Client.objects.filter(is_active=True,newcomer=False))
    CLIENTS = Cycler(
        Client.objects.filter(client_state=pcsw.ClientStates.coached))

    #~ oshz = Company.objects.get(name=u"ÖSHZ Eupen")

    #~ project = Instantiator('projects.Project').build
    #~ note = Instantiator('notes.Note').build
    langk = Instantiator('cv.LanguageKnowledge').build

    #~ prj = project(name="Testprojekt",company=oshz)
    #~ yield prj
    #~ yield note(user=user,project=prj,date=i2d(20091006),subject="Programmierung",company=oshz)

    #~ prj = project(name="Testprojekt",company=oshz)
    #~ yield prj
    #~ yield note(user=user,project=prj,date=i2d(20091007),subject="Anschauen",company=oshz)

    Note = resolve_model('notes.Note')
    USERS = Cycler(users.User.objects.all())
    SUBJECTS = Cycler(u"""
    Erstgespräch
    Versammlung beim AG
    Zwischenbericht
    Krisensitzung
    """.splitlines())

    for i in range(10):
        yield Note(user=USERS.pop(),
                   date=settings.SITE.demo_date(days=i),
                   subject=SUBJECTS.pop())

    schule = StudyType.objects.get(pk=1)
    # uni = StudyType.objects.get(pk=4)
    abi = u"Abitur"
    study = Instantiator('cv.Study').build

    gerd = CLIENTS.pop()
    luc = CLIENTS.pop()
    ly = CLIENTS.pop()
    mari = CLIENTS.pop()
    iiris = CLIENTS.pop()

    luc.card_number = '591413288107'
    luc.card_valid_from = i2d(20110819)
    luc.card_valid_until = i2d(20160819)
    luc.card_issuer = "Eupen"
    luc.card_type = BeIdCardTypes.belgian_citizen
    luc.save()
    luc.make_demo_picture()

    gerd.card_number = '123456789012'
    gerd.card_valid_from = i2d(20120819)
    gerd.card_valid_until = i2d(20130818)
    gerd.card_issuer = "Eupen"
    gerd.card_type = BeIdCardTypes.foreigner_c
    gerd.save()
    gerd.make_demo_picture()

    yield study(person=luc, type=schule, content=abi,
                start_date='19740901', end_date='19860630')
    yield study(person=gerd, type=schule, content=abi,
                start_date='19740901', end_date='19860630')

    yield langk(person=luc, language='ger', written='4', spoken='4')
    yield langk(person=gerd, language='ger', written='4', spoken='4')
    yield langk(person=mari, language='ger', written='2', spoken='4')
    yield langk(person=iiris, language='ger', written='0', spoken='4')
    yield langk(person=ly, language='ger', written='2', spoken='1')

    yield langk(person=luc, language='fre', written='4', spoken='3')
    yield langk(person=gerd, language='fre', written='4', spoken='3')

    yield langk(person=luc, language='eng', written='4', spoken='3')
    yield langk(person=gerd, language='eng', written='4', spoken='3')
    yield langk(person=ly, language='eng', written='3', spoken='3')

    yield langk(person=gerd, language='dut', written='3', spoken='3')

    yield langk(person=luc, language='est', written='3', spoken='3')
    yield langk(person=ly, language='est', written='4', spoken='4')
    yield langk(person=mari, language='est', written='3', spoken='4')
    yield langk(person=iiris, language='est', written='0', spoken='3')

    jobtype = Instantiator(jobs.JobType, 'name').build
    art607 = jobtype(u'Sozialwirtschaft = "majorés"')
    yield art607
    yield jobtype(u'Intern')
    yield jobtype(u'Extern (Öffentl. VoE mit Kostenrückerstattung)')
    yield jobtype(u'Extern (Privat Kostenrückerstattung)')
    #~ yield jobtype(u'VSE')
    yield jobtype(u'Sonstige')

    rcycle = mti.insert_child(rcycle, jobs.JobProvider)
    yield rcycle
    bisa = mti.insert_child(bisa, jobs.JobProvider)
    yield bisa
    proaktiv = mti.insert_child(proaktiv, jobs.JobProvider)
    yield proaktiv

    # jobs (Art.60-7)
    CSTATES = Cycler(jobs.CandidatureStates.objects())
    JOBS_CONTRACT_TYPES = Cycler(jobs.ContractType.objects.all())
    JTYPES = Cycler(jobs.JobType.objects.all())

    PROVIDERS = Cycler(jobs.JobProvider.objects.all())
    SECTORS = Cycler(cv.Sector.objects.all())
    FUNCTIONS = Cycler(cv.Function.objects.all())
    REMARKS = Cycler(
        _("A very hard job."),
        '',
        _("No supervisor. Only for independent people."), '', '', '')

    for i in range(8):
        f = FUNCTIONS.pop()
        yield jobs.Job(provider=PROVIDERS.pop(),
                       type=JTYPES.pop(),
                       contract_type=JOBS_CONTRACT_TYPES.pop(),
                       name=unicode(f),
                       remark=REMARKS.pop(),
                       sector=SECTORS.pop(), function=f)

    JOBS = Cycler(jobs.Job.objects.all())

    for i in range(40):
        yield jobs.Candidature(job=JOBS.pop(),
                               person=CLIENTS.pop(),
                               state=CSTATES.pop(),
                               date_submitted=settings.SITE.demo_date(-40 + i))

    # reset SECTORS and FUNCTIONS
    SECTORS = Cycler(cv.Sector.objects.all())
    FUNCTIONS = Cycler(cv.Function.objects.all())

    obj = jobs.Offer(
        name="Übersetzer DE-FR (m/w)",
        remark="""\
Wir sind auf der Suche nach einem Deutsch-Französich Übersetzer 
(M/F) um einen Selbständigenr zu Geschäftsessen und kommerziellen 
Termine zu begleiten. Sie übernehmen die Übersetzung von Gespräche 
während kommerziellen Kontakte mit deutschen Kunden.
Es ist spontane und pünktliche Aufträge, den ganzen Tag, in
Eupen und/oder Deutschland.
Regelmäßigkeit: 1-2 Mal pro Monat, je nach Bedarf.
Flexibilität: die Termine sind je nach Kandidat anpassbar.""",
        provider=PROVIDERS.pop(),
        selection_from=settings.SITE.demo_date(-120),
        selection_until=settings.SITE.demo_date(-20),
        start_date=settings.SITE.demo_date(10),
        sector=SECTORS.pop(),
        function=FUNCTIONS.pop())
    yield obj

    # reset SECTORS and FUNCTIONS
    SECTORS = Cycler(cv.Sector.objects.all())
    FUNCTIONS = Cycler(cv.Function.objects.all())

    for i in range(30):
        yield jobs.Candidature(
            person=CLIENTS.pop(),
            state=CSTATES.pop(),
            date_submitted=settings.SITE.demo_date(-20 + i * 2),
            sector=SECTORS.pop(),
            function=FUNCTIONS.pop(),
        )

    COUNTRIES = Cycler(countries.Country.objects.all())
    COMPANIES = Cycler(Company.objects.all())

    # reset SECTORS and FUNCTIONS
    SECTORS = Cycler(cv.Sector.objects.all())
    FUNCTIONS = Cycler(cv.Function.objects.all())
    DURATIONS = Cycler([1, 2, 3, 6, 6, 9, 12, 12, 24, 24])  # months
    STATES = Cycler(cv.EducationEntryStates.items())

    for i in range(30):
        start_date = settings.SITE.demo_date(-1200 + i * 2)
        d = DURATIONS.pop()
        end_date = DurationUnits.months.add_duration(start_date, d)
        yield cv.Experience(
            person=CLIENTS.pop(),
            company=COMPANIES.pop(),
            country=COUNTRIES.pop(),
            start_date=start_date,
            end_date=end_date,
            sector=SECTORS.pop(),
            function=FUNCTIONS.pop(),
        )

    TRAINING_TYPES = Cycler(cv.StudyType.objects.filter(is_training=True))
    for i in range(20):
        start_date = settings.SITE.demo_date(-1200 + i * 2)
        d = DURATIONS.pop()
        end_date = DurationUnits.months.add_duration(start_date, d)
        yield cv.Training(
            person=CLIENTS.pop(),
            type=TRAINING_TYPES.pop(),
            school=SCHOOLS.pop(),
            country=COUNTRIES.pop(),
            start_date=start_date,
            end_date=end_date,
            sector=SECTORS.pop(),
            function=FUNCTIONS.pop(),
            state=STATES.pop(),
        )

    STUDY_TYPES = Cycler(cv.StudyType.objects.filter(is_study=True))
    EDULEVELS = Cycler(cv.EducationLevel.objects.all())
    for i in range(20):
        start_date = settings.SITE.demo_date(-1200 + i * 2)
        d = DURATIONS.pop()
        end_date = DurationUnits.months.add_duration(start_date, d)
        yield cv.Study(
            person=CLIENTS.pop(),
            type=STUDY_TYPES.pop(),
            school=SCHOOLS.pop(),
            country=COUNTRIES.pop(),
            start_date=start_date,
            end_date=end_date,
            state=STATES.pop(),
            education_level=EDULEVELS.pop(),
        )


    #~ baker = Properties.objects.get(pk=1)
    #~ baker.save()
    #~ yield baker

    """
    Distribute properties to persons. The distribution should be
    "randomly", but independant of site's language setting.
    """

    for i, p in enumerate(Client.objects.all()):
        if i % 2:
            country = belgium
        else:
            country = COUNTRIES.pop()
        p.birth_country_id = country
        p.nationality_id = country

        if i % 3:
            p.languageknowledge_set.create(
                language_id='eng', written='3', spoken='3')
        elif i % 5:
            p.languageknowledge_set.create(
                language_id='eng', written='4', spoken='4')
        if p.zip_code == '4700':
            p.languageknowledge_set.create(language_id='ger', native=True)
            if i % 2:
                p.languageknowledge_set.create(
                    language_id='fre', written='2', spoken='2')
            p.is_cpas = True
            #~ p.is_active = True
            #~ p.client_state = pcsw.ClientStates.coached
            #~ p.native_language_id = 'ger'
        p.save()

    for short_code, isocode in (
        ('B', 'BE'),
        ('D', 'DE'),
        ('F', 'FR'),
    ):
        c = countries.Country.objects.get(pk=isocode)
        c.short_code = short_code
        c.save()

    i = pcsw.Client.objects.order_by('name').__iter__()
    p = i.next()
    offset = 0
    for f in cv.Function.objects.all():
        yield jobs.Candidature(person=p, function=f, sector=f.sector,
                               #~ date_submitted=i2d(20111019))
                               date_submitted=settings.SITE.demo_date(offset))
        p = i.next()
        offset -= 1

    PERSONGROUPS = Cycler(pcsw.PersonGroup.objects.all())
    AGENTS_SCATTERED = Cycler(
        alicia, hubert, melanie, caroline, hubert, melanie, hubert, melanie)
    ENDINGS = Cycler(pcsw.CoachingEnding.objects.all())
    for client in pcsw.Client.objects.all():
        story = COACHING_STORIES.get(client.client_state)
        if story:
            if not client.group:
                client.group = PERSONGROUPS.pop()
                PERSONGROUPS.pop()
                # ~ for i in range(5-client.group.id): PERSONGROUPS.pop() #
                client.save()
            periods = story.pop()
            type = COACHINGTYPES.pop()
            for a, b, primary, ct in periods:
                if ct == CT_OTHER:
                    type = COACHINGTYPES.pop()
                elif ct == CT_GSS:
                    type = ASD
                elif ct == CT_INTEG:
                    type = DSBE
                kw = dict(client=client,
                          user=AGENTS_SCATTERED.pop(),
                          type=type,
                          primary=primary)
                if a is not None:
                    kw.update(start_date=settings.SITE.demo_date(a))
                if b is not None:
                    kw.update(end_date=settings.SITE.demo_date(b))
                    kw.update(ending=ENDINGS.pop())
                yield pcsw.Coaching(**kw)

    # every 10th partner is obsolete

    for i, p in enumerate(contacts.Partner.objects.all()):
        if i % 10 == 0:
            p.is_obsolete = True
            p.save()

    # The reception desk opens at 8am. 20 visitors have checked in,
    # half of which

    RECEPTION_CLIENTS = Cycler(reception.Clients.request(user=theresia))
    REASONS = Cycler(_("Urgent problem"), '', _("Complain"), _("Information"))
    today = settings.SITE.demo_date()
    now = datetime.datetime(today.year, today.month, today.day, 8, 0)
    for i in range(1, 20):
        obj = RECEPTION_CLIENTS.pop()
        now += datetime.timedelta(minutes=3 * i, seconds=3 * i)
        obj = reception.create_prompt_event(
            obj, obj,
            AGENTS.pop(),
            REASONS.pop(),
            settings.SITE.site_config.client_guestrole,
            now)
        yield obj

    # TODO: the following possibly causes more than one busy guest per
    # agent.
    qs = cal.Guest.objects.filter(waiting_since__isnull=False)
    busy_agents = set()
    for i, obj in enumerate(qs):
        busy_since = obj.waiting_since + \
            datetime.timedelta(minutes=2 * i, seconds=2 * i)
        if i % 3 == 0:
            obj.gone_since = busy_since + \
                datetime.timedelta(minutes=2 * i, seconds=3 * i)
            obj.state = cal.GuestStates.gone
        elif not obj.event.user in busy_agents:
            obj.busy_since = busy_since
            obj.state = cal.GuestStates.busy
            busy_agents.add(obj.event.user)

        yield obj

    Calendar = dd.resolve_model('cal.Calendar')
    COLORS = Cycler(Calendar.COLOR_CHOICES)

    for u in settings.SITE.user_model.objects.exclude(profile=None):
        obj = Calendar(name=u.username, color=COLORS.pop())
        yield obj
        u.calendar = obj
        u.save()

    # create a primary ClientAddress for each Client.
    # no longer needed. done by plausibility.fixtures.demo2
    # for obj in settings.SITE.modules.contacts.Partner.objects.all():
    #     obj.repairdata()

    # have partners speak different languages
    # most partners speak first language
    if len(settings.SITE.languages):
        ld = []  # language distribution
        ld = [settings.SITE.languages[0].django_code] * 10
        if len(settings.SITE.languages) > 1:
            ld += [settings.SITE.languages[1].django_code] * 3
            if len(settings.SITE.languages) > 2:
                ld += [settings.SITE.languages[2].django_code]
        LANGS = Cycler(ld)
        for obj in settings.SITE.modules.contacts.Partner.objects.all():
            obj.language = LANGS.pop()
            obj.save()
コード例 #17
0
ファイル: tests.py プロジェクト: lino-framework/book
    def test01(self):
        """
        Tests some basic funtionality.
        """
        self.assertEqual(
            settings.MIDDLEWARE, (
                'django.middleware.common.CommonMiddleware',
                'django.middleware.locale.LocaleMiddleware',
                'django.contrib.sessions.middleware.SessionMiddleware',
                'lino.core.auth.middleware.AuthenticationMiddleware',
                'lino.core.auth.middleware.WithUserMiddleware',
                'lino.core.auth.middleware.DeviceTypeMiddleware',
                'lino.core.auth.middleware.RemoteUserMiddleware',
                'lino.utils.ajax.AjaxExceptionResponse'))
            # settings.MIDDLEWARE_CLASSES, (
            #     'django.middleware.common.CommonMiddleware',
            #     'django.middleware.locale.LocaleMiddleware',
            #     'lino.core.auth.RemoteUserMiddleware',
            #     'lino.utils.ajax.AjaxExceptionResponse'))

        Person = rt.models.contacts.Person
        Partner = rt.models.contacts.Partner
        Country = rt.models.countries.Country
        Place = rt.models.countries.Place
        PlaceTypes = rt.models.countries.PlaceTypes
        
        ee = create_and_get(Country,
                            isocode='EE', **dd.babelkw('name',
                                                    de="Estland",
                                                    fr='Estonie',
                                                    en="Estonia",
                                                    nl='Estland',
                                                    et='Eesti',
                                                    ))
        be = create_and_get(Country,
                            isocode='BE', **dd.babelkw('name',
                                                    de="Belgien",
                                                    fr='Belgique',
                                                    en="Belgium",
                                                    nl='Belgie',
                                                    et='Belgia',
                                                    ))

        eupen = create_and_get(
            Place, name=u'Eupen', country=be, zip_code='4700')

        vigala = create_and_get(Place,
                                name='Vigala',
                                country=ee,
                                type=PlaceTypes.municipality)

        luc = create_and_get(Person,
                             first_name='Luc', last_name='Saffre',
                             gender=Genders.male,
                             country=ee, street='Uus', street_no='1',
                             addr2=u'Vana-Vigala küla',
                             city=vigala, zip_code='78003')

        settings.SITE.uppercase_last_name = True

        """If the following tests raise a "DoesNotExist: Company matching
        query does not exist" then this may come because
        Site._site_config has been filled before the database switched
        from the real db to test db.  and not properly reset.

        """

        with translation.override('en'):
            self.assertEquals(luc.address, u'''\
Mr Luc SAFFRE
Uus 1
Vana-Vigala küla
78003 Vigala vald
Estonia''')

        with translation.override('de'):
            self.assertEquals(luc.address, u'''\
Herrn Luc SAFFRE
Uus 1
Vana-Vigala küla
78003 Vigala vald
Estland''')
            self.assertEquals(luc.address_html, '''\
<p>Herrn Luc SAFFRE<br/>Uus 1<br/>Vana-Vigala küla<br/>78003 Vigala vald<br/>Estland</p>''')

        # "new" or "full" style is when the database knows the
        # geographic hierarchy. We then just select "Vana-Vigala" as
        # the "City".

        vana_vigala = create_and_get(Place,
                                     name='Vana-Vigala',
                                     country=ee,
                                     parent=vigala,
                                     type=PlaceTypes.village,
                                     zip_code='78003')

        meeli = create_and_get(Person,
                               first_name='Meeli', last_name='Mets',
                               gender=Genders.female,
                               country=ee, street='Hirvepargi',
                               street_no='123',
                               city=vana_vigala)

        with translation.override('en'):
            self.assertEquals(meeli.address, u'''\
Mrs Meeli METS
Hirvepargi 123
Vana-Vigala küla
78003 Vigala vald
Estonia''')

        root = create_and_get(settings.SITE.user_model,
                              username='******', language='',
                              user_type=UserTypes.admin)

        """
        disable SITE.is_imported_partner() otherwise 
        disabled_fields may contain more than just the 'id' field.
        """
        save_iip = settings.SITE.is_imported_partner

        def f(obj):
            return False
        settings.SITE.is_imported_partner = f

        """
        Note that we must specify the language both in the user 
        and in HTTP_ACCEPT_LANGUAGE because...
        """

        luc = Person.objects.get(name__exact="Saffre Luc")
        self.assertEqual(luc.pk, contacts.PARTNER_NUMBERS_START_AT)

        url = settings.SITE.buildurl(
            'api', 'contacts', 'Person',
            '%d?query=&an=detail&fmt=json' % luc.pk)
        #~ url = '/api/contacts/Person/%d?query=&an=detail&fmt=json' % luc.pk
        if settings.SITE.get_language_info('en'):
            root.language = 'en'
            root.save()
            self.client.force_login(root)
            response = self.client.get(
                url, REMOTE_USER='******', HTTP_ACCEPT_LANGUAGE='en')
            result = self.check_json_result(
                response, 'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estonia")
            self.assertEqual(result['data']['gender'], "Male")

        if settings.SITE.get_language_info('de'):
            root.language = 'de'
            root.save()
            response = self.client.get(
                url, REMOTE_USER='******', HTTP_ACCEPT_LANGUAGE='de')
            result = self.check_json_result(
                response,
                'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estland")
            self.assertEqual(result['data']['gender'], "Männlich")
            #~ self.assertEqual(result['data']['disabled_fields'],['contact_ptr_id','id'])
            #~ self.assertEqual(result['data']['disabled_fields'],['id'])
            df = result['data']['disabled_fields']
            self.assertEqual(df['id'], True)

        if settings.SITE.get_language_info('fr'):
            root.language = 'fr'
            root.save()
            response = self.client.get(
                url, REMOTE_USER='******', HTTP_ACCEPT_LANGUAGE='fr')
            result = self.check_json_result(
                response, 'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estonie")
            self.assertEqual(result['data']['gender'], u"Masculin")

        #~ root.language = lang
        #~ root.save()
        # restore is_imported_partner method
        settings.SITE.is_imported_partner = save_iip

        #~ def test03(self):
        """
        Test the following situation:
        
        - User 1 opens the :menuselection:`Configure --> System--> System Parameters` dialog
        - User 2 creates a new Person (which increases next_partner_id)
        - User 1 clicks on `Save`.
        
        `next_partner_id` may not get overwritten 
        
        """
        # User 1
        sc = settings.SITE.site_config
        self.assertEqual(sc.next_partner_id,
                         contacts.PARTNER_NUMBERS_START_AT + 2)
        sc.update(next_partner_id=12345)
        
        # SiteConfigs = settings.SITE.models.system.SiteConfigs
        # elem = SiteConfigs.get_row_by_pk(None, settings.SITE.config_id)
        # self.assertEqual(elem.next_partner_id,
        #                  contacts.PARTNER_NUMBERS_START_AT + 2)
        # elem.next_partner_id = 12345
        # elem.full_clean()
        # elem.save()
        #~ print "saved"
        sc = settings.SITE.site_config  # re-read it from db
        self.assertEqual(sc.next_partner_id, 12345)
        john = create_and_get(Partner, name='John')
        self.assertEqual(john.pk, 12345)
        self.assertEqual(sc.next_partner_id, 12346)
        sc = settings.SITE.site_config  # re-read it from db
        self.assertEqual(sc.next_partner_id, 12346)
コード例 #18
0
    def test01(self):
        """
        Tests some basic funtionality.
        """
        self.assertEqual(settings.MIDDLEWARE_CLASSES,
                         ('django.middleware.common.CommonMiddleware',
                          'django.middleware.locale.LocaleMiddleware',
                          'lino.core.auth.RemoteUserMiddleware',
                          'lino.utils.ajax.AjaxExceptionResponse'))

        Person = dd.resolve_model("contacts.Person")

        ee = create_and_get('countries.Country',
                            isocode='EE',
                            **dd.babelkw(
                                'name',
                                de="Estland",
                                fr='Estonie',
                                en="Estonia",
                                nl='Estland',
                                et='Eesti',
                            ))
        be = create_and_get('countries.Country',
                            isocode='BE',
                            **dd.babelkw(
                                'name',
                                de="Belgien",
                                fr='Belgique',
                                en="Belgium",
                                nl='Belgie',
                                et='Belgia',
                            ))

        PlaceTypes = rt.modules.countries.PlaceTypes
        eupen = create_and_get('countries.Place',
                               name=u'Eupen',
                               country=be,
                               zip_code='4700')

        vigala = create_and_get('countries.Place',
                                name='Vigala',
                                country=ee,
                                type=PlaceTypes.municipality)

        luc = create_and_get(Person,
                             first_name='Luc',
                             last_name='Saffre',
                             gender=Genders.male,
                             country=ee,
                             street='Uus',
                             street_no='1',
                             addr2=u'Vana-Vigala küla',
                             city=vigala,
                             zip_code='78003')

        settings.SITE.uppercase_last_name = True
        """If the following tests raise a "DoesNotExist: Company matching
        query does not exist" then this may come because
        Site._site_config has been filled before the database switched
        from the real db to test db.  and not properly reset.

        """

        with translation.override('en'):
            self.assertEquals(
                luc.address, u'''\
Mr Luc SAFFRE
Uus 1
Vana-Vigala küla
78003 Vigala vald
Estonia''')

        with translation.override('de'):
            self.assertEquals(
                luc.address, u'''\
Herrn Luc SAFFRE
Uus 1
Vana-Vigala küla
78003 Vigala vald
Estland''')
            self.assertEquals(
                luc.address_html, '''\
<p>Herrn Luc SAFFRE<br />Uus 1<br />Vana-Vigala k&#252;la<br />78003 Vigala vald<br />Estland</p>'''
            )

        # "new" or "full" style is when the database knows the
        # geographic hierarchy. We then just select "Vana-Vigala" as
        # the "City".

        vana_vigala = create_and_get('countries.Place',
                                     name='Vana-Vigala',
                                     country=ee,
                                     parent=vigala,
                                     type=PlaceTypes.village,
                                     zip_code='78003')

        meeli = create_and_get(Person,
                               first_name='Meeli',
                               last_name='Mets',
                               gender=Genders.female,
                               country=ee,
                               street='Hirvepargi',
                               street_no='123',
                               city=vana_vigala)

        with translation.override('en'):
            self.assertEquals(
                meeli.address, u'''\
Mrs Meeli METS
Hirvepargi 123
Vana-Vigala küla
78003 Vigala vald
Estonia''')

        u = create_and_get(settings.SITE.user_model,
                           username='******',
                           language='',
                           profile=UserProfiles.admin)
        """
        disable SITE.is_imported_partner() otherwise 
        disabled_fields may contain more than just the 'id' field.
        """
        save_iip = settings.SITE.is_imported_partner

        def f(obj):
            return False

        settings.SITE.is_imported_partner = f
        """
        Note that we must specify the language both in the user 
        and in HTTP_ACCEPT_LANGUAGE because...
        """

        luc = Person.objects.get(name__exact="Saffre Luc")
        self.assertEqual(luc.pk, contacts.PARTNER_NUMBERS_START_AT)

        url = settings.SITE.buildurl('api', 'contacts', 'Person',
                                     '%d?query=&an=detail&fmt=json' % luc.pk)
        #~ url = '/api/contacts/Person/%d?query=&an=detail&fmt=json' % luc.pk
        if settings.SITE.get_language_info('en'):
            u.language = 'en'
            u.save()
            response = self.client.get(url,
                                       REMOTE_USER='******',
                                       HTTP_ACCEPT_LANGUAGE='en')
            result = self.check_json_result(
                response, 'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estonia")
            self.assertEqual(result['data']['gender'], "Male")

        if settings.SITE.get_language_info('de'):
            u.language = 'de'
            u.save()
            response = self.client.get(url,
                                       REMOTE_USER='******',
                                       HTTP_ACCEPT_LANGUAGE='de')
            result = self.check_json_result(
                response, 'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estland")
            self.assertEqual(result['data']['gender'], u"Männlich")
            #~ self.assertEqual(result['data']['disabled_fields'],['contact_ptr_id','id'])
            #~ self.assertEqual(result['data']['disabled_fields'],['id'])
            df = result['data']['disabled_fields']
            self.assertEqual(df['id'], True)

        if settings.SITE.get_language_info('fr'):
            u.language = 'fr'
            u.save()
            response = self.client.get(url,
                                       REMOTE_USER='******',
                                       HTTP_ACCEPT_LANGUAGE='fr')
            result = self.check_json_result(
                response, 'navinfo disable_delete data id title')
            self.assertEqual(result['data']['country'], "Estonie")
            self.assertEqual(result['data']['gender'], u"Masculin")

        #~ u.language = lang
        #~ u.save()
        # restore is_imported_partner method
        settings.SITE.is_imported_partner = save_iip

        #~ def test03(self):
        """
        Test the following situation:
        
        - User 1 opens the :menuselection:`Configure --> System--> System Parameters` dialog
        - User 2 creates a new Person (which increases next_partner_id)
        - User 1 clicks on `Save`.
        
        `next_partner_id` may not get overwritten 
        
        """
        # User 1
        SiteConfigs = settings.SITE.modules.system.SiteConfigs
        elem = SiteConfigs.get_row_by_pk(None, settings.SITE.config_id)
        self.assertEqual(elem.next_partner_id,
                         contacts.PARTNER_NUMBERS_START_AT + 2)

        elem.next_partner_id = 12345
        elem.full_clean()
        elem.save()
        #~ print "saved"
        self.assertEqual(settings.SITE.site_config.next_partner_id, 12345)
        john = create_and_get(Person, first_name='John', last_name='Smith')
        self.assertEqual(john.pk, 12345)
        self.assertEqual(elem.next_partner_id, 12346)
        self.assertEqual(settings.SITE.site_config.next_partner_id, 12346)
コード例 #19
0
ファイル: demo.py プロジェクト: TonisPiip/book
def O(fr, en, de, de_BE):
    return Expression(**dd.babelkw('name', de=de, de_BE=de_BE, en=en, fr=fr))
コード例 #20
0
ファイル: tantsukool.py プロジェクト: forexblog/book
    def objects(self):
        VatClasses = rt.models.vat.VatClasses

        yield TeacherType(ref="I", **dd.str2kw('name', _("Independant")))
        yield TeacherType(ref="E", **dd.str2kw('name', _("Employed")))
        #~ yield TeacherType(ref="A",**dd.babelkw('name',de="Andere",fr="Autre",en="Other"))

        company = Instantiator('contacts.Company', 'name city:name').build

        we = company("Tantsutajad MTÜ",
                     "Tallinn",
                     street="Sütiste tee",
                     street_no=123,
                     vat_id="EE0123456789")
        yield we
        settings.SITE.site_config.site_company = we
        participant = rt.models.cal.GuestRole.objects.get(id=1)
        settings.SITE.site_config.pupil_guestrole = participant
        yield settings.SITE.site_config

        ProductCat = rt.models.products.ProductCat
        # productcat = Instantiator('products.ProductCat').build

        self.course_fees = ProductCat(
            **dd.str2kw('name', _("Participation fees")))
        yield self.course_fees

        self.trips = ProductCat(**dd.str2kw('name', _("Trips")))
        yield self.trips

        kw = dd.str2kw('name', _("Journeys"))
        self.journeys_cat = ProductCat(**kw)
        yield self.journeys_cat

        kw.update(sales_price="295.00")
        self.journey_fee = Product(cat=self.journeys_cat, **kw)
        yield self.journey_fee

        rent = ProductCat(**dd.str2kw('name', _("Room renting")))
        # et="Ruumiüür", de="Raummiete", fr="Loyer"))
        yield rent
        # other = ProductCat(**dd.str2kw('name', _("Other")))
        # et="Muud", de="Sonstige", fr="Autres"))
        # yield other

        t5 = babeld(Tariff, _("5 times"), number_of_events=5, min_asset=1)
        yield t5
        t8 = babeld(Tariff, _("8 times"), number_of_events=8, min_asset=2)
        yield t8
        t12 = babeld(Tariff, _("12 times"), number_of_events=12, min_asset=4)
        yield t12

        product = Instantiator('products.Product',
                               "sales_price cat name",
                               vat_class=VatClasses.services).build
        yield product("20", self.course_fees, "20€")
        yield product("48", self.course_fees, "48€/8 hours", tariff=t8)
        # yield p
        # yield Tariff(product=p, number_of_events=8, min_asset=2)

        yield product("64", self.course_fees, "64€/12 hours", tariff=t12)
        # yield p
        # yield Tariff(product=p, number_of_events=12, min_asset=4)

        yield product("50", self.course_fees, "50€/5 hours", tariff=t5)
        # yield p
        # yield Tariff(product=p, number_of_events=5, min_asset=1)

        yield product("80", self.course_fees, "80€")

        rent20 = product("20", rent, "Peegliruum")
        yield rent20
        rent10 = product(
            "10", rent,
            **dd.babelkw('name',
                         en="Rent per meeting",
                         et="Ruumi üürimine",
                         de="Raummiete pro Versammlung",
                         fr="Loyer par réunion"))
        yield rent10

        self.PRICES = Cycler(Product.objects.filter(cat=self.course_fees))

        event_type = Instantiator('cal.EventType').build
        kw = dd.str2kw('name', _("Courses"))
        kw.update(dd.str2kw('event_label', _("Hour")))
        self.kurse = event_type(**kw)
        yield self.kurse
        settings.SITE.site_config.default_event_type = self.kurse
        yield settings.SITE.site_config

        self.seminare = event_type(**dd.str2kw('name', _("Seminars")))
        yield self.seminare

        self.excursions = event_type(max_days=10,
                                     **dd.str2kw('name', _("Excursions")))
        # de="Ausflüge",
        #  fr="Excursions",
        #  en="Excursions",
        yield self.excursions

        self.hikes = event_type(max_days=60, **dd.str2kw('name', _("Hikes")))
        # de="Wanderungen",
        # fr="Randonnées",
        # en="Hikes",
        yield self.hikes

        yield event_type(**dd.str2kw('name', _("Lessons")))
        # de="Versammlungen",
        # fr="Réunions",
        # en="Meetings",

        yield event_type(email_template='Team.eml.html',
                         **dd.str2kw('name', _("Lessons")))
        # de="Team-Besprechungen",
        # fr="Coordinations en équipe",
        # en="Team Meetings",

        #~ yield event_type(**dd.babelkw('name',
        #~ de="Feiertage",
        #~ fr="Jours fériés",
        #~ en="Holidays",
        #~ ))
        #~

        company = Instantiator('contacts.Company', 'name city:name').build
        eupen = company("Tallinna tantsukeskus",
                        "Tallinn",
                        street="Kirchstraße",
                        street_no=39,
                        street_box="/B2")
        yield eupen
        bbach = company("Tartu tantsukeskus", "Tartu")
        yield bbach
        kelmis = company("Zur Klüüs", "Kelmis")
        yield kelmis
        stvith = company("Pärnu tantsukeskus", "Pärnu")
        yield stvith

        self.ext1 = company("Vigala Joogaklubi", "Vigala")
        yield self.ext1
        self.ext2 = company("Vigala Maadlusklubi", "Vigala")
        yield self.ext2

        room = Instantiator('cal.Room').build
        kw = dict(company=eupen)
        kw.update(dd.str2kw('name', _("Mirrored room")))
        kw.update(fee=rent20)
        self.spiegel = room(**kw)
        yield self.spiegel

        kw.update(dd.str2kw('name', _("Feast room")))
        kw.update(fee=rent10)
        self.pc_eupen = room(**kw)
        yield self.pc_eupen

        kw = dict(company=bbach)
        kw.update(dd.str2kw('name', _("Conferences room")))
        self.konf = room(**kw)
        yield self.konf

        kw.update(dd.str2kw('name', _("Training room")))
        self.pc_bbach = room(**kw)
        yield self.pc_bbach

        kw = dict(company=kelmis)
        kw.update(dd.str2kw('name', _("Training room")))
        self.pc_kelmis = room(**kw)
        yield self.pc_kelmis

        kw = dict(company=stvith)
        kw.update(dd.str2kw('name', _("Training room")))
        self.pc_stvith = room(**kw)
        yield self.pc_stvith

        # a room without company
        kw = dict()
        kw.update(dd.str2kw('name', _("Outside")))
        self.outside = room(**kw)
        yield self.outside

        COLORS = Cycler(Calendar.COLOR_CHOICES)

        for u in Room.objects.all():
            obj = Calendar(name=str(u), color=COLORS.pop())
            yield obj
            #~ dd.logger.info("20131018 %s", obj)
            u.calendar = obj
            u.save()

        person = Pupil(first_name="Mike",
                       last_name="Morgan",
                       email=settings.SITE.demo_email,
                       gender=dd.Genders.male)
        yield person
        yield User(username=person.first_name.lower(),
                   partner=person,
                   user_type=UserTypes.pupil)

        person = Pupil(first_name="Mary",
                       last_name="Morgan",
                       email=settings.SITE.demo_email,
                       gender=dd.Genders.female)
        yield person
        yield User(username=person.first_name.lower(),
                   partner=person,
                   user_type=UserTypes.pupil)
コード例 #21
0
ファイル: tantsukool.py プロジェクト: forexblog/book
    def objects(self):

        yield super(Loader2, self).objects()

        Enrolment = rt.models.courses.Enrolment

        topic = Instantiator('courses.Topic').build
        line = Instantiator('courses.Line', 'topic event_type fee').build
        course = Instantiator('courses.Course',
                              'line room start_time end_time').build
        booking = Instantiator('rooms.Booking',
                               'room start_time end_time').build

        TEACHERS = Cycler(Teacher.objects.all())
        COMPANIES = Cycler(Company.objects.all())
        # USERS = Cycler(settings.SITE.user_model.objects.all())
        cal_users = [
            ut for ut in UserTypes.get_list_items()
            if ut.has_required_roles([OfficeUser])
        ]
        USERS = Cycler(
            settings.SITE.user_model.objects.filter(user_type__in=cal_users))

        def add_course(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            #~ kw.update(price=PRICES.pop())
            obj = course(*args, **kw)
            if obj.line.fee.tariff and obj.line.fee.tariff.number_of_events:
                obj.max_events = None
            return obj

        Product = rt.models.products.Product
        ProductCat = rt.models.products.ProductCat
        ActivityLayouts = rt.models.courses.ActivityLayouts
        PaymentTerm = rt.models.ledger.PaymentTerm

        journey_options = ProductCat(**dd.str2kw('name', _("Hotel options")))
        yield journey_options
        option = Instantiator(Product, cat=journey_options).build
        yield option(**dd.str2kw('name', _("Single room")))
        yield option(**dd.str2kw('name', _("Double room")))
        yield option(**dd.str2kw('name', _("Triple room")))
        # yield option(**dd.str2kw('name', _("Shower")))
        # yield option(**dd.str2kw('name', _("Night club")))

        # trip_options = ProductCat(**dd.str2kw('name', _("Trip options")))
        # yield trip_options
        # option = Instantiator(Product, cat=trip_options).build
        # yield option(name="Eupen Oberstadt")
        # yield option(name="Eupen Unterstadt")
        # yield option(name="Raeren")
        # yield option(name="Kelmis")
        # yield option(name="Büllingen")

        journey = Instantiator('courses.Course',
                               'line name start_date end_date').build

        def add_journey(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            kw.update(every_unit=cal.Recurrencies.once)
            kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
            return journey(*args, **kw)

        self.journeys_topic = topic(**dd.str2kw('name', _("Journeys")))
        yield self.journeys_topic
        europe = line(self.journeys_topic,
                      self.excursions,
                      self.journey_fee,
                      options_cat=journey_options,
                      course_area=ActivityLayouts.journeys,
                      fees_cat=self.journeys_cat,
                      **dd.str2kw('name', _("Europe")))

        yield europe
        yield add_journey(europe,
                          "Greece 2021",
                          i2d(20140814),
                          i2d(20140820),
                          state=courses.CourseStates.active)
        yield add_journey(europe, "London 2022", i2d(20140714), i2d(20140720))

        comp = topic(name="Latin")
        yield comp
        sport = topic(name="Sport")
        yield sport
        medit = topic(name="Vienna")
        yield medit
        externe = topic(name="Externe")
        yield externe

        obj = line(comp,
                   self.kurse,
                   self.PRICES.pop(),
                   fees_cat=self.course_fees,
                   ref="comp",
                   **dd.str2kw('name', _("First Steps")))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=3)
        kw.update(start_date=demo_date(-430))
        kw.update(state=courses.CourseStates.active)
        kw.update(every=1)
        kw.update(every_unit=cal.Recurrencies.weekly)

        yield add_course(obj,
                         self.pc_bbach,
                         "13:30",
                         "15:00",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_eupen,
                         "17:30",
                         "19:00",
                         wednesday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_kelmis,
                         "13:30",
                         "15:00",
                         friday=True,
                         **kw)

        desc = """
        bla bla bla.
    """
        obj = line(comp,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="WWW",
                   fees_cat=self.course_fees,
                   description=desc,
                   **dd.str2kw('name', _("Master class")))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=4)
        kw.update(start_date=demo_date(-210))
        kw.update(state=courses.CourseStates.active)
        yield add_course(obj,
                         self.pc_bbach,
                         "13:30",
                         "15:00",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_eupen,
                         "17:30",
                         "19:00",
                         wednesday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_kelmis,
                         "13:30",
                         "15:00",
                         friday=True,
                         **kw)

        obj = line(sport,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="BT",
                   fees_cat=self.course_fees,
                   **dd.str2kw('name', _("Belly dancing")))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=10)
        kw.update(start_date=demo_date(-420))
        kw.update(state=CourseStates.active)
        yield add_course(obj,
                         self.spiegel,
                         "19:00",
                         "20:00",
                         wednesday=True,
                         **kw)

        obj = line(sport,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="FG",
                   fees_cat=self.course_fees,
                   **dd.str2kw('name', _("Functional gymnastics")))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=5)
        kw.update(start_date=demo_date(-230))
        yield add_course(obj,
                         self.spiegel,
                         "11:00",
                         "12:00",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.spiegel,
                         "13:30",
                         "14:30",
                         monday=True,
                         **kw)

        obj = line(sport,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="Rücken",
                   fees_cat=self.course_fees,
                   **dd.str2kw('name', _("Swimming")))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=20)
        kw.update(start_date=demo_date(50))
        yield add_course(obj,
                         self.spiegel,
                         "11:00",
                         "12:00",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.spiegel,
                         "13:30",
                         "14:30",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_stvith,
                         "11:00",
                         "12:00",
                         tuesday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_stvith,
                         "13:30",
                         "14:30",
                         tuesday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_kelmis,
                         "11:00",
                         "12:00",
                         thursday=True,
                         **kw)
        yield add_course(obj,
                         self.pc_kelmis,
                         "13:30",
                         "14:30",
                         thursday=True,
                         **kw)

        obj = line(sport,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="SV",
                   fees_cat=self.course_fees,
                   **dd.str2kw('name', _("Self-defence")))
        yield obj
        kw = dict(max_events=6)
        kw.update(max_places=12)
        kw.update(start_date=demo_date(-80))
        kw.update(state=CourseStates.active)
        yield add_course(obj,
                         self.spiegel,
                         "18:00",
                         "19:00",
                         friday=True,
                         **kw)
        yield add_course(obj,
                         self.spiegel,
                         "19:00",
                         "20:00",
                         friday=True,
                         **kw)

        obj = line(medit,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="GLQ",
                   fees_cat=self.course_fees,
                   name="GuoLin-Qigong")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-310))
        kw.update(state=CourseStates.active)
        yield add_course(obj,
                         self.spiegel,
                         "18:00",
                         "19:30",
                         monday=True,
                         **kw)
        yield add_course(obj,
                         self.spiegel,
                         "19:00",
                         "20:30",
                         friday=True,
                         **kw)

        obj = line(medit,
                   self.kurse,
                   self.PRICES.pop(),
                   ref="MED",
                   fees_cat=self.course_fees,
                   **dd.babelkw(
                       'name',
                       de="Den Kopf frei machen - zur inneren Ruhe finden",
                       en="Finding your inner peace"))
        yield obj
        kw = dict(max_events=10)
        kw.update(max_places=30)
        kw.update(start_date=demo_date(-610))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        kw.update(start_date=demo_date(-110))
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(), name="Yoga")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-560))
        kw.update(max_places=20)
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        for obj in Course.objects.filter(ref__isnull=True):
            if obj.line.fee.tariff and obj.line.fee.tariff.number_of_events:
                obj.ref = "%03dC" % obj.id
            else:
                obj.ref = "%03d" % obj.id
            yield obj

        EXTS = Cycler(self.ext1, self.ext2)

        def add_booking(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(event_type=self.seminare)
            #~ kw.update(price=PRICES.pop())
            #~ kw.update(fee=PRICES.pop())
            #~ kw.update(calendar=self.kurse)
            kw.update(every=1)
            kw.update(company=EXTS.pop())
            return booking(*args, **kw)

        #~ obj = line(externe,self.kurse,PRICES.pop(),**dd.babelkw('name',
        #~ de="Raumbuchung",en="Room booking"))
        #~ yield obj
        kw = dict(max_events=10)
        kw.update(every_unit=cal.Recurrencies.weekly)
        kw.update(start_date=demo_date(160))
        kw.update(state=BookingStates.registered)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", tuesday=True, **kw)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", thursday=True, **kw)

        kw = dict(max_events=1)
        kw.update(every_unit=cal.Recurrencies.once)
        kw.update(company=COMPANIES.pop())
        kw.update(every_unit=cal.Recurrencies.once)
        yield add_booking(self.konf, "10:00", "14:00", **kw)

        # a series of five week-ends:
        kw = dict()
        kw.update(user=USERS.pop())
        kw.update(teacher=TEACHERS.pop())
        kw.update(every_unit=cal.Recurrencies.monthly)
        kw.update(max_events=5)
        kw.update(friday=True)
        kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
        yield journey(europe, "Five Weekends 2020", i2d(20200619),
                      i2d(20200621), **kw)

        PUPILS = Cycler(Pupil.objects.all())

        kw = dict(state=EnrolmentStates.confirmed)
        for course in Course.objects.all():
            kw.update(user=USERS.pop(), course=course)
            for i in range(2):
                kw.update(pupil=PUPILS.pop())
                obj = Enrolment(**kw)
                yield obj

        ses = settings.SITE.login()

        for model in (Course, Booking):
            for obj in model.objects.all():
                rc = ses.run(obj.do_update_events)
                if not rc.get('success', False):
                    raise Exception("update_reminders on %s returned %s" %
                                    (obj, rc))

        Event = rt.models.cal.Event
        EntryStates = rt.models.cal.EntryStates
        qs = Event.objects.filter(start_date__lt=dd.demo_date()).order_by('id')
        for i, e in enumerate(qs):
            if i % 8:
                e.state = EntryStates.took_place
                yield e
コード例 #22
0
ファイル: demo.py プロジェクト: khchine5/noi
def faculty(name, fr, en, **kw):
    kw.update(**dd.babelkw('name', de=name, fr=fr, en=en))
    # kw.update(name=name, name_fr=name_fr, name_en=name_en)
    return rt.modules.faculties.Faculty(**kw)
コード例 #23
0
ファイル: std.py プロジェクト: khchine5/welfare
def objects():

    IncomeConfirmation = rt.modules.aids.IncomeConfirmation
    RefundConfirmation = rt.modules.aids.RefundConfirmation
    SimpleConfirmation = rt.modules.aids.SimpleConfirmation
    ConfirmationTypes = rt.modules.aids.ConfirmationTypes

    aidType = Instantiator(
        'aids.AidType',
        confirmation_type=ConfirmationTypes.get_for_model(
            IncomeConfirmation)).build
    kw = dd.babelkw(
        'name',
        de="Eingliederungseinkommen",
        en="Eingliederungseinkommen",
        fr="Revenu d'intégration")
    kw.update(short_name="EiEi")
    kw.update(is_integ_duty=True)
    kw.update(body_template='integ_income.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    kw = dd.babelkw(
        'name',
        de="Ausländerbeihilfe",
        en="Ausländerbeihilfe",
        fr="Aide aux immigrants")
    kw.update(body_template='foreigner_income.body.html')
    kw.update(is_integ_duty=True)
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    kw = dd.babelkw(
        'name',
        de="Feste Beihilfe",
        en="Feste Beihilfe",
        fr="Revenu fixe")
    kw.update(body_template='fixed_income.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    aidType = Instantiator(
        'aids.AidType', "name",
        confirmation_type=ConfirmationTypes.get_for_model(
            SimpleConfirmation)).build
    kw = dd.babelkw(
        'name',
        de="Erstattung",
        en="Erstattung",
        fr="Remboursement")
    kw.update(body_template='certificate.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)
    kw = dd.babelkw(
        'name',
        de="Übernahmeschein",
        en="Übernahmeschein",
        fr="Übernahmeschein")
    kw.update(body_template='certificate.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    aidType = Instantiator(
        'aids.AidType', "name",
        confirmation_type=ConfirmationTypes.get_for_model(
            RefundConfirmation)).build

    kw = dd.babelkw(
        'name',
        de="Übernahme von Arzt- und/oder Medikamentenkosten",
        en="Medical costs",
        fr="Remboursement de frais médicaux")
    kw.update(short_name="AMK")
    fkw = dd.str2kw('name', _("Pharmacy"))  # Apotheke
    cct_pharmacy = rt.modules.pcsw.ClientContactType.objects.get(**fkw)
    kw.update(pharmacy_type=cct_pharmacy)
    kw.update(body_template='medical_refund.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    kw = dd.babelkw(
        'name',
        de="Dringende Medizinische Hilfe",
        nl="Dringende medische Hulp",
        en="Urgent Medical Care",
        fr="Aide Médicale Urgente")
    kw.update(short_name="DMH")
    kw.update(is_urgent=True)
    kw.update(body_template='urgent_medical_care.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    aidType = Instantiator(
        'aids.AidType', "name",
        confirmation_type=ConfirmationTypes.get_for_model(
            SimpleConfirmation)).build
    kw = dd.babelkw(
        'name',
        de="Möbellager",
        en="Furniture",
        fr="Mobilier")
    kw.update(body_template='furniture.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    kw = dd.babelkw(
        'name',
        de="Heizkosten",
        en="Heating costs",
        fr="Frais de chauffage")
    kw.update(body_template='heating_refund.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    croix_rouge = rt.modules.contacts.Company(name="Belgisches Rotes Kreuz")
    yield croix_rouge

    kw = dd.babelkw(
        'name',
        de="Lebensmittelbank",
        en="Food bank",
        fr="Banque alimentaire")
    kw.update(confirmed_by_primary_coach=False)
    kw.update(company=croix_rouge)
    kw.update(body_template='food_bank.body.html')
    kw.update(dd.str2kw('excerpt_title', _("Attestation")))
    yield aidType(**kw)

    kw = dd.babelkw(
        'name',
        de="Kleiderkammer",
        en="Clothes bank",
        fr="Banque aux vêtements")
    kw.update(body_template='clothing_bank.body.html')
    kw.update(company=croix_rouge)
    kw.update(dd.str2kw('excerpt_title', _("Clothing costs transfer")))
    yield aidType(**kw)

    ## Categories

    Category = dd.resolve_model('aids.Category')
    yield Category(**babel_values(
        'name',
        en="Living together",
        de="Zusammenlebend",
        fr="Cohabitant"))
    yield Category(**babel_values(
        'name',
        en="Living alone",
        de="Alleinstehend",
        fr="Persone isolée"))
    yield Category(**babel_values(
        'name',
        en="Person with family at charge",
        de="Person mit Familienlasten",
        fr="Personne qui cohabite avec une famille à sa charge"))

    Decider = dd.resolve_model('boards.Board')
    yield Decider(**dd.str2kw(
        'name', _("Social Board (SB)")))  # "Sozialhilferat (SHR)"
    yield Decider(**dd.str2kw(
        'name', _("Social Commission (SC)")))  # Sozialhilfeausschuss (SAS)
    yield Decider(**dd.str2kw(
        'name', _("Permanent Board (PB)")))  # Ständiges Präsidium (SP)

    ContentType = rt.modules.contenttypes.ContentType
    ExcerptType = rt.modules.excerpts.ExcerptType
    ConfirmationTypes = rt.modules.aids.ConfirmationTypes
    for ct in ConfirmationTypes.items():
        kw = dict(
            body_template='certificate.body.html',
            template='Default.odt',
            primary=True,
            # print_directly=False,
            content_type=ContentType.objects.get_for_model(ct.model))
        kw.update(dd.str2kw('name', ct.model._meta.verbose_name))
        yield ExcerptType.update_for_model(ct.model, **kw)
コード例 #24
0
    def objects(self):

        yield super(Loader2, self).objects()

        Enrolment = rt.models.courses.Enrolment

        topic = Instantiator('courses.Topic').build
        line = Instantiator('courses.Line', 'topic event_type fee').build
        course = Instantiator(
            'courses.Course', 'line room start_time end_time').build
        booking = Instantiator(
            'rooms.Booking', 'room start_time end_time').build

        TEACHERS = Cycler(Teacher.objects.all())
        COMPANIES = Cycler(Company.objects.all())
        USERS = Cycler(settings.SITE.user_model.objects.all())

        def add_course(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            #~ kw.update(price=PRICES.pop())
            obj = course(*args, **kw)
            if obj.line.fee.number_of_events:
                obj.max_events = None
            return obj

        Product = rt.models.products.Product
        ProductCat = rt.models.products.ProductCat
        CourseAreas = rt.models.courses.CourseAreas
        PaymentTerm = rt.models.ledger.PaymentTerm

        journey_options = ProductCat(**dd.str2kw(
            'name', _("Hotel options")))
        yield journey_options
        option = Instantiator(Product, cat=journey_options).build
        yield option(**dd.str2kw('name', _("Single room")))
        yield option(**dd.str2kw('name', _("Double room")))
        yield option(**dd.str2kw('name', _("Triple room")))
        # yield option(**dd.str2kw('name', _("Shower")))
        # yield option(**dd.str2kw('name', _("Night club")))

        # trip_options = ProductCat(**dd.str2kw('name', _("Trip options")))
        # yield trip_options
        # option = Instantiator(Product, cat=trip_options).build
        # yield option(name="Eupen Oberstadt")
        # yield option(name="Eupen Unterstadt")
        # yield option(name="Raeren")
        # yield option(name="Kelmis")
        # yield option(name="Büllingen")

        journey = Instantiator(
            'courses.Course', 'line name start_date end_date').build

        def add_journey(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            kw.update(every_unit=cal.Recurrencies.once)
            kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
            return journey(*args, **kw)

        self.journeys_topic = topic(**dd.str2kw('name', _("Journeys")))
        yield self.journeys_topic
        europe = line(self.journeys_topic,
                      self.excursions,
                      self.journey_fee,
                      options_cat=journey_options,
                      course_area=CourseAreas.journeys,
                      fees_cat=self.journeys_cat,
                      **dd.str2kw('name', _("Europe")))

        yield europe
        yield add_journey(europe, "Greece 2014",
                          i2d(20140814), i2d(20140820),
                          state=courses.CourseStates.active)
        yield add_journey(europe, "London 2014",
                          i2d(20140714), i2d(20140720))

        comp = topic(name="Computer")
        yield comp
        sport = topic(name="Sport")
        yield sport
        medit = topic(name="Meditation")
        yield medit
        externe = topic(name="Externe")
        yield externe

        obj = line(comp, self.kurse, self.PRICES.pop(),
                   fees_cat=self.course_fees,
                   ref="comp",
                   **dd.babelkw('name', de="Erste Schritte", en="First Steps"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=3)
        kw.update(start_date=demo_date(-430))
        kw.update(state=courses.CourseStates.active)
        kw.update(every=1)
        kw.update(every_unit=cal.Recurrencies.weekly)

        yield add_course(obj, self.pc_bbach, "13:30", "15:00",
                         monday=True, **kw)
        yield add_course(obj, self.pc_eupen, "17:30", "19:00",
                         wednesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "15:00",
                         friday=True, **kw)

        desc = """
    Behandelte Themengebiete:

    - Grundlagen, Voraussetzungen
    - Arbeiten im WWW unter Verwendung eines Browsers
    - Navigieren im WWW
    - Links in die Linkleiste legen
    - aus Webseiten heraus drucken
    - Favoriten bzw. Lesezeichen verwenden
    - Aufgabe und Funktionsweise von Suchmaschinen
    - Elektronische Post: E-Mails verfassen, senden, empfangen, beantworten
    - E-Mails mit Anlagen
    - E-mail Sicherheit
    - Tipps und Tricks
    """
        obj = line(
            comp, self.kurse, self.PRICES.pop(),
            ref="WWW",
            fees_cat=self.course_fees,
            description=desc, **dd.babelkw(
                'name',
                de="Internet: World Wide Web für Anfänger",
                en="Internet for beginners"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=4)
        kw.update(start_date=demo_date(-210))
        kw.update(state=courses.CourseStates.active)
        yield add_course(obj, self.pc_bbach, "13:30", "15:00",
                         monday=True, **kw)
        yield add_course(obj, self.pc_eupen, "17:30", "19:00",
                         wednesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "15:00",
                         friday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="BT",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Bauchtanz", en="Belly dancing"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=10)
        kw.update(start_date=demo_date(-420))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "19:00", "20:00",
                         wednesday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="FG",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name',
                                de="Funktionsgymnastik",
                                en="Functional gymnastics"))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=5)
        kw.update(start_date=demo_date(-230))
        yield add_course(obj, self.spiegel, "11:00", "12:00", monday=True, **kw)
        yield add_course(obj, self.spiegel, "13:30", "14:30", monday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="Rücken",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Rücken fit durch Schwimmen", en="Swimming"))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=20)
        kw.update(start_date=demo_date(50))
        yield add_course(obj, self.spiegel, "11:00", "12:00", monday=True, **kw)
        yield add_course(obj, self.spiegel, "13:30", "14:30", monday=True, **kw)
        yield add_course(obj, self.pc_stvith, "11:00", "12:00", tuesday=True, **kw)
        yield add_course(obj, self.pc_stvith, "13:30", "14:30", tuesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "11:00", "12:00", thursday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "14:30", thursday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="SV",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Selbstverteidigung im Alltag", en="Self-defence"))
        yield obj
        kw = dict(max_events=6)
        kw.update(max_places=12)
        kw.update(start_date=demo_date(-80))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "18:00", "19:00", friday=True, **kw)
        yield add_course(obj, self.spiegel, "19:00", "20:00", friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(),
                   ref="GLQ",
                   fees_cat=self.course_fees,
                   name="GuoLin-Qigong")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-310))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "18:00", "19:30",
                         monday=True, **kw)
        yield add_course(obj, self.spiegel, "19:00", "20:30",
                         friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(),
                   ref="MED",
                   fees_cat=self.course_fees,
                   **dd.babelkw(
                       'name',
                       de="Den Kopf frei machen - zur inneren Ruhe finden",
                       en="Finding your inner peace"))
        yield obj
        kw = dict(max_events=10)
        kw.update(max_places=30)
        kw.update(start_date=demo_date(-610))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        kw.update(start_date=demo_date(-110))
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(), name="Yoga")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-560))
        kw.update(max_places=20)
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        for obj in Course.objects.filter(ref__isnull=True):
            if obj.line.fee.number_of_events:
                obj.ref = "%03dC" % obj.id
            else:
                obj.ref = "%03d" % obj.id
            yield obj

        EXTS = Cycler(self.ext1, self.ext2)

        def add_booking(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(event_type=self.seminare)
            #~ kw.update(price=PRICES.pop())
            #~ kw.update(fee=PRICES.pop())
            #~ kw.update(calendar=self.kurse)
            kw.update(every=1)
            kw.update(company=EXTS.pop())
            return booking(*args, **kw)

        #~ obj = line(externe,self.kurse,PRICES.pop(),**dd.babelkw('name',
            #~ de="Raumbuchung",en="Room booking"))
        #~ yield obj
        kw = dict(max_events=10)
        kw.update(every_unit=cal.Recurrencies.weekly)
        kw.update(start_date=demo_date(160))
        kw.update(state=BookingStates.registered)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", tuesday=True, **kw)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", thursday=True, **kw)

        kw = dict(max_events=1)
        kw.update(every_unit=cal.Recurrencies.once)
        kw.update(company=COMPANIES.pop())
        kw.update(every_unit=cal.Recurrencies.once)
        yield add_booking(self.konf, "10:00", "14:00", **kw)

        # a series of five week-ends:
        kw = dict()
        kw.update(user=USERS.pop())
        kw.update(teacher=TEACHERS.pop())
        kw.update(every_unit=cal.Recurrencies.monthly)
        kw.update(max_events=5)
        kw.update(friday=True)
        kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
        yield journey(europe, "Five Weekends 2015",
                      i2d(20150619), i2d(20150621), **kw)

        # PUPILS = Cycler()
        #~ print 20130712, Pupil.objects.all()
        COURSES = Cycler(Course.objects.filter(
            line__fee__isnull=False).order_by('room__company__city'))
        # STATES = Cycler(EnrolmentStates.objects())
        FREE_EVENTS = Cycler([3, 2, 5, -2])

        # assert len(USERS) > 1
        pupils = Pupil.objects.order_by('id')
        # print("20171028 {} courses, {} pupils".format(
        #     len(COURSES), pupils.count()))
        # assert pupils.count() == 50

        n = 0
        for pupil in pupils:
            for i in range(pupil.id % 6):
                n += 1
                # every pupil can be in up to 5 courses. That's a bit
                # unrealistic, but we have 25 courses and 35
                # pupils and want to have
                course = COURSES.pop()

                def coursedate(*args, **kwargs):
                    return date_offset(course.start_date, *args, **kwargs)

                kw = dict(user=USERS.pop(), course=course, pupil=pupil)
                #~ print 20130712, kw
                story = ENROLMENT_STORIES.pop()
                assert isinstance(story, list)
                for rd, sd, ed in story:
                    # kw.update(state=STATES.pop())
                    # enrolments are requested from 3 weeks before until 1
                    # week after start date of course:
                    # kw.update(request_date=coursedate(i % 28 - 7))
                    kw.update(request_date=coursedate(rd))
                    if course.line == europe:
                        if n % 3 == 0:
                            kw.update(places=2)
                    obj = Enrolment(**kw)
                    # print("20171027b {}".format(obj))
                    obj.full_clean()
                    if sd is not None:
                        obj.start_date = coursedate(sd)
                        # obj.request_date = obj.start_date
                    if ed is not None:
                        obj.end_date = coursedate(ed)
                    if n % 10 == 0:
                        obj.state = EnrolmentStates.requested
                    elif n % 13 == 0:
                        obj.state = EnrolmentStates.cancelled
                    else:
                        obj.state = EnrolmentStates.confirmed
                    if n % 9 == 0:
                        if course.line.fee.number_of_events:
                            obj.free_events = FREE_EVENTS.pop()
                    yield obj

        ses = settings.SITE.login()

        for model in (Course, Booking):
            for obj in model.objects.all():
                rc = ses.run(obj.do_update_events)
                if not rc.get('success', False):
                    raise Exception("update_reminders on %s returned %s" %
                                    (obj, rc))

        Event = rt.models.cal.Event
        EntryStates = rt.models.cal.EntryStates
        qs = Event.objects.filter(
            start_date__lt=dd.demo_date()).order_by('id')
        for i, e in enumerate(qs):
            if i % 8:
                e.state = EntryStates.took_place
                yield e
コード例 #25
0
ファイル: voga.py プロジェクト: lino-framework/book
    def objects(self):
        VatClasses = rt.models.vat.VatClasses
        # yield PupilType(ref="M", name="Mitglied")
        # yield PupilType(ref="H", name="Helfer")
        # yield PupilType(ref="L", name="LFV")
        # yield PupilType(ref="C", name="C*K")
        #~ yield PupilType(ref="E",name="Extern")

        yield TeacherType(ref="S", **dd.str2kw('name', _("Independant")))
        yield TeacherType(ref="EP", **dd.babelkw('name', de="Ehrenamtlich pauschal", fr="Volontaire (forfait)", en="Voluntary (flat)"))
        yield TeacherType(ref="ER", **dd.babelkw('name', de="Ehrenamtlich real", fr="Volontaire (réel)", en="Voluntary (real)"))
        yield TeacherType(ref="LBA", **dd.babelkw('name', de="LBA", fr="ALE", en="LEA"))
        #~ yield TeacherType(ref="A",**dd.babelkw('name',de="Andere",fr="Autre",en="Other"))

        company = Instantiator('contacts.Company', 'name city:name').build

        we = company("Die Buche V.o.G.", "Eupen",
                     street="Birkenweg", street_no=5,
                     vat_id="BE0123456789")
        yield we
        settings.SITE.site_config.site_company = we
        yield settings.SITE.site_config

        ProductCat = rt.models.products.ProductCat
        # productcat = Instantiator('products.ProductCat').build

        self.course_fees = ProductCat(**dd.str2kw(
            'name', _("Participation fees")))
        yield self.course_fees

        self.trips = ProductCat(**dd.str2kw('name', _("Trips")))
        # et="Väljasõidud", de="Ausflüge", fr="Excursions"))
        yield self.trips

        kw = dd.str2kw('name', _("Journeys"))
        self.journeys_cat = ProductCat(**kw)
        yield self.journeys_cat

        kw.update(sales_price="295.00")
        self.journey_fee = Product(cat=self.journeys_cat, **kw)
        yield self.journey_fee

        rent = ProductCat(**dd.str2kw('name', _("Room renting")))
        # et="Ruumiüür", de="Raummiete", fr="Loyer"))
        yield rent
        # other = ProductCat(**dd.str2kw('name', _("Other")))
        # et="Muud", de="Sonstige", fr="Autres"))
        # yield other

        t5 = babeld(Tariff, _("5 times"), number_of_events=5, min_asset=1)
        yield t5
        t8 = babeld(Tariff, _("8 times"), number_of_events=8, min_asset=2)
        yield t8
        t12 = babeld(
            Tariff, _("12 times"), number_of_events=12, min_asset=4)
        yield t12

        product = Instantiator(
            'products.Product', "sales_price cat name",
            vat_class=VatClasses.normal).build
        yield product("20", self.course_fees, "20€")
        yield product("48", self.course_fees, "48€/8 hours", tariff=t8)
        # yield p
        # yield Tariff(product=p, number_of_events=8, min_asset=2)
        
        yield product("64", self.course_fees, "64€/12 hours", tariff=t12)
        # yield p
        # yield Tariff(product=p, number_of_events=12, min_asset=4)
            
        yield product("50", self.course_fees, "50€/5 hours", tariff=t5)
        # yield p
        # yield Tariff(product=p, number_of_events=5, min_asset=1)
        
        yield product("80", self.course_fees, "80€")

        rent20 = product("20", rent, "Spiegelraum Eupen")
        yield rent20
        rent10 = product("10", rent, **dd.babelkw(
            'name',
            en="Rent per meeting", et="Ruumi üürimine",
            de="Raummiete pro Versammlung",
            fr="Loyer par réunion"))
        yield rent10

        self.PRICES = Cycler(Product.objects.filter(cat=self.course_fees))

        event_type = Instantiator('cal.EventType').build
        kw = dd.str2kw('name', _("Courses"))
        kw.update(dd.str2kw('event_label', _("Hour")))
        self.kurse = event_type(**kw)
        yield self.kurse
        settings.SITE.site_config.default_event_type = self.kurse
        yield settings.SITE.site_config

        self.seminare = event_type(**dd.str2kw('name', _("Seminars")))
        yield self.seminare

        self.excursions = event_type(
            max_days=10, **dd.str2kw('name', _("Excursions")))
        # de="Ausflüge",
        #  fr="Excursions",
        #  en="Excursions",
        yield self.excursions
        
        self.hikes = event_type(
            max_days=60, **dd.str2kw('name', _("Hikes")))
        # de="Wanderungen",
        # fr="Randonnées",
        # en="Hikes",
        yield self.hikes

        yield event_type(**dd.str2kw('name', _("Meetings")))
                                      # de="Versammlungen",
                                      # fr="Réunions",
                                      # en="Meetings",

        yield event_type(
            email_template='Team.eml.html',
            **dd.str2kw('name', _("Team Meetings")))
                         # de="Team-Besprechungen",
                         # fr="Coordinations en équipe",
                         # en="Team Meetings",

        #~ yield event_type(**dd.babelkw('name',
              #~ de="Feiertage",
              #~ fr="Jours fériés",
              #~ en="Holidays",
              #~ ))
        #~

        company = Instantiator('contacts.Company', 'name city:name').build
        eupen = company("Lern- und Begegnungszentrum", "Eupen",
                        street="Kirchstraße", street_no=39, street_box="/B2")
        yield eupen
        bbach = company("Lern- und Begegnungszentrum", "Butgenbach")
        yield bbach
        kelmis = company("Zur Klüüs", "Kelmis")
        yield kelmis
        stvith = company("Sport- und Freizeitzentrum", "Sankt Vith")
        yield stvith

        self.ext1 = company("AA Neudorf", "Raeren")
        yield self.ext1
        self.ext2 = company("Nisperter Schützenverein", "Eupen")
        yield self.ext2

        room = Instantiator('cal.Room').build
        kw = dict(company=eupen)
        kw.update(dd.str2kw('name', _("Mirrored room")))
        kw.update(fee=rent20)
        self.spiegel = room(**kw)
        yield self.spiegel

        kw.update(dd.str2kw('name', _("Computer room")))
        kw.update(fee=rent10)
        self.pc_eupen = room(**kw)
        yield self.pc_eupen

        kw = dict(company=bbach)
        kw.update(dd.str2kw('name', _("Conferences room")))
        self.konf = room(**kw)
        yield self.konf

        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_bbach = room(**kw)
        yield self.pc_bbach

        kw = dict(company=kelmis)
        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_kelmis = room(**kw)
        yield self.pc_kelmis

        kw = dict(company=stvith)
        kw.update(dd.str2kw('name', _("Computer room")))
        self.pc_stvith = room(**kw)
        yield self.pc_stvith

        # a room without company
        kw = dict()
        kw.update(dd.str2kw('name', _("Outside")))
        self.outside = room(**kw)
        yield self.outside

        COLORS = Cycler(Calendar.COLOR_CHOICES)

        for u in Room.objects.all():
            obj = Calendar(name=str(u), color=COLORS.pop())
            yield obj
            #~ logger.info("20131018 %s", obj)
            u.calendar = obj
            u.save()
コード例 #26
0
ファイル: voga.py プロジェクト: lino-framework/book
    def objects(self):

        yield super(Loader2, self).objects()

        Enrolment = rt.models.courses.Enrolment

        topic = Instantiator('courses.Topic').build
        line = Instantiator('courses.Line', 'topic event_type fee').build
        course = Instantiator(
            'courses.Course', 'line room start_time end_time').build
        booking = Instantiator(
            'rooms.Booking', 'room start_time end_time').build

        TEACHERS = Cycler(Teacher.objects.all())
        COMPANIES = Cycler(Company.objects.all())
        USERS = Cycler(settings.SITE.user_model.objects.all())

        def add_course(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            #~ kw.update(price=PRICES.pop())
            obj = course(*args, **kw)
            if obj.line.fee.tariff and obj.line.fee.tariff.number_of_events:
                obj.max_events = None
            return obj

        Product = rt.models.products.Product
        ProductCat = rt.models.products.ProductCat
        CourseAreas = rt.models.courses.CourseAreas
        PaymentTerm = rt.models.ledger.PaymentTerm

        journey_options = ProductCat(**dd.str2kw(
            'name', _("Hotel options")))
        yield journey_options
        option = Instantiator(Product, cat=journey_options).build
        yield option(**dd.str2kw('name', _("Single room")))
        yield option(**dd.str2kw('name', _("Double room")))
        yield option(**dd.str2kw('name', _("Triple room")))
        # yield option(**dd.str2kw('name', _("Shower")))
        # yield option(**dd.str2kw('name', _("Night club")))

        # trip_options = ProductCat(**dd.str2kw('name', _("Trip options")))
        # yield trip_options
        # option = Instantiator(Product, cat=trip_options).build
        # yield option(name="Eupen Oberstadt")
        # yield option(name="Eupen Unterstadt")
        # yield option(name="Raeren")
        # yield option(name="Kelmis")
        # yield option(name="Büllingen")

        journey = Instantiator(
            'courses.Course', 'line name start_date end_date').build

        def add_journey(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(teacher=TEACHERS.pop())
            kw.update(every_unit=cal.Recurrencies.once)
            kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
            return journey(*args, **kw)

        self.journeys_topic = topic(**dd.str2kw('name', _("Journeys")))
        yield self.journeys_topic
        europe = line(self.journeys_topic,
                      self.excursions,
                      self.journey_fee,
                      options_cat=journey_options,
                      course_area=CourseAreas.journeys,
                      fees_cat=self.journeys_cat,
                      **dd.str2kw('name', _("Europe")))

        yield europe
        yield add_journey(europe, "Greece 2014",
                          i2d(20140814), i2d(20140820),
                          state=courses.CourseStates.active)
        yield add_journey(europe, "London 2014",
                          i2d(20140714), i2d(20140720))

        comp = topic(name="Computer")
        yield comp
        sport = topic(name="Sport")
        yield sport
        medit = topic(name="Meditation")
        yield medit
        externe = topic(name="Externe")
        yield externe

        obj = line(comp, self.kurse, self.PRICES.pop(),
                   fees_cat=self.course_fees,
                   ref="comp",
                   **dd.babelkw('name', de="Erste Schritte", en="First Steps"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=3)
        kw.update(start_date=demo_date(-430))
        kw.update(state=courses.CourseStates.active)
        kw.update(every=1)
        kw.update(every_unit=cal.Recurrencies.weekly)

        yield add_course(obj, self.pc_bbach, "13:30", "15:00",
                         monday=True, **kw)
        yield add_course(obj, self.pc_eupen, "17:30", "19:00",
                         wednesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "15:00",
                         friday=True, **kw)

        desc = """
    Behandelte Themengebiete:

    - Grundlagen, Voraussetzungen
    - Arbeiten im WWW unter Verwendung eines Browsers
    - Navigieren im WWW
    - Links in die Linkleiste legen
    - aus Webseiten heraus drucken
    - Favoriten bzw. Lesezeichen verwenden
    - Aufgabe und Funktionsweise von Suchmaschinen
    - Elektronische Post: E-Mails verfassen, senden, empfangen, beantworten
    - E-Mails mit Anlagen
    - E-mail Sicherheit
    - Tipps und Tricks
    """
        obj = line(
            comp, self.kurse, self.PRICES.pop(),
            ref="WWW",
            fees_cat=self.course_fees,
            description=desc, **dd.babelkw(
                'name',
                de="Internet: World Wide Web für Anfänger",
                en="Internet for beginners"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=4)
        kw.update(start_date=demo_date(-210))
        kw.update(state=courses.CourseStates.active)
        yield add_course(obj, self.pc_bbach, "13:30", "15:00",
                         monday=True, **kw)
        yield add_course(obj, self.pc_eupen, "17:30", "19:00",
                         wednesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "15:00",
                         friday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="BT",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Bauchtanz", en="Belly dancing"))
        yield obj
        kw = dict(max_events=8)
        kw.update(max_places=10)
        kw.update(start_date=demo_date(-420))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "19:00", "20:00",
                         wednesday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="FG",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name',
                                de="Funktionsgymnastik",
                                en="Functional gymnastics"))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=5)
        kw.update(start_date=demo_date(-230))
        yield add_course(obj, self.spiegel, "11:00", "12:00", monday=True, **kw)
        yield add_course(obj, self.spiegel, "13:30", "14:30", monday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="Rücken",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Rücken fit durch Schwimmen", en="Swimming"))
        yield obj
        kw = dict(max_events=10, state=CourseStates.active)
        kw.update(max_places=20)
        kw.update(start_date=demo_date(50))
        yield add_course(obj, self.spiegel, "11:00", "12:00", monday=True, **kw)
        yield add_course(obj, self.spiegel, "13:30", "14:30", monday=True, **kw)
        yield add_course(obj, self.pc_stvith, "11:00", "12:00", tuesday=True, **kw)
        yield add_course(obj, self.pc_stvith, "13:30", "14:30", tuesday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "11:00", "12:00", thursday=True, **kw)
        yield add_course(obj, self.pc_kelmis, "13:30", "14:30", thursday=True, **kw)

        obj = line(sport, self.kurse, self.PRICES.pop(),
                   ref="SV",
                   fees_cat=self.course_fees,
                   **dd.babelkw('name', de="Selbstverteidigung im Alltag", en="Self-defence"))
        yield obj
        kw = dict(max_events=6)
        kw.update(max_places=12)
        kw.update(start_date=demo_date(-80))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "18:00", "19:00", friday=True, **kw)
        yield add_course(obj, self.spiegel, "19:00", "20:00", friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(),
                   ref="GLQ",
                   fees_cat=self.course_fees,
                   name="GuoLin-Qigong")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-310))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.spiegel, "18:00", "19:30",
                         monday=True, **kw)
        yield add_course(obj, self.spiegel, "19:00", "20:30",
                         friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(),
                   ref="MED",
                   fees_cat=self.course_fees,
                   **dd.babelkw(
                       'name',
                       de="Den Kopf frei machen - zur inneren Ruhe finden",
                       en="Finding your inner peace"))
        yield obj
        kw = dict(max_events=10)
        kw.update(max_places=30)
        kw.update(start_date=demo_date(-610))
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        kw.update(start_date=demo_date(-110))
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        obj = line(medit, self.kurse, self.PRICES.pop(), name="Yoga")
        yield obj
        kw = dict(max_events=10)
        kw.update(start_date=demo_date(-560))
        kw.update(max_places=20)
        kw.update(state=CourseStates.active)
        yield add_course(obj, self.konf, "18:00", "19:30", monday=True, **kw)
        yield add_course(obj, self.konf, "19:00", "20:30", friday=True, **kw)

        for obj in Course.objects.filter(ref__isnull=True):
            if obj.line.fee.tariff and obj.line.fee.tariff.number_of_events:
                obj.ref = "%03dC" % obj.id
            else:
                obj.ref = "%03d" % obj.id
            yield obj

        EXTS = Cycler(self.ext1, self.ext2)

        def add_booking(*args, **kw):
            kw.update(user=USERS.pop())
            kw.update(event_type=self.seminare)
            #~ kw.update(price=PRICES.pop())
            #~ kw.update(fee=PRICES.pop())
            #~ kw.update(calendar=self.kurse)
            kw.update(every=1)
            kw.update(company=EXTS.pop())
            return booking(*args, **kw)

        #~ obj = line(externe,self.kurse,PRICES.pop(),**dd.babelkw('name',
            #~ de="Raumbuchung",en="Room booking"))
        #~ yield obj
        kw = dict(max_events=10)
        kw.update(every_unit=cal.Recurrencies.weekly)
        kw.update(start_date=demo_date(160))
        kw.update(state=BookingStates.registered)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", tuesday=True, **kw)
        kw.update(company=COMPANIES.pop())
        yield add_booking(self.konf, "20:00", "22:00", thursday=True, **kw)

        kw = dict(max_events=1)
        kw.update(every_unit=cal.Recurrencies.once)
        kw.update(company=COMPANIES.pop())
        kw.update(every_unit=cal.Recurrencies.once)
        yield add_booking(self.konf, "10:00", "14:00", **kw)

        # a series of five week-ends:
        kw = dict()
        kw.update(user=USERS.pop())
        kw.update(teacher=TEACHERS.pop())
        kw.update(every_unit=cal.Recurrencies.monthly)
        kw.update(max_events=5)
        kw.update(friday=True)
        kw.update(payment_term=PaymentTerm.get_by_ref('P30'))
        yield journey(europe, "Five Weekends 2015",
                      i2d(20150619), i2d(20150621), **kw)

        # PUPILS = Cycler()
        #~ print 20130712, Pupil.objects.all()
        COURSES = Cycler(Course.objects.filter(
            line__fee__isnull=False).order_by('room__company__city'))
        # STATES = Cycler(EnrolmentStates.objects())
        FREE_EVENTS = Cycler([3, 2, 5, -2])

        # assert len(USERS) > 1
        pupils = Pupil.objects.order_by('id')
        # print("20171028 {} courses, {} pupils".format(
        #     len(COURSES), pupils.count()))
        # assert pupils.count() == 50

        n = 0
        for pupil in pupils:
            for i in range(pupil.id % 6):
                n += 1
                # every pupil can be in up to 5 courses. That's a bit
                # unrealistic, but we have 25 courses and 35
                # pupils and want to have
                course = COURSES.pop()

                def coursedate(*args, **kwargs):
                    return date_offset(course.start_date, *args, **kwargs)

                kw = dict(user=USERS.pop(), course=course, pupil=pupil)
                #~ print 20130712, kw
                story = ENROLMENT_STORIES.pop()
                assert isinstance(story, list)
                for rd, sd, ed in story:
                    # kw.update(state=STATES.pop())
                    # enrolments are requested from 3 weeks before until 1
                    # week after start date of course:
                    # kw.update(request_date=coursedate(i % 28 - 7))
                    kw.update(request_date=coursedate(rd))
                    if course.line == europe:
                        if n % 3 == 0:
                            kw.update(places=2)
                    obj = Enrolment(**kw)
                    # print("20171027b {}".format(obj))
                    obj.full_clean()
                    if sd is not None:
                        obj.start_date = coursedate(sd)
                        # obj.request_date = obj.start_date
                    if ed is not None:
                        obj.end_date = coursedate(ed)
                    if n % 10 == 0:
                        obj.state = EnrolmentStates.requested
                    elif n % 13 == 0:
                        obj.state = EnrolmentStates.cancelled
                    else:
                        obj.state = EnrolmentStates.confirmed
                    if n % 9 == 0:
                        if course.line.fee.tariff:
                            if course.line.fee.tariff.number_of_events:
                                obj.free_events = FREE_EVENTS.pop()
                    yield obj

        ses = settings.SITE.login()

        for model in (Course, Booking):
            for obj in model.objects.all():
                rc = ses.run(obj.do_update_events)
                if not rc.get('success', False):
                    raise Exception("update_reminders on %s returned %s" %
                                    (obj, rc))

        Event = rt.models.cal.Event
        EntryStates = rt.models.cal.EntryStates
        qs = Event.objects.filter(
            start_date__lt=dd.demo_date()).order_by('id')
        for i, e in enumerate(qs):
            if i % 8:
                e.state = EntryStates.took_place
                yield e