def create_fund( fund: FundCreate, session: sa.orm.Session = sess, ): """ Creates a new fund Parameters: name: str The fund name temporary: bool Whether the fund is temporary or not Temporary funds can be deleted allong with all its transactions asset_id: int The identifier of the fund currency id It is used to mark-to-market the fund's assets """ if not _asset_is_currency(fund.asset_id, session): msg = "Fund asset must be a currency" raise HTTPException(status_code=422, detail=msg) fund_db = db.models.Fund(**fund.dict()) session.add(fund_db) db.main.try_to_commit(session) session.refresh(fund_db) return fund_db
def create_transaction( transaction: TransactionCreate, session: sa.orm.Session = sess, ): entries = [ db.models.Entry( **entry.dict(), datetime=transaction.datetime, fund_id=transaction.fund_id, ) for entry in transaction.entries ] entries_value = sum([entry.value for entry in entries if entry.value > 0]) transaction_db = db.models.Transaction( datetime=transaction.datetime, timestamp=dt.datetime.utcnow(), value=entries_value, description=transaction.description, entries=entries, fund_id=transaction.fund_id, ) session.add(transaction_db) db.main.try_to_commit(session) session.refresh(transaction_db) return transaction_db
def create_asset( asset_create: asset_create_class, session: sa.orm.Session = sess, ): asset_dict = asset_create.dict() asset_dict["type"] = asset_type.value asset_db = db.models.Asset(**asset_dict) session.add(asset_db) db.main.try_to_commit(session) session.refresh(asset_db) return asset_db
def update_asset( asset_id: int, asset_update: asset_create_class, session: sa.orm.Session = sess, ): asset_db = session.query(db.models.Asset).get(asset_id) for field, value in asset_update.dict().items(): setattr(asset_db, field, value) db.main.try_to_commit(session) session.refresh(asset_db) return asset_db