def customise_event_event_controller(**attr): # Default Filter: Only open Events from s3 import s3_set_default_filter s3_set_default_filter("~.closed", False, tablename="event_event") return attr
def prep(r): # @todo: for assigments, filter person_id to persons not # currently assigned to this job # @todo: for assigments, set default to current user if # not assigned to this job yet if r.method == "datalist": # Filter to open jobs by default from s3 import s3_set_default_filter s3_set_default_filter( "~.status", "OPEN", tablename="work_job", ) if r.representation == "html": # Set default formstyle for side filter form # (=labels above fields) filter_formstyle = settings.get_ui_formstyle() s3db.configure( "work_job", filter_formstyle=filter_formstyle, ) if not r.component: r.resource.configure( create_next=r.url(method=""), update_next=r.url(method=""), ) return True
def prep(r): # @todo: for assigments, filter person_id to persons not # currently assigned to this job # @todo: for assigments, set default to current user if # not assigned to this job yet if r.method == "datalist": # Filter to open jobs by default from s3 import s3_set_default_filter s3_set_default_filter("~.status", "OPEN", tablename = "work_job", ) if r.representation == "html": # Set default formstyle for side filter form # (=labels above fields) filter_formstyle = settings.get_ui_formstyle() s3db.configure("work_job", filter_formstyle = filter_formstyle, ) if not r.component: r.resource.configure(create_next = r.url(method=""), update_next = r.url(method=""), ) return True
def monitor_task(): from s3 import S3OptionsFilter, s3_set_default_filter tablename = "setup_monitor_task" filter_widgets = [S3OptionsFilter("enabled", label = T("Enabled"), options = {True: T("Yes"), False: T("No"), }, cols = 2, ), ] s3db.configure(tablename, filter_widgets = filter_widgets, orderby = "setup_monitor_task.status desc", ) # Only show Enabled Tasks by default # @ToDo: Also hide those from disabled Servers s3_set_default_filter("~.enabled", lambda selector, tablename: True, tablename = tablename) def postp(r, output): if r.interactive and not r.id: # Normal Action Buttons s3_action_buttons(r) # Custom Action Buttons for Enable/Disable table = r.table rows = db(table.deleted == False).select(table.id, table.enabled, ) restrict_e = [str(row.id) for row in rows if not row.enabled] restrict_d = [str(row.id) for row in rows if row.enabled] s3.actions += [{"url": URL(args=["[id]", "enable"]), "_class": "action-btn", "label": s3_str(T("Enable")), "restrict": restrict_e, }, {"url": URL(args = ["[id]", "disable"]), "_class": "action-btn", "label": s3_str(T("Disable")), "restrict": restrict_d, }, ] if not s3task._is_alive(): # No Scheduler Running s3.actions.append({"url": URL(args = ["[id]", "check"]), "_class": "action-btn", "label": s3_str(T("Check")), }) return output s3.postp = postp return s3_rest_controller(rheader = s3db.setup_rheader, )
def customise_project_project_controller(**attr): # Default Filter: Only open Projects # @ToDo: Fix (not activating for some reason) stable = current.s3db.project_status active = current.db(stable.name.belongs("Active", "Proposed")).select( stable.id, stable.name, ) active = {row.id: row.name for row in active} from s3 import s3_set_default_filter s3_set_default_filter("~.status_id", active, tablename="project_project") has_role = current.auth.s3_has_role ERT_LEADER = has_role("ERT_LEADER") and not has_role("ADMIN") s3 = current.response.s3 standard_postp = s3.postp def custom_postp(r, output): # Call standard postp if callable(standard_postp): output = standard_postp(r, output) if ERT_LEADER: # Don't open Projects: Open Activities from gluon import URL from s3 import s3_str s3.actions = [ dict(label=s3_str(T("Open")), _class="action-btn", url=URL(args=["[id]", "activity"])), ] return output s3.postp = custom_postp if ERT_LEADER: # Simplified RHeader for Operational Requirements attr["rheader"] = lambda r: project_rheader(r, ert=True) else: # Tweaked RHeader attr["rheader"] = lambda r: project_rheader(r, ert=False) return attr
def customise_project_project_controller(**attr): stable = current.s3db.project_status statuses = current.db(stable.name.belongs(("Current", "Proposed"))).select(stable.id, limitby = (0, 2) ) statuses = [s.id for s in statuses] # Default Filter from s3 import s3_set_default_filter s3_set_default_filter("~.status_id", statuses, tablename = "project_project") return attr
def customise_doc_sitrep_controller(**attr): # Default Filter: Only open Events etable = current.s3db.event_event query = (etable.closed == False) & (etable.deleted == False) open = current.db(query).select(etable.id, etable.name) len_open = len(open) if len_open: if len_open == 1: current.session.s3.event = open.first().id else: current.session.s3.event = None open = {row.id: row.name for row in open} from s3 import s3_set_default_filter s3_set_default_filter("event_sitrep.event_id", open, tablename="doc_sitrep") return attr
def customise_project_project_controller(**attr): # Default Filter: Only open Projects # @ToDo: Fix (not activating for some reason) stable = current.s3db.project_status active = current.db(stable.name.belongs("Active", "Proposed")).select(stable.id, stable.name) active = {row.id: row.name for row in active} from s3 import s3_set_default_filter s3_set_default_filter("~.status_id", active, tablename="project_project") has_role = current.auth.s3_has_role ERT_LEADER = has_role("ERT_LEADER") and not has_role("ADMIN") s3 = current.response.s3 standard_postp = s3.postp def custom_postp(r, output): # Call standard postp if callable(standard_postp): output = standard_postp(r, output) if ERT_LEADER: # Don't open Projects: Open Activities from gluon import URL from s3 import s3_str s3.actions = [dict(label=s3_str(T("Open")), _class="action-btn", url=URL(args=["[id]", "activity"]))] return output s3.postp = custom_postp if ERT_LEADER: # Simplified RHeader for Operational Requirements attr["rheader"] = lambda r: project_rheader(r, ert=True) else: # Tweaked RHeader attr["rheader"] = lambda r: project_rheader(r, ert=False) return attr
def prep(r): if r.method == "assign": f = s3db.org_site_shift.site_id f.label = T("Site") f.represent = s3db.org_site_represent s3db.hrm_human_resource_shift.human_resource_id.label = T("Currently Assigned") # Default Filters from s3 import s3_set_default_filter tablename = "hrm_human_resource" record = r.record job_title_id = record.job_title_id if job_title_id: s3_set_default_filter("~.job_title_id", job_title_id, tablename = tablename) skill_id = record.skill_id if skill_id: s3_set_default_filter("competency.skill_id", skill_id, tablename = tablename) # NB Availability Filter is custom, # so needs the pr_availability_filter applying manually to take effect s3_set_default_filter("available", {"ge": record.start_date, "le": record.end_date, }, tablename = tablename) return True
def prep(r): if r.method == "datalist": # Filter to open jobs by default from s3 import s3_set_default_filter s3_set_default_filter("~.status", "OPEN", tablename = "work_job", ) if r.representation == "html": # Set default formstyle for side filter form # (=labels above fields) filter_formstyle = settings.get_ui_formstyle() s3db.configure("work_job", filter_formstyle = filter_formstyle, ) if not r.component: # Return to list after create/update r.resource.configure(create_next = r.url(method=""), update_next = r.url(method=""), ) elif r.component_name == "assignment": ctable = r.component.table field = ctable.person_id # Set default to current user if not assigned yet logged_in_person = auth.s3_logged_in_person() if logged_in_person: query = (ctable.job_id == r.id) & \ (ctable.person_id == logged_in_person) & \ (ctable.deleted != True) existing = db(query).select(ctable.id, limitby=(0, 1)).first() if not existing: field.default = logged_in_person else: field.default = None return True
def customise_doc_sitrep_controller(**attr): # Default Filter: Only open Events etable = current.s3db.event_event query = (etable.closed == False) & \ (etable.deleted == False) open = current.db(query).select( etable.id, etable.name, ) len_open = len(open) if len_open: if len_open == 1: current.session.s3.event = open.first().id else: current.session.s3.event = None open = {row.id: row.name for row in open} from s3 import s3_set_default_filter s3_set_default_filter("event_sitrep.event_id", open, tablename="doc_sitrep") return attr
def shelter(): """ RESTful CRUD controller """ tablename = "cr_shelter" # Filter to just Open shelters (status=2) from s3 import s3_set_default_filter s3_set_default_filter("shelter_details.status", [2, None], tablename = tablename) # Pre-processor def prep(r): # Function to call for all Site Instance Types from s3db.org import org_site_prep org_site_prep(r) method = r.method if method == "create": dtable = s3db.cr_shelter_details dtable.population_day.readable = False dtable.population_night.readable = False elif method == "import": s3db.cr_shelter.organisation_id.default = None elif method == "profile": name = r.record.name site_id = r.record.site_id profile_header = settings.get_ui_profile_header(r) map_widget = {"label": T("Housing Units"), "type": "map", "icon": "globe", "colspan": 2, "height": 500, #"bbox": bbox, } ftable = s3db.gis_layer_feature query = (ftable.controller == "cr") & \ (ftable.function == "shelter_unit") layer = db(query).select(ftable.layer_id, limitby = (0, 1), ).first() try: layer = {"active": True, "layer_id": layer.layer_id, "filter": "~.site_id=%s" % site_id, "name": T("Housing Units"), "id": "profile-header-%s-%s" % (tablename, site_id), } except: # No suitable prepop found layer = None profile_widgets = [map_widget, ] s3db.configure(tablename, profile_header = profile_header, profile_layers = (layer,), profile_title = "%s : %s" % (s3_str(s3.crud_strings["cr_shelter"].title_display), name), profile_widgets = profile_widgets, ) if r.interactive: if r.component: component_name = r.component_name if component_name == "shelter_registration": if settings.get_cr_shelter_housing_unit_management(): # Filter housing units to units of this shelter from s3 import IS_ONE_OF field = s3db.cr_shelter_registration.shelter_unit_id dbset = db(s3db.cr_shelter_unit.site_id == r.record.site_id) field.requires = IS_EMPTY_OR(IS_ONE_OF(dbset, "cr_shelter_unit.id", field.represent, sort = True, )) s3db.pr_person.pe_label.label = T("Registration Number") s3.crud_strings.cr_shelter_registration = Storage( label_create = T("Register Person"), title_display = T("Registration Details"), title_list = T("Registered People"), title_update = T("Edit Registration"), label_list_button = T("List Registrations"), msg_record_created = T("Registration added"), msg_record_modified = T("Registration updated"), msg_record_deleted = T("Registration entry deleted"), msg_list_empty = T("No people currently registered in this shelter"), ) elif component_name == "shelter_allocation": s3.crud_strings.cr_shelter_allocation = Storage( label_create = T("Allocate Group"), title_display = T("Allocation Details"), title_list = T("Allocated Groups"), title_update = T("Edit Allocation"), label_list_button = T("List Allocations"), msg_record_created = T("Reservation done"), msg_record_modified = T("Reservation updated"), msg_record_deleted = T("Reservation entry deleted"), msg_list_empty = T("No groups currently allocated for this shelter"), ) return True s3.prep = prep from s3db.cr import cr_shelter_rheader return s3_rest_controller(rheader = cr_shelter_rheader)