示例#1
0
文件: config.py 项目: Timileyin5/eden
    def customise_event_asset_resource(r, tablename):

        table = current.s3db.event_asset
        table.item_id.label = T("Item Type")
        table.asset_id.label = T("Specific Item")
        # DateTime
        from gluon import IS_EMPTY_OR
        from s3 import IS_UTC_DATETIME, S3CalendarWidget, S3DateTime
        for f in (table.start_date, table.end_date):
            f.requires = IS_EMPTY_OR(IS_UTC_DATETIME())
            f.represent = lambda dt: S3DateTime.datetime_represent(dt,
                                                                   utc=True)
            f.widget = S3CalendarWidget(timepicker=True)

        current.response.s3.crud_strings[tablename] = Storage(
            label_create=T("Add Equipment"),
            title_display=T("Equipment Details"),
            title_list=T("Equipment"),
            title_update=T("Edit Equipment"),
            label_list_button=T("List Equipment"),
            label_delete_button=T("Remove Equipment from this incident"),
            msg_record_created=T("Equipment added"),
            msg_record_modified=T("Equipment updated"),
            msg_record_deleted=T("Equipment removed"),
            msg_list_empty=T(
                "No Equipment currently registered for this incident"))
示例#2
0
文件: config.py 项目: Timileyin5/eden
    def customise_event_human_resource_resource(r, tablename):

        s3db = current.s3db
        table = s3db.event_human_resource
        # DateTime
        from gluon import IS_EMPTY_OR
        from s3 import IS_UTC_DATETIME, S3CalendarWidget, S3DateTime
        for f in (table.start_date, table.end_date):
            f.requires = IS_EMPTY_OR(IS_UTC_DATETIME())
            f.represent = lambda dt: S3DateTime.datetime_represent(dt,
                                                                   utc=True)
            f.widget = S3CalendarWidget(timepicker=True)

        current.response.s3.crud_strings[tablename] = Storage(
            label_create=T("Add Person"),
            title_display=T("Person Details"),
            title_list=T("Personnel"),
            title_update=T("Edit Person"),
            label_list_button=T("List Personnel"),
            label_delete_button=T("Remove Person from this incident"),
            msg_record_created=T("Person added"),
            msg_record_modified=T("Person updated"),
            msg_record_deleted=T("Person removed"),
            msg_list_empty=T(
                "No Persons currently registered for this incident"))

        s3db.configure(
            tablename,
            # Deliberately over-rides
            create_onaccept=event_human_resource_onaccept,
            update_onaccept=lambda form: event_human_resource_onaccept(
                form, create=False),
        )
示例#3
0
文件: member.py 项目: sahana/eden
    def prep(r):
        if r.interactive:
            if s3.rtl:
                # Ensure that + appears at the beginning of the number
                # - using table alias to only apply to filtered component
                from s3 import s3_phone_represent, S3PhoneWidget
                f = s3db.get_aliased(s3db.pr_contact, "pr_phone_contact").value
                f.represent = s3_phone_represent
                f.widget = S3PhoneWidget()

            if r.id and r.component is None and r.method != "delete":
                # Redirect to person controller
                vars = {"membership.id": r.id}
                redirect(URL(f="person", vars=vars))

            # Assume members under 120
            from s3 import S3CalendarWidget
            s3db.pr_person.date_of_birth.widget = \
                                        S3CalendarWidget(past_months=1440)

        elif r.representation == "xls":
            # Split person_id into first/middle/last to make it match Import sheets
            list_fields = s3db.get_config("member_membership",
                                          "list_fields")
            list_fields.remove("person_id")
            list_fields = ["person_id$first_name",
                           "person_id$middle_name",
                           "person_id$last_name",
                           ] + list_fields

            s3db.configure("member_membership",
                           list_fields = list_fields,
                           )

        return True
示例#4
0
文件: hrm.py 项目: sahana/eden
 def prep(r):
     if r.interactive and r.method != "import":
         if r.component:
             if r.component_name == "physical_description":
                 # Hide all but those details that we want
                 # Lock all the fields
                 table = r.component.table
                 for field in table.fields:
                     table[field].writable = table[field].readable = False
                 # Now enable those that we want
                 table.ethnicity.writable = table.ethnicity.readable = True
                 table.blood_type.writable = table.blood_type.readable = True
                 table.medical_conditions.writable = table.medical_conditions.readable = True
                 table.other_details.writable = table.other_details.readable = True
         else:
             table = r.table
             table.pe_label.readable = table.pe_label.writable = False
             table.missing.readable = table.missing.writable = False
             table.age_group.readable = table.age_group.writable = False
             # Assume volunteers only between 12-81
             from s3 import S3CalendarWidget
             table.date_of_birth.widget = S3CalendarWidget(
                 past_months=972,
                 future_months=-144,
             )
             return True
     else:
         # Disable non-interactive & import
         return False
示例#5
0
文件: member.py 项目: sahana/eden
    def prep(r):
        if r.interactive:
            if s3.rtl:
                # Ensure that + appears at the beginning of the number
                # - using table alias to only apply to filtered component
                from s3 import s3_phone_represent, S3PhoneWidget
                f = s3db.get_aliased(s3db.pr_contact, "pr_phone_contact").value
                f.represent = s3_phone_represent
                f.widget = S3PhoneWidget()

            if r.component_name == "membership":
                s3.crud_strings["member_membership"].update(
                    label_delete_button = T("Delete Membership"),
                    label_list_button = T("List Memberships")
                )

            if r.method not in ("import", "search_ac", "validate"):
                if not r.component:
                    # Assume members under 120
                    from s3 import S3CalendarWidget
                    s3db.pr_person.date_of_birth.widget = \
                                        S3CalendarWidget(past_months=1440)
                resource = r.resource
                if resource.count() == 1:
                    resource.load()
                    r.record = resource.records().first()
                    if r.record:
                        r.id = r.record.id
                if not r.record:
                    session.error = T("Record not found")
                    redirect(URL(f="membership"))
                member_id = get_vars.get("membership.id", None)
                if member_id and r.component_name == "membership":
                    r.component_id = member_id
                s3db.configure("member_membership",
                               insertable = False,
                               )
        return True
示例#6
0
文件: hrm.py 项目: sahana/eden
    def prep(r):

        table = r.table
        tablename = r.tablename
        get_vars = r.get_vars

        # Use CRUD strings for staff
        crud_strings = s3.crud_strings
        crud_strings[tablename] = crud_strings["hrm_staff"]

        resource = r.resource
        if "expiring" in get_vars:
            # Filter for staff with contracts expiring in the next 4 weeks
            query = FS("end_date") < \
                        (request.utcnow + datetime.timedelta(weeks=4))
            resource.add_filter(query)
            # Adapt CRUD strings
            crud_strings[tablename].title_list = \
                T("Staff with Contracts Expiring in the next Month")
            # Reconfigure
            resource.configure(  # Sort by Expiry
                sortby=table.end_date,
                # Remove the Add button
                insertable=False)
            # Adapt list_fields
            list_fields = [
                (T("Contract End Date"), "end_date"),
                "person_id",
                "job_title_id",
                "organisation_id",
                "site_id",
                #"site_contact",
            ]
            if settings.get_hrm_staff_departments():
                list_fields.insert(4, "department_id")
            resource.configure(list_fields=list_fields)
        elif r.representation == "xls":
            s3db.hrm_xls_list_fields(r, vol=False)
        else:
            # Adapt list_fields
            list_fields = [
                "person_id",
                "job_title_id",
                "organisation_id",
                "site_id",
                #"site_contact",
                (T("Email"), "email.value"),
                (settings.get_ui_label_mobile_phone(), "phone.value"),
            ]
            if settings.get_hrm_staff_departments():
                list_fields.insert(3, "department_id")
            if settings.get_hrm_use_trainings():
                list_fields.append("person_id$training.course_id")
            if settings.get_hrm_use_certificates():
                list_fields.append("person_id$certification.certificate_id")
            list_fields.append((T("Contract End Date"), "end_date"))
            list_fields.append("status")
            resource.configure(list_fields=list_fields)

        if r.interactive:
            if r.id:
                if r.method not in ("profile", "delete"):
                    # Redirect to person controller
                    url_vars = {"human_resource.id": r.id, "group": "staff"}
                    if r.method is not None:
                        args = [r.method]
                    else:
                        args = []
                    if r.representation == "iframe":
                        url_vars["format"] = "iframe"
                    redirect(URL(
                        f="person",
                        args=args,
                        vars=url_vars,
                    ))
            else:
                if r.method == "import":
                    # Redirect to person controller
                    redirect(
                        URL(
                            f="person",
                            args="import",
                            vars={"group": "staff"},
                        ))
                elif not r.component and r.method != "delete":
                    # Configure site_id
                    field = table.site_id
                    site_id = get_vars.get("site_id", None)
                    if site_id:
                        field.default = site_id
                        field.writable = False
                    field.comment = DIV(
                        DIV(
                            _class="tooltip",
                            _title="%s|%s" % (
                                settings.get_org_site_label(),
                                T("The facility where this position is based."
                                  ),
                                #messages.AUTOCOMPLETE_HELP,
                            )))
                    #field.comment = S3PopupLink(c="org", f="facility",
                    #                            vars = dict(child="site_id",
                    #                                        parent="req"),
                    #                            title=T("Add New Site"),
                    #                            )

                    # Hide status field
                    table.status.writable = table.status.readable = False

                    # Assume staff only between 16-81
                    from s3 import S3CalendarWidget
                    s3db.pr_person.date_of_birth.widget = \
                        S3CalendarWidget(past_months = 972,
                                         future_months = -192,
                                         )

        return True
示例#7
0
文件: event.py 项目: sahana/eden
    def prep(r):
        if r.interactive or r.representation == "aadata":
            if r.component:
                if r.component.alias == "assign":
                    if not r.method:
                        r.method = "assign"
                    if r.method == "assign":
                        r.custom_action = s3db.hrm_AssignMethod(component = "assign")

                cname = r.component_name
                if cname == "config":
                    s3db.configure("gis_config",
                                   deletable = False,
                                   )
                    s3.crud.submit_button = T("Update")

                elif cname == "sitrep":
                    stable = s3db.event_sitrep
                    stable.location_id.default = r.record.location_id
                    stable.event_id.readable = stable.event_id.writable = False
                    list_fields = s3db.get_config("event_sitrep", "list_fields")
                    try:
                        list_fields.remove("event_id")
                    except ValueError:
                        # Already removed
                        pass
                    # @ToDo: PDF export of Single SitReps
                    # - UI Button
                    # - Custom layout
                    # Remove PDF export of List of SitReps
                    # - currently crashing when there is significant richtext content & an unlikely usecase
                    export_formats = settings.ui.export_formats
                    if not export_formats:
                        export_formats = settings.get_ui_export_formats()
                    if "pdf" in export_formats:
                        export_formats = list(export_formats)
                        export_formats.remove("pdf")
                        settings.ui.export_formats = export_formats

                elif cname in ("asset", "human_resource", "event_organisation", "organisation", "site"):
                    atable = s3db.table("budget_allocation")
                    if atable:
                        atable.budget_entity_id.default = r.record.budget_entity_id

                    #s3.crud.submit_button = T("Assign")
                    #s3.crud.submit_button = T("Add")
                    s3.crud_labels["DELETE"] = T("Remove")

                    if cname == "asset":
                        # Filter Assets by Item Type
                        s3.scripts.append("/%s/static/scripts/S3/s3.event_asset.js" % r.application)
                        # Modify Popup URL
                        s3db.event_asset.asset_id.comment.vars = {"prefix": "event",
                                                                  "parent": "asset",
                                                                  }

                    # Default Event in the link to that of the Incident
                    if cname == "event_organisation":
                        ltable = s3db.table(cname)
                    else:
                        ltable = s3db.table("event_%s" % cname)
                    if ltable:
                        f = ltable.event_id
                        f.default = r.record.event_id
                        f.readable = f.writable = False

                elif cname == "incident_asset":
                    atable = s3db.table("budget_allocation")
                    if atable:
                        atable.budget_entity_id.default = r.record.budget_entity_id

                    #s3.crud.submit_button = T("Assign")
                    #s3.crud.submit_button = T("Add")
                    s3.crud_labels["DELETE"] = T("Remove")

                    # Default Event in the link to that of the Incident
                    ltable = s3db.table("event_asset")
                    f = ltable.event_id
                    f.default = r.record.event_id
                    f.readable = f.writable = False
                    # DateTime
                    from s3 import IS_UTC_DATETIME, S3DateTime, S3CalendarWidget
                    datetime_represent = S3DateTime.datetime_represent
                    for f in (ltable.start_date, ltable.end_date):
                        f.requires = IS_EMPTY_OR(IS_UTC_DATETIME())
                        f.represent = lambda dt: datetime_represent(dt, utc=True)
                        f.widget = S3CalendarWidget(timepicker = True)

            elif r.method not in ("read", "update"):
                # Create or ListCreate
                table = r.table
                table.closed.writable = table.closed.readable = False
                table.end_date.writable = table.end_date.readable = False

            elif r.method == "update":
                # Can't change details after event activation
                table = r.table
                table.exercise.writable = False
                table.exercise.comment = None
                table.date.writable = False

        return True