class StockItemTestResultSerializer(InvenTreeModelSerializer): """ Serializer for the StockItemTestResult model """ user_detail = UserSerializerBrief(source='user', read_only=True) key = serializers.CharField(read_only=True) attachment = InvenTreeAttachmentSerializerField(required=False) def __init__(self, *args, **kwargs): user_detail = kwargs.pop('user_detail', False) super().__init__(*args, **kwargs) if user_detail is not True: self.fields.pop('user_detail') class Meta: model = StockItemTestResult fields = [ 'pk', 'stock_item', 'key', 'test', 'result', 'value', 'attachment', 'notes', 'user', 'user_detail', 'date' ] read_only_fields = [ 'pk', 'user', 'date', ]
class StockItemAttachmentSerializer(InvenTreeModelSerializer): """ Serializer for StockItemAttachment model """ def __init__(self, *args, **kwargs): user_detail = kwargs.pop('user_detail', False) super().__init__(*args, **kwargs) if user_detail is not True: self.fields.pop('user_detail') user_detail = UserSerializerBrief(source='user', read_only=True) attachment = InvenTreeAttachmentSerializerField(required=True) class Meta: model = StockItemAttachment fields = [ 'pk', 'stock_item', 'attachment', 'comment', 'upload_date', 'user', 'user_detail', ] read_only_fields = ['upload_date', 'user', 'user_detail']
class StockTrackingSerializer(InvenTreeModelSerializer): """ Serializer for StockItemTracking model """ url = serializers.CharField(source='get_absolute_url', read_only=True) user = UserSerializerBrief(many=False, read_only=True) item = StockItemSerializerBrief(many=False, read_only=True) class Meta: model = StockItemTracking fields = [ 'pk', 'url', 'item', 'date', 'title', 'notes', 'URL', 'quantity', 'user', 'system', ] read_only_fields = [ 'date', 'user', 'system', 'quantity', ]
class StockTrackingSerializer(InvenTreeModelSerializer): """ Serializer for StockItemTracking model """ def __init__(self, *args, **kwargs): item_detail = kwargs.pop('item_detail', False) user_detail = kwargs.pop('user_detail', False) super().__init__(*args, **kwargs) if item_detail is not True: self.fields.pop('item_detail') if user_detail is not True: self.fields.pop('user_detail') label = serializers.CharField(read_only=True) item_detail = StockItemSerializerBrief(source='item', many=False, read_only=True) user_detail = UserSerializerBrief(source='user', many=False, read_only=True) deltas = serializers.JSONField(read_only=True) class Meta: model = StockItemTracking fields = [ 'pk', 'item', 'item_detail', 'date', 'deltas', 'label', 'notes', 'tracking_type', 'user', 'user_detail', ] read_only_fields = [ 'date', 'user', 'label', 'tracking_type', ]
class StockTrackingSerializer(InvenTreeModelSerializer): """ Serializer for StockItemTracking model """ def __init__(self, *args, **kwargs): item_detail = kwargs.pop('item_detail', False) user_detail = kwargs.pop('user_detail', False) super().__init__(*args, **kwargs) if item_detail is not True: self.fields.pop('item_detail') if user_detail is not True: self.fields.pop('user_detail') url = serializers.CharField(source='get_absolute_url', read_only=True) item_detail = StockItemSerializerBrief(source='item', many=False, read_only=True) user_detail = UserSerializerBrief(source='user', many=False, read_only=True) class Meta: model = StockItemTracking fields = [ 'pk', 'url', 'item', 'item_detail', 'date', 'title', 'notes', 'link', 'quantity', 'user', 'user_detail', 'system', ] read_only_fields = [ 'date', 'user', 'system', 'quantity', ]
class BuildSerializer(ReferenceIndexingSerializerMixin, InvenTreeModelSerializer): """ Serializes a Build object """ url = serializers.CharField(source='get_absolute_url', read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) quantity = InvenTreeDecimalField() overdue = serializers.BooleanField(required=False, read_only=True) issued_by_detail = UserSerializerBrief(source='issued_by', read_only=True) responsible_detail = OwnerSerializer(source='responsible', read_only=True) @staticmethod def annotate_queryset(queryset): """ Add custom annotations to the BuildSerializer queryset, performing database queries as efficiently as possible. The following annoted fields are added: - overdue: True if the build is outstanding *and* the completion date has past """ # Annotate a boolean 'overdue' flag queryset = queryset.annotate( overdue=Case(When( Build.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()))) return queryset def __init__(self, *args, **kwargs): part_detail = kwargs.pop('part_detail', True) super().__init__(*args, **kwargs) if part_detail is not True: self.fields.pop('part_detail') class Meta: model = Build fields = [ 'pk', 'url', 'title', 'batch', 'creation_date', 'completed', 'completion_date', 'destination', 'parent', 'part', 'part_detail', 'overdue', 'reference', 'sales_order', 'quantity', 'status', 'status_text', 'target_date', 'take_from', 'notes', 'link', 'issued_by', 'issued_by_detail', 'responsible', 'responsible_detail', ] read_only_fields = [ 'completed', 'creation_date', 'completion_data', 'status', 'status_text', ]