adding action moveOn inside of tradeDocuments

This commit is contained in:
Cayo Puigdefabregas 2021-09-09 13:34:24 +02:00
parent 1e86515391
commit b7396b4f23
3 changed files with 28 additions and 7 deletions

View File

@ -2,7 +2,7 @@ import copy
from datetime import datetime, timedelta from datetime import datetime, timedelta
from dateutil.tz import tzutc from dateutil.tz import tzutc
from flask import current_app as app, g from flask import current_app as app, g
from marshmallow import Schema as MarshmallowSchema, ValidationError, fields as f, validates_schema, pre_load from marshmallow import Schema as MarshmallowSchema, ValidationError, fields as f, validates_schema, pre_load, post_load
from marshmallow.fields import Boolean, DateTime, Decimal, Float, Integer, Nested, String, \ from marshmallow.fields import Boolean, DateTime, Decimal, Float, Integer, Nested, String, \
TimeDelta, UUID TimeDelta, UUID
from marshmallow.validate import Length, OneOf, Range from marshmallow.validate import Length, OneOf, Range
@ -856,7 +856,16 @@ class MoveOnDocument(Action):
if len(docs) > 1: if len(docs) > 1:
txt = 'This document it is associated in more than one lot' txt = 'This document it is associated in more than one lot'
raise ValidationError(txt) raise ValidationError(txt)
if len(docs) < 1: if len(docs) < 1:
txt = 'This document not exist' txt = 'This document not exist'
raise ValidationError(txt) raise ValidationError(txt)
data['container_to'] = docs[0].id data['container_to'] = docs[0].id
@post_load
def adding_documents(self, data):
"""Adding action in the 2 TradeDocuments"""
docs = OrderedSet()
docs.add(data['container_to'])
docs.add(data['container_from'])
data['documents'] = docs

View File

@ -101,9 +101,8 @@ class TradeDocument(Thing):
revoke = 'Revoke' revoke = 'Revoke'
revoke_pending = 'Revoke Pending' revoke_pending = 'Revoke Pending'
confirm_revoke = 'Document Revoked' confirm_revoke = 'Document Revoked'
if not self.actions: if not self.actions:
return return
ac = self.actions[-1] ac = self.actions[-1]
@ -111,7 +110,7 @@ class TradeDocument(Thing):
# can to do revoke_confirmed # can to do revoke_confirmed
return confirm_revoke return confirm_revoke
if ac.type == 'RevokeDocument': if ac.type == 'RevokeDocument':
if ac.user == g.user: if ac.user == g.user:
# can todo revoke_pending # can todo revoke_pending
return revoke_pending return revoke_pending
@ -131,9 +130,14 @@ class TradeDocument(Thing):
# can to do revoke # can to do revoke
return double_confirm return double_confirm
def _warning_actions(self, actions): @property
return sorted(ev for ev in actions if ev.severity >= Severity.Warning) def total_weight(self):
"""Return all weight than this container have."""
return sum([x.weight for x in self.actions if x.type == 'MoveOnDocument']) + self.weight
def _warning_actions(self, actions):
"""Show warning actions"""
return sorted(ev for ev in actions if ev.severity >= Severity.Warning)
def __lt__(self, other): def __lt__(self, other):
return self.id < other.id return self.id < other.id

View File

@ -2478,11 +2478,13 @@ def test_moveOnDocument(user: UserClient, user2: UserClient):
user.post(res=models.Action, data=request_trade) user.post(res=models.Action, data=request_trade)
description = 'This is a good description'
request_moveOn = { request_moveOn = {
'type': 'MoveOnDocument', 'type': 'MoveOnDocument',
'weight': 15, 'weight': 15,
'container_from': tradedocument_from['id'], 'container_from': tradedocument_from['id'],
'container_to': id_hash 'container_to': id_hash,
'description': description
} }
doc, _ = user.post(res=models.Action, data=request_moveOn) doc, _ = user.post(res=models.Action, data=request_moveOn)
@ -2490,5 +2492,11 @@ def test_moveOnDocument(user: UserClient, user2: UserClient):
assert doc['container_from']['id'] == tradedocument_from['id'] assert doc['container_from']['id'] == tradedocument_from['id']
assert doc['container_to']['id'] == tradedocument_to['id'] assert doc['container_to']['id'] == tradedocument_to['id']
mvs= models.MoveOnDocument.query.filter().first()
trade_from = TradeDocument.query.filter_by(id=tradedocument_from['id']).one()
trade_to = TradeDocument.query.filter_by(id=tradedocument_to['id']).one()
assert trade_from in mvs.documents
assert trade_to in mvs.documents
assert description == mvs.description
tradedocument_to, _ = user.post(res=TradeDocument, data=request_post2) tradedocument_to, _ = user.post(res=TradeDocument, data=request_post2)
user.post(res=models.Action, data=request_moveOn, status=422) user.post(res=models.Action, data=request_moveOn, status=422)