forked from vetu11/xPlitterbot
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtransaction.py
141 lines (100 loc) · 4.03 KB
/
transaction.py
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# coding=utf-8
import time
import const
from uuid import uuid4
class TransactionBase:
# Clase base para las transacciones.
def __init__(self, **kwargs):
self.id = kwargs.get("id", str(uuid4()))
self.group_id = kwargs.get("group_id")
self.amount = kwargs.get("amount", 0)
self.comment = kwargs.get("comment", "")
self.type = kwargs.get("type") if self.type is None else self.type
self.expiration_date = kwargs.get("expiration_date", time.time() + const.CADUCIDAD_TRANSACTION)
if self.type is None or self.group_id is None:
raise TypeError
def __repr__(self):
return self.id
def to_dict(self):
return self.__dict__
def set_amount(self, new_amount):
# Fija la cantidad de monedos de la transacción.
past = self.amount
self.amount = new_amount
return past
def set_comment(self, new_comment):
# Fija el comentario de la transacción.
past = self.comment
self.comment = new_comment
return past
def refresh_expiration_date(self):
# Aumenta la fecha de caducidad a las transacción cada vez se esta se usa.
self.expiration_date += const.REFRESH_RATE_USER
if self.expiration_date < time.time() + const.MINIMUN_REFRESH_RATE_USER:
self.expiration_date = time.time() + const.MINIMUN_REFRESH_RATE_USER
class Purchase(TransactionBase):
# Transacción compra, donde habrá un comprador y una lista de participantes entre los que se resptarten los gastos.
def __init__(self, **kwargs):
self.type = "purchase"
TransactionBase.__init__(self, **kwargs)
self.buyer = kwargs.get("buyer")
self.participants = kwargs.get("participants", [])
if self.buyer is None:
raise TypeError
def set_buyer(self, id):
# Fija la id del nuevo comprador y devuelve la id del anterior.
past = self.buyer
self.buyer = id
return past
def add_remove_participant(self, id):
# Añade o elimina la id que se ha pasado, dependiendo de si está o no en el grupo.
id = int(id)
if id in self.participants:
self.remove_participant(id)
else:
self.add_participant(id)
def add_participant(self, id):
# Añade la id del participate al grupo, ¡Sin comprobar si ya está!
self.participants.append(id)
def remove_participant(self, id):
# Elimina la id del participante, sin comprobar si realemten está en la transacción.
self.participants.remove(id)
class Debt(TransactionBase):
# Transacción deuda, para anotar deudas entre los integrantes del grupo. Se puede asiganr un solo deudor y
# acreedor.
def __init__(self, **kwargs):
self.type = "debt"
TransactionBase.__init__(self, **kwargs)
self.lender = kwargs.get("lender")
self.debtor = kwargs.get("debtor")
if self.lender is None:
raise TypeError
def set_lender(self, id):
# Fija la id del nuevo prestador y devuelve la del antiguo.
past = self.lender
self.lender = id
return past
def set_debtor(self, id):
# Fija la id del nuevo deudor y devuelve la del antiguo.
past = self.debtor
self.debtor = id
return past
class Transfer(TransactionBase):
# Transacción en la que se anota un traspase de dinero, desde un pagador a un cobrador.
def __init__(self, **kwargs):
self.type = "transfer"
TransactionBase.__init__(self, **kwargs)
self.payer = kwargs.get("payer")
self.receiver = kwargs.get("receiver")
if self.payer is None:
raise TypeError
def set_payer(self, id):
# Fija la id del nuevo pagador y devuelve la del antiguo.
past = self.payer
self.payer = id
return past
def set_receiver(self, id):
# Fija la id del nuevo acreedor y devuelve la del antiguo.
past = self.receiver
self.receiver = id
return past