Example #1
0
 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
Example #2
0
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)
Example #3
0
 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)
Example #4
0
 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
Example #5
0
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
Example #6
0
    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