Advertisement
losvilos

models.py

Mar 14th, 2025
86
0
20 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.97 KB | Help | 0 0
  1. from django.contrib.auth.models import AbstractUser
  2. from django.db import models
  3. from django.utils.timezone import now
  4. from datetime import timedelta
  5.  
  6.  
  7. class Rol(models.Model):
  8.     nombre = models.CharField(max_length=50, unique=True)
  9.     fecha_registro = models.DateTimeField(auto_now_add=True)
  10.  
  11.     def __str__(self):
  12.         return self.nombre
  13.  
  14. class Usuario(AbstractUser):
  15.     rol = models.ForeignKey(Rol, on_delete=models.SET_NULL, null=True, blank=True)
  16.     estatus = models.BooleanField(default=True, verbose_name="Activo")
  17.  
  18.     def __str__(self):
  19.         return self.username
  20.  
  21.  
  22. class Empleado(models.Model):
  23.     nombre = models.CharField(max_length=100)
  24.     apellido = models.CharField(max_length=100)
  25.     dni = models.CharField(max_length=15, unique=True)
  26.     rol = models.ForeignKey(Rol, on_delete=models.SET_NULL, null=True)
  27.     fecha_registro = models.DateTimeField(auto_now_add=True)
  28.  
  29.     def __str__(self):
  30.         return f"{self.nombre} {self.apellido}"
  31.    
  32.  
  33. class Zona(models.Model):
  34.     nombre = models.CharField(max_length=100)
  35.  
  36.     def __str__(self):
  37.         return self.nombre
  38.  
  39. class Cliente(models.Model):
  40.     numero_documento = models.CharField(max_length=20, unique=True)
  41.     nombre = models.CharField(max_length=50)
  42.     apellido_paterno = models.CharField(max_length=50)
  43.     apellido_materno = models.CharField(max_length=50, blank=True, null=True)
  44.     telefono = models.CharField(max_length=15, blank=True, null=True)
  45.     correo = models.EmailField(blank=True, null=True)
  46.     sexo = models.CharField(max_length=10, choices=[("M", "Masculino"), ("F", "Femenino")], blank=True, null=True)
  47.     fecha_nacimiento = models.DateField(blank=True, null=True)
  48.  
  49.     def __str__(self):
  50.         return f"{self.nombre} {self.apellido_paterno}"
  51.  
  52. class DireccionInstalacion(models.Model):
  53.     cliente = models.ForeignKey(Cliente, on_delete=models.CASCADE, related_name="direcciones_instalacion")
  54.     zona = models.ForeignKey(Zona, on_delete=models.CASCADE)
  55.     direccion = models.TextField()
  56.  
  57.     def __str__(self):
  58.         return f"{self.direccion} ({self.zona.nombre})"
  59.  
  60.  
  61. class Servicio(models.Model):
  62.     nombre = models.CharField(max_length=150)
  63.     precio = models.DecimalField(max_digits=10, decimal_places=2)
  64.  
  65.     def __str__(self):
  66.         return f"{self.nombre} - ${self.precio}"
  67.    
  68.    
  69. class Contrato(models.Model):
  70.     cliente = models.ForeignKey('Cliente', on_delete=models.CASCADE)
  71.     direccion_instalacion = models.ForeignKey('DireccionInstalacion', on_delete=models.SET_NULL, null=True)
  72.     servicios = models.ManyToManyField('Servicio')
  73.     fecha_contratacion = models.DateField()
  74.     dia_pago = models.PositiveSmallIntegerField(  # Solo almacena el día del 1 al 30
  75.         choices=[(i, i) for i in range(1, 31)],
  76.         verbose_name="Día de Pago",
  77.         null=True, blank=True
  78.     )
  79.     dias_gracia = models.PositiveIntegerField(default=0)
  80.     numero_abonado = models.CharField(max_length=50, blank=True, null=True)
  81.     descripcion = models.TextField(blank=True, null=True)
  82.     total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  83.  
  84.     def __str__(self):
  85.         return f"Contrato de {self.cliente} - Total: ${self.total}"
  86.    
  87.    
  88. class FormaPago(models.Model):
  89.     nombre = models.CharField(max_length=100)
  90.  
  91.     def __str__(self):
  92.         return self.nombre
  93.  
  94. class Pago(models.Model):
  95.     cliente = models.ForeignKey(Cliente, on_delete=models.CASCADE)
  96.     servicio = models.ForeignKey(Servicio, on_delete=models.CASCADE)
  97.     fecha_pago = models.DateField(default=now)  # Usa la fecha actual como valor por defecto
  98.     mes_pagado = models.CharField(max_length=50)  # Ejemplo: "Enero 2025"
  99.     monto = models.DecimalField(max_digits=10, decimal_places=2)
  100.     forma_pago = models.ForeignKey(FormaPago, on_delete=models.SET_NULL, null=True)
  101.     numero_boleta = models.CharField(max_length=50, blank=True, null=True)
  102.  
  103.     def __str__(self):
  104.         return f"{self.cliente} - {self.mes_pagado} - {self.monto}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement