def test_tramitacao_lote_documentos_views(admin_client): config = mommy.make(AppConfig, tramitacao_documento=True) tipo_documento = mommy.make(TipoDocumentoAdministrativo, descricao="Tipo_Teste") documento_principal = mommy.make(DocumentoAdministrativo, numero=20, ano=2018, data="2018-01-04", tipo=tipo_documento) documento_anexado = mommy.make(DocumentoAdministrativo, numero=21, ano=2019, data="2019-05-04", tipo=tipo_documento) documento_anexado_anexado = mommy.make(DocumentoAdministrativo, numero=22, ano=2020, data="2020-01-05", tipo=tipo_documento) documento_sem_anexados = mommy.make(DocumentoAdministrativo, numero=23, ano=2020, data="2021-01-05", tipo=tipo_documento) mommy.make(Anexado, documento_principal=documento_principal, documento_anexado=documento_anexado, data_anexacao="2019-05-11") mommy.make(Anexado, documento_principal=documento_anexado, documento_anexado=documento_anexado_anexado, data_anexacao="2020-11-05") unidade_tramitacao_local_1 = make_unidade_tramitacao(descricao="Teste 1") unidade_tramitacao_destino_1 = make_unidade_tramitacao(descricao="Teste 2") unidade_tramitacao_destino_2 = make_unidade_tramitacao(descricao="Teste 3") unidade_tramitacao_destino_3 = make_unidade_tramitacao(descricao="Teste 4") status = mommy.make(StatusTramitacaoAdministrativo, indicador='R') url = reverse('sapl.protocoloadm:primeira_tramitacao_em_lote_docadm') url = url + '?' + urlencode({ 'tipo': tipo_documento.id, 'data_0': '', 'data_1': '' }) response = admin_client.post(url, {'salvar': 'salvar'}, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert len(msgs) == 1 assert msgs[0] == 'Escolha algum Documento para ser tramitado.' documentos = [documento_sem_anexados.id, documento_anexado_anexado.id] response = admin_client.post(url, { 'documentos': documentos, 'salvar': 'salvar' }, follow=True) msgs = [m.message for m in response.context['messages']] assert 'Data Tramitação: Este campo é obrigatório.' in msgs assert 'Unidade Local: Este campo é obrigatório.' in msgs assert 'Status: Este campo é obrigatório.' in msgs assert 'Unidade Destino: Este campo é obrigatório.' in msgs assert 'Texto da Ação: Este campo é obrigatório.' in msgs # Primeira tramitação em lote response = admin_client.post( url, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_local_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 assert TramitacaoAdministrativo.objects.all().count() == 2 assert documento_sem_anexados.tramitacaoadministrativo_set.all().count( ) == 1 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 1 # Segunda tramitação em lote url_lote = reverse('sapl.protocoloadm:tramitacao_em_lote_docadm') url_lote = url_lote + '?' + urlencode({ 'tipo': tipo_documento.id, 'tramitacaoadministrativo__unidade_tramitacao_destino': unidade_tramitacao_destino_1.id, 'tramitacaoadministrativo__status': status.id, 'data_0': '', 'data_1': '' }) response = admin_client.post(url_lote, {'salvar': 'salvar'}, follow=True) assert response.status_code == 200 assert response.context_data['object_list'].count() == 2 msgs = [m.message for m in response.context['messages']] assert len(msgs) == 1 assert msgs[0] == 'Escolha algum Documento para ser tramitado.' response = admin_client.post(url_lote, { 'documentos': documentos, 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert 'Data Tramitação: Este campo é obrigatório.' in msgs assert 'Unidade Local: Este campo é obrigatório.' in msgs assert 'Status: Este campo é obrigatório.' in msgs assert 'Unidade Destino: Este campo é obrigatório.' in msgs assert 'Texto da Ação: Este campo é obrigatório.' in msgs response = admin_client.post( url_lote, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_destino_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert 'Tramitação completa.' in msgs assert TramitacaoAdministrativo.objects.all().count() == 4 assert documento_sem_anexados.tramitacaoadministrativo_set.all().count( ) == 2 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 2 # Tramitar documentos com anexados # O documento anexado ao anexado não deve tramitar junto porque já está com tramitação diferente documentos = [documento_principal.id] response = admin_client.post( url, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_local_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 assert TramitacaoAdministrativo.objects.all().count() == 6 assert documento_principal.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 1 # Segunda tramitação com documentos anexados response = admin_client.post( url_lote, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_destino_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert 'Tramitação completa.' in msgs assert TramitacaoAdministrativo.objects.all().count() == 8 assert documento_principal.tramitacaoadministrativo_set.all().count() == 2 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 2 # Terceira tramitação em lote # Agora, o documento anexado ao anexado deve tramitar junto com o documento principal, # pois suas tramitações convergiram response = admin_client.post( url_lote, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_destino_2.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_3.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert 'Tramitação completa.' in msgs assert TramitacaoAdministrativo.objects.all().count() == 11 assert documento_principal.tramitacaoadministrativo_set.all().count() == 3 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 3 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 3 # Agora testando para caso não seja desejado tramitar os documentos anexados # junto com os documentos principais config.tramitacao_documento = False config.save() TramitacaoAdministrativo.objects.all().delete() assert TramitacaoAdministrativo.objects.all().count() == 0 # Primeira tramitação em lote # Tramitar documentos com anexados # O documento anexado não deve tramitar junto com o prinicpal documentos = [documento_principal.id] response = admin_client.post( url, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_local_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 assert TramitacaoAdministrativo.objects.all().count() == 1 assert documento_principal.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 0 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 0 # Tramitar o doc anexado ao principal para testar a segunda tramitação em lote documentos = [documento_anexado.id] response = admin_client.post( url, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_local_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 assert TramitacaoAdministrativo.objects.all().count() == 2 assert documento_principal.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 0 tramitacao_principal = documento_principal.tramitacaoadministrativo_set.last( ) tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() assert compara_tramitacoes_doc(tramitacao_anexada, tramitacao_principal) documentos = [documento_principal.id] # Segunda tramitação, o documento anexado não deve tramitar com o principal response = admin_client.post( url_lote, { 'documentos': documentos, 'data_tramitacao': date(2019, 5, 15), 'unidade_tramitacao_local': unidade_tramitacao_destino_1.id, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.id, 'status': status.id, 'urgente': False, 'texto': 'aaaa', 'salvar': 'salvar' }, follow=True) assert response.status_code == 200 msgs = [m.message for m in response.context['messages']] assert 'Tramitação completa.' in msgs assert TramitacaoAdministrativo.objects.all().count() == 3 assert documento_principal.tramitacaoadministrativo_set.all().count() == 2 assert documento_anexado.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado_anexado.tramitacaoadministrativo_set.all().count( ) == 0
def test_tramitacoes_documentos_anexados(admin_client): config = mommy.make(AppConfig, tramitacao_documento=True) tipo_documento = mommy.make(TipoDocumentoAdministrativo, descricao="Tipo_Teste") documento_principal = mommy.make(DocumentoAdministrativo, numero=20, ano=2018, data="2018-01-04", tipo=tipo_documento) documento_anexado = mommy.make(DocumentoAdministrativo, numero=21, ano=2019, data="2019-05-04", tipo=tipo_documento) documento_anexado_anexado = mommy.make(DocumentoAdministrativo, numero=22, ano=2020, data="2020-01-05", tipo=tipo_documento) mommy.make(Anexado, documento_principal=documento_principal, documento_anexado=documento_anexado, data_anexacao="2019-05-11") mommy.make(Anexado, documento_principal=documento_anexado, documento_anexado=documento_anexado_anexado, data_anexacao="2020-11-05") unidade_tramitacao_local_1 = make_unidade_tramitacao(descricao="Teste 1") unidade_tramitacao_destino_1 = make_unidade_tramitacao(descricao="Teste 2") unidade_tramitacao_destino_2 = make_unidade_tramitacao(descricao="Teste 3") status = mommy.make(StatusTramitacaoAdministrativo, indicador='R') # Teste criação de Tramitacao form = TramitacaoAdmForm(data={}) form.data = { 'data_tramitacao': date(2019, 5, 6), 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, 'status': status.pk, 'urgente': False, 'texto': "Texto de teste" } form.instance.documento_id = documento_principal.pk assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) # Verifica se foram criadas as tramitações para os documentos anexados e anexados aos anexados assert documento_principal.tramitacaoadministrativo_set.last( ) == tramitacao_principal assert tramitacao_principal.documento.tramitacao == ( tramitacao_principal.status.indicador != "F") assert compara_tramitacoes_doc(tramitacao_principal, tramitacao_anexada) assert DocumentoAdministrativo.objects.get(id=documento_anexado.pk).tramitacao \ == (tramitacao_anexada.status.indicador != "F") assert compara_tramitacoes_doc(tramitacao_anexada_anexada, tramitacao_principal) assert DocumentoAdministrativo.objects.get(id=documento_anexado_anexado.pk).tramitacao \ == (tramitacao_anexada_anexada.status.indicador != "F") # Teste Edição de Tramitacao form = TramitacaoAdmEditForm(data={}) # Alterando unidade_tramitacao_destino form.data = { 'data_tramitacao': tramitacao_principal.data_tramitacao, 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'status': tramitacao_principal.status.pk, 'urgente': tramitacao_principal.urgente, 'texto': tramitacao_principal.texto } form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 # Teste Remoção de Tramitacao url = reverse('sapl.protocoloadm:tramitacaoadministrativo_delete', kwargs={'pk': tramitacao_principal.pk}) response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert TramitacaoAdministrativo.objects.filter( id=tramitacao_principal.pk).count() == 0 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada.pk).count() == 0 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada_anexada.pk).count() == 0 # Testes para quando as tramitações das anexadas divergem form = TramitacaoAdmForm(data={}) form.data = { 'data_tramitacao': date(2019, 5, 6), 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, 'status': status.pk, 'urgente': False, 'texto': "Texto de teste" } form.instance.documento_id = documento_principal.pk assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) form = TramitacaoAdmEditForm(data={}) # Alterando unidade_tramitacao_destino form.data = { 'data_tramitacao': tramitacao_anexada.data_tramitacao, 'unidade_tramitacao_local': tramitacao_anexada.unidade_tramitacao_local.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'status': tramitacao_anexada.status.pk, 'urgente': tramitacao_anexada.urgente, 'texto': tramitacao_anexada.texto } form.instance = tramitacao_anexada assert form.is_valid() tramitacao_anexada = form.save() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_1 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 # Editando a tramitação principal, as tramitações anexadas não devem ser editadas form = TramitacaoAdmEditForm(data={}) # Alterando o texto form.data = { 'data_tramitacao': tramitacao_principal.data_tramitacao, 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, 'unidade_tramitacao_destino': tramitacao_principal.unidade_tramitacao_destino.pk, 'status': tramitacao_principal.status.pk, 'urgente': tramitacao_principal.urgente, 'texto': "Testando a alteração" } form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert tramitacao_principal.texto == "Testando a alteração" assert not tramitacao_anexada.texto == "Testando a alteração" assert not tramitacao_anexada_anexada.texto == "Testando a alteração" # Removendo a tramitação pricipal, as tramitações anexadas não devem ser removidas, pois divergiram url = reverse('sapl.protocoloadm:tramitacaoadministrativo_delete', kwargs={'pk': tramitacao_principal.pk}) response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert TramitacaoAdministrativo.objects.filter( id=tramitacao_principal.pk).count() == 0 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada.pk).count() == 1 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada_anexada.pk).count() == 1 # Removendo a tramitação anexada, a tramitação anexada à anexada deve ser removida url = reverse('sapl.protocoloadm:tramitacaoadministrativo_delete', kwargs={'pk': tramitacao_anexada.pk}) response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada.pk).count() == 0 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada_anexada.pk).count() == 0 # Agora testando para caso não seja desejado tramitar os documentos anexados # junto com os documentos principais config.tramitacao_documento = False config.save() # Teste criação de Tramitacao form = TramitacaoAdmForm(data={}) form.data = { 'data_tramitacao': date(2019, 5, 6), 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, 'status': status.pk, 'urgente': False, 'texto': "Texto de teste" } form.instance.documento_id = documento_principal.pk assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) # Verifica se não foram criadas as tramitações para os documentos anexados e anexados aos anexados assert documento_principal.tramitacaoadministrativo_set.last( ) == tramitacao_principal assert tramitacao_principal.documento.tramitacao == ( tramitacao_principal.status.indicador != "F") assert not tramitacao_anexada assert not tramitacao_anexada_anexada # Cria uma tramitação igual na tramitação anexada para testar a edição form = TramitacaoAdmForm(data={}) form.data = { 'data_tramitacao': date(2019, 5, 6), 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, 'status': status.pk, 'urgente': False, 'texto': "Texto de teste" } form.instance.documento_id = documento_anexado.pk assert form.is_valid() tramitacao_anexada = form.save() tramitacao_principal = documento_principal.tramitacaoadministrativo_set.last( ) tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert documento_principal.tramitacaoadministrativo_set.all().count() == 1 assert documento_anexado.tramitacaoadministrativo_set.last( ) == tramitacao_anexada assert not tramitacao_anexada_anexada form = TramitacaoAdmEditForm(data={}) # Alterando unidade_tramitacao_destino da matéria principal, # as anexadas não devem ser alteradas form.data = { 'data_tramitacao': tramitacao_principal.data_tramitacao, 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'status': tramitacao_principal.status.pk, 'urgente': tramitacao_principal.urgente, 'texto': tramitacao_principal.texto } form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() tramitacao_anexada = documento_anexado.tramitacaoadministrativo_set.last() tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_1 assert not tramitacao_anexada_anexada form = TramitacaoAdmEditForm(data={}) # Alterando a anexada da principal para testar a remoção de tramitação form.data = { 'data_tramitacao': tramitacao_principal.data_tramitacao, 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, 'status': tramitacao_principal.status.pk, 'urgente': tramitacao_principal.urgente, 'texto': tramitacao_principal.texto } form.instance = tramitacao_anexada assert form.is_valid() tramitacao_anexada = form.save() tramitacao_principal = documento_principal.tramitacaoadministrativo_set.last( ) tramitacao_anexada_anexada = documento_anexado_anexado.tramitacaoadministrativo_set.last( ) assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert not tramitacao_anexada_anexada assert compara_tramitacoes_doc(tramitacao_anexada, tramitacao_principal) # Removendo a tramitação principal, a tramitação anexada não deve ser removida url = reverse('sapl.protocoloadm:tramitacaoadministrativo_delete', kwargs={'pk': tramitacao_principal.pk}) response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert TramitacaoAdministrativo.objects.filter( id=tramitacao_principal.pk).count() == 0 assert TramitacaoAdministrativo.objects.filter( id=tramitacao_anexada.pk).count() == 1