Esempio n. 1
0
    def duplicate(self):
        """
        Duplicate an expense line to an existing ExpenseSheet
        """
        logger.info(u"Duplicate ExpenseKmLine")
        sheet_id = self.request.json_body.get('sheet_id')
        sheet = ExpenseSheet.get(sheet_id)

        if sheet is None:
            return RestError(["Wrong sheet_id"])

        if not self.request.has_permission('edit.expensesheet'):
            logger.error(u"Unauthorized action : possible break in attempt")
            raise HTTPForbidden()

        new_line = self.context.duplicate(sheet=sheet)
        if new_line.type_object is None:
            return RestError([
                u"Aucun type de frais kilométriques correspondant n'a pu être "
                u"retrouvé sur l'année {0}".format(sheet.year)
            ],
                             code=403)

        new_line.sheet_id = sheet.id
        self.request.dbsession.add(new_line)
        self.request.dbsession.flush()
        return new_line
Esempio n. 2
0
 def getOne(self):
     """
         get an expense line
     """
     lid = self.request.matchdict.get('lid')
     for line in getattr(self.request.context, self.key):
         if line.id == int(lid):
             return line
     raise RestError({}, 404)
Esempio n. 3
0
 def getOne(self):
     """
         get an holiday entry
     """
     lid = self.request.matchdict.get('lid')
     for holiday in self.request.context.holidays:
         if holiday.id == int(lid):
             return holiday
     raise RestError({}, 404)
Esempio n. 4
0
    def __call__(self):
        """
            Main entry for this view object
        """
        logger.debug("# Entering the status view")
        if self.request.is_xhr:
            params = self.request.json_body
        else:
            params = self.request.POST

        if "submit" in params:
            try:
                status = self._get_status(params)
                logger.debug(u"New status : %s " % status)
                self.set_status(status, params)
                self.context = self.request.dbsession.merge(self.context)
                self.notify(status)
                if not self.request.is_xhr:
                    self.session.flash(self.valid_msg)

                logger.debug(u" + The status has been set to {0}".format(
                    status))

            except Forbidden, e:
                logger.exception(u" !! Unauthorized action by : {0}".format(
                    self.request.user.login
                ))
                if self.request.is_xhr:
                    raise RestError(e.message, code=403)
                else:
                    self.session.pop_flash("")
                    self.session.flash(e.message, queue='error')

            except (colander.Invalid, BadRequest), e:
                logger.exception("Invalid datas")
                if self.request.is_xhr:
                    raise RestError(e.asdict(translate=colander._))
                else:
                    for message in e.messages():
                        self.session.flash(message, 'error')
Esempio n. 5
0
 def post(self):
     """
         Rest post method : add a line
     """
     logger.debug("In the post method")
     appstruct = self.request.json_body
     try:
         appstruct = self.schema.deserialize(appstruct)
     except colander.Invalid, err:
         traceback.print_exc()
         logger.exception("  - Erreur")
         logger.exception(appstruct)
         raise RestError(err.asdict(), 400)
Esempio n. 6
0
    def post(self):
        """
            Rest POST method : add
        """
        logger.debug(u"In the bookmark edition")

        appstruct = self.request.json_body
        try:
            bookmark = self.schema.deserialize(appstruct)
        except colander.Invalid, err:
            traceback.print_exc()
            logger.exception("  - Error in posting bookmark")
            logger.exception(appstruct)
            raise RestError(err.asdict(), 400)
Esempio n. 7
0
 def put(self):
     """
         Rest put method : update a line
     """
     log.debug("In the put method")
     line = self.getOne()
     appstruct = self.request.json_body
     try:
         appstruct = self.schema.deserialize(appstruct)
     except colander.Invalid, err:
         import traceback
         traceback.print_exc()
         log.exception("  - Erreur")
         raise RestError(err.asdict(), 400)
Esempio n. 8
0
def api_login_post_view(request):
    """
    A Json login view
    expect a login and a password element (in json format)
    returns a json dict :
        success : {'status':'success'}
        error : {'status':'error', 'errors':{'field':'error message'}}
    """
    schema = get_json_auth_schema()
    appstruct = request.json_body
    try:
        appstruct = schema.deserialize(appstruct)
    except colander.Invalid, err:
        log.exception("  - Erreur")
        raise RestError(err.asdict(), 400)
Esempio n. 9
0
    def delete(self):
        """
            Removes a bookmark
        """
        logger.debug(u"In the bookmark deletion view")

        handler = BookMarkHandler(self.request)

        # Retrieving the id from the request
        id_ = self.request.matchdict.get('id')

        bookmark = handler.delete(id_)

        # if None is returned => there was no bookmark with this id
        if bookmark is None:
            raise RestError({}, 404)
        else:
            return dict(status="success")
Esempio n. 10
0
    def duplicate(self):
        """
        Duplicate an expense line to an existing ExpenseSheet
        """
        logger.info(u"Duplicate ExpenseLine")
        sheet_id = self.request.json_body.get('sheet_id')
        sheet = ExpenseSheet.get(sheet_id)

        if sheet is None:
            return RestError(["Wrong sheet_id"])

        if not self.request.has_permission('edit.expensesheet'):
            logger.error(u"Unauthorized action : possible break in attempt")
            raise HTTPForbidden()

        new_line = self.context.duplicate(sheet=sheet)
        new_line.sheet_id = sheet.id
        self.request.dbsession.add(new_line)
        self.request.dbsession.flush()
        return new_line
Esempio n. 11
0
                    self.session.flash(e.message, queue='error')

            except (colander.Invalid, BadRequest), e:
                logger.exception("Invalid datas")
                if self.request.is_xhr:
                    raise RestError(e.asdict(translate=colander._))
                else:
                    for message in e.messages():
                        self.session.flash(message, 'error')

            return self.redirect()

        if self.request.is_xhr:
            raise RestError(
                [
                    u'Il manque des arguments pour changer le statut '
                    u'du document'
                ])
        else:
            self.session.flash(
                u"Il manque des arguments pour changer le statut du document",
                "error"
            )
            return self.redirect()


class TaskStatusView(StatusView):
    """
    View handling base status for tasks (estimation/invoice/cancelinvoice)

    Status related views should implement the validate function to ensure data
Esempio n. 12
0
 def validation_status(self):
     validation_status = self.request.json_body.get('validation_status')
     if validation_status in self.context.VALIDATION_STATUS:
         return self.context.set_validation_status(validation_status)
     else:
         return RestError(['Statut inconnu'])
Esempio n. 13
0
def test_it(config):
    err = RestError({}, 151)
    assert (err.status == u"151 Continue")
    assert (err.content_type == 'application/json')