Gustavosdo/summum

View on GitHub
estagio/contas_pagar/models/pagamento.py

Summary

Maintainability
D
2 days
Test Coverage
#-*- coding: UTF-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
from django.core.urlresolvers import reverse


@python_2_unicode_compatible
class Pagamento(models.Model):
    u""" 
    Classe Pagamento. 
    Criada para registrar todas as saídas financeiras do estabelecimento.
    Os registros de pagamentos entrarão automaticamente na tabela. 
    Contudo, também será possível cadastrar pagamentos manualmente, pensando em casos em que valores são pagos, 
    eventualmente, sem a compra ter sido cadastrada.

    Criada em 16/06/2014. 
    """
    
    data = models.DateTimeField(db_index=True, verbose_name=_(u"Data do pagamento"))
    valor = models.DecimalField(max_digits=20, decimal_places=2, verbose_name=_(u"Valor"))
    juros = models.DecimalField(max_digits=20, decimal_places=2, blank=True, null=True, verbose_name=_(u"Juros"))
    multa = models.DecimalField(max_digits=20, decimal_places=2, blank=True, null=True, verbose_name=_(u"Multa"))
    desconto = models.DecimalField(max_digits=20, decimal_places=2, blank=True, null=True, verbose_name=_(u"Desconto"))
    parcelas_contas_pagar = models.ForeignKey('ParcelasContasPagar', on_delete=models.PROTECT, verbose_name=_(u"Pagamento de parcela"))
    observacao = models.TextField(blank=True, verbose_name=_(u"Observações"))
    
    def __str__(self):
        return u'%s' % (self.id)


    def conta_associada(self):
        if self.parcelas_contas_pagar:
            url = reverse("admin:contas_pagar_contaspagar_change", args=[self.parcelas_contas_pagar.contas_pagar])
            return u"<a href='%s'>%s</a>" % (url, self.parcelas_contas_pagar.contas_pagar)
        return '-'
    conta_associada.allow_tags = True
    conta_associada.short_description = _(u"Conta a pagar")
    conta_associada.admin_order_field = 'parcelas_contas_pagar__contas_pagar'
    

    def save(self, *args, **kwargs):
        from contas_pagar.models import ContasPagar, ParcelasContasPagar

        if self.pk is None:
            super(Pagamento, self).save(*args, **kwargs)
            parcela_pagamento = Pagamento.objects.filter(pk=self.pk).values_list('parcelas_contas_pagar')[0]

            parcela = ParcelasContasPagar.objects.get(pk=parcela_pagamento[0])
            if parcela.valor_pago() >= parcela.valor_total():
                parcela.status = True
                parcela.save()

                #Atualiza o status da conta à pagar indicando se a compra está fechada, ou tem parcelas em aberto.
                conta_pagar = ContasPagar.objects.get(pk=parcela.contas_pagar.pk)
                conta_aberta = ParcelasContasPagar.objects.filter(contas_pagar=conta_pagar.pk, status=0).exists()
                if conta_aberta:
                    conta_pagar.status = False
                    conta_pagar.save()
                else:
                    conta_pagar.status = True
                    conta_pagar.save()
        else:
            super(Pagamento, self).save(*args, **kwargs)