Cordial saludo,
¿’Puedo copiar documentos de un team a otro cuando se cumple una condición?
Ejemplo: tengo una politica en team de gestión documental pero quiero que se copie al team de Talento Humano cuando esta se apruebe.
Cordial saludo,
¿’Puedo copiar documentos de un team a otro cuando se cumple una condición?
Ejemplo: tengo una politica en team de gestión documental pero quiero que se copie al team de Talento Humano cuando esta se apruebe.
Buenos días Rodrigo,
Dado que los teams normalmente son utilizados para separar completamente un entorno de otro, no es recomendable realizar la copia de un documento entre teams.
Sin embargo, en caso de que aún así se requiera, para lograrlo debiera ser creada una operación personalizada ya que se estaría “copiando” un documento entre equipos. Dicha operación debiera recibir la serie y el tipo documental de destino, además de un mapeo de metadatos para poder crear el nuevo documento con los mismos datos. Quedaría algo como lo siguiente:
import json
from operations.classes.document_operation import DocumentOperation
from operations.enums import ProcessOperationParameterType
from doctypes.models import DocumentType
from series.models import Serieclass CopyDocumentToSerieOperation(DocumentOperation):
version = “1.0”
name = “Copiar documento a otra serie y tipo documental”
description = “”“Esta operación crea una copia del documento actual en una serie y tipo documental de destino.”“”
deprecated = False
configuration_parameters = {
‘copy_to_serie’: {
‘label’: ‘Serie de destino’,
‘help_text’: ‘Serie o espacio donde copiar el documento’,
‘type’: ProcessOperationParameterType.TEXT.value[0]
},
‘copy_to_doctype’: {
‘label’: ‘Tipo documental de destino’,
‘help_text’: ‘Tipo documental para el documento en destino’,
‘type’: ProcessOperationParameterType.TEXT.value[0]
},
‘map_metadata’: {
‘label’: ‘Mapeo de campos’,
‘help_text’: ‘Diccionario que mapea los metadatos de origen con los de destino.’,
‘type’: ProcessOperationParameterType.TEXTAREA.value[0],
‘default_value’: ‘{}’,
},
}def get_metadata_dict(self): document = self.document map_metadata_text = self.parameters.get('map_metadata', '{}') try: map_metadata = json.loads(map_metadata_text) except json.JSONDecodeError: map_metadata = {} new_metadata_map = {} for metadata_origen, metadata_destino in map_metadata.items(): new_metadata_map\[metadata_destino\] = document.gmv(metadata_origen) return new_metadata_map def execute(self, \*args, \*\*kwargs): document = self.document serie_id = self.parameters.get('copy_to_serie', '') doctype_id = self.parameters.get('copy_to_doctype', '') if serie_id: serie = Serie.objects.filter(name=serie_id).first() if not serie: serie = Serie.objects.filter(uuid=serie_id).first() if not serie: serie = document.serie else: serie = document.serie if doctype_id: doctype = DocumentType.objects.filter(name=doctype_id).first() if not doctype: doctype = DocumentType.objects.filter(uuid=doctype_id).first() if not doctype: doctype = document.doctype else: doctype = document.doctype try: metadata_dict = self.get_metadata_dict() except Exception: return {'msg_type': 'error', 'msg': 'Hubo un error al armar el diccionario de metadatos.'} try: serie.load_file( document.file.path, document.filename, doctype=doctype, metadata=metadata_dict, ) except Exception: return {'msg_type': 'error', 'msg': 'Hubo un error al crear el documento nuevo.'} return {'msg_type': 'success', 'msg': 'Operacion ejecutada exitosamente'}VERSION = CopyDocumentToSerieOperation.version
NAME = CopyDocumentToSerieOperation.name
DESCRIPTION = CopyDocumentToSerieOperation.description
ORDER = 4000
CATEGORY = “”
POSTLOAD = False
POSTCHARACT = False
POSTCLASSIF = False
POSTEXTRACTION = False
CONFIGURATION_PARAMETERS = CopyDocumentToSerieOperation.configuration_parametersdef run(uuid=None, **params):
return CopyDocumentToSerieOperation(uuid, **params).run()
Esta operación luego debiera ser configurada para ejecutarse en el evento requerido. ¿Cómo se representa actualmente la aprobación de la política?
En caso que la aprobación se represente como un cambio de estado, debiera ejecutarse en la transición de dicho cambio de estado. Si se representa a través del cambio de valor de un metadato, pues podría configurarse en el tipo de metadato.
Espero la respuesta sea útil,
Saludos,
Yair