# -*- coding: utf-8 -*-

from collections import OrderedDict

from gluon import current
from gluon.storage import Storage

def config(settings):
    T = current.T

    # Pre-Populate
    # http://eden.sahanafoundation.org/wiki/DeveloperGuidelines/PrePopulate
    # Configure/disable pre-population of the database.
    # To pre-populate the database On 1st run should specify directory(s) in
    # /modules/templates/
    # eg:
    # ["default"] (1 is a shortcut for this)
    # ["default", "default/users"]
    # Unless doing a manual DB migration, where prepopulate = 0
    # In Production, prepopulate = 0 (to save 1x DAL hit every page)
    settings.base.prepopulate.append("Spotter")

    # Uncomment this to prefer scalability-optimized strategies globally
    #settings.base.bigtable = True

    # Theme (folder to use for views/layout.html)
    #settings.base.theme = "default"

    # Enable Guided Tours
    #settings.base.guided_tour = True

    # Authentication settings
    # These settings should be changed _after_ the 1st (admin) user is
    # registered in order to secure the deployment
    # Should users be allowed to register themselves?
    #settings.security.self_registration = False
    # Do new users need to verify their email address?
    #settings.auth.registration_requires_verification = True
    # Do new users need to be approved by an administrator prior to being able to login?
    #settings.auth.registration_requires_approval = True
    # Disable welcome-emails to newly registered users
    #settings.auth.registration_welcome_email = False

    # Allow a new user to be linked to a record (and a new record will be created if it doesn't already exist)
    settings.auth.registration_link_user_to = {"staff":T("Staff"),
                                               "volunteer":T("Volunteer"),
                                               "member":T("Member")}

    # Always notify the approver of a new (verified) user, even if the user is automatically approved
    #settings.auth.always_notify_approver = False

    # The name of the teams that users are added to when they opt-in to receive alerts
    #settings.auth.opt_in_team_list = ["Updates"]
    # Uncomment this to set the opt in default to True
    #settings.auth.opt_in_default = True
    # Uncomment this to request the Home Phone when a user registers
    settings.auth.registration_requests_home_phone = True
    # Uncomment this to request the Mobile Phone when a user registers
    settings.auth.registration_requests_mobile_phone = True
    # Uncomment this to have the Mobile Phone selection during registration be mandatory
    #settings.auth.registration_mobile_phone_mandatory = True
    # Uncomment this to request the Organisation when a user registers
    settings.auth.registration_requests_organisation = True
    # Uncomment this to have the Organisation selection during registration be mandatory
    settings.auth.registration_organisation_required = True
    # Uncomment this to hide the Create-Organisation link in registration forms
    #settings.auth.registration_organisation_link_create = False
    # Uncomment this to have the Organisation input hidden unless the user enters a non-whitelisted domain
    #settings.auth.registration_organisation_hidden = True
    # Uncomment this to default the Organisation during registration
    settings.auth.registration_organisation_default = "My Organisation"
    # Uncomment this to request the Organisation Group when a user registers
    #settings.auth.registration_requests_organisation_group = True
    # Uncomment this to have the Organisation Group selection during registration be mandatory
    #settings.auth.registration_organisation_group_required = True
    # Uncomment this to request the Site when a user registers
    #settings.auth.registration_requests_site = True
    # Uncomment this to allow Admin to see Organisations in User Admin even if the Registration doesn't request this
    #settings.auth.admin_sees_organisation = True
    # Uncomment to set the default role UUIDs assigned to newly-registered users
    # This is a dictionary of lists, where the key is the realm that the list of roles applies to
    # The key 0 implies not realm restricted
    # The keys "organisation_id" and "site_id" can be used to indicate the user's "organisation_id" and "site_id"
    #settings.auth.registration_roles = { 0: ["STAFF", "PROJECT_EDIT"]}
    # Whether the first user to register for an Org should get the ORG_ADMIN role for that Org
    settings.auth.org_admin_to_first = True
    # Define which entity types to use as realm entities in role manager
    settings.auth.realm_entity_types = ("org_organisation",)
    # Uncomment to activate entity role manager tabs for OrgAdmins
    settings.auth.entity_role_manager = True
    # Define modules for entity role manager
    #settings.auth.role_modules = OrderedDict([])
    # Define access levels for entity role manager
    #settings.auth.access_levels = OrderedDict([])
    # Uncomment this to enable record approval
    settings.auth.record_approval = True
    # Uncomment this and specify a list of tablenames for which record approval is required
    settings.auth.record_approval_required_for = ("cap_alert",)
    settings.auth.record_approval_manual = ("cap_alert",)
    # Uncomment this to request an image when users register
    #settings.auth.registration_requests_image = True
    # Uncomment this to direct newly-registered users to their volunteer page to be able to add extra details
    # NB This requires Verification/Approval to be Off
    # @ToDo: Extend to all optional Profile settings: Homepage, Twitter, Facebook, Mobile Phone, Image
    #settings.auth.registration_volunteer = True
    # Terms of Service to be able to Register on the system
    # https://termsfeed.com/terms-conditions/generator/
    # uses <template>/views/tos.html
    settings.auth.terms_of_service = True
    # Enable options for tracking user consent
    settings.auth.consent_tracking = True
    # Uncomment this to allow users to Login using Gmail's SMTP
    #settings.auth.gmail_domains = ["gmail.com"]
    # Uncomment this to allow users to Login using Office365's SMTP
    #settings.auth.office365_domains = ["microsoft.com"]
    # Uncomment this to allow users to Login using OpenID
    #settings.auth.openid = True
    # Uncomment this to allow users to login using master key
    #settings.auth.masterkey = True
    # Uncomment this to block password changes since managed externally (OpenID / SMTP / LDAP)
    #settings.auth.password_changes = False
    # Uncomment this to disable password retrieval (e.g. if impractical or unsafe)
    #settings.auth.password_retrieval = False
    # Uncomment this to enable presence records on login based on HTML5 geolocations
    #settings.auth.set_presence_on_login = True
    # Uncomment this and specify a list of location levels to be ignored by presence records
    #settings.auth.ignore_levels_for_presence = ("L0", "L1", "L2", "L3")
    # Uncomment this to enable the creation of new locations if a user logs in from an unknown location. Warning: This may lead to many useless location entries
    #settings.auth.create_unknown_locations = True

    # L10n settings
    # Languages used in the deployment (used for Language Toolbar, GIS Locations, etc)
    # http://www.loc.gov/standards/iso639-2/php/code_list.php
    languages = OrderedDict([
        ("cs", "Czech"),
        ("en-US", "English"),
    ])
    settings.L10n.languages = languages
    settings.cap.languages = languages
    # Default language for Language Toolbar (& GIS Locations in future)
    settings.L10n.default_language = "cs"
    # Uncomment to Hide the language toolbar
    #settings.L10n.display_toolbar = False
    # Default timezone for users
    settings.L10n.timezone = "Europe/Prague"
    # Uncomment these to use US-style dates in English
    #settings.L10n.date_format = "%m-%d-%Y"
    #settings.L10n.time_format = "%H:%M:%S"
    # Start week on Sunday
    #settings.L10n.firstDOW = 0
    # Number formats (defaults to ISO 31-0)
    # Decimal separator for numbers (defaults to ,)
    #settings.L10n.decimal_separator = "."
    # Thousands separator for numbers (defaults to space)
    #settings.L10n.thousands_separator = ","
    # Default Country Code for telephone numbers
    settings.L10n.default_country_code = 420
    # Make last name in person/user records mandatory
    settings.L10n.mandatory_lastname = True
    # Configure the list of Religions
    settings.L10n.religions = {"none": T("none"),
                            "christian": T("Christian"),
                            "muslim": T("Muslim"),
                            "jewish": T("Jewish"),
                            "buddhist": T("Buddhist"),
                            "hindu": T("Hindu"),
                            "bahai": T("Bahai"),
                            "other": T("other")
                            }
    # Uncomment this to Translate CMS Series Names
    #settings.L10n.translate_cms_series = True
    # Uncomment this to Translate Layer Names
    settings.L10n.translate_gis_layer = True
    # Uncomment this to Translate Location Names
    settings.L10n.translate_gis_location = True
    # Uncomment this for Alternate Location Names
    #settings.L10n.name_alt_gis_location = True
    # Uncomment this to Translate Organisation Names/Acronyms
    #settings.L10n.translate_org_organisation = True
    # Uncomment this to Translate Site Names
    #settings.L10n.translate_org_site = True
    # PDF font
    settings.L10n.pdf_export_font = ['Helvetica', 'Helvetica-Bold']

    # Finance settings
    settings.fin.currencies = {
        "BTC" : "BitCoin",
        "CZK" : "Czech Koruna",
        "EUR" : "Euros",
        "GBP" : "Great British Pounds",
        "USD" : "United States Dollars",
    }
    settings.fin.currency_default = "CZK"
    #settings.fin.currency_writable = False # False currently breaks things

    # PDF settings
    # Default page size (defaults to A4)
    #settings.base.pdf_size = "Letter"
    # Default page orientation (defaults to "Auto" to auto-adapt for wide tables)
    #settings.base.pdf_orientation = "Landscape"
    # Location of Logo used in pdfs headers
    #settings.ui.pdf_logo = "static/img/mylogo.png"
    # Maximum number of records in PDF exports (None for unlimited)
    #settings.base.pdf_max_rows = 1000

    #Uncomment to add a title row to XLS exports
    #settings.base.xls_title_row = True

    # GIS (Map) settings
    # Size of the Embedded Map
    # Change this if-required for your theme
    # NB API can override this in specific modules
    #settings.gis.map_height = 600
    #settings.gis.map_width = 1000
    # Restrict the Location Selector to just certain countries
    # NB This can also be over-ridden for specific contexts later
    # e.g. Activities filtered to those of parent Project
    #settings.gis.countries = ("US",)
    # Uncomment to pass Addresses imported from CSV to a Geocoder to try and automate Lat/Lon
    settings.gis.geocode_imported_addresses = "google"
    # Hide the Map-based selection tool in the Location Selector
    #settings.gis.map_selector = False
    # Show LatLon boxes in the Location Selector
    settings.gis.latlon_selector = True
    # Use Building Names as a separate field in Street Addresses?
    #settings.gis.building_name = False
    # Use a non-default fillColor for Clustered points
    #settings.gis.cluster_fill = "8087ff"
    # Disable the label for clustered points
    #settings.gis.cluster_label = False
    # Use a non-default strokeColor for Clustered points
    #settings.gis.cluster_stroke = "2b2f76"
    # Use a non-default fillColor for Selected points
    #settings.gis.select_fill = "ffdc33"
    # Use a non-default strokeColor for Selected points
    #settings.gis.select_stroke = "ff9933"
    # Display Resources recorded to Admin-Level Locations on the map
    # @ToDo: Move into gis_config?
    # Uncomment to fall back to country LatLon to show resources, if nothing better available
    #settings.gis.display_L0 = True
    # Currently unused
    #settings.gis.display_L1 = False
    # Uncomment this to do deduplicate lookups on Imports via PCode (as alternative to Name)
    #settings.gis.lookup_code = "PCode"
    # Set this if there will be multiple areas in which work is being done,
    # and a menu to select among them is wanted.
    #settings.gis.menu = "Maps"
    # Maximum Marker Size
    # (takes effect only on display)
    #settings.gis.marker_max_height = 35
    #settings.gis.marker_max_width = 30
    # Duplicate Features so that they show wrapped across the Date Line?
    # Points only for now
    # lon<0 have a duplicate at lon+360
    # lon>0 have a duplicate at lon-360
    #settings.gis.duplicate_features = True
    # Uncomment to use CMS to provide Metadata on Map Layers
    #settings.gis.layer_metadata = True
    # Uncomment to show Clear Layers tool
    settings.gis.clear_layers = True
    # Uncomment to hide the Geolocation control
    #settings.gis.geolocate_control = False
    # Uncomment to hide the WMS GetFeatureInfo control
    #settings.gis.getfeature_control = False
    # Uncomment to hide Layer Properties tool
    #settings.gis.layer_properties = False
    # Uncomment to hide the Base Layers folder in the LayerTree
    #settings.gis.layer_tree_base = False
    # Uncomment to hide the Overlays folder in the LayerTree
    #settings.gis.layer_tree_overlays = False
    # Uncomment to change the label of the Overlays folder in the LayerTree
    #settings.gis.label_overlays = "Overlays"
    # Uncomment to not expand the folders in the LayerTree by default
    #settings.gis.layer_tree_expanded = False
    # Uncomment to have custom folders in the LayerTree use Radio Buttons
    #settings.gis.layer_tree_radio = True
    # Uncomment to display the Map Legend as a floating DIV
    settings.gis.legend = "float"
    # Uncomment to use scalability-optimized options lookups in location filters
    #settings.gis.location_filter_bigtable_lookups = True
    # Uncomment to prevent showing LatLon in Location Represents
    #settings.gis.location_represent_address_only = True
    # Mouse Position: 'normal', 'mgrs' or None
    #settings.gis.mouse_position = "mgrs"
    # Uncomment to show the Navigation controls on the toolbar
    settings.gis.nav_controls = True
    # Uncomment to hide the Overview map
    #settings.gis.overview = False
    # Uncomment to hide the permalink control
    #settings.gis.permalink = False
    # Resources which can be directly added to the main map
    #settings.gis.poi_create_resources = None
    settings.gis.poi_create_resources = [{"c":"event", "f":"incident_report", "table": "gis_poi", "label": T("Add Incident Report") ,"tooltip": T("Add Incident Report"), "layer":"Incident Reports", "location": "popup"}]
    # PoIs to export in KML/OSM feeds from Admin locations
    #settings.gis.poi_export_resources = ["cr_shelter", "hms_hospital", "org_office"]
    # Uncomment to show the Print control:
    # http://eden.sahanafoundation.org/wiki/UserGuidelines/Admin/MapPrinting
    #settings.gis.print_button = True
    # Uncomment to save a screenshot whenever a saved map is saved
    #settings.gis.config_screenshot = (820, 410)
    # Uncomment to hide the Save control, or set to "float"
    #settings.gis.save = False
    # Uncomment to hide the ScaleLine control
    #settings.gis.scaleline = False
    # Uncomment to hide the GeoNames search box
    #settings.gis.search_geonames = False
    # Uncomment to modify the Simplify Tolerance
    settings.gis.simplify_tolerance = 0
    # Uncomment this for highly-zoomed maps showing buildings
    #settings.gis.precision = 5
    # Uncomment to Hide the Toolbar from the main Map
    #settings.gis.toolbar = False
    # Uncomment to show Catalogue Layers in Map Widgets (e.g. Profile & Summary pages)
    #settings.gis.widget_catalogue_layers = True
    # Uncomment to show WMS Browser in Map Widgets (e.g. Profile & Summary pages)
    # - NB This also requires the active gis_config to have one configured
    #settings.gis.widget_wms_browser = True
    # Uncomment to hide the Zoom control
    #settings.gis.zoomcontrol = False
    # Uncomment to open Location represent links in a Popup Window
    #settings.gis.popup_location_link = True
    # Uncomment to include WKT in XML exports
    #settings.gis.xml_wkt = True
    # GeoNames username
    settings.gis.geonames_username = "trendspotter"

    # Messaging Settings
    # If you wish to use a parser.py in another folder than "default"
    #settings.msg.parser = "mytemplatefolder"
    # Uncomment to turn off enforcement of E.123 international phone number notation
    #settings.msg.require_international_phone_numbers = False
    # Uncomment to make basestation codes unique
    #settings.msg.basestation_code_unique = True

    # Use 'soft' deletes
    #settings.security.archive_not_delete = False

    # AAA Settings

    # Security Policy
    # http://eden.sahanafoundation.org/wiki/S3AAA#System-widePolicy
    # 1: Simple (default): Global as Reader, Authenticated as Editor
    # 2: Editor role required for Update/Delete, unless record owned by session
    # 3: Apply Controller ACLs
    # 4: Apply both Controller & Function ACLs
    # 5: Apply Controller, Function & Table ACLs
    # 6: Apply Controller, Function, Table ACLs and Entity Realm
    # 7: Apply Controller, Function, Table ACLs and Entity Realm + Hierarchy
    # 8: Apply Controller, Function, Table ACLs, Entity Realm + Hierarchy and Delegations
    #
    settings.security.policy = 7 # Organisation-ACLs

    # Ownership-rule for records without owner:
    # True = not owned by any user (strict ownership, default)
    # False = owned by any authenticated user
    #settings.security.strict_ownership = False

    # Audit
    # - can be a callable for custom hooks (return True to also perform normal logging, or False otherwise)
    # NB Auditing (especially Reads) slows system down & consumes diskspace
    #settings.security.audit_read = True
    #settings.security.audit_write = True

    # Lock-down access to Map Editing
    #settings.security.map = True
    # Allow non-MapAdmins to edit hierarchy locations? Defaults to True if not set.
    # (Permissions can be set per-country within a gis_config)
    #settings.gis.edit_Lx = False
    # Allow non-MapAdmins to edit group locations? Defaults to False if not set.
    #settings.gis.edit_GR = True
    # Note that editing of locations used as regions for the Regions menu is always
    # restricted to MapAdmins.
    # Uncomment to disable that LatLons are within boundaries of their parent
    #settings.gis.check_within_parent_boundaries = False
    # Uncomment to Disable the Postcode selector in the LocationSelector
    #settings.gis.postcode_selector = False

    # Increase these if having scalability issues or slow connections
    #settings.ui.autocomplete_delay = 800
    #settings.ui.autocomplete_min_chars = 2
    #settings.ui.filter_auto_submit = 800
    #settings.ui.report_auto_submit = 800
    # Enable this for a UN-style deployment
    #settings.ui.cluster = True
    # Enable this to use the label 'Camp' instead of 'Shelter'
    #settings.ui.camp = True
    # Enable this to have Open links in IFrames open a full page in a new tab
    settings.ui.iframe_opens_full = True
    # Enable this to change the label for 'Attachments' tabs
    #settings.ui.label_attachments = "Attachments"
    # Uncomment to configure the LocationSelector labels for the Map button with Points
    #settings.label_locationselector_map_point_add = "Find on Map"
    #settings.label_locationselector_map_point_view = "Find on Map"
    # Enable this to change the label for 'Mobile Phone'
    #settings.ui.label_mobile_phone = "Cell Phone"
    # Enable this to change the label for 'Postcode'
    #settings.ui.label_postcode = "ZIP Code"
    # Enable Social Media share buttons
    #settings.ui.social_buttons = True
    # Enable this to show pivot table options form by default
    #settings.ui.hide_report_options = False
    # Uncomment to show created_by/modified_by using Names not Emails
    settings.ui.auth_user_represent = "name"
    # Uncomment to control the dataTables layout: https://datatables.net/reference/option/dom
    # Default:
    #settings.ui.datatables_dom = "fril<'dataTable_table't>pi"
    # dataTables.Foundation.js would set to this:
    #settings.ui.datatables_dom = "<'row'<'large-6 columns'l><'large-6 columns'f>r>t<'row'<'large-6 columns'i><'large-6 columns'p>>"
    # Move the export_formats after the pagination control
    #settings.ui.datatables_initComplete = '''$('.dataTables_paginate').after($('.dt-export-options'))'''
    # Uncomment for dataTables to use a different paging style:
    #settings.ui.datatables_pagingType = "bootstrap"
    # Uncomment to restrict the export formats available
    #settings.ui.export_formats = ("kml", "pdf", "rss", "xls", "xml")
    # Uncomment to change the label/class of FilterForm clear buttons
    #settings.ui.filter_clear = "Clear"
    # Uncomment to include an Interim Save button on CRUD forms
    settings.ui.interim_save = True
    # Uncomment to enable icons on action buttons (requires corresponding CSS)
    settings.ui.use_button_icons = True
    # Uncomment to use S3MultiSelectWidget on all dropdowns (currently the Auth Registration page & LocationSelectorWidget2 listen to this)
    #settings.ui.multiselect_widget = True
    # Theme for the S3HierarchyWidget
    #settings.ui.hierarchy_theme = dict(css = "../themes/MYTHEME",
    #                                   icons = True,
    #                                   stripes = False,
    #                                   )
    # Uncomment to show a default cancel button in standalone create/update forms
    settings.ui.default_cancel_button = True
    # Uncomment to disable responsive behavior of datatables
    #settings.ui.datatables_responsive = False
    # Uncomment to enable double scroll bars on non-responsive datatables
    #settings.ui.datatables_double_scroll = True
    # Uncomment to modify the label of the Permalink
    #settings.ui.label_permalink = "Permalink"
    # Uncomment to modify the main menu logo
    #settings.ui.menu_logo = URL(c="static", f="img", args=["S3menulogo.png"])
    # Configure business hours to indicate in organizer (can be a list)
    #settings.ui.organizer_business_hours = {"dow": [1,2,3,4,5], "start": "08:00", "end": "18:00"}
    # Configure a time format for organizer events to override locale default
    #settings.ui.organizer_time_format = "H:mm"
    # Configure the snap raster width in organizer (hh:mm:ss)
    #settings.ui.organizer_snap_duration = "00:15:00"

    # -------------------------------------------------------------------------
    # Sync
    # Uncomment if this deployment exposes public data sets
    settings.sync.data_repository = True

    # -------------------------------------------------------------------------
    # Asset
    # Uncomment to have a specific asset type for Telephones
    settings.asset.telephones = True

    # -------------------------------------------------------------------------
    # Beneficiary Registry

    # --- Terminology ---
    # Terminology to use when referring to cases (Beneficiary|Client|Case)
    #settings.br.case_terminology = "Beneficiary"
    # Terminology to use when referring to measures of assistance (Counseling|Assistance)
    #settings.br.assistance_terminology = "Counseling"

    # --- Need Categories ---
    # Use hierarchical need categories
    #settings.br.needs_hierarchical = True
    # Let all orgs use a common set of need categories
    #settings.br.needs_org_specific = False

    # --- Basic Case Options ---
    # Show the case organisation even if only one option
    #settings.br.case_hide_default_org = False
    # Disable assignment of cases to staff
    #settings.br.case_manager = False
    # Expose fields to track home address in case file
    #settings.br.case_address = True
    # Disable documentation of language details in case file
    #settings.br.case_language_details = False
    # Control household size tracking in case files: False, True or "auto" (=default)
    #settings.br.household_size = "auto"
    # Layout class for beneficiary ID cards
    #settings.br.id_card_layout = IDCardLayout
    # User roles with permission to export beneficiary ID cards
    #settings.br.id_card_export_roles = ["ORG_ADMIN", "CASE_MANAGEMENT"]

    # --- Case File Tabs ---
    # Hide the contact info tab in case files
    #settings.br.case_contacts_tab = False
    # Show the ID-tab in case files
    #settings.br.case_id_tab = True
    # Hide the family members tab in case files
    #settings.br.case_family_tab = False
    # Enable case file tab to track service contacts
    #settings.br.service_contacts = True
    # Show tab with notes journal
    #settings.br.case_notes_tab = True
    # Show the photos-tab in case files
    #settings.br.case_photos_tab = True
    # Hide the documents-tab in case files
    #settings.br.case_documents_tab = False

    # --- Attachments ---
    # Hide activity attachments from case documents-tab
    #settings.br.case_include_activity_docs = False
    # Hide case group attachments from case documents-tab
    #settings.br.case_include_group_docs = False

    # --- Case Activities ---
    # Disable tracking of case activities
    #settings.br.case_activities = False
    # Disable assignment of case activities to staff
    #settings.br.case_activity_manager = False
    # Expose "urgent" priority for case activities (=emergencies)
    #settings.br.case_activity_urgent_option = True
    # Disable need categories in case activities
    #settings.br.case_activity_need = False
    # Use a free-text subject line in case activities
    #settings.br.case_activity_subject = True
    # Use a free-text field to document need details in case activities
    #settings.br.case_activity_need_details = True
    # Disable status and end-date for case activities
    #settings.br.case_activity_status = False
    # Show end-date of case activites (True=show, "writable"=allow manual edit)
    #settings.br.case_activity_end_date = True
    # Enable inline-updates of case activities
    #settings.br.case_activity_updates = True
    # Disable fields for outcome documentation
    #settings.br.case_activity_outcome = False
    # Allow documents to be attached to case activities
    #settings.br.case_activity_documents = True

    # --- Assistance Measures ---
    # Disable tracking of individual assistance measures
    #settings.br.manage_assistance = False
    # Use separate tab to track assistance measures
    #settings.br.assistance_tab = True
    # Hide inline assistance measures on case activity tab
    #settings.br.assistance_inline = False
    # Document date+time (rather than only date) for assistance measures
    #settings.br.assistance_measures_use_time = True
    # Set default status of assistance measures to closed
    #settings.br.assistance_measure_default_closed = True
    # Disable assignment of assistance measures to staff
    #settings.br.assistance_manager = False
    # Disable types of assistance (e.g. if there is only one type)
    #settings.br.assistance_types = False

    # --- Assistance Themes ---
    # Enable assistance themes
    #settings.br.assistance_themes = True
    # Use a common set of assistance themes rather than org-specific
    #settings.br.assistance_themes_org_specific = False
    # Organize assistance themes by org sector
    #settings.br.assistance_themes_sectors = True
    # Organize assistance themes by need type
    #settings.br.assistance_themes_needs = True
    # Document assistance details per theme
    #settings.br.assistance_details_per_theme = True
    # Enable auto-linking of assistance measure details to case activities
    #settings.br.assistance_activity_autolink = True
    # Disable tracking of effort (=hours spent) for assistance measures
    #settings.br.assistance_track_effort = False

    # -------------------------------------------------------------------------
    # CMS
    # Uncomment this to hide CMS from module index pages
    #settings.cms.hide_index = True
    # Uncomment to use Bookmarks in Newsfeed
    #settings.cms.bookmarks = True
    # Uncomment to use have Filter form in Newsfeed be open by default
    #settings.cms.filter_open = True
    # Uncomment to adjust filters in Newsfeed when clicking on locations instead of opening the profile page
    #settings.cms.location_click_filters = True
    # Uncomment to use Rich Text editor in Newsfeed
    settings.cms.richtext = True
    # Uncomment to show Events in Newsfeed
    settings.cms.show_events = True
    # Uncomment to hide Attachments in Newsfeed
    #settings.cms.show_attachments = False
    # Uncomment to show Links in Newsfeed
    settings.cms.show_links = True
    # Uncomment to show Tags in Newsfeed
    settings.cms.show_tags = True
    # Uncomment to show post Titles in Newsfeed
    #settings.cms.show_titles = True
    # Uncomment to use organisation_id instead of created_by in Newsfeed
    #settings.cms.organisation = "post_organisation.organisation_id"
    # Uncomment to use org_group_id in Newsfeed
    #settings.cms.organisation_group = "created_by$org_group_id"
    #settings.cms.organisation_group = "post_organisation_group.group_id"
    # Uncomment to use person_id instead of created_by in Newsfeed
    #settings.cms.person = "person_id"

    # -------------------------------------------------------------------------
    # Shelters
    # Uncomment to use a dynamic population estimation by calculations based on registrations
    #settings.cr.shelter_population_dynamic = True
    # Uncomment to disable people registration in shelters
    #settings.cr.people_registration = False
    # Uncomment to use Tags for Shelters
    settings.cr.tags = True
    # Uncomment to generate tasks from shelter inspections (requires project module)
    #settings.cr.shelter_inspection_tasks = True
    # Configure active statuses for shelter inspection tasks (subset of project.task_status_opts)
    #settings.cr.shelter_inspection_task_active_statuses = (2, 3, 6)

    # -------------------------------------------------------------------------
    # Disaster Victim Registry / Case Management

    # Uncomment to use the term Beneficiary instead of Case
    #settings.dvr.label = "Beneficiary"

    # Uncomment this to enable tracking of transfer origin/destination sites
    #settings.dvr.track_transfer_sites = True
    # Uncomment this to enable features to manage transferability of cases
    #settings.dvr.manage_transferability = True

    # Uncomment this to enable household size in cases, set to "auto" for automatic counting
    #settings.dvr.household_size = True

    # Uncomment this to expose flags to mark appointment types as mandatory
    #settings.dvr.mandatory_appointments = True
    # Uncomment this to have appointments with personal presence update last_seen_on
    #settings.dvr.appointments_update_last_seen_on = True
    # Uncomment this to automatically update the case status when appointments are completed
    #settings.dvr.appointments_update_case_status = True
    # Uncomment this to automatically close appointments when registering certain case events
    #settings.dvr.case_events_close_appointments = True

    # Uncomment this to have allowance payments update last_seen_on
    #settings.dvr.payments_update_last_seen_on = True

    # Uncomment this to use service types for group/case activites
    #settings.dvr.activity_use_service_type = True
    # Uncomment this to use sectors in group/case activities
    #settings.dvr.activity_sectors = True
    # Uncomment this to use case activity types
    #settings.dvr.activity_types = True
    # Uncomment this to use hierarchical case activity types
    #settings.dvr.activity_types_hierarchical = True
    # Uncomment this to use status field in case activities
    #settings.dvr.case_activity_use_status = True
    # Uncomment this to disable follow-up fields in case activities
    #settings.dvr.case_activity_follow_up = False

    # Uncomment this to include case activity docs on beneficiary documents-tab
    #settings.dvr.case_include_activity_docs = True
    # Uncomment this to include case group docs on beneficiary documents-tab
    #settings.dvr.case_include_group_docs = True

    # Uncomment this if Case activities use multiple Needs
    #settings.dvr.case_activity_needs_multiple = True
    # Uncomment this to use service types for needs
    #settings.dvr_needs_use_service_type = True
    # Uncomment this to use hierarchical need types
    #settings.dvr.needs_hierarchical = True
    # Uncomment this to use hierarchical vulnerability types
    #settings.dvr.vulnerability_types_hierarchical = True

    # Uncomment this to manage individual response actions in case activities
    #settings.dvr.manage_response_actions = True
    # Uncomment this to not use response action types
    #settings.dvr.response_types = False
    # Uncomment this to use response themes
    #settings.dvr.response_themes = True
    # Uncomment this to not use org-specific response themes
    #settings.dvr.response_themes_org_specific = False
    # Uncomment this to link response themes to org sectors
    #settings.dvr.response_themes_sectors = True
    # Uncomment this to link response themes to needs
    #settings.dvr.response_themes_needs = True
    # Uncomment this to automatically link responses to case activities
    #settings.dvr.response_activity_autolink = True
    # Uncomment this to activate features for response planning
    #settings.dvr.response_planning = True
    # Uncomment this to use a separate due-date for responses
    #settings.dvr.response_due_date = True
    # Uncomment this to use date+time for responses (instead of just date)
    #settings.dvr.response_use_time = True

    # Configure a regular expression pattern for ID Codes (QR Codes)
    #settings.dvr.id_code_pattern = "(?P<label>[^,]*),(?P<first_name>[^,]*),(?P<last_name>[^,]*),(?P<date_of_birth>[^,]*)"
    # Uncomment this to show a warning during event registration if the person is not currently checked-in
    #settings.dvr.event_registration_checkin_warning = True
    # Uncomment this to show profile pictures in event registration UI only on demand
    #settings.dvr.event_registration_show_picture = False

    # -------------------------------------------------------------------------
    # Events
    # Uncomment to use the term Disaster instead of Event
    #settings.event.label = "Disaster"
    # Uncomment to not use Incidents under Events
    #settings.event.incident = False
    # Uncomment to preserve linked Incidents when an Event is deleted
    # NB Changing this setting requires a DB migration
    #settings.event.cascade_delete_incidents = False
    # Make Event Types Hierarchical
    settings.event.types_hierarchical = True
    # Make Incident Types Hierarchical
    settings.event.incident_types_hierarchical = True
    # Uncomment to allow the use of Exercise Events
    settings.event.exercise = True
    # Show tab for Event Dispatch
    #settings.event.dispatch_tab = False
    # Hide tab for Event Impacts
    #settings.event.impact_tab = False
    # Hide tab for Event Collection Targets
    #settings.event.target_tab = False
    # Hide tab for Event Collections
    #settings.event.collection_tab = False
    # Hide tab for Incident Dispatch
    #settings.event.incident_dispatch_tab = False
    # Show tab for Incident Impacts
    settings.event.incident_impact_tab = True
    # Show tab for Incident Teams
    settings.event.incident_teams_tab = True

    # -------------------------------------------------------------------------
    # Members
    # Hide Membership Types
    #settings.member.membership_types = False
    # Show a CV tab for Members
    settings.member.cv_tab = True

    # -------------------------------------------------------------------------
    # Persons
    # Uncomment to allow person imports to match even without email addresses
    settings.pr.import_update_requires_email = False
    # Uncomment this to enable support for third gender
    #settings.pr.hide_third_gender = False
    # Uncomment to a fuzzy search for duplicates in the new AddPersonWidget2
    settings.pr.lookup_duplicates = True
    # Uncomment to hide fields in S3AddPersonWidget[2]
    #settings.pr.request_dob = False
    #settings.pr.request_email = False
    #settings.pr.request_gender = False
    # Uncomment to show field in S3AddPersonWidget
    #settings.pr.request_home_phone = True
    # Uncomment to modify the order of Names
    settings.pr.name_format = "%(first_name)s %(middle_name)s %(last_name)s"
    # Uncomment to prevent selecting existing users in the old S3AddPersonWidget
    settings.pr.select_existing = False
    # Uncomment to prevent showing HR details in S3PersonAutocompleteWidget results
    #settings.pr.search_shows_hr_details = False
    # Uncomment to hide Emergency Contacts in Person Contacts page
    #settings.pr.show_emergency_contacts = False
    # Uncomment to hide the Address tab in person details
    #settings.pr.use_address = False
    # Show separate Public and Private Contacts Tabs
    settings.pr.contacts_tabs = ("public", "private")
    # Uncomment this to allow persons to belong to multiple case groups ("households")
    #settings.pr.multiple_case_groups = True

    # -------------------------------------------------------------------------
    # Organisations
    # Uncomment to use an Autocomplete for Organisation lookup fields
    #settings.org.autocomplete = True
    # Enable the Organisation Sector field
    settings.org.sector = True
    # But hide it from the rheader
    #settings.org.sector_rheader = False
    # Enable the use of Organisation Branches
    settings.org.branches = True
    # Show branches as tree rather than as table
    #settings.org.branches_tree_view = True
    # Make Facility Types Hierarchical
    settings.org.facility_types_hierarchical = True
    # Enable the use of Organisation Groups & what their name is
    #settings.org.groups = "Coalition"
    #settings.org.groups = "Network"
    # Organisation Location context
    settings.org.organisation_location_context = "organisation_location.location_id"
    # Make Organisation Types Hierarchical
    settings.org.organisation_types_hierarchical = True
    # Make Organisation Types Multiple
    settings.org.organisation_types_multiple = True
    # Show Organisation Types in the rheader
    settings.org.organisation_type_rheader = True
    # Enable the use of Organisation Regions
    settings.org.regions = True
    # Make Organisation Regions Hierarchical
    settings.org.regions_hierarchical = True
    # Enable the use of Organisation Region Countries
    settings.org.region_countries = True
    # Uncomment to show a Tab for Organisation Resources
    settings.org.resources_tab = True
    # Make Services Hierarchical
    settings.org.services_hierarchical = True
    # Set the length of the auto-generated org/site code the default is 10
    #settings.org.site_code_len = 10
    # Set the label for Sites
    settings.org.site_label = "Facility"
    # Uncomment to show the date when a Site (Facilities-only for now) was last contacted
    settings.org.site_last_contacted = True
    # Uncomment to use an Autocomplete for Site lookup fields
    #settings.org.site_autocomplete = True
    # Extra fields to search in Autocompletes & display in Representations
    #settings.org.site_autocomplete_fields = ("instance_type", "location_id$L1", "location_id$addr_street", "organisation_id$name")
    # Uncomment to hide inv & req tabs from Sites
    #settings.org.site_inv_req_tabs = False
    # Uncomment to allow Sites to be staffed by Volunteers
    settings.org.site_volunteers = True
    # Enable certain fields just for specific Organisations
    # Requires a call to settings.set_org_dependent_field(field)
    # empty list => disabled for all (including Admin)
    #settings.org.dependent_fields = \
    #    {#"<table name>.<field name>"  : ["<Organisation Name>"],
    #     "pr_person_details.mother_name"             : [],
    #     "pr_person_details.father_name"             : [],
    #     "pr_person_details.company"                 : [],
    #     "pr_person_details.affiliations"            : [],
    #     "vol_volunteer.active"                      : [],
    #     "vol_volunteer_cluster.vol_cluster_type_id"      : [],
    #     "vol_volunteer_cluster.vol_cluster_id"          : [],
    #     "vol_volunteer_cluster.vol_cluster_position_id" : [],
    #     }
    # Uncomment to make Office codes unique
    #settings.org.office_code_unique = True
    # Uncomment to make Facility codes unique
    #settings.org.facility_code_unique = True
    # Uncomment to use Tags for Organisations, Offices & Facilities
    settings.org.tags = True

    # -------------------------------------------------------------------------
    # Human Resource Management
    # Uncomment to change the label for 'Staff'
    #settings.hrm.staff_label = "Contacts"
    # Uncomment to allow Staff & Volunteers to be registered without an email address
    #settings.hrm.email_required = False
    # Uncomment to allow Staff & Volunteers to be registered without an Organisation
    settings.hrm.org_required = False
    # Uncomment if their are only Staff & Volunteers from a single Organisation with no Branches
    #settings.hrm.multiple_orgs = False
    # Uncomment to disable the 'Send Message' action button
    #settings.hrm.compose_button = False
    # Uncomment to allow HR records to be deletable rather than just marking them as obsolete
    settings.hrm.deletable = True
    # Uncomment to hide Job Titles
    #settings.hrm.use_job_titles = False
    # Uncomment to allow HRs to have multiple Job Titles
    settings.hrm.multiple_job_titles = True
    # Uncomment to have each root Org use a different Job Title Catalog
    settings.hrm.org_dependent_job_titles = True
    # Uncomment to display & search by National ID
    #settings.hrm.use_national_id = True
    # Uncomment to hide the Staff resource
    #settings.hrm.show_staff = False
    # Uncomment to have Staff use their Home Address as fallback if they have no Site defined
    settings.hrm.location_staff = ("site_id", "person_id")
    # Uncomment to have Volunteers use their Site Address as fallback if they have no Home Address defined
    settings.hrm.location_vol = ("person_id", "site_id")
    # Uncomment this to allow multiple site contacts per site (e.g. if needing a separate contact per sector)
    settings.hrm.site_contact_unique = False
    # Uncomment to allow hierarchical categories of Skills, which each need their own set of competency levels.
    settings.hrm.skill_types = True
    # Uncomment to disable Staff experience
    #settings.hrm.staff_experience = False
    # Uncomment to enable Volunteer 'active' field
    # - can also be made a function which is called to calculate the status based on recorded hours
    # Custom label for Organisations in HR module
    settings.hrm.organisation_label = "Organization / Branch"
    # Custom label for Top-level Organisations in HR module
    settings.hrm.root_organisation_label = "Organization"
    settings.hrm.vol_active = True
    # Uncomment to define a Tooltip to show when viewing the Volunteer 'active' field
    settings.hrm.vol_active_tooltip = "A volunteer is defined as active if they've participated in an average of 8 or more hours of Program work or Trainings per month in the last year"
    # Uncomment to disable Volunteer experience
    #settings.hrm.vol_experience = False
    # Uncomment to show the Organisation name in HR represents
    settings.hrm.show_organisation = True
    # Uncomment to consolidate tabs into a single CV
    #settings.hrm.cv_tab = True
    # Uncomment to consolidate tabs into Staff Record (set to False to hide the tab)
    #settings.hrm.record_tab = "record"
    # Uncomment to disable the use of Volunteer Awards
    #settings.hrm.use_awards = False
    # Uncomment to disable the use of HR Certificates
    #settings.hrm.use_certificates = False
    # Uncomment to filter certificates by (root) Organisation & hence not allow Certificates from other orgs to be added to a profile (except by Admin)
    #settings.hrm.filter_certificates = True
    # Uncomment to auto-create certificates for courses
    #settings.hrm.create_certificates_from_courses = True
    # Uncomment to enable the use of Staff/Volunteer IDs
    settings.hrm.use_code = True
    # Uncomment to disable the use of HR Credentials
    #settings.hrm.use_credentials = False
    # Uncomment to disable the use of HR Description
    #settings.hrm.use_description = None
    # Uncomment to enable the use of HR Education
    #settings.hrm.use_education = True
    # Uncomment to disable the use of HR ID Tab
    #settings.hrm.use_id = False
    # Uncomment to disable the use of HR Address Tab
    #settings.hrm.use_address = False
    # Uncomment to disable the use of HR Skills
    #settings.hrm.use_skills = False
    # Uncomment to enable tracking of staff salaries
    #settings.hrm.salary = True
    # Uncomment to disable the use of HR Teams
    #settings.hrm.teams = False
    # Uncomment to disable the use of HR Trainings
    #settings.hrm.use_trainings = False
    # Uncomment this to configure tracking of internal/external training instructors
    #settings.hrm.training_instructors = "external"
    # Uncomment this to modify the training filter to be AND not OR
    #settings.hrm.training_filter_and = True
    # Uncomment this to have Pass marks defined by Course
    settings.hrm.course_pass_marks = True
    # Uncomment to use activity types in experience record, specify as {"code":"label", ...}
    #settings.hrm.activity_types = {"rdrt": "RDRT Mission"}

    # -------------------------------------------------------------------------
    # Inventory Management
    #settings.inv.collapse_tabs = False
    # Uncomment to customise the label for Facilities in Inventory Management
    #settings.inv.facility_label = "Facility"
    # Uncomment if you need a simpler (but less accountable) process for managing stock levels
    #settings.inv.direct_stock_edits = True
    # Uncomment to have Warehouse Types be Organisation-dependent
    settings.inv.org_dependent_warehouse_types = True
    # Uncomment to call Stock Adjustments, 'Stock Counts'
    settings.inv.stock_count = True
    # Use the term 'Order' instead of 'Shipment'
    settings.inv.shipment_name = "order"
    # Uncomment to validate for Unique Warehouse Codes
    #settings.inv.warehouse_code_unique = True
    # Uncomment to not track pack values
    #settings.inv.track_pack_values = False
    settings.inv.show_mode_of_transport = True
    settings.inv.send_show_org = False
    settings.inv.send_show_time_in = True
    settings.inv.send_form_name = "Tally Out Sheet"
    settings.inv.send_short_name = "TO"
    settings.inv.send_ref_field_name = "Tally Out Number"
    settings.inv.recv_form_name = "Acknowledgement Receipt for Donations Received Form"
    settings.inv.recv_shortname = "ARDR"
    # Types common to both Send and Receive
    settings.inv.shipment_types = {
             0: T(""),
             1: T("Other Warehouse"),
             2: T("Donation"),
             3: T("Foreign Donation"),
             4: T("Local Purchases"),
             5: T("Confiscated Goods from Bureau Of Customs")
        }
    #settings.inv.send_types = {
    #        21: T("Distribution")
    #    }
    #settings.inv.send_type_default = 1
    #settings.inv.recv_types = {
    #        32: T("Donation"),
    #        34: T("Purchase"),
    #    }
    #settings.inv.item_status = {
    #        0: current.messages["NONE"],
    #        1: T("Dump"),
    #        2: T("Sale"),
    #        3: T("Reject"),
    #        4: T("Surplus")
    #   }

    # -------------------------------------------------------------------------
    # Requests Management
    # Uncomment to disable Inline Forms in Requests module
    #settings.req.inline_forms = False
    # Label for Inventory Requests
    #settings.req.type_inv_label = "Donations"
    # Label for People Requests
    #settings.req.type_hrm_label = "Volunteers"
    # Label for Requester
    #settings.req.requester_label = "Site Contact"
    # Uncomment to disable Recurring Request
    #settings.req.recurring = False
    #settings.req.requester_optional = True
    # Uncomment if the User Account logging the Request is NOT normally the Requester
    #settings.req.requester_is_author = False
    # Filter Requester as being from the Site
    #settings.req.requester_from_site = True
    # Set the Requester as being an HR for the Site if no HR record yet & as Site contact if none yet exists
    #settings.req.requester_to_site = True
    #settings.req.date_writable = False
    # Allow the status for requests to be set manually,
    # rather than just automatically from commitments and shipments
    #settings.req.status_writable = False
    #settings.req.item_quantities_writable = True
    #settings.req.skill_quantities_writable = True
    #settings.req.show_quantity_transit = False
    #settings.req.multiple_req_items = False
    #settings.req.prompt_match = False
    #settings.req.items_ask_purpose = False
    # Uncomment to disable the Commit step in the workflow & simply move direct to Ship
    #settings.req.use_commit = False
    # Uncomment to have Donations include a 'Value' field
    settings.req.commit_value = True
    # Uncomment to allow Donations to be made without a matching Request
    #settings.req.commit_without_request = True
    # Uncomment to Commit Named People rather than simply Anonymous Skills
    #settings.req.commit_people = True
    # Uncomment if the User Account logging the Commitment is NOT normally the Committer
    #settings.req.comittter_is_author = False
    # Should Requests ask whether Security is required?
    #settings.req.ask_security = True
    # Should Requests ask whether Transportation is required?
    settings.req.ask_transport = True
    #settings.req.use_req_number = False
    #settings.req.generate_req_number = False
    #settings.req.req_form_name = "Request Issue Form"
    #settings.req.req_shortname = "RIS"
    # Restrict the type of requests that can be made, valid values in the
    # list are ("Stock", "People", "Other"). If this is commented out then
    # all types will be valid.
    #settings.req.req_type = ("Stock",)
    # Uncomment to enable Summary 'Site Needs' tab for Offices/Facilities
    settings.req.summary = True
    # Uncomment to restrict adding new commits to Completed commits
    #settings.req.req_restrict_on_complete = True

    # Custom Crud Strings for specific req_req types
    #settings.req.req_crud_strings = dict()
    #ADD_ITEM_REQUEST = T("Make a Request for Donations")
    # req_req Crud Strings for Item Request (type=1)
    #settings.req.req_crud_strings[1] = Storage(
    #    label_create = ADD_ITEM_REQUEST,
    #    title_display = T("Request for Donations Details"),
    #    title_list = T("Requests for Donations"),
    #    title_update = T("Edit Request for Donations"),
    #    label_list_button = T("List Requests for Donations"),
    #    label_delete_button = T("Delete Request for Donations"),
    #    msg_record_created = T("Request for Donations Added"),
    #    msg_record_modified = T("Request for Donations Updated"),
    #    msg_record_deleted = T("Request for Donations Canceled"),
    #    msg_list_empty = T("No Requests for Donations"))
    #ADD_PEOPLE_REQUEST = T("Make a Request for Volunteers")
    # req_req Crud Strings for People Request (type=3)
    #settings.req.req_crud_strings[3] = Storage(
    #    label_create = ADD_PEOPLE_REQUEST,
    #    title_display = T("Request for Volunteers Details"),
    #    title_list = T("Requests for Volunteers"),
    #    title_update = T("Edit Request for Volunteers"),
    #    label_list_button = T("List Requests for Volunteers"),
    #    label_delete_button = T("Delete Request for Volunteers"),
    #    msg_record_created = T("Request for Volunteers Added"),
    #    msg_record_modified = T("Request for Volunteers Updated"),
    #    msg_record_deleted = T("Request for Volunteers Canceled"),
    #    msg_list_empty = T("No Requests for Volunteers"))

    # -------------------------------------------------------------------------
    # Supply
    # Name of the Default Item Catalog. Do not edit after deployment
    #settings.supply.catalog_default = "Default"
    # Disable the use of Multiple Item Catalogs
    #settings.supply.catalog_multi = False
    # Disable the use of Alternative Items
    #settings.supply.use_alt_name = False

    # -------------------------------------------------------------------------
    # Projects
    # Uncomment this to use settings suitable for a global/regional organisation (e.g. DRR)
    settings.project.mode_3w = True
    # Uncomment this to use DRR (Disaster Risk Reduction) extensions
    settings.project.mode_drr = True
    # Uncomment this to use settings suitable for detailed Task management
    settings.project.mode_task = True
    # Uncomment this to use link Projects to Events
    settings.project.event_projects = True
    # Uncomment this to use Activities for Projects & Tasks
    settings.project.activities = True
    # Uncomment this to use link Activities to Events
    settings.project.event_activities = True
    # Uncomment this to use Activity Types for Activities & Projects
    settings.project.activity_types = True
    # Uncomment this to filter dates in Activities
    #settings.project.activity_filter_year = True
    # Uncomment this to not use Beneficiaries for Activities
    #settings.project.get_project_activity_beneficiaries = False
    # Uncomment this to not use Item Catalog for Distributions
    #settings.project.activity_items = False
    # Uncomment this to use Codes for projects
    #settings.project.codes = True
    # Uncomment this to call project locations 'Communities'
    #settings.project.community = True
    # Uncomment this to enable Demographics in 3W projects
    settings.project.demographics = True
    # Uncomment this to enable Hazards in 3W projects
    settings.project.hazards = True
    # Uncomment this to enable Indicators in projects
    settings.project.indicators = True
    # Uncomment this to enable Milestones in projects
    settings.project.milestones = True
    # Uncomment this to use Projects for Activities & Tasks
    settings.project.projects = True
    # Uncomment this to disable Sectors in projects
    #settings.project.sectors = False
    # Uncomment this to enable Programmes in projects
    settings.project.programmes = True
    # Uncomment this to enable Budgets in Programmes
    settings.project.programme_budget = True
    # Uncomment this to enable Themes in 3W projects
    settings.project.themes = True
    # Uncomment this to use Theme Percentages for projects
    settings.project.theme_percentages = True
    # Uncomment this to use multiple Budgets per project
    settings.project.multiple_budgets = True
    # Uncomment this to use multiple Organisations per project
    settings.project.multiple_organisations = True
    # Uncomment this to customise
    # Links to Filtered Components for Donors & Partners
    #settings.project.organisation_roles = {
    #    1: T("Lead Implementer"), # T("Host National Society")
    #    2: T("Partner"), # T("Partner National Society")
    #    3: T("Donor"),
    #    4: T("Customer"), # T("Beneficiary")?
    #    5: T("Super"), # T("Beneficiary")?
    #}
    #settings.project.organisation_lead_role = 1
    # Uncomment to customise the list of options for the Priority of a Task.
    # NB Be very cautious about doing this (see docstring in modules/s3cfg.py)
    #settings.project.task_priority_opts =
    # Uncomment to customise the list of options for the Status of a Task.
    # NB Be very cautious about doing this (see docstring in modules/s3cfg.py)
    #settings.project.task_status_opts =

    # -------------------------------------------------------------------------
    # Incidents
    # Uncomment this to use vehicles when responding to Incident Reports
    #settings.irs.vehicle = True

    # -------------------------------------------------------------------------
    # Transport
    # Uncomment to make Airport codes unique
    #settings.transport.airport_code_unique = True
    # Uncomment to make Seaport codes unique
    #settings.transport.seaport_code_unique = True
    # Uncomment to make Heliport codes unique
    #settings.transport.heliport_code_unique = True

    # -------------------------------------------------------------------------
    # Filter Manager
    #settings.search.filter_manager = False

    # if you want to have videos appearing in /default/video
    #settings.base.youtube_id = [dict(id = "introduction",
    #                                 title = T("Introduction"),
    #                                 video_id = "HR-FtR2XkBU"),]

    # -----------------------------------------------------------------------------
    # Mobile Forms
    # Configure mobile forms (example), see modules/s3cfg.py for details
    #settings.mobile.forms = [
    #    ("Beneficiaries", "pr_person", {"c": "dvr", "f": "person"}),
    #]
    # Disable mobile forms for dynamic tables:
    #settings.mobile.dynamic_tables = False

    # -----------------------------------------------------------------------------
    # XForms
    # Configure xform resources (example)
    #settings.xforms.resources = [("Request", "req_req")]

    # -------------------------------------------------------------------------
    # Comment/uncomment modules here to disable/enable them
    # @ToDo: Have the system automatically enable migrate if a module is enabled
    # Modules menu is defined in modules/eden/menu.py
    settings.modules = OrderedDict([
        # Core modules which shouldn't be disabled
        ("default", Storage(
            name_nice = T("Home"),
            restricted = False, # Use ACLs to control access to this module
            access = None,      # All Users (inc Anonymous) can see this module in the default menu & access the controller
            module_type = None  # This item is not shown in the menu
        )),
        ("admin", Storage(
            name_nice = T("Administration"),
            #description = "Site Administration",
            restricted = True,
            access = "|1|",     # Only Administrators can see this module in the default menu & access the controller
            module_type = None  # This item is handled separately for the menu
        )),
        ("appadmin", Storage(
            name_nice = T("Administration"),
            #description = "Site Administration",
            restricted = True,
            module_type = None  # No Menu
        )),
        ("errors", Storage(
            name_nice = T("Ticket Viewer"),
            #description = "Needed for Breadcrumbs",
            restricted = False,
            module_type = None  # No Menu
        )),
        ("setup", Storage(
            name_nice = T("Setup"),
            #description = "WebSetup",
            restricted = True,
            access = "|1|",     # Only Administrators can see this module in the default menu & access the controller
             module_type = None  # No Menu
        )),
        ("sync", Storage(
            name_nice = T("Synchronization"),
            #description = "Synchronization",
            restricted = True,
            access = "|1|",     # Only Administrators can see this module in the default menu & access the controller
            module_type = None  # This item is handled separately for the menu
        )),
        ("tour", Storage(
            name_nice = T("Guided Tour Functionality"),
            module_type = None,
        )),
        ("translate", Storage(
            name_nice = T("Translation Functionality"),
            #description = "Selective translation of strings based on module.",
            module_type = None,
        )),
        ("gis", Storage(
            name_nice = T("Map"),
            #description = "Situation Awareness & Geospatial Analysis",
            restricted = True,
            module_type = 6,     # 6th item in the menu
        )),
        ("pr", Storage(
            name_nice = T("Person Registry"),
            #description = "Central point to record details on People",
            restricted = True,
            access = "|1|",     # Only Administrators can see this module in the default menu (access to controller is possible to all still)
            module_type = 9
        )),
        ("org", Storage(
            name_nice = T("Organizations"),
            #description = 'Lists "who is doing what & where". Allows relief agencies to coordinate their activities',
            restricted = True,
            module_type = 1
        )),
        # All modules below here should be possible to disable safely
        ("hrm", Storage(
            name_nice = T("Staff"),
            #description = "Human Resources Management",
            restricted = True,
            module_type = 2,
        )),
        ("vol", Storage(
            name_nice = T("Volunteers"),
            #description = "Human Resources Management",
            restricted = True,
            module_type = 2,
        )),
        ("cms", Storage(
            name_nice = T("Content Management"),
            #description = "Content Management System",
            restricted = True,
            module_type = 9,
        )),
        ("doc", Storage(
            name_nice = T("Documents"),
            #description = "A library of digital resources, such as photos, documents and reports",
            restricted = True,
            module_type = 9,
        )),
        ("msg", Storage(
            name_nice = T("Messaging"),
            #description = "Sends & Receives Alerts via Email & SMS",
            restricted = True,
            # The user-visible functionality of this module isn't normally required. Rather it's main purpose is to be accessed from other modules.
            module_type = None,
        )),
        ("supply", Storage(
            name_nice = T("Supply Chain Management"),
            #description = "Used within Inventory Management, Request Management and Asset Management",
            restricted = True,
            module_type = None, # Not displayed
        )),
        ("inv", Storage(
            name_nice = T("Warehouses"),
            #description = "Receiving and Sending Items",
            restricted = True,
            module_type = 4
        )),
        #("proc", Storage(
        #        name_nice = T("Procurement"),
        #        #description = "Ordering & Purchasing of Goods & Services",
        #        restricted = True,
        #        module_type = 10
        #    )),
        ("asset", Storage(
            name_nice = T("Assets"),
            #description = "Recording and Assigning Assets",
            restricted = True,
            module_type = 5,
        )),
        # Vehicle depends on Assets
        ("vehicle", Storage(
            name_nice = T("Vehicles"),
            #description = "Manage Vehicles",
            restricted = True,
            module_type = 9,
        )),
        ("req", Storage(
            name_nice = T("Requests"),
            #description = "Manage requests for supplies, assets, staff or other resources. Matches against Inventories where supplies are requested.",
            restricted = True,
            module_type = 9,
        )),
        ("project", Storage(
            name_nice = T("Projects"),
            #description = "Tracking of Projects, Activities and Tasks",
            restricted = True,
            module_type = 2
        )),
        #("survey", Storage(
        #    name_nice = T("Surveys"),
        #    #description = "Create, enter, and manage surveys.",
        #    restricted = True,
        #    module_type = 5,
        #)),
        ("dc", Storage(
           name_nice = T("Assessments"),
           #description = "Data collection tool",
           restricted = True,
           module_type = 5
        )),
        ("cr", Storage(
            name_nice = T("Shelters"),
            #description = "Tracks the location, capacity and breakdown of victims in Shelters",
            restricted = True,
            module_type = 9
        )),
        ("hms", Storage(
            name_nice = T("Hospitals"),
            #description = "Helps to monitor status of hospitals",
            restricted = True,
            module_type = 9
        )),
        #("disease", Storage(
        #    name_nice = T("Disease Tracking"),
        #    #description = "Helps to track cases and trace contacts in disease outbreaks",
        #    restricted = True,
        #    module_type = 10
        #)),
        #("br", Storage(
        #    name_nice = T("Beneficiary Registry"),
        #    #description = "Beneficiary Registry and Case Management",
        #    restricted = True,
        #    module_type = 10,
        #)),
        ("dvr", Storage(
            name_nice = T("Disaster Victim Registry"),
            #description = "Allow affected individuals & households to register to receive compensation and distributions",
            restricted = True,
            module_type = 10,
        )),
        ("event", Storage(
            name_nice = T("Events"),
            #description = "Activate Events (e.g. from Scenario templates) for allocation of appropriate Resources (Human, Assets & Facilities).",
            restricted = True,
            module_type = 10,
        )),
        ("transport", Storage(
            name_nice = T("Transport"),
            restricted = True,
            module_type = 10,
        )),
        ("stats", Storage(
            name_nice = T("Statistics"),
            #description = "Manages statistics",
            restricted = True,
            module_type = None,
        )),
        ("member", Storage(
            name_nice = T("Members"),
            #description = "Membership Management System",
            restricted = True,
            module_type = 10,
        )),
        ("budget", Storage(
            name_nice = T("Budgeting Module"),
            #description = "Allows a Budget to be drawn up",
            restricted = True,
            module_type = 10
        )),
        ("deploy", Storage(
            name_nice = T("Deployments"),
            #description = "Manage Deployments",
            restricted = True,
            module_type = 10,
        )),
        # Deprecated: Replaced by event
        #("irs", Storage(
        #    name_nice = T("Incidents"),
        #    #description = "Incident Reporting System",
        #    restricted = True,
        #    module_type = 10
        #)),
        ("dvi", Storage(
           name_nice = T("Disaster Victim Identification"),
           #description = "Disaster Victim Identification",
           restricted = True,
           module_type = 10,
           #access = "|DVI|",      # Only users with the DVI role can see this module in the default menu & access the controller
        )),
        ("edu", Storage(
            name_nice = T("Schools"),
            #description = "Helps to monitor status of schools",
            restricted = True,
            module_type = 10
        )),
        ("mpr", Storage(
           name_nice = T("Missing Person Registry"),
           #description = "Helps to report and search for missing persons",
           restricted = True,
           module_type = 10,
        )),
        ("vulnerability", Storage(
            name_nice = T("Vulnerability"),
            #description = "Manages vulnerability indicators",
            restricted = True,
            module_type = 10,
        )),
        ("fire", Storage(
           name_nice = T("Fire Stations"),
           #description = "Fire Station Management",
           restricted = True,
           module_type = 1,
        )),
        ("water", Storage(
            name_nice = T("Water"),
            #description = "Flood Gauges show water levels in various parts of the country",
            restricted = True,
            module_type = 10
        )),
        ("patient", Storage(
            name_nice = T("Patient Tracking"),
            #description = "Tracking of Patients",
            restricted = True,
            module_type = 10
        )),
        ("po", Storage(
            name_nice = T("Population Outreach"),
            #description = "Population Outreach",
            restricted = True,
            module_type = 10
        )),
        ("security", Storage(
           name_nice = T("Security"),
           #description = "Security Management System",
           restricted = True,
           module_type = 10,
        )),
        # These are specialist modules
        ("cap", Storage(
            name_nice = T("CAP"),
            #description = "Create & broadcast CAP alerts",
            restricted = True,
            module_type = 10,
        )),
        # Requires RPy2 & PostgreSQL
        #("climate", Storage(
        #    name_nice = T("Climate"),
        #    #description = "Climate data portal",
        #    restricted = True,
        #    module_type = 10,
        #)),
        ("delphi", Storage(
            name_nice = T("Delphi Decision Maker"),
            #description = "Supports the decision making of large groups of Crisis Management Experts by helping the groups create ranked list.",
            restricted = True,
            module_type = 10,
        )),
        # @ToDo: Port these Assessments to the Survey module
        #("building", Storage(
        #    name_nice = T("Building Assessments"),
        #    #description = "Building Safety Assessments",
        #    restricted = True,
        #    module_type = 10,
        #)),
        # Deprecated by Surveys module
        # - depends on CR, IRS & Impact
        #("assess", Storage(
        #    name_nice = T("Assessments"),
        #    #description = "Rapid Assessments & Flexible Impact Assessments",
        #    restricted = True,
        #    module_type = 10,
        #)),
        #("impact", Storage(
        #    name_nice = T("Impacts"),
        #    #description = "Used by Assess",
        #    restricted = True,
        #    module_type = None,
        #)),
        #("ocr", Storage(
        #   name_nice = T("Optical Character Recognition"),
        #   #description = "Optical Character Recognition for reading the scanned handwritten paper forms.",
        #   restricted = False,
        #   module_type = None,
        #)),
        ("work", Storage(
           name_nice = T("Jobs"),
           #description = "Simple Volunteer Jobs Management",
           restricted = False,
           module_type = None,
        )),
    ])

# END =========================================================================