Advertisement
Guest User

Untitled

a guest
Mar 26th, 2013
1,129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.99 KB | None | 0 0
  1. class Factura(BaseModel):
  2.     empresa = models.ForeignKey(Empresa)
  3.     codigo = models.CharField(max_length=50)
  4.     fecha = models.DateField()
  5.     cliente = models.ForeignKey(Cliente)
  6.     total_iva = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  7.     base = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  8.     total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  9.     fecha_pagado = models.DateField(blank=True, null=True)
  10.  
  11.     def calculate(self):
  12.         sum_total_iva = 0
  13.         sum_base = 0
  14.         sum_total = 0
  15.         for factura_item in self.facturaitem_set.all():
  16.             factura_item.calculate()
  17.             sum_total_iva += factura_item.total_iva
  18.             sum_base += factura_item.base
  19.             sum_total += factura_item.total
  20.             factura_item.save()
  21.            
  22.         self.total_iva = sum_total_iva
  23.         self.base = sum_base
  24.         self.total = sum_total
  25.  
  26.     def __unicode__(self):
  27.         return "[" + str(self.id) + "][" + str(self.fecha) + "] " + self.cliente.name
  28.  
  29. class FacturaItem(BaseModel):
  30.     factura = models.ForeignKey(Factura)
  31.     producto = models.ForeignKey(Producto)
  32.  
  33.     precio = models.DecimalField(max_digits=10, decimal_places=2)
  34.     cantidad = models.DecimalField(max_digits=10, decimal_places=0)
  35.  
  36.     tipo_iva = models.DecimalField(max_digits=5, decimal_places=2, default=0)
  37.     total_iva = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  38.     base = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  39.     total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
  40.  
  41.     def get_absolute_url(self):
  42.         return None
  43.  
  44.     def calculate(self):
  45.         if self.tipo_iva is None or self.tipo_iva == 0:
  46.             self.tipo_iva = self.producto.iva.tipo
  47.            
  48.         self.base = (self.precio * self.cantidad)
  49.         self.total_iva = (self.base * self.tipo_iva / Decimal(100.0))
  50.         self.total = self.base + self.total_iva
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement