Пример #1
0
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
Пример #2
0
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
Пример #3
0
 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
Пример #4
0
 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