#encoding:utf-8 from django.contrib.auth.models import User from rest_framework import serializers from oficios.models import Oficio, Recepcion, RecepcionCopia, RecepcionAsignacion, RecepcionAsignacionCopia, Envio, \ Asignacion from directorio.models import Funcionario import locale def get_nombre_usuario(user): if hasattr(user, 'funcionario'): funcionario = r'%s (%s)' % (str(user.funcionario), user.funcionario.adscripcion) return funcionario if hasattr(user, 'adscripcion'): return str(user.adscripcion) if hasattr(user, 'personafisica'): persona = None if user.personafisica.empresa: persona = r'%s (%s)' % (str(user.personafisica), user.personafisica.empresa) else: persona = r'%s' % str(user.personafisica) return persona if hasattr(user, 'empresa'): return str(user.empresa) if user.get_full_name(): return user.get_full_name() else: return user.username class UserSerializer(serializers.ModelSerializer): id = serializers.CharField(source='username') text = serializers.SerializerMethodField('get_nombre') def get_nombre(self, obj): return get_nombre_usuario(obj) class Meta: model = User fields = ( 'id', 'text' ) class OficioSerializer(serializers.ModelSerializer): DT_RowId = serializers.Field(source='id') archivo_tipo = serializers.SerializerMethodField('get_archivo_tipo') anexo_tipo = serializers.SerializerMethodField('get_anexo_tipo') envios = serializers.SerializerMethodField('get_envios') prioridad_color = serializers.SerializerMethodField('get_prioridad_color') #usuarios_reciben = serializers.SerializerMethodField('get_usuarios_reciben') def get_anexo_tipo(self, obj): return obj.anexo_tipo def get_prioridad_color(self, obj): return obj.get_prioridad_color() def get_archivo_tipo(self, obj): return obj.archivo_tipo def get_envios(self, obj): return obj.envio_set.all() def get_usuarios_reciben(self, obj): try: envio = Envio.objects.get(oficio=obj) ofi_recep = Recepcion.objects.get(envio_id=envio.id) user = User.objects.get(pk=ofi_recep.usuario_recibe_id) funcionario = Funcionario.objects.get(usuario_id=user.id) nombre = '%s %s %s' % (funcionario.nombre, funcionario.apellido_paterno, funcionario.apellido_materno) except: nombre = '' return nombre class Meta: model = Oficio filds = [ 'folio', 'no_oficio', 'asunto', 'archivo', 'anexo', 'prioridad', #'usuarios_reciben' 'dedicado', 'fecha_oficio', ] class OficiosEnviadosSerializer(serializers.ModelSerializer): para = serializers.SerializerMethodField('get_para') no_oficio = serializers.Field(source='envio.oficio.no_oficio') archivo = serializers.Field(source='envio.oficio.archivo.url') archivo_tipo = serializers.Field(source='envio.oficio.archivo_tipo') anexo = serializers.SerializerMethodField('get_anexos') anexo_tipo = serializers.Field(source='envio.oficio.anexo_tipo') prioridad = serializers.Field(source='envio.oficio.prioridad') prioridad_color = serializers.Field(source='envio.oficio.get_prioridad_color') enviado = serializers.SerializerMethodField('get_enviado') def get_para(self, obj): return get_nombre_usuario(obj.envio.usuario_envia) def get_anexos(self, obj): return str(obj.envio.oficio.anexo) def get_enviado(self, obj): locale.setlocale(locale.LC_TIME, '') return obj.envio.fecha_envio.strftime('%Y-%m-%d %H:%M') class Meta: model = Recepcion fields = ( 'id', 'para', 'no_oficio', 'archivo', 'archivo_tipo', 'anexo', 'anexo_tipo', 'prioridad', 'prioridad_color', 'enviado' ) class OficiosRecibidosSerializer(serializers.ModelSerializer): remitente = serializers.SerializerMethodField('get_remitente') no_oficio = serializers.Field(source='envio.oficio.no_oficio') asunto = serializers.Field(source='envio.oficio.asunto') archivo = serializers.Field(source='envio.oficio.archivo.url') archivo_tipo = serializers.Field(source='envio.oficio.archivo_tipo') anexo = serializers.SerializerMethodField('get_anexo') anexo_tipo = serializers.Field(source='envio.oficio.anexo_tipo') prioridad = serializers.Field(source='envio.oficio.prioridad') prioridad_color = serializers.Field(source='envio.oficio.get_prioridad_color') recibido = serializers.SerializerMethodField('get_recibido') recepcion = serializers.Field(source='fecha_recepcion') estatus = serializers.Field(source='get_estatus_display') def get_remitente(self, obj): return get_nombre_usuario(obj.envio.usuario_envia) def get_anexo(self, obj): return str(obj.envio.oficio.anexo) def get_recibido(self, obj): locale.setlocale(locale.LC_TIME, '') return obj.envio.fecha_envio.strftime('%Y-%m-%d') class Meta: model = Recepcion fields = ( 'id', 'remitente', 'no_oficio', 'asunto', 'archivo', 'archivo_tipo', 'anexo', 'anexo_tipo', 'prioridad', 'prioridad_color', 'recibido', 'recepcion', 'estatus', 'leido' ) class OficiosRecibidosCCPSerializer(OficiosRecibidosSerializer): class Meta: model = RecepcionCopia fields = ( 'id', 'remitente', 'no_oficio', 'asunto', 'archivo', 'archivo_tipo', 'anexo', 'anexo_tipo', 'prioridad', 'prioridad_color', 'recibido', 'recepcion', 'estatus', 'leido' ) class OficiosAsignadosSerializer(serializers.ModelSerializer): remitente = serializers.SerializerMethodField('get_remitente') no_oficio = serializers.Field(source='asignacion.oficio.no_oficio') oficio = serializers.Field(source='asignacion.oficio.archivo.url') archivo_tipo = serializers.Field(source='asignacion.oficio.archivo_tipo') anexo = serializers.SerializerMethodField('get_anexo') anexo_tipo = serializers.Field(source='asignacion.oficio.anexo_tipo') prioridad = serializers.Field(source='asignacion.oficio.prioridad') prioridad_color = serializers.Field(source='asignacion.oficio.get_prioridad_color') recibido = serializers.SerializerMethodField('get_recibido') estatus = serializers.Field(source='get_estatus_display') asunto = serializers.SerializerMethodField('get_asunto') respuesta = serializers.SerializerMethodField('get_respuesta_oficio') def get_recibido(self, obj): locale.setlocale(locale.LC_TIME, '') return obj.asignacion.fecha_asignacion.strftime('%Y-%m-%d %H:%M') def get_anexo(self, obj): return str(obj.asignacion.oficio.anexo) def get_remitente(self, obj): return get_nombre_usuario(obj.asignacion.usuario_asigna) def get_asunto(self, obj): return (obj.asignacion.oficio.asunto) def get_respuesta_oficio(self, obj): oficio = Oficio.objects.filter(oficio_responde = obj.asignacion.oficio) if oficio.exists(): bandera=True else: bandera=False return bandera class Meta: model = RecepcionAsignacion class OficiosAsignadosCCPSerializer(OficiosAsignadosSerializer): class Meta: model = RecepcionAsignacionCopia