Gustavosdo/summum

View on GitHub
estagio/fixtures/py/insert_3_ContasPagar.py

Summary

Maintainability
F
5 days
Test Coverage
#-*- coding: UTF-8 -*-
# from fixtures.py.insert_3_ContasPagar import *
from django.utils.timezone import utc

import random, decimal
from datetime import timedelta, datetime

from pessoal.models import Fornecedor
from parametros_financeiros.models import FormaPagamento, GrupoEncargo
from contas_pagar.models import ContasPagar, Pagamento
from caixa.models import Caixa, MovimentosCaixa
from utilitarios.funcoes_data import dia_util


class ProcessoGeraContasPagar(object):

    def gera_contas_pagar(self):
        print('Etapa 3 - Início do procedimento de inserção de Contas a Pagar.')

        lista_fornecedores = Fornecedor.objects.filter(status=1)
        lista_formas_pagamento = FormaPagamento.objects.filter(status=1)
        lista_grupos_encargo = GrupoEncargo.objects.filter(status=1)
        caixa_aberto = Caixa.objects.filter(status=1).values()[0]

        if caixa_aberto["status"]:
            caixa_data_abertura = caixa_aberto["data_abertura"]
            data_atual = datetime.utcnow().replace(microsecond=0).replace(tzinfo=utc)

            quant_dias = caixa_data_abertura.date() - data_atual.date()
            
            data = caixa_data_abertura
            while not data >= data_atual:
                
                data = data + timedelta(days=random.randint(0,10))
                data = dia_util(data)

                # Quebra iteração caso data de geração do registro seja maior que data atual
                if data > data_atual:
                    break
                
                for i in range(random.randint(0,10)):
                    fornecedor = random.choice(lista_fornecedores)
                    forma_pagamento = random.choice(lista_formas_pagamento)
                    grupo_encargo = random.choice(lista_grupos_encargo)
                    valor_total = decimal.Decimal(random.random() * 1000).quantize(decimal.Decimal('.01'))
                    
                    conta = ContasPagar(data=data, 
                                        valor_total=valor_total, 
                                        descricao=u'Criado à partir de procedimento de geração automática de registros.',
                                        compras=None, 
                                        fornecedores=fornecedor, 
                                        forma_pagamento=forma_pagamento, 
                                        grupo_encargo=grupo_encargo, 
                                        status=False
                                        )
                    conta.save()



        # Atualiza as datas de pagamentos e movimentos de caixa
        lista_pagamentos = Pagamento.objects.filter(parcelas_contas_pagar__contas_pagar__descricao__contains='Criado à partir de procedimento de geração automática de registros.', 
                                                    parcelas_contas_pagar__contas_pagar__forma_pagamento__carencia=0,
                                                    parcelas_contas_pagar__num_parcelas=1
                                                    ).values_list('pk', 'data', 'parcelas_contas_pagar__contas_pagar__data')
        for l in lista_pagamentos:
            if l[1].date() != l[2]:
                r = Pagamento.objects.get(pk=l[0])
                r.data = l[2]
                r.save()
                m = MovimentosCaixa.objects.get(pagamento__pk=l[0])
                m.data = l[2]
                m.save()