Repository: interlegis/sapl

Issue:
Migração de Documentos: separar documentos por ano
Nas models de MateriaLegislativa, DocumentoAcessorio e NormaJurídica, seria bom alterar a estrutura de pastas para organizar os documentos migrados de acordo com o ano que foi criado.

Como exemplo, a mudança passaria de:
`media/sapl/{model_name}/{id}/{id}_nome_documento.pdf`
Para:
`media/sapl/{model_name}/{ano}/{id}/{id}_nome_documento.pdf`


Discussion:

Resolving patch:
diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py
--- a/sapl/legacy/migracao_documentos.py
+++ b/sapl/legacy/migracao_documentos.py
@@ -55,40 +55,40 @@
     Parlamentar: [(
         'fotografia',
         'parlamentar/fotos/{}_foto_parlamentar',
-        'parlamentar/{0}/{0}_foto_parlamentar{1}')],
+        'public/parlamentar/{0}/{0}_foto_parlamentar{1}')],
     MateriaLegislativa: [(
         'texto_original',
         'materia/{}_texto_integral',
-        'materialegislativa/{0}/{0}_texto_integral{1}')],
+        'public/materialegislativa/{2}/{0}/{0}_texto_integral{1}')],
     DocumentoAcessorio: [(
         'arquivo',
         'materia/{}',
-        'documentoacessorio/{0}/{0}{1}')],
+        'public/documentoacessorio/{2}/{0}/{0}{1}')],
     NormaJuridica: [(
         'texto_integral',
         'norma_juridica/{}_texto_integral',
-        'normajuridica/{0}/{0}_texto_integral{1}')],
+        'public/normajuridica/{2}/{0}/{0}_texto_integral{1}')],
     SessaoPlenaria: [
         ('upload_ata',
          'ata_sessao/{}_ata_sessao',
-         'sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'),
+         'public/sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'),
         ('upload_anexo',
          'anexo_sessao/{}_texto_anexado',
-         'sessaoplenaria/{0}/anexo/{0}_texto_anexado{1}')
+         'public/sessaoplenaria/{0}/anexo/{0}_texto_anexado{1}')
     ],
     Proposicao: [(
         'texto_original',
         'proposicao/{}',
-        'proposicao/{0}/{0}{1}')],
+        'private/proposicao/{0}/{0}{1}')],
     DocumentoAdministrativo: [(
         'texto_integral',
         'administrativo/{}_texto_integral',
-        'documentoadministrativo/{0}/{0}_texto_integral{1}')       
+        'private/documentoadministrativo/{0}/{0}_texto_integral{1}')
     ],
     DocumentoAcessorioAdministrativo: [(
-    	 'arquivo',
+        'arquivo',
         'administrativo/{}',
-        'documentoacessorioadministrativo/{0}/{0}_acessorio_administrativo{1}')
+        'private/documentoacessorioadministrativo/{0}/{0}_acessorio_administrativo{1}')
     ],
 }
 
@@ -169,15 +169,22 @@ def migrar_docs_por_ids(tipo):
         for arq in os.listdir(dir_origem):
             match = pat.match(arq)
             if match:
-                origem = os.path.join(dir_origem, match.group(0))
-                id = match.group(1)
-                extensao = get_extensao(origem)
-                destino = base_destino.format(id, extensao)
-                mover_documento(origem, destino)
-
                 # associa documento ao objeto
                 try:
+                    origem = os.path.join(dir_origem, match.group(0))
+                    id = match.group(1)
                     obj = tipo.objects.get(pk=id)
+
+                    extensao = get_extensao(origem)
+                    if hasattr(obj, "ano"):
+                        destino = base_destino.format(id, extensao, obj.ano)
+                    elif isinstance(obj, DocumentoAcessorio):
+                        destino = base_destino.format(
+                            id, extensao, obj.materia.ano)
+                    else:
+                        destino = base_destino.format(id, extensao)
+                    mover_documento(origem, destino)
+
                     setattr(obj, campo, destino)
                     obj.save()
                 except tipo.DoesNotExist:


Test patch: