class SalesOrderSerializer(InvenTreeModelSerializer): """ Serializers for the SalesOrder object """ def __init__(self, *args, **kwargs): customer_detail = kwargs.pop('customer_detail', False) super().__init__(*args, **kwargs) if customer_detail is not True: self.fields.pop('customer_detail') @staticmethod def annotate_queryset(queryset): """ Add extra information to the queryset """ queryset = queryset.annotate(line_items=SubqueryCount('lines')) return queryset customer_detail = CompanyBriefSerializer(source='customer', many=False, read_only=True) line_items = serializers.IntegerField(read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) class Meta: model = SalesOrder fields = [ 'pk', 'shipment_date', 'creation_date', 'description', 'line_items', 'link', 'reference', 'customer', 'customer_detail', 'customer_reference', 'status', 'status_text', 'shipment_date', 'notes', ] read_only_fields = ['reference', 'status']
class POSerializer(InvenTreeModelSerializer): """ Serializes an Order object """ def __init__(self, *args, **kwargs): supplier_detail = kwargs.pop('supplier_detail', False) super().__init__(*args, **kwargs) if supplier_detail is not True: self.fields.pop('supplier_detail') @staticmethod def annotate_queryset(queryset): """ Add extra information to the queryset """ return queryset.annotate(line_items=Count('lines'), ) supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) line_items = serializers.IntegerField(read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) class Meta: model = PurchaseOrder fields = [ 'pk', 'issue_date', 'complete_date', 'creation_date', 'description', 'line_items', 'link', 'reference', 'supplier', 'supplier_detail', 'supplier_reference', 'status', 'status_text', 'notes', ] read_only_fields = ['reference', 'status']
class SupplierPartSerializer(serializers.ModelSerializer): url = serializers.CharField(source='get_absolute_url', read_only=True) part = PartBriefSerializer(many=False, read_only=True) supplier = CompanyBriefSerializer(many=False, read_only=True) class Meta: model = SupplierPart fields = [ 'pk', 'url', 'part', 'supplier', 'SKU', 'manufacturer', 'MPN', ]
class SalesOrderSerializer(ReferenceIndexingSerializerMixin, InvenTreeModelSerializer): """ Serializers for the SalesOrder object """ def __init__(self, *args, **kwargs): customer_detail = kwargs.pop('customer_detail', False) super().__init__(*args, **kwargs) if customer_detail is not True: self.fields.pop('customer_detail') @staticmethod def annotate_queryset(queryset): """ Add extra information to the queryset - Number of line items in the SalesOrder - Overdue status of the SalesOrder """ queryset = queryset.annotate( line_items=SubqueryCount('lines') ) queryset = queryset.annotate( overdue=Case( When( order.models.SalesOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()) ) ) return queryset customer_detail = CompanyBriefSerializer(source='customer', many=False, read_only=True) line_items = serializers.IntegerField(read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) overdue = serializers.BooleanField(required=False, read_only=True) reference = serializers.CharField(required=True) class Meta: model = order.models.SalesOrder fields = [ 'pk', 'creation_date', 'customer', 'customer_detail', 'customer_reference', 'description', 'line_items', 'link', 'notes', 'overdue', 'reference', 'responsible', 'status', 'status_text', 'shipment_date', 'target_date', ] read_only_fields = [ 'status', 'creation_date', 'shipment_date', ]
class POSerializer(InvenTreeModelSerializer): """ Serializer for a PurchaseOrder object """ def __init__(self, *args, **kwargs): supplier_detail = kwargs.pop('supplier_detail', False) super().__init__(*args, **kwargs) if supplier_detail is not True: self.fields.pop('supplier_detail') @staticmethod def annotate_queryset(queryset): """ Add extra information to the queryset - Number of liens in the PurchaseOrder - Overdue status of the PurchaseOrder """ queryset = queryset.annotate(line_items=SubqueryCount('lines')) queryset = queryset.annotate( overdue=Case(When( PurchaseOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()))) return queryset supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) line_items = serializers.IntegerField(read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) overdue = serializers.BooleanField(required=False, read_only=True) class Meta: model = PurchaseOrder fields = [ 'pk', 'issue_date', 'complete_date', 'creation_date', 'description', 'line_items', 'link', 'overdue', 'reference', 'supplier', 'supplier_detail', 'supplier_reference', 'status', 'status_text', 'target_date', 'notes', ] read_only_fields = ['reference', 'status']
class SalesOrderAllocationSerializer(InvenTreeModelSerializer): """ Serializer for the SalesOrderAllocation model. This includes some fields from the related model objects. """ part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) order = serializers.PrimaryKeyRelatedField(source='line.order', many=False, read_only=True) serial = serializers.CharField(source='get_serial', read_only=True) quantity = serializers.FloatField(read_only=False) location = serializers.PrimaryKeyRelatedField(source='item.location', many=False, read_only=True) # Extra detail fields order_detail = SalesOrderSerializer(source='line.order', many=False, read_only=True) part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) location_detail = stock.serializers.LocationSerializer( source='item.location', many=False, read_only=True) customer_detail = CompanyBriefSerializer(source='line.order.customer', many=False, read_only=True) shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True) def __init__(self, *args, **kwargs): order_detail = kwargs.pop('order_detail', False) part_detail = kwargs.pop('part_detail', True) item_detail = kwargs.pop('item_detail', False) location_detail = kwargs.pop('location_detail', False) customer_detail = kwargs.pop('customer_detail', False) super().__init__(*args, **kwargs) if not order_detail: self.fields.pop('order_detail') if not part_detail: self.fields.pop('part_detail') if not item_detail: self.fields.pop('item_detail') if not location_detail: self.fields.pop('location_detail') if not customer_detail: self.fields.pop('customer_detail') class Meta: model = order.models.SalesOrderAllocation fields = [ 'pk', 'line', 'customer_detail', 'serial', 'quantity', 'location', 'location_detail', 'item', 'item_detail', 'order', 'order_detail', 'part', 'part_detail', 'shipment', 'shipment_date', ]
class PurchaseOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): """Serializer for a PurchaseOrder object.""" def __init__(self, *args, **kwargs): """Initialization routine for the serializer""" supplier_detail = kwargs.pop('supplier_detail', False) super().__init__(*args, **kwargs) if supplier_detail is not True: self.fields.pop('supplier_detail') @staticmethod def annotate_queryset(queryset): """Add extra information to the queryset. - Number of lines in the PurchaseOrder - Overdue status of the PurchaseOrder """ queryset = queryset.annotate( line_items=SubqueryCount('lines') ) queryset = queryset.annotate( overdue=Case( When( order.models.PurchaseOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()) ) ) return queryset supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) line_items = serializers.IntegerField(read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) overdue = serializers.BooleanField(required=False, read_only=True) reference = serializers.CharField(required=True) def validate_reference(self, reference): """Custom validation for the reference field""" # Ensure that the reference matches the required pattern order.models.PurchaseOrder.validate_reference_field(reference) return reference responsible_detail = OwnerSerializer(source='responsible', read_only=True, many=False) class Meta: """Metaclass options.""" model = order.models.PurchaseOrder fields = [ 'pk', 'issue_date', 'complete_date', 'creation_date', 'description', 'line_items', 'link', 'overdue', 'reference', 'responsible', 'responsible_detail', 'supplier', 'supplier_detail', 'supplier_reference', 'status', 'status_text', 'target_date', 'notes', 'total_price', 'total_price_string', ] read_only_fields = [ 'status' 'issue_date', 'complete_date', 'creation_date', ]