from django.urls import path from .views import core, locations, nature, publiclighting, trafficlights, artworks, structures, controlcenters, sign, roads, its, clean, asset_editing, history, location_editing, export, asset_permissions, water, buildings app_name = "assets" urlpatterns = [ path("", core.unified_assets_index, name="index"), path("buildings/", buildings.buildings_index, name="buildings_index"), path("buildings//", buildings.building_detail, name="publicbuilding_detail"), path("buildings//edit/", buildings.publicbuilding_edit, name="publicbuilding_edit"), path("buildings///", buildings.publicbuildings_assets_detail, name="publicbuildings_assets_detail"), path("export/", export.export_assets, name="export_assets"), # ------------------------------------------------ # Per-instance & per-type permission management # ------------------------------------------------ path('permissions///', asset_permissions.asset_permissions_panel, name='asset_permissions_panel'), path('permissions/access//edit/', asset_permissions.asset_access_edit, name='asset_access_edit'), path('permissions/access//delete/', asset_permissions.asset_access_delete, name='asset_access_delete'), path('permissions/type//', asset_permissions.asset_type_permissions_page, name='asset_type_permissions_page'), path('permissions/type-access//edit/', asset_permissions.asset_type_access_edit, name='asset_type_access_edit'), path('permissions/type-access//delete/', asset_permissions.asset_type_access_delete, name='asset_type_access_delete'), # ------------------------------------------------ # Generic Location Editing (create / update / delete) # ------------------------------------------------ path('locations///form/', location_editing.location_form_html, name='location_form_html_create'), path('locations////form/', location_editing.location_form_html, name='location_form_html_edit'), path('locations///create/', location_editing.create_location, name='create_location'), path('locations////update/', location_editing.update_location, name='update_location'), path('locations////delete/', location_editing.delete_location, name='delete_location'), # Asset editing API endpoints path('//update/', asset_editing.update_asset, name='update_asset'), path('//archive/', asset_editing.archive_asset, name='archive_asset'), path('//replace/', asset_editing.replace_asset, name='replace_asset'), path('//documents/add/', asset_editing.asset_add_document, name='asset_add_document'), path('//documents//delete/', asset_editing.asset_delete_document, name='asset_delete_document'), path('//documents/', asset_editing.asset_document_list_html, name='asset_document_list_html'), # Linked assets API endpoints path('//linked-types/', asset_editing.get_linked_asset_types, name='get_linked_asset_types'), path('//link-child/', asset_editing.link_child_asset, name='link_child_asset'), path('//unlink-child/', asset_editing.unlink_child_asset, name='unlink_child_asset'), path('//set-parent/', asset_editing.set_parent_asset, name='set_parent_asset'), path('//create-child/', asset_editing.create_and_link_child_asset, name='create_and_link_child_asset'), path('api/search-assets//', asset_editing.search_assets_by_model, name='search_assets_by_model'), path('api/child-asset-form-fields//', asset_editing.get_child_asset_form_fields, name='get_child_asset_form_fields'), # History API endpoints (without thematic) path('//history/', history.get_asset_history, name='get_asset_history'), path('//history/status-at-date/', history.get_asset_status_at_date, name='get_asset_status_at_date'), path('history/global/', history.get_global_history, name='get_global_history'), # History API endpoints (with thematic - must come after specific routes) path('///history/', history.get_asset_history, name='get_asset_history_thematic'), path('///history/status-at-date/', history.get_asset_status_at_date, name='get_asset_status_at_date_thematic'), path('/history/global/', history.get_global_history, name='get_global_history_thematic'), path('///create-asset/', asset_editing.create_asset, name='create_asset'), path('///bulk-archive/', asset_editing.bulk_archive_assets, name='bulk_archive_assets'), path('/categories/', asset_editing.get_asset_categories_for_thematic, name='get_asset_categories'), path('/category//models/', asset_editing.get_asset_models_for_category, name='get_asset_models'), path('/asset//available-locations/', asset_editing.get_available_locations_for_asset, name='get_available_locations'), path('api/create-asset/', asset_editing.create_asset_api, name='create_asset_api'), path('api/bulk-edit/', asset_editing.bulk_edit_assets, name='bulk_edit_assets'), path('locations/autocomplete/', locations.locations_autocomplete, name='locations_autocomplete'), # path('///add-document/', core.add_document, name='assets_add_document'), path('trafficlights/', trafficlights.trafficlights_index, name='trafficlights_index'), path('trafficlights/intersections/', trafficlights.trafficlights_intersections, name='trafficlights_intersections'), path('trafficlights/intersections/get-nearest/', trafficlights.get_nearest_trafficlight_intersection, name='get_nearest_trafficlight_intersection'), path('trafficlights/intersections/geojson/', trafficlights.trafficlights_intersections_geojson, name='trafficlights_intersections_geojson'), path('trafficlights/intersections/documents/history/', trafficlights.fetch_document_history, name='trafficlights_intersections_document_history'), path('trafficlights/intersections/autocomplete/', trafficlights.trafficlights_locations_autocomplete, name='trafficlights_autocomplete_locations'), path('trafficlights/intersections//', trafficlights.trafficlights_intersections_detail, name='trafficlights_intersections_detail'), path('trafficlights/intersections//contracts/add/', trafficlights.trafficlights_intersections_contracts_add, name='trafficlights_intersections_contracts_add'), path('trafficlights/intersections//contracts//remove/', trafficlights.trafficlights_intersections_contracts_remove, name='trafficlights_intersections_contracts_remove'), path('trafficlights/intersections//document-config/', trafficlights.get_document_config, name='trafficlights_intersections_document_config'), path('trafficlights/intersections//', trafficlights.trafficlights_intersections_get_by_code, name='trafficlights_interstrafficlights_intersections_get_by_codeections_detail'), path('trafficlights/intersections//add-document/', trafficlights.trafficlights_intersections_add_document, name='trafficlights_intersections_add_document'), path('trafficlights/intersections//delete-document/', trafficlights.trafficlights_intersections_delete_document, name='trafficlights_intersections_delete_document'), path('trafficlights/assets/', trafficlights.trafficlights_assets, name='trafficlights_assets'), path('trafficlights/assets/geojson/', trafficlights.trafficlights_assets_geojson, name='trafficlights_assets_geojson'), path('trafficlights/assets/controllers/', trafficlights.trafficlights_controllers, name='trafficlights_controllers'), path('trafficlights/assets/controllers//', trafficlights.trafficlights_controllers_detail, name='trafficlights_controllers_detail'), path('trafficlights/assets/autocomplete/', trafficlights.trafficlights_assets_autocomplete, name='trafficlights_autocomplete_assets'), path('trafficlights///', trafficlights.trafficlights_assets_detail, name='trafficlights_assets_detail'), path('publiclighting/', publiclighting.publiclighting_index, name='publiclighting_index'), path('publiclighting/streets/', publiclighting.publiclighting_streets, name='publiclighting_streets'), path('publiclighting/streets/geojson/', publiclighting.publiclighting_streets_geojson, name='publiclighting_streets_geojson'), path('publiclighting/streets/documents/history/', publiclighting.fetch_document_history, name='publiclighting_streets_document_history'), path('publiclighting/streets/get-nearest/', publiclighting.get_nearest_publiclighting_street, name='get_nearest_publiclighting_street'), path('publiclighting/streets/autocomplete/', publiclighting.publiclighting_locations_autocomplete, name='publiclighting_autocomplete_locations'), path('publiclighting/streets//', publiclighting.publiclighting_streets_detail, name='publiclighting_streets_detail'), path('publiclighting/streets//add-document/', publiclighting.publiclighting_streets_add_document, name='publiclighting_streets_add_document'), path('publiclighting/streets//delete-document/', publiclighting.publiclighting_streets_delete_document, name='publiclighting_streets_delete_document'), path('publiclighting/assets/', publiclighting.publiclighting_assets, name='publiclighting_assets'), path('publiclighting/assets/geojson/', publiclighting.publiclighting_assets_geojson, name='publiclighting_assets_geojson'), path('publiclighting/assets/autocomplete/', publiclighting.publiclighting_assets_autocomplete, name='publiclighting_autocomplete_assets'), path('publiclighting///', publiclighting.publiclighting_assets_detail, name='publiclighting_assets_detail'), path('artworks/', artworks.artworks_index, name='artworks_index'), path('artworks/streets/', artworks.artworks_streets, name='artworks_streets'), path('artworks/streets/geojson/', artworks.artworks_streets_geojson, name='artworks_streets_geojson'), path('artworks/streets/get-nearest/', artworks.get_nearest_artworks_street, name='get_nearest_artworks_street'), path('artworks/streets//', artworks.artworks_streets_detail, name='artworks_streets_detail'), path('artworks/fountains/', artworks.artworks_fountains, name='artworks_fountains'), path('artworks/fountains/geojson/', artworks.fountains_geojson, name='artworks_fountains_geojson'), path('artworks/fountains//', artworks.artworks_fountains_detail, name='artworks_fountains_detail'), path('artworks/monuments/', artworks.artworks_monuments, name='artworks_monuments'), path('artworks/monuments/geojson/', artworks.monuments_geojson, name='artworks_monuments_geojson'), path('artworks/monuments//', artworks.artworks_monuments_detail, name='artworks_monuments_detail'), path('artworks/assets/', artworks.artworks_assets, name='artworks_assets'), path('artworks/assets///', artworks.artworks_assets_detail_redirect, name='artworks_assets_detail'), path('artworks/assets/geojson/', artworks.artworks_assets_geojson, name='artworks_assets_geojson'), path('artworks/assets/autocomplete/', artworks.artworks_assets_autocomplete, name='artworks_autocomplete_assets'), path('artworks/assets/get-nearest/', artworks.get_nearest_artworks_asset, name='get_nearest_artworks_asset'), path('nature/', nature.nature_index, name='nature_index'), path('nature/locations/', nature.nature_locations, name='nature_locations'), path('nature/locations/geojson/', nature.nature_locations_geojson, name='nature_locations_geojson'), path('nature/locations//', nature.nature_locations_detail, name='nature_locations_detail'), path('nature/locations/get-nearest/', nature.get_nearest_nature_location, name='get_nearest_nature_location'), path('nature/locations/autocomplete/', nature.nature_locations_autocomplete, name='nature_autocomplete_locations'), path('nature/assets/', nature.nature_assets, name='nature_assets'), path('nature/assets/geojson/', nature.nature_assets_geojson, name='nature_assets_geojson'), path('nature/assets/autocomplete/', nature.nature_assets_autocomplete, name='nature_autocomplete_assets'), path('nature/assets/bulk-update/', nature.nature_bulk_update_assets, name='nature_bulk_update_assets'), path('nature/assets/bulk-delete/', nature.nature_bulk_delete_assets, name='nature_bulk_delete_assets'), path('nature/assets/undo/', nature.nature_undo_action, name='nature_undo_action'), path('nature/assets/save-geometries/', nature.nature_save_geometries, name='nature_save_geometries'), # Green Surfaces Comments API (must be before generic nature///) path('nature/comments/geojson/', nature.green_surfaces_comments_geojson, name='green_surfaces_comments_geojson'), path('nature/comments//', nature.green_surfaces_comment_detail, name='green_surfaces_comment_detail'), path('nature/comments/save/', nature.green_surfaces_comment_save, name='green_surfaces_comment_save'), path('nature/comments//add-photos/', nature.green_surfaces_comment_add_photos, name='green_surfaces_comment_add_photos'), path('nature/comments//delete/', nature.green_surfaces_comment_delete, name='green_surfaces_comment_delete'), path('nature///', nature.nature_assets_detail, name='nature_assets_detail'), path('structures/', structures.structures_index, name='structures_index'), path('structures/structures/documents/history/', structures.fetch_document_history, name='structures_document_history'), path('structures/structures/documents/config//', structures.get_document_config, name='structures_document_config'), path('structures/structures//add-document/', structures.structures_add_document, name='structures_add_document'), path('structures/structures//delete-document/', structures.structures_delete_document, name='structures_delete_document'), path('structures/locations/', structures.structures_locations, name='structures_locations'), path('structures/locations/geojson/', structures.structures_locations_geojson, name='structures_locations_geojson'), path('structures/locations/get-nearest/', structures.get_nearest_structure_location, name='get_nearest_structure_location'), # path('structures/locations/autocomplete/', structures.structures_locations_autocomplete, name='structures_autocomplete_locations'), path('structures/locations//', structures.structures_locations_detail, name='structures_locations_detail'), path('structures/assets/', structures.structures_assets, name='structures_assets'), path('structures/assets/geojson/', structures.structures_assets_geojson, name='structures_assets_geojson'), path('structures/assets/autocomplete/', structures.structures_assets_autocomplete, name='structures_autocomplete_assets'), path('structures///', structures.structures_assets_detail, name='structures_assets_detail'), path('controlcenters/', controlcenters.controlcenters_index, name='controlcenters_index'), path('controlcenters/locations/', controlcenters.controlcenters_locations, name='controlcenters_locations'), path('controlcenters/locations/geojson/', controlcenters.controlcenters_locations_geojson, name='controlcenters_locations_geojson'), path('controlcenters/locations//', controlcenters.controlcenters_locations_detail, name='controlcenters_locations_detail'), path('controlcenters/assets/', controlcenters.controlcenters_assets, name='controlcenters_assets'), path('controlcenters/assets/geojson/', controlcenters.controlcenters_assets_geojson, name='controlcenters_assets_geojson'), path('controlcenters/assets/autocomplete/', controlcenters.controlcenters_assets_autocomplete, name='controlcenters_autocomplete_assets'), path('controlcenters///', controlcenters.controlcenters_assets_detail, name='controlcenters_assets_detail'), path('controlcenters/controlcenters//add-document/', controlcenters.controlcenters_add_document, name='controlcenters_add_document'), path('controlcenters/controlcenters//delete-document/', controlcenters.controlcenters_delete_document, name='controlcenters_delete_document'), path('sign/', sign.sign_index, name='sign_index'), path('sign/streets/', sign.sign_streets, name='sign_streets'), path('sign/streets/geojson/', sign.sign_streets_geojson, name='sign_streets_geojson'), path('sign/streets/documents/history/', sign.fetch_document_history, name='sign_streets_document_history'), path('sign/streets/get-nearest/', sign.get_nearest_sign_street, name='get_nearest_sign_street'), path('sign/streets//', sign.sign_streets_detail, name='sign_streets_detail'), path('sign/streets//add-document/', sign.sign_streets_add_document, name='sign_streets_add_document'), path('sign/streets//delete-document/', sign.sign_streets_delete_document, name='sign_streets_delete_document'), path('sign/assets/', sign.sign_assets, name='sign_assets'), path('sign/assets/geojson/', sign.sign_assets_geojson, name='sign_assets_geojson'), path('sign/assets/autocomplete/', sign.sign_assets_autocomplete, name='sign_autocomplete_assets'), path('sign///', sign.sign_assets_detail, name='sign_assets_detail'), path('roads/', roads.roads_index, name='roads_index'), path('roads/streets/', roads.roads_streets, name='roads_streets'), path('roads/streets/geojson/', roads.roads_streets_geojson, name='roads_streets_geojson'), path('roads/streets/documents/history/', roads.fetch_document_history, name='roads_streets_document_history'), path('roads/streets/get-nearest/', roads.get_nearest_roads_street, name='get_nearest_roads_street'), path('roads/streets//', roads.roads_streets_detail, name='roads_streets_detail'), path('roads/streets//add-document/', roads.roads_streets_add_document, name='roads_streets_add_document'), path('roads/streets//delete-document/', roads.roads_streets_delete_document, name='roads_streets_delete_document'), path('roads/assets/', roads.roads_assets, name='roads_assets'), path('roads/assets/geojson/', roads.roads_assets_geojson, name='roads_assets_geojson'), path('roads/assets/autocomplete/', roads.roads_assets_autocomplete, name='roads_autocomplete_assets'), path('roads///', roads.roads_assets_detail, name='roads_assets_detail'), path('its/', its.its_index, name='its_index'), path('its/locations/', its.its_locations, name='its_locations'), path('its/locations/geojson/', its.its_locations_geojson, name='its_locations_geojson'), path('its/locations//', its.its_locations_detail, name='its_locations_detail'), path('its/locations//add-document/', its.its_location_add_document, name='its_location_add_document'), path('its/locations//delete-document/', its.its_location_delete_document, name='its_location_delete_document'), path('its/assets/', its.its_assets, name='its_assets'), path('its/assets/geojson/', its.its_assets_geojson, name='its_assets_geojson'), path('its/assets/autocomplete/', its.its_assets_autocomplete, name='its_autocomplete_assets'), path('its///', its.its_assets_detail, name='its_assets_detail'), path('clean/', clean.clean_index, name='clean_index'), path('clean/locations/geojson/', clean.clean_locations_geojson, name='clean_locations_geojson'), path('clean/locations/get-nearest/', clean.get_nearest_clean_location, name='get_nearest_clean_location'), path('clean/locations//', clean.clean_location_detail, name='clean_location_detail'), path('clean/assets/geojson/', clean.clean_assets_geojson, name='clean_assets_geojson'), path('clean/assets/autocomplete/', clean.clean_assets_autocomplete, name='clean_autocomplete_assets'), path('clean/litterbin//observations/update/', clean.update_litter_bin_observations, name='clean_update_litter_bin_observations'), path('clean///', clean.clean_assets_detail, name='clean_assets_detail'), path('water/', water.water_index, name='water_index'), path('water/locations/geojson/', water.water_locations_geojson, name='water_locations_geojson'), path('water/locations/get-nearest/', water.get_nearest_water_location, name='get_nearest_water_location'), path('water/zirw//', water.zirw_detail, name='zirw_detail'), path('water/zirw//add-document/', water.zirw_add_document, name='zirw_add_document'), path('water/zirw/document-history/', water.fetch_document_history, name='zirw_document_history'), path('water/zirw//document-config/', water.get_document_config, name='zirw_document_config'), path('water/assets/geojson/', water.water_assets_geojson, name='water_assets_geojson'), path('water/assets/autocomplete/', water.water_assets_autocomplete, name='water_autocomplete_assets'), path('water///', water.water_assets_detail, name='water_assets_detail'), # Public buildings GeoJSON URLs path('publicbuildings/locations/geojson/', buildings.publicbuildings_locations_geojson, name='publicbuildings_locations_geojson'), path('publicbuildings/assets/geojson/', buildings.publicbuildings_assets_geojson, name='publicbuildings_assets_geojson'), # DXF import URLs path('trafficlights/intersections//import-dxf/', trafficlights.import_dxf, name='import_dxf'), path('trafficlights/intersections//stage-dxf/', trafficlights.stage_dxf, name='stage_dxf'), path('trafficlights/intersections//save-dxf-layers/', trafficlights.save_dxf_layers, name='save_dxf_layers'), path('trafficlights/intersections//integrate-dxf/', trafficlights.integrate_dxf, name='integrate_dxf'), path('trafficlights/intersections//dxf-layout-geojson/', trafficlights.dxf_layout_geojson, name='dxf_layout_geojson'), path('trafficlights/intersections//dxf-layers/', trafficlights.dxf_layers, name='dxf_layers'), path('trafficlights/intersections//add-staged-pole/', trafficlights.add_staged_pole, name='add_staged_pole'), path('trafficlights/intersections//delete-staged-pole//', trafficlights.delete_staged_pole, name='delete_staged_pole'), path('trafficlights/intersections//update-staged-pole-position//', trafficlights.update_staged_pole_position, name='update_staged_pole_position'), # Cross plan (Excel) import URLs path('trafficlights/intersections//import-cross-plan/', trafficlights.import_cross_plan, name='import_cross_plan'), path('trafficlights/intersections//integrate-cross-plan/', trafficlights.integrate_cross_plan, name='integrate_cross_plan'), path('trafficlights/intersections//upload-dxf-ajax/', trafficlights.upload_dxf_ajax, name='upload_dxf_ajax'), ]