assets.html 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. {% extends "base.html" %}
  2. {% set active_page = "assets" %}
  3. {% block title %} Asset listing {% endblock %}
  4. {% block divs %}
  5. <script>
  6. const asset_icon_map = JSON.parse('{{ asset_icon_map | tojson | safe }}');
  7. function Asset ( id, name, asset_type, sensors, account, latitude, longitude) {
  8. let icon = asset_icon_map[asset_type.toLowerCase()];
  9. if (icon === undefined)
  10. icon = `icon-${asset_type}`
  11. this.name = `
  12. <i class="${ icon } left-icon">${ name }</i>
  13. `;
  14. this.id = id;
  15. this.location = "";
  16. this.url = `/assets/${id}`
  17. this.status = `
  18. <a href="/assets/${id}/status">
  19. <button type="button" class="btn btn-primary">Status</button>
  20. </a>
  21. `;
  22. if (account == null) this.owner = "PUBLIC";
  23. else
  24. this.owner = `
  25. <a href="/accounts/${ account['id'] }" title="View this account">${ account["name"] }</a>
  26. `
  27. this.num_sensors = sensors.length;
  28. if (latitude != null && longitude != null) this.location = `LAT: ${latitude}, LONG: ${longitude}`;
  29. };
  30. $(document).ready(function() {
  31. $("#assetTable").dataTable({
  32. order: [[0, "asc"]],
  33. serverSide: true,
  34. columns: [
  35. {data: "id", title: "ID", orderable: true},
  36. {data: "name", title: "Name", orderable: true},
  37. {data: "owner", title: "Account", orderable: true},
  38. {data: "location", title: "Location", orderable: false},
  39. {data: "num_sensors", title: "Sensors", orderable: false},
  40. {data: "status", title: "Status", orderable: false},
  41. {data: "url", title: "URL", className: "d-none"},
  42. ],
  43. ajax: function (data, callback, settings) {
  44. const basePath = window.location.origin;
  45. let filter = data["search"]["value"];
  46. let orderColumnIndex = data["order"][0]["column"]
  47. let orderDirection = data["order"][0]["dir"];
  48. let orderColumnName = data["columns"][orderColumnIndex]["data"];
  49. let url = `${basePath}/api/v3_0/assets?page=${
  50. Math.floor(data["start"] / data["length"]) + 1
  51. }&per_page=${data["length"]}`;
  52. {% if account %}
  53. url += "&account_id={{ account.id }}";
  54. {% else %}
  55. url += "&all_accessible=true";
  56. {% endif %}
  57. if (filter.length > 0) {
  58. url = `${url}&filter=${filter}`;
  59. }
  60. if (orderColumnName){
  61. url = `${url}&sort_by=${orderColumnName}&sort_dir=${orderDirection}`;
  62. }
  63. $.ajax({
  64. type: "get",
  65. url: url,
  66. success: function(response, text) {
  67. let clean_response = [];
  68. response["data"].forEach( (element) => clean_response.push(
  69. new Asset(element["id"], element["name"], element["generic_asset_type"]["name"], element["sensors"], element["owner"], element["latitude"], element["longitude"])
  70. ))
  71. callback({"data": clean_response, "recordsTotal": response["num-records"], "recordsFiltered": response["filtered-records"]});
  72. },
  73. error: function (request, status, error) {
  74. showToast(error, "error");
  75. }
  76. });
  77. }
  78. });
  79. })
  80. </script>
  81. <div class="container-fluid">
  82. <div class="row">
  83. <div class="col-md-2 on-top-md">
  84. <div class="header-action-button mt-3">
  85. <div>
  86. {% if user_can_create_assets %}
  87. <button class="btn btn-sm btn-success mb-2 create-button" type="submit">
  88. <a href="/assets/new">Create new asset</a>
  89. </button>
  90. {% endif %}
  91. </div>
  92. </div>
  93. </div>
  94. <div class="col-md-8 mt-3">
  95. <div class="card">
  96. <h3>Asset overview
  97. {% if account %}
  98. for account {{ account.name }}
  99. {% endif %}
  100. </h3>
  101. <div class="table-responsive">
  102. <table class="table table-striped paginate nav-on-click" title="View this asset" id="assetTable"></table>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. {% block paginate_tables_script %} {{ super() }} {% endblock %}
  109. {% endblock %}