Пример #1
0
def migrate_datas():
    from autonomie_base.models.base import DBSESSION
    session = DBSESSION()
    from autonomie.models.populate import populate_project_types
    populate_project_types(session)

    from autonomie.models.project.types import (
        ProjectType,
        BusinessType,
    )

    from autonomie.models.populate import populate_project_types
    populate_project_types(session)

    default_ptype_id = ProjectType.get_default().id
    default_btype_id = BusinessType.get_default().id

    course_ptype_id = ProjectType.query().filter_by(name='training').first().id
    course_btype_id = BusinessType.query().filter_by(
        name='training').first().id

    op.execute("update project set project_type_id=%s" % default_ptype_id)

    op.execute("update task set version='4.1'")

    for typ_ in ('estimation', 'invoice'):
        query = "update task join {type_} on {type_}.id=task.id set \
business_type_id={btype_id} where {type_}.course={course}"

        op.execute(
            query.format(type_=typ_, btype_id=default_btype_id, course=0))
        op.execute(query.format(type_=typ_, btype_id=course_btype_id,
                                course=1))

        query2 = "update project set project_type_id={ptype_id} where \
(select count(task.id) from task join {type_} on {type_}.id=task.id \
where {type_}.course=1 and task.project_id=project.id ) > 0;"

        op.execute(query2.format(
            type_=typ_,
            ptype_id=course_ptype_id,
        ))

    query = "update task join cancelinvoice on cancelinvoice.id=task.id set \
business_type_id={btype_id}".format(btype_id=default_btype_id)
    op.execute(query)
    query = "update task join cancelinvoice on cancelinvoice.id=task.id join \
task as task2 on cancelinvoice.invoice_id=task2.id set \
task.business_type_id={btype_id} where task2.business_type_id=4".format(
        btype_id=course_btype_id)
    op.execute(query)

    _add_business_to_all_invoices(session)
Пример #2
0
    def validator(node, value):
        query = BusinessType.query().filter_by(project_type_id=value)
        if isinstance(context, BusinessType):
            query = query.filter(not_(BusinessType.id == context.id))

        if query.count() > 0:
            raise colander.Invalid(
                node, u"Ce type de projet a déjà un type d'affaire par défaut")
Пример #3
0
 def __call__(self):
     return dict(
         business_types=BusinessType.query().all(),
         mentions=TaskMention.query().all(),
         items=self._collect_items(),
         breadcrumb=self.breadcrumb,
         back_link=self.back_link,
         help_message=self.help_message,
     )
Пример #4
0
 def __call__(self):
     return dict(
         business_types=BusinessType.query().all(),
         mentions=TaskMention.query().all(),
         items=self._collect_items(),
         breadcrumb=self.breadcrumb,
         back_link=self.back_link,
         help_message=self.help_message,
     )
Пример #5
0
def populate_project_types(session):
    from autonomie.models.project.types import (
        ProjectType,
        BusinessType,
    )
    for name, label, subtype_label, private, default in (
        (
            "default",
            u"Projet classique",
            "Affaire simple",
            False,
            True,
        ),
        ("training", u"Convention de formation", "Formation", True, False),
        ("construction", u"Chantiers", u"Chantier", True, False),
    ):
        ptype = ProjectType.query().filter_by(name=name).first()
        if ptype is None:
            ptype = ProjectType(
                name=name,
                label=label,
                editable=False,
                private=private,
                default=default,
            )
            session.add(ptype)
            session.flush()
            if name is not 'default':
                default_btype = BusinessType.query().filter_by(
                    name='default').first()
                default_btype.other_project_types.append(ptype)
                session.merge(default_btype)
                session.flush()

        if session.query(BusinessType.id).filter_by(name=name).count() == 0:
            session.add(
                BusinessType(
                    name=name,
                    label=subtype_label,
                    editable=False,
                    private=private,
                    project_type_id=ptype.id,
                ))
    session.flush()
Пример #6
0
    def validator(node, value):
        query = BusinessType.query().filter_by(project_type_id=value)
        if isinstance(context, BusinessType):
            query = query.filter(not_(BusinessType.id == context.id))

        if query.count() > 0:
            raise colander.Invalid(
                node,
                u"Ce type de projet a déjà un type d'affaire par défaut"
            )
Пример #7
0
def _collect_business_types(request):
    """
    collect business types accessible for the current user
    """
    ptype_id = request.context.project_type_id

    business_types_query = BusinessType.query_for_select()
    business_types_query = business_types_query.filter(
        BusinessType.other_project_types.any(ProjectType.id == ptype_id))

    values = []
    for business_type in business_types_query:
        if not business_type.private or \
                request.has_permission('add.%s' % business_type.name):
            values.append(business_type)
    return values
Пример #8
0
def populate_project_types(session):
    from autonomie.models.project.types import (
        ProjectType,
        BusinessType,
    )
    for name, label, subtype_label, private, default in (
        ("default", u"Projet classique", "Affaire simple", False, True,),
        ("training", u"Convention de formation", "Formation", True, False),
        ("construction", u"Chantiers", u"Chantier", True, False),
    ):
        ptype = ProjectType.query().filter_by(name=name).first()
        if ptype is None:
            ptype = ProjectType(
                name=name,
                label=label,
                editable=False,
                private=private,
                default=default,
            )
            session.add(ptype)
            session.flush()
            if name is not 'default':
                default_btype = BusinessType.query().filter_by(
                    name='default').first()
                default_btype.other_project_types.append(ptype)
                session.merge(default_btype)
                session.flush()

        if session.query(BusinessType.id).filter_by(name=name).count() == 0:
            session.add(
                BusinessType(
                    name=name,
                    label=subtype_label,
                    editable=False,
                    private=private,
                    project_type_id=ptype.id,
                )
            )
    session.flush()
Пример #9
0
 def load_items(self):
     items = BusinessType.query()
     items = items.order_by(self.factory.name)
     return items
Пример #10
0
 def populate(cls, task):
     with DBSESSION.no_autoflush:
         task.mandatory_mentions = BusinessType.get_mandatory_mentions(
             task.business_type_id,
             task.type_,
         )
Пример #11
0
 def func(name, label=None):
     label = label or name
     model = BusinessType(name=name, label=label)
     dbsession.add(model)
     dbsession.flush()
     return model