summaryrefslogtreecommitdiff
path: root/jb/managers/bonus.py
blob: 0cb8b02bfdf78729ab221465e3a3128272fcc7e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from typing import List

from psycopg import sql

from jb.managers import PostgresManager
from jb.models.bonus import Bonus


class BonusManager(PostgresManager):

    def create(self, bonus: Bonus) -> None:
        assert bonus.id is None
        data = bonus.to_postgres()
        query = sql.SQL(
            """
        INSERT INTO mtwerk_bonus
        (payout_event_id, amt_worker_id, amount, grant_time, assignment_id, reason)
        VALUES (
            %(payout_event_id)s,
            %(amt_worker_id)s,
            %(amount)s,
            %(grant_time)s,
            (
                SELECT id
                FROM mtwerk_assignment
                WHERE amt_assignment_id = %(amt_assignment_id)s
                LIMIT 1
            ),
            %(reason)s
        )
        RETURNING id, assignment_id;
        """
        )

        with self.pg_config.make_connection() as conn:
            with conn.cursor() as c:
                c.execute(query, data)
                res = c.fetchone()
                conn.commit()
        bonus.id = res["id"]
        bonus.assignment_id = res["assignment_id"]
        return None

    def filter(self, amt_assignment_id: str) -> List[Bonus]:
        res = self.pg_config.execute_sql_query(
            """
            SELECT mb.*, ma.amt_assignment_id
            FROM mtwerk_bonus mb
            JOIN mtwerk_assignment ma ON ma.id = mb.assignment_id
            WHERE amt_assignment_id = %(amt_assignment_id)s;
        """,
            params={"amt_assignment_id": amt_assignment_id},
        )
        return [Bonus.from_postgres(x) for x in res]