def edit(self, balance_uid): model = request.environ['sqlalchemy.model'] db = request.environ['sqlalchemy.session'] balance = db.query(model.Balance).filter_by(uid = balance_uid).first() if not balance or not balance.can_modify_balance(h.authenticated_user().uid): return { "failure": Messages.permissionDenied() } uid = int(request.params['uid']) bc = balance.changes.filter_by(uid=uid).first() if not bc: abort(404) try: with localcontext() as ctx: ctx.prec = 2 bc.amount = h.parse_decimal(request.params['amount']) except: log.error("Invalid number: %s" % request.params.get('amount'), exc_info=1) pass try: if int(request.params['is_income']) >= 0: bc.income_category_uid = int(request.params['income_category_uid']) bc.expense_category_uid = None bc.is_income = True else: bc.expense_category_uid = int(request.params['expense_category_uid']) bc.income_category_uid = None bc.is_income = False except: pass try: bc.description = request.params['description'] except: pass try: bc.occurred_on = h.parse_date(request.params['occurred_on']) except: log.error("Invalid date: %s" % request.params.get('occurred_on'), exc_info=1) pass ops = Operations(db, model) try: ops.change_tags_from_string(bc, request.params['tags']) except: pass ops.save_balance_change(bc) return { "id" : bc.uid }
def add(self, balance_uid): model = request.environ['sqlalchemy.model'] db = request.environ['sqlalchemy.session'] if not Operations(db, model).can_modify_balance(h.authenticated_user().uid, balance_uid): return { "failure": Messages.permissionDenied() } try: with localcontext() as ctx: ctx.prec = 2 try: amount = h.parse_decimal(request.params['amount']) except NumberFormatError: return { "failure": Messages.invalidCurrencyFormat() } expense_date = parser.parse(request.params['occurred_on']) income_category_uid = None expense_category_uid = None if (int(request.params['is_income']) >= 0): income_category_uid = int(request.params['income_category_uid']) is_income = True else: expense_category_uid = int(request.params['expense_category_uid']) is_income = False except: return { "failure": Messages.invalidArguments() } tags = request.params.get('tags', '') try: description = request.params['description'] except: description = "" try: bc = model.BalanceChange( amount = amount, description = description, balance_uid = balance_uid, user_uid = h.authenticated_user().uid, expense_category_uid = expense_category_uid, occurred_on = expense_date, is_income = is_income, income_category_uid = income_category_uid ) ops = Operations(db, model) ops.change_tags_from_string(bc, tags) ops.save_balance_change(bc) except IntegrityError, e: return { "failure": Messages.primaryKeyViolation() }
def add(self, balance_uid): model = request.environ['sqlalchemy.model'] db = request.environ['sqlalchemy.session'] balance = db.query(model.Balance).filter_by(uid = balance_uid).first() if not balance or not balance.can_modify_balance(h.authenticated_user().uid): return { "failure": Messages.permissionDenied() } try: with localcontext() as ctx: ctx.prec = 2 try: amount = h.parse_decimal(request.params['amount']) except: log.error("Invalid number: %s" % request.params.get('amount'), exc_info=1) return { "failure": Messages.invalidCurrencyFormat() } expense_date = h.parse_date(request.params['occurred_on']) income_category_uid = None expense_category_uid = None if (int(request.params['is_income']) >= 0): income_category_uid = int(request.params['income_category_uid']) is_income = True else: expense_category_uid = int(request.params['expense_category_uid']) is_income = False except: log.error("Failed to parse arguments %s" % str(request.params), exc_info=1) return { "failure": Messages.invalidArguments() } tags = request.params.get('tags', '') description = request.params.get('description', '') bc = model.BalanceChange( amount = amount, description = description, user_uid = h.authenticated_user().uid, expense_category_uid = expense_category_uid, occurred_on = expense_date, is_income = is_income, income_category_uid = income_category_uid ) balance.changes.append(bc) db.flush() ops = Operations(db, model) ops.change_tags_from_string(bc, tags) ops.save_balance_change(bc) return { "id" : bc.uid }
def edit(self, balance_uid): model = request.environ['sqlalchemy.model'] db = request.environ['sqlalchemy.session'] if not Operations(db, model).can_modify_balance(h.authenticated_user().uid, balance_uid): return { "failure": Messages.permissionDenied() } uid = int(request.params['uid']) bc = db.query(model.BalanceChange).filter_by(uid=uid).filter_by(balance_uid=balance_uid).one() try: with localcontext() as ctx: ctx.prec = 2 bc.amount = h.parse_decimal(request.params['amount']) except: pass try: if int(request.params['is_income']) >= 0: bc.income_category_uid = int(request.params['income_category_uid']) bc.expense_category_uid = None bc.is_income = True else: bc.expense_category_uid = int(request.params['expense_category_uid']) bc.income_category_uid = None bc.is_income = False except: pass try: bc.description = request.params['description'] except: pass try: bc.occurred_on = parser.parse(request.params['occurred_on']) except: pass ops = Operations(db, model) try: ops.change_tags_from_string(bc, request.params['tags']) except: pass ops.save_balance_change(bc) return { "id" : bc.uid }