Esempio n. 1
0
def objects():

    yield lib_objects()

    SECTIONS = Cycler(rt.models.courses.Sections.objects())

    for obj in rt.models.courses.Pupil.objects.order_by('id'):
        if obj.id % 5 == 0:
            obj.is_lfv = True
        if obj.id % 6 == 0:
            obj.is_ckk = True
        if obj.id % 4 == 0:
            obj.section = SECTIONS.pop()
        elif obj.id % 10 != 0:
            obj.member_until = dd.demo_date().replace(month=12, day=31)
        yield obj

    fee_account = rt.models.accounts.Account(
        ref=dd.plugins.courses.membership_fee_account,
        type=rt.models.accounts.AccountTypes.incomes,
        default_amount=15,
        **dd.str2kw('name', _("Membership fee")))
    yield fee_account

    Journal = rt.models.ledger.Journal
    USERS = Cycler(rt.models.users.User.objects.all())
    MEMBERS = Cycler(rt.models.courses.Pupil.objects.all())

    jnl = Journal.objects.get(ref='CSH')
    membership_payments = [
        (1, 3),
        (2, 1),
        (10, 2),
        (11, 4),
        (12, 5),
    ]
    REQUEST = rt.login()

    for month, number in membership_payments:
        date = dd.demo_date().replace(month=month)
        voucher = jnl.create_voucher(
            user=USERS.pop(),
            voucher_date=date)
        yield voucher
        for i in range(number):
            M = jnl.voucher_type.get_items_model()
            kw = dict(voucher=voucher)
            kw.update(partner=MEMBERS.pop(), date=date, account=fee_account)
            kw.update(
                amount=fee_account.default_amount, dc=fee_account.type.dc)
            yield M(**kw)
        voucher.register(REQUEST)
        voucher.save()
Esempio n. 2
0
 def enrol(pupil):
     course = COURSES.pop()
     if fits(course, pupil):
         kw = dict(user=USERS.pop(), course=course, pupil=pupil)
         kw.update(request_date=dd.demo_date(-i))
         kw.update(state=STATES.pop())
         return Enrolment(**kw)
Esempio n. 3
0
def objects():
    # vt = dd.plugins.invoicing.get_voucher_type()
    # jnl_list = vt.get_journals()
    # if len(jnl_list) == 0:
    #     return
    from lino_cosi.lib.ledger.roles import LedgerStaff
    accountants = LedgerStaff.get_user_profiles()
    users = rt.models.users.User.objects.filter(
        language=dd.get_default_language(), profile__in=accountants)
    if users.count() == 0:
        return
    ses = rt.login(users[0].username)
    Plan = rt.modules.invoicing.Plan

    # we don't write invoices the last two months because we want to
    # have something in our invoicing plan.
    today = datetime.date(dd.plugins.ledger.start_year, 1, 1)
    while today < dd.demo_date(-60):
        plan = Plan.start_plan(ses.get_user(), today=today)
        yield plan
        plan.fill_plan(ses)
        # for i in plan.items.all()[:9]:
        for i in plan.items.all():
            obj = i.create_invoice(ses)
            assert obj is not None
            yield obj
        today = DurationUnits.months.add_duration(today, 1)
Esempio n. 4
0
def objects():
    CLIENTS = Cycler(pcsw.Client.objects.filter(
        client_state=pcsw.ClientStates.coached))
    COMPANIES = Cycler(contacts.Company.objects.all())
    for i in range(10):
        yield create(CLIENTS.pop(), COMPANIES.pop(),
                     dd.demo_date(i), i % 2)
Esempio n. 5
0
def objects():
    # vt = dd.plugins.invoicing.get_voucher_type()
    # jnl_list = vt.get_journals()
    # if len(jnl_list) == 0:
    #     return
    from lino_xl.lib.ledger.roles import LedgerStaff
    accountants = LedgerStaff.get_user_profiles()
    users = rt.models.users.User.objects.filter(
        language=dd.get_default_language(), user_type__in=accountants)
    if users.count() == 0:
        return
    ses = rt.login(users[0].username)
    Plan = rt.models.invoicing.Plan

    # we don't write invoices the last two months because we want to
    # have something in our invoicing plan.
    today = datetime.date(dd.plugins.ledger.start_year, 1, 1)
    while today < dd.demo_date(-60):
        plan = Plan.start_plan(ses.get_user(), today=today)
        yield plan
        plan.fill_plan(ses)
        # for i in plan.items.all()[:9]:
        for i in plan.items.all():
            obj = i.create_invoice(ses)
            if obj is not None:
                yield obj
            else:
                msg = "create_invoice failed for {}".format(i)
                raise Exception(msg)
                # dd.logger.warning(msg)
                # return
        today = DurationUnits.months.add_duration(today, 1)
Esempio n. 6
0
def objects():
    # vt = dd.plugins.invoicing.get_voucher_type()
    # jnl_list = vt.get_journals()
    # if len(jnl_list) == 0:
    #     return
    from lino_xl.lib.ledger.roles import LedgerStaff
    accountants = LedgerStaff.get_user_profiles()
    users = rt.models.users.User.objects.filter(
        language=dd.get_default_language(), user_type__in=accountants)
    if users.count() == 0:
        return
    ses = rt.login(users.first().username)

    for area in Area.objects.all():
        today = datetime.date(dd.plugins.ledger.start_year, 1, 1)
        while today < dd.demo_date(-60):
            plan = Plan.run_start_plan(ses.get_user(), today=today, area=area)
            yield plan
            plan.fill_plan(ses)
            # for i in plan.items.all()[:9]:
            for i in plan.items.all():
                obj = i.create_invoice(ses)
                if obj is not None:
                    yield obj
                else:
                    msg = "create_invoice failed for {}".format(i)
                    raise Exception(msg)
                    # dd.logger.warning(msg)
                    # return
            today = DurationUnits.months.add_duration(today, 1)
Esempio n. 7
0
 def enrol(pupil):
     course = COURSES.pop()
     if fits(course, pupil):
         kw = dict(user=USERS.pop(), course=course, pupil=pupil)
         kw.update(request_date=dd.demo_date(-i))
         kw.update(state=STATES.pop())
         return Enrolment(**kw)
Esempio n. 8
0
def working_objects():
    # was previously in working
    Company = rt.models.contacts.Company
    # Vote = rt.models.votes.Vote
    SessionType = rt.models.working.SessionType
    Session = rt.models.working.Session
    Ticket = rt.models.tickets.Ticket
    User = rt.models.users.User
    UserTypes = rt.models.users.UserTypes
    # devs = (UserTypes.developer, UserTypes.senior)
    devs = [p for p in UserTypes.items()
            if p.has_required_roles([Worker])
            and not p.has_required_roles([SiteAdmin])]
    workers = User.objects.filter(user_type__in=devs)
    WORKERS = Cycler(workers)
    TYPES = Cycler(SessionType.objects.all())
    # TICKETS = Cycler(Ticket.objects.all())
    DURATIONS = Cycler([12, 138, 90, 10, 122, 209, 37, 62, 179, 233, 5])

    # every fourth ticket is unassigned and thus listed in
    # PublicTickets
    # for i, t in enumerate(Ticket.objects.exclude(private=True)):
    for i, t in enumerate(Ticket.objects.all()):
        if i % 4:
            t.assigned_to = WORKERS.pop()
            yield t

    for u in workers:

        # VOTES = Cycler(Vote.objects.filter(user=u))
        # TICKETS = Cycler(Ticket.objects.filter(assigned_to=u))
        TICKETS = Cycler(Ticket.objects.filter())
        # if len(VOTES) == 0:
        #     continue

        for offset in (0, -1, -3, -4):

            date = dd.demo_date(offset)
            worked = Duration()
            ts = datetime.datetime.combine(date, datetime.time(9, 0, 0))
            for i in range(7):
                obj = Session(
                    ticket=TICKETS.pop(),
                    session_type=TYPES.pop(), user=u)
                obj.set_datetime('start', ts)
                d = DURATIONS.pop()
                worked += d
                if offset < 0:
                    ts = DurationUnits.minutes.add_duration(ts, d)
                    obj.set_datetime('end', ts)
                yield obj
                if offset == 0 or worked > 8:
                    break

    ServiceReport = rt.models.working.ServiceReport
    welket = Company.objects.get(name="welket")
    yield ServiceReport(
        start_date=dd.today(-90), interesting_for=welket)
Esempio n. 9
0
def working_objects():
    # was previously in working
    Company = rt.models.contacts.Company
    # Vote = rt.models.votes.Vote
    SessionType = rt.models.working.SessionType
    Session = rt.models.working.Session
    Ticket = rt.models.tickets.Ticket
    User = rt.models.users.User
    UserTypes = rt.models.users.UserTypes
    # devs = (UserTypes.developer, UserTypes.senior)
    devs = [
        p for p in UserTypes.items() if p.has_required_roles([Worker])
        and not p.has_required_roles([SiteAdmin])
    ]
    workers = User.objects.filter(user_type__in=devs)
    WORKERS = Cycler(workers)
    TYPES = Cycler(SessionType.objects.all())
    # TICKETS = Cycler(Ticket.objects.all())
    DURATIONS = Cycler([12, 138, 90, 10, 122, 209, 37, 62, 179, 233, 5])

    # every fourth ticket is unassigned and thus listed in
    # PublicTickets
    # for i, t in enumerate(Ticket.objects.exclude(private=True)):
    for i, t in enumerate(Ticket.objects.all()):
        if i % 4:
            t.assigned_to = WORKERS.pop()
            yield t

    for u in workers:

        # VOTES = Cycler(Vote.objects.filter(user=u))
        # TICKETS = Cycler(Ticket.objects.filter(assigned_to=u))
        TICKETS = Cycler(Ticket.objects.filter())
        # if len(VOTES) == 0:
        #     continue

        for offset in (0, -1, -3, -4):

            date = dd.demo_date(offset)
            worked = Duration()
            ts = datetime.datetime.combine(date, datetime.time(9, 0, 0))
            for i in range(7):
                obj = Session(ticket=TICKETS.pop(),
                              session_type=TYPES.pop(),
                              user=u)
                obj.set_datetime('start', ts)
                d = DURATIONS.pop()
                worked += d
                if offset < 0:
                    ts = DurationUnits.minutes.add_duration(ts, d)
                    obj.set_datetime('end', ts)
                yield obj
                if offset == 0 or worked > 8:
                    break

    ServiceReport = rt.models.working.ServiceReport
    welket = Company.objects.get(name="welket")
    yield ServiceReport(start_date=dd.today(-90), interesting_for=welket)
Esempio n. 10
0
def objects():
    
    yield rt.login('alicia').get_user()

    if False:  # done in lino_welfare/modlib/integ/fixtures/

        TT = Cycler(rt.modules.immersion.ContractType.objects.all())
        TG = Cycler(rt.modules.immersion.Goal.objects.all())
        Training = rt.modules.immersion.Contract

        alicia = rt.login('alicia').get_user()
        selected_clients = (131, 149, 161)
        for i, pk in enumerate(selected_clients):
            kw = dict(client_id=pk)
            kw.update(type=TT.pop())
            kw.update(user=alicia)
            kw.update(goal=TG.pop())
            kw.update(applies_from=dd.demo_date(i*30))
            kw.update(applies_until=dd.demo_date(i*30+60*(i+1)))
            yield Training(**kw)
Esempio n. 11
0
def objects():
    Note = rt.modules.notes.Note
    NTYPES = Cycler(rt.modules.notes.NoteType.objects.all())
    USERS = Cycler(rt.modules.users.User.objects.all())
    CLIENTS = Cycler(rt.modules.pcsw.Client.objects.all())

    yield lib_objects()

    yield Note(user=USERS.pop(),
               date=dd.demo_date(days=-20),
               project=CLIENTS.pop(),
               subject=_("Do not offer coffee"),
               important=True,
               type=NTYPES.pop())
Esempio n. 12
0
 def get_enrolment_info(self):
     """Return a short text to be displayed between parentheses
     in `lino_cosi.lib.courses.ui.EnrolmentsByCourse.pupil_info`.
     """
     s = ""
     if self.member_until is None:
         pass
     elif self.member_until >= dd.demo_date():
         s = "E"
     if self.is_ckk:
         s += "C"
     if self.is_lfv:
         s += "L"
     # if self.is_raviva:
     #     s += "R"
     if self.section:
         s += "S"
         # s += " {0}".format(self.section)
     if s:
         return "M{0}".format(s)
     return "N"
Esempio n. 13
0
def objects():
    # not used. from the time when we still had tickets and courses
    Line = rt.models.courses.Line
    Topic = rt.models.courses.Topic
    Course = rt.models.courses.Course
    EventType = rt.models.cal.EventType
    Room = rt.models.cal.Room
    Company = rt.models.contacts.Company
    Person = rt.models.contacts.Person
    Role = rt.models.contacts.Role
    RoleType = rt.models.contacts.RoleType

    school = named(Room, _("School"))
    yield school
    center = named(Room, _("Youth center"))
    yield center
    library = named(Room, _("Library"))
    yield library

    training = named(EventType, _("Training"))
    yield training
    workshop = named(EventType, _("Workshop"))
    yield workshop
    camp = named(EventType, _("Camp"))
    yield camp

    nature = named(Topic, _("Nature"))
    yield nature
    folk = named(Topic, _("Folk"))
    yield folk
    together = named(Topic, _("Acting together"))
    yield together
    health = named(Topic, _("Health"))
    yield health
    comp = named(Topic, _("Computer"))
    yield comp

    yield named(Line,
                _("Photography workshop"),
                event_type=workshop,
                every_unit=Recurrencies.once,
                topic=together)
    yield named(Line,
                _("Teamwork training"),
                event_type=training,
                every_unit=Recurrencies.once,
                topic=together)
    yield named(Line,
                _("Folk camp 2017"),
                event_type=camp,
                every_unit=Recurrencies.once,
                topic=together)
    yield named(Line,
                _("Lino Vilma training"),
                event_type=training,
                every_unit=Recurrencies.weekly,
                topic=together)

    LINES = Cycler(Line.objects.all())
    for offset in (-60, -10, -5, 1, 10, 30):
        yield Course(line=LINES.pop(), start_date=dd.demo_date(offset))

    choir = Company(name="Village choir")
    yield choir

    yield Company(name="Sopranos", parent=choir)
    yield Company(name="Altos", parent=choir)
    yield Company(name="Tenors", parent=choir)
    yield Company(name="Basses", parent=choir)

    RTYPES = Cycler(RoleType.objects.all())
    COMPANIES = Cycler(Company.objects.all())

    for i, p in enumerate(Person.objects.all()):
        for j in range(i % 3):
            yield Role(company=COMPANIES.pop(), type=RTYPES.pop(), person=p)
Esempio n. 14
0
File: ui.py Progetto: khchine5/noi
 def param_defaults(self, ar, **kw):
     kw = super(ActiveProjects, self).param_defaults(ar, **kw)
     kw.update(start_date=dd.demo_date())
     kw.update(end_date=dd.demo_date())
     kw.update(observed_event=ProjectEvents.active)
     return kw
Esempio n. 15
0
File: std.py Progetto: TonisPiip/xl
def objects():
    cal = rt.modules.cal
    add = Instantiator('cal.Priority', 'ref').build
    yield add('1', **dd.babel_values('name', en=u"very urgent", de=u"sehr dringend",   fr=u"très urgent", et=u"väga kiire"))
    yield add('3', **dd.babel_values('name', en=u"urgent", de=u"dringend",   fr=u"urgent", et="kiire"))
    yield add('5', **dd.babel_values('name', en=u"normal", de=u"normal",   fr=u"normal", et="keskmine"))
    yield add('9', **dd.babel_values('name', en=u"not urgent", de=u"nicht dringend",   fr=u"pas urgent", et="mitte kiire"))

    calendar = Instantiator('cal.Calendar').build
    general = calendar(**dd.str2kw('name', _("General")))
    yield general
    # settings.SITE.site_config.site_calendar = general
    settings.SITE.site_config.update(
        site_calendar=general,
        hide_events_before=dd.demo_date().replace(month=4, day=1))
    
    # yield settings.SITE.site_config

    event_type = Instantiator('cal.EventType').build
    holidays = event_type(
        is_appointment=False,
        all_rooms=True, **dd.str2kw('name', _("Holidays")))
    yield holidays
    yield event_type(**dd.str2kw('name', _("Meeting")))

    RecurrentEvent = rt.modules.cal.RecurrentEvent
    add = Instantiator(RecurrentEvent, event_type=holidays).build

    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))
    yield holiday(1, 1, "New Year's Day", "Neujahr", "Jour de l'an", "Uusaasta")
    yield holiday(5, 1, "International Workers' Day", "Tag der Arbeit", "Premier Mai", "kevadpüha")
    yield holiday(7, 21, "National Day", "Nationalfeiertag", "Fête nationale", "Belgia riigipüha")
    yield holiday(8, 15, "Assumption of Mary", "Mariä Himmelfahrt", "Assomption de Marie")
    yield holiday(10, 31, "All Souls' Day", "Allerseelen", "Commémoration des fidèles défunts")
    yield holiday(11, 1, "All Saints' Day", "Allerheiligen", "Toussaint")
    yield holiday(11, 11, "Armistice with Germany", "Waffenstillstand", "Armistice")
    yield holiday(12, 25, "Christmas", "Weihnachten", "Noël", "Esimene Jõulupüha")

    easter1 = easter(cal.DEMO_START_YEAR)

    def relative_holiday(offset, name):
        return add(
            every_unit=cal.Recurrencies.easter, every=1,
            start_date=easter1+relativedelta(days=offset),
            **dd.str2kw('name', name))

    yield relative_holiday(0, _("Easter sunday"))
    yield relative_holiday(1, _("Easter monday"))
    yield relative_holiday(39, _("Ascension of Jesus"))
    yield relative_holiday(50, _("Pentecost"))
    yield relative_holiday(-2, _("Good Friday"))
    yield relative_holiday(-46, _("Ash Wednesday"))
    yield relative_holiday(-48, _("Rosenmontag"))

    ar = settings.SITE.login()
    for obj in RecurrentEvent.objects.all():
        if not obj.update_reminders(ar):
            raise Exception("Oops, %s generated no events" % obj)
Esempio n. 16
0
def objects():

    Line = rt.models.courses.Line
    Teacher = dd.plugins.courses.teacher_model
    Course = rt.models.courses.Course
    Topic = rt.models.courses.Topic
    Enrolment = rt.models.courses.Enrolment
    User = rt.models.users.User
    EventType = rt.models.cal.EventType
    Guest = rt.models.cal.Guest
    GuestRole = rt.models.cal.GuestRole
    GuestStates = rt.models.cal.GuestStates
    EntryStates = rt.models.cal.EntryStates
    Event = rt.models.cal.Event
    Person = rt.models.contacts.Person
    CommentType = rt.models.comments.CommentType
    TrendStage = rt.models.trends.TrendStage
    TrendArea = rt.models.trends.TrendArea

    for area, stages in trends_config:
        ta = named(TrendArea, area)
        yield ta
        for stage in stages:
            yield named(TrendStage, stage, trend_area=ta)
    
    yield EventType(**dd.str2kw('name', _("First contact")))
    
    kw = dd.str2kw('name', _("Lesson"))
    kw.update(dd.str2kw('event_label', _("Lesson")))
    event_type = EventType(**kw)
    yield event_type

    pupil = named(GuestRole, _("Pupil"))
    yield pupil
    yield named(GuestRole, _("Assistant"))

    topic_citizen = named(Topic, _("Citizen course"))
    yield topic_citizen
    
    topic_lang = named(Topic, _("Language courses"))
    yield topic_lang
    
    kw.update(topic=topic_citizen)
    kw = dict(event_type=event_type, guest_role=pupil)
    yield named(Line, _("Citizen course"), **kw)
    
    kw.update(topic=topic_lang)
    alpha = named(Line, _("Alphabetisation"), **kw)
    yield alpha
    yield named(Line, _("German for beginners"), **kw)
    yield named(Line, _("German A1+"), **kw)
    yield named(Line, _("German A2"), **kw)
    yield named(Line, _("German A2 (women)"), **kw)
        
    yield named(CommentType, _("Phone call"))
    yield named(CommentType, _("Visit"))
    yield named(CommentType, _("Individual consultation"))
    yield named(CommentType, _("Internal meeting"))
    yield named(CommentType, _("Meeting with partners"))
    
    laura = Teacher(first_name="Laura", last_name="Lieblig")
    yield laura
    yield User(username="******", user_type=UserTypes.teacher,
               partner=laura)
    
    yield User(username="******", user_type=UserTypes.user)
    yield User(username="******", user_type=UserTypes.auditor)
    yield User(username="******", user_type=UserTypes.coordinator)
    yield User(username="******", user_type=UserTypes.secretary)

    USERS = Cycler(User.objects.exclude(
        user_type__in=(UserTypes.auditor, UserTypes.admin)))
    
    kw = dict(monday=True, tuesday=True, thursday=True, friday=True)
    kw.update(
        line=alpha,
        start_date=dd.demo_date(-30),
        start_time="9:00", end_time="12:00",
        max_date=dd.demo_date(10),
        every_unit=Recurrencies.daily,
        user=USERS.pop(),
        teacher=laura,
        max_places=5)
    
    yield Course(**kw)

    kw.update(start_time="14:00", end_time="17:00", user=USERS.pop())
    yield Course(**kw)

    
    PUPILS = Cycler(dd.plugins.courses.pupil_model.objects.all())
    # print(20170302, dd.plugins.courses.pupil_model.objects.all())
    COURSES = Cycler(Course.objects.all())
    STATES = Cycler(EnrolmentStates.objects())

    def fits(course, pupil):
        if course.max_places and course.get_free_places() == 0:
            return False
        if Enrolment.objects.filter(course=course, pupil=pupil).count():
            return False
        return True
    for i in range(10):
        course = COURSES.pop()
        pupil = PUPILS.pop()
        while not fits(course, pupil):
            course = COURSES.pop()
        kw = dict(user=USERS.pop(), course=course, pupil=pupil)
        kw.update(request_date=dd.demo_date(-i))
        kw.update(state=STATES.pop())
        yield Enrolment(**kw)


    ar = rt.login('robin')
    for obj in Course.objects.all():
        obj.update_auto_events(ar)
        
    # Suggested calendar entries older than 7 days should be marked as
    # either took_place or cancelled. 
    qs = Event.objects.filter(
        start_date__lte=dd.demo_date(-7),
        state=EntryStates.suggested)
    for i, obj in enumerate(qs):
        if i % 9:
            obj.state = EntryStates.took_place
        else:
            obj.state = EntryStates.cancelled
        obj.full_clean()
        obj.save()

    # participants of events which took place should be marked as
    # either absent or present or excused:
    qs = Guest.objects.filter(
        event__start_date__lte=dd.demo_date(-7),
        event__state=EntryStates.took_place)
    for i, obj in enumerate(qs):
        if i % 9:
            obj.state = GuestStates.present
        elif i % 3:
            obj.state = GuestStates.absent
        else:
            obj.state = GuestStates.excused
        obj.full_clean()
        obj.save()
Esempio n. 17
0
File: demo.py Progetto: khchine5/noi
def objects():
    UserTypes = rt.actors.users.UserTypes
    yield user("alex", UserTypes.user)
    yield user("berta", UserTypes.user)
    yield user("christa", UserTypes.user)
    yield user("dora", UserTypes.user)
    yield user("eric", UserTypes.connector)

    yield S(_("At home"))  # "Bei mir zu Hause"
    yield S("AZ Ephata")
    yield S("Eupen")

    TopicGroup = rt.modules.topics.TopicGroup
    lng = TopicGroup(**str2kw('name', _("Languages")))
    yield lng
    fr = Topic(_("French"), topic_group=lng)
    yield fr
    de = Topic(_("German"), topic_group=lng)
    yield de
    yield Topic(_("English"), topic_group=lng)

    # music = TopicGroup(**str2kw('name', _("Music")))
    # yield music
    # piano = Topic(_("Piano"), topic_group=music)
    # yield piano
    # guitar = Topic(_("Guitar"), topic_group=music)
    # yield guitar

    edu = faculty("Unterricht", "Cours", "Teaching")
    yield edu
    yield faculty(
        "Französischunterricht", "Cours de francais", "French lessons",
        parent=edu)
    yield faculty("Deutschunterricht", "Cours d'allemand",
                  "German lessons", parent=edu)
    math = faculty(
        "Matheunterricht", "Cours de maths", "Maths lessons",
        parent=edu)
    yield math
    
    music = faculty("Musik", "Musique", "Music")
    yield music
    guitar = faculty(
        "Gitarrenunterricht",
        "Cours de guitare", "Guitar lessons", parent=music)
    yield guitar
    piano = faculty(
        "Klavierunterricht",
        "Cours de piano", "Piano lessons", parent=music)
    yield piano

    home = faculty(
        "Haus und Garten", "Maison et jardin", "Home & Garden")
    yield home

    yield faculty(
        "Kleider reparieren", "Réparer des vètements",
        "Repairing clothes", parent=home)
    garden = faculty(
        "Gartenarbeiten", "Travaux de jardin", "Garden works",
        parent=home)
    yield garden
    repair = faculty(
        "Reparaturarbeiten", "Travaux de réparation", "Repair works",
        parent=home)
    yield repair
    renovate = faculty(
        "Renovierung", "Rénovation", "Renovation",
        parent=home)
    yield renovate

    yield faculty("Fahrdienst", "Voiture", "Car driving")
    commissions = faculty("Botengänge", "Commissions", "Shopping")
    yield commissions
    yield faculty("Friseur", "Coiffure", "Hair cutting")
    yield faculty("Babysitting", "Garde enfant", "Babysitting")
    yield faculty("Gesellschafter für Senioren",
                  "Rencontres personnes agées",
                  "Mentoring elderly people")
    yield faculty(
        "Hunde spazierenführen", "Chiens", "Go out with dogs")
    traduire = faculty(
        "Übersetzungsarbeiten",
        "Traductions", "Translations", topic_group=lng)
    yield traduire
    yield faculty("Briefe schreiben", "Écrire des lettres",
                  "Write letters")

    yield ticket(
        "berta",
        "Mein Wasserhahn tropft, wer kann mir helfen?",
        "My faucet is dripping, who can help?",
        faculty=repair)
    yield ticket(
        "christa",
        "Mein Rasen muss gemäht werden. Donnerstags oder Samstags",
        "My lawn needs mowing. On Thursday or Saturday."
        "")
    yield ticket(
        "dora",
        "Wer kann meinem Sohn Klavierunterricht geben?",
        "Who can give piano lessons to my son?",
        faculty=piano)
    yield ticket(
        "alex",
        "Wer kann meiner Tochter Gitarreunterricht geben?",
        "Who can give guitar lessons to my daughter?",
        faculty=guitar)
    yield ticket(
        "alex",
        "Wer macht Musik auf meinem Geburtstag?",
        "Who would play music on my birthday party?",
        deadline=dd.demo_date(-20),
        faculty=music)
    yield ticket(
        "berta",
        "Wer hilft meinem Sohn sich auf die Mathearbeit am "
        "21.05. vorzubereiten? 5. Schuljahr PDS.",
        "Who helps my sont to prepare for a maths test on May 21?"
        " (5. grade PDS)",
        deadline=dd.demo_date().replace(month=5, day=21),
        faculty=math)
    yield ticket(
        "dora",
        "Wer kann meine Abschlussarbeit korrekturlesen?",
        "Who can review my final work?",
        deadline=dd.demo_date().replace(month=3, day=12),
        description="Für 5. Jahr RSI zum Thema \"Das "
        "Liebesleben der Kängurus\"  "
        "Muss am 12.03. eingereicht werden.")
    yield ticket(
        "alex",
        "Wer fährt für mich nach Aachen Windeln kaufen?",
        "Who would buy diapers for me in Aachen?",
        description="Ich darf selber nicht über die Grenze.",
        faculty=commissions)

    yield competence('alex', traduire, topic=fr)
    yield competence('berta', traduire, topic=fr)
    yield competence('berta', traduire, topic=de)
    yield competence('alex', garden)
    yield competence('alex', repair)
    yield competence('christa', piano)
    yield competence('eric', guitar)
Esempio n. 18
0
File: std.py Progetto: forexblog/xl
def objects():
    cal = rt.models.cal
    PlannerColumns = cal.PlannerColumns
    # add = Instantiator('cal.Priority', 'ref').build
    # yield add('1', **dd.babel_values('name', en=u"very urgent", de=u"sehr dringend",   fr=u"très urgent", et=u"väga kiire"))
    # yield add('3', **dd.babel_values('name', en=u"urgent", de=u"dringend",   fr=u"urgent", et="kiire"))
    # yield add('5', **dd.babel_values('name', en=u"normal", de=u"normal",   fr=u"normal", et="keskmine"))
    # yield add('9', **dd.babel_values('name', en=u"not urgent", de=u"nicht dringend",   fr=u"pas urgent", et="mitte kiire"))

    calendar = Instantiator('cal.Calendar').build
    general = calendar(**dd.str2kw('name', _("General")))
    yield general
    # settings.SITE.site_config.site_calendar = general
    d = dd.demo_date()
    if d.month > 4:
        d = d.replace(month=1, day=1)
    else:
        d = d.replace(month=1, day=1, year=d.year-1)
    settings.SITE.site_config.update(
        site_calendar=general, hide_events_before=d)

    # yield settings.SITE.site_config

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

    yield event_type(
        planner_column=PlannerColumns.external,
        is_appointment=True,
        fill_presences=True,
        max_days=0,
        **dd.str2kw('name', _("Absences")))

    holidays = event_type(
        planner_column=PlannerColumns.external,
        is_appointment=False,
        fill_presences=False,
        max_days=0,
        all_rooms=True, **dd.str2kw('name', _("Holidays")))
    yield holidays
    meeting = event_type(
        is_appointment=True,
        fill_presences=True,
        planner_column=PlannerColumns.external,
        default_duration="1:00", **dd.str2kw('name', _("Meeting")))
    yield meeting
    yield event_type(
        planner_column=PlannerColumns.internal,
        is_appointment=False,
        fill_presences=True,
        transparent=True,
        default_duration="0:30",
        **dd.str2kw('name', _("Internal")))

    RecurrentEvent = rt.models.cal.RecurrentEvent
    add = Instantiator(RecurrentEvent, event_type=holidays).build

    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))
    yield holiday(1, 1, "New Year's Day", "Neujahr", "Jour de l'an", "Uusaasta")
    yield holiday(5, 1, "International Workers' Day", "Tag der Arbeit", "Premier Mai", "kevadpüha")
    yield holiday(7, 21, "National Day", "Nationalfeiertag", "Fête nationale", "Belgia riigipüha")
    yield holiday(8, 15, "Assumption of Mary", "Mariä Himmelfahrt", "Assomption de Marie")
    yield holiday(10, 31, "All Souls' Day", "Allerseelen", "Commémoration des fidèles défunts")
    yield holiday(11, 1, "All Saints' Day", "Allerheiligen", "Toussaint")
    yield holiday(11, 11, "Armistice with Germany", "Waffenstillstand", "Armistice")
    yield holiday(12, 25, "Christmas", "Weihnachten", "Noël", "Esimene Jõulupüha")

    easter1 = easter(cal.DEMO_START_YEAR)

    def relative_holiday(offset, name):
        return add(
            every_unit=Recurrencies.easter, every=1,
            start_date=easter1+relativedelta(days=offset),
            **dd.str2kw('name', name))

    yield relative_holiday(0, _("Easter sunday"))
    yield relative_holiday(1, _("Easter monday"))
    yield relative_holiday(39, _("Ascension of Jesus"))
    yield relative_holiday(50, _("Pentecost"))
    yield relative_holiday(-2, _("Good Friday"))
    yield relative_holiday(-46, _("Ash Wednesday"))
    yield relative_holiday(-48, _("Rosenmontag"))

    ar = settings.SITE.login()
    for obj in RecurrentEvent.objects.all():
        if not obj.update_reminders(ar):
            raise Exception("Oops, %s generated no events" % obj)

    # event policies

    kw = dict()
    for wd in WORKDAYS:
        kw[wd.name] = True
    kw.update(event_type=meeting)
    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.months, **kw).build
    yield exam_policy(
        1, start_time="9:00",
        **dd.str2kw('name', _("Every month")))
    yield exam_policy(
        2, start_time="9:00",
        **dd.str2kw('name', _("Every 2 months")))
    yield exam_policy(
        3, **dd.str2kw('name', _("Every 3 months")))

    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.weeks, **kw).build
    yield exam_policy(
        2, start_time="9:00",
        **dd.str2kw('name', _("Every 2 weeks")))

    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.days, **kw).build
    yield exam_policy(
        10, max_events=1, start_time="9:00",
        **dd.str2kw('name', _("Once after 10 days")))

    exam_policy = Instantiator('cal.EventPolicy').build
    yield exam_policy(**dd.str2kw('name', _("Other")))
Esempio n. 19
0
def objects():
    Upload = rt.modules.uploads.Upload
    UploadType = rt.modules.uploads.UploadType
    Client = rt.modules.pcsw.Client
    ClientStates = rt.modules.pcsw.ClientStates

    # create some random uploads, all uploaded by hubert
    hubert = rt.login('hubert')
    CLIENTS = Cycler(rt.modules.pcsw.CoachedClients.request(user=hubert))
    UPLOAD_TYPES = Cycler(UploadType.objects.all())
    if len(CLIENTS) == 0:
        raise Exception("There are no clients?!")
    for i in range(3):
        cli = CLIENTS.pop()
        for j in range(2):
            obj = Upload(
                project=cli,
                owner=cli,
                # user=hubert,
                end_date=settings.SITE.demo_date(360+i*10),
                type=UPLOAD_TYPES.pop())
            obj.on_create(hubert)  # sets `user` and `needed`
            yield obj

    # some upload stories

    newcomer = Client.objects.get(id=121)
    coached = Client.objects.get(id=124)

    # assert newcomer.client_state == ClientStates.newcomer
    # assert coached.client_state == ClientStates.coached
    # true only for eupen, not for chatelet

    id_card = UploadType.objects.get(shortcut=Shortcuts.id_document)
    residence_permit = UploadType.objects.get(id=UPLOADTYPE_RESIDENCE_PERMIT)
    work_permit = UploadType.objects.get(id=UPLOADTYPE_WORK_PERMIT)
    driving_license = UploadType.objects.get(id=UPLOADTYPE_DRIVING_LICENSE)

    # a reception clerk:
    clerk = rt.login('theresia').get_user()

    # a general social agent:
    agent = rt.login('caroline').get_user()

    # an integration agent:
    ai = rt.login('alicia').get_user()

    # this newcomer has 2 id cards. one of these is no longer valid
    # (and we know it: `needed` has been unchecked). The other is
    # still valid but will expire in 3 days.

    kw = dict(owner=newcomer, type=id_card)
    yield Upload(end_date=dd.demo_date(-30), needed=False,
                 user=clerk, **kw)
    yield Upload(end_date=dd.demo_date(3), user=clerk, **kw)

    # this coached client has three documents uploaded:

    kw = dict(owner=coached)
    yield Upload(type=residence_permit, end_date=dd.demo_date(300),
                 user=clerk, **kw)
    yield Upload(type=work_permit, end_date=dd.demo_date(100),
                 user=ai, **kw)
    yield Upload(type=driving_license, end_date=dd.demo_date(10),
                 user=agent, **kw)
Esempio n. 20
0
def objects():
    CourseAreas = rt.models.courses.CourseAreas
    Line = rt.models.courses.Line
    Course = rt.models.courses.Course
    EventType = rt.modules.cal.EventType
    Pupil = rt.modules.pcsw.Client
    Enrolment = rt.models.courses.Enrolment
    EnrolmentStates = rt.models.courses.EnrolmentStates

    ses = settings.SITE.login('hubert')
    
    kw = dd.str2kw('name', _("Workshop"))
    event_type = EventType(**kw)
    yield event_type

    def line(course_area, name, **kw):
        kw.update(course_area=course_area)
        kw.update(event_type=event_type)
        kw.update(dd.str2kw('name', name))
        return Line(**kw)

    # Introduction aux techniques de cuisine élémentaires
    kw = dd.str2kw(
        'description',
        _("Introduction to basic kitchen technologies."))
    kw.update(body_template="enrolment.body.html")
    kw.update(dd.str2kw(
        'excerpt_title', _("Request for enrolment")))
    role = rt.models.cal.GuestRole.objects.get(pk=2)
    # **dd.str2kw('name', _("Visitor")))
    kw.update(guest_role=role)
    obj = line(CourseAreas.default, _("Kitchen"), **kw)
    yield obj
    
    kitchen_course = Course(
        line=obj, start_date=dd.demo_date(-10),
        monday=True, start_time="8:00", end_time="12:00",
        user=ses.get_user(),
        max_events=5)
    yield kitchen_course
    
    kw.update(dd.str2kw('description', ""))
    obj = line(CourseAreas.default, _("Creativity"), **kw)
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-10))

    obj = line(CourseAreas.default, _("Our first baby"), **kw)
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-10))

    obj = line(CourseAreas.default, _("Mathematics"))
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-10))

    obj = line(CourseAreas.default, _("French"))
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-10))

    obj = line(CourseAreas.job, _("Get active!"))
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-10), max_places=3)

    kw = dict()
    kw.update(dd.str2kw('excerpt_title',
                        _("Request for intervention")))
    kw.update(body_template="intervention.body.html")
    obj = line(CourseAreas.job, _("Psycho-social intervention"), **kw)
    yield obj
    yield Course(line=obj, start_date=dd.demo_date(-200), max_places=1)

    PUPILS = Cycler(Pupil.objects.all())
    #~ print 20130712, Pupil.objects.all()
    COURSES = Cycler(Course.objects.all())
    STATES = Cycler(EnrolmentStates.objects())
    USERS = Cycler(settings.SITE.user_model.objects.all())

    def fits(course, pupil):
        if course.max_places and course.get_free_places() == 0:
            return False
        if Enrolment.objects.filter(course=course, pupil=pupil).count():
            return False
        return True
    for i in range(100):
        course = COURSES.pop()
        pupil = PUPILS.pop()
        while not fits(course, pupil):
            course = COURSES.pop()
        kw = dict(user=USERS.pop(), course=course, pupil=pupil)
        kw.update(request_date=dd.demo_date(-i))
        kw.update(state=STATES.pop())
        yield Enrolment(**kw)

    # this will generate 5 events, and for each event one
    # guest.
    
    res = ses.run(kitchen_course.do_update_events)
    if not res['success']:
        raise Exception("oops")

    expected = """\
Générer les évènements for Cuisine (12/05/2014)...
Generating events between 2014-05-12 and 2019-05-22 (max. 5).
Générer les participants for Évènement #474  1 (12.05.2014 08:00)...
7 row(s) have been updated.
Générer les participants for Évènement #475  2 (19.05.2014 08:00)...
7 row(s) have been updated.
Générer les participants for Évènement #476  3 (26.05.2014 08:00)...
7 row(s) have been updated.
Générer les participants for Évènement #477  4 (02.06.2014 08:00)...
7 row(s) have been updated.
Générer les participants for Évènement #478  5 (16.06.2014 08:00)...
7 row(s) have been updated.
5 row(s) have been updated."""
    if res['info_message'] != expected:
        msg = "Expected:\n{0}\nGOT:\n{1}".format(
            expected, res['info_message'])
        print(msg)
        raise Exception(msg)
Esempio n. 21
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.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
Esempio n. 22
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())
        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
Esempio n. 23
0
def objects():
    # not used. from the time when we still had tickets and courses
    Line = rt.models.courses.Line
    Topic = rt.models.courses.Topic
    Course = rt.models.courses.Course
    EventType = rt.models.cal.EventType
    Room = rt.models.cal.Room
    Company = rt.models.contacts.Company
    Person = rt.models.contacts.Person
    Role = rt.models.contacts.Role
    RoleType = rt.models.contacts.RoleType

    school = named(Room, _("School"))
    yield school
    center = named(Room, _("Youth center"))
    yield center
    library = named(Room, _("Library"))
    yield library
    
    training = named(EventType, _("Training"))
    yield training
    workshop = named(EventType, _("Workshop"))
    yield workshop
    camp = named(EventType, _("Camp"))
    yield camp
    
    nature = named(Topic, _("Nature"))
    yield nature
    folk = named(Topic, _("Folk"))
    yield folk
    together = named(Topic, _("Acting together"))
    yield together
    health = named(Topic, _("Health"))
    yield health
    comp = named(Topic, _("Computer"))
    yield comp
    
    yield named(
        Line, _("Photography workshop"),
        event_type=workshop,
        every_unit=Recurrencies.once, topic=together)
    yield named(
        Line, _("Teamwork training"),
        event_type=training,
        every_unit=Recurrencies.once, topic=together)
    yield named(
        Line, _("Folk camp 2017"),
        event_type=camp,
        every_unit=Recurrencies.once, topic=together)
    yield named(
        Line, _("Lino Vilma training"),
        event_type=training,
        every_unit=Recurrencies.weekly, topic=together)

    LINES = Cycler(Line.objects.all())
    for offset in (-60, -10, -5, 1, 10, 30):
        yield Course(line=LINES.pop(), start_date=dd.demo_date(offset))

    choir = Company(name="Village choir")
    yield choir
    
    yield Company(name="Sopranos", parent=choir)
    yield Company(name="Altos", parent=choir)
    yield Company(name="Tenors", parent=choir)
    yield Company(name="Basses", parent=choir)
    
    RTYPES = Cycler(RoleType.objects.all())
    COMPANIES = Cycler(Company.objects.all())

    for i, p in enumerate(Person.objects.all()):
        for j in range(i % 3):
            yield Role(company=COMPANIES.pop(), type=RTYPES.pop(),
                       person=p)
Esempio n. 24
0
def pop_state(date):
    if date <= dd.demo_date():
        return PAST_STATES.pop()
    else:
        return FUTURE_STATES.pop()
Esempio n. 25
0
def objects():

    Line = rt.models.courses.Line
    Teacher = dd.plugins.courses.teacher_model
    Course = rt.models.courses.Course
    Topic = rt.models.courses.Topic
    Enrolment = rt.models.courses.Enrolment
    CourseStates = rt.models.courses.CourseStates
    User = rt.models.users.User
    EventType = rt.models.cal.EventType
    Guest = rt.models.cal.Guest
    GuestRole = rt.models.cal.GuestRole
    GuestStates = rt.models.cal.GuestStates
    EntryStates = rt.models.cal.EntryStates
    Event = rt.models.cal.Event
    Person = rt.models.contacts.Person
    CommentType = rt.models.comments.CommentType
    TrendStage = rt.models.trends.TrendStage
    TrendArea = rt.models.trends.TrendArea

    for area, stages in trends_config:
        ta = named(TrendArea, area)
        yield ta
        for stage in stages:
            kw = dict(trend_area=ta)
            if stage[0] == "!":
                stage = stage[1:]
                kw.update(subject_column=True)
            yield named(TrendStage, stage, **kw)

    yield EventType(**dd.str2kw('name', _("First contact")))

    kw = dd.str2kw('name', _("Lesson"))
    kw.update(dd.str2kw('event_label', _("Lesson")))
    event_type = EventType(**kw)
    yield event_type

    pupil = named(GuestRole, _("Pupil"))
    yield pupil
    yield named(GuestRole, _("Assistant"))

    topic_citizen = named(Topic, _("Citizen course"))
    yield topic_citizen

    topic_lang = named(Topic, _("Language courses"))
    yield topic_lang

    kw.update(topic=topic_citizen)
    kw = dict(event_type=event_type, guest_role=pupil)
    yield named(Line, _("Citizen course"), **kw)

    kw.update(topic=topic_lang)
    alpha = named(Line, _("Alphabetisation"), **kw)
    yield alpha
    yield named(Line, _("German for beginners"), **kw)
    yield named(Line, _("German A1+"), **kw)
    yield named(Line, _("German A2"), **kw)
    yield named(Line, _("German A2 (women)"), **kw)

    yield named(CommentType, _("Phone call"))
    yield named(CommentType, _("Visit"))
    yield named(CommentType, _("Individual consultation"))
    yield named(CommentType, _("Internal meeting"))
    yield named(CommentType, _("Meeting with partners"))

    laura = Teacher(first_name="Laura", last_name="Lieblig")
    yield laura
    yield User(username="******", user_type=UserTypes.teacher, partner=laura)

    yield User(username="******", user_type=UserTypes.user)
    yield User(username="******", user_type=UserTypes.user)
    yield User(username="******", user_type=UserTypes.auditor)
    yield User(username="******", user_type=UserTypes.coordinator)
    yield User(username="******", user_type=UserTypes.secretary)

    USERS = Cycler(
        User.objects.exclude(user_type__in=(UserTypes.auditor,
                                            UserTypes.admin)))

    kw = dict(monday=True, tuesday=True, thursday=True, friday=True)
    kw.update(line=alpha,
              start_date=dd.demo_date(-30),
              start_time="9:00",
              end_time="12:00",
              max_date=dd.demo_date(10),
              state=CourseStates.active,
              every_unit=Recurrencies.daily,
              user=USERS.pop(),
              teacher=laura,
              max_places=5)

    yield Course(**kw)

    kw.update(start_time="14:00",
              end_time="17:00",
              user=USERS.pop(),
              max_places=15)
    yield Course(**kw)

    kw.update(start_time="18:00",
              end_time="20:00",
              user=USERS.pop(),
              max_places=15)
    yield Course(**kw)

    PUPILS = Cycler(dd.plugins.courses.pupil_model.objects.all())
    # print(20170302, dd.plugins.courses.pupil_model.objects.all())
    COURSES = Cycler(Course.objects.all())
    STATES = Cycler(EnrolmentStates.objects())

    def fits(course, pupil):
        if course.max_places and course.get_free_places() == 0:
            return False
        if Enrolment.objects.filter(course=course, pupil=pupil).count():
            return False
        return True

    def enrol(pupil):
        course = COURSES.pop()
        if fits(course, pupil):
            kw = dict(user=USERS.pop(), course=course, pupil=pupil)
            kw.update(request_date=dd.demo_date(-i))
            kw.update(state=STATES.pop())
            return Enrolment(**kw)

    for i, p in enumerate(
            dd.plugins.courses.pupil_model.objects.order_by('id')):

        yield enrol(p)
        if i % 2 == 0:
            yield enrol(p)
        if i % 3 == 0:
            yield enrol(p)

    ar = rt.login('robin')
    for obj in Course.objects.all():
        obj.update_auto_events(ar)

    # Suggested calendar entries older than 7 days should be marked as
    # either took_place or cancelled.
    qs = Event.objects.filter(start_date__lte=dd.demo_date(-7),
                              state=EntryStates.suggested)
    for i, obj in enumerate(qs):
        if i % 9:
            obj.state = EntryStates.took_place
        else:
            obj.state = EntryStates.cancelled
        obj.full_clean()
        obj.save()

    # participants of events which took place should be marked as
    # either absent or present or excused:
    qs = Guest.objects.filter(
        event__start_date__lte=dd.demo_date(-7),
        event__state=EntryStates.took_place).order_by('id')
    STATES = Cycler(GuestStates.get_list_items())
    for i, obj in enumerate(qs):
        obj.state = STATES.pop()
        # if i % 8:
        #     obj.state = GuestStates.present
        # elif i % 3:
        #     obj.state = GuestStates.missing
        # else:
        #     obj.state = GuestStates.excused
        obj.full_clean()
        obj.save()
Esempio n. 26
0
def objects():
    Granting = rt.modules.aids.Granting
    AidType = rt.modules.aids.AidType
    Person = rt.modules.contacts.Person
    Client = rt.modules.pcsw.Client
    ClientStates = rt.modules.pcsw.ClientStates
    ClientContactType = rt.modules.pcsw.ClientContactType
    Board = rt.modules.boards.Board
    ExcerptType = rt.modules.excerpts.ExcerptType
    ConfirmationStates = rt.modules.aids.ConfirmationStates

    Project = resolve_model('pcsw.Client')
    qs = Project.objects.filter(client_state=ClientStates.coached)
    # if qs.count() > 10:
    #     qs = qs[:10]
    PROJECTS = Cycler(qs)

    l = []
    qs = ClientContactType.objects.filter(can_refund=True)
    for cct in qs:
        qs2 = Person.objects.filter(client_contact_type=cct)
        if qs2.count():
            i = (cct, Cycler(qs2))
            l.append(i)
    PARTNERS = Cycler(l)

    BOARDS = Cycler(Board.objects.all())
    CONFIRMSTATES = Cycler(ConfirmationStates.objects())

    DURATIONS = Cycler(None, 1, 1, 30, 0, None, 365)

    fkw = dd.str2kw('name', _("Pharmacy"))  # Apotheke
    pharmacy_type = rt.modules.pcsw.ClientContactType.objects.get(**fkw)
    PHARMACIES = Cycler(rt.modules.contacts.Company.objects.filter(
        client_contact_type=pharmacy_type))

    for i, at in enumerate(AidType.objects.all()):
        for j in range(2):
            sd = dd.demo_date(days=i)
            kw = dict(start_date=sd,
                      board=BOARDS.pop(),
                      decision_date=dd.demo_date(days=i-1),
                      aid_type=at)

            kw.update(client=PROJECTS.pop())
            duration = DURATIONS.pop()
            if duration is not None:
                kw.update(end_date=sd+datetime.timedelta(days=duration))
            g = Granting(**kw)
            # g.after_ui_create(None)
            g.full_clean()
            if g.signer is not None:
                g.state = CONFIRMSTATES.pop()
            yield g

    # ConfirmationTypes = rt.modules.aids.ConfirmationTypes
    RefundConfirmation = rt.modules.aids.RefundConfirmation
    IncomeConfirmation = rt.modules.aids.IncomeConfirmation
    ClientContact = rt.modules.pcsw.ClientContact

    COACHES = Cycler(rt.modules.users.User.objects.filter(
        coaching_type__isnull=False))

    AMOUNTS = Cycler(123, 234, 345, 456, 678)
    CATEGORIES = Cycler(rt.modules.aids.Category.objects.all())

    # create 1 or 2 confirmations per granting
    urgent_aid_generated = 0
    for i, g in enumerate(Granting.objects.filter(aid_type__isnull=False)):
        ct = g.aid_type.confirmation_type
        num = i % 2 + 1
        if ct.model is RefundConfirmation:
            num = 3  # always create 3 confirmations per refund granting
        if g.aid_type.pharmacy_type == pharmacy_type:
            pharmacy = PHARMACIES.pop()
            yield ClientContact(
                type=pharmacy_type,
                company=pharmacy, client=g.client)
        for j in range(num):
            kw = dict(granting=g, client=g.client)
            kw.update(user=COACHES.pop())
            kw.update(start_date=g.start_date)
            kw.update(end_date=g.end_date)
            if g.signer is not None:
                kw.update(state=CONFIRMSTATES.pop())
                kw.update(signer=g.signer)
            if ct.model is IncomeConfirmation:
                kw.update(category=CATEGORIES.pop())
                kw.update(amount=AMOUNTS.pop())
            if ct.model is RefundConfirmation:
                doctor_type, doctor_cycler = PARTNERS.pop()
                doctor = doctor_cycler.pop()
                kw.update(doctor_type=doctor_type)
                kw.update(doctor=doctor)
                yield ClientContact(
                    type=doctor_type,
                    contact_person=doctor, client=g.client)
                # only the first confirmation has a pharmacy
                if g.aid_type.pharmacy_type == pharmacy_type and j == 0:
                    kw.update(pharmacy=pharmacy)

            yield ct.model(**kw)

        # for two refund grantings, create the corresponding
        # additional granting of urgent medical help
        if ct.model is RefundConfirmation and urgent_aid_generated < 2:
            kw = dict()
            kw.update(client=g.client)
            kw.update(start_date=g.start_date)
            kw.update(end_date=g.end_date)
            kw.update(aid_type=AidType.objects.get(short_name="DMH"))
            yield Granting(**kw)
            urgent_aid_generated += 1

    if False:  # no need to print them all.
               # lino_welfare.modlib.welfare.fixtures.demo2 is enough.
        ses = rt.login('theresia')
        for at in rt.modules.aids.AidType.objects.exclude(
                confirmation_type=''):
            M = at.confirmation_type.model
            et = ExcerptType.get_for_model(M)
            qs = M.objects.filter(granting__aid_type=at)
            for obj in qs:
                ses.selected_rows = [obj]
                yield et.get_or_create_excerpt(ses)
            
    def person2client(f, l):
        obj = Person.objects.get(first_name=f, last_name=l)
        mti.insert_child(obj, Client)

    person2client("Paul", "Frisch")
    person2client("Bruno", "Braun")

    # create a clothing_refund granting and excerpt for Paul Frisch:
    ses = rt.login("alicia")
    obj = Client.objects.get(name="Frisch Paul")
    at = AidType.objects.get(
        body_template='clothing_bank.body.html')
    g = Granting(aid_type=at, client=obj)
    g.full_clean()
    yield g
    M = at.confirmation_type.model
    conf = M(client=obj, granting=g)
    conf.full_clean()
    conf.on_create(ses)
    yield conf
    et = ExcerptType.get_for_model(M)
    ses.selected_rows = [conf]
    yield et.get_or_create_excerpt(ses)
Esempio n. 27
0
def objects():
    cal = rt.models.cal
    PlannerColumns = cal.PlannerColumns
    # add = Instantiator('cal.Priority', 'ref').build
    # yield add('1', **dd.babel_values('name', en=u"very urgent", de=u"sehr dringend",   fr=u"très urgent", et=u"väga kiire"))
    # yield add('3', **dd.babel_values('name', en=u"urgent", de=u"dringend",   fr=u"urgent", et="kiire"))
    # yield add('5', **dd.babel_values('name', en=u"normal", de=u"normal",   fr=u"normal", et="keskmine"))
    # yield add('9', **dd.babel_values('name', en=u"not urgent", de=u"nicht dringend",   fr=u"pas urgent", et="mitte kiire"))

    calendar = Instantiator('cal.Calendar').build
    general = calendar(**dd.str2kw('name', _("General")))
    yield general
    # settings.SITE.site_config.site_calendar = general
    d = dd.demo_date()
    if d.month > 4:
        d = d.replace(month=1, day=1)
    else:
        d = d.replace(month=1, day=1, year=d.year-1)
    settings.SITE.site_config.update(
        site_calendar=general, hide_events_before=d)

    # yield settings.SITE.site_config

    event_type = Instantiator('cal.EventType').build
    holidays = event_type(
        planner_column=PlannerColumns.external,
        is_appointment=False,
        all_rooms=True, **dd.str2kw('name', _("Holidays")))
    yield holidays
    meeting = event_type(
        planner_column=PlannerColumns.external,
        default_duration="1:00", **dd.str2kw('name', _("Meeting")))
    yield meeting
    yield event_type(
        planner_column=PlannerColumns.internal,
        transparent=True,
        default_duration="0:30",
        **dd.str2kw('name', _("Internal")))

    RecurrentEvent = rt.models.cal.RecurrentEvent
    add = Instantiator(RecurrentEvent, event_type=holidays).build

    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))
    yield holiday(1, 1, "New Year's Day", "Neujahr", "Jour de l'an", "Uusaasta")
    yield holiday(5, 1, "International Workers' Day", "Tag der Arbeit", "Premier Mai", "kevadpüha")
    yield holiday(7, 21, "National Day", "Nationalfeiertag", "Fête nationale", "Belgia riigipüha")
    yield holiday(8, 15, "Assumption of Mary", "Mariä Himmelfahrt", "Assomption de Marie")
    yield holiday(10, 31, "All Souls' Day", "Allerseelen", "Commémoration des fidèles défunts")
    yield holiday(11, 1, "All Saints' Day", "Allerheiligen", "Toussaint")
    yield holiday(11, 11, "Armistice with Germany", "Waffenstillstand", "Armistice")
    yield holiday(12, 25, "Christmas", "Weihnachten", "Noël", "Esimene Jõulupüha")

    easter1 = easter(cal.DEMO_START_YEAR)

    def relative_holiday(offset, name):
        return add(
            every_unit=Recurrencies.easter, every=1,
            start_date=easter1+relativedelta(days=offset),
            **dd.str2kw('name', name))

    yield relative_holiday(0, _("Easter sunday"))
    yield relative_holiday(1, _("Easter monday"))
    yield relative_holiday(39, _("Ascension of Jesus"))
    yield relative_holiday(50, _("Pentecost"))
    yield relative_holiday(-2, _("Good Friday"))
    yield relative_holiday(-46, _("Ash Wednesday"))
    yield relative_holiday(-48, _("Rosenmontag"))

    ar = settings.SITE.login()
    for obj in RecurrentEvent.objects.all():
        if not obj.update_reminders(ar):
            raise Exception("Oops, %s generated no events" % obj)

    # event policies

    kw = dict()
    for wd in WORKDAYS:
        kw[wd.name] = True
    kw.update(event_type=meeting)
    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.months, **kw).build
    yield exam_policy(
        1, start_time="9:00",
        **dd.str2kw('name', _("Every month")))
    yield exam_policy(
        2, start_time="9:00",
        **dd.str2kw('name', _("Every 2 months")))
    yield exam_policy(
        3, **dd.str2kw('name', _("Every 3 months")))

    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.weeks, **kw).build
    yield exam_policy(
        2, start_time="9:00",
        **dd.str2kw('name', _("Every 2 weeks")))

    exam_policy = Instantiator(
        'cal.EventPolicy', 'every',
        every_unit=DurationUnits.days, **kw).build
    yield exam_policy(
        10, max_events=1, start_time="9:00",
        **dd.str2kw('name', _("Once after 10 days")))

    exam_policy = Instantiator('cal.EventPolicy').build
    yield exam_policy(**dd.str2kw('name', _("Other")))

    DPR = rt.models.cal.DailyPlannerRow
    yield DPR(end_time="12:00", **dd.str2kw('designation', _("AM")))
    yield DPR(start_time="12:00", **dd.str2kw('designation', _("PM")))
    yield DPR(**dd.str2kw('designation', _("All day")))
Esempio n. 28
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