209 lines
11 KiB
Python
209 lines
11 KiB
Python
import uuid
|
|
from django.db import models
|
|
|
|
# Create your models here.
|
|
|
|
class TipoOperacion(models.Model):
|
|
tipo = models.CharField(max_length=100)
|
|
descripcion = models.CharField(max_length=200)
|
|
|
|
def __str__(self):
|
|
return f"{self.tipo}"
|
|
|
|
class Meta:
|
|
verbose_name = "Tipo de Operacion"
|
|
verbose_name_plural = "Tipos de Operacion"
|
|
db_table = 'tipo_operacion'
|
|
ordering = ['tipo']
|
|
|
|
class Pedimento(models.Model):
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
pedimento = models.CharField(max_length=20, unique=False, help_text="Número de pedimento aduanal")
|
|
pedimento_app = models.CharField(max_length=25, unique=False, help_text="Número de pedimento en la aplicación")
|
|
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='pedimentos', help_text="Organización a la que pertenece el pedimento")
|
|
|
|
patente = models.CharField(max_length=20, blank=True, null=True, help_text="Número de patente aduanal")
|
|
aduana = models.CharField(max_length=10, blank=True, null=True, help_text="Clave de la aduana según la clasificación aduanera")
|
|
regimen = models.CharField(max_length=10, blank=True, null=True, help_text="Clave del régimen aduanero según la clasificación aduanera")
|
|
tipo_operacion = models.ForeignKey('TipoOperacion', on_delete=models.SET_NULL, blank=True, null=True, help_text="Tipo de operación del pedimento", related_name='pedimentos')
|
|
clave_pedimento = models.CharField(max_length=10, blank=True, null=True, help_text="Clave del pedimento según la clasificación aduanera")
|
|
|
|
fecha_inicio = models.DateField(help_text="Fecha de inicio del pedimento", blank=True, null=True)
|
|
fecha_fin = models.DateField(help_text="Fecha de fin del pedimento", blank=True, null=True)
|
|
fecha_pago = models.DateField(help_text="Fecha de pago del pedimento", blank=True, null=True)
|
|
|
|
alerta = models.BooleanField(default=False, help_text="Indica si el pedimento tiene una alerta asociada")
|
|
|
|
contribuyente = models.ForeignKey('Importador', on_delete=models.CASCADE, related_name='pedimentos', help_text="Contribuyente asociado al pedimento", blank=True, null=True)
|
|
agente_aduanal = models.CharField(max_length=100, blank=True, null=True, help_text="RFC del agente aduanal")
|
|
|
|
curp_apoderado = models.CharField(max_length=18, blank=True, null=True, help_text="CURP del apoderado aduanal")
|
|
|
|
importe_total = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, help_text="Importe total del pedimento")
|
|
saldo_disponible = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, help_text="Saldo disponible del pedimento")
|
|
importe_pedimento = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, help_text="Importe del pedimento")
|
|
existe_expediente = models.BooleanField(default=False)
|
|
remesas = models.BooleanField(default=False, help_text="Indica si el pedimento tiene remesas asociadas")
|
|
|
|
numero_partidas = models.PositiveIntegerField(default=0, help_text="Número de partidas asociadas al pedimento", blank=True, null=True)
|
|
numero_operacion = models.CharField(max_length=20, blank=True, null=True, help_text="Número de operación del pedimento")
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True, help_text="Fecha de creación del registro")
|
|
updated_at = models.DateTimeField(auto_now=True, help_text="Fecha de última actualización del registro")
|
|
|
|
def __str__(self):
|
|
return f"{self.pedimento}"
|
|
|
|
class Meta:
|
|
verbose_name = "Pedimento"
|
|
verbose_name_plural = "Pedimentos"
|
|
db_table = 'pedimento'
|
|
ordering = ['pedimento']
|
|
|
|
class Partida(models.Model):
|
|
pedimento = models.ForeignKey(Pedimento, on_delete=models.CASCADE, related_name='partidas', help_text="Pedimento asociado a la partida")
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='partidas', help_text="Organización a la que pertenece la partida")
|
|
numero_partida = models.PositiveIntegerField(help_text="Número de la partida dentro del pedimento")
|
|
descargado = models.BooleanField(default=False, help_text="Indica si la partida ha sido descargada")
|
|
created_at = models.DateTimeField(auto_now_add=True, help_text="Fecha de creación del registro")
|
|
updated_at = models.DateTimeField(auto_now=True, help_text="Fecha de última actualización del registro")
|
|
|
|
def __str__(self):
|
|
return f"Partida {self.numero_partida} del Pedimento {self.pedimento.pedimento}"
|
|
|
|
class Meta:
|
|
verbose_name = "Partida"
|
|
verbose_name_plural = "Partidas"
|
|
db_table = 'partida'
|
|
ordering = ['pedimento', 'numero_partida']
|
|
unique_together = ['pedimento', 'numero_partida'] # No puede existir el mismo número de partida para un pedimento
|
|
|
|
class EDocument(models.Model):
|
|
pedimento = models.ForeignKey(Pedimento, on_delete=models.CASCADE, related_name='documentos', help_text="Pedimento asociado al documento")
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='edocuments', help_text="Organización a la que pertenece el EDocument")
|
|
numero_edocument = models.CharField(max_length=20, unique=True, help_text="Número único del e-documento")
|
|
clave = models.CharField(max_length=10, blank=True, null=True, help_text="Clave del e-documento según la clasificación aduanera")
|
|
cadena_original = models.TextField(blank=True, null=True, help_text="Cadena original del e-documento")
|
|
sello_digital = models.TextField(blank=True, null=True, help_text="Firma digital del e-documento")
|
|
descripcion = models.CharField(max_length=200, blank=True, null=True, help_text="Descripción del documento")
|
|
created_at = models.DateTimeField(auto_now_add=True, help_text="Fecha de creación del documento")
|
|
updated_at = models.DateTimeField(auto_now=True, help_text="Fecha de última actualización del documento")
|
|
edocument_descargado = models.BooleanField(default=False, help_text="Indica si el e-documento ha sido descargado")
|
|
acuse_descargado = models.BooleanField(default=False, help_text="Indica si el acuse del e-documento ha sido descargado")
|
|
|
|
def __str__(self):
|
|
return f"{self.descripcion} - {self.pedimento.pedimento}"
|
|
|
|
class Meta:
|
|
verbose_name = "EDocument"
|
|
verbose_name_plural = "EDocuments"
|
|
db_table = 'edocs'
|
|
ordering = ['created_at']
|
|
|
|
class Cove(models.Model):
|
|
pedimento = models.ForeignKey(Pedimento, on_delete=models.CASCADE, related_name='coves', help_text="Pedimento asociado a la cove")
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='coves', help_text="Organización a la que pertenece la cove")
|
|
numero_cove = models.CharField(max_length=20, unique=True, help_text="Número único de la cove")
|
|
created_at = models.DateTimeField(auto_now_add=True, help_text="Fecha de creación de la cove")
|
|
updated_at = models.DateTimeField(auto_now=True, help_text="Fecha de última actualización de la cove")
|
|
cove_descargado = models.BooleanField(default=False, help_text="Indica si la cove ha sido descargada")
|
|
acuse_cove_descargado = models.BooleanField(default=False, help_text="Indica si el acuse de la cove ha sido descargado")
|
|
|
|
def __str__(self):
|
|
return f"{self.numero_cove} - {self.pedimento.pedimento}"
|
|
|
|
class Meta:
|
|
verbose_name = "Cove"
|
|
verbose_name_plural = "Coves"
|
|
db_table = 'coves'
|
|
ordering = ['created_at']
|
|
|
|
class EstadoDeProcesamiento(models.Model):
|
|
estado = models.CharField(max_length=50)
|
|
|
|
def __str__(self):
|
|
return self.estado
|
|
|
|
class Meta:
|
|
verbose_name = "Estado de Procesamiento"
|
|
verbose_name_plural = "Estados de Procesamiento"
|
|
db_table = 'estado_de_procesamiento'
|
|
ordering = ['estado']
|
|
|
|
class TipoDeProcesamiento(models.Model):
|
|
tipo = models.CharField(max_length=50)
|
|
|
|
def __str__(self):
|
|
return self.tipo
|
|
|
|
class Meta:
|
|
verbose_name = "Tipo de Procesamiento"
|
|
verbose_name_plural = "Tipos de Procesamiento"
|
|
db_table = 'tipo_de_procesamiento'
|
|
ordering = ['tipo']
|
|
|
|
class Servicio(models.Model):
|
|
endpoint = models.CharField(max_length=100)
|
|
descripcion = models.TextField(blank=True, null=True)
|
|
hora_inicio = models.TimeField(max_length=50, blank=True, null=True)
|
|
hora_fin = models.TimeField(max_length=50, blank=True, null=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return self.endpoint
|
|
|
|
class Meta:
|
|
verbose_name = "Servicio"
|
|
verbose_name_plural = "Servicios"
|
|
db_table = 'servicio'
|
|
ordering = ['endpoint']
|
|
|
|
class ProcesamientoPedimento(models.Model):
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='procesamientos')
|
|
estado = models.ForeignKey(EstadoDeProcesamiento, on_delete=models.CASCADE, related_name='procesamientos')
|
|
tipo_procesamiento = models.ForeignKey(TipoDeProcesamiento, on_delete=models.CASCADE, related_name='procesamientos', blank=True, null=True)
|
|
pedimento = models.ForeignKey(Pedimento, on_delete=models.CASCADE, related_name='procesamientos')
|
|
servicio = models.ForeignKey(Servicio, on_delete=models.CASCADE, related_name='procesamientos', blank=True, null=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return f"{self.pedimento.pedimento} - {self.estado.estado}"
|
|
|
|
class Meta:
|
|
verbose_name = "Procesamiento de Pedimento"
|
|
verbose_name_plural = "Procesamientos de Pedimento"
|
|
db_table = 'procesamiento_pedimento'
|
|
ordering = ['created_at']
|
|
|
|
class Regimen(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
claveped = models.CharField(max_length=4)
|
|
regimenped = models.CharField(max_length=4)
|
|
tipo = models.IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'regimen'
|
|
verbose_name = 'Regimen'
|
|
verbose_name_plural = 'Regimenes'
|
|
|
|
def __str__(self):
|
|
return f"{self.claveped} - {self.regimenped} - {self.tipo}"
|
|
|
|
class Importador(models.Model):
|
|
rfc = models.CharField(primary_key=True, max_length=13, unique=True, help_text="RFC del importador")
|
|
nombre = models.CharField(max_length=200, help_text="Nombre del importador")
|
|
organizacion = models.ForeignKey('organization.Organizacion', on_delete=models.CASCADE, related_name='importadores', help_text="Organización a la que pertenece el importador")
|
|
created_at = models.DateTimeField(auto_now_add=True, help_text="Fecha de creación del registro")
|
|
updated_at = models.DateTimeField(auto_now=True, help_text="Fecha de última actualización del registro")
|
|
|
|
class Meta:
|
|
verbose_name = 'Importador'
|
|
verbose_name_plural = 'Importadores'
|
|
db_table = 'importador'
|
|
ordering = ['rfc']
|
|
|
|
def __str__(self):
|
|
return f"{self.rfc} - {self.nombre}" |