def __call__(self): spec = aq_parent(aq_inner(self.context)) latest = IGetVersions(spec).latest_version() if spec.UID() == latest.UID(): version = create_version(self.context) return self.request.RESPONSE.redirect(version.absolute_url()) self.spec_title = latest.Title() self.spec_url = latest.absolute_url() self.date = latest.effective_date or latest.creation_date if "submit" not in self.request.form: return self.template() choice = self.request.form.get("choice") if choice == "here": version = create_version(self.context) #return self.request.RESPONSE.redirect(version.absolute_url()) return "OK" if choice == "newest": version = latest.factory_Assessment()['obj'] #return self.request.RESPONSE.redirect(version.absolute_url()) return "OK" raise ValueError("Unknown option for field choice")
def __call__(self): spec = aq_parent(aq_inner(self.context)) latest = IGetVersions(spec).latest_version() if spec.UID() == latest.UID(): create_version(self.context) return "OK" return "SEEURL: %s/@@createVersion" % self.context.absolute_url()
def factory_Assessment(self): """factory""" type_name = 'Assessment' create = self.REQUEST.form.get('create_in_latest_spec') if create == 'true': latest = IGetVersions(self).latest_version() if latest.UID() != self.UID(): return latest.factory_Assessment() #drop with error if no PolicyQuestions are created if not self.objectValues('PolicyQuestion'): raise ValueError("You need to create first a Policy Question") #create a version if we already have an Assessment assessments = self.objectValues(type_name) if assessments: #NOTE: we assume the latest object is the last one original = assessments[-1] ast = createVersion(original) return { 'obj': ast, 'subview': '@@edit_aggregated', 'direct_edit': True } #we want to make this assessment a version of a previous assessment #if this Specification is already versioned, so we try get a versionId version_id = None spec_versions = IGetVersions(self).versions() for spec in spec_versions: asts = spec.objectValues("Assessment") if asts: original = asts[0] version_id = IVersionControl(original).versionId break #if there are no other assessments in this version set we look for #other IndicatorFactSheet objects with same indicator code to #get the versionId if not version_id: brains = [] codes = self.get_codes() cat = getToolByName(self, 'portal_catalog') for code in codes[1::2]: brains = cat.searchResults({ 'portal_type': 'IndicatorFactSheet', 'get_codes': code }) if brains: break if brains: version_id = IVersionControl(brains[0].getObject()).versionId #create a new Assessment from scratch #id = self.generateUniqueId(type_name) aid = make_id('assessment', self.objectIds()) new_id = self.invokeFactory(type_name=type_name, id=aid, base_impl=True, title=self.translate( msgid='label-newly-created-type', domain='indicators', default="Newly created ${type_name}", mapping={'type_name': type_name}, )) ast = self[new_id] if version_id: IVersionControl(ast).setVersionId(version_id) #create assessment parts for each policy question for pq in self.objectValues("PolicyQuestion"): aid = ast.invokeFactory( type_name="AssessmentPart", id=ast.generateUniqueId("AssessmentPart"), ) ap = ast[aid] ap.setRelatedItems(pq) try: ap.reindexObject() except AttributeError: log("#ZZZ: this happens when executed from test") ast.reindexObject() notify(ObjectInitializedEvent(ast)) return { 'obj': ast, 'subview': '@@edit_aggregated', 'direct_edit': True }