示例#1
0
    def _trainer_datas_links(self):
        result = []
        for user in self.context.employees:
            if not self.request.has_permission('edit.trainerdatas', user):
                # Je ne peux pas éditer les infos formateurs de mes collègues
                continue

            if user.id == self.request.user.id:
                label = u"Voir ma fiche formateur"
            else:
                label = u"Voir la fiche formateur de {}".format(
                    format_account(user)
                )
            result.append(
                Link(
                    self.request.route_path(
                        USER_TRAINER_EDIT_URL,
                        id=user.id
                    ),
                    label,
                    icon="fa fa-search",
                    popup=True,
                    css='btn btn-default',
                )
            )
        return result
示例#2
0
 def title(self):
     if self.is_my_account_view():
         return u"Modification de mon mot de passe"
     else:
         return u"Modification du mot de passe de {0}".format(
             format_account(self.current().user)
         )
示例#3
0
 def libelle(self):
     return self.label_template.format(
         beneficiaire=format_account(self.expense.user, reverse=False),
         beneficiaire_LASTNAME=self.expense.user.lastname.upper(),
         expense=self.expense,
         expense_date=UnicodeDate(self.expense.year, self.expense.month, 1)
     )
示例#4
0
文件: sage.py 项目: Swannbm/autonomie
 def libelle(self):
     return self.label_template.format(
         beneficiaire=format_account(self.expense.user, reverse=False),
         beneficiaire_LASTNAME=self.expense.user.lastname.upper(),
         expense=self.expense,
         expense_date=datetime.date(self.expense.year, self.expense.month,
                                    1))
示例#5
0
    def check(self, expenses):
        """
        Check if we can export the expenses

        :param expenses: the expenses to export
        :returns: a 2-uple (is_ok, messages)
        """
        count = expenses.count()
        if count == 0:
            title = u"Il n'y a aucune note de dépense à exporter"
            res = {'title': title, 'errors': []}
            return False, res

        title = u"Vous vous apprêtez à exporter {0} notes de dépense".format(
            count)

        errors = []

        if not self._check_config(self.request.config):
            url1 = self.request.route_path(EXPENSE_ACCOUNTING_URL)
            url2 = self.request.route_path(ACCOUNTING_URL)
            errors.append(CONFIG_ERROR_MSG.format(url1, url2))

        for expense in expenses:
            company = expense.company
            error = self._check_company(company)
            if error is not None:
                errors.append(
                    u"La note de dépense de {0} n'est pas exportable "
                    u"<br />{1}".format(strings.format_account(expense.user),
                                        error))

        res = {'title': title, 'errors': errors}
        return len(errors) == 0, res
示例#6
0
 def title(self):
     if self.is_my_account_view():
         return u"Modification de mes identifiants"
     else:
         return u"Modification des identifiants de {0}".format(
             format_account(self.current().user)
         )
示例#7
0
 def subject(self):
     """
         return the subject of the email
     """
     subject = u"Notes de dépense de {0} : {1}".format(
         format_account(self.expense.user),
         self.format_expense_notification())
     return subject
示例#8
0
 def format_expense_notification(self):
     """
     Return a formatted string for expense status notification
     """
     status_str = EXPENSE_NOTIFY_STATUS.get(self.new_status)
     account_label = format_account(self.request.user)
     date_label = format_date(datetime.date.today())
     return status_str.format(account_label, date_label)
示例#9
0
 def subject(self):
     """
         return the subject of the email
     """
     subject = u"Notes de dépense de {0} : {1}".format(
         format_account(self.event.node.user),
         self.format_expense_notification()
     )
     return subject
示例#10
0
 def __call__(self):
     path_query = CareerPath.query(self.current_userdatas.id)
     path_query = path_query.options(
         Load(CareerPath).load_only("start_date", "id"),
         joinedload("career_stage").load_only("name"),
     )
     return dict(career_path=path_query.all(),
                 user=self.current_userdatas.user,
                 title=u"Parcours de {0}".format(
                     format_account(self.current_userdatas.user, False)))
示例#11
0
    def format_expense_notification(self):
        """
        Return a formatted string for expense status notification
        """
        status_str = EXPENSE_NOTIFY_STATUS.get(self.event.status)
        account_label = format_account(self.request.user)
        date_label = format_date(datetime.date.today())

        if status_str != None:
            return status_str.format(account_label, date_label)
        else:
            return ""
示例#12
0
    def body(self):
        """
            return the body of the email
        """
        status_verb = get_status_verb(self.status)

        # If the document is validated, we directly send the link to the pdf
        # file
        if self.status == 'valid':
            query_args = dict(view="pdf")
        else:
            query_args = {}

        addr = self.request.route_url(
                    "/%ss/{id}.html" % self.event.node.type_,
                    id=self.event.node.id,
                    _query=query_args,
                    )
        addr = format_link(self.settings, addr)

        docnumber = self.event.node.internal_number.lower()
        customer = self.event.node.customer.label
        project = self.event.node.project.name.capitalize()
        if self.event.node.type_ == 'invoice':
            docname = u"La facture"
            gender = u"e"
            determinant = u"la"
        elif self.event.node.type_ == 'cancelinvoice':
            docname = u"L'avoir"
            gender = u""
            determinant = u"le"
        else:
            docname = u"Le devis"
            gender = u""
            determinant = u"le"
        if self.event.node.status_comment:
            comment = self.event.node.status_comment
        else:
            comment = u"Aucun"

        username = format_account(self.event.node.owner, reverse=False)
        return MAIL_TMPL.format(
                determinant=determinant,
                username=username,
                docname=docname,
                docnumber=docnumber,
                customer=customer,
                project=project,
                status_verb=status_verb,
                gender=gender,
                addr=addr,
                comment=comment)
示例#13
0
 def __call__(self):
     path_query = CareerPath.query(self.current_userdatas.id)
     path_query = path_query.options(
         Load(CareerPath).load_only("start_date", "id"),
         joinedload("career_stage").load_only("name"),
     )
     return dict(
         career_path=path_query.all(),
         user=self.current_userdatas.user,
         title=u"Parcours de {0}".format(
             format_account(self.current_userdatas.user, False)
         )
     )
示例#14
0
    def body(self):
        """
            return the body of the email
        """
        owner = format_account(self.event.node.user)
        date = u"{0}/{1}".format(self.event.node.month, self.event.node.year)
        status_verb = get_status_verb(self.event.status)
        addr = self.request.route_url("/expenses/{id}", id=self.event.node.id)
        addr = format_link(self.settings, addr)

        return MAIL_TMPL.format(
            owner=owner,
            addr=addr,
            date=date,
            status_verb=status_verb,
            comment=self.event.comment,
        )
示例#15
0
    def body(self):
        """
            return the body of the email
        """
        owner = format_account(self.expense.user)
        date = u"{0}/{1}".format(self.expense.month, self.expense.year)
        status_verb = get_status_verb(self.new_status)
        addr = self.request.route_url("/expenses/{id}", id=self.expense.id)
        addr = format_link(self.settings, addr)

        return MAIL_TMPL.format(
            owner=owner,
            addr=addr,
            date=date,
            status_verb=status_verb,
            comment=self.comment,
        )
示例#16
0
    def _trainer_datas_links(self):
        result = []
        for user in self.context.employees:
            if not self.request.has_permission('edit.trainerdatas', user):
                # Je ne peux pas éditer les infos formateurs de mes collègues
                continue

            if user.id == self.request.user.id:
                label = u"Voir ma fiche formateur"
            else:
                label = u"Voir la fiche formateur de {}".format(
                    format_account(user))
            result.append(
                Link(
                    self.request.route_path(USER_TRAINER_EDIT_URL, id=user.id),
                    label,
                    icon="fa fa-search",
                    popup=True,
                    css='btn btn-default',
                ))
        return result
示例#17
0
    def check(self, expenses):
        """
        Check if we can export the expenses

        :param expenses: the expenses to export
        :returns: a 2-uple (is_ok, messages)
        """
        count = expenses.count()
        if count == 0:
            title = u"Il n'y a aucune note de dépense à exporter"
            res = {
                'title': title,
                'errors': []
            }
            return False, res

        title = u"Vous vous apprêtez à exporter {0} notes de dépense".format(
                count)

        errors = []

        if not self._check_config(self.request.config):
            url1 = self.request.route_path(EXPENSE_ACCOUNTING_URL)
            url2 = self.request.route_path(ACCOUNTING_URL)
            errors.append(CONFIG_ERROR_MSG.format(url1, url2))

        for expense in expenses:
            company = expense.company
            error = self._check_company(company)
            if error is not None:
                errors.append(
                    u"La note de dépense de {0} n'est pas exportable "
                    u"<br />{1}".format(
                        strings.format_account(expense.user),
                        error
                    )
                )

        res = {'title': title, 'errors': errors}
        return len(errors) == 0, res
示例#18
0
def get_users_options(roles=None):
    """
    Return the list of active users from the database formatted as choices:
        [(user_id, user_label)...]

    :param role: roles of the users we want
        default:  all
        values : ('contractor', 'manager', 'admin'))
    """
    query = DBSESSION().query(User).options(
        load_only('id', 'firstname', 'lastname'))

    # Only User accounts with logins
    query = query.join(Login).filter(Login.active == True)

    query = query.order_by(User.lastname)

    if roles and not hasattr(roles, "__iter__"):
        roles = [roles]

    query = _filter_by_group(query, roles)
    return [(unicode(u.id), format_account(u)) for u in query]
示例#19
0
文件: user.py 项目: Swannbm/autonomie
    def _confirmation_form(self, query, appstruct, query_count):
        """
        Return datas used to display a confirmation form

        :param obj query: homonym SQLAlchemy query object
        :param dict appstruct: Preserved form datas
        :param int query_count: The number of homonyms
        :returns: template vars
        :rtype: dict
        """
        if query_count == 1:
            msg = u"Un compte similaire \
a déjà été créé: <ul>"

        else:
            msg = u"{0} comptes similaires ont \
déjà été créés : <ul>".format(query_count)

        for entry in query:
            msg += u"<li><a href='%s'>%s (%s)</a></li>" % (
                self.request.route_path(USER_ITEM_URL, id=entry.id),
                format_account(entry),
                entry.email,
            )
        msg += u"</ul>"
        form = self._get_form()
        _query = self.request.GET.copy()
        _query['confirmation'] = '1'
        form.action = self.request.current_route_path(_query=_query)

        form.set_appstruct(appstruct)
        datas = dict(
            form=form.render(),
            confirmation_message=msg,
            confirm_form_id=form.formid,
        )
        datas.update(self._more_template_vars())
        return datas
示例#20
0
def get_users_options(roles=None):
    """
    Return the list of active users from the database formatted as choices:
        [(user_id, user_label)...]

    :param role: roles of the users we want
        default:  all
        values : ('contractor', 'manager', 'admin'))
    """
    query = DBSESSION().query(User).options(
        load_only('id', 'firstname', 'lastname')
    )

    # Only User accounts with logins
    query = query.join(Login).filter(Login.active == True)

    query = query.order_by(User.lastname)

    if roles and not hasattr(roles, "__iter__"):
        roles = [roles]

    query = _filter_by_group(query, roles)
    return [(unicode(u.id), format_account(u)) for u in query]
示例#21
0
    def _stream_actions(self, item):
        """
        Stream actions available for the given item

        :param obj item: The company instance
        """
        yield Link(
            self.request.route_path(
                "company",
                id=item.id,
            ),
            u"Voir",
            title=u"Voir l'enseigne",
            icon="search",
        )
        if self.request.has_permission('edit.company', item):
            yield Link(
                self.request.route_path(
                    "company",
                    id=item.id,
                ),
                u"Modifier",
                title=u"Modifier les informations relatives à l'enseigne",
                icon="pencil",
            )
        if self.request.has_permission("admin.company"):
            if len(item.employees) > 1:
                yield Link(
                    self.request.route_path("company",
                                            id=item.id,
                                            _query={
                                                'action': 'remove',
                                                id: self.current_user.id
                                            }),
                    u"Retirer",
                    title=u"Retirer l'entrepreneur de cette enseigne",
                    icon="link",
                    css="text-warning",
                    confirm=u"{} n'aura plus accès aux données de cette "
                    u"l'enseigne {}. Êtes-vous sûr de vouloir continuer "
                    u"?".format(format_account(self.current_user), item.name))

            if item.active:
                yield Link(
                    self.request.route_path("company",
                                            id=item.id,
                                            _query={'action': 'disable'}),
                    u"Désactiver",
                    title=u"Désactiver cette enseigne",
                    icon="book",
                    css="text-danger",
                    confirm=u"L'enseigne {} ne sera plus accessible et "
                    u"n'apparaîtra plus dans les listes (factures, notes de "
                    u"dépenses ...) Êtes-vous sûr de vouloir continuer "
                    u"?".format(item.name))
            else:
                yield Link(self.request.route_path("company",
                                                   id=item.id,
                                                   _query={'action':
                                                           'enable'}),
                           u"Activer",
                           title=u"Ré-activer cette enseigne",
                           icon="book",
                           css="text-success")
示例#22
0
 def title(self):
     return u"Fiche formateur de {0}".format(
         format_account(self.current_trainerdatas.user))
示例#23
0
 def title(self):
     return u"Fiche de gestion sociale de {0}".format(
         format_account(self.current_userdatas.user, False)
     )
示例#24
0
 def title(self):
     return u"Fiche formateur de {0}".format(
         format_account(self.current_trainerdatas.user)
     )
示例#25
0
 def libelle(self):
     return u"{0}/frais {1} {2}".format(
         format_account(self.expense.user, reverse=False),
         self.expense.month, self.expense.year)
示例#26
0
 def title(self):
     if self.is_my_account_view():
         return u"Modification de mes identifiants"
     else:
         return u"Modification des identifiants de {0}".format(
             format_account(self.current().user))
示例#27
0
 def title(self):
     if self.is_my_account_view():
         return u"Modification de mon mot de passe"
     else:
         return u"Modification du mot de passe de {0}".format(
             format_account(self.current().user))
示例#28
0
    def _stream_actions(self, item):
        """
        Stream actions available for the given item

        :param obj item: The company instance
        """
        yield Link(
            self.request.route_path(
                "company",
                id=item.id,
            ),
            u"Voir",
            title=u"Voir l'enseigne",
            icon="search",
        )
        if self.request.has_permission('edit.company', item):
            yield Link(
                self.request.route_path(
                    "company",
                    id=item.id,
                ),
                u"Modifier",
                title=u"Modifier les informations relatives à l'enseigne",
                icon="pencil",
            )
        if self.request.has_permission("admin.company"):
            if len(item.employees) > 1:
                yield Link(
                    self.request.route_path(
                        "company",
                        id=item.id,
                        _query={'action': 'remove', id: self.current_user.id}
                    ),
                    u"Retirer",
                    title=u"Retirer l'entrepreneur de cette enseigne",
                    icon="link",
                    confirm=u"{} n'aura plus accès aux données de cette "
                    u"l'enseigne {}. Êtes-vous sûr de vouloir continuer "
                    u"?".format(
                        format_account(self.current_user),
                        item.name
                    )
                )

            if item.active:
                yield Link(
                    self.request.route_path(
                        "company",
                        id=item.id,
                        _query={'action': 'disable'}
                    ),
                    u"Désactiver",
                    title=u"Désactiver cette enseigne",
                    icon="book",
                    confirm=u"L'enseigne {} ne sera plus accessible et "
                    u"n'apparaîtra plus dans les listes (factures, notes de "
                    u"dépenses ...) Êtes-vous sûr de vouloir continuer "
                    u"?".format(item.name)
                )
            else:
                yield Link(
                    self.request.route_path(
                        "company",
                        id=item.id,
                        _query={'action': 'disable'}
                    ),
                    u"Activer",
                    title=u"Ré-activer cette enseigne",
                    icon="book",
                )
示例#29
0
 def title(self):
     return u"Fiche de gestion sociale de {0}".format(
         format_account(self.current_userdatas.user, False))
示例#30
0
    def check(self, payments):
        """
        Check that the given expense_payments can be exported

        :param obj payments: A SQLA query of ExpensePayment objects
        """
        count = payments.count()
        if count == 0:
            title = u"Il n'y a aucun paiement à exporter"
            res = {
                'title': title,
                'errors': [],
            }
            return False, res

        title = u"Vous vous apprêtez à exporter {0} paiements".format(count)
        res = {'title': title, 'errors': []}

        for payment in payments:
            expense = payment.expense
            company = expense.company
            if not self._check_company(company):
                company_url = self.request.route_path(
                    "company",
                    id=company.id,
                    _query={'action': 'edit'},
                )
                message = ERR_COMPANY_CONFIG.format(
                    expense.id,
                    company.name,
                    company_url,
                )
                res['errors'].append(message)
                continue

            user = expense.user
            if not self._check_user(user):
                user_url = self.request.route_path(
                    "user",
                    id=user.id,
                    _query={'action': 'edit'},
                )
                message = ERR_USER_CONFIG.format(
                    expense.id,
                    strings.format_account(user),
                    user_url,
                )
                res['errors'].append(message)
                continue

            if not self._check_bank(payment):
                payment_url = self.request.route_path(
                    'expensepayment', id=payment.id, _query={'action': 'edit'})
                message = ERR_BANK_CONFIG.format(expense.id, payment_url)
                res['errors'].append(message)
                continue

            if payment.waiver and not self._check_waiver(payment):
                admin_url = self.request.route_path(self.admin_route_name)
                message = ERR_WAIVER_CONFIG.format(admin_url)
                res['errors'].append(message)
                continue

        return len(res['errors']) == 0, res
示例#31
0
 def title(self):
     return u"Modification des identifiants de {0}".format(
         format_account(self.context.user))
    def check(self, payments):
        """
        Check that the given expense_payments can be exported

        :param obj payments: A SQLA query of ExpensePayment objects
        """
        count = payments.count()
        if count == 0:
            title = u"Il n'y a aucun paiement à exporter"
            res = {
                'title': title,
                'errors': [],
            }
            return False, res

        title = u"Vous vous apprêtez à exporter {0} paiements".format(
                count)
        res = {'title': title, 'errors': []}

        for payment in payments:
            expense = payment.expense
            company = expense.company
            if not self._check_company(company):
                company_url = self.request.route_path(
                    "company",
                    id=company.id,
                    _query={'action': 'edit'},
                )
                message = ERR_COMPANY_CONFIG.format(
                    expense.id,
                    company.name,
                    company_url,
                )
                res['errors'].append(message)
                continue

            user = expense.user
            if not self._check_user(user):
                user_url = self.request.route_path(
                    "user",
                    id=user.id,
                    _query={'action': 'edit'},
                )
                message = ERR_USER_CONFIG.format(
                    expense.id,
                    strings.format_account(user),
                    user_url,
                )
                res['errors'].append(message)
                continue

            if not self._check_bank(payment):
                payment_url = self.request.route_path(
                    'expensepayment',
                    id=payment.id,
                    _query={'action': 'edit'}
                )
                message = ERR_BANK_CONFIG.format(
                    expense.id,
                    payment_url)
                res['errors'].append(message)
                continue

            if payment.waiver and not self._check_waiver(payment):
                admin_url = self.request.route_path(
                    self.admin_route_name
                )
                message = ERR_WAIVER_CONFIG.format(admin_url)
                res['errors'].append(message)
                continue

        return len(res['errors']) == 0, res