Se agregaron los microservicios_v2

This commit is contained in:
2025-10-03 23:16:08 -06:00
parent 0ac9f06e51
commit 0b51024343
4 changed files with 353 additions and 1 deletions

View File

@@ -46,6 +46,60 @@ class PartidaSerializer(serializers.ModelSerializer):
class Meta:
model = Partida
fields = '__all__'
read_only_fields = ('created_at', 'updated_at', 'numero_partida')
def validate_unique(self, attrs):
"""
Sobrescribe la validación de unicidad para manejar correctamente
las actualizaciones de registros existentes.
"""
# Si estamos actualizando un registro existente, excluirlo de la validación
if self.instance:
# Para actualizaciones, crear una instancia temporal con los nuevos datos
# pero sin guardarla, solo para validar unicidad excluyendo el registro actual
exclude = {'id': self.instance.id}
else:
# Para creaciones nuevas, no excluir nada
exclude = {}
# Crear una instancia temporal con los datos combinados
if self.instance:
# Combinar datos existentes con los nuevos
combined_attrs = {}
for field in self.Meta.model._meta.fields:
field_name = field.name
if field_name in attrs:
combined_attrs[field_name] = attrs[field_name]
elif hasattr(self.instance, field_name):
combined_attrs[field_name] = getattr(self.instance, field_name)
else:
combined_attrs = attrs
# Verificar unique_together manualmente para pedimento + numero_partida
if 'pedimento' in combined_attrs and 'numero_partida' in combined_attrs:
queryset = self.Meta.model.objects.filter(
pedimento=combined_attrs['pedimento'],
numero_partida=combined_attrs['numero_partida']
)
# Si estamos actualizando, excluir el registro actual
if self.instance:
queryset = queryset.exclude(id=self.instance.id)
if queryset.exists():
raise serializers.ValidationError({
'non_field_errors': [
f'Ya existe una partida con el número {combined_attrs["numero_partida"]} para este pedimento.'
]
})
def validate(self, data):
"""
Validación adicional personalizada.
"""
# Llamar a la validación de unicidad personalizada
self.validate_unique(data)
return data
class TipoOperacionSerializer(serializers.ModelSerializer):
class Meta: