change model for trade

This commit is contained in:
Cayo Puigdefabregas 2021-04-19 19:33:05 +02:00
parent 55e27caa83
commit e058e2491f
1 changed files with 34 additions and 20 deletions

View File

@ -1433,6 +1433,29 @@ class CancelReservation(Organize):
"""The act of cancelling a reservation.""" """The act of cancelling a reservation."""
class Confirm(JoinedTableMixin, ActionWithMultipleDevices):
"""Users confirm the offer and change it to trade"""
user_id = db.Column(UUID(as_uuid=True),
db.ForeignKey(User.id),
nullable=False)
user = db.relationship(User, primaryjoin=user_id == User.id)
user_comment = """The user that accept the offer."""
trade_id = db.Column(UUID(as_uuid=True),
db.ForeignKey('trade.id'),
nullable=False)
trade = db.relationship('Trade',
backref=backref('acceptances',
uselist=True,
lazy=True),
primaryjoin='Confirm.trade_id == Trade.id')
def __repr__(self) -> str:
origin = 'To'
if self.user == self.trade.user_from:
origin = 'From'
return '<{0.t} {0.id} accepted by {1}>'.format(self, origin)
class Trade(JoinedTableMixin, ActionWithMultipleDevices): class Trade(JoinedTableMixin, ActionWithMultipleDevices):
"""Trade actions log the political exchange of devices between users. """Trade actions log the political exchange of devices between users.
Every time a trade action is performed, the old user looses its Every time a trade action is performed, the old user looses its
@ -1446,23 +1469,7 @@ class Trade(JoinedTableMixin, ActionWithMultipleDevices):
This class and its inheritors This class and its inheritors
extend `Schema's Trade <http://schema.org/TradeAction>`_. extend `Schema's Trade <http://schema.org/TradeAction>`_.
""" """
accepted_by_from = Column(Boolean, default=False) id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
accepted_by_from_comment = """Who do the Offer"""
accepted_by_to = Column(Boolean, default=False)
accepted_by_to_comment = """Who recive the Offer"""
confirm_transfer = Column(Boolean, default=False)
confirm_transfer_comment = """Transfer of the phisical devices it is confirmed"""
offer_id = db.Column(UUID(as_uuid=True),
db.ForeignKey('offer.id'),
nullable=True)
offer = db.relationship('Offer',
backref=db.backref('trade', uselist=False, lazy=True),
primaryjoin='Trade.offer_id == Offer.id')
class Offer(JoinedTableMixin, ActionWithMultipleDevices):
"""ActionTrade Offer one lot for to do one Trade.
"""
user_from_id = db.Column(UUID(as_uuid=True), user_from_id = db.Column(UUID(as_uuid=True),
db.ForeignKey(User.id), db.ForeignKey(User.id),
nullable=False) nullable=False)
@ -1486,14 +1493,21 @@ class Offer(JoinedTableMixin, ActionWithMultipleDevices):
lot_id = db.Column(UUID(as_uuid=True), lot_id = db.Column(UUID(as_uuid=True),
db.ForeignKey('lot.id', db.ForeignKey('lot.id',
use_alter=True, use_alter=True,
name='lot_offer'), name='lot_trade'),
nullable=True) nullable=True)
lot = relationship('Lot', lot = relationship('Lot',
backref=backref('offer', backref=backref('trade',
lazy=True, lazy=True,
uselist=False, uselist=False,
cascade=CASCADE_OWN), cascade=CASCADE_OWN),
primaryjoin='Offer.lot_id == Lot.id') primaryjoin='Trade.lot_id == Lot.id')
def __repr__(self) -> str:
users_accepted = [x.user for x in self.acceptances]
if not self.user_from in users_accepted or not self.user_to in users_accepted:
self.t = 'Offer'
self.type = 'Offer'
return '<{0.t} {0.id} {0.severity} devices={0.devices!r}>'.format(self)
class InitTransfer(Trade): class InitTransfer(Trade):