new form for trade documents

This commit is contained in:
Cayo Puigdefabregas 2022-02-21 13:02:28 +01:00
parent 791d2a5894
commit 4a2cd7adfe

View file

@ -32,6 +32,7 @@ from ereuse_devicehub.resources.enums import Severity, SnapshotSoftware
from ereuse_devicehub.resources.lot.models import Lot
from ereuse_devicehub.resources.tag.model import Tag
from ereuse_devicehub.resources.user.models import User
from ereuse_devicehub.resources.tradedocument.models import TradeDocument
from ereuse_devicehub.resources.user.exceptions import InsufficientPermission
@ -540,7 +541,6 @@ class NewActionForm(FlaskForm):
return self.instance
def check_valid(self):
# import pdb; pdb.set_trace()
if self.type.data in ['', None]:
return
@ -689,17 +689,18 @@ class TradeForm(NewActionForm):
return is_valid
def save(self):
def save(self, commit=True):
self.create_phantom_account()
self.prepare_instance()
self.create_automatic_trade()
db.session.commit()
if commit:
db.session.commit()
return self.instance
def prepare_instance(self):
Model = db.Model._decl_class_registry.data[self.type.data]()
Model = db.Model._decl_class_registry.data['Trade']()
self.instance = Model()
self.instance.user_from = self.db_user_from
self.instance.user_to = self.db_user_to
@ -774,4 +775,55 @@ class TradeForm(NewActionForm):
return 'user_to'
if self.user_to.data == g.user.email:
return 'user_form'
return 'user_from'
class TradeDocumentForm(FlaskForm):
url = URLField(u'Url', [validators.Optional()],
render_kw={'class': "form-control"},
description="Url where the document resides")
description = StringField(u'Description', [validators.Optional()],
render_kw={'class': "form-control"},
description="")
id_document = StringField(u'Document Id', [validators.Optional()],
render_kw={'class': "form-control"},
description="Identification number of document")
date = DateField(u'Date', [validators.Optional()],
render_kw={'class': "form-control"},
description="")
file_name = FileField(u'File', [validators.DataRequired()],
render_kw={'class': "form-control"},
description="""This file is not stored on our servers, it is only used to
generate a digital signature and obtain the name of the file.""")
def __init__(self, *args, **kwargs):
lot_id = kwargs.pop('lot')
super().__init__(*args, **kwargs)
self._lot = Lot.query.filter(Lot.id==lot_id).one()
def validate(self, extra_validators=None):
is_valid = super().validate(extra_validators)
if g.user not in [self._lot.trade.user_from, self._lot.trade.user_to]:
is_valid = False
return is_valid
def save(self, commit=True):
file_name = ''
file_hash = ''
if self.file_name.data:
file_name = self.file_name.data.filename
file_hash = insert_hash(self.file_name.data.read(), commit=False)
self.url.data = URL(self.url.data)
self._obj = TradeDocument(lot_id=self._lot.id)
self.populate_obj(self._obj)
self._obj.file_name = file_name
self._obj.file_hash = file_hash
db.session.add(self._obj)
self._lot.trade.documents.add(self._obj)
if commit:
db.session.commit()
return self._obj