from rest_framework import serializers
from .models import ListModel,DepartmentListModel,BoundTypeListModel,BoundBSListModel,BoundCodeTypeListModel,BoundStatusListModel,ProductListModel
from utils import datasolve


class WarehouseGetSerializer(serializers.ModelSerializer):
    warehouse_name = serializers.CharField(read_only=True, required=False)
    warehouse_city = serializers.CharField(read_only=True, required=False)
    warehouse_address = serializers.CharField(read_only=True, required=False)
    warehouse_contact = serializers.CharField(read_only=True, required=False)
    warehouse_manager = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')

    class Meta:
        model = ListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]


class WarehousePostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    warehouse_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    warehouse_city = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_address = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_contact = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_manager = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = ListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]


class WarehouseUpdateSerializer(serializers.ModelSerializer):
    warehouse_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    warehouse_city = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_address = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_contact = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    warehouse_manager = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = ListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]


class WarehousePartialUpdateSerializer(serializers.ModelSerializer):
    warehouse_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    warehouse_city = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
    warehouse_address = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
    warehouse_contact = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
    warehouse_manager = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = ListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class DepartmentGetSerializer(serializers.ModelSerializer):
    department_name = serializers.CharField(read_only=True, required=False)
    department_manager = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')

    class Meta:
        model = DepartmentListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]


class DepartmentPostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    department_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    department_manager = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = DepartmentListModel
        exclude = ['is_delete', ]    # 排除is_delete字段
        read_only_fields = ['id', 'create_time', 'update_time', ]

class DepartmentUpdateSerializer(serializers.ModelSerializer):
    department_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    department_manager = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = DepartmentListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class DepartmentPartialUpdateSerializer(serializers.ModelSerializer):
    department_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    department_manager = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = DepartmentListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundTypeGetSerializer(serializers.ModelSerializer):
    bound_type_name = serializers.CharField(read_only=True, required=False)
    bound_type_code = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    class Meta:
        model = BoundTypeListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]

class BoundTypePostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    bound_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_type_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundTypeListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundTypeUpdateSerializer(serializers.ModelSerializer):    
    bound_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_type_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundTypeListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundTypePartialUpdateSerializer(serializers.ModelSerializer):
    bound_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_type_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = BoundTypeListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundBSGetSerializer(serializers.ModelSerializer):
    bound_bs_name = serializers.CharField(read_only=True, required=False)
    bound_bs_code = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    class Meta:
        model = BoundBSListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]

class BoundBSPostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    bound_bs_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_bs_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundBSListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundBSUpdateSerializer(serializers.ModelSerializer):
    bound_bs_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_bs_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundBSListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundBSPartialUpdateSerializer(serializers.ModelSerializer):
    bound_bs_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_bs_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = BoundBSListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundCodeTypeGetSerializer(serializers.ModelSerializer):
    bound_code_type_name = serializers.CharField(read_only=True, required=False)
    bound_code_type_code = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    class Meta:
        model = BoundCodeTypeListModel  
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]

class BoundCodeTypePostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    bound_code_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_code_type_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundCodeTypeListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundCodeTypeUpdateSerializer(serializers.ModelSerializer):
    bound_code_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_code_type_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundCodeTypeListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundCodeTypePartialUpdateSerializer(serializers.ModelSerializer):
    bound_code_type_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_code_type_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = BoundCodeTypeListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundStatusGetSerializer(serializers.ModelSerializer):
    bound_status_name = serializers.CharField(read_only=True, required=False)
    bound_status_code = serializers.IntegerField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)
    openid = serializers.CharField(read_only=True, required=False)
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
    class Meta:
        model = BoundStatusListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]
class BoundStatusPostSerializer(serializers.ModelSerializer):
    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
    bound_status_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_status_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundStatusListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundStatusUpdateSerializer(serializers.ModelSerializer):
    bound_status_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_status_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])

    class Meta:
        model = BoundStatusListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class BoundStatusPartialUpdateSerializer(serializers.ModelSerializer):
    bound_status_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    bound_status_code = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = BoundStatusListModel
        exclude = ['openid', 'is_delete', ]
        read_only_fields = ['id', 'create_time', 'update_time', ]

class ProductGetSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField(read_only=True, required=False)
    product_code = serializers.CharField(read_only=True, required=False)
    product_std = serializers.CharField(read_only=True, required=False)
    creater = serializers.CharField(read_only=True, required=False)    
 

    class Meta:
        model = ProductListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id', ]

class ProductPostSerializer(serializers.ModelSerializer):

    product_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_std = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = ProductListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id',  ]

class ProductUpdateSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_std = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = ProductListModel
        exclude = [ 'is_delete', ]
        read_only_fields = ['id',]

class ProductPartialUpdateSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    product_std = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate],
                                           max_length=45, min_length=1)
    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])

    class Meta:
        model = ProductListModel
        exclude = ['is_delete', ]
        read_only_fields = ['id',  ]