diff --git a/barcodes/attributes/__init__.py b/barcodes/attributes/__init__.py index b7bfd42..d320467 100644 --- a/barcodes/attributes/__init__.py +++ b/barcodes/attributes/__init__.py @@ -6,6 +6,7 @@ from .company_name_attribute_getter import CompanyNameAttributeGetter from .composition_attribute_getter import CompositionAttributeGetter from .inn_attribute_getter import InnAttributeGetter from .name_attribute_getter import NameAttributeGetter +from .size_attribute_getter import SizeAttributeGetter class AttributeWriterFactory: @@ -28,5 +29,7 @@ class AttributeWriterFactory: return ColorAttributeGetter() case 'composition': return CompositionAttributeGetter() + case 'size': + return SizeAttributeGetter() case _: return None diff --git a/barcodes/attributes/brand_attribute_getter.py b/barcodes/attributes/brand_attribute_getter.py index 2a96648..aec80e9 100644 --- a/barcodes/attributes/brand_attribute_getter.py +++ b/barcodes/attributes/brand_attribute_getter.py @@ -5,7 +5,5 @@ from models import Product class BrandAttributeGetter(BaseAttributeGetter): def get_value(self, product: Product): - result = product.brand - if not result: - result = '' - return result + return product.brand + diff --git a/barcodes/attributes/color_attribute_getter.py b/barcodes/attributes/color_attribute_getter.py index adbe60e..3a65451 100644 --- a/barcodes/attributes/color_attribute_getter.py +++ b/barcodes/attributes/color_attribute_getter.py @@ -5,7 +5,4 @@ from models import Product class ColorAttributeGetter(BaseAttributeGetter): def get_value(self, product: Product): - result = product.color - if not result: - result = '' - return result + return product.color diff --git a/barcodes/attributes/company_name_attribute_getter.py b/barcodes/attributes/company_name_attribute_getter.py index f9d038b..ae32d38 100644 --- a/barcodes/attributes/company_name_attribute_getter.py +++ b/barcodes/attributes/company_name_attribute_getter.py @@ -5,7 +5,4 @@ from models import Product, Client class CompanyNameAttributeGetter(BaseAttributeGetter): def get_value(self, product: Product): client: Client = product.client - result = client.company_name - if not result: - result = '' - return result + return client.company_name diff --git a/barcodes/attributes/composition_attribute_getter.py b/barcodes/attributes/composition_attribute_getter.py index b5fe5a4..e28d776 100644 --- a/barcodes/attributes/composition_attribute_getter.py +++ b/barcodes/attributes/composition_attribute_getter.py @@ -5,7 +5,4 @@ from models import Product class CompositionAttributeGetter(BaseAttributeGetter): def get_value(self, product: Product): - result = product.composition - if not result: - result = '' - return result + return product.composition diff --git a/barcodes/attributes/inn_attribute_getter.py b/barcodes/attributes/inn_attribute_getter.py index 0e3cac2..abdf491 100644 --- a/barcodes/attributes/inn_attribute_getter.py +++ b/barcodes/attributes/inn_attribute_getter.py @@ -6,7 +6,4 @@ class InnAttributeGetter(BaseAttributeGetter): def get_value(self, product: Product): client: Client = product.client client_details: ClientDetails = client.details - result = client_details.inn - if not result: - result = '' - return result + return client_details.inn diff --git a/barcodes/attributes/size_attribute_getter.py b/barcodes/attributes/size_attribute_getter.py new file mode 100644 index 0000000..430cdb4 --- /dev/null +++ b/barcodes/attributes/size_attribute_getter.py @@ -0,0 +1,7 @@ +from barcodes.attributes.base import BaseAttributeGetter +from models import Product + + +class SizeAttributeGetter(BaseAttributeGetter): + def get_value(self, product: Product): + return product.size diff --git a/models/barcode.py b/models/barcode.py index d97081d..c1e0207 100644 --- a/models/barcode.py +++ b/models/barcode.py @@ -43,8 +43,8 @@ class BarcodeTemplate(BaseModel): lazy='selectin', back_populates='barcode_template', cascade="all, delete") + additional_field = Column(String, nullable=True, comment='Дополнительное поле') is_default = Column(Boolean, nullable=False, default=False, comment='По умолчанию') - size_id = Column(Integer, ForeignKey('barcode_template_sizes.id'), nullable=False) size = relationship('BarcodeTemplateSize', lazy='joined') diff --git a/models/product.py b/models/product.py index bfc9312..4091a4c 100644 --- a/models/product.py +++ b/models/product.py @@ -22,6 +22,7 @@ class Product(BaseModel): brand = Column(String, nullable=True, comment='Бренд') color = Column(String, nullable=True, comment='Цвет') composition = Column(String, nullable=True, comment='Состав') + size = Column(String, nullable=True, comment='Размер') class ProductBarcode(BaseModel): diff --git a/schemas/barcode.py b/schemas/barcode.py index e3a5b02..672ef1b 100644 --- a/schemas/barcode.py +++ b/schemas/barcode.py @@ -28,6 +28,7 @@ class BaseBarcodeTemplateSchema(CustomModelCamel): is_default: bool size: BarcodeTemplateSizeSchema additional_attributes: list[BarcodeTemplateAdditionalAttributeSchema] + additional_field: str | None = None class BarcodeTemplateSchema(BaseBarcodeTemplateSchema): @@ -43,6 +44,7 @@ class BarcodeAttributeSchema(CustomModelCamel): class BarcodeSchema(CustomModelCamel): barcode: str attributes: List[BarcodeAttributeSchema] + additional_field: str | None = None # endregion diff --git a/schemas/product.py b/schemas/product.py index 034d68c..374ffb1 100644 --- a/schemas/product.py +++ b/schemas/product.py @@ -19,6 +19,7 @@ class ProductSchema(CustomModelCamel): brand: str | None = None color: str | None = None composition: str | None = None + size: str | None = None @field_validator('barcodes', mode="before") def barcodes_to_list(cls, v): diff --git a/services/barcode.py b/services/barcode.py index a64a9cf..e2f6ab3 100644 --- a/services/barcode.py +++ b/services/barcode.py @@ -51,6 +51,8 @@ class BarcodeService(BaseService): if not attribute_getter: continue value = attribute_getter.get_value(product) + if not value: + continue attributes_list.append( BarcodeAttributeSchema( name=attribute.name, @@ -66,7 +68,8 @@ class BarcodeService(BaseService): ) barcode = BarcodeSchema( barcode=request.barcode, - attributes=attributes_list + attributes=attributes_list, + additional_field=barcode_template.additional_field ) return GetProductBarcodeResponse(barcode=barcode)