Advertisement
eltonplima

Untitled

Dec 6th, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.57 KB | None | 0 0
  1. class ProtocoloContabilWizard(SessionWizardView):
  2.     file_storage = FileSystemStorage(location=settings.TEMP_ROOT)
  3.  
  4.     def get_template_names(self):
  5.         return [TEMPLATES[self.steps.current]]
  6.  
  7.     def done(self, form_list, **kwargs):
  8.         """ Etapa final do wizard.
  9.  
  10.        Aqui os dados são efetivados no banco, e ao final o usuário é redirecionado para a tela de edição do protocolo
  11.        recem criado.
  12.        """
  13.         form_step_0 = form_list[0]
  14.  
  15.         if form_step_0.instance.pk is None:
  16.             instance = form_step_0.save()
  17.         else:
  18.             instance = form_step_0.instance
  19.  
  20.         form_step_1 = form_list[1]
  21.  
  22.         # Criação/busca da categoria do download.
  23.         try:
  24.             categoria_download = DownloadCategoria.objects.get(nome="Relatório contábeis")
  25.         except DownloadCategoria.DoesNotExist:
  26.             categoria_download = DownloadCategoria.objects.create(nome="Relatório contábeis")
  27.  
  28.         codigo_protocolo = instance.get_protocolo_codigo()
  29.  
  30.         # Criação/busca do download pack.
  31.         try:
  32.             download = Download.objects.get(nome=codigo_protocolo,
  33.                                             categoria=categoria_download)
  34.         except Download.DoesNotExist:
  35.             download = Download.objects.create(nome=codigo_protocolo,
  36.                                                categoria=categoria_download)
  37.  
  38.         # Vinculação dos arquivos ao protocolo.
  39.         for tipo, arquivo in form_step_1.files.items():
  40.             pk = int(tipo.rsplit('_',1)[-1])
  41.  
  42.             categoria = DownloadArquivoCategoria.objects.get(pk=pk)
  43.  
  44.             pca = ProtocoloContabilArquivo(protocolo=instance,
  45.                                            arquivo=arquivo,
  46.                                            categoria=categoria,
  47.                                            download=download)
  48.             pca.save()
  49.             print(dir(arquivo))
  50.             print(arquivo.file)
  51.             if os.path.exists(unicode(arquivo.file)):
  52.                 os.remove(unicode(arquivo.file))
  53.  
  54.         url = reverse('admin:protocolo_protocolocontabil_change', args=(form_list[0].instance.id,))
  55.         print(url)
  56.         return HttpResponseRedirect(url)
  57.  
  58.     def get_form(self, step=None, data=None, files=None):
  59.         print('get_form')
  60.         if step is None:
  61.             step = self.steps.current
  62.  
  63.         # Inicializa o form de upload.
  64.         if step == '1' and not files:
  65.             data = {}
  66.             cleaned_data = self.get_cleaned_data_for_step('0')
  67.             data['ano'] = cleaned_data['ano']
  68.             data['mes'] = cleaned_data['mes']
  69.             data['cliente'] = cleaned_data['cliente']
  70.  
  71.         form = super(ProtocoloContabilWizard, self).get_form(step, data, files)
  72.  
  73.         return form
  74.  
  75.     def get_context_data(self, form, **kwargs):
  76.         print('get_context_data')
  77.         context = super(ProtocoloContabilWizard, self).get_context_data(form=form, **kwargs)
  78.         context.update({'title': 'Assistente de envio de informações contábeis.'})
  79.  
  80.         # Sempre disponibiliza os dados da etapa anterior na etapa atual.
  81.         if self.steps.prev is not None:
  82.             context.update(self.get_cleaned_data_for_step(self.steps.prev))
  83.  
  84.         return context
  85.  
  86.     def render_next_step(self, form, **kwargs):
  87.         print('render_next_step')
  88.         if self.steps.current == '0':
  89.             cleaned_data = form.cleaned_data
  90.             ano = cleaned_data['ano']
  91.             mes = cleaned_data['mes']
  92.             cliente = cleaned_data['cliente']
  93.             try:
  94.                 # Faz a checagem para saber se o protocolo do cliente já existe.
  95.                 # Caso exista redireciona para o mesmo.
  96.                 p = ProtocoloContabil.objects.get(ano=ano,
  97.                                                   mes=mes,
  98.                                                   cliente=cliente)
  99.                 url = reverse('admin:protocolo_protocolocontabil_change', args=(p.id,))
  100.                 print('render_next_step: %s' % url)
  101.                 messages.add_message(self.request, messages.INFO, 'Este protocolo já existe. Você deve atualizá-lo ao invés de adicionar um novo.')
  102.  
  103.                 return HttpResponseRedirect(url)
  104.             except ProtocoloContabil.DoesNotExist:
  105.                 pass
  106.  
  107.         return super(ProtocoloContabilWizard, self).render_next_step(form, **kwargs)
  108.  
  109.  
  110. @login_required
  111. def protocolo_contabil_wizard(request):
  112.     protocolo_contabil_wizard_view = ProtocoloContabilWizard.as_view(FORMS)
  113.     return protocolo_contabil_wizard_view(request)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement