コード例 #1
0
def customize_project_project(**attr):
    """
        Customize project_project controller
    """

    s3db = current.s3db
    s3 = current.response.s3
    tablename = "project_project"
    # Load normal model
    table = s3db[tablename]

    # Custom Components
    add_component = s3db.add_component
    add_component("project_drrpp",
                  project_project=Storage(joinby="project_id", multiple=False))
    add_component("project_output", project_project="project_id")

    # Custom CRUD Strings
    crud_strings = s3.crud_strings
    crud_strings.project_project.title_search = T("Project List")

    # Custom Fields
    table.name.label = T("Project Title")
    s3db.project_project.budget.label = T("Total Funding (USD)")
    location_id = s3db.project_location.location_id
    location_id.label = ""
    # Limit to just Countries
    location_id.requires = s3db.gis_country_requires
    # Use dropdown, not AC
    location_id.widget = None
    # In DRRPP this is a free field
    table = s3db.project_organisation
    table.comments.label = T("Role")
    table.comments.widget = SQLFORM.widgets.string.widget
    table.amount.label = T("Amount")
    table = s3db.doc_document
    table.file.widget = lambda field, value, download_url: \
        SQLFORM.widgets.upload.widget(field, value, download_url, _size = 15)
    table.comments.widget = SQLFORM.widgets.string.widget

    # Custom dataTable
    s3["dataTable_sDom"] = 'ripl<"dataTable_table"t>p'

    # Don't show export buttons for XLS/XML
    s3.formats = Storage(xls=None, xml=None)

    # Remove rheader
    attr["rheader"] = None

    # Custom PreP
    standard_prep = s3.prep

    def custom_prep(r):
        # Call standard prep
        if callable(standard_prep):
            result = standard_prep(r)
            if not result:
                return False

        if r.interactive:
            # Don't show Update/Delete button on Search table
            if r.method == "search":
                s3db.configure(tablename, editable=False, deletable=False)

            # JS to show/hide Cook Island fileds
            s3.scripts.append("/%s/static/themes/DRRPP/js/drrpp.js" %
                              current.request.application)

        elif r.representation == "xls":
            # All readable Fields should be exported
            list_fields = [
                "id",
                "name",
                "code",
                "status_id",
                "start_date",
                "end_date",
                "drrpp.duration",
                (T("Countries"), "location.location_id"),
                "drrpp.L1",
                (T("Hazards"), "hazard.name"),
                (T("Themes"), "theme.name"),
                "objectives",
                "drrpp.activities",
                "output.name",
                "drr.hfa",
                "drrpp.rfa",
                "drrpp.pifacc",
                "drrpp.jnap",
                (T("Lead Organization"), "organisation_id"),
                (T("Partners"), "partner.organisation_id"),
                (T("Donors"), "donor.organisation_id"),
                "budget",
                "currency",
                "drrpp.focal_person",
                "drrpp.organisation_id",
                "drrpp.email",
                "url.url",
                "drrpp.parent_project",
                "comments",
            ]
            s3db.configure(tablename, list_fields=list_fields)
        return True

    s3.prep = custom_prep

    # Custom List Fields
    list_fields = [
        "id",
        "name",
        "start_date",
        (T("Countries"), "location.location_id"),
        (T("Hazards"), "hazard.name"),
        (T("Lead Organization"), "organisation_id"),
        (T("Donors"), "donor.organisation_id"),
    ]

    # Custom Search Fields
    S3SearchSimpleWidget = s3search.S3SearchSimpleWidget
    S3SearchOptionsWidget = s3search.S3SearchOptionsWidget
    status_search_widget = S3SearchOptionsWidget(
        name="project_search_status",
        label=T("Status"),
        field="status_id",
        cols=4,
    )
    simple = [
        S3SearchSimpleWidget(
            name="project_search_text_advanced",
            label=T("Search Projects"),
            comment=T("Search for a Project by name, code, or description."),
            field=[
                "name",
                "code",
                "description",
                "location.location_id",
                "hazard.name",
                "theme.name",
            ]),
        status_search_widget,
    ]

    project_hfa_opts = s3db.project_hfa_opts()
    hfa_options = {}
    #hfa_options = {None:NONE} To search NO HFA
    for key in project_hfa_opts.keys():
        hfa_options[key] = "HFA %s" % key

    project_rfa_opts = s3db.project_rfa_opts()
    rfa_options = {}
    #rfa_options = {None:NONE} To search NO RFA
    for key in project_rfa_opts.keys():
        rfa_options[key] = "RFA %s" % key

    project_pifacc_opts = s3db.project_pifacc_opts()
    pifacc_options = {}
    #pifacc_options = {None:NONE} To search NO pifacc
    for key in project_pifacc_opts.keys():
        pifacc_options[key] = "PIFACC %s" % key

    project_jnap_opts = s3db.project_jnap_opts()
    jnap_options = {}
    #jnap_options = {None:NONE} To search NO jnap
    for key in project_jnap_opts.keys():
        jnap_options[key] = "JNAP %s" % key

    advanced = [
        S3SearchOptionsWidget(name="project_search_location",
                              label=T("Country"),
                              field="location.location_id",
                              cols=3),
        S3SearchOptionsWidget(name="project_search_L1",
                              label=T("Cook Islands"),
                              field="drrpp.L1",
                              cols=3),
        S3SearchOptionsWidget(name="project_search_hazard",
                              label=T("Hazard"),
                              field="hazard.id",
                              options=s3db.project_hazard_opts,
                              help_field=s3db.project_hazard_helps,
                              cols=4),
        S3SearchOptionsWidget(
            name="project_search_theme",
            label=T("Theme"),
            field="theme.id",
            options=s3db.project_theme_opts,
            help_field=s3db.project_theme_helps,
            cols=4,
            # Don't group
            size=30),
        S3SearchOptionsWidget(name="project_search_hfa",
                              label=T("HFA"),
                              field="drr.hfa",
                              options=hfa_options,
                              help_field=project_hfa_opts,
                              cols=5),
        S3SearchOptionsWidget(name="project_search_rfa",
                              label=T("RFA"),
                              field="drrpp.rfa",
                              options=rfa_options,
                              help_field=project_rfa_opts,
                              cols=6),
        S3SearchOptionsWidget(name="project_search_pifacc",
                              label=T("PIFACC"),
                              field="drrpp.pifacc",
                              options=pifacc_options,
                              help_field=project_pifacc_opts,
                              cols=6),
        S3SearchOptionsWidget(name="project_search_jnap",
                              label=T("JNAP"),
                              field="drrpp.jnap",
                              options=jnap_options,
                              help_field=project_jnap_opts,
                              cols=6),
        S3SearchOptionsWidget(name="project_search_organisation_id",
                              label=T("Lead Organisation"),
                              field="organisation_id",
                              cols=3),
        S3SearchOptionsWidget(
            name="project_search_partners",
            field="partner.organisation_id",
            label=T("Partners"),
            cols=3,
        ),
        S3SearchOptionsWidget(
            name="project_search_donors",
            field="donor.organisation_id",
            label=T("Donors"),
            cols=3,
        )
    ]
    search_method = s3search.S3Search(simple=simple,
                                      advanced=simple + advanced)

    # Custom Report Fields
    report_fields = [
        (T("Countries"), "location.location_id"),
        (T("Hazards"), "hazard.name"),
        (T("Themes"), "theme.name"),
        (T("HFA Priorities"), "drr.hfa"),
        (T("RFA Priorities"), "drrpp.rfa"),
        (T("Lead Organization"), "organisation_id"),
        (T("Partner Organizations"), "partner.organisation_id"),
        (T("Donors"), "donor.organisation_id"),
    ]
    # Report Settings for charts
    if "chart" in current.request.vars:
        crud_strings[tablename].title_report = T("Project Graph")
        report_fact_fields = [("project.id", "count")]
        report_fact_default = "project.id"
    else:
        crud_strings[tablename].title_report = T("Project Matrix")
        report_fact_fields = [(field, "count") for field in report_fields]
        report_fact_default = "theme.name"
    report_options = Storage(search=[status_search_widget] + advanced,
                             rows=report_fields,
                             cols=report_fields,
                             fact=report_fact_fields,
                             defaults=Storage(rows="hazard.name",
                                              cols="location.location_id",
                                              fact=report_fact_default,
                                              aggregate="count",
                                              totals=True))

    # Custom Crud Form
    crud_form = s3forms.S3SQLCustomForm(
        "name",
        "code",
        "status_id",
        "start_date",
        "end_date",
        "drrpp.duration",
        s3forms.S3SQLInlineComponent("location",
                                     label=T("Countries"),
                                     fields=["location_id"],
                                     orderby="location_id$name",
                                     render_list=True),
        "drrpp.L1",
        s3forms.S3SQLInlineComponentCheckbox(
            "hazard",
            label=T("Hazards"),
            field="hazard_id",
            option_help="comments",
            cols=4,
        ),
        s3forms.S3SQLInlineComponentCheckbox(
            "theme",
            label=T("Themes"),
            field="theme_id",
            option_help="comments",
            cols=3,
        ),
        "objectives",
        "drrpp.activities",
        # Outputs
        s3forms.S3SQLInlineComponent(
            "output",
            label=T("Outputs"),
            #comment = "Bob",
            fields=["name", "status"],
        ),
        "drr.hfa",
        "drrpp.rfa",
        "drrpp.pifacc",
        "drrpp.jnap",
        "organisation_id",
        # Partner Orgs
        s3forms.S3SQLInlineComponent(
            "organisation",
            name="partner",
            label=T("Partner Organizations"),
            fields=[
                "organisation_id",
                "comments",  # NB This is labelled 'Role' in DRRPP
            ],
            filterby=dict(field="role", options="2")),
        # Donors
        s3forms.S3SQLInlineComponent(
            "organisation",
            name="donor",
            label=T("Donor(s)"),
            fields=["organisation_id", "amount", "currency"],
            filterby=dict(field="role", options="3")),
        "budget",
        "drrpp.local_budget",
        "drrpp.local_currency",
        "drrpp.focal_person",
        "drrpp.organisation_id",
        "drrpp.email",
        # Files
        s3forms.S3SQLInlineComponent("document",
                                     name="file",
                                     label=T("Files"),
                                     fields=["file", "comments"],
                                     filterby=dict(
                                         field="file",
                                         options="",
                                         invert=True,
                                     )),
        # Links
        s3forms.S3SQLInlineComponent("document",
                                     name="url",
                                     label=T("Links"),
                                     fields=["url", "comments"],
                                     filterby=dict(
                                         field="url",
                                         options=None,
                                         invert=True,
                                     )),
        "drrpp.parent_project",
        "comments",
    )

    s3db.configure(
        tablename,
        crud_form=crud_form,
        list_fields=list_fields,
        report_options=report_options,
        search_method=search_method,
        subheadings={
            1: "hazard",
            2: "theme",
            3: "objectives",
            4: "drr_hfa",
            5: "drrpp_rfa",
            6: "drrpp_pifacc",
            7: "drrpp_jnap",
            8: "organisation_id",
        },
    )

    return attr
コード例 #2
0
def customize_project_project(**attr):
    """
        Customize project_project controller
    """

    s3db = current.s3db
    tablename = "project_project"
    # Load normal model
    table = s3db[tablename]

    # @ToDo: S3SQLInlineComponent for Project orgs
    # Get IDs for PartnerNS/Partner-Donor
    # db = current.db
    # ttable = db.org_organisation_type
    # rows = db(ttable.deleted != True).select(ttable.id,
                                             # ttable.name,
                                             # )
    # rc = []
    # not_rc = []
    # nappend = not_rc.append
    # for row in rows:
        # if row.name == "Red Cross / Red Crescent":
            # rc.append(row.id)
        # elif row.name == "Supplier":
            # pass
        # else:
            # nappend(row.id)

    # Custom Fields
    # Organisation needs to be an NS (not a branch)
    f = table.organisation_id
    ns_only(f,
            required=True,
            branches=False,
            )
    f.label = T("Host National Society")

    # Custom Crud Form
    crud_form = s3forms.S3SQLCustomForm(
        "organisation_id",
        "name",
        "code",
        "description",
        "status_id",
        "start_date",
        "end_date",
        #s3forms.S3SQLInlineComponent(
        #    "location",
        #    label = T("Countries"),
        #    fields = ["location_id"],
        #),
        # Outputs
        s3forms.S3SQLInlineComponent(
            "output",
            label = T("Outputs"),
            #comment = "Bob",
            fields = ["name", "status"],
        ),
        s3forms.S3SQLInlineComponentCheckbox(
            "hazard",
            label = T("Hazards"),
            field = "hazard_id",
            cols = 4,
        ),
        s3forms.S3SQLInlineComponentCheckbox(
            "sector",
            label = T("Sectors"),
            field = "sector_id",
            cols = 4,
        ),
        s3forms.S3SQLInlineComponentCheckbox(
            "theme",
            label = T("Themes"),
            field = "theme_id",
            cols = 4,
            # Filter Theme by Sector
            filter = {"linktable": "project_theme_sector",
                      "lkey": "theme_id",
                      "rkey": "sector_id",
                      },
            script = '''
S3OptionsFilter({
 'triggerName':'defaultsector-sector_id',
 'targetName':'defaulttheme-theme_id',
 'targetWidget':'defaulttheme-theme_id_widget',
 'lookupResource':'theme',
 'lookupURL':S3.Ap.concat('/project/theme_sector_widget?sector_ids='),
 'getWidgetHTML':true,
 'showEmptyField':false
})'''
        ),
        "drr.hfa",
        "objectives",
        "human_resource_id",
        # Disabled since we need organisation_id filtering to either organsiation_type_id == RC or NOT
        # & also hiding Branches from RCs
        # Partner NS
        # s3forms.S3SQLInlineComponent(
            # "organisation",
            # name = "partnerns",
            # label = T("Partner National Societies"),
            # fields = ["organisation_id",
                      # "comments",
                      # ],
            # Filter Organisation by Type
            # filter = ["organisation_id": {"filterby": "organisation_type_id",
                                          # "filterfor": rc,
                                          # }],
            # filterby = dict(field = "role",
                            # options = [9])
        # ),
        # Partner Orgs
        # s3forms.S3SQLInlineComponent(
            # "organisation",
            # name = "partner",
            # label = T("Partner Organizations"),
            # fields = ["organisation_id",
                      # "comments",
                      # ],
            # Filter Organisation by Type
            # filter = ["organisation_id": {"filterby": "organisation_type_id",
                                          # "filterfor": not_rc,
                                          # }],
            # filterby = dict(field = "role",
                            # options = [2])
        # ),
        # Donors
        # s3forms.S3SQLInlineComponent(
            # "organisation",
            # name = "donor",
            # label = T("Donor(s)"),
            # fields = ["organisation_id",
                      # "amount",
                      # "currency"],
            # Filter Organisation by Type
            # filter = ["organisation_id": {"filterby": "organisation_type_id",
                                          # "filterfor": not_rc,
                                          # }],
            # filterby = dict(field = "role",
                            # options = [3])
        # ),
        #"budget",
        #"currency",
        "comments",
    )

    s3db.configure(tablename,
                   crud_form = crud_form)

    return attr
コード例 #3
0
ファイル: config.py プロジェクト: jeffhurv/eden
def customize_project_project(**attr):
    s3db = current.s3db
    s3 = current.response.s3

    tablename = "project_project"
    
    s3db.project_project.code.label = T("Project blurb (max. 100 characters)")
    s3db.project_project.code.max_length = 100 
    s3db.project_project.comments.label = T("How people can help")

    location_id = s3db.project_location.location_id
    # Limit to just Countries
    location_id.requires = s3db.gis_location_id
    # Use dropdown, not AC
    #location_id.widget = s3.s3widgets.S3LocationAutocompleteWidget()

    script = '''$('#project_project_code').attr('maxlength','100')'''
    
    s3.jquery_ready.append(script)

    from s3 import s3forms

    crud_form = s3forms.S3SQLCustomForm(
        "organisation_id",
        "name",
        "code",        
        "description",
        "status_id",
        "start_date",
        "end_date",
        "calendar",
        #"drr.hfa",
        #"objectives",
        "human_resource_id",
        # Activities
       s3forms.S3SQLInlineComponent(
            "location",
            label = T("Location"),
            fields = ["location_id"],
        ),
        # Partner Orgs
        s3forms.S3SQLInlineComponent(
         "organisation",
         name = "partner",
         label = T("Partner Organizations"),
         fields = ["organisation_id",
         "comments", # NB This is labelled 'Role' in DRRPP
         ],
         filterby = dict(field = "role",
         options = "2"
         )
        ),
        s3forms.S3SQLInlineComponent(
         "document",
         name = "media",
         label = T("URLs (media, fundraising, website, social media, etc."),
         fields = ["document_id",
         "name",
         "url",
         "comments",
         ],
         filterby = dict(field = "name")
        ),                                                                
        s3forms.S3SQLInlineComponentCheckbox(
            "activity_type",
            label = T("Categories"),
            field = "activity_type_id",
            cols = 3,
            # Filter Activity Type by Project
            filter = {"linktable": "project_activity_type_project",
                      "lkey": "project_id",
                      "rkey": "activity_type_id",
                      },
        ),
        #"budget",
        #"currency",
        "comments",
    )
    
    s3db.configure(tablename, crud_form = crud_form)
    
    return attr
コード例 #4
0
ファイル: config.py プロジェクト: wyw876/eden
    return attr


settings.ui.customize_project_project = customize_project_project

from s3 import s3forms
settings.ui.crud_form_project_project = s3forms.S3SQLCustomForm(
    "name",
    "code",
    "status_id",
    "start_date",
    "end_date",
    "drrpp.duration",
    s3forms.S3SQLInlineComponent(
        "location",
        label=T("Countries"),
        fields=["location_id"],
    ),
    "multi_hazard_id",
    "multi_theme_id",
    "objectives",
    "drrpp.activities",
    # Outputs
    s3forms.S3SQLInlineComponent(
        "output",
        label=T("Outputs:"),
        comment="Bob",
        fields=["output", "status"],
    ),
    "hfa",
    "drrpp.rfa",