Merge pull request #341 from eReuse/changes/3743-parth-number
Changes/3743 parth number
This commit is contained in:
commit
44c22898c2
|
@ -326,9 +326,10 @@ class NewDeviceForm(FlaskForm):
|
||||||
pallet = StringField('Identity of pallet', [validators.Optional()])
|
pallet = StringField('Identity of pallet', [validators.Optional()])
|
||||||
components = TextAreaField('Components', [validators.Optional()])
|
components = TextAreaField('Components', [validators.Optional()])
|
||||||
info = TextAreaField('Info', [validators.Optional()])
|
info = TextAreaField('Info', [validators.Optional()])
|
||||||
serial_number = StringField('Serial Number', [validators.Optional()])
|
|
||||||
model = StringField('Model', [validators.Optional()])
|
model = StringField('Model', [validators.Optional()])
|
||||||
manufacturer = StringField('Manufacturer', [validators.Optional()])
|
manufacturer = StringField('Manufacturer', [validators.Optional()])
|
||||||
|
part_number = StringField('Part Number', [validators.Optional()])
|
||||||
|
serial_number = StringField('Serial Number', [validators.Optional()])
|
||||||
appearance = StringField('Appearance', [validators.Optional()])
|
appearance = StringField('Appearance', [validators.Optional()])
|
||||||
functionality = StringField('Functionality', [validators.Optional()])
|
functionality = StringField('Functionality', [validators.Optional()])
|
||||||
brand = StringField('Brand')
|
brand = StringField('Brand')
|
||||||
|
@ -390,6 +391,7 @@ class NewDeviceForm(FlaskForm):
|
||||||
self.info.data = self._obj.placeholder.info
|
self.info.data = self._obj.placeholder.info
|
||||||
self.components.data = self._obj.placeholder.components
|
self.components.data = self._obj.placeholder.components
|
||||||
self.serial_number.data = self._obj.serial_number
|
self.serial_number.data = self._obj.serial_number
|
||||||
|
self.part_number.data = self._obj.part_number
|
||||||
self.model.data = self._obj.model
|
self.model.data = self._obj.model
|
||||||
self.manufacturer.data = self._obj.manufacturer
|
self.manufacturer.data = self._obj.manufacturer
|
||||||
self.appearance.data = appearance
|
self.appearance.data = appearance
|
||||||
|
@ -419,6 +421,7 @@ class NewDeviceForm(FlaskForm):
|
||||||
self.info.render_kw = disabled
|
self.info.render_kw = disabled
|
||||||
self.components.render_kw = disabled
|
self.components.render_kw = disabled
|
||||||
self.serial_number.render_kw = disabled
|
self.serial_number.render_kw = disabled
|
||||||
|
self.part_number.render_kw = disabled
|
||||||
self.model.render_kw = disabled
|
self.model.render_kw = disabled
|
||||||
self.manufacturer.render_kw = disabled
|
self.manufacturer.render_kw = disabled
|
||||||
self.appearance.render_kw = disabled
|
self.appearance.render_kw = disabled
|
||||||
|
@ -516,6 +519,8 @@ class NewDeviceForm(FlaskForm):
|
||||||
self.model.data = self.model.data.lower()
|
self.model.data = self.model.data.lower()
|
||||||
if self.serial_number.data:
|
if self.serial_number.data:
|
||||||
self.serial_number.data = self.serial_number.data.lower()
|
self.serial_number.data = self.serial_number.data.lower()
|
||||||
|
if self.part_number.data:
|
||||||
|
self.part_number.data = self.part_number.data.lower()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -541,6 +546,7 @@ class NewDeviceForm(FlaskForm):
|
||||||
'model': self.model.data,
|
'model': self.model.data,
|
||||||
'manufacturer': self.manufacturer.data,
|
'manufacturer': self.manufacturer.data,
|
||||||
'serialNumber': self.serial_number.data,
|
'serialNumber': self.serial_number.data,
|
||||||
|
'partNumber': self.part_number.data,
|
||||||
'brand': self.brand.data,
|
'brand': self.brand.data,
|
||||||
'version': self.version.data,
|
'version': self.version.data,
|
||||||
'generation': self.generation.data,
|
'generation': self.generation.data,
|
||||||
|
@ -587,6 +593,7 @@ class NewDeviceForm(FlaskForm):
|
||||||
self.phid.data = None
|
self.phid.data = None
|
||||||
self.id_device_supplier.data = None
|
self.id_device_supplier.data = None
|
||||||
self.serial_number.data = None
|
self.serial_number.data = None
|
||||||
|
self.part_number.data = None
|
||||||
self.sku.data = None
|
self.sku.data = None
|
||||||
self.imei.data = None
|
self.imei.data = None
|
||||||
self.meid.data = None
|
self.meid.data = None
|
||||||
|
@ -616,6 +623,7 @@ class NewDeviceForm(FlaskForm):
|
||||||
self._obj.model = self.model.data
|
self._obj.model = self.model.data
|
||||||
self._obj.manufacturer = self.manufacturer.data
|
self._obj.manufacturer = self.manufacturer.data
|
||||||
self._obj.serial_number = self.serial_number.data
|
self._obj.serial_number = self.serial_number.data
|
||||||
|
self._obj.part_number = self.part_number.data
|
||||||
self._obj.brand = self.brand.data
|
self._obj.brand = self.brand.data
|
||||||
self._obj.version = self.version.data
|
self._obj.version = self.version.data
|
||||||
self._obj.generation = self.generation.data
|
self._obj.generation = self.generation.data
|
||||||
|
@ -1538,6 +1546,7 @@ class UploadPlaceholderForm(FlaskForm):
|
||||||
'Model',
|
'Model',
|
||||||
'Manufacturer',
|
'Manufacturer',
|
||||||
'Serial Number',
|
'Serial Number',
|
||||||
|
'Part Number',
|
||||||
'Id device Supplier',
|
'Id device Supplier',
|
||||||
'Pallet',
|
'Pallet',
|
||||||
'Info',
|
'Info',
|
||||||
|
@ -1565,6 +1574,7 @@ class UploadPlaceholderForm(FlaskForm):
|
||||||
device.model = "{}".format(data['Model'][i]).lower()
|
device.model = "{}".format(data['Model'][i]).lower()
|
||||||
device.manufacturer = "{}".format(data['Manufacturer'][i]).lower()
|
device.manufacturer = "{}".format(data['Manufacturer'][i]).lower()
|
||||||
device.serial_number = "{}".format(data['Serial Number'][i]).lower()
|
device.serial_number = "{}".format(data['Serial Number'][i]).lower()
|
||||||
|
device.part_number = "{}".format(data['Part Number'][i]).lower()
|
||||||
placeholder.id_device_supplier = "{}".format(
|
placeholder.id_device_supplier = "{}".format(
|
||||||
data['Id device Supplier'][i]
|
data['Id device Supplier'][i]
|
||||||
)
|
)
|
||||||
|
@ -1587,6 +1597,7 @@ class UploadPlaceholderForm(FlaskForm):
|
||||||
'model': "{}".format(data['Model'][i]),
|
'model': "{}".format(data['Model'][i]),
|
||||||
'manufacturer': "{}".format(data['Manufacturer'][i]),
|
'manufacturer': "{}".format(data['Manufacturer'][i]),
|
||||||
'serialNumber': "{}".format(data['Serial Number'][i]),
|
'serialNumber': "{}".format(data['Serial Number'][i]),
|
||||||
|
'partNumber': "{}".format(data['Part Number'][i]),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
json_placeholder = {
|
json_placeholder = {
|
||||||
|
@ -1626,6 +1637,7 @@ class EditPlaceholderForm(FlaskForm):
|
||||||
manufacturer = StringField('Manufacturer', [validators.Optional()])
|
manufacturer = StringField('Manufacturer', [validators.Optional()])
|
||||||
model = StringField('Model', [validators.Optional()])
|
model = StringField('Model', [validators.Optional()])
|
||||||
serial_number = StringField('Serial Number', [validators.Optional()])
|
serial_number = StringField('Serial Number', [validators.Optional()])
|
||||||
|
part_number = StringField('Part Number', [validators.Optional()])
|
||||||
id_device_supplier = StringField('Id Supplier', [validators.Optional()])
|
id_device_supplier = StringField('Id Supplier', [validators.Optional()])
|
||||||
phid = StringField('Phid', [validators.DataRequired()])
|
phid = StringField('Phid', [validators.DataRequired()])
|
||||||
pallet = StringField('Pallet', [validators.Optional()])
|
pallet = StringField('Pallet', [validators.Optional()])
|
||||||
|
|
|
@ -528,9 +528,14 @@ class DeviceCreateView(GenericMixin):
|
||||||
amount = form.amount.data
|
amount = form.amount.data
|
||||||
tpy = form.type.data
|
tpy = form.type.data
|
||||||
txt = f'{amount} real Device "{tpy}" created successfully.'
|
txt = f'{amount} real Device "{tpy}" created successfully.'
|
||||||
if amount == 1:
|
placeholder = (
|
||||||
phid = form.placeholder.phid
|
Placeholder.query.filter_by(owner=g.user)
|
||||||
dhid = form.placeholder.device.devicehub_id
|
.order_by(Placeholder.id.desc())
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
if amount == 1 and placeholder:
|
||||||
|
phid = placeholder.phid
|
||||||
|
dhid = placeholder.device.devicehub_id
|
||||||
txt = f'Device "{tpy}" real with PHID {phid} and DHID {dhid} '
|
txt = f'Device "{tpy}" real with PHID {phid} and DHID {dhid} '
|
||||||
txt += 'created successfully'
|
txt += 'created successfully'
|
||||||
messages.success(txt)
|
messages.success(txt)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
"""add part number to device
|
||||||
|
|
||||||
|
Revision ID: bcfda54aaf2f
|
||||||
|
Revises: 6b0880832b78
|
||||||
|
Create Date: 2022-09-13 16:29:35.403897
|
||||||
|
|
||||||
|
"""
|
||||||
|
import citext
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import context, op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'bcfda54aaf2f'
|
||||||
|
down_revision = '6b0880832b78'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def get_inv():
|
||||||
|
INV = context.get_x_argument(as_dictionary=True).get('inventory')
|
||||||
|
if not INV:
|
||||||
|
raise ValueError("Inventory value is not specified")
|
||||||
|
return INV
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column(
|
||||||
|
'device',
|
||||||
|
sa.Column('part_number', citext.CIText(), nullable=True),
|
||||||
|
schema=f'{get_inv()}',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column('device', 'part_number', schema=f'{get_inv()}')
|
|
@ -128,6 +128,8 @@ class Device(Thing):
|
||||||
"""
|
"""
|
||||||
serial_number = Column(Unicode(), check_lower('serial_number'))
|
serial_number = Column(Unicode(), check_lower('serial_number'))
|
||||||
serial_number.comment = """The serial number of the device in lower case."""
|
serial_number.comment = """The serial number of the device in lower case."""
|
||||||
|
part_number = Column(Unicode(), check_lower('part_number'))
|
||||||
|
part_number.comment = """The part number of the device in lower case."""
|
||||||
brand = db.Column(CIText())
|
brand = db.Column(CIText())
|
||||||
brand.comment = """A naming for consumers. This field can represent
|
brand.comment = """A naming for consumers. This field can represent
|
||||||
several models, so it can be ambiguous, and it is not used to
|
several models, so it can be ambiguous, and it is not used to
|
||||||
|
|
|
@ -52,6 +52,9 @@ class Device(Thing):
|
||||||
serial_number = SanitizedStr(
|
serial_number = SanitizedStr(
|
||||||
lower=True, validate=Length(max=STR_BIG_SIZE), data_key='serialNumber'
|
lower=True, validate=Length(max=STR_BIG_SIZE), data_key='serialNumber'
|
||||||
)
|
)
|
||||||
|
part_number = SanitizedStr(
|
||||||
|
lower=True, validate=Length(max=STR_BIG_SIZE), data_key='partNumber'
|
||||||
|
)
|
||||||
brand = SanitizedStr(
|
brand = SanitizedStr(
|
||||||
validate=Length(max=STR_BIG_SIZE), description=m.Device.brand.comment
|
validate=Length(max=STR_BIG_SIZE), description=m.Device.brand.comment
|
||||||
)
|
)
|
||||||
|
|
|
@ -259,6 +259,7 @@ class BaseDeviceRow(OrderedDict):
|
||||||
self['Real Components'] = ''
|
self['Real Components'] = ''
|
||||||
self['Real Type'] = ''
|
self['Real Type'] = ''
|
||||||
self['Real Serial Number'] = ''
|
self['Real Serial Number'] = ''
|
||||||
|
self['Real Part Number'] = ''
|
||||||
self['Real Model'] = ''
|
self['Real Model'] = ''
|
||||||
self['Real Manufacturer'] = ''
|
self['Real Manufacturer'] = ''
|
||||||
|
|
||||||
|
@ -513,6 +514,7 @@ class DeviceRow(BaseDeviceRow):
|
||||||
self['Real Type'] = none2str(self.placeholder.device.type)
|
self['Real Type'] = none2str(self.placeholder.device.type)
|
||||||
self['Real Manufacturer'] = none2str(self.placeholder.device.manufacturer)
|
self['Real Manufacturer'] = none2str(self.placeholder.device.manufacturer)
|
||||||
self['Real Model'] = none2str(self.placeholder.device.model)
|
self['Real Model'] = none2str(self.placeholder.device.model)
|
||||||
|
self['Real Part Number'] = none2str(self.placeholder.device.part_number)
|
||||||
self['Real Serial Number'] = none2str(self.placeholder.device.serial_number)
|
self['Real Serial Number'] = none2str(self.placeholder.device.serial_number)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,19 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="from-group has-validation mb-2" id="Part_number">
|
||||||
|
<label for="partNumber" class="form-label">{{ form.part_number.label }}</label>
|
||||||
|
{{ form.part_number(class_="form-control") }}
|
||||||
|
<small class="text-muted form-text">Part number of this device</small>
|
||||||
|
{% if form.part_number.errors %}
|
||||||
|
<p class="text-danger">
|
||||||
|
{% for error in form.part_number.errors %}
|
||||||
|
{{ error }}<br/>
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="from-group has-validation mb-2" id="Serial_number">
|
<div class="from-group has-validation mb-2" id="Serial_number">
|
||||||
<label for="serialNumber" class="form-label">{{ form.serial_number.label }}</label>
|
<label for="serialNumber" class="form-label">{{ form.serial_number.label }}</label>
|
||||||
{{ form.serial_number(class_="form-control") }}
|
{{ form.serial_number(class_="form-control") }}
|
||||||
|
|
|
@ -113,6 +113,11 @@
|
||||||
<div class="col-lg-9 col-md-8">{{ placeholder.device.model or ''}}</div>
|
<div class="col-lg-9 col-md-8">{{ placeholder.device.model or ''}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 col-md-4 label">Part Number</div>
|
||||||
|
<div class="col-lg-9 col-md-8">{{ placeholder.device.part_number or ''}}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-3 col-md-4 label">Serial Number</div>
|
<div class="col-lg-3 col-md-4 label">Serial Number</div>
|
||||||
<div class="col-lg-9 col-md-8">{{ placeholder.device.serial_number or ''}}</div>
|
<div class="col-lg-9 col-md-8">{{ placeholder.device.serial_number or ''}}</div>
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
||||||
Phid;Model;Manufacturer;Serial Number;Id device Supplier;Pallet;Info
|
Phid;Model;Manufacturer;Serial Number;Part Number;Id device Supplier;Pallet;Info
|
||||||
a123;Vaio;Sony;12345678;TTT;24A;Good conditions
|
a123;Vaio;Sony;12345678;;TTT;24A;Good conditions
|
||||||
a124;Vaio;Sony;12345679;TTT;24A;Good conditions
|
a124;Vaio;Sony;12345679;;TTT;24A;Good conditions
|
||||||
a125;Vaio;Sony;12345680;TTT;24A;Good conditions
|
a125;Vaio;Sony;12345680;;TTT;24A;Good conditions
|
||||||
|
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -113,6 +113,7 @@ def test_physical_properties():
|
||||||
assert c.physical_properties == {
|
assert c.physical_properties == {
|
||||||
'usb': 3,
|
'usb': 3,
|
||||||
'serial_number': 'sn',
|
'serial_number': 'sn',
|
||||||
|
'part_number': None,
|
||||||
'pcmcia': None,
|
'pcmcia': None,
|
||||||
'model': 'ml',
|
'model': 'ml',
|
||||||
'slots': 2,
|
'slots': 2,
|
||||||
|
@ -130,6 +131,7 @@ def test_physical_properties():
|
||||||
'model': 'foo',
|
'model': 'foo',
|
||||||
'receiver_id': None,
|
'receiver_id': None,
|
||||||
'serial_number': 'foo-bar',
|
'serial_number': 'foo-bar',
|
||||||
|
'part_number': None,
|
||||||
'transfer_state': TransferState.Initial
|
'transfer_state': TransferState.Initial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue