Beispiel #1
0
    def customise_event_incident_report_resource(r, tablename):

        s3db = current.s3db

        table = s3db.event_incident_report
        table.name.label = T("Description")

        # ImageCrop widget doesn't currently work within an Inline Form
        from gluon.validators import IS_IMAGE
        image_field = s3db.doc_image.file
        image_field.requires = IS_IMAGE()
        image_field.widget = None

        from s3 import S3SQLCustomForm, S3SQLInlineComponent
        crud_form = S3SQLCustomForm(S3SQLInlineComponent(
                                        "image",
                                        label = T("Photo"),
                                        fields = [("", "file"),
                                                  ],
                                        ),
                                    "name",
                                    "location_id",
                                    )

        list_fields = ["location_id",
                       "name",
                       ]

        s3db.configure("event_incident_report",
                       crud_form = crud_form,
                       list_fields = list_fields,
                       )
Beispiel #2
0
def file_upload():
    form = SQLFORM.factory(Field('file',
                                 'upload',
                                 uploadfolder=application.config.upload_folder,
                                 requires=IS_IMAGE(extensions=('jpg',
                                                               'jpeg'))),
                           _action=URL())

    if form.process().accepted:
        redirect(URL())

    return {'form': form}
Beispiel #3
0
    def set_properties(self):
        ckeditor = CKEditor()
        self.fields = [
            Field("title", unique=True),
            Field("description", "text"),
            Field("page_content", "text"),
            Field("picture", "upload"),
            Field("thumbnail", "upload"),
            Field("tags", "list:string"),
            Field("slug"),
            Field("page_scope", "list:string", default=["public", "sitemap"]),
            Field("visibility"),
            Field("text_language", default="pt-br"),
            Field("redirect_url"),
        ]

        self.widgets = {
            "tags": StringListWidget.widget,
            "page_content": ckeditor.widget
        }

        self.comments = {
          "page_scope": "public, sitemap, members"
        }

        self.computations = {
            "slug": lambda r: IS_SLUG()(r.title)[0],
            "thumbnail": lambda r: THUMB2(r.picture, 200, 200)
        }

        self.validators = {
            "title": [IS_NOT_EMPTY(), IS_NOT_IN_DB(self.db, "internal_page.title")],
            "description": IS_NOT_EMPTY(),
            "picture": IS_EMPTY_OR(IS_IMAGE()),
            "tags": COMMA_SEPARATED_LIST(),
            "text_language": IS_IN_SET(["en", "pt-br", "es"])
        }
Beispiel #4
0
def customize_pr_person(**attr):
    """
        Customize pr_person controller
    """

    s3db = current.s3db
    request = current.request
    s3 = current.response.s3

    tablename = "pr_person"
    table = s3db.pr_person

    # CRUD Strings
    ADD_CONTACT = T("Add New Contact")
    s3.crud_strings[tablename] = Storage(
        title_create=T("Add Contact"),
        title_display=T("Contact Details"),
        title_list=T("Contact Directory"),
        title_update=T("Edit Contact Details"),
        title_search=T("Search Contacts"),
        subtitle_create=ADD_CONTACT,
        label_list_button=T("List Contacts"),
        label_create_button=ADD_CONTACT,
        label_delete_button=T("Delete Contact"),
        msg_record_created=T("Contact added"),
        msg_record_modified=T("Contact details updated"),
        msg_record_deleted=T("Contact deleted"),
        msg_list_empty=T("No Contacts currently registered"))

    # 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.method == "validate":
            # Can't validate image without the file
            image_field = s3db.pr_image.image
            image_field.requires = None

    MOBILE = settings.get_ui_label_mobile_phone()
    EMAIL = T("Email")

    htable = s3db.hrm_human_resource
    htable.organisation_id.widget = None
    site_field = htable.site_id
    represent = S3Represent(lookup="org_site")
    site_field.label = T("Office")
    site_field.represent = represent
    site_field.requires = IS_ONE_OF(current.db,
                                    "org_site.site_id",
                                    represent,
                                    orderby="org_site.name")

    from s3layouts import S3AddResourceLink
    site_field.comment = S3AddResourceLink(
        c="org",
        f="office",
        vars={"child": "site_id"},
        label=T("Add New Office"),
        title=T("Office"),
        tooltip=
        T("If you don't see the Office in the list, you can add a new one by clicking link 'Add New Office'."
          ))

    # Best to have no labels when only 1 field in the row
    s3db.pr_contact.value.label = ""
    image_field = s3db.pr_image.image
    image_field.label = ""
    # ImageCrop widget doesn't currently work within an Inline Form
    from gluon.validators import IS_IMAGE
    image_field.requires = IS_IMAGE()
    image_field.widget = None

    hr_fields = [
        "organisation_id",
        "job_title_id",
        "site_id",
    ]

    # Context from a Profile page?"
    organisation_id = request.get_vars.get("(organisation)", None)
    if organisation_id:
        field = s3db.hrm_human_resource.organisation_id
        field.default = organisation_id
        field.readable = field.writable = False
        hr_fields.remove("organisation_id")

    s3_sql_custom_fields = [
        "first_name",
        #"middle_name",
        "last_name",
        S3SQLInlineComponent(
            "human_resource",
            name="human_resource",
            label="",
            multiple=False,
            fields=hr_fields,
        ),
        S3SQLInlineComponent("image",
                             name="image",
                             label=T("Photo"),
                             multiple=False,
                             fields=["image"],
                             filterby=dict(field="profile", options=[True])),
    ]

    list_fields = [
        "human_resource.organisation_id",
        "first_name",
        #"middle_name",
        "last_name",
        (T("Job Title"), "human_resource.job_title_id"),
        (T("Office"), "human_resource.site_id"),
    ]

    # Don't include Email/Phone for unauthenticated users
    if current.auth.is_logged_in():
        list_fields += [
            (MOBILE, "phone.value"),
            (EMAIL, "email.value"),
        ]
        s3_sql_custom_fields.insert(
            3,
            S3SQLInlineComponent("contact",
                                 name="phone",
                                 label=MOBILE,
                                 multiple=False,
                                 fields=["value"],
                                 filterby=dict(field="contact_method",
                                               options="SMS")),
        )
        s3_sql_custom_fields.insert(
            3,
            S3SQLInlineComponent("contact",
                                 name="email",
                                 label=EMAIL,
                                 multiple=False,
                                 fields=["value"],
                                 filterby=dict(field="contact_method",
                                               options="EMAIL")),
        )

    crud_form = S3SQLCustomForm(*s3_sql_custom_fields)

    filter_widgets = [
        S3TextFilter(
            [
                "pe_label",
                "first_name",
                "middle_name",
                "last_name",
                "local_name",
                "identity.value",
                "human_resource.organisation_id",
                "human_resource.job_title_id",
                "human_resource.site_id",
            ],
            label=T("Search"),
        ),
        S3OptionsFilter(
            "human_resource.organisation_id",
            # Doesn't support translation
            #represent="%(name)s",
            widget="multiselect",
        ),
        S3OptionsFilter(
            "human_resource.job_title_id",
            # Doesn't support translation
            #represent="%(name)s",
            widget="multiselect",
        ),
        S3OptionsFilter(
            "human_resource.site_id",
            # Doesn't support translation
            #represent="%(name)s",
            widget="multiselect",
        ),
    ]

    # Return to List view after create/update/delete (unless done via Modal)
    #url_next = URL(c="pr", f="person", )

    # Report options
    report_fields = [
        "organisation_id",
    ]

    report_options = Storage(
        rows=report_fields,
        cols=report_fields,
        fact=["count(id)"],
        defaults=Storage(
            rows="organisation_id",
            cols="",
            fact="count(id)",
            totals=True,
            chart="barchart:rows",
            #table = "collapse",
        ))

    s3db.configure(
        tablename,
        #create_next = url_next,
        #delete_next = url_next,
        #update_next = url_next,
        crud_form=crud_form,
        filter_widgets=filter_widgets,
        list_fields=list_fields,
        report_options=report_options,
        # Don't include a Create form in 'More' popups
        #listadd = False if r.method=="datalist" else True,
        #list_layout = render_contacts,
    )

    # Custom postp
    standard_postp = s3.postp

    def custom_postp(r, output):
        # Call standard postp
        if callable(standard_postp):
            output = standard_postp(r, output)

        if r.interactive and isinstance(output, dict):
            output["rheader"] = ""
            actions = [
                dict(label=str(T("Open")),
                     _class="action-btn",
                     url=URL(c="pr", f="person", args=["[id]", "read"]))
            ]
            s3.actions = actions
            if "form" in output:
                output["form"].add_class("pr_person")
            elif "item" in output and hasattr(output["item"], "add_class"):
                output["item"].add_class("pr_person")

        return output

    s3.postp = custom_postp

    # Remove rheader
    attr["rheader"] = None

    return attr