class IOutcomedefaults(model.Schema): """ Outcome Default values """ number = schema.TextLine( title=_(u"KPI Number"), required=True, ) title = schema.TextLine( title=_(u"Title English"), required=True, ) unit = schema.TextLine( title=_(u"Unit"), required=True, ) title_es = schema.TextLine( title=_(u"Title Spanish"), required=False, ) title_fr = schema.TextLine( title=_(u"Title French"), required=False, )
def getItems(self): """ Returns all the project years of the dash-areas """ items = len(self.context.gwopa_year_phases) results = [] total = 0 while total != items: if (total == 0) and (self.request.steps[-1] == 'dash-areas'): classe = 'disabled' elif self.request.steps[-1] == str(total + 1): classe = 'disabled' else: classe = 'visible' if total == 0: url = self.context.absolute_url_path() + '/dash-areas/' else: url = self.context.absolute_url_path() + '/dash-areas/' + str( total + 1) results.append( dict(title=_(u"Project year"), year=str(total + 1), url=url, alt=_(u"Show dashboard of year ") + str(total + 1), classe=classe)) total = total + 1 return sorted(results, key=itemgetter('title'), reverse=False)
def listSectionsReport(context): sections = [] sections.append(SimpleVocabulary.createTerm(u'Project Overview', 'Project Overview', _(u'Project Overview'))) sections.append(SimpleVocabulary.createTerm(u'Summary', 'Summary', _(u'Summary'))) sections.append(SimpleVocabulary.createTerm(u'Activities and Outputs Progress', 'Activities and Outputs Progress', _(u'Activities and Outputs Progress'))) sections.append(SimpleVocabulary.createTerm(u'Outcomes - Utility Perfomance', 'Outcomes - Utility Perfomance', _(u'Outcomes - Utility Perfomance'))) sections.append(SimpleVocabulary.createTerm(u'Outcomes - Capacity', 'Outcomes - Capacity', _(u'Outcomes - Capacity'))) sections.append(SimpleVocabulary.createTerm(u'Budget', 'Budget', _(u'Budget'))) sections.append(SimpleVocabulary.createTerm(u'Next Steps', 'Next Steps', _(u'Next Steps'))) return SimpleVocabulary(sections)
class IMainContributing(model.Schema): """ Main Contributing default values. """ title = schema.TextLine( title=_(u"Title English"), required=True, ) title_es = schema.TextLine( title=_(u"Title Spanish"), required=False, ) title_fr = schema.TextLine( title=_(u"Title French"), required=False, )
class IPlatform(model.Schema): """ Project type """ title = schema.TextLine( title=_(u"Title"), required=True, ) description = schema.Text( title=_(u'Summary'), required=False, missing_value=u'', ) image = namedfile.NamedBlobImage( title=_(u'Image'), required=False, ) country = schema.List( title=_(u"Country"), description=_( u"Choose countries from list that represents this country."), value_type=schema.Choice(source=utils.countries), required=True, ) region = schema.List( title=_(u"Region"), description=_(u"Choose region based on selected country."), value_type=schema.Choice(source=utils.countries), required=True, )
class IOutcomecc(model.Schema): """ OutcomeCC Generic """ directives.mode(title='hidden') title = schema.TextLine( title=_(u"Title"), required=True, ) description = schema.Text( title=_(u'Summary'), required=False, missing_value=u'', ) baseline = schema.TextLine( title=_(u"Baseline"), required=True, ) baseline_date = schema.Date(title=_(u'Baseline date'), required=True) objective = schema.Text( title=_(u"Objective"), required=False, ) objective_date = schema.Date(title=_(u"Objective date"), required=False) stage = schema.TextLine( title=_(u"Stage"), required=False, )
class IContribOther(model.Schema): """ Other contributor """ title = schema.TextLine( title=_(u"Name"), required=True, ) organization_roles = schema.Choice( title=_(u"Organization roles"), description=_(u"The roles of other organizations in project"), source=utils.settings_organization_roles, required=False, ) incash = schema.Decimal( title=_(u'In-cash'), required=False, ) directives.mode(currency_incash='display') currency_incash = schema.TextLine(title=_(u""), ) inkind = schema.Decimal( title=_(u'In-kind'), required=False, ) directives.mode(currency_inkind='display') currency_inkind = schema.TextLine(title=_(u""), )
class IContribPartner(model.Schema): """ Partner contributor """ form.mode(IEditForm, title='display') title = schema.TextLine( title=_(u"Name"), required=True, ) partner_roles = schema.Choice( title=_(u"Partner roles"), description=_(u"The role of partner in project"), source=utils.settings_partner_roles, required=False, ) incash = schema.Decimal( title=_(u'In-cash'), required=False, ) directives.mode(currency_incash='display') currency_incash = schema.TextLine(title=_(u""), ) inkind = schema.Decimal( title=_(u'In-kind'), required=False, ) directives.mode(currency_inkind='display') currency_inkind = schema.TextLine(title=_(u""), )
def generate_vocabulary(value): """ Generates Dropdown with the countries. """ vocabulary_list = [] for row in value: entry = SimpleTerm(value=unicodedata.normalize('NFKD', row).encode( 'ascii', errors='ignore').decode('ascii'), title=_(row)) vocabulary_list.append(entry) return SimpleVocabulary(vocabulary_list)
def checkDate(value): if value: req = getRequest() context = req.PARENTS[0] start_project = context.aq_parent.startactual.toordinal() end_project = context.aq_parent.completionactual.toordinal() date = value.date().toordinal() if not (date <= end_project and date >= start_project): raise Invalid( _(u'This date must be between the dates of the project.')) return True
def getItems(self): """ Returns all the project years of the planning """ items = len(self.context.gwopa_year_phases) results = [] total = 0 while total != items: if total == 0: url = self.context.absolute_url_path() + '/reportPreview/' else: url = self.context.absolute_url_path( ) + '/reportPreview/' + str(total + 1) results.append( dict(title=_(u"Project year"), year=str(total + 1), url=url, alt=_(u"Show report preview of year ") + str(total + 1))) total = total + 1 return sorted(results, key=itemgetter('title'), reverse=False)
class IOutcomezone(model.Schema): """ OutcomeZONE. """ title = schema.TextLine( title=_(u"Title"), required=True, ) zone = schema.TextLine( title=_(u'Zone'), required=False, ) directives.widget('members', SelectWidget) members = schema.List( title=_(u"Responsible people"), value_type=schema.Choice(source=u'plone.app.vocabularies.Users'), required=False, ) description = schema.Text( title=_(u'Description'), required=False, missing_value=u'', ) baseline = schema.TextLine( title=_(u"Baseline value"), required=True, ) baseline_date = schema.Datetime(title=_(u'Baseline date'), required=True, defaultFactory=todayValue) measuring_unit = schema.Choice( title=_(u"Measuring unit"), source=utils.settings_measuring_unit, required=True, ) # measuring_frequency = schema.Choice( # title=_(u"Monitoring and reporting frequency"), # source=utils.settings_measuring_frequency, # required=True, # ) means = schema.Text( title=_(u"Means of verification"), required=False, )
class IImprovementArea(form.Schema): """ Improvement Area type """ form.mode(title='input') title = schema.Choice( title=_(u"Title"), source=utils.area_title, required=True, ) form.mode(description='input') description = schema.Text( title=_(u'Description'), required=False, missing_value=u'', ) image = namedfile.NamedBlobImage( title=_(u'Image'), description=_(u"Image used to describe the Area. If no file chosen, a defult one will be used."), required=False, ) directives.mode(title_es='hidden') title_es = schema.TextLine( title=_(u"Title Spanish"), required=False, ) directives.mode(title_fr='hidden') title_fr = schema.TextLine( title=_(u"Title French"), required=False, )
class IItemArea(model.Schema): """ Improvement Area Values """ title = schema.TextLine( title=_(u"Title English"), required=True, ) title_es = schema.TextLine( title=_(u"Title Spanish"), required=True, ) title_fr = schema.TextLine( title=_(u"Title French"), required=True, ) description = schema.Text( title=_(u'Summary'), required=False, missing_value=u'', ) image = namedfile.NamedBlobImage( title=_(u'Image'), description=_(u"Image used to describe the Working Area"), required=False, )
class IProgram(model.Schema): """ Project type """ title = schema.TextLine( title=_(u"Title"), required=True, ) description = schema.Text( title=_(u'Summary'), required=False, missing_value=u'', ) image = namedfile.NamedBlobImage( title=_(u'Image'), required=False, ) country = schema.List( title=_(u"Country"), description=_( u"Choose countries from list that represents this country."), value_type=schema.Choice(source=utils.countries), required=True, ) contact = schema.TextLine(title=_(u'Contact email'), required=False, missing_value=u'', constraint=isEmail)
class IPartnershipPractice(form.Schema): """ Partnership Practice type """ title = schema.TextLine( title=_(u"Title English"), required=True, ) title_es = schema.TextLine( title=_(u"Title Spanish"), required=False, ) title_fr = schema.TextLine( title=_(u"Title French"), required=False, ) description = schema.TextLine( title=_(u"Description English"), required=True, missing_value=u'', ) description_es = schema.TextLine( title=_(u"Description Spanish"), required=False, missing_value=u'', ) description_fr = schema.TextLine( title=_(u"Description French"), required=False, missing_value=u'', )
class IContribDonor(model.Schema): """ Donor contributor """ form.mode(IEditForm, title='display') title = schema.TextLine( title=_(u"Name"), required=True, ) incash = schema.Decimal( title=_(u'In-cash'), required=False, ) directives.mode(currency_incash='display') currency_incash = schema.TextLine(title=_(u""), ) inkind = schema.Decimal( title=_(u'In-kind'), required=False, ) directives.mode(currency_inkind='display') currency_inkind = schema.TextLine(title=_(u""), )
class IOutput(model.Schema): """ Output """ title = schema.TextLine( title=_(u"Numeration - Title"), description=_(u"(e.g. 1.1 - Trained Staff)"), required=True, ) description = schema.Text( title=_(u'Description'), required=False, missing_value=u'', ) directives.mode(project_dates='display') project_dates = schema.Text(title=_(u''), ) measuring_unit = schema.Choice( title=_(u"Measuring unit"), source=utils.settings_measuring_unit, required=True, ) end = schema.Datetime(title=_(u'Completion date'), required=True, defaultFactory=todayValue) means = schema.Text( title=_(u"Means of verification"), required=False, ) # risks = schema.Text( # title=_(u"Risks / Assumptions"), # required=False, # ) directives.widget('members', SelectWidget) members = schema.List( title=_(u"Responsible people"), value_type=schema.Choice(source=u'plone.app.vocabularies.Users'), required=False, )
def listTypeOrganizations(context): types = [] types.append( SimpleVocabulary.createTerm(u'Regional WOP Platform', 'Regional WOP Platform', _(u'Regional WOP Platform'))) types.append( SimpleVocabulary.createTerm(u'WOP Program', 'WOP Program', _(u'WOP Program'))) types.append( SimpleVocabulary.createTerm(u'Water Operator', 'Water Operator', _(u'Water Operator'))) types.append(SimpleVocabulary.createTerm(u'Donor', 'Donor', _(u'Donor'))) types.append( SimpleVocabulary.createTerm(u'Non-participating users', 'Non-participating users', _(u'Non-participating users'))) types.append(SimpleVocabulary.createTerm(u'Others', 'Others', _(u'Others'))) return SimpleVocabulary(types)
def getOverallStatus(self): status = [] status.append(SimpleVocabulary.createTerm(u'roadblock', 'roadblock', _(u'Roadblock'))) status.append(SimpleVocabulary.createTerm(u'potential', 'potential', _(u'Potential Risks/Delays'))) status.append(SimpleVocabulary.createTerm(u'ontrack', 'ontrack', _(u'On Track'))) return SimpleVocabulary(status)
def getOutcomeCC(self): items = api.content.find(portal_type=['OutcomeCC'], context=self.context) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for item in items: members = [] obj = item.getObject() annotations = IAnnotations(item.getObject()) base_value = '' base_date = '' description = '' objective = '' objective_date = '' target_value_planned = _(u"Not defined") specifics = '' monitoring = '' if KEY in annotations.keys(): if annotations[KEY] != '' or annotations[ KEY] is not None or annotations[KEY] != 'None': base_value = annotations[KEY]['generic'][0]['baseline'] base_date = annotations[KEY]['generic'][0]['baseline_date'] description = annotations[KEY]['generic'][0]['description'] objective = annotations[KEY]['generic'][0]['objective'] objective_date = annotations[KEY]['generic'][0][ 'objective_date'] target_value_planned = annotations[KEY]['planned'] specifics = annotations[KEY]['specifics'] monitoring = annotations[KEY]['monitoring'] if obj.members: users = obj.members if isinstance(users, (str, )): for member in users.split(','): user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) else: for member in users: user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) if obj.aq_parent.portal_type == 'ImprovementArea': area = obj.aq_parent.title else: area = obj.aq_parent.aq_parent.title results.append( dict(rid=item.getRID(), area=area, title=item.Title, description=description, base_date=base_date, base_value=base_value, objective=objective, objective_date=objective_date, target_value_planned=target_value_planned, specifics=specifics, monitoring=monitoring, portal_type=item.portal_type, responsible=members, url='/'.join(obj.getPhysicalPath()))) if len(results) != 0: return results[0] else: return False
class UserPropertiesSoupCatalogFactory(object): """ The local user catalog (LUC) properties index factory. Almost all the properties have a field type "FullTextIndex" to allow wildcard queries on them. However, the FullTextIndex has a limitation its supported type of queries, so for certain operations is needed a FieldIndex for the username. """ properties = [ _(u'username'), _(u'fullname'), _(u'email'), _(u'description'), _(u'wop_platforms'), _(u'wop_programs'), _(u'wop_partners'), _(u'type_of_organization'), _(u'common_working_areas'), _(u'donor'), _(u'other'), _(u'country'), _(u'position'), _(u'phone'), _(u'home_page')] profile_properties = [ 'email', 'description', 'wop_platforms', 'wop_programs', 'wop_partners', 'type_of_organization' 'common_working_areas', 'donor', 'other', 'country', 'position', 'phone', 'home_page'] directory_properties = ['email', 'phone', 'wop_platforms', 'wop_programs', 'wop_partners'] directory_icons = {'email': 'fa fa-envelope', 'phone': 'fa fa-mobile', 'wop_platforms': 'fa fa-building-o', 'wop_programs': 'fa fa-building-o', 'wop_partners': 'fa fa-building-o', } def __call__(self, context): catalog = Catalog() idindexer = NodeAttributeIndexer('id') catalog['id'] = CatalogFieldIndex(idindexer) userindexer = NodeAttributeIndexer('username') catalog['username'] = CatalogTextIndex(userindexer) fullname = NodeAttributeIndexer('fullname') catalog['fullname'] = CatalogTextIndex(fullname) email = NodeAttributeIndexer('email') catalog['email'] = CatalogTextIndex(email) wop_platforms = NodeAttributeIndexer('wop_platforms') catalog['wop_platforms'] = CatalogTextIndex(wop_platforms) wop_programs = NodeAttributeIndexer('wop_programs') catalog['wop_programs'] = CatalogTextIndex(wop_programs) wop_partners = NodeAttributeIndexer('wop_partners') catalog['wop_partners'] = CatalogTextIndex(wop_partners) country = NodeAttributeIndexer('country') catalog['country'] = CatalogTextIndex(country) position = NodeAttributeIndexer('position') catalog['position'] = CatalogTextIndex(position) type_of_organization = NodeAttributeIndexer('type_of_organization') catalog['type_of_organization'] = CatalogTextIndex(type_of_organization) common_working_areas = NodeAttributeIndexer('common_working_areas') catalog['common_working_areas'] = CatalogTextIndex(common_working_areas) donors = NodeAttributeIndexer('donors') catalog['donors'] = CatalogTextIndex(donors) other_info = NodeAttributeIndexer('other_info') catalog['other_info'] = CatalogTextIndex(other_info) return catalog
def user_properties(self): member_data = api.user.get(username=self.username) profile__properties = [ _(u'fullname'), _(u'email'), _(u'phone'), _(u'country'), _(u'position'), _(u'wop_programs'), _(u'wop_platforms'), _(u'wop_partners'), _(u'type_of_organization'), _(u'common_working_areas'), _(u'donor'), _(u'other') ] rendered_properties = [] for prop in profile__properties: if prop != 'common_working_areas': rendered_properties.append( dict(name=_(prop), value=member_data.getProperty(prop, ''))) else: rendered_properties.append( dict(name=_(prop), value=utils.getTranslatedWorkingAreaFromID( member_data.getProperty(prop, '')))) return rendered_properties
class IReport(model.Schema): """ Report type """ title = schema.TextLine( title=_(u"Title"), required=True, ) form.mode(overall_project_status='hidden') overall_project_status = schema.Choice( title=_(u"Overall Project Status"), description=_(u"Select the overall Project status."), source=getOverallStatus, required=False, ) form.mode(progress_stakeholders='hidden') progress_stakeholders = schema.Text( title=_(u'Progress stakeholders'), description=_(u"Insert a maximum of two paragraphs summarizing the progress during the reporting period that could be shared with the programs key stakeholders."), required=False, missing_value=u'', ) form.mode(other_additional_challenges='hidden') other_additional_challenges = schema.Text( title=_(u'Other additional challenges'), description=_(u"Insert a maximum of two paragraphs summarizig the or other additional challenges/ lessons learned/ deviations to plans."), required=False, missing_value=u'', ) form.mode(next_steps='hidden') next_steps = schema.Text( title=_(u'Next Steps'), required=False, missing_value=u'', ) form.mode(IEditForm, project_year='hidden') project_year = schema.Choice( title=_(u"Project Year"), description=_(u"Choose project year to view in the report."), source=getProjectYears, required=True, ) sections_reports = schema.List( title=_(u"Sections Report"), description=_(u"Choose sections to view in the report."), value_type=schema.Choice( source=listSectionsReport), default=['Project Overview', 'Summary', 'Activities and Outputs Progress', 'Outcomes - Utility Perfomance', 'Outcomes - Capacity', 'Next Steps', 'Budget'], required=True, ) form.mode(save_data='hidden') save_data = JSONField( title=_(u"Data"), required=False, ) form.mode(report_type='hidden') report_type = schema.Choice( title=_(u"Type"), source=getReportTypes, default=u'manual', required=False, )
def getReportTypes(self): status = [] status.append(SimpleVocabulary.createTerm(u'manual', 'manual', _(u'Manual'))) status.append(SimpleVocabulary.createTerm(u'auto', 'auto', _(u'Auto'))) return SimpleVocabulary(status)
def outputsInside(self, item): """ Returns Outpus inside Activities """ portal_catalog = getToolByName(self, 'portal_catalog') folder_path = item['url'] data_year = self.context.gwopa_year_phases[int(self.year) - 1] start = datetime.datetime.strptime(data_year['start_iso'], '%Y-%m-%d') end = datetime.datetime.strptime(data_year['end_iso'], '%Y-%m-%d') range_end = {'query': (start, end), 'range': 'min:max'} outputs1 = portal_catalog.unrestrictedSearchResults( portal_type=['Output'], end=range_end, path={ 'query': folder_path, 'depth': 1 }) range_end = {'query': (end), 'range': 'min'} outputs2 = portal_catalog.unrestrictedSearchResults( portal_type=['Output'], end=range_end, path={ 'query': folder_path, 'depth': 1 }) items = outputs1 + outputs2 elements = [] for item in items: if item.getObject() not in elements: elements.append(item.getObject()) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for item in elements: annotations = IAnnotations(item) if KEY in annotations.keys(): if annotations[KEY] == '' or annotations[ KEY] is None or annotations[KEY] == 'None': target_value_real = '' target_value_planned = _(u"Not defined") monitoring_info = '' else: target_value_real = annotations[KEY]['real'] target_value_planned = annotations[KEY]['planned'] monitoring_info = annotations[KEY]['monitoring'] else: target_value_real = '' target_value_planned = '-----' monitoring_info = "" if item.portal_type == 'Activity': unit = '' else: unit = getTranslatedMesuringUnitFromID(item.measuring_unit) if not item.start: start = '-----' else: start = item.start.strftime('%Y-%m') if not item.end: end = '-----' else: end = item.end.strftime('%Y-%m') if monitoring_info == '': consideration, explanation, limiting, obstacles, contributing, progress, updated, dictObstacles, dictContributing = '', '', '', '', '', '', '', '', '' else: consideration = monitoring_info[ 'consideration'] if monitoring_info.get( 'consideration') is not None else '' explanation = monitoring_info[ 'explanation'] if monitoring_info.get( 'explanation') is not None else '' obstacles = monitoring_info['obstacles'] if monitoring_info.get( 'obstacles') is not None else '' dictObstacles = json.dumps( getDictTranslatedObstaclesFromList( obstacles)) if obstacles != '' else '' contributing = monitoring_info[ 'contributing'] if monitoring_info.get( 'contributing') is not None else '' dictContributing = json.dumps( getDictTranslatedContributingFromList( contributing)) if contributing != '' else '' limiting = monitoring_info['limiting'] if monitoring_info.get( 'limiting') is not None else '' progress = monitoring_info['progress'] if monitoring_info.get( 'progress') is not None else '' updated = monitoring_info['updated'] if monitoring_info.get( 'updated') is not None else '' results.append( dict(title=item.title, path='/'.join(item.getPhysicalPath()), id=item.id, portal_type=item.portal_type, start=start, end=end, unit=unit, target_value_real=target_value_real, target_value_planned=target_value_planned, year=self.year, next_update=data_year['end_iso'][0:7], consideration=consideration, explanation=explanation, obstacles=obstacles, dict_obstacles=dictObstacles, contributing=contributing, dict_contributing=dictContributing, limiting=limiting, progress=progress, updated=updated, url='/'.join(item.getPhysicalPath()))) return sorted(results, key=itemgetter('title'), reverse=False)
def listOutcomesKPI(self): items = api.content.find(portal_type=['OutcomeZONE'], context=self.context) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for item in items: members = [] members_id = [] obj = item.getObject() annotations = IAnnotations(item.getObject()) if KEY in annotations.keys(): if annotations[KEY] == '' or annotations[ KEY] is None or annotations[KEY] == 'None': target_value_planned = _(u"Not defined") unit = '' else: target_value_planned = annotations[KEY]['planned'] unit = obj.measuring_unit else: target_value_planned = _(u"Not defined") unit = '' if obj.members: users = obj.members if isinstance(users, (str, )): for member in users.split(','): user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) members_id.append(member) else: for member in users: user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) members_id.append(member) if obj.means: means = obj.means else: means = '' # if obj.risks: # risks = obj.risks # else: # risks = '' results.append( dict( title=getTranslatedOutcomesFromTitle(item.Title), description=item.Description, base_date=obj.baseline_date.strftime('%Y-%m'), base_date_edit=obj.baseline_date.strftime('%Y-%m-%d'), base_value=obj.baseline, zone=obj.zone, unit=unit, unit_text=getTranslatedMesuringUnitFromID( obj.measuring_unit), target_value_planned=target_value_planned, portal_type=item.portal_type, responsible=members, responsible_id=members_id, means=means, # risks=risks, url='/'.join(obj.getPhysicalPath()))) return sorted(results, key=itemgetter('title'), reverse=False)
def outputsInside(self, item): """ Returns Outpus inside Activities """ portal_catalog = getToolByName(self, 'portal_catalog') folder_path = item['url'] data_year = self.context.gwopa_year_phases[int(self.year) - 1] start = datetime.datetime.strptime(data_year['start_iso'], '%Y-%m-%d') end = datetime.datetime.strptime(data_year['end_iso'], '%Y-%m-%d') range_end = {'query': (start, end), 'range': 'min:max'} outputs1 = portal_catalog.unrestrictedSearchResults( portal_type=['Output'], end=range_end, path={ 'query': folder_path, 'depth': 1 }) range_end = {'query': (end), 'range': 'min'} outputs2 = portal_catalog.unrestrictedSearchResults( portal_type=['Output'], end=range_end, path={ 'query': folder_path, 'depth': 1 }) items = outputs1 + outputs2 elements = [] for item in items: if item.getObject() not in elements: elements.append(item.getObject()) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for item in elements: members = [] members_id = [] annotations = IAnnotations(item) target_value_planned = _(u"Not defined") if KEY in annotations.keys(): if annotations[KEY] != '' or annotations[ KEY] is not None or annotations[KEY] != 'None': target_value_planned = annotations[KEY]['planned'] if item.members: users = item.members if isinstance(users, (str, )): for member in users.split(','): user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) members_id.append(member) else: for member in users: user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) members_id.append(member) if item.description: description = item.description else: description = '' if item.means: means = item.means else: means = '' # if item.risks: # risks = item.risks # else: # risks = '' results.append( dict( title=item.title, portal_type=item.portal_type, start='----', end=item.end.strftime('%Y-%m-%d'), unit=item.measuring_unit, unit_text=getTranslatedMesuringUnitFromID( item.measuring_unit), limit_start='----', limit_end=item.end.strftime('%Y %m %d').replace( ' 0', ' ').replace(' ', ','), target_value_planned=target_value_planned, responsible=members, responsible_id=members_id, description=description, means=means, # risks=risks, url='/'.join(item.getPhysicalPath()))) return sorted(results, key=itemgetter('title'), reverse=False)
def activitiesInside(self, item): """ Returns Activities inside Working Area """ portal_catalog = getToolByName(self, 'portal_catalog') folder_path = item['url'] data_year = self.context.gwopa_year_phases[int(self.year) - 1] start = datetime.datetime.strptime(data_year['start_iso'], '%Y-%m-%d') end = datetime.datetime.strptime(data_year['end_iso'], '%Y-%m-%d') # Los de la fase [---] range_start = {'query': (start, end), 'range': 'min:max'} range_end = {'query': (start, end), 'range': 'min:max'} activities1 = portal_catalog.unrestrictedSearchResults( portal_type=['Activity'], start=range_start, end=range_end, path={ 'query': folder_path, 'depth': 1 }) # Los de fuera de la fase start y end ---][---- range_start = {'query': (start), 'range': 'max'} range_end = {'query': (end), 'range': 'min'} activities2 = portal_catalog.unrestrictedSearchResults( portal_type=['Activity'], start=range_start, end=range_end, path={ 'query': folder_path, 'depth': 1 }) # Los que empiezan antes y acaban en fase ---] ranges = {'query': (start), 'range': 'max'} range_end = {'query': (start, end), 'range': 'min:max'} activities3 = portal_catalog.unrestrictedSearchResults( portal_type=['Activity'], start=ranges, end=range_end, path={ 'query': folder_path, 'depth': 1 }) # Los que empiezan aqui y acaban despues [---- range_start = {'query': (start, end), 'range': 'min:max'} range_end = {'query': (end), 'range': 'min'} activities4 = portal_catalog.unrestrictedSearchResults( portal_type=['Activity'], start=range_start, end=range_end, path={ 'query': folder_path, 'depth': 1 }) items = activities1 + activities2 + activities3 + activities4 elements = [] for item in items: if item.getObject() not in elements: elements.append(item.getObject()) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for item in elements: members = [] annotations = IAnnotations(item) target_value_planned = _(u"Not defined") if KEY in annotations.keys(): if annotations[KEY] != '' or annotations[ KEY] is not None or annotations[KEY] != 'None': target_value_planned = annotations[KEY]['planned'] if item.members: users = item.members if isinstance(users, (str, )): for member in users.split(','): user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) else: for member in users: user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) results.append( dict(title=item.title, portal_type=item.portal_type, start=item.start.strftime('%Y-%m-%d'), end=item.end.strftime('%Y-%m-%d'), limit_start=item.start.strftime('%Y %m %d').replace( ' 0', ' ').replace(' ', ','), limit_end=item.end.strftime('%Y %m %d').replace( ' 0', ' ').replace(' ', ','), target_value_planned='-----', responsible=members, url='/'.join(item.getPhysicalPath()))) return sorted(results, key=itemgetter('title'), reverse=False)
def listOutcomesKPI(self): items = api.content.find(portal_type=['OutcomeZONE'], context=self.context) results = [] KEY = "GWOPA_TARGET_YEAR_" + str(self.year) data_year = self.context.gwopa_year_phases[int(self.year) - 1] for item in items: members = [] obj = item.getObject() annotations = IAnnotations(obj) if KEY in annotations.keys(): if annotations[KEY] == '' or annotations[ KEY] is None or annotations[KEY] == 'None': target_value_real = '' target_value_planned = _(u"Not defined") monitoring_info = dict( progress='', explanation='', obstacles='', contributing='', consideration='', limiting='', updated='', ) monitoring_info = monitoring_info else: target_value_real = annotations[KEY]['real'] target_value_planned = annotations[KEY]['planned'] monitoring_info = annotations[KEY]['monitoring'] else: target_value_real = '' target_value_planned = '-----' monitoring_info = dict( progress='', explanation='', obstacles='', contributing='', consideration='', limiting='', updated='', ) monitoring_info = monitoring_info if obj.members: users = obj.members if isinstance(users, (str, )): for member in users.split(','): user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) else: for member in users: user = api.user.get(username=member) if user: members.append(user.getProperty('fullname')) obstacles = monitoring_info[ 'obstacles'] if monitoring_info.has_key('obstacles') else '' contributing = monitoring_info[ 'contributing'] if monitoring_info.has_key( 'contributing') else '' dictObstacles = json.dumps( getDictTranslatedObstaclesFromList( obstacles)) if obstacles != '' else '' dictContributing = json.dumps( getDictTranslatedContributingFromList( contributing)) if contributing != '' else '' results.append( dict( path=item.getPath(), id=item.id, year=self.year, portal_type=item.portal_type, start=item.start, title=getTranslatedOutcomesFromTitle(item.Title), description=item.Description, base_value=obj.baseline, base_date=obj.baseline_date.strftime('%Y-%m'), zone=obj.zone, unit=getTranslatedMesuringUnitFromID(obj.measuring_unit), means=obj.means, # risks=obj.risks, responsible=members, next_update=data_year['end_iso'][0:7], target_value_real=target_value_real, target_value_planned=target_value_planned, consideration=monitoring_info['consideration'] if monitoring_info.has_key('consideration') else '', explanation=monitoring_info['explanation'] if monitoring_info.has_key('explanation') else '', obstacles=obstacles, dict_obstacles=dictObstacles, contributing=contributing, dict_contributing=dictContributing, limiting=monitoring_info['limiting'] if monitoring_info.has_key('limiting') else '', progress=monitoring_info['progress'] if monitoring_info.has_key('progress') else '', updated=monitoring_info['updated'] if monitoring_info.has_key('updated') else '', url='/'.join(obj.getPhysicalPath()))) return sorted(results, key=itemgetter('title'), reverse=False)