def form_valid(self, form): """ Metodo chamado apos o form ser corretamente validado. O form ja se valida automaticamente de acordo com a declaracao de cada um. ex: DateField exige uma data valida.. o mesmo para os outros... """ #acumuladores gerais db = {} db_espec = {} db_tipo = {} db_servico = {} db_pacote = {} #busca todos os servicos SIMPLES if form.cleaned_data['servicos']: qs_pss = PrestacaoServicoServico.objects.filter(pagamento__isnull=False) qs_pss = qs_pss.filter(servico__in=form.cleaned_data['servicos']) qs_pss = self.filtra_de(form.cleaned_data['de'], qs_pss) qs_pss = self.filtra_ate(form.cleaned_data['ate'], qs_pss) for pss in qs_pss: valor = pss.servico.valor comissao = pss.servico.comissao custo = pss.servico.custo_material + valor * (comissao / 100) self.update(db_tipo, PrestacaoServico.SERVICO, custo, valor) self.update(db_servico, pss.servico, custo, valor) self.update(db_espec, pss.servico.especialidade, custo, valor) self.update(db, 'Geral', custo, valor) #busca todos os servicos de PACOTE if form.cleaned_data['pacote_servicos']: qs_psp = PrestacaoServicoPacote.objects.filter(pacoteServico_cliente__pagamento__isnull=False) qs_psp = qs_psp.filter(pacoteServico_cliente__pacote_servico__in=form.cleaned_data['pacote_servicos']) qs_psp = self.filtra_de(form.cleaned_data['de'], qs_psp) qs_psp = self.filtra_ate(form.cleaned_data['ate'], qs_psp) for psp in qs_psp: valor = psp.servico_pacoteservico.valor_rateado comissao = psp.servico_pacoteservico.servico.comissao custo = psp.servico_pacoteservico.servico.custo_material + valor * (comissao / 100) self.update(db_tipo, PrestacaoServico.PACOTE, custo, valor) self.update(db_pacote, psp.servico_pacoteservico.servico, custo, valor) self.update(db_espec, psp.servico_pacoteservico.servico.especialidade, custo, valor) self.update(db, 'Geral', custo, valor) if len(db)>0: self.atualiza_share(db_tipo, db['Geral']) self.atualiza_share(db_espec, db['Geral']) self.atualiza_share(db_servico, db['Geral']) self.atualiza_share(db_pacote, db['Geral']) self.atualiza_share(db, db['Geral']) #coloca todos os dbs em lista db_list = (("Visão Geral",db), ("Visão por Especialidade",db_espec), ("Visão por Tipo", db_tipo), ("Visão por Serviços",db_servico), ("Visão por Pacotes",db_pacote)) #chama o template resultado enviando o form, a lista_final, # a data atual e a informacao se imprime ou nao o form return render_to_response('cadastro/cbv/relatoriototalacumuladoresultado.html', { 'form': form, 'now': timezone.datetime.now(), 'db_list': db_list, 'object_count': safe_list_get(db, 'geral', Item()).qtd_acum, 'imprime_filtro': form.cleaned_data['imprime_filtro'] }, context_instance=RequestContext(self.request))
def update(self, dict, key, custo, valor): dict[key] = safe_list_get(dict, key, Item()) dict[key].qtd_acum += 1 dict[key].custo_acum += custo dict[key].valor_acum += valor dict[key].diferenca_acum += (valor - custo)