resolve conflict
This commit is contained in:
commit
e614908c73
|
@ -3,37 +3,39 @@ import json
|
|||
from json.decoder import JSONDecodeError
|
||||
|
||||
from boltons.urlutils import URL
|
||||
from flask import g, request
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy.util import OrderedSet
|
||||
from wtforms import (
|
||||
BooleanField, DateField, FileField, FloatField, Form, HiddenField,
|
||||
IntegerField, MultipleFileField, SelectField, StringField, TextAreaField,
|
||||
URLField, validators)
|
||||
from wtforms.fields import FormField
|
||||
|
||||
from ereuse_devicehub.db import db
|
||||
from ereuse_devicehub.resources.action.models import RateComputer, Snapshot
|
||||
from ereuse_devicehub.resources.action.rate.v1_0 import CannotRate
|
||||
from ereuse_devicehub.resources.action.schemas import \
|
||||
Snapshot as SnapshotSchema
|
||||
from ereuse_devicehub.resources.action.views.snapshot import move_json, save_json
|
||||
from ereuse_devicehub.resources.device.models import (SAI, Cellphone, Computer,
|
||||
Device, Keyboard, MemoryCardReader,
|
||||
Monitor, Mouse, Smartphone, Tablet)
|
||||
from flask import g, request
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy.util import OrderedSet
|
||||
from wtforms import (BooleanField, DateField, FileField, FloatField, Form,
|
||||
HiddenField, IntegerField, MultipleFileField, SelectField,
|
||||
StringField, TextAreaField, URLField, validators)
|
||||
from wtforms.fields import FormField
|
||||
|
||||
from ereuse_devicehub.resources.action.views.snapshot import (
|
||||
move_json, save_json)
|
||||
from ereuse_devicehub.resources.device.models import (
|
||||
SAI, Cellphone, Computer, Device, Keyboard, MemoryCardReader, Monitor,
|
||||
Mouse, Smartphone, Tablet)
|
||||
from ereuse_devicehub.resources.device.sync import Sync
|
||||
from ereuse_devicehub.resources.documents.models import DataWipeDocument
|
||||
from ereuse_devicehub.resources.enums import Severity, SnapshotSoftware
|
||||
from ereuse_devicehub.resources.hash_reports import insert_hash
|
||||
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
|
||||
from ereuse_devicehub.resources.user.models import User
|
||||
|
||||
|
||||
class LotDeviceForm(FlaskForm):
|
||||
lot = StringField(u'Lot', [validators.UUID()])
|
||||
devices = StringField(u'Devices', [validators.length(min=1)])
|
||||
lot = StringField('Lot', [validators.UUID()])
|
||||
devices = StringField('Devices', [validators.length(min=1)])
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
@ -41,12 +43,19 @@ class LotDeviceForm(FlaskForm):
|
|||
if not is_valid:
|
||||
return False
|
||||
|
||||
self._lot = Lot.query.filter(Lot.id == self.lot.data).filter(
|
||||
Lot.owner_id == g.user.id).one()
|
||||
self._lot = (
|
||||
Lot.query.filter(Lot.id == self.lot.data)
|
||||
.filter(Lot.owner_id == g.user.id)
|
||||
.one()
|
||||
)
|
||||
|
||||
devices = set(self.devices.data.split(","))
|
||||
self._devices = Device.query.filter(Device.id.in_(devices)).filter(
|
||||
Device.owner_id == g.user.id).distinct().all()
|
||||
self._devices = (
|
||||
Device.query.filter(Device.id.in_(devices))
|
||||
.filter(Device.owner_id == g.user.id)
|
||||
.distinct()
|
||||
.all()
|
||||
)
|
||||
|
||||
return bool(self._devices)
|
||||
|
||||
|
@ -54,7 +63,7 @@ class LotDeviceForm(FlaskForm):
|
|||
trade = self._lot.trade
|
||||
if trade:
|
||||
for dev in self._devices:
|
||||
if not trade in dev.actions:
|
||||
if trade not in dev.actions:
|
||||
trade.devices.add(dev)
|
||||
|
||||
self._lot.devices.update(self._devices)
|
||||
|
@ -68,14 +77,17 @@ class LotDeviceForm(FlaskForm):
|
|||
|
||||
|
||||
class LotForm(FlaskForm):
|
||||
name = StringField(u'Name', [validators.length(min=1)])
|
||||
name = StringField('Name', [validators.length(min=1)])
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.id = kwargs.pop('id', None)
|
||||
self.instance = None
|
||||
if self.id:
|
||||
self.instance = Lot.query.filter(Lot.id == self.id).filter(
|
||||
Lot.owner_id == g.user.id).one()
|
||||
self.instance = (
|
||||
Lot.query.filter(Lot.id == self.id)
|
||||
.filter(Lot.owner_id == g.user.id)
|
||||
.one()
|
||||
)
|
||||
super().__init__(*args, **kwargs)
|
||||
if self.instance and not self.name.data:
|
||||
self.name.data = self.instance.name
|
||||
|
@ -103,7 +115,7 @@ class LotForm(FlaskForm):
|
|||
|
||||
|
||||
class UploadSnapshotForm(FlaskForm):
|
||||
snapshot = MultipleFileField(u'Select a Snapshot File', [validators.DataRequired()])
|
||||
snapshot = MultipleFileField('Select a Snapshot File', [validators.DataRequired()])
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
@ -171,8 +183,10 @@ class UploadSnapshotForm(FlaskForm):
|
|||
# this is a copy adaptated from ereuse_devicehub.resources.action.views.snapshot
|
||||
device = snapshot_json.pop('device') # type: Computer
|
||||
components = None
|
||||
if snapshot_json['software'] == (SnapshotSoftware.Workbench or SnapshotSoftware.WorkbenchAndroid):
|
||||
components = snapshot_json.pop('components', None) # type: List[Component]
|
||||
if snapshot_json['software'] == (
|
||||
SnapshotSoftware.Workbench or SnapshotSoftware.WorkbenchAndroid
|
||||
):
|
||||
components = snapshot_json.pop('components', None)
|
||||
if isinstance(device, Computer) and device.hid:
|
||||
device.add_mac_to_hid(components_snap=components)
|
||||
snapshot = Snapshot(**snapshot_json)
|
||||
|
@ -181,7 +195,9 @@ class UploadSnapshotForm(FlaskForm):
|
|||
actions_device = set(e for e in device.actions_one)
|
||||
device.actions_one.clear()
|
||||
if components:
|
||||
actions_components = tuple(set(e for e in c.actions_one) for c in components)
|
||||
actions_components = tuple(
|
||||
set(e for e in c.actions_one) for c in components
|
||||
)
|
||||
for component in components:
|
||||
component.actions_one.clear()
|
||||
|
||||
|
@ -227,38 +243,40 @@ class UploadSnapshotForm(FlaskForm):
|
|||
|
||||
|
||||
class NewDeviceForm(FlaskForm):
|
||||
type = StringField(u'Type', [validators.DataRequired()])
|
||||
label = StringField(u'Label')
|
||||
serial_number = StringField(u'Seria Number', [validators.DataRequired()])
|
||||
model = StringField(u'Model', [validators.DataRequired()])
|
||||
manufacturer = StringField(u'Manufacturer', [validators.DataRequired()])
|
||||
appearance = StringField(u'Appearance', [validators.Optional()])
|
||||
functionality = StringField(u'Functionality', [validators.Optional()])
|
||||
brand = StringField(u'Brand')
|
||||
generation = IntegerField(u'Generation')
|
||||
version = StringField(u'Version')
|
||||
weight = FloatField(u'Weight', [validators.DataRequired()])
|
||||
width = FloatField(u'Width', [validators.DataRequired()])
|
||||
height = FloatField(u'Height', [validators.DataRequired()])
|
||||
depth = FloatField(u'Depth', [validators.DataRequired()])
|
||||
variant = StringField(u'Variant', [validators.Optional()])
|
||||
sku = StringField(u'SKU', [validators.Optional()])
|
||||
image = StringField(u'Image', [validators.Optional(), validators.URL()])
|
||||
imei = IntegerField(u'IMEI', [validators.Optional()])
|
||||
meid = StringField(u'MEID', [validators.Optional()])
|
||||
resolution = IntegerField(u'Resolution width', [validators.Optional()])
|
||||
screen = FloatField(u'Screen size', [validators.Optional()])
|
||||
type = StringField('Type', [validators.DataRequired()])
|
||||
label = StringField('Label')
|
||||
serial_number = StringField('Seria Number', [validators.DataRequired()])
|
||||
model = StringField('Model', [validators.DataRequired()])
|
||||
manufacturer = StringField('Manufacturer', [validators.DataRequired()])
|
||||
appearance = StringField('Appearance', [validators.Optional()])
|
||||
functionality = StringField('Functionality', [validators.Optional()])
|
||||
brand = StringField('Brand')
|
||||
generation = IntegerField('Generation')
|
||||
version = StringField('Version')
|
||||
weight = FloatField('Weight', [validators.DataRequired()])
|
||||
width = FloatField('Width', [validators.DataRequired()])
|
||||
height = FloatField('Height', [validators.DataRequired()])
|
||||
depth = FloatField('Depth', [validators.DataRequired()])
|
||||
variant = StringField('Variant', [validators.Optional()])
|
||||
sku = StringField('SKU', [validators.Optional()])
|
||||
image = StringField('Image', [validators.Optional(), validators.URL()])
|
||||
imei = IntegerField('IMEI', [validators.Optional()])
|
||||
meid = StringField('MEID', [validators.Optional()])
|
||||
resolution = IntegerField('Resolution width', [validators.Optional()])
|
||||
screen = FloatField('Screen size', [validators.Optional()])
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.devices = {"Smartphone": Smartphone,
|
||||
"Tablet": Tablet,
|
||||
"Cellphone": Cellphone,
|
||||
"Monitor": Monitor,
|
||||
"Mouse": Mouse,
|
||||
"Keyboard": Keyboard,
|
||||
"SAI": SAI,
|
||||
"MemoryCardReader": MemoryCardReader}
|
||||
self.devices = {
|
||||
"Smartphone": Smartphone,
|
||||
"Tablet": Tablet,
|
||||
"Cellphone": Cellphone,
|
||||
"Monitor": Monitor,
|
||||
"Mouse": Mouse,
|
||||
"Keyboard": Keyboard,
|
||||
"SAI": SAI,
|
||||
"MemoryCardReader": MemoryCardReader,
|
||||
}
|
||||
|
||||
if not self.generation.data:
|
||||
self.generation.data = 1
|
||||
|
@ -335,29 +353,31 @@ class NewDeviceForm(FlaskForm):
|
|||
'software': 'Web',
|
||||
'version': '11.0',
|
||||
'device': {
|
||||
'type': self.type.data,
|
||||
'model': self.model.data,
|
||||
'manufacturer': self.manufacturer.data,
|
||||
'serialNumber': self.serial_number.data,
|
||||
'brand': self.brand.data,
|
||||
'version': self.version.data,
|
||||
'generation': self.generation.data,
|
||||
'sku': self.sku.data,
|
||||
'weight': self.weight.data,
|
||||
'width': self.width.data,
|
||||
'height': self.height.data,
|
||||
'depth': self.depth.data,
|
||||
'variant': self.variant.data,
|
||||
'image': self.image.data
|
||||
}
|
||||
'type': self.type.data,
|
||||
'model': self.model.data,
|
||||
'manufacturer': self.manufacturer.data,
|
||||
'serialNumber': self.serial_number.data,
|
||||
'brand': self.brand.data,
|
||||
'version': self.version.data,
|
||||
'generation': self.generation.data,
|
||||
'sku': self.sku.data,
|
||||
'weight': self.weight.data,
|
||||
'width': self.width.data,
|
||||
'height': self.height.data,
|
||||
'depth': self.depth.data,
|
||||
'variant': self.variant.data,
|
||||
'image': self.image.data,
|
||||
},
|
||||
}
|
||||
|
||||
if self.appearance.data or self.functionality.data:
|
||||
json_snapshot['device']['actions'] = [{
|
||||
'type': 'VisualTest',
|
||||
'appearanceRange': self.appearance.data,
|
||||
'functionalityRange': self.functionality.data
|
||||
}]
|
||||
json_snapshot['device']['actions'] = [
|
||||
{
|
||||
'type': 'VisualTest',
|
||||
'appearanceRange': self.appearance.data,
|
||||
'functionalityRange': self.functionality.data,
|
||||
}
|
||||
]
|
||||
|
||||
upload_form = UploadSnapshotForm()
|
||||
upload_form.sync = Sync()
|
||||
|
@ -387,14 +407,14 @@ class NewDeviceForm(FlaskForm):
|
|||
|
||||
|
||||
class TagForm(FlaskForm):
|
||||
code = StringField(u'Code', [validators.length(min=1)])
|
||||
code = StringField('Code', [validators.length(min=1)])
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
error = ["This value is being used"]
|
||||
is_valid = super().validate(extra_validators)
|
||||
if not is_valid:
|
||||
return False
|
||||
tag = Tag.query.filter(Tag.id==self.code.data).all()
|
||||
tag = Tag.query.filter(Tag.id == self.code.data).all()
|
||||
if tag:
|
||||
self.code.errors = error
|
||||
return False
|
||||
|
@ -415,7 +435,7 @@ class TagForm(FlaskForm):
|
|||
|
||||
|
||||
class TagUnnamedForm(FlaskForm):
|
||||
amount = IntegerField(u'amount')
|
||||
amount = IntegerField('amount')
|
||||
|
||||
def save(self):
|
||||
num = self.amount.data
|
||||
|
@ -427,8 +447,8 @@ class TagUnnamedForm(FlaskForm):
|
|||
|
||||
|
||||
class TagDeviceForm(FlaskForm):
|
||||
tag = SelectField(u'Tag', choices=[])
|
||||
device = StringField(u'Device', [validators.Optional()])
|
||||
tag = SelectField('Tag', choices=[])
|
||||
device = StringField('Device', [validators.Optional()])
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.delete = kwargs.pop('delete', None)
|
||||
|
@ -437,9 +457,11 @@ class TagDeviceForm(FlaskForm):
|
|||
super().__init__(*args, **kwargs)
|
||||
|
||||
if self.delete:
|
||||
tags = Tag.query.filter(Tag.owner_id==g.user.id).filter(Tag.device_id==self.device_id)
|
||||
tags = Tag.query.filter(Tag.owner_id == g.user.id).filter_by(
|
||||
device_id=self.device_id
|
||||
)
|
||||
else:
|
||||
tags = Tag.query.filter(Tag.owner_id==g.user.id).filter(Tag.device_id==None)
|
||||
tags = Tag.query.filter(Tag.owner_id == g.user.id).filter_by(device_id=None)
|
||||
|
||||
self.tag.choices = [(tag.id, tag.id) for tag in tags]
|
||||
|
||||
|
@ -449,8 +471,11 @@ class TagDeviceForm(FlaskForm):
|
|||
if not is_valid:
|
||||
return False
|
||||
|
||||
self._tag = Tag.query.filter(Tag.id == self.tag.data).filter(
|
||||
Tag.owner_id == g.user.id).one()
|
||||
self._tag = (
|
||||
Tag.query.filter(Tag.id == self.tag.data)
|
||||
.filter(Tag.owner_id == g.user.id)
|
||||
.one()
|
||||
)
|
||||
|
||||
if not self.delete and self._tag.device_id:
|
||||
self.tag.errors = [("This tag is actualy in use.")]
|
||||
|
@ -464,8 +489,11 @@ class TagDeviceForm(FlaskForm):
|
|||
|
||||
if self.device_id or self.device.data:
|
||||
self.device_id = self.device_id or self.device.data
|
||||
self._device = Device.query.filter(Device.id == self.device_id).filter(
|
||||
Device.owner_id == g.user.id).one()
|
||||
self._device = (
|
||||
Device.query.filter(Device.id == self.device_id)
|
||||
.filter(Device.owner_id == g.user.id)
|
||||
.one()
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
|
@ -481,19 +509,28 @@ class TagDeviceForm(FlaskForm):
|
|||
|
||||
|
||||
class NewActionForm(FlaskForm):
|
||||
name = StringField(u'Name', [validators.length(max=50)],
|
||||
description="A name or title of the event. Something to look for.")
|
||||
name = StringField(
|
||||
'Name',
|
||||
[validators.length(max=50)],
|
||||
description="A name or title of the event. Something to look for.",
|
||||
)
|
||||
devices = HiddenField()
|
||||
date = DateField(u'Date', [validators.Optional()],
|
||||
description="""When the action ends. For some actions like booking
|
||||
date = DateField(
|
||||
'Date',
|
||||
[validators.Optional()],
|
||||
description="""When the action ends. For some actions like booking
|
||||
the time when it expires, for others like renting the
|
||||
time that the end rents. For specific actions, it is the
|
||||
time in which they are carried out; differs from created
|
||||
in that created is where the system receives the action.""")
|
||||
severity = SelectField(u'Severity', choices=[(v.name, v.name) for v in Severity],
|
||||
description="""An indicator that evaluates the execution of the event.
|
||||
For example, failed events are set to Error""")
|
||||
description = TextAreaField(u'Description')
|
||||
in that created is where the system receives the action.""",
|
||||
)
|
||||
severity = SelectField(
|
||||
'Severity',
|
||||
choices=[(v.name, v.name) for v in Severity],
|
||||
description="""An indicator that evaluates the execution of the event.
|
||||
For example, failed events are set to Error""",
|
||||
)
|
||||
description = TextAreaField('Description')
|
||||
lot = HiddenField()
|
||||
type = HiddenField()
|
||||
|
||||
|
@ -506,8 +543,11 @@ class NewActionForm(FlaskForm):
|
|||
self._devices = OrderedSet()
|
||||
if self.devices.data:
|
||||
devices = set(self.devices.data.split(","))
|
||||
self._devices = OrderedSet(Device.query.filter(Device.id.in_(devices)).filter(
|
||||
Device.owner_id == g.user.id).all())
|
||||
self._devices = OrderedSet(
|
||||
Device.query.filter(Device.id.in_(devices))
|
||||
.filter(Device.owner_id == g.user.id)
|
||||
.all()
|
||||
)
|
||||
|
||||
if not self._devices:
|
||||
return False
|
||||
|
@ -544,11 +584,11 @@ class NewActionForm(FlaskForm):
|
|||
|
||||
|
||||
class AllocateForm(NewActionForm):
|
||||
start_time = DateField(u'Start time')
|
||||
end_time = DateField(u'End time')
|
||||
final_user_code = StringField(u'Final user code', [validators.length(max=50)])
|
||||
transaction = StringField(u'Transaction', [validators.length(max=50)])
|
||||
end_users = IntegerField(u'End users')
|
||||
start_time = DateField('Start time')
|
||||
end_time = DateField('End time')
|
||||
final_user_code = StringField('Final user code', [validators.length(max=50)])
|
||||
transaction = StringField('Transaction', [validators.length(max=50)])
|
||||
end_users = IntegerField('End users')
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
@ -569,19 +609,31 @@ class AllocateForm(NewActionForm):
|
|||
|
||||
|
||||
class DataWipeDocumentForm(Form):
|
||||
date = DateField(u'Date', [validators.Optional()],
|
||||
description="Date when was data wipe")
|
||||
url = URLField(u'Url', [validators.Optional()],
|
||||
description="Url where the document resides")
|
||||
success = BooleanField(u'Success', [validators.Optional()],
|
||||
description="The erase was success or not?")
|
||||
software = StringField(u'Software', [validators.Optional()],
|
||||
description="Which software has you use for erase the disks")
|
||||
id_document = StringField(u'Document Id', [validators.Optional()],
|
||||
description="Identification number of document")
|
||||
file_name = FileField(u'File', [validators.DataRequired()],
|
||||
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.""")
|
||||
date = DateField(
|
||||
'Date', [validators.Optional()], description="Date when was data wipe"
|
||||
)
|
||||
url = URLField(
|
||||
'Url', [validators.Optional()], description="Url where the document resides"
|
||||
)
|
||||
success = BooleanField(
|
||||
'Success', [validators.Optional()], description="The erase was success or not?"
|
||||
)
|
||||
software = StringField(
|
||||
'Software',
|
||||
[validators.Optional()],
|
||||
description="Which software has you use for erase the disks",
|
||||
)
|
||||
id_document = StringField(
|
||||
'Document Id',
|
||||
[validators.Optional()],
|
||||
description="Identification number of document",
|
||||
)
|
||||
file_name = FileField(
|
||||
'File',
|
||||
[validators.DataRequired()],
|
||||
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 validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
@ -637,23 +689,39 @@ class DataWipeForm(NewActionForm):
|
|||
|
||||
|
||||
class TradeForm(NewActionForm):
|
||||
user_from = StringField(u'Supplier', [validators.Optional()],
|
||||
description="Please enter the supplier's email address",
|
||||
render_kw={'data-email': ""})
|
||||
user_to = StringField(u'Receiver', [validators.Optional()],
|
||||
description="Please enter the receiver's email address",
|
||||
render_kw={'data-email': ""})
|
||||
confirm = BooleanField(u'Confirm', [validators.Optional()],
|
||||
default=True,
|
||||
description="I need confirmation from the other user for every device and document.")
|
||||
code = StringField(u'Code', [validators.Optional()],
|
||||
description="If you don't need confirm, you need put a code for trace the user in the statistics.")
|
||||
user_from = StringField(
|
||||
'Supplier',
|
||||
[validators.Optional()],
|
||||
description="Please enter the supplier's email address",
|
||||
render_kw={'data-email': ""},
|
||||
)
|
||||
user_to = StringField(
|
||||
'Receiver',
|
||||
[validators.Optional()],
|
||||
description="Please enter the receiver's email address",
|
||||
render_kw={'data-email': ""},
|
||||
)
|
||||
confirm = BooleanField(
|
||||
'Confirm',
|
||||
[validators.Optional()],
|
||||
default=True,
|
||||
description="I need confirmation from the other user for every device and document.",
|
||||
)
|
||||
code = StringField(
|
||||
'Code',
|
||||
[validators.Optional()],
|
||||
description="If you don't need confirm, you need put a code for trace the user in the statistics.",
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.user_from.render_kw['data-email'] = g.user.email
|
||||
self.user_to.render_kw['data-email'] = g.user.email
|
||||
self._lot = Lot.query.filter(Lot.id==self.lot.data).filter(Lot.owner_id==g.user.id).one()
|
||||
self._lot = (
|
||||
Lot.query.filter(Lot.id == self.lot.data)
|
||||
.filter(Lot.owner_id == g.user.id)
|
||||
.one()
|
||||
)
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = self.generic_validation(extra_validators=extra_validators)
|
||||
|
@ -661,11 +729,15 @@ class TradeForm(NewActionForm):
|
|||
email_to = self.user_to.data
|
||||
|
||||
if not self.confirm.data and not self.code.data:
|
||||
self.code.errors = ["If you don't want confirm, you need a code"]
|
||||
self.code.errors = ["If you don't want to confirm, you need a code"]
|
||||
is_valid = False
|
||||
|
||||
if self.confirm.data and not (email_from and email_to) or email_to == email_from or \
|
||||
g.user.email not in [email_from, email_to]:
|
||||
if (
|
||||
self.confirm.data
|
||||
and not (email_from and email_to)
|
||||
or email_to == email_from
|
||||
or g.user.email not in [email_from, email_to]
|
||||
):
|
||||
|
||||
errors = ["If you want confirm, you need a correct email"]
|
||||
self.user_to.errors = errors
|
||||
|
@ -682,10 +754,17 @@ class TradeForm(NewActionForm):
|
|||
self.db_user_to = user_to
|
||||
self.db_user_from = user_from
|
||||
|
||||
self.has_errors = not is_valid
|
||||
return is_valid
|
||||
|
||||
def save(self, commit=True):
|
||||
self.create_phantom_account()
|
||||
if self.has_errors:
|
||||
raise ValueError(
|
||||
"The %s could not be saved because the data didn't validate."
|
||||
% (self.instance._meta.object_name)
|
||||
)
|
||||
if not self.confirm.data:
|
||||
self.create_phantom_account()
|
||||
self.prepare_instance()
|
||||
self.create_automatic_trade()
|
||||
|
||||
|
@ -718,33 +797,30 @@ class TradeForm(NewActionForm):
|
|||
The same if exist to but not from
|
||||
|
||||
"""
|
||||
# Checks
|
||||
if self.confirm.data or not self.code.data:
|
||||
return
|
||||
|
||||
user_from = self.user_from.data
|
||||
user_to = self.user_to.data
|
||||
code = self.code.data
|
||||
|
||||
if user_from and user_to:
|
||||
# both users exist, no further action is necessary
|
||||
return
|
||||
|
||||
# Creating receiver phantom account
|
||||
# Create receiver (to) phantom account
|
||||
if user_from and not user_to:
|
||||
assert g.user.email == user_from
|
||||
user = self.create_user(code)
|
||||
|
||||
self.user_from = g.user
|
||||
self.user_to = user
|
||||
self.user_to = self.get_or_create_user(code)
|
||||
return
|
||||
|
||||
# Creating supplier phantom account
|
||||
# Create supplier (from) phantom account
|
||||
if not user_from and user_to:
|
||||
assert g.user.email == user_to
|
||||
user = self.create_user(code)
|
||||
self.user_from = user
|
||||
|
||||
self.user_from = self.get_or_create_user(code)
|
||||
self.user_to = g.user
|
||||
|
||||
def create_user(self, code):
|
||||
def get_or_create_user(self, code):
|
||||
email = "{}_{}@dhub.com".format(str(g.user.id), code)
|
||||
user = User.query.filter_by(email=email).first()
|
||||
if not user:
|
||||
|
@ -774,27 +850,42 @@ class TradeForm(NewActionForm):
|
|||
|
||||
|
||||
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.""")
|
||||
url = URLField(
|
||||
'Url',
|
||||
[validators.Optional()],
|
||||
render_kw={'class': "form-control"},
|
||||
description="Url where the document resides",
|
||||
)
|
||||
description = StringField(
|
||||
'Description',
|
||||
[validators.Optional()],
|
||||
render_kw={'class': "form-control"},
|
||||
description="",
|
||||
)
|
||||
id_document = StringField(
|
||||
'Document Id',
|
||||
[validators.Optional()],
|
||||
render_kw={'class': "form-control"},
|
||||
description="Identification number of document",
|
||||
)
|
||||
date = DateField(
|
||||
'Date',
|
||||
[validators.Optional()],
|
||||
render_kw={'class': "form-control"},
|
||||
description="",
|
||||
)
|
||||
file_name = FileField(
|
||||
'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()
|
||||
self._lot = Lot.query.filter(Lot.id == lot_id).one()
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
|
Reference in a new issue