def getAreas(self): attr_lang = getTitleAttrLang() items = api.content.find(portal_type=['ImprovementArea']) results = [] for item in items: obj = item.getObject() results.append( dict(title=getattr(item, attr_lang), parent=obj.aq_parent.title, url='/'.join(obj.getPhysicalPath()))) return results
def area_not_used(context): """ Titles of Improvement Areas not created in this Project """ terms = [] literals = api.content.find(portal_type="ItemArea", context=api.portal.get()['config']['areas'], depth=1) attr_lang = utils.getTitleAttrLang() for item in literals: terms.append( SimpleVocabulary.createTerm(item.id, item.id, getattr(item, attr_lang))) return SimpleVocabulary(terms)
def getAreas(self): """ Returns all the Improvement Areas in a Project """ attr_lang = getTitleAttrLang() items = api.content.find(portal_type=['ImprovementArea'], context=self.context) results = [] for (i, project) in enumerate(items): item = project.getObject() results.append( dict(title=getTranslatedWorkingAreaFromID(project.id), url='/'.join(item.getPhysicalPath()), id=item.id, description=item.description, pos=i, portal_type=item.portal_type)) return sorted(results, key=itemgetter('title'), reverse=False)
def all_areas(self): attr_lang = getTitleAttrLang() if self.context.portal_type == 'Project': items = api.content.find(portal_type=['ImprovementArea'], path='/'.join( self.context.getPhysicalPath())) else: items = api.content.find(portal_type=['ImprovementArea']) results = [] for item in items: obj = item.getObject() if obj.image is None: image = obj.absolute_url_path( ) + '/++theme++gwopa.theme/assets/images/default_image.jpg' else: image = obj.absolute_url_path() + '/@@images/image/thumb' results.append( dict(title=getattr(item, attr_lang), image=image, project=obj.aq_parent.Title(), url='/'.join(obj.getPhysicalPath()), description=item.description)) return results
def updateReport(self): if not hasattr(self, 'context'): self.context = self request = getRequest() refresh = request.form.get('refresh', False) if refresh: logger.info('YYY - User: '******'YYY - ' + str(self.context.save_data)) try: project = self.aq_parent.aq_parent except: project = self.context.aq_parent.aq_parent if self.context.save_data and self.context.save_data != "": self.context.save_data['project_overview']['project_name'] = project.title self.context.save_data['project_overview']['project_code'] = project.code self.context.save_data['summary']['progress']['roadblock'] = self.context.overall_project_status == 'roadblock' self.context.save_data['summary']['progress']['potential'] = self.context.overall_project_status == 'potential' self.context.save_data['summary']['progress']['ontrack'] = self.context.overall_project_status == 'ontrack' self.context.save_data['summary']['progress']['stakeholders'] = self.context.progress_stakeholders self.context.save_data['summary']['other'] = self.context.other_additional_challenges self.context.save_data['next_steps'] = self.context.next_steps if not refresh: return self.context.save_data data = {} attr_lang = getTitleAttrLang() project_manager_admin = getProjectManagerAdmin(self) today = datetime.datetime.now() data['project_url'] = project.absolute_url() data['generation_report_date'] = today.strftime('%m/%d/%Y %H:%M:%S') data['project_overview'] = { 'project_name': project.title, 'project_code': project.code, 'reporting_type': utils.getTranslatedMesuringFrequencyFromID(project.measuring_frequency).split(',')[0], 'reporting_period': { 'project_year': self.context.project_year, 'from': self.context.gwopa_year_phases[int(self.context.project_year) - 1]['start'], 'to': self.context.gwopa_year_phases[int(self.context.project_year) - 1]['end'] }, 'author_report': project_manager_admin[0]['fullname'], 'position_report': project_manager_admin[0]['position'], 'currency': utils.project_currency(self), 'water_operators': getProjectWaterOperators(project), # Array 'donors': getProjectDonors(project), # Array 'other_organizations': getProjectOtherOrganizations(project), # Array 'total_budget': "", 'project_location': { 'country': project.country, 'location': project.location }, 'project_duration': { 'start': project.startactual.strftime('%B %d, %Y'), 'end': project.completionactual.strftime('%B %d, %Y') }, 'association': { 'wop_platform': project.wop_platform, 'wop_program': project.wop_program }, 'project_description': project.objectives.output if hasattr(project.objectives, 'output') else '', 'project_image': project.absolute_url() + '/@@images/image' if project.image else None, 'logos': getLogosFirstpage(project), } data['project_overview']['total_budget'] = getTotalBudget( data['project_overview']['water_operators'] + data['project_overview']['donors'] + data['project_overview']['other_organizations']) totalBugdets = float(data['project_overview']['total_budget']) dataChartBudgets = {'chart': {'water_operators': {'series': [], 'colors': []}, 'donors': {'series': [], 'colors': []}, 'other_organizations': {'series': [], 'colors': []}}, 'legend': {'water_operators': [], 'donors': [], 'other_organizations': []}} pos = totalWO = 0 for wo in data['project_overview']['water_operators']: inkind = float(wo['inkind']) if 'inkind' in wo and wo['inkind'] else 0 incash = float(wo['incash']) if 'incash' in wo and wo['incash'] else 0 woValue = inkind + incash totalWO += woValue dataChartBudgets['chart']['water_operators']['series'].append(woValue) color = getHexColor(pos) pos += 1 dataChartBudgets['chart']['water_operators']['colors'].append(color) wo.update({'color': color}) dataChartBudgets['legend']['water_operators'].append(wo) dataChartBudgets['chart']['water_operators']['series'].append(totalBugdets - totalWO) dataChartBudgets['chart']['water_operators']['colors'].append('#F1F1F1') dataChartBudgets['chart']['donors']['series'].append(totalWO) dataChartBudgets['chart']['donors']['colors'].append('#F1F1F1') pos = totalDonors = 0 for donor in data['project_overview']['donors']: inkind = float(donor['inkind']) if 'inkind' in donor and donor['inkind'] else 0 incash = float(donor['incash']) if 'incash' in donor and donor['incash'] else 0 donorsValue = inkind + incash totalDonors += donorsValue dataChartBudgets['chart']['donors']['series'].append(donorsValue) color = getHexColor(pos) pos += 1 dataChartBudgets['chart']['donors']['colors'].append(color) donor.update({'color': color}) dataChartBudgets['legend']['donors'].append(donor) dataChartBudgets['chart']['donors']['series'].append(totalBugdets - totalWO - totalDonors) dataChartBudgets['chart']['donors']['colors'].append('#F1F1F1') dataChartBudgets['chart']['other_organizations']['series'].append(totalWO + totalDonors) dataChartBudgets['chart']['other_organizations']['colors'].append('#F1F1F1') pos = totalOO = 0 for oo in data['project_overview']['other_organizations']: inkind = float(oo['inkind']) if 'inkind' in oo and oo['inkind'] else 0 incash = float(oo['incash']) if 'incash' in oo and oo['incash'] else 0 ooValue = inkind + incash totalOO += ooValue dataChartBudgets['chart']['other_organizations']['series'].append(ooValue) color = getHexColor(pos) pos += 1 dataChartBudgets['chart']['other_organizations']['colors'].append(color) oo.update({'color': color}) dataChartBudgets['legend']['other_organizations'].append(oo) data['project_overview'].update({'chart_budget': dataChartBudgets['chart'], 'chart_budget_legend': dataChartBudgets['legend']}) working_areas = getWorkingAreas(project) data['summary'] = { 'working_areas': ", ".join([utils.getTranslatedWorkingAreaFromID(wa.id) for wa in working_areas]), 'progress': { 'roadblock': self.context.overall_project_status == 'roadblock', 'potential': self.context.overall_project_status == 'potential', 'ontrack': self.context.overall_project_status == 'ontrack', 'stakeholders': self.context.progress_stakeholders }, 'other': self.context.other_additional_challenges } data['activities_outputs'] = {} KEY = "GWOPA_TARGET_YEAR_" + str(self.context.project_year) for wa in working_areas: wa_title = utils.getTranslatedWorkingAreaFromID(wa.id) data['activities_outputs'].update({wa_title: { 'title': wa_title, 'activities': {}, }}) activities = getActivitiesWA(self, wa.getObject()) for activity in activities: activityObj = activity.getObject() activityAnn = IAnnotations(activityObj) activity_title = activityObj.title data['activities_outputs'][wa_title]['activities'].update({activity_title: { 'title': activity_title, 'start': activityObj.start.strftime('%m/%d/%Y'), 'completion': activityObj.end.strftime('%m/%d/%Y'), 'progress_tracker': { 'progress': activityAnn[KEY]['monitoring']['progress'] if 'progress' in activityAnn[KEY]['monitoring'] and activityAnn[KEY]['monitoring']['progress'] else 0, 'real': '100', 'measuring_unit': '%', 'style': '' }, 'description': { 'description': activityObj.description, 'planning': activityObj.initial_situation, 'explanation_progress': activityAnn[KEY]['monitoring']['explanation'] if 'explanation' in activityAnn[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': 'obstacles' in activityAnn[KEY]['monitoring'] and 'Internal organizational' in activityAnn[KEY]['monitoring']['obstacles'], 'external': 'obstacles' in activityAnn[KEY]['monitoring'] and 'External environment' in activityAnn[KEY]['monitoring']['obstacles'], "wop_related": 'obstacles' in activityAnn[KEY]['monitoring'] and 'WOP project - related' in activityAnn[KEY]['monitoring']['obstacles'], }, 'main_contributing': { 'internal': 'contributing' in activityAnn[KEY]['monitoring'] and 'Internal organizational' in activityAnn[KEY]['monitoring']['contributing'], 'external': 'contributing' in activityAnn[KEY]['monitoring'] and 'External environment' in activityAnn[KEY]['monitoring']['contributing'], "wop_related": 'contributing' in activityAnn[KEY]['monitoring'] and 'WOP project - related' in activityAnn[KEY]['monitoring']['contributing'], }, 'explain_limiting': activityAnn[KEY]['monitoring']['limiting'] if 'limiting' in activityAnn[KEY]['monitoring'] else "", 'cosidetation_for_future': activityAnn[KEY]['monitoring']['consideration'] if 'consideration' in activityAnn[KEY]['monitoring'] else "", 'outputs': {} }}) progress = int(data['activities_outputs'][wa_title]['activities'][activity_title]['progress_tracker']['progress']) data['activities_outputs'][wa_title]['activities'][activity_title]['progress_tracker']['style'] = 'transform: translateX(' + str(progress - 100) + '%);' outputs = getOutputsActivity(self, activityObj) for output in outputs: outputObj = output.getObject() outputAnn = IAnnotations(outputObj) output_title = outputObj.title data['activities_outputs'][wa_title]['activities'][activity_title]['outputs'].update({output_title: { 'title': output_title, 'start': outputObj.start.strftime('%m/%d/%Y'), 'completion': outputObj.end.strftime('%m/%d/%Y'), 'progress_tracker': { 'progress': outputAnn[KEY]['planned'] if 'planned' in outputAnn[KEY] and outputAnn[KEY]['planned'] else 0, 'real': outputAnn[KEY]['real'] if 'real' in outputAnn[KEY] and outputAnn[KEY]['real'] else 0, 'measuring_unit': utils.getTranslatedMesuringUnitFromID(outputObj.measuring_unit), 'style': '' }, 'description': { 'description': outputObj.description, 'explanation_progress': outputAnn[KEY]['monitoring']['explanation'] if 'explanation' in outputAnn[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': 'obstacles' in outputAnn[KEY]['monitoring'] and 'Internal organizational' in outputAnn[KEY]['monitoring']['obstacles'], 'external': 'obstacles' in outputAnn[KEY]['monitoring'] and 'External environment' in outputAnn[KEY]['monitoring']['obstacles'], "wop_related": 'obstacles' in outputAnn[KEY]['monitoring'] and 'WOP project - related' in outputAnn[KEY]['monitoring']['obstacles'], }, 'main_contributing': { 'internal': 'contributing' in outputAnn[KEY]['monitoring'] and 'Internal organizational' in outputAnn[KEY]['monitoring']['contributing'], 'external': 'contributing' in outputAnn[KEY]['monitoring'] and 'External environment' in outputAnn[KEY]['monitoring']['contributing'], "wop_related": 'contributing' in outputAnn[KEY]['monitoring'] and 'WOP project - related' in outputAnn[KEY]['monitoring']['contributing'], }, 'explain_limiting': outputAnn[KEY]['monitoring']['limiting'] if 'limiting' in outputAnn[KEY]['monitoring'] else "", 'cosidetation_for_future': outputAnn[KEY]['monitoring']['consideration'] if 'consideration' in outputAnn[KEY]['monitoring'] else "", 'means_of_verification': outputObj.means, }}) try: progress = int(float(data['activities_outputs'][wa_title]['activities'][activity_title]['outputs'][output_title]['progress_tracker']['real']) / float(data['activities_outputs'][wa_title]['activities'][activity_title]['outputs'][output_title]['progress_tracker']['progress']) * 100) except: progress = 0 data['activities_outputs'][wa_title]['activities'][activity_title]['outputs'][output_title]['progress_tracker']['style'] = 'transform: translateX(' + str(progress - 100) + '%);' data['outcomes'] = {'dash_info': getItems(project), 'list': {}} outcomes = getOutcomes(project) for outcome in outcomes: outcomeObj = outcome.getObject() annotations = IAnnotations(outcomeObj) outcome_title = getTranslatedOutcomesFromTitle(outcomeObj.title) data['outcomes']['list'].update({outcome_title: { 'title': outcome_title, 'zone': outcomeObj.zone, 'baseline_date': outcomeObj.baseline_date.strftime('%Y-%m'), 'baseline_value': outcomeObj.baseline, 'target_value_real': annotations[KEY]['real'] if 'real' in annotations[KEY] and annotations[KEY]['real'] else 0, 'target_value_planned': annotations[KEY]['planned'] if 'planned' in annotations[KEY] and annotations[KEY]['planned'] else 0, 'target_value_style': '', 'description': { 'description': outcomeObj.description, 'explanation_progress': annotations[KEY]['monitoring']['explanation'] if 'explanation' in annotations[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': 'obstacles' in annotations[KEY]['monitoring'] and 'Internal organizational' in annotations[KEY]['monitoring']['obstacles'], 'external': 'obstacles' in annotations[KEY]['monitoring'] and 'External environment' in annotations[KEY]['monitoring']['obstacles'], "wop_related": 'obstacles' in annotations[KEY]['monitoring'] and 'WOP project - related' in annotations[KEY]['monitoring']['obstacles'], }, 'main_contributing': { 'internal': 'contributing' in annotations[KEY]['monitoring'] and 'Internal organizational' in annotations[KEY]['monitoring']['contributing'], 'external': 'contributing' in annotations[KEY]['monitoring'] and 'External environment' in annotations[KEY]['monitoring']['contributing'], "wop_related": 'contributing' in annotations[KEY]['monitoring'] and 'WOP project - related' in annotations[KEY]['monitoring']['contributing'], }, 'explain_contributed': annotations[KEY]['monitoring']['limiting'] if 'limiting' in annotations[KEY]['monitoring'] else "", 'consideration': annotations[KEY]['monitoring']['consideration'] if 'consideration' in annotations[KEY]['monitoring'] else "", 'means_of_verification': outcomeObj.means, # TODO ??? }}) try: progress = int(float(data['outcomes']['list'][outcome_title]['target_value_real']) / float(data['outcomes']['list'][outcome_title]['target_value_planned']) * 100) except: progress = 0 data['outcomes']['list'][outcome_title]['target_value_style'] = 'transform: translateX(' + str(progress - 100) + '%);' data['outcomes_capacity'] = {} for wa in working_areas: wa_title = utils.getTranslatedWorkingAreaFromID(wa.id) wa_object = wa.getObject() data['outcomes_capacity'].update({wa_title: { 'title': wa_title, 'getCurrentStage': getCurrentStage(wa_object, self.context.project_year), 'getOutcomeCC': getOutcomeCC(wa_object, self.context.project_year), 'capacities': {}, }}) outcomecc = getOutcomesCapacityWA(wa_object)[0] annotations = IAnnotations(outcomecc.getObject()) for capacity in annotations[KEY]['monitoring']: if 'selected' in capacity['selected_specific']: capacity_title = getTitleSpecific(capacity) data['outcomes_capacity'][wa_title]['capacities'].update({capacity_title: { 'title': capacity_title, 'degree_changes': capacity['degree_changes'] if 'degree_changes' in capacity and capacity['degree_changes'] else '', 'contributed_project': capacity['contributed_project'] if 'contributed_project' in capacity and capacity['contributed_project'] else '', 'consensus': capacity['consensus'] if 'consensus' in capacity and capacity['consensus'] else '', 'main_obstacles': { 'internal': 'obstacles' in capacity and 'Internal organizational' in capacity['obstacles'], 'external': 'obstacles' in capacity and 'External environment' in capacity['obstacles'], "wop_related": 'obstacles' in capacity and 'WOP project - related' in capacity['obstacles'], }, 'main_contributing': { 'internal': 'contributing_factors' in capacity and 'Internal organizational' in capacity['contributing_factors'], 'external': 'contributing_factors' in capacity and 'External environment' in capacity['contributing_factors'], "wop_related": 'contributing_factors' in capacity and 'WOP project - related' in capacity['contributing_factors'], }, 'explain': capacity['explain'], 'means_of_verification': "", # TODO ??? }}) data['budget'] = { 'planned_activities': {}, 'total_budget': "", } allActivities = api.content.find( portal_type=['Activity'], context=project) for activity in allActivities: title = '[' + getattr(activityObj.aq_parent, attr_lang.lower()) + '] ' + activity.Title activityObj = activity.getObject() data['budget']['planned_activities'].update({title: { 'title': title, 'wa_title': utils.getTranslatedWorkingAreaFromID(activityObj.aq_parent.id), 'act_title': activity.Title, 'assigned_budget': activityObj.budget }}) if not refresh: data['budget']['planned_activities'][title].update({'expenditure_reporting_period': ''}) data['budget']['planned_activities'][title].update({'total_expenditure_date': ''}) else: data['budget']['planned_activities'][title].update({'expenditure_reporting_period': self.context.save_data['budget']['planned_activities'][title]['expenditure_reporting_period'] if 'expenditure_reporting_period' in data['budget']['planned_activities'][title] else ''}) data['budget']['planned_activities'][title].update({'total_expenditure_date': self.context.save_data['budget']['planned_activities'][title]['total_expenditure_date'] if 'total_expenditure_date' in data['budget']['planned_activities'][title] else ''}) data['budget']['total_budget'] = getTotalAssignedBudget(data['budget']['planned_activities']) data['next_steps'] = self.context.next_steps self.context.save_data = data return data
def reportData(self): data = {} attr_lang = getTitleAttrLang() project_manager_admin = self.getProjectManagerAdmin() today = datetime.datetime.now() data['generation_report_date'] = today.strftime('%m/%d/%Y %H:%M:%S') data['project_overview'] = { 'project_name': self.context.title, 'project_code': "", # empty 'reporting_type': utils.getTranslatedMesuringFrequencyFromID( self.context.measuring_frequency), 'reporting_period': { 'project_year': self.getYear(), 'from': self.getFaseStart(), # TODO ??? 'to': self.getFaseEnd() # TODO ???? }, 'author_report': project_manager_admin[0]['fullname'], # TODO ??? 'position_report': project_manager_admin[0]['position'], # TODO ??? 'currency': utils.project_currency(self), 'water_operators': self.getProjectWaterOperators(), # Array 'donors': self.getProjectDonors(), # Array 'other_organizations': self.getProjectOtherOrganizations(), # Array 'total_budget': "", 'project_location': { 'country': self.context.country, 'location': self.context.location }, 'project_duration': { 'start': self.context.startactual.strftime('%m/%d/%Y'), 'end': self.context.completionactual.strftime('%m/%d/%Y') }, 'association': { 'wop_platform': self.context.wop_platform, 'wop_program': self.context.wop_program }, 'project_description': self.context.objectives, } data['project_overview']['total_budget'] = self.getTotalBudget( data['project_overview']['water_operators'] + data['project_overview']['donors'] + data['project_overview']['other_organizations']) working_areas = self.getWorkingAreas() data['summary'] = { 'working_areas': ", ".join([getattr(wa, attr_lang) for wa in working_areas]), 'progress': "", # empty 'other': "" # empty } data['activities_outputs'] = {} KEY = "GWOPA_TARGET_YEAR_" + str(self.year) for wa in working_areas: wa_title = getattr(wa, attr_lang) data['activities_outputs'].update( {wa_title: { 'title': wa_title, 'activities': {}, }}) activities = self.getActivitiesWA(wa.getObject()) for activity in activities: activityObj = activity.getObject() activityAnn = IAnnotations(activityObj) activity_title = activityObj.title data['activities_outputs'][wa_title]['activities'].update({ activity_title: { 'title': activity_title, 'start': activityObj.start.strftime('%m/%d/%Y'), 'completion': activityObj.end.strftime('%m/%d/%Y'), 'progress_tracker': { 'progress': activityAnn[KEY]['monitoring']['progress'] if 'progress' in activityAnn[KEY]['monitoring'] else "", 'real': '100', 'measuring_unit': '%', }, 'description': { 'description': activityObj.description, 'planning': activityObj.initial_situation, 'explanation_progress': activityAnn[KEY]['monitoring']['explanation'] if 'explanation' in activityAnn[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': "X" if 'obstacles' in activityAnn[KEY]['monitoring'] and 'Internal organizational' in activityAnn[KEY]['monitoring']['obstacles'] else "", 'external': "X" if 'obstacles' in activityAnn[KEY]['monitoring'] and 'External environment' in activityAnn[KEY]['monitoring']['obstacles'] else "", "wop_related": "X" if 'obstacles' in activityAnn[KEY]['monitoring'] and 'WOP project - related' in activityAnn[KEY]['monitoring']['obstacles'] else "", }, 'main_contributing': { 'internal': "X" if 'contributing' in activityAnn[KEY]['monitoring'] and 'Internal organizational' in activityAnn[KEY]['monitoring']['contributing'] else "", 'external': "X" if 'contributing' in activityAnn[KEY]['monitoring'] and 'External environment' in activityAnn[KEY]['monitoring']['contributing'] else "", "wop_related": "X" if 'contributing' in activityAnn[KEY]['monitoring'] and 'WOP project - related' in activityAnn[KEY]['monitoring']['contributing'] else "", }, 'explain_limiting': activityAnn[KEY]['monitoring']['limiting'] if 'limiting' in activityAnn[KEY]['monitoring'] else "", 'cosidetation_for_future': activityAnn[KEY]['monitoring']['consideration'] if 'consideration' in activityAnn[KEY]['monitoring'] else "", 'means_of_verification': "", # TODO ??? 'outputs': {} } }) outputs = self.getOutputsActivity(activityObj) for output in outputs: outputObj = output.getObject() outputAnn = IAnnotations(outputObj) output_title = outputObj.title data['activities_outputs'][wa_title]['activities'][ activity_title]['outputs'].update({ output_title: { 'title': output_title, 'start': outputObj.start.strftime('%m/%d/%Y'), 'completion': outputObj.end.strftime('%m/%d/%Y'), 'progress_tracker': { 'progress': outputAnn[KEY]['planned'], 'real': outputAnn[KEY]['real'], 'measuring_unit': utils.getTranslatedMesuringUnitFromID( outputObj.measuring_unit), }, 'description': { 'description': outputObj.description, 'explanation_progress': outputAnn[KEY]['monitoring']['explanation'] if 'explanation' in outputAnn[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': "X" if 'obstacles' in outputAnn[KEY]['monitoring'] and 'Internal organizational' in outputAnn[KEY]['monitoring']['obstacles'] else "", 'external': "X" if 'obstacles' in outputAnn[KEY]['monitoring'] and 'External environment' in outputAnn[KEY]['monitoring']['obstacles'] else "", "wop_related": "X" if 'obstacles' in outputAnn[KEY]['monitoring'] and 'WOP project - related' in outputAnn[KEY]['monitoring']['obstacles'] else "", }, 'main_contributing': { 'internal': "X" if 'contributing' in outputAnn[KEY]['monitoring'] and 'Internal organizational' in outputAnn[KEY] ['monitoring']['contributing'] else "", 'external': "X" if 'contributing' in outputAnn[KEY]['monitoring'] and 'External environment' in outputAnn[KEY] ['monitoring']['contributing'] else "", "wop_related": "X" if 'contributing' in outputAnn[KEY]['monitoring'] and 'WOP project - related' in outputAnn[KEY] ['monitoring']['contributing'] else "", }, 'explain_limiting': outputAnn[KEY]['monitoring']['limiting'] if 'limiting' in outputAnn[KEY]['monitoring'] else "", 'cosidetation_for_future': outputAnn[KEY]['monitoring']['consideration'] if 'consideration' in outputAnn[KEY]['monitoring'] else "", 'means_of_verification': "", # TODO ??? } }) data['outcomes'] = {} outcomes = self.getOutcomes() for outcome in outcomes: outcomeObj = outcome.getObject() annotations = IAnnotations(outcomeObj) outcome_title = getattr(outcome, attr_lang) data['outcomes'].update({ outcome_title: { 'title': outcome_title, 'zone': outcomeObj.zone, 'baseline_date': outcomeObj.baseline_date.strftime('%Y-%m'), 'baseline_value': outcomeObj.baseline, 'target_value_real': annotations[KEY]['real'], 'target_value_planned': annotations[KEY]['planned'], 'description': { 'description': outcomeObj.description, 'explanation_progress': annotations[KEY]['monitoring']['explanation'] if 'explanation' in annotations[KEY]['monitoring'] else "", }, 'main_obstacles': { 'internal': "X" if 'obstacles' in annotations[KEY]['monitoring'] and 'Internal organizational' in annotations[KEY]['monitoring']['obstacles'] else "", 'external': "X" if 'obstacles' in annotations[KEY]['monitoring'] and 'External environment' in annotations[KEY]['monitoring']['obstacles'] else "", "wop_related": "X" if 'obstacles' in annotations[KEY]['monitoring'] and 'WOP project - related' in annotations[KEY]['monitoring']['obstacles'] else "", }, 'main_contributing': { 'internal': "X" if 'contributing' in annotations[KEY]['monitoring'] and 'Internal organizational' in annotations[KEY]['monitoring']['contributing'] else "", 'external': "X" if 'contributing' in annotations[KEY]['monitoring'] and 'External environment' in annotations[KEY]['monitoring']['contributing'] else "", "wop_related": "X" if 'contributing' in annotations[KEY]['monitoring'] and 'WOP project - related' in annotations[KEY]['monitoring']['contributing'] else "", }, 'explain_contributed': annotations[KEY]['monitoring']['limiting'] if 'limiting' in annotations[KEY]['monitoring'] else "", 'consideration': annotations[KEY]['monitoring']['consideration'] if 'consideration' in annotations[KEY]['monitoring'] else "", 'means_of_verification': outcomeObj.means, # TODO ??? } }) data['outcomes_capacity'] = {} for wa in working_areas: wa_title = getattr(wa, attr_lang) data['outcomes_capacity'].update( {wa_title: { 'title': wa_title, 'capacities': {}, }}) outcomecc = self.getOutcomesCapacityWA(wa.getObject())[0] annotations = IAnnotations(outcomecc.getObject()) for capacity in annotations[KEY]['monitoring']: if 'selected' in capacity['selected_specific']: capacity_title = self.getTitleSpecific(capacity) data['outcomes_capacity'][wa_title]['capacities'].update({ capacity_title: { 'title': capacity_title, 'consensus': capacity['consensus'], 'main_obstacles': { 'internal': "X" if 'obstacles' in capacity and 'Internal organizational' in capacity['obstacles'] else "", 'external': "X" if 'obstacles' in capacity and 'External environment' in capacity['obstacles'] else "", "wop_related": "X" if 'obstacles' in capacity and 'WOP project - related' in capacity['obstacles'] else "", }, 'main_contributing': { 'internal': "X" if 'contributing_factors' in capacity and 'Internal organizational' in capacity['contributing_factors'] else "", 'external': "X" if 'contributing_factors' in capacity and 'External environment' in capacity['contributing_factors'] else "", "wop_related": "X" if 'contributing_factors' in capacity and 'WOP project - related' in capacity['contributing_factors'] else "", }, 'explain': capacity['explain'], 'means_of_verification': "", # TODO ??? } }) data['budget'] = { 'planned_activities': [], 'total_budget': "", } allActivities = api.content.find(portal_type=['Activity'], context=self.context) for activity in allActivities: activityObj = activity.getObject() data['budget']['planned_activities'].append({ 'wa_title': getattr(activityObj.aq_parent, attr_lang.lower()), 'title': activity.Title, 'assigned_budget': activityObj.budget, }) data['budget']['total_budget'] = self.getTotalAssignedBudget( data['budget']['planned_activities']) return data