Exemplo n.º 1
0
 def calcular_subtotal(self):
     """
     Devuelve el subtotal de la factura: líneas de venta + servicios.
     No cuenta abonos, descuento global ni IVA.
     """
     total_ldvs = sum([utils.ffloat((l.cantidad * l.precio) * (1 - l.descuento)) for l in self.lineasDeVenta])
     total_srvs = sum([utils.ffloat((s.precio * s.cantidad) * (1 - s.descuento)) for s in self.servicios])
     subtotal = total_ldvs + total_srvs
     return subtotal
Exemplo n.º 2
0
 def calcular_total_descuento(self, subtotal=None):
     """
     Calcula el total del descuento global.
     """
     if subtotal == None:
         subtotal = self.calcular_subtotal()
     tot_dto = utils.ffloat(-1 * (subtotal + float(self.cargo))
                            * self.descuento)
     return tot_dto
Exemplo n.º 3
0
 def calcular_total_irpf(self, subtotal = None, tot_dto = None, cargo = None, abonos = None):
     """
     Calcula el importe total de retención de IRPF (se resta al total)
     de la factura.
     """
     if subtotal == None:
         subtotal = self.calcular_subtotal()
     if tot_dto == None: 
         tot_dto = self.calcular_total_descuento(subtotal)
     if cargo == None:
         cargo = self.cargo
     if abonos == None:
         abonos = sum([pa.importe for pa in self.pagosDeAbono])
     total_irpf = utils.ffloat(subtotal + tot_dto + self.cargo + abonos) * self.irpf
     return total_irpf
Exemplo n.º 4
0
 def calcular_total_iva(self, subtotal=None, tot_dto=None,
                        cargo=None, abonos=None):
     """
     Calcula el importe total de IVA de la factura.
     """
     if subtotal == None:
         subtotal = self.calcular_subtotal()
     if tot_dto == None:
         tot_dto = self.calcular_total_descuento(subtotal)
     if cargo == None:
         cargo = self.cargo
     if abonos == None:
         abonos = sum([pa.importe for pa in self.pagosDeAbono])
     total_iva = utils.ffloat(
             subtotal + tot_dto + cargo + abonos) * self.iva
     return total_iva
Exemplo n.º 5
0
 def calcular_total_irpf(self, subtotal = None, tot_dto = None, cargo = None, abonos = None):
     """
     Calcula el importe total de retención de IRPF (se resta al total)
     de la factura. Se devuelve en positivo (aunque en realidad sea una 
     cantidad negativa a sumar al total).
     """
     if self.irpf != 0:
         if subtotal == None:
             subtotal = self.calcular_subtotal()
         if tot_dto == None: 
             tot_dto = self.calcular_total_descuento(subtotal)
         if cargo == None:
             cargo = self.cargo
         if abonos == None:
             abonos = sum([pa.importe for pa in self.pagosDeAbono])
         total_irpf = utils.ffloat(subtotal + tot_dto + self.cargo + abonos) * self.irpf
     else:
         total_irpf = 0.0
     return total_irpf
Exemplo n.º 6
0
 def _calcular_total_iva(self, subtotal=None, tot_dto=None,
                        cargo=None, abonos=None):
     """
     Calcula el importe total de IVA de la factura.
     """
     if subtotal == None:
         #subtotal = self.calcular_subtotal()
         subtotal = float(self.calcular_base_imponible())
     if tot_dto == None:
         tot_dto = float(self.calcular_total_descuento(subtotal))
         # Porque viene como FixedPoint y todas las operaciones en total_iva
         # se "castean" a FixedPoint, redondeando mal con, por ejemplo:
         # 18562.5 * 0.21
     if cargo == None:
         cargo = float(self.cargo) # Es Decimal y no puede operar con floats
     if abonos == None:
         abonos = sum([pa.importe for pa in self.pagosDeAbono])
     total_iva = utils.ffloat((
             subtotal + tot_dto + cargo + abonos) * self.iva)
     return total_iva