def test_uses_the_same_reference_number_schema_as_regular_dossiers(self): dossier1 = create( Builder('private_dossier').within( self.folder).having(responsible=TEST_USER_ID)) dossier2 = create( Builder('private_dossier').within( self.folder).having(responsible=TEST_USER_ID)) self.assertEquals('Client1 test_user_1_ / 1', IReferenceNumber(dossier1).get_number()) self.assertEquals('Client1 test_user_1_ / 2', IReferenceNumber(dossier2).get_number())
def test_use_no_client_id_dotted_formatter(self): registry = getUtility(IRegistry) proxy = registry.forInterface(IReferenceNumberSettings) proxy.formatter = 'no_client_id_dotted' self.assertEquals('2.4.7 / 8.2', IReferenceNumber(self.subdossier).get_number())
def __call__(self, *args, **kwargs): result = super(SerializeDocumentToJson, self).__call__(*args, **kwargs) ref_num = IReferenceNumber(self.context) result[u'reference_number'] = ref_num.get_number() bumblebee_service = bumblebee.get_service_v3() result[u'thumbnail_url'] = bumblebee_service.get_representation_url( self.context, 'thumbnail') result[u'preview_url'] = bumblebee_service.get_representation_url( self.context, 'preview') result[u'pdf_url'] = bumblebee_service.get_representation_url( self.context, 'pdf') result[u'file_extension'] = self.context.get_file_extension() additional_metadata = { 'checked_out': self.context.checked_out_by(), 'is_locked': self.context.is_locked(), 'containing_dossier': self.context.containing_dossier_title(), 'containing_subdossier': self.context.containing_subdossier_title(), 'trashed': self.context.is_trashed, 'is_shadow_document': self.context.is_shadow_document(), 'current_version_id': self.context.get_current_version_id(missing_as_zero=True), } result.update(additional_metadata) return result
def test_returns_reference_number(self): self.login(self.regular_user) adapter = getMultiAdapter((self.document, self.request), IBumblebeeOverlay) self.assertEqual( IReferenceNumber(self.document).get_number(), adapter.get_reference_number())
def __call__(self, *args, **kwargs): result = super(SerializeDocumentToJson, self).__call__(*args, **kwargs) ref_num = IReferenceNumber(self.context) result[u'reference_number'] = ref_num.get_number() return result
def _prefix_with_reference_number(self, title): reference_adapter = IReferenceNumber(self) return u'{number}{sep} {title}'.format( number=reference_adapter.get_repository_number(), sep=reference_adapter.get_active_formatter( ).repository_title_seperator, title=title)
def test_plone_site_returns_client_id(self): registry = getUtility(IRegistry) proxy = registry.forInterface(IBaseClientID) proxy.client_id = u'FAKE CLIENT' self.assertEquals( u'FAKE CLIENT', IReferenceNumber(self.portal).get_local_number())
def test_dossier_returns_reference_prefix_of_the_context(self): dossier = create(Builder('dossier')) IReferenceNumberPrefix(self.portal).set_number(dossier, number=u'7') self.assertEquals( u'7', IReferenceNumber(dossier).get_local_number())
def test_returns_full_number_for_the_context(self): self.assertEquals( {'site': [u'Client1', ], 'repositoryroot': [''], 'repository': [u'2', u'4', u'7'], 'dossier': [u'8', u'2']}, IReferenceNumber(self.subdossier).get_parent_numbers())
def deliverable_documents_vocabulary(context): """All documents and mails in the current dossier are deliverable. """ finder = getAdapter(context, name='parent-dossier-finder') dossier = finder.find_dossier() if not dossier: raise RuntimeError('Could not find parent dossier.') catalog = getToolByName(dossier, 'portal_catalog') brains = catalog( portal_type=['opengever.document.document', 'ftw.mail.mail'], path='/'.join(dossier.getPhysicalPath())) # Create the vocabulary. terms = [] intids = getUtility(IIntIds) for brain in brains: doc = brain.getObject() key = str(intids.getId(doc)) label = '%s (%s, %s)' % (doc.Title(), IReferenceNumber(doc).get_number(), aq_parent(aq_inner(doc)).Title()) terms.append(SimpleVocabulary.createTerm(key, key, label)) return SimpleVocabulary(terms)
def test_use_no_client_id_grouped_by_three_formatter(self): registry = getUtility(IRegistry) proxy = registry.forInterface(IReferenceNumberSettings) proxy.formatter = 'no_client_id_grouped_by_three' self.assertEquals('247-8.2', IReferenceNumber(self.subdossier).get_number())
def test_plone_site_returns_admin_units_abbreviation(self): create( Builder('admin_unit').having( unit_id=u'fake', title=u'Fake Unit', abbreviation="FakeU").as_current_admin_unit()) self.assertEquals(u'FakeU', IReferenceNumber(self.portal).get_local_number())
def test_use_no_client_id_grouped_by_three_formatter(self): self.login(self.regular_user) api.portal.set_registry_record(name='formatter', value='no_client_id_grouped_by_three', interface=IReferenceNumberSettings) self.assertEquals('11-1.1', IReferenceNumber(self.subdossier).get_number())
def Title(self): reference_adapter = IReferenceNumber(self) title = u'{number}{sep} {title}'.format( number=reference_adapter.get_repository_number(), sep=reference_adapter.get_active_formatter().repository_title_seperator, title=self.effective_title) return title.encode('utf-8')
def update(self): super(ReferenceNumberWidget, self).update() self.mode = 'display' #check if is a add- or a editForm if IAddForm.providedBy(self.form.parentForm): self.value = _(u'label_no_reference_number', default="Reference Number will be generated \ after content creation") else: self.value = IReferenceNumber(self.context).get_number()
def __call__(self, *args, **kwargs): result = super(SerializeRepositoryFolderToJson, self).__call__(*args, **kwargs) result[u'is_leafnode'] = self.context.is_leaf_node() ref_num = IReferenceNumber(self.context) result[u'reference_number'] = ref_num.get_number() return result
def related_documents_vocabulary(task): intids = getUtility(IIntIds) terms = [] for doc in get_documents_of_task(task, include_mails=True): key = str(intids.getId(doc)) label = '%s (%s)' % (doc.Title(), IReferenceNumber(doc).get_number()) terms.append(SimpleVocabulary.createTerm(key, key, label)) return SimpleVocabulary(terms)
def sync_model(self, proposal_model=None): proposal_model = proposal_model or self.load_model() reference_number = IReferenceNumber( self.get_containing_dossier().get_main_dossier()).get_number() repository_folder_title = safe_unicode( self.get_repository_folder_title(proposal_model.language)) proposal_model.physical_path = self.get_physical_path() proposal_model.dossier_reference_number = reference_number proposal_model.repository_folder_title = repository_folder_title
def get_repository_title(self, reference_number): formatter = IReferenceNumber(api.portal.get()).get_active_formatter() catalog = api.portal.get_tool('portal_catalog') repository_reference = reference_number.split( formatter.repository_dossier_seperator) repository = catalog(reference=repository_reference)[-1] # fallback for removed repositories if not repository: return u'' return repository.Title.decode('utf-8')
def metadata(obj): metadata = [] reference_number = IReferenceNumber(obj) metadata.append(reference_number.get_number()) doc_metadata = IDocumentMetadata(obj) if doc_metadata.description: metadata.append(doc_metadata.description.encode('utf8')) if doc_metadata.keywords: metadata.extend([k.encode('utf8') for k in doc_metadata.keywords]) if doc_metadata.foreign_reference: metadata.append(doc_metadata.foreign_reference.encode('utf8')) return ' '.join(metadata)
def binding(self): dossier = arelda.dossierGeverSIP(id=u'_{}'.format(self.obj.UID())) dossier.titel = self.obj.Title().decode('utf8') dossier.entstehungszeitraum = arelda.historischerZeitraum() catalog = getToolByName(self.obj, 'portal_catalog') oldest_docs = catalog(portal_type=self.document_types, path='/'.join(self.obj.getPhysicalPath()), sort_on='created', sort_order='ascending', sort_limit=1) if oldest_docs: dossier.entstehungszeitraum.von = arelda.historischerZeitpunkt( oldest_docs[0].created.asdatetime().date()) else: dossier.entstehungszeitraum.von = NOT_SPECIFIED latest_docs = catalog(portal_type=self.document_types, path='/'.join(self.obj.getPhysicalPath()), sort_on='modified', sort_order='descending', sort_limit=1) if oldest_docs: dossier.entstehungszeitraum.bis = arelda.historischerZeitpunkt( latest_docs[0].modified.asdatetime().date()) else: dossier.entstehungszeitraum.bis = NOT_SPECIFIED set_classification_attributes(dossier, self.obj) dossier.aktenzeichen = IReferenceNumber(self.obj).get_number() dossier_obj = IDossier(self.obj) if dossier_obj.start: dossier.eroeffnungsdatum = arelda.historischerZeitpunkt( dossier_obj.start) if dossier_obj.end: dossier.abschlussdatum = arelda.historischerZeitpunkt( dossier_obj.end) dossier.schutzfrist = unicode(ILifeCycle(self.obj).custody_period) for d in self.dossiers.values(): dossier.dossier.append(d.binding()) for doc in self.documents.values(): dossier.dokument.append(doc.binding()) return dossier
def assert_dossier_peter_schneider_created(self, parent): dossier_peter = parent.get('dossier-13') self.assertEqual(u'Vreni Meier ist ein Tausendsassa', IDossier(dossier_peter).comments) self.assertEqual(tuple(), IDossier(dossier_peter).keywords) self.assertEqual('Client1 0.3 / 1', IReferenceNumber(dossier_peter).get_number()) self.assertEqual([], IDossier(dossier_peter).relatedDossier) self.assertEqual(u'lukas.graf', IDossier(dossier_peter).responsible) self.assertEqual('dossier-state-active', api.content.get_state(dossier_peter)) self.assertEqual(date(2010, 11, 11), IDossier(dossier_peter).start) self.assertEqual(u'Dossier Peter Schneider', dossier_peter.title) self.assertEqual( IAnnotations(dossier_peter)[BUNDLE_GUID_KEY], index_data_for(dossier_peter)[GUID_INDEX_NAME])
def binding(self): d = ech0147t0.dossierType() d.uuid = self.obj.UID() wftool = getToolByName(self.obj, "portal_workflow") status = wftool.getInfoFor(self.obj, 'review_state') d.status = DOSSIER_STATUS_MAPPING[status] d.titles = ech0039.titlesType() d.titles.append( ech0039.titleType(self.obj.Title().decode('utf8'), lang=u'DE')) c_obj = IClassification(self.obj) d.classification = ech0039.classificationType( CLASSIFICATION_MAPPING[c_obj.classification]) d.hasPrivacyProtection = PRIVACY_LAYER_MAPPING[c_obj.privacy_layer] d.caseReferenceLocalId = IReferenceNumber(self.obj).get_number() dossier_obj = IDossier(self.obj) d.openingDate = dossier_obj.start if dossier_obj.keywords: d.keywords = ech0039.keywordsType() for keyword in dossier_obj.keywords: d.keywords.append(ech0039.keywordType(keyword, lang=u'DE')) if self.dossiers: d.dossiers = ech0147t0.dossiersType() for dossier in self.dossiers: d.dossiers.append(dossier.binding()) if self.documents: d.documents = ech0147t0.documentsType() for document in self.documents: d.documents.append(document.binding()) # Optional, currently not supported properties d.openToThePublic = None d.comments = None d.links = None d.folders = None d.addresses = None d.applicationCustom = None return d
def binding(self): op = arelda.ordnungssystempositionGeverSIP( id=u'_{}'.format(self.obj.UID())) op.nummer = IReferenceNumber(self.obj).get_repository_number() op.titel = self.obj.Title( prefix_with_reference_number=False).decode('utf8') set_classification_attributes(op, self.obj) op.schutzfrist = unicode(ILifeCycle(self.obj).custody_period) for pos in self.positions.values(): op.ordnungssystemposition.append(pos.binding()) for dossier in self.dossiers.values(): op.dossier.append(dossier.binding()) return op
def update_model_create_arguments(self, data, context): aq_wrapped_self = self.__of__(context) workflow_state = self.workflow.default_state.name reference_number = IReferenceNumber( context.get_main_dossier()).get_number() language = data.get('language') repository_folder_title = safe_unicode( aq_wrapped_self.get_repository_folder_title(language)) data.update( dict(workflow_state=workflow_state, physical_path=aq_wrapped_self.get_physical_path(), dossier_reference_number=reference_number, repository_folder_title=repository_folder_title, creator=aq_wrapped_self.Creator())) return data
def assert_dossier_hanspeter_created(self, parent): dossier_peter = parent.get('dossier-14') self.assertEqual(u'archival worthy', ILifeCycle(dossier_peter).archival_value) self.assertEqual(u'Beinhaltet Informationen zum Verfahren', ILifeCycle(dossier_peter).archival_value_annotation) self.assertEqual(u'classified', IClassification(dossier_peter).classification) self.assertEqual(150, ILifeCycle(dossier_peter).custody_period) self.assertEqual( u'Wir haben Hanspeter M\xfcller in einem Verfahren entlassen.', dossier_peter.description) self.assertEqual(date(2007, 1, 1), IDossier(dossier_peter).start) self.assertEqual(date(2011, 1, 6), IDossier(dossier_peter).end) self.assertEqual(tuple(), IDossier(dossier_peter).keywords) self.assertEqual(u'privacy_layer_yes', IClassification(dossier_peter).privacy_layer) self.assertEqual('Client1 0.3 / 7', IReferenceNumber(dossier_peter).get_number()) self.assertEqual([], IDossier(dossier_peter).relatedDossier) self.assertEqual(u'lukas.graf', IDossier(dossier_peter).responsible) self.assertEqual(5, ILifeCycle(dossier_peter).retention_period) self.assertIsNone( ILifeCycle(dossier_peter).retention_period_annotation) self.assertEqual('dossier-state-resolved', api.content.get_state(dossier_peter)) self.assertEqual(u'Hanspeter M\xfcller', dossier_peter.title) self.assertDictContainsSubset( { 'admin_users': ['Publisher', 'Reader', 'Editor', 'Contributor', 'Reviewer'] }, dossier_peter.__ac_local_roles__) self.assertTrue(dossier_peter.__ac_local_roles_block__) self.assertEqual( IAnnotations(dossier_peter)[BUNDLE_GUID_KEY], index_data_for(dossier_peter)[GUID_INDEX_NAME]) return dossier_peter
def generate_metadata_tag(self): function = etree.Element("Function") function.set("name", "MetaData") function.set("id", "c364b495-7176-4ce2-9f7c-e71f302b8096") node = etree.SubElement(function, "Value") node.set("key", "ogg.document.title") node.set("type", "string") node.text = self.context.Title().decode("utf-8") reference_number = IReferenceNumber(self.context) node = etree.SubElement(function, "Value") node.set("key", "ogg.document.reference_number") node.set("type", "string") node.text = reference_number.get_number() node = etree.SubElement(function, "Value") node.set("key", "ogg.document.sequence_number") node.set("type", "string") node.text = reference_number.get_local_number() return function
def generate_custom_interface_connector_tag(self): function = etree.Element("Function") function.set("name", "CustomInterfaceConnector") function.set("id", "70E94788-CE84-4460-9698-5663878A295B") arguments = etree.SubElement(function, "Arguments") interface = etree.SubElement(arguments, "Interface") interface.set("Name", "OneGovGEVER") node = etree.SubElement(interface, "Node") node.set("Id", "ogg.document.title") node.text = self.context.Title().decode("utf-8") reference_number = IReferenceNumber(self.context) node = etree.SubElement(interface, "Node") node.set("Id", "ogg.document.reference_number") node.text = reference_number.get_number() node = etree.SubElement(interface, "Node") node.set("Id", "ogg.document.sequence_number") node.text = reference_number.get_local_number() return function
def get_reference_number(self, obj): reference_adapter = IReferenceNumber(obj) refnum = reference_adapter.get_number() # Strip AdminUnit abbreviation refnum = refnum.replace(self.au_abbreviation, '').strip() return refnum
def test_uses_userid_as_reference_number_part(self): self.assertEquals('Client1 test_user_1_', IReferenceNumber(self.folder).get_number())