This commit is contained in:
Cayo Puigdefabregas 2020-11-21 19:10:31 +01:00
parent 775cd9a215
commit 0e53919607
1 changed files with 49 additions and 20 deletions

View File

@ -43,7 +43,7 @@ from ereuse_devicehub.resources.device.models import Component, Computer, DataSt
Device, Laptop, Server Device, Laptop, Server
from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, BiosAccessRange, \ from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, BiosAccessRange, \
ErasureStandards, FunctionalityRange, PhysicalErasureMethod, PriceSoftware, \ ErasureStandards, FunctionalityRange, PhysicalErasureMethod, PriceSoftware, \
R_NEGATIVE, R_POSITIVE, RatingRange, ReceiverRole, Severity, SnapshotSoftware, \ R_NEGATIVE, R_POSITIVE, RatingRange, Severity, SnapshotSoftware, \
TestDataStorageLength TestDataStorageLength
from ereuse_devicehub.resources.models import STR_SM_SIZE, Thing from ereuse_devicehub.resources.models import STR_SM_SIZE, Thing
from ereuse_devicehub.resources.user.models import User from ereuse_devicehub.resources.user.models import User
@ -129,8 +129,7 @@ class Action(Thing):
agent = relationship(Agent, agent = relationship(Agent,
backref=backref('actions_agent', lazy=True, **_sorted_actions), backref=backref('actions_agent', lazy=True, **_sorted_actions),
primaryjoin=agent_id == Agent.id) primaryjoin=agent_id == Agent.id)
agent_id.comment = """The direct performer or driver of the action. agent_id.comment = """The direct performer or driver of the action. e.g. John wrote a book.
e.g. John wrote a book.
It can differ with the user that registered the action in the It can differ with the user that registered the action in the
system, which can be in their behalf. system, which can be in their behalf.
@ -324,6 +323,7 @@ class Deallocate(JoinedTableMixin, ActionWithMultipleDevices):
""" """
pass pass
class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice): class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice):
"""An erasure attempt to a ``DataStorage``. The action contains """An erasure attempt to a ``DataStorage``. The action contains
information about success and nature of the erasure. information about success and nature of the erasure.
@ -1373,7 +1373,6 @@ class Trade(JoinedTableMixin, ActionWithMultipleDevices):
backref=backref('confirmation', lazy=True, uselist=False), backref=backref('confirmation', lazy=True, uselist=False),
primaryjoin=confirms_id == Organize.id) primaryjoin=confirms_id == Organize.id)
confirms_id.comment = """An organize action that this association confirms. confirms_id.comment = """An organize action that this association confirms.
For example, a ``Sell`` or ``Rent`` For example, a ``Sell`` or ``Rent``
can confirm a ``Reserve`` action. can confirm a ``Reserve`` action.
""" """
@ -1531,6 +1530,36 @@ def update_parent(target: Union[EraseBasic, Test, Install], device: Device, _, _
target.parent = device.parent target.parent = device.parent
@event.listens_for(Allocate.devices, 'append')
def update_allocated(target: Allocate, device, initiatort):
"""Mark one device as allocated."""
# for device in target.devices:
actions = [a for a in device.actions]
actions.sort(key=lambda x: x.created)
actions.reverse()
allocate = None
#import pdb; pdb.set_trace()
for a in actions:
if isinstance(a, Allocate):
allocate = a
break
if isinstance(a, Deallocate):
break
if allocate:
txt = "You need deallocate before allocate this device again"
same_allocate = [
allocate.code == target.code,
allocate.start_time == target.start_time,
allocate.end_users == target.end_users
]
assert all(same_allocate), txt
import pdb; pdb.set_trace()
target.allocated = True
class InvalidRangeForPrice(ValueError): class InvalidRangeForPrice(ValueError):
pass pass