def add_main_page_report(res):
    yield from res
    row = dict(
        doc_id='reports/ngos-main-page',
        key='ngos-main-page',
        details=dict(
            total_active_cities=get_total_cities(),
            total_active_orgs=get_total_orgs(),
            total_active_foas=get_total_foas(),
            total_received=get_total_received(),
            district_totals=get_district_totals(),
            foa_stats=json.load(open('ngo-foa-circle-pack.json'))
        ),
        charts=[
            {
                'type': 'adamkey',
                'chart': {
                    'values': [
                        dict(
                            label=x['payer'],
                            amount=x['amount'],
                            amount_fmt=format_number(x['amount']),
                        )
                        for x in get_total_payer_amounts()
                    ]
                }                
            }
        ]
    )
    yield row
def process_row(row, *_):
    id = row['id']
    kind = row['kind']
    charts = []
    if kind in ('association'):
        charts.append({
                'title': 'מיהו הארגון?',
                'long_title': 'מיהו הארגון',
                'type': 'vertical',
                'chart': {
                    'parts': [
                        {
                            'type': 'template',
                            'template_id': 'org_status'                            
                        },
                    ]
                }
        })

    if kind == 'association':
        foa = row['details']['field_of_activity']
        foad = row['details']['field_of_activity_display']
        num_of_employees = row['details']['num_of_employees']
        num_of_volunteers = row['details']['num_of_volunteers']
        last_report_year = row['details']['last_report_year']
        num_unreported = unreported_turnover_associations(foa)
        reported_list = reported_turnover_associations(foa)
        selected_index = [i for i, x in enumerate(reported_list) if x['id'] == row['id']]
        if len(selected_index) > 0:
            selected_index = selected_index[0]
        else:
            selected_index = None
        salaries = row['details']['top_salaries']
        if salaries:
            top_salary = salaries[0]['salary']
        else:
            top_salary = None
        median_turnover_in_field_of_activity = row['details'].get('median_turnover_in_field_of_activity')
        median_top_salary = row['details'].get('median_top_salary')
        yearly_turnover = row['details'].get('yearly_turnover')
        if None not in (median_turnover_in_field_of_activity, yearly_turnover, last_report_year):
            charts[-1]['chart']['parts'].append(
                {
                    'type': 'comparatron',
                    'title': 'המחזור הכספי המדווח לארגון בשנת {}: {}'.format(last_report_year, format_number(yearly_turnover)),
                    'chart': {
                        'main': {
                            'amount': yearly_turnover,
                            'amount_fmt': format_number(yearly_turnover),
                            'label': str(last_report_year),
                            'color': '#FFAE90'
                        },
                        'compare': {
                            'amount': median_turnover_in_field_of_activity,
                            'amount_fmt': format_number(median_turnover_in_field_of_activity),
                            'label': '''
                            <span class='bk-tooltip-anchor'>חציון בתחום {foad}<span class='bk-tooltip'>
                            מבוסס על נתוני כל הארגונים הפעילים בתחום {foad} אשר דיווחו על גובה המחזור הכספי באחת, או יותר, משלוש השנים האחרונות.
                            </span></span>'''.format(foad=foad)
                        },
                    }
                }
            )
    spending_analysis = get_spending_analysis(row['id'])
    if spending_analysis:
        title = 'מהן ההכנסות מהממשלה?' if kind =='company' else 'מקבל כספי ממשלה?'
        charts.append({
                'title': title,
                'long_title': 'האם הארגון מקבל כספי ממשלה?',
                'description': '''
                <span class='bk-tooltip-anchor'>
                התקשרויות ותמיכות<span class='bk-tooltip'>
                התקשרות היא הסכם בין המשרד הממשלתי לגורם אחר,
                    במסגרתו מתחייב הגורם האחר לספק למשרד הממשלתי שירותים או מוצרים בתמורה לתשלום.
                    <br/>
                תמיכה ממשלתית היא סיוע, בכסף ובשווה כסף, שממשלת ישראל מעבירה לגורמים חוץ ממשלתיים 
                במטרה לסייע במימון פעילות אשר היא מעוניינת לעודד את קיומה ואשר משרתת את אוכלוסייתה.
                </span></span>
                    לפי משרדים, הנתונים כוללים העברות המתועדות במקורות המידע הזמינים מכל השנים.''',
                'type': 'spendomat',
                'chart': {
                    'data': spending_analysis
                }
        })

    if row['kind'] == 'association':
        charts.append({
                'title': 'אילו אישורים?',
                'long_title': 'אישורים והכרה בארגון',
                'type': 'template',
                'template_id': 'org_credentials'
        })
        parts = []
        if None not in (num_of_employees, 
                        num_of_volunteers,
                        last_report_year):
            parts.append({
                            'type': 'pointatron',
                            'title': 'מספר העובדים והמתנדבים בארגון בשנת {}'.format(last_report_year),
                            'chart': {
                                'values': [
                                    {
                                        'title': 'מספר עובדים',
                                        'amount': num_of_employees,
                                        'color': '#6F46E0'
                                    },
                                    {
                                        'title': 'מספר מתנדבים',
                                        'amount': num_of_volunteers,
                                        'color': '#FE8255'
                                    },
                                ]
                            }
                        })
        if None not in (last_report_year, top_salary, median_top_salary, foad):
            parts.append({
                            'type': 'comparatron',
                            'title': 'שכר השנתי הגבוה בארגון בשנת {}'.format(last_report_year),
                            'description': '*הנתונים מבוססים ומחושבים על בסיס המידע הזמין ומוצג ב<a href="http://www.guidestar.org.il/he/organization/{}" target="_blank">אתר גיידסטאר</a>'.format(id),
                            'chart': {
                                'main': {
                                    'amount': top_salary,
                                    'amount_fmt': format_number(top_salary),
                                    'label': 'מקבל השכר הגבוה בארגון',
                                    'color': '#FFAE90'
                                },
                                'compare': {
                                    'amount': median_top_salary,
                                    'amount_fmt': format_number(median_top_salary),
                                    'label': '''
                                    <span class='bk-tooltip-anchor'>חציון בתחום {foad}<span class='bk-tooltip'>
                                    מבוסס על נתוני כל הארגונים הפעילים בתחום {foad} אשר דיווחו על גובה השכר באחת, או יותר, משלוש השנים האחרונות.
                                    </span></span>'''.format(foad=foad)
                                },
                            }
                        })
        if len(parts) > 0:
            charts.append({
                'title': 'כמה עובדים ומתנדבים?',
                'long_title': 'כמה עובדים ומתנדבים בארגון',
                'type': 'vertical',
                'chart': {
                    'parts': parts
                }
            })
        if foad is not None:
            charts.append({
                    'title': 'ארגונים נוספים בתחום',
                    'long_title': 'ארגונים הפועלים בתחום {}, לפי גובה המחזור הכספי השנתי'.format(foad),
                    'description': '{} ארגונים נוספים הפועלים בתחום לא דיווחו על על גובה המחזור הכספי השנתי'
                                        .format(num_unreported),
                    'type': 'adamkey',
                    'chart': {
                        'values': [dict(
                            label='<a href="/i/org/association/{}?theme=budgetkey">{}</a>'.format(x['id'], x['name']),
                            amount=x['amount'],
                            amount_fmt=format_number(x['amount']),
                        )
                        for x in reported_list],
                        'selected': selected_index
                    }
            })
    row['charts'] = charts

    return row
def process_row(row, *_):
    if row['key'].startswith('ngo-activity-report'):
        details = row['details']
        foa = details['field_of_activity']
        foad = details['field_of_activity_display']
        spending_analysis = get_spending_analysis(foa)
        row['charts'] = [{
            'title':
            'מי פעיל/ה ואיפה',
            'description':
            '*ארגונים שדיווחו על כמה אזורי פעילות נספרים במחוזות השונים',
            'subcharts': [
                {
                    'title':
                    'ארגונים: <span class="figure">{}</span>'.format(
                        details['report'].get('total',
                                              {}).get('total_amount', 0)),
                    'long_title':
                    'מספר הארגונים הפעילים בתחום {} לפי מחוז'.format(foad),
                    'type':
                    'horizontal-barchart',
                    'chart': {
                        'values': [
                            dict(
                                label=
                                '<a href="//next.obudget.org/i/reports/ngo-district-report/{0}?theme=budgetkey">{0}</a>'
                                .format(x[0]),
                                value=x[1])
                            for x in details['report'].get('total', {}).get(
                                'association_activity_region_districts', [])
                        ]
                    }
                },
                {
                    'title':
                    '''בעלי
                        <span class='bk-tooltip-anchor'>אישור ניהול תקין<span class='bk-tooltip'>
אישור ניהול תקין מרשם העמותות הוא תנאי לקבלת תמיכה מהמדינה.
 על מנת לקבל אישור ניהול תקין נדרש הארגון לעמוד בדרישות מחמירות יותר מאשר הדרישות הקיימות בחוק העמותות.                        
                        </span></span>: 
                         <span class="figure">{}</span>'''.format(
                        details['report'].get('proper_management',
                                              {}).get('total_amount', 0)),
                    'long_title':
                    'מספר הארגונים הפעילים בתחום {} לפי מחוז'.format(foad),
                    'type':
                    'horizontal-barchart',
                    'chart': {
                        'values': [
                            dict(
                                label=
                                '<a href="//next.obudget.org/i/reports/ngo-district-report/{0}?theme=budgetkey">{0}</a>'
                                .format(x[0]),
                                value=x[1]) for x in
                            details['report'].get('proper_management', {}).get(
                                'association_activity_region_districts', [])
                        ]
                    }
                },
                {
                    'title':
                    '''בעלי
                        <span class='bk-tooltip-anchor'>סעיף 46<span class='bk-tooltip'>
סעיף 46 לפקודת מס ההכנסה מגדיר כי תרומה לארגונים
 המוכרים כארגונים לתועלת הציבור, מעניקה זיכוי בסך 35% מסכום התרומה.
                        </span></span>: 
                         
                         <span class="figure">{}</span>'''.format(
                        details['report'].get('has_article_46',
                                              {}).get('total_amount', 0)),
                    'long_title':
                    'מספר הארגונים הפעילים בתחום {} לפי מחוז'.format(foad),
                    'type':
                    'horizontal-barchart',
                    'chart': {
                        'values': [
                            dict(
                                label=
                                '<a href="//next.obudget.org/i/reports/ngo-district-report/{0}?theme=budgetkey">{0}</a>'
                                .format(x[0]),
                                value=x[1]) for x in
                            details['report'].get('has_article_46', {}).get(
                                'association_activity_region_districts', [])
                        ]
                    }
                },
            ]
        }, {
            'title':
            'מי מקבל/ת כספי ממשלה, וכמה?',
            'long_title':
            'אילו ארגונים בתחום {} מקבלים כספי ממשלה, וכמה?'.format(
                details['field_of_activity_display']),
            'description':
            'כספי ממשלה שהועברו לארגונים הפעילים בתחום בשלוש השנים האחרונות',
            'subcharts': [
                {
                    'title':
                    'סה״כ כספי ממשלה' +
                    '<br/><span class="figure">{}</span>'.format(
                        format_number(details['income_total'])),
                    'type':
                    'adamkey',
                    'chart': {
                        'values': [
                            dict(
                                label='<a href="/i/{}?theme=budgetkey">{}</a>'.
                                format(x['doc_id'], x['name']),
                                amount=x['amount'],
                                amount_fmt=format_number(x['amount']),
                            ) for x in details['income_list']
                        ]
                    }
                },
                {
                    'title':
                    'סך התקשרויות ממשלתיות מדווחות' +
                    '<br/><span class="figure">{}</span>'.format(
                        format_number(details['income_total_contracts'])),
                    'type':
                    'adamkey',
                    'chart': {
                        'values': [
                            dict(
                                label='<a href="/i/{}?theme=budgetkey">{}</a>'.
                                format(x['doc_id'], x['name']),
                                amount=x['amount'],
                                amount_fmt=format_number(x['amount']),
                            ) for x in details['income_list_contracts']
                        ]
                    }
                },
                {
                    'title':
                    'סך התמיכות הממשלתיות המדווחות' +
                    '<br/><span class="figure">{}</span>'.format(
                        format_number(details['income_total_supports'])),
                    'type':
                    'adamkey',
                    'chart': {
                        'values': [
                            dict(
                                label='<a href="/i/{}?theme=budgetkey">{}</a>'.
                                format(x['doc_id'], x['name']),
                                amount=x['amount'],
                                amount_fmt=format_number(x['amount']),
                            ) for x in details['income_list_supports']
                        ]
                    }
                },
            ]
        }, {
            'title': 'במה מושקע הכסף הממשלתי?',
            'description': '''
                <span class='bk-tooltip-anchor'>
                הנתונים המוצגים כוללים את העברות הכספים המתועדות במקורות המידע שלנו בשלוש השנים האחרונות
                <span class='bk-tooltip'>
העברות הכספים הממשלתיות מבוססות על דו"חות ההתקשרויות הרבעוניים של גופי הממשלה.
 למידע מעודכן בנוגע לגופים שעמדו והפרו את חובת הפרסום, ראו אתר היחידה לחופש המידע במשרד המשפטים.
                </span>
                </span>
                ''',
            'type': 'spendomat',
            'chart': {
                'data': spending_analysis
            }
        }]
        row['others'] = [x for x in all_foas if x != foa]

    elif row['key'].startswith('ngo-district-report'):
        details = row['details']
        district = details['district']
        row['charts'] = [
            {
                'title':
                'מספר הארגונים הפעילים במחוז {} לפי תחום'.format(district),
                'subcharts': [
                    {
                        'title':
                        'סה״כ ארגונים באזור: <span class="figure">{}</span>'.
                        format(details['report'].get('total',
                                                     {}).get('count', 0)),
                        'type':
                        'horizontal-barchart',
                        'chart': {
                            'values': [
                                dict(
                                    label=
                                    '<a href="//next.obudget.org/i/reports/ngo-activity-report/{0}?theme=budgetkey">{0}</a>'
                                    .format(x[0]),
                                    value=x[1]) for x in details['report'].get(
                                        'total', {}).get('activities', [])
                            ]
                        }
                    },
                    {
                        'title':
                        'סה״כ ארגונים עם אישור ניהול תקין: <span class="figure">{}</span>'
                        .format(details['report'].get('proper_management',
                                                      {}).get('count', 0)),
                        'type':
                        'horizontal-barchart',
                        'chart': {
                            'values': [
                                dict(
                                    label=
                                    '<a href="//next.obudget.org/i/reports/ngo-activity-report/{0}?theme=budgetkey">{0}</a>'
                                    .format(x[0]),
                                    value=x[1]) for x in details['report'].get(
                                        'proper_management', {}).get(
                                            'activities', [])
                            ]
                        }
                    },
                    {
                        'title':
                        'סה״כ ארגונים עם אישור 46: <span class="figure">{}</span>'
                        .format(details['report'].get('has_article_46',
                                                      {}).get('count', 0)),
                        'type':
                        'horizontal-barchart',
                        'chart': {
                            'values': [
                                dict(
                                    label=
                                    '<a href="//next.obudget.org/i/reports/ngo-activity-report/{0}?theme=budgetkey">{0}</a>'
                                    .format(x[0]),
                                    value=x[1]) for x in details['report'].get(
                                        'has_article_46', {}).get(
                                            'activities', [])
                            ]
                        }
                    },
                ]
            },
        ]
        row['others'] = [x for x in all_districts if x != district]

    return row