Ejemplo n.º 1
0
def objects():

    last_names = demonames.LAST_NAMES_BELGIUM
    male_first_names = demonames.MALE_FIRST_NAMES_FRANCE
    female_first_names = demonames.FEMALE_FIRST_NAMES_FRANCE

    Person = dd.resolve_model("contacts.Person")
    Place = dd.resolve_model('countries.Place')

    CITIES = Cycler(
        Place.objects.filter(country_id='BE', zip_code__startswith='40'))
    STREETS = demonames.streets_of_liege()

    common = dict(language='fr', country_id='BE')
    for i in range(100):
        yield Person(
            first_name=male_first_names.pop(),
            last_name=last_names.pop(),
            gender=mixins.Genders.male,
            city=CITIES.pop(),
            street=STREETS.pop(),
            **common
        )
        yield Person(
            first_name=female_first_names.pop(),
            last_name=last_names.pop(),
            gender=mixins.Genders.female,
            city=CITIES.pop(),
            street=STREETS.pop(),
            **common
        )
Ejemplo n.º 2
0
def objects():
    
    yield sales.InvoicingMode(**babel_values('name',en='Default',de=u"Standard",fr=u"Standard"))
    
    if ledger:
        Invoice = dd.resolve_model('sales.Invoice')
        InvoiceItem = dd.resolve_model('sales.InvoiceItem')
        vt = ledger.VoucherTypes.get_for_model(Invoice)
        JOURNALS = Cycler(vt.get_journals())
        PARTNERS = Cycler(Partner.objects.all())
        USERS = Cycler(settings.SITE.user_model.objects.all())
        PRODUCTS = Cycler(products.Product.objects.all())
        ITEMCOUNT = Cycler(1,2,3)
        for i in range(20):
            jnl = JOURNALS.pop()
            invoice = Invoice(journal=jnl,
              partner=PARTNERS.pop(),
              user=USERS.pop(),
              date=settings.SITE.demo_date(-30+2*i))
            yield invoice
            for j in range(ITEMCOUNT.pop()):
                item = InvoiceItem(voucher=invoice,
                    #~ account=jnl.get_allowed_accounts()[0],
                    product=PRODUCTS.pop(),
                    )
                item.product_changed(REQUEST)
                item.before_ui_save(REQUEST)
                #~ if item.total_incl:
                    #~ print "20121208 ok", item
                #~ else:
                    #~ if item.product.price:
                        #~ raise Exception("20121208")
                yield item
            invoice.register(REQUEST)
            invoice.save()
Ejemplo n.º 3
0
 def __init__(self,model,table_class):
     self.table_class = table_class
     model = dd.resolve_model(model)
     self.model = model
     value = dd.full_model_name(model)
     text = model._meta.verbose_name + ' (%s)' % dd.full_model_name(model)
     #~ text = model._meta.verbose_name + ' (%s.%s)' % (model.__module__,model.__name__)
     name = None
     super(VoucherType,self).__init__(value,text,name)
Ejemplo n.º 4
0
def objects():
    if False and notes:
        NoteType = dd.resolve_model('notes.NoteType')
        yield NoteType(
            template="Letter.odt",
            build_method="appyodt",
            body_template="payment_reminder.body.html",
            **babel_values('name',
                           en="Payment reminder",
                           fr="Rappel de paiement",
                           de="Zahlungserinnerung"))
Ejemplo n.º 5
0
Archivo: std.py Proyecto: raffas/lino
def objects():
    ExcerptType = dd.resolve_model('excerpts.ExcerptType')
    for cls in dd.models_by_base(Certifiable):
        kw = dd.str2kw(cls._meta.verbose_name, 'name')
        if False:
            kw.update(backward_compat=True)
        yield ExcerptType(
            template='Default.odt',
            primary=True,
            certifying=True,
            content_type=ContentType.objects.get_for_model(cls),
            **kw)
Ejemplo n.º 6
0
 def create_pupil_choice(self, text):
     """
     Called when an unknown pupil name was given.
     Try to auto-create it.
     """
     Pupil = dd.resolve_model(config.pupil_model)
     kw = parse_name(text)
     if len(kw) != 2:
         raise ValidationError(
             "Cannot find first and last names in %r to \
             auto-create pupil", text)
     p = Pupil(**kw)
     p.full_clean()
     p.save()
     return p
Ejemplo n.º 7
0
def my_pre_ui_build(sender, **kw):
    self = settings.SITE
    if self.is_installed('contenttypes'):

        from django.db.utils import DatabaseError
        from django.db.models import FieldDoesNotExist
        try:

            HelpText = dd.resolve_model('system.HelpText')
            for ht in HelpText.objects.filter(help_text__isnull=False):
                #~ logger.info("20120629 %s.help_text", ht)
                try:
                    resolve_field(unicode(ht)).help_text = ht.help_text
                except FieldDoesNotExist as e:
                    #~ logger.debug("No help texts : %s",e)
                    pass
        except DatabaseError, e:
            logger.debug("No help texts : %s", e)
            pass
Ejemplo n.º 8
0
    def get_slave_summary(self, obj, ar):
        sar = self.request(master_instance=obj)
        elems = []
        # n = sar.get_total_count()
        # if n == 0:
        #     elems += [_("Not member of any household."), E.br()]
        # else:

        items = []
        for m in sar.data_iterator:
            
            args = (unicode(m.role), _(" in "),
                    ar.obj2html(m.household))
            if m.primary:
                items.append(E.li(E.b("\u2611 ", *args)))
            else:
                btn = m.set_primary.as_button_elem(
                    ar, "\u2610 ", style="text-decoration:none;")
                items.append(E.li(btn, *args))
        if len(items) > 0:
            elems += [_("%s is") % obj]
            elems.append(E.ul(*items))
        if False:
            elems += [
                E.br(), ar.instance_action_button(obj.create_household)]
        else:
            elems += [E.br(), _("Create a household"), ' : ']
            Type = rt.modules.households.Type
            Person = dd.resolve_model(config.person_model)
            T = Person.get_default_table()
            ba = T.get_action_by_name('create_household')
            buttons = []
            for t in Type.objects.all():
                apv = dict(type=t, head=obj)
                sar = ar.spawn(ba,  # master_instance=obj,
                               action_param_values=apv)
                buttons.append(ar.href_to_request(sar, unicode(t)))
            elems += join_elems(buttons, sep=' / ')
        return E.div(*elems)
Ejemplo n.º 9
0
    def handle(self, *args, **options):

        dbname = settings.DATABASES['default']['NAME']
        if options.get('interactive'):
            if not confirm("This is going to GARBLE your database (%s).\n"
                           "Are you sure (y/n) ?" % dbname):
                raise CommandError("User abort.")

        def build_dist(k):
            k = k.upper()
            if k == 'BE':
                return BelgianDistribution()
            if k == 'EE':
                return EstonianDistribution()
            raise CommandError("Invalid distribution key %r." % k)
        
        dist = build_dist(options.get('distribution'))
        
        User = dd.resolve_model(settings.SITE.user_model)
        Person = rt.modules.contacts.Person

        for p in Person.objects.order_by('id'):
            if User.objects.filter(partner=p).count() > 0:
                # users keep their original name
                pass
            else:
                p.last_name = dist.LAST_NAMES.pop()
                if p.gender == mixins.Genders.male:
                    p.first_name = dist.MALES.pop()
                    dist.FEMALES.pop()
                else:
                    p.first_name = dist.FEMALES.pop()
                    dist.MALES.pop()
                p.name = join_words(p.last_name, p.first_name)
                dist.before_save(p)
                p.save()
                dblogger.info(p.get_address(', '))
Ejemplo n.º 10
0
def objects():
    """
    This will be called by the :term:`north` deserializer and 
    must yield a list of object instances to be saved.
    """
    Place = resolve_model('lets.Place')
    Provider = resolve_model('lets.Provider')
    Customer = resolve_model('lets.Customer')
    Product = resolve_model('lets.Product')
    Offer = resolve_model('lets.Offer')
    Demand = resolve_model('lets.Demand')

    yield Place(name="Tallinn")
    yield Place(name="Tartu")
    yield Place(name="Vigala")
    yield Place(name="Haapsalu")

    yield Provider(name="Priit", place=findbyname(Place, "Tallinn"))
    yield Provider(name="Argo", place=findbyname(Place, "Haapsalu"))
    yield Provider(name=u"Tõnis", place=findbyname(Place, "Vigala"))
    yield Provider(name="Anne", place=findbyname(Place, "Tallinn"))
    yield Provider(name="Jaanika", place=findbyname(Place, "Tallinn"))

    yield Customer(name="Henri", place=findbyname(Place, "Tallinn"))
    yield Customer(name="Mare", place=findbyname(Place, "Tartu"))
    yield Customer(name=u"Külliki", place=findbyname(Place, "Vigala"))

    yield Product(name="Leib")
    yield Product(name="Tatar")
    yield Product(name="Kanamunad")

    yield Offer(product=findbyname(Product, "Leib"), provider=findbyname(Provider, "Priit"))
    yield Offer(product=findbyname(Product, "Tatar"), provider=findbyname(Provider, "Priit"))
    yield Offer(product=findbyname(Product, "Tatar"), provider=findbyname(Provider, "Anne"))

    yield Demand(product=findbyname(Product, "Tatar"), customer=findbyname(Customer, "Henri"))
    yield Demand(product=findbyname(Product, "Kanamunad"), customer=findbyname(Customer, "Henri"))
    yield Demand(product=findbyname(Product, "Kanamunad"), customer=findbyname(Customer, "Mare"))
Ejemplo n.º 11
0
#import time
#from datetime import date
#from dateutil import parser as dateparser
#from lino.projects.finan import models as finan
#~ import decimal
from decimal import Decimal
from django.conf import settings

from lino import dd
from lino.utils import Cycler
from lino.utils.instantiator import Instantiator, i2d
from lino.core.dbutils import resolve_model

partner_model = settings.SITE.partners_app_label + '.Partner'
Partner = dd.resolve_model(partner_model)


REQUEST = None


def objects():
  
  
    ledger = dd.resolve_app('ledger')
    finan = dd.resolve_app('finan')
    #~ partners = dd.resolve_app('partners')
    #~ contacts = dd.resolve_app('contacts')
    
    
    MODEL = finan.BankStatement
Ejemplo n.º 12
0
not complete enough to be of real benefit, but publicly available at
http://belref.lino-framework.org/

"""

from __future__ import unicode_literals
import re


abbrRE = re.compile("^(.*)\s*\((.*)\)\s*", re.DOTALL)


from north import dbutils

from lino import dd, rt
Concept = dd.resolve_model('concepts.Concept')
Link = dd.resolve_model('concepts.Link')

from lino.modlib.concepts.models import LinkTypes


def C(en, de, fr='', nl='', jargon=None, obsoletes=None, **kw):
    texts = dict(en=en, de=de, fr=fr, nl=nl)
    name = dict()
    abbr = dict()
    for lang in 'en', 'de', 'fr', 'nl':
        t = texts.get(lang)
        if t:
            mo = abbrRE.match(t)
            if mo:
                abbr[lang] = mo.group(1).strip()
Ejemplo n.º 13
0
def objects():

    if settings.SITE.get_language_info('de'):
        munich = 'München'
    else:
        munich = 'Munich'  # en, fr

    if settings.SITE.get_language_info('fr'):
        kelmis = 'La Calamine'
    else:
        kelmis = 'Kelmis'  # en, de

    company = Instantiator(
        'contacts.Company',
        "name zip_code city:name street street_no",
        country='EE').build
    yield company('Rumma & Ko OÜ', '10115', 'Tallinn', 'Tartu mnt', '71')

    company = Instantiator(
        'contacts.Company', "name zip_code city:name street street_no",
        country='BE').build
    yield company('Bäckerei Ausdemwald', '4700', 'Eupen',
                  'Vervierser Straße', '45')
    yield company('Bäckerei Mießen',     '4700', 'Eupen',
                  'Gospert', '103')
    yield company('Bäckerei Schmitz',    '4700', 'Eupen',
                  'Aachener Straße', '53')
    yield company('Garage Mergelsberg',  '4720', kelmis,
                  'Kasinostraße', '13')

    company = Instantiator(
        'contacts.Company',
        "name zip_code city:name street street_no", country='NL').build
    yield company('Donderweer BV', '4816 AR', 'Breda', 'Edisonstraat', '12')
    yield company('Van Achter NV', '4836 LG', 'Breda', 'Hazeldonk', '2')

    company = Instantiator(
        'contacts.Company',
        "name zip_code city:name street street_no", country='DE').build
    yield company('Hans Flott & Co', '22453', 'Hamburg',
                  'Niendorfer Weg', '532')
    yield company('Bernd Brechts Bücherladen', '80333',
                  munich, 'Brienner Straße', '18')
    yield company('Reinhards Baumschule', '12487 ',
                  'Berlin', 'Segelfliegerdamm', '123')

    company = Instantiator(
        'contacts.Company',
        "name zip_code city:name street street_no", country='FR').build
    yield company('Moulin Rouge', '75018', 'Paris',
                  'Boulevard de Clichy', '82')
    yield company('Auto École Verte', '54000 ', 'Nancy',
                  'rue de Mon Désert', '12')

    Place = dd.resolve_model('countries.Place')

    eupen = Place.objects.get(name__exact='Eupen')
    person = Instantiator("contacts.Person", "first_name last_name",
                          country='BE', city=eupen, zip_code='4700').build
    yield person('Andreas',  'Arens', gender=mixins.Genders.male)
    yield person('Annette',  'Arens', gender=mixins.Genders.female)
    yield person('Hans',     'Altenberg', gender=mixins.Genders.male)
    yield person('Alfons',   'Ausdemwald', gender=mixins.Genders.male)
    yield person('Laurent',  'Bastiaensen', gender=mixins.Genders.male)
    yield person('Charlotte', 'Collard', gender=mixins.Genders.female)
    yield person('Ulrike',   'Charlier', gender=mixins.Genders.female)
    yield person('Marc',  'Chantraine', gender=mixins.Genders.male)
    yield person('Daniel',   'Dericum', gender=mixins.Genders.male)
    yield person('Dorothée', 'Demeulenaere', gender=mixins.Genders.female)
    yield person('Dorothée', 'Dobbelstein-Demeulenaere',
                 gender=mixins.Genders.female)
    yield person('Dorothée', 'Dobbelstein', gender=mixins.Genders.female)
    yield person('Berta',    'Ernst', gender=mixins.Genders.female)
    yield person('Bernd',    'Evertz', gender=mixins.Genders.male)
    yield person('Eberhart', 'Evers', gender=mixins.Genders.male)
    yield person('Daniel',   'Emonts', gender=mixins.Genders.male)
    yield person('Edgar',    'Engels', gender=mixins.Genders.male)
    yield person('Luc',      'Faymonville', gender=mixins.Genders.male)
    yield person('Germaine', 'Gernegroß', gender=mixins.Genders.female)
    yield person('Gregory',  'Groteclaes', gender=mixins.Genders.male)
    yield person('Hildegard', 'Hilgers', gender=mixins.Genders.female)
    yield person('Henri',    'Hilgers', gender=mixins.Genders.male)
    yield person('Irene',    'Ingels', gender=mixins.Genders.female)
    yield person('Jérémy',   'Jansen', gender=mixins.Genders.male)
    yield person('Jacqueline', 'Jacobs', gender=mixins.Genders.female)
    yield person('Johann', 'Johnen', gender=mixins.Genders.male)
    yield person('Josef', 'Jonas', gender=mixins.Genders.male)
    yield person('Jan',   'Jousten', gender=mixins.Genders.male)
    yield person('Karl',  'Kaivers', gender=mixins.Genders.male)
    yield person('Guido', 'Lambertz', gender=mixins.Genders.male)
    yield person('Laura', 'Laschet', gender=mixins.Genders.female)
    yield person('Line', 'Lazarus', gender=mixins.Genders.female)
    yield person('Josefine', 'Leffin', gender=mixins.Genders.female)
    yield person('Marc', 'Malmendier', gender=mixins.Genders.male)
    yield person('Melissa', 'Meessen', gender=mixins.Genders.female)
    yield person('Michael', 'Mießen', gender=mixins.Genders.male)
    yield person('Marie-Louise', 'Meier', gender=mixins.Genders.female)

    raeren = Place.objects.get(name__exact='Raeren')
    person = Instantiator(
        "contacts.Person", "first_name last_name",
        country='BE', language=settings.SITE.DEFAULT_LANGUAGE.django_code,
        city=raeren, zip_code='4730').build
    yield person('Erich',    'Emonts', gender=mixins.Genders.male)
    yield person('Erwin',    'Emontspool', gender=mixins.Genders.male)
    yield person('Erna',     'Emonts-Gast', gender=mixins.Genders.female)
    yield person('Alfons',     'Radermacher', gender=mixins.Genders.male)
    yield person('Berta',     'Radermacher', gender=mixins.Genders.female)
    yield person('Christian',     'Radermacher', gender=mixins.Genders.male)
    yield person('Daniela',     'Radermacher', gender=mixins.Genders.female)
    yield person('Edgard',     'Radermacher', gender=mixins.Genders.male)
    yield person('Fritz',     'Radermacher', gender=mixins.Genders.male)
    yield person('Guido',     'Radermacher', gender=mixins.Genders.male)
    yield person('Hans',     'Radermacher', gender=mixins.Genders.male)
    yield person('Hedi',     'Radermacher', gender=mixins.Genders.female)
    yield person('Inge',     'Radermacher', gender=mixins.Genders.female)
    yield person('Jean',     'Radermacher', gender=mixins.Genders.male)

    # special challenges for alphabetic ordering
    yield person('Didier',  'di Rupo', gender=mixins.Genders.male)
    yield person('David',   'da Vinci', gender=mixins.Genders.male)
    yield person('Vincent', 'van Veen', gender=mixins.Genders.male)
    yield person('Õie',     'Õunapuu', gender=mixins.Genders.female)
    yield person('Otto',   'Östges', gender=mixins.Genders.male)
    yield person('Erna',   'Ärgerlich', gender=mixins.Genders.female)

    person = Instantiator("contacts.Person", country='BE',
                          city=Place.objects.get(name__exact='Angleur')).build
    yield person(first_name='Bernard', last_name='Bodard', title='Dr.')
    yield person(first_name='Jean', last_name='Dupont')

    person = Instantiator("contacts.Person", country='NL',
                          city=Place.objects.get(
                              name__exact='Amsterdam')).build
    yield person(first_name='Mark', last_name='Martelaer',
                 gender=mixins.Genders.male)
    yield person(first_name='Rik', last_name='Radermecker',
                 gender=mixins.Genders.male)
    yield person(first_name='Marie-Louise', last_name='Vandenmeulenbos',
                 gender=mixins.Genders.female)

    person = Instantiator("contacts.Person", country='DE').build
    yield person(first_name='Emil', last_name='Eierschal',
                 gender=mixins.Genders.male)
    yield person(first_name='Lisa', last_name='Lahm',
                 gender=mixins.Genders.female)
    yield person(first_name='Bernd', last_name='Brecht',
                 gender=mixins.Genders.male)
    yield person(first_name='Karl', last_name='Keller',
                 gender=mixins.Genders.male)

    person = Instantiator("contacts.Person", country='FR').build
    yield person(first_name='Robin', last_name='Dubois',
                 gender=mixins.Genders.male)
    yield person(first_name='Denis', last_name='Denon',
                 gender=mixins.Genders.male)
    yield person(first_name='Jérôme', last_name='Jeanémart',
                 gender=mixins.Genders.male)

    s = u"""\
Aachener Straße
Akazienweg
Alter Malmedyer Weg
Am Bahndamm
Am Berg
Am Waisenbüschchen
Auenweg
Auf dem Spitzberg
Auf'm Rain
August-Thonnar-Str.
Bahnhofsgasse
Bahnhofstraße
Bellmerin
Bennetsborn
Bergkapellstraße
Bergstraße
Binsterweg
Brabantstraße
Buchenweg
Edelstraße
Euregiostraße
Favrunpark
Feldstraße
Fränzel
Gewerbestraße
Gospert
Gülcherstraße
Haagenstraße
Haasberg
Haasstraße
Habsburgerweg
Heidberg
Heidgasse
Heidhöhe
Herbesthaler Straße
Hisselsgasse
Hochstraße
Hook
Hostert
Hufengasse
Hugo-Zimmermann-Str.
Hütte
Hütterprivatweg
Im Peschgen
In den Siepen
Industriestraße
Johannesstraße
Judenstraße
Kaperberg
Kaplan-Arnolds-Str.
Karl-Weiß-Str.
Kehrweg
Kirchgasse
Kirchstraße
Klinkeshöfchen
Kügelgasse
Langesthal
Lascheterweg
Limburgerweg
Lindenweg
Lothringerweg
Malmedyer Straße
Maria-Theresia-Straße
Marktplatz
Monschauer Straße
Mühlenweg
Neustraße
Nikolausfeld
Nispert
Noereth
Obere Ibern
Obere Rottergasse
Oestraße
Olengraben
Panorama
Paveestraße
Peter-Becker-Str.
Rosenweg
Rot-Kreuz-Str.
Rotenberg
Rotenbergplatz
Schilsweg
Schlüsselhof
Schnellewindgasse
Schönefeld
Schorberg
Schulstraße
Selterschlag
Simarstraße
Steinroth
Stendrich
Stockbergerweg
Stockem
Theodor-Mooren-Str.
Untere Ibern
Vervierser Straße
Vossengasse
Voulfeld
Werthplatz
Weserstraße
"""

    streets_of_eupen = [line.strip()
                        for line in s.splitlines() if len(line.strip()) > 0]

    i = 0
    nr = 1
    for p in dd.resolve_model("contacts.Person").objects.filter(city=eupen):
        p.street = streets_of_eupen[i]
        p.stret_no = str(nr)
        p.save()
        nr += 1
        if i < len(streets_of_eupen):
            i += 1
        else:
            i = 0
Ejemplo n.º 14
0
def objects():

    Company = dd.resolve_model('contacts.Company')
    Person = dd.resolve_model('contacts.Person')
    Product = dd.resolve_model('products.Product')

    if False:  # old system

        MODEL = ledger.AccountInvoice
        vt = ledger.VoucherTypes.get_for_model(MODEL)
        JOURNALS = Cycler(vt.get_journals())
        Partner = dd.resolve_model(partner_model)
        #~ logger.info("20130105 mini Partners %s",Partner.objects.all().count())
        #~ PARTNERS = Cycler(Partner.objects.order_by('name'))
        PARTNERS = Cycler(Company.objects.order_by('id'))
        USERS = Cycler(settings.SITE.user_model.objects.all())
        AMOUNTS = Cycler([Decimal(x) for x in
                          "2.50 6.80 9.95 14.50 20 29.90 39.90 39.90 99.95 199.95 599.95 1599.99".split()])
        ITEMCOUNT = Cycler(1, 2, 3)
        for i in range(10):
            u = USERS.pop()
            jnl = JOURNALS.pop()
            invoice = MODEL(journal=jnl,
                            partner=PARTNERS.pop(),
                            user=u,
                            date=settings.SITE.demo_date(-30 + i))
            yield invoice
            ar = MODEL.request(user=u)
            for j in range(ITEMCOUNT.pop()):
                item = ledger.InvoiceItem(voucher=invoice,
                                          account=jnl.get_allowed_accounts()[
                                              0],
                                          #~ product=PRODUCTS.pop(),
                                          total_incl=AMOUNTS.pop()
                                          )
                item.total_incl_changed(ar)
                item.before_ui_save(ar)
                #~ if item.total_incl:
                    #~ print "20121208 ok", item
                #~ else:
                    #~ if item.product.price:
                        #~ raise Exception("20121208")
                yield item
            invoice.register(ar)
            invoice.save()

    USERS = Cycler(settings.SITE.user_model.objects.all())

    if sales:

        yield Product(name="Foo", sales_price='399.90')
        yield Product(name="Bar", sales_price='599.90')
        yield Product(name="Baz", sales_price='990.00')
        PRODUCTS = Cycler(Product.objects.order_by('id'))
        JOURNAL_S = ledger.Journal.objects.get(ref="S")
        #~ assert JOURNAL_S.dc == accounts.DEBIT
        CUSTOMERS = Cycler(Person.objects.order_by('id'))
        ITEMCOUNT = Cycler(1, 2, 3)
        QUANTITIES = Cycler(5, 1, 2, 3)
        SALES_PER_MONTH = Cycler(2, 1, 3, 2, 0)

    PROVIDERS = Cycler(Company.objects.order_by('id'))

    JOURNAL_P = ledger.Journal.objects.get(ref="P")
    #~ assert JOURNAL_P.dc == accounts.CREDIT
    ACCOUNTS = Cycler(JOURNAL_P.get_allowed_accounts())
    AMOUNTS = Cycler([Decimal(x) for x in
                      "20 29.90 39.90 99.95 199.95 599.95 1599.99".split()])
    AMOUNT_DELTAS = Cycler([Decimal(x)
                           for x in "0 0.60 1.10 1.30 2.50".split()])
    DATE_DELTAS = Cycler((1, 2, 3, 4, 5, 6, 7))
    INFLATION_RATE = Decimal("0.02")

    """
    5 "purchase stories" : each story represents a provider who sends 
    monthly invoices.
    """
    PURCHASE_STORIES = []
    for i in range(5):
        # provider, (account,amount)
        story = (PROVIDERS.pop(), [])
        story[1].append((ACCOUNTS.pop(), AMOUNTS.pop()))
        if i % 3:
            story[1].append((ACCOUNTS.pop(), AMOUNTS.pop()))
        PURCHASE_STORIES.append(story)

    #~ date = settings.SITE.demo_date() + delta(years=-2)
    START_YEAR = settings.SITE.start_year  # 2011
    date = datetime.date(START_YEAR, 1, 1)
    end_date = datetime.date(2013, 5, 1)
    while date < end_date:

        if sales:
            for i in range(SALES_PER_MONTH.pop()):
                #~ print __file__, date
                invoice = sales.Invoice(journal=JOURNAL_S,
                                        partner=CUSTOMERS.pop(),
                                        user=USERS.pop(),
                                        date=date + delta(days=10 + DATE_DELTAS.pop()))
                yield invoice
                for j in range(ITEMCOUNT.pop()):
                    item = sales.InvoiceItem(voucher=invoice,
                                             product=PRODUCTS.pop(),
                                             qty=QUANTITIES.pop()
                                             )
                    item.product_changed(REQUEST)
                    item.before_ui_save(REQUEST)
                    #~ if item.total_incl:
                        #~ print "20121208 ok", item
                    #~ else:
                        #~ if item.product.price:
                            #~ raise Exception("20121208")
                    yield item
                #~ invoice.set_workflow_state('registered')
                # ~ invoice.state = 'registered' # automatically call
                invoice.register(REQUEST)
                invoice.save()

        for story in PURCHASE_STORIES:
            invoice = ledger.AccountInvoice(journal=JOURNAL_P,
                                            partner=story[0],
                                            user=USERS.pop(),
                                            date=date + delta(days=DATE_DELTAS.pop()))
            yield invoice
            for account, amount in story[1]:
                amount += amount + \
                    (amount * INFLATION_RATE * (date.year - START_YEAR))
                item = ledger.InvoiceItem(voucher=invoice,
                                          account=account,
                                          total_incl=amount +
                                          AMOUNT_DELTAS.pop()
                                          )
                item.total_incl_changed(REQUEST)
                item.before_ui_save(REQUEST)
                #~ if item.total_incl:
                    #~ print "20121208 ok", item
                #~ else:
                    #~ if item.product.price:
                        #~ raise Exception("20121208")
                yield item
            invoice.register(REQUEST)
            invoice.save()

        # last month not yet done
        if finan and (end_date - date) > MORE_THAN_A_MONTH:
            #~ po = finan.PaymentOrder(journal=JOURNAL_PO,
            JOURNAL_PO = ledger.Journal.objects.get(ref="PO")
            po = JOURNAL_PO.create_voucher(
                user=USERS.pop(),
                date=date + delta(days=20))
            yield po
            suggestions = finan.SuggestionsByPaymentOrder.request(po)
            ba = finan.SuggestionsByPaymentOrder.get_action_by_name('do_fill')
            ar = ba.request(master_instance=po)
            ar.selected_rows = [x for x in suggestions]
            ar.run()
            po.register(REQUEST)
            po.save()

            #~ bs = finan.BankStatement(journal=JOURNAL_BANK,
            JOURNAL_BANK = ledger.Journal.objects.get(ref="B")
            bs = JOURNAL_BANK.create_voucher(
                user=USERS.pop(),
                date=date + delta(days=28))
            yield bs
            suggestions = finan.SuggestionsByBankStatement.request(bs)
            ba = suggestions.actor.get_action_by_name('do_fill')
            ar = ba.request(master_instance=bs)
            ar.selected_rows = [x for x in suggestions]
            ar.run()
            bs.register(REQUEST)
            bs.save()

        date += delta(months=1)
Ejemplo n.º 15
0
"""
Run using::

  python manage.py run 0914.py
  
"""

if False:  # TIMTOWTDI: the following is equivalent
    from django.conf import settings

    settings.LINO.startup()
    root = settings.LINO.user_model.objects.get(username="******")
    ar = settings.LINO.modules.pcsw.UsersWithClients.request(user=root)
    print ar.to_rst()
else:
    from lino import dd

    pcsw = dd.resolve_app("pcsw")
    User = dd.resolve_model("users.User")
    root = User.objects.get(username="******")
    print pcsw.UsersWithClients.request(user=root).to_rst()
Ejemplo n.º 16
0
    def kernel_startup(kernel, self):
        """This is a part of a Lino site setup.  The Django Model definitions
        are done, now Lino analyzes them and does certain actions:

        - Verify that there are no more pending injects
        - Install a DisableDeleteHandler for each Model into `_lino_ddh`
        - Install :class:`lino.dd.Model` attributes and methods into
          Models that don't inherit from it.

        """
        if len(sys.argv) == 0:
            process_name = 'WSGI'
        else:
            process_name = ' '.join(sys.argv)
        #~ logger.info("Started %s on %r (PID %s).", process_name,self.title,os.getpid())
        logger.info("Started %s (using %s) --> PID %s",
                    process_name, settings.SETTINGS_MODULE, os.getpid())
        logger.info(self.welcome_text())

        def goodbye():
            logger.info("Done %s (PID %s)", process_name, os.getpid())
        atexit.register(goodbye)

        models_list = models.get_models(include_auto_created=True)
        # this also triggers django.db.models.loading.cache._populate()

        if self.user_model:
            self.user_model = dd.resolve_model(self.user_model,
                                               strict="Unresolved model '%s' in user_model.")

        if self.project_model:
            self.project_model = dd.resolve_model(
                self.project_model,
                strict="Unresolved model '%s' in project_model.")

        for app_name_model, p in self.override_modlib_models.items():
            # app_name_model is the full installed app module name +
            # the model name. It certainly contains at least one dot.
            m = '.'.join(app_name_model.split('.')[-2:])
            dd.resolve_model(
                m,
                strict="%s plugin tries to extend unresolved model '%%s'" %
                p.__class__.__module__)

        for model in models_list:
            #~ print 20130216, model
            #~ fix_field_cache(model)

            model._lino_ddh = DisableDeleteHandler(model)

            dd.Model.django2lino(model)

            if isinstance(model.hidden_columns, basestring):
                model.hidden_columns = frozenset(
                    dd.fields_list(model, model.hidden_columns))

            if isinstance(model.active_fields, basestring):
                model.active_fields = frozenset(
                    dd.fields_list(model, model.active_fields))

            if isinstance(model.allow_cascaded_delete, basestring):
                model.allow_cascaded_delete = tuple(
                    dd.fields_list(model, model.allow_cascaded_delete))

            if model._meta.abstract:
                raise Exception("Tiens?")

            # self.modules.define(model._meta.app_label, model.__name__, model)

            for f in model._meta.virtual_fields:
                if isinstance(f, generic.GenericForeignKey):
                    settings.SITE.GFK_LIST.append(f)

        # vip_classes = (layouts.BaseLayout, fields.Dummy)
        # for a in models.get_apps():
        #     app_label = a.__name__.split('.')[-2]

        #     for k, v in a.__dict__.items():
        #         if isinstance(v, type) and issubclass(v, vip_classes):
        #             self.modules.define(app_label, k, v)

        #         if k.startswith('setup_'):
        #             self.modules.define(app_label, k, v)

        self.setup_choicelists()
        self.setup_workflows()

        for model in models_list:

            for f, m in model._meta.get_fields_with_model():

                # Refuse nullable CharFields, but don't trigger on
                # NullableCharField (which is a subclass of CharField).

                if f.__class__ is models.CharField and f.null:
                    msg = "Nullable CharField %s in %s" % (f.name, model)
                    raise Exception(msg)
                    #~ if f.__class__ is models.CharField:
                        #~ raise Exception(msg)
                    #~ else:
                        #~ logger.info(msg)
                elif isinstance(f, models.ForeignKey):
                    #~ f.rel.to = dd.resolve_model(f.rel.to,strict=True)
                    if isinstance(f.rel.to, basestring):
                        raise Exception("%s %s relates to %r (models are %s)" %
                                        (model, f.name, f.rel.to, models_list))
                    set_default_verbose_name(f)

                    """
                    If JobProvider is an MTI child of Company,
                    then mti.delete_child(JobProvider) must not fail on a
                    JobProvider being refered only by objects that can refer
                    to a Company as well.
                    """
                    if hasattr(f.rel.to, '_lino_ddh'):
                        f.rel.to._lino_ddh.add_fk(m or model, f)

        for p in self.installed_plugins:
            if isinstance(p, LinoPlugin):
                p.before_analyze(self)

        dd.pre_analyze.send(self, models_list=models_list)
        # MergeActions are defined in pre_analyze.
        # And MergeAction needs the info in _lino_ddh to correctly find
        # keep_volatiles

        for model in models_list:

            """
            Virtual fields declared on the model must have 
            been attached before calling Model.site_setup(), 
            e.g. because pcsw.Person.site_setup() 
            declares `is_client` as imported field.
            """

            model.on_analyze(self)

            for k, v in class_dict_items(model):
                if isinstance(v, dd.VirtualField):
                    v.attach_to_model(model, k)

        #~ logger.info("20130817 attached model vfs")

        actors.discover()

        logger.debug("actors.initialize()")
        for a in actors.actors_list:
            a.class_init()

        dbtables.discover()
        #~ choosers.discover()
        actions.discover_choosers()

        #~ from lino.core import ui
        #~ ui.site_setup(self)

        for a in actors.actors_list:
            a.on_analyze(self)

        #~ logger.info("20130121 GFK_LIST is %s",['%s.%s'%(full_model_name(f.model),f.name) for f in settings.SITE.GFK_LIST])
        dd.post_analyze.send(self, models_list=models_list)

        logger.info("Languages: %s. %d apps, %d models, %s actors.",
                    ', '.join([li.django_code for li in self.languages]),
                    len(self.modules),
                    len(models_list),
                    len(actors.actors_list))

        #~ logger.info(settings.INSTALLED_APPS)

        self.on_each_app('site_setup')

        # Actor.after_site_setup() is called after the apps'
        # site_setup().  Example: pcsw.site_setup() adds a detail to
        # properties.Properties, the base class for
        # properties.PropsByGroup.  The latter would not install a
        # `detail_action` during her after_site_setup() and also would
        # never get it later.

        for a in actors.actors_list:
            a.after_site_setup(self)

        #~ self.on_site_startup()

        self.resolve_virtual_fields()
Ejemplo n.º 17
0
 def pupil_choices(cls, course):
     Pupil = dd.resolve_model(config.pupil_model)
     return Pupil.objects.all()
Ejemplo n.º 18
0
def startup_site(self):
    """
    This is the code that runs when you call :meth:`lino.site.Site.startup`.
    This is a part of a Lino site setup.
    The Django Model definitions are done, now Lino analyzes them and does certain actions.
    
    - Verify that there are no more pending injects
    - Install a DisableDeleteHandler for each Model into `_lino_ddh`
    - Install :class:`lino.dd.Model` attributes and methods into Models that
      don't inherit from it.
    
    """
    if len(sys.argv) == 0:
        process_name = 'WSGI'
    else:
        process_name = ' '.join(sys.argv)
    #~ logger.info("Started %s on %r (PID %s).", process_name,self.title,os.getpid())
    logger.info("Started %s (using %s) --> PID %s", 
        process_name,settings.SETTINGS_MODULE,os.getpid())
    logger.info(self.welcome_text())
    
    def goodbye():
        logger.info("Done %s (PID %s)",process_name,os.getpid())
    atexit.register(goodbye)
    
    #~ analyze_models(self)
    
    #~ print 20130219, __file__, "setup_choicelists 1"
    
    #~ logger.info("Analyzing models...")
    
    #~ self = settings.SITE
    #~ logger.info(self.welcome_text())
    
    #~ """
    #~ Activate the site's default language
    #~ """
    #~ dd.set_language(None)
            
    #~ logger.info(lino.welcome_text())
    #~ raise Exception("20111229")
    
    models_list = models.get_models(include_auto_created=True) 
    # this also triggers django.db.models.loading.cache._populate()
    
    if self.user_model:
        self.user_model = dd.resolve_model(self.user_model,
            strict="Unresolved model '%s' in user_model.")
    #~ if self.person_model:
        #~ self.person_model = dd.resolve_model(self.person_model,strict="Unresolved model '%s' in person_model.")
        
    #~ print 20130219, __file__, "setup_choicelists 2"
    
    if self.project_model:
        self.project_model = dd.resolve_model(self.project_model,
            strict="Unresolved model '%s' in project_model.")
        
    #~ print 20130219, __file__, "setup_choicelists 3"
    
    for m in self.override_modlib_models:
        dd.resolve_model(m,
            strict="Unresolved model '%s' in override_modlib_models.")
    
    for model in models_list:
        #~ print 20130216, model
        #~ fix_field_cache(model)
      
        model._lino_ddh = DisableDeleteHandler(model)
        
        for k in dd.Model.LINO_MODEL_ATTRIBS:
            if not hasattr(model,k):
                #~ setattr(model,k,getattr(dd.Model,k))
                setattr(model,k,dd.Model.__dict__[k])
                #~ model.__dict__[k] = getattr(dd.Model,k)
                #~ logger.info("20121127 Install default %s for %s",k,model)
              
        if isinstance(model.hidden_columns,basestring):
            model.hidden_columns = frozenset(dd.fields_list(model,model.hidden_columns))

        if model._meta.abstract:
            raise Exception("Tiens?")
            
        self.modules.define(model._meta.app_label,model.__name__,model)
                
        for f in model._meta.virtual_fields:
            if isinstance(f,generic.GenericForeignKey):
                settings.SITE.GFK_LIST.append(f)

    for a in models.get_apps():
        #~ for app_label,a in loading.cache.app_store.items():
        app_label = a.__name__.split('.')[-2]
        #~ logger.info("Installing %s = %s" ,app_label,a)
        
        for k,v in a.__dict__.items():
            if isinstance(v,type) and issubclass(v,layouts.BaseLayout):
                #~ print "%s.%s = %r" % (app_label,k,v)
                self.modules.define(app_label,k,v)
            #~ if isinstance(v,type) and issubclass(v,dd.Plugin):
                #~ self.plugins.append(v)
                
            #~ if isinstance(v,type)  and issubclass(v,dd.Module):
                #~ logger.info("20120128 Found module %s",v)
            if k.startswith('setup_'):
                self.modules.define(app_label,k,v)
                
    self.setup_choicelists()
    self.setup_workflows()
    
    for model in models_list:
        
        for f, m in model._meta.get_fields_with_model():
            #~ if isinstance(f,models.CharField) and f.null:
            if f.__class__ is models.CharField and f.null:
                msg = "Nullable CharField %s in %s" % (f.name,model)
                raise Exception(msg)
                #~ if f.__class__ is models.CharField:
                    #~ raise Exception(msg)
                #~ else:
                    #~ logger.info(msg)
            elif isinstance(f,models.ForeignKey):
                #~ f.rel.to = dd.resolve_model(f.rel.to,strict=True)
                if isinstance(f.rel.to,basestring):
                    raise Exception("%s %s relates to %r (models are %s)" % (model,f.name,f.rel.to,models_list))
                set_default_verbose_name(f)
                    
                """
                If JobProvider is an MTI child of Company,
                then mti.delete_child(JobProvider) must not fail on a 
                JobProvider being refered only by objects that can refer 
                to a Company as well.
                """
                if hasattr(f.rel.to,'_lino_ddh'):
                    #~ f.rel.to._lino_ddh.add_fk(model,f) # 20120728
                    f.rel.to._lino_ddh.add_fk(m or model,f)
                        
    dd.pre_analyze.send(self,models_list=models_list)
    # MergeActions are defined in pre_analyze. 
    # And MergeAction needs the info in _lino_ddh to correctly find keep_volatiles
    
    
    for model in models_list:
      
        """
        Virtual fields declared on the model must have 
        been attached before calling Model.site_setup(), 
        e.g. because pcsw.Person.site_setup() 
        declares `is_client` as imported field.
        """
      
        model.on_analyze(self)
            
        for k,v in class_dict_items(model):
            if isinstance(v,dd.VirtualField):
                v.attach_to_model(model,k)
                
    #~ logger.info("20130817 attached model vfs")
                    
    actors.discover()
    
    actors.initialize()
    dbtables.discover()
    #~ choosers.discover()
    actions.discover_choosers()
    
    #~ from lino.core import ui
    #~ ui.site_setup(self)
    
    for a in actors.actors_list:
        a.on_analyze(self)
    
        
    #~ logger.info("20130121 GFK_LIST is %s",['%s.%s'%(full_model_name(f.model),f.name) for f in settings.SITE.GFK_LIST])
    dd.post_analyze.send(self,models_list=models_list)
    
    logger.info("Languages: %s. %d apps, %d models, %s actors.",
        ', '.join([li.django_code for li in self.languages]),
        len(self.modules),
        len(models_list),
        len(actors.actors_list))
    
    #~ logger.info(settings.INSTALLED_APPS)
    
    self.on_each_app('site_setup')
    
    """
    Actor.after_site_setup() is called after the apps' site_setup().
    Example: pcsw.site_setup() adds a detail to properties.Properties, 
    the base class for properties.PropsByGroup. 
    The latter would not 
    install a `detail_action` during her after_site_setup() 
    and also would never get it later.
    """
    for a in actors.actors_list:
        a.after_site_setup(self)
        
    #~ self.on_site_startup()

    self.resolve_virtual_fields()
Ejemplo n.º 19
0
Archivo: std.py Proyecto: raffas/lino
def objects():

    # ~ add = Instantiator('cal.EventStatus','ref').build
    # ~ yield add('0',**babel_values('name',en=u"tentative",de=u"Vorschlag",   fr=u"proposition"))
    # ~ yield add('1',**babel_values('name',en=u"confirmed",de=u"bestätigt",   fr=u"confirmé"))
    # ~ yield add('2',**babel_values('name',en=u"cancelled",de=u"storniert",   fr=u"annulé"))
    # ~ yield add('3',**babel_values('name',en=u"rescheduled",de=u"verschoben",   fr=u"reporté"))
    # ~ yield add('4',**babel_values('name',en=u"absent",de=u"abwesend",   fr=u"absent"))

    # ~ add = Instantiator('cal.TaskStatus','ref').build
    # ~ yield add('0',**babel_values('name',en=u"needs action",de=u"zu erledigen",   fr=u"à traîter"))
    # ~ yield add('1',**babel_values('name',en=u"in process",de=u"begonnen",   fr=u"commencée"))
    # ~ yield add('2',**babel_values('name',en=u"completed",de=u"erledigt",   fr=u"complétée"))
    # ~ yield add('3',**babel_values('name',en=u"cancelled",de=u"storniert",   fr=u"annulée"))
    # ~ add = Instantiator('cal.AccessClass','ref').build
    # ~ yield add('0',**babel_values('name',en=u"Public",de=u"Öffentlich",   fr=u"Public"))
    # ~ yield add('1',**babel_values('name',en=u"Private",de=u"Privat",   fr=u"Privé"))
    # ~ yield add('2',**babel_values('name',en=u"Confidential",de=u"Vertraulich",   fr=u"Confidentiel"))
    add = Instantiator("cal.Priority", "ref").build
    yield add("1", **babel_values("name", en="very urgent", de="sehr dringend", fr="très urgent"))
    yield add("2", **babel_values("name", en="quite urgent", de="recht dringend", fr="relativement urgent"))
    yield add("3", **babel_values("name", en="relatively urgent", de="ziemlich dringend", fr="relativement urgent"))
    yield add("4", **babel_values("name", en="relatively urgent", de="ziemlich dringend", fr="relativement urgent"))
    yield add("5", **babel_values("name", en="normal", de="normal", fr="normal"))
    yield add("6", **babel_values("name", en="not very urgent", de="nicht sehr niedrig", fr="pas très urgent"))
    yield add("7", **babel_values("name", en="not urgent", de="nicht dringend", fr="pas urgent"))
    yield add("8", **babel_values("name", en="not urgent", de="nicht dringend", fr="pas urgent"))
    yield add(
        "9", **babel_values("name", en="not urgent at all", de="überhaupt nicht dringend", fr="pas urgent du tout")
    )

    calendar = Instantiator("cal.Calendar").build
    general = calendar(**dd.babelkw("name", de="Allgemein", fr="Général", en="General"))
    yield general
    settings.SITE.site_config.site_calendar = general
    # ~ settings.SITE.site_config.holiday_event_type = holidays
    yield settings.SITE.site_config

    event_type = Instantiator("cal.EventType").build
    holidays = event_type(all_rooms=True, **dd.babelkw("name", de="Feiertage", fr="Jours fériés", en="Holidays"))
    yield holidays

    RecurrentEvent = dd.resolve_model("cal.RecurrentEvent")
    add = Instantiator(RecurrentEvent, event_type=holidays).build

    def holiday(month, day, en, de, fr):
        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)
        )

    yield holiday(1, 1, "New Year's Day", "Neujahr", "Jour de l'an")
    yield holiday(5, 1, "International Workers' Day", "Tag der Arbeit", "Premier Mai")
    yield holiday(7, 21, "National Day", "Nationalfeiertag", "Fête nationale")
    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")

    summer = holiday(07, 01, "Summer holidays", "Sommerferien", "Vacances d'été")
    summer.end_date = summer.start_date.replace(month=8, day=31)
    yield summer

    ar = settings.SITE.login()
    for obj in RecurrentEvent.objects.all():
        if not obj.update_reminders(ar):
            raise Exception("Oops, %s generated no events" % obj)
Ejemplo n.º 20
0
def new_content_type_id(m):
    if m is None: return m
    # if not fmn: return None
    # m = resolve_model(fmn)
    ct = ContentType.objects.get_for_model(m)
    if ct is None: return None
    return ct.pk
    

def bv2kw(fieldname,values):
    """
    Needed if `lino.Lino.languages` changed between dumpdata and loaddata
    """
    return babel.babel_values(fieldname,en=values[0])
    
admin_LogEntry = resolve_model("admin.LogEntry")
auth_Group = resolve_model("auth.Group")
auth_Permission = resolve_model("auth.Permission")
auth_User = resolve_model("auth.User")
contenttypes_ContentType = resolve_model("contenttypes.ContentType")
polls_Choice = resolve_model("polls.Choice")
polls_Poll = resolve_model("polls.Poll")
sessions_Session = resolve_model("sessions.Session")
sites_Site = resolve_model("sites.Site")

def create_django_admin_log(id, action_time, user_id, content_type_id, object_id, object_repr, action_flag, change_message):
    kw = dict()
    kw.update(id=id)
    kw.update(action_time=action_time)
    kw.update(user_id=user_id)
    content_type_id = new_content_type_id(content_type_id)
Ejemplo n.º 21
0
but publicly available at http://belref.lino-framework.org/

"""

from __future__ import unicode_literals
import re


abbrRE = re.compile("^(.*)\s*\((.*)\)\s*",re.DOTALL)



from north import dbutils

from lino import dd
Concept = dd.resolve_model('concepts.Concept')

from lino.modlib.concepts.models import LinkTypes

def C(en,de,fr='',nl='',jargon=None,obsoletes=None,**kw):
    texts = dict(en=en,de=de,fr=fr,nl=nl)
    name = dict()
    abbr = dict()
    for lang in 'en','de','fr','nl':
        t = texts.get(lang)
        if t:
            mo = abbrRE.match(t)
            if mo:
                abbr[lang] = mo.group(1).strip()
                name[lang] = mo.group(2).strip()
                #~ kw['abbr_'+lang] = mo.group(1).strip()
Ejemplo n.º 22
0
from django.db.utils import DatabaseError
from django.db import models

import lino

from lino import dd, rt

from lino.utils import confirm, iif
from lino.utils import dblogger

from lino.utils.daemoncommand import DaemonCommand
from ...utils import aware, dt2kw, setkw


Place = dd.resolve_model('cal.Place')
Calendar = dd.resolve_model('cal.Calendar')
Event = dd.resolve_model('cal.Event')
RecurrenceSet = dd.resolve_model('cal.RecurrenceSet')

#~ REQUEST = dblogger.PseudoRequest('watch_calendars')

# dblogger.log_changes(REQUEST,obj)


def prettyPrint(obj):
    s = StringIO()
    out = sys.stdout
    sys.stdout = s
    obj.prettyPrint()
    sys.stdout = out
Ejemplo n.º 23
0
 def tasks_summary(ui,user,days_back=None,days_forward=None,**kw):
   """
   Return a HTML summary of all open reminders for this user.
   May be called from :xfile:`welcome.html`.
   """
   Task = dd.resolve_model('cal.Task')
   Event = dd.resolve_model('cal.Event')
   today = datetime.date.today()
   
   past = {}
   future = {}
   def add(cmp):
       if cmp.start_date < today:
       #~ if task.dt_alarm < today:
           lookup = past
       else:
           lookup = future
       day = lookup.get(cmp.start_date,None)
       if day is None:
           day = [cmp]
           lookup[cmp.start_date] = day
       else:
           day.append(cmp)
           
   #~ filterkw = { 'due_date__lte' : today }
   filterkw = {}
   if days_back is not None:
       filterkw.update({ 
           'start_date__gte' : today - datetime.timedelta(days=days_back)
           #~ 'dt_alarm__gte' : today - datetime.timedelta(days=days_back)
       })
   if days_forward is not None:
       filterkw.update({ 
           'start_date__lte' : today + datetime.timedelta(days=days_forward)
           #~ 'dt_alarm__lte' : today + datetime.timedelta(days=days_forward)
       })
   #~ filterkw.update(dt_alarm__isnull=False)
   filterkw.update(user=user)
   
   for o in Event.objects.filter(
       #~ models.Q(status=None) | models.Q(status__reminder=True),
       models.Q(state=None) | models.Q(state__lte=EventStates.published),
       **filterkw).order_by('start_date'):
       add(o)
       
   #~ filterkw.update(done=False)
   #~ filterkw.update(state__in=[TaskState.blank_item,TaskState.todo]) 20120829
   filterkw.update(state__in=[None,TaskStates.todo])
           
   for task in Task.objects.filter(**filterkw).order_by('start_date'):
       add(task)
       
   def loop(lookup,reverse):
       sorted_days = lookup.keys()
       sorted_days.sort()
       if reverse: 
           sorted_days.reverse()
       for day in sorted_days:
           yield '<h3>'+dtosl(day) + '</h3>'
           yield dd.summary(ui,lookup[day],**kw)
           
   #~ cells = ['Ausblick'+':<br>',cgi.escape(u'Rückblick')+':<br>']
   cells = [
     cgi.escape(_('Upcoming reminders')) + ':<br>',
     cgi.escape(_('Past reminders')) + ':<br>'
   ]
   for s in loop(future,False):
       cells[0] += s
   for s in loop(past,True):
       cells[1] += s
   s = ''.join(['<td valign="top" bgcolor="#eeeeee" width="30%%">%s</td>' % s for s in cells])
   s = '<table cellspacing="3px" bgcolor="#ffffff"><tr>%s</tr></table>' % s
   s = '<div class="htmlText">%s</div>' % s
   return s
Ejemplo n.º 24
0
import decimal
from dateutil.relativedelta import relativedelta
ONE_DAY = relativedelta(days=1)
DEMO_DURATION = relativedelta(hours=1, minutes=30)

from django.db import models
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext as _

from lino.utils import Cycler

from lino import dd, rt

cal = dd.resolve_app('cal')
Event = dd.resolve_model('cal.Event')
EventType = dd.resolve_model('cal.EventType')
# Subscription = rt.modules.cal.Subscription
Calendar = dd.resolve_model('cal.Calendar')


# def subscribe_all():

#     for u in settings.SITE.user_model.objects.exclude(profile=''):
#         for obj in Calendar.objects.all():
#             obj = Subscription(user=u, calendar=obj)
#             yield obj


def objects():
Ejemplo n.º 25
0
from lino import dd
User = dd.resolve_model('users.User')

def objects():

    yield User(username='******',
      first_name='Piet',last_name='Bommel',
      email='*****@*****.**',
      is_staff=True)

    yield User(username='******',
      first_name='Jean',last_name='Dupond',
      email='*****@*****.**',
      is_staff=True)
      
Ejemplo n.º 26
0
Archivo: demo.py Proyecto: cuchac/lino
# -*- coding: UTF-8 -*-

from __future__ import unicode_literals

from lino import dd

Product = dd.resolve_model('babel_tutorial.Product')
from north.dbutils import babel_values


def P(en, de, fr, cat):
    return Product(category=cat, **babel_values('name', en=en, de=de, fr=fr))


def objects():
    yield P("Chair", "Stuhl", "Chaise", '03')
    yield P("Table", "Tisch", "Table", '03')
    yield P("Monitor", "Bildschirm", "Écran", '01')
    yield P("Mouse", "Maus", "Souris", '03')
    yield P("Keyboard", "Tastatur", "Clavier", '03')
    yield P("Consultation", "Beratung", "Consultation", '02')
Ejemplo n.º 27
0
 def type_choices(self, upload_area):
     M = dd.resolve_model('uploads.UploadType')
     logger.info("20140430 type_choices %s", upload_area)
     if upload_area is None:
         return M.objects.all()
     return M.objects.filter(upload_area=upload_area)
Ejemplo n.º 28
0

config = settings.SITE.plugins.courses

users = dd.resolve_app('users')
cal = dd.resolve_app('cal')
sales = dd.resolve_app('sales')
contacts = dd.resolve_app('contacts')

"""
Here we must use `resolve_model` with `strict=True`
because we want the concrete model
and we don't know whether it is overridden
by this application.
"""
Person = dd.resolve_model('contacts.Person', strict=True)
# equivalent alternative :
#~ Person = settings.SITE.modules.contacts.Person


class CourseAreas(dd.ChoiceList):
    verbose_name = _("Course area")
    verbose_name_plural = _("Course areas")
add = CourseAreas.add_item
add('C', _("Courses"), 'default')
# add('J', _("Journeys"), 'journeys')


class StartEndTime(dd.Model):

    class Meta:
Ejemplo n.º 29
0
# along with Lino; if not, see <http://www.gnu.org/licenses/>.
"""
Adds an arbitrary selection of a few demo countries.
"""

from __future__ import unicode_literals


from django.db import models
#countries = models.get_app('countries')

from lino import dd
from lino.utils.instantiator import Instantiator
from north.dbutils import babel_values

Country = dd.resolve_model('countries.Country')
build_country = Instantiator('countries.Country', "isocode").build


def objects():

    def country(isocode, **kw):
        try:
            return Country.objects.get(isocode=isocode)
        except Country.DoesNotExist:
            # return build_country(isocode, **kw)
            return Country(isocode=isocode, **kw)

    yield country('EE', **babel_values('name',
                                       de=u"Estland",
                                       fr=u'Estonie',
Ejemplo n.º 30
0
def objects():

    Person = dd.resolve_model(dd.apps.humanlinks.person_model)
    Link = rt.modules.humanlinks.Link
    LinkTypes = rt.modules.humanlinks.LinkTypes
    ar = rt.login()

    households = dd.resolve_app('households')
    if households:
        married = households.Type.objects.get(
            **dd.str2kw('name', _("Married")))
        divorced = households.Type.objects.get(
            **dd.str2kw('name', _("Divorced")))

    ig = InstanceGenerator()
    ig.add_instantiator(
        'person', Person, 'first_name last_name gender birth_date')
    ig.add_instantiator(
        'link', Link, 'parent child type')

    NAME1 = "Frisch"

    opa = ig.person("Hubert", NAME1, 'M', '1933-07-21')
    oma = ig.person("Gaby", "Frogemuth", 'F', '1934-08-04')

    P = ig.person("Paul", NAME1, 'M', '1967-06-19')
    L = ig.person("Ludwig", NAME1, 'M', '1968-06-01')
    A = ig.person("Alice", NAME1, 'F', '1969-12-19')
    B = ig.person("Bernd", NAME1, 'M', '1971-09-10')

    P1 = ig.person("Paula", "Einzig", 'F', '1968-12-19')
    P1A = ig.person("Peter", NAME1, 'M', '1987-06-19')
    P2 = ig.person("Petra", "Zweith", 'F', '1968-12-19')
    P2A = ig.person("Philippe", NAME1, 'M', '1997-06-19')
    P2B = ig.person("Clara", NAME1, 'F', '1999-06-19')
    P3 = ig.person("Dora", "Drosson", 'F', '1971-12-19')
    P3A = ig.person("Dennis", NAME1, 'M', '2001-06-19')

    L1 = ig.person("Laura", "Loslever", 'F', '1968-04-27')
    L1A = ig.person("Melba", NAME1, 'F', '2002-04-05')
    L1B = ig.person("Irma", NAME1, 'F', '2008-03-24')

    yield ig.flush()

    ig.link(opa, oma, LinkTypes.spouse)

    for i in (P, L, A, B):
        ig.link(opa, i, LinkTypes.parent)
        ig.link(oma, i, LinkTypes.parent)

    ig.link(P, P1A, LinkTypes.parent)
    ig.link(P1, P1A, LinkTypes.parent)

    ig.link(P, P2A, LinkTypes.parent)
    ig.link(P2, P2A, LinkTypes.parent)

    ig.link(P, P2B, LinkTypes.parent)
    ig.link(P2, P2B, LinkTypes.parent)

    ig.link(P, P3A, LinkTypes.parent)
    ig.link(P3, P3A, LinkTypes.parent)

    ig.link(P, P2, LinkTypes.spouse)

    ig.link(L, L1, LinkTypes.spouse)

    for i in (L1A, L1B):
        ig.link(L, i, LinkTypes.parent)
        ig.link(L1, i, LinkTypes.parent)

    yield ig.flush()

    if households:
        households.Household.create_household(ar, opa, oma, married)

        households.Household.create_household(ar, P, P1, divorced)
        hh = households.Household.create_household(ar, P, P2, married)
        hh.members_by_role('head')[0].set_primary(ar)
        hh.members_by_role('partner')[0].set_primary(ar)

        households.Household.create_household(ar, L, L1, married)

    A = ig.person("Albert", "Adam", 'M', '1973-07-21')
    B = ig.person("Bruno", "Braun", 'M', '1973-07-22')

    E = ig.person("Eveline", "Evrard", 'F', '1974-08-21')
    F = ig.person("Françoise", "Freisen", 'F', '1974-08-22')

    I = ig.person("Ilja", "Adam", 'M', '1994-08-22')
    J = ig.person("Jan", "Braun", 'M', '1996-08-22')
    K = ig.person("Kevin", "Braun", 'M', '1998-08-22')
    L = ig.person("Lars", "Braun", 'M', '1998-08-22')

    M = ig.person("Monique", "Braun", 'F', '2000-08-22')
    N = ig.person("Noémie", "Adam", 'F', '2002-08-22')
    O = ig.person("Odette", "Adam", 'F', '2004-08-22')
    P = ig.person("Pascale", "Adam", 'F', '2004-08-22')

    yield ig.flush()

    ig.link(A, I, LinkTypes.parent)
    ig.link(A, N, LinkTypes.parent)
    ig.link(A, O, LinkTypes.parent)
    ig.link(A, P, LinkTypes.parent)

    ig.link(B, J, LinkTypes.parent)
    ig.link(B, K, LinkTypes.parent)
    ig.link(B, L, LinkTypes.parent)
    ig.link(B, M, LinkTypes.parent)

    ig.link(E, I, LinkTypes.parent)
    ig.link(E, J, LinkTypes.parent)
    ig.link(E, K, LinkTypes.parent)
    ig.link(E, L, LinkTypes.parent)

    ig.link(F, M, LinkTypes.parent)
    ig.link(F, N, LinkTypes.parent)
    ig.link(F, O, LinkTypes.parent)
    ig.link(F, P, LinkTypes.parent)

    ig.link(A, F, LinkTypes.spouse)
    ig.link(B, E, LinkTypes.spouse)

    yield ig.flush()

    if households:
        households.Household.create_household(ar, A, E, married)
        households.Household.create_household(ar, A, F, divorced)
        households.Household.create_household(ar, B, E, divorced)
        households.Household.create_household(ar, B, F, married)