foreman_hosts 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -117
- data/app/assets/javascripts/application.js +2 -0
- data/app/assets/javascripts/jquery.battatech.excelexport.js +180 -0
- data/app/controllers/foreman_hosts/syhostmodeldetails_controller.rb +83 -0
- data/app/controllers/foreman_hosts/syhostmodels_controller.rb +83 -0
- data/app/models/foreman_hosts/syhostmodel.rb +8 -0
- data/app/models/foreman_hosts/syhostmodeldetail.rb +5 -0
- data/app/views/foreman_hosts/hosts/report_index.html.erb +188 -3
- data/app/views/foreman_hosts/syhostmodeldetails/_form.html.erb +29 -0
- data/app/views/foreman_hosts/syhostmodeldetails/_list.html.erb +43 -0
- data/app/views/foreman_hosts/syhostmodeldetails/_sygroup.html.erb +3 -0
- data/app/views/foreman_hosts/syhostmodeldetails/_sygroup_td.html.erb +7 -0
- data/app/views/foreman_hosts/syhostmodeldetails/create.js.erb +2 -0
- data/app/views/foreman_hosts/syhostmodeldetails/destroy.js.erb +1 -0
- data/app/views/foreman_hosts/syhostmodeldetails/edit.html.erb +1 -0
- data/app/views/foreman_hosts/syhostmodeldetails/edit.js.erb +3 -0
- data/app/views/foreman_hosts/syhostmodeldetails/index.html.erb +5 -0
- data/app/views/foreman_hosts/syhostmodeldetails/new.html.erb +1 -0
- data/app/views/foreman_hosts/syhostmodeldetails/new.js.erb +3 -0
- data/app/views/foreman_hosts/syhostmodeldetails/show.html.erb +28 -0
- data/app/views/foreman_hosts/syhostmodeldetails/update.js.erb +3 -0
- data/app/views/foreman_hosts/syhostmodels/_form.html.erb +30 -0
- data/app/views/foreman_hosts/syhostmodels/_list.html.erb +41 -0
- data/app/views/foreman_hosts/syhostmodels/_report.html.erb +258 -0
- data/app/views/foreman_hosts/syhostmodels/_sub.html.erb +37 -0
- data/app/views/foreman_hosts/syhostmodels/edit.html.erb +1 -0
- data/app/views/foreman_hosts/syhostmodels/index.html.erb +5 -0
- data/app/views/foreman_hosts/syhostmodels/new.html.erb +1 -0
- data/app/views/foreman_hosts/syhostmodels/show.html.erb +72 -0
- data/config/routes.rb +6 -3
- data/db/migrate/20151015022411_create_syhostmodels.rb +10 -0
- data/db/migrate/20151015050239_create_syhostmodeldetails.rb +13 -0
- data/lib/foreman_hosts/engine.rb +9 -10
- data/lib/foreman_hosts/version.rb +1 -1
- metadata +47 -3
- data/app/models/concerns/foreman_hosts/host_extensions.rb +0 -19
| @@ -0,0 +1,258 @@ | |
| 1 | 
            +
            <div class="four wide right column">
         | 
| 2 | 
            +
                    <button class='btn btn-info' type='button'><a href="javascript:void(0);" class="ui green button icon mini" id="btnExport" onclick="export_excel();">Export</a></button>
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            </div>
         | 
| 5 | 
            +
            <%= javascript "jquery.cookie", "host_checkbox" %>
         | 
| 6 | 
            +
            <% title header ||= "" %>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            <table class="table table-bordered table-striped table-condensed" id="tblExport">
         | 
| 9 | 
            +
              <thead>
         | 
| 10 | 
            +
                <tr>
         | 
| 11 | 
            +
                  <th class=''><%= sort :name, :as => _('Name') %></th>
         | 
| 12 | 
            +
                  <% detail_name_no1 = 1 %>
         | 
| 13 | 
            +
                 <% details.each do |detail| %>
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  <th id="td<%= detail_name_no1 %>"><%= detail.fact_name.name %>
         | 
| 16 | 
            +
                  <br />
         | 
| 17 | 
            +
                  <button  type='button'><a href="javascript:void(0);"  onclick="DeleteSignColumn(<%= detail_name_no1 %>);"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></a></button></th>
         | 
| 18 | 
            +
                        <% detail_name_no1 += 1 %>
         | 
| 19 | 
            +
                 <% end %>
         | 
| 20 | 
            +
                </tr>
         | 
| 21 | 
            +
              </thead> 
         | 
| 22 | 
            +
              <tbody>
         | 
| 23 | 
            +
                <% Host.all.each do |host| %>
         | 
| 24 | 
            +
                  <tr>
         | 
| 25 | 
            +
                    <td class='ellipsis'><%= name_column(host) %></td>
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                       <% details.each do |detail| %>
         | 
| 28 | 
            +
                          <td>
         | 
| 29 | 
            +
                            <%= FactValue.where(host_id: host.id, fact_name_id: detail.fact_name_id).last.value rescue nil%>
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              
         | 
| 32 | 
            +
                          <%#= get_detail_value(host, detail_name) %> 
         | 
| 33 | 
            +
                          </td>
         | 
| 34 | 
            +
                        <% end %>
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  </tr>
         | 
| 37 | 
            +
                <% end %>
         | 
| 38 | 
            +
              </tbody>
         | 
| 39 | 
            +
            </table>
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
             | 
| 45 | 
            +
             | 
| 46 | 
            +
            <script type="text/javascript">
         | 
| 47 | 
            +
              function export_excel(){
         | 
| 48 | 
            +
                var uri = $("#tblExport").battatech_excelexport({
         | 
| 49 | 
            +
                            containerid: "tblExport",
         | 
| 50 | 
            +
                            datatype: 'table',
         | 
| 51 | 
            +
                            returnUri: true
         | 
| 52 | 
            +
                        });
         | 
| 53 | 
            +
                $("#btnExport").attr('download', 'hosts.xlsx').attr('href', uri).attr('target', '_blank');
         | 
| 54 | 
            +
              }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              function DeleteSignColumn(tid) {
         | 
| 57 | 
            +
                var tab = document.getElementById("tblExport");
         | 
| 58 | 
            +
                var columnLength = tab.rows[0].cells.length;
         | 
| 59 | 
            +
                var tr1 = tab.rows[0];
         | 
| 60 | 
            +
                var columnId = 0;
         | 
| 61 | 
            +
                tid= "td" + tid
         | 
| 62 | 
            +
                  for(var j=0;j<tr1.cells.length;j++)//取得第几行下面的td个数,再次循环遍历该行下面的td元素
         | 
| 63 | 
            +
                  {
         | 
| 64 | 
            +
                     var cell = tr1.cells[j];//获取某行下面的某个td元素
         | 
| 65 | 
            +
                     if (cell.id == tid) {
         | 
| 66 | 
            +
                        columnId = columnId + j;
         | 
| 67 | 
            +
                     }
         | 
| 68 | 
            +
                    }
         | 
| 69 | 
            +
                //删除指定单元格
         | 
| 70 | 
            +
                if (columnId > 0){
         | 
| 71 | 
            +
                  for (var i = 0; i < tab.rows.length; i++) {
         | 
| 72 | 
            +
                      tab.rows[i].deleteCell(columnId);
         | 
| 73 | 
            +
                  }
         | 
| 74 | 
            +
                }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            }
         | 
| 77 | 
            +
            /*
         | 
| 78 | 
            +
             * jQuery Client Side Excel Export Plugin Library
         | 
| 79 | 
            +
             * http://www.battatech.com/
         | 
| 80 | 
            +
             *
         | 
| 81 | 
            +
             * Copyright (c) 2013 Batta Tech Private Limited
         | 
| 82 | 
            +
             * Licensed under https://github.com/battatech/battatech_excelexport/blob/master/LICENSE.txt
         | 
| 83 | 
            +
             */
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            (function ($) {
         | 
| 86 | 
            +
                var $defaults = {
         | 
| 87 | 
            +
                    containerid: null
         | 
| 88 | 
            +
                    , datatype: 'table'
         | 
| 89 | 
            +
                    , dataset: null
         | 
| 90 | 
            +
                    , columns: null
         | 
| 91 | 
            +
                    , returnUri: false
         | 
| 92 | 
            +
                    , worksheetName: "Sheet1"
         | 
| 93 | 
            +
                    , encoding: "utf-8"
         | 
| 94 | 
            +
                };
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                var $settings = $defaults;
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                $.fn.battatech_excelexport = function (options) {
         | 
| 99 | 
            +
                    $settings = $.extend({}, $defaults, options);
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    var gridData = [];
         | 
| 102 | 
            +
                    var excelData;
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    return Initialize();
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    function Initialize() {
         | 
| 107 | 
            +
                        var type = $settings.datatype.toLowerCase();
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                        BuildDataStructure(type);
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                        switch (type) {
         | 
| 112 | 
            +
                            case 'table':
         | 
| 113 | 
            +
                                excelData = Export(ConvertFromTable());
         | 
| 114 | 
            +
                                break;
         | 
| 115 | 
            +
                            case 'json':
         | 
| 116 | 
            +
                                excelData = Export(ConvertDataStructureToTable());
         | 
| 117 | 
            +
                                break;
         | 
| 118 | 
            +
                            case 'xml':
         | 
| 119 | 
            +
                                excelData = Export(ConvertDataStructureToTable());
         | 
| 120 | 
            +
                                break;
         | 
| 121 | 
            +
                            case 'jqgrid':
         | 
| 122 | 
            +
                                excelData = Export(ConvertDataStructureToTable());
         | 
| 123 | 
            +
                                break;
         | 
| 124 | 
            +
                        }
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                        if ($settings.returnUri) {
         | 
| 127 | 
            +
                            return excelData;
         | 
| 128 | 
            +
                        }
         | 
| 129 | 
            +
                        else {
         | 
| 130 | 
            +
                            window.open(excelData);
         | 
| 131 | 
            +
                        }
         | 
| 132 | 
            +
                    }
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    function BuildDataStructure(type) {
         | 
| 135 | 
            +
                        switch (type) {
         | 
| 136 | 
            +
                            case 'table':
         | 
| 137 | 
            +
                                break;
         | 
| 138 | 
            +
                            case 'json':
         | 
| 139 | 
            +
                                gridData = $settings.dataset;
         | 
| 140 | 
            +
                                break;
         | 
| 141 | 
            +
                            case 'xml':
         | 
| 142 | 
            +
                                $($settings.dataset).find("row").each(function (key, value) {
         | 
| 143 | 
            +
                                    var item = {};
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                                    if (this.attributes != null && this.attributes.length > 0) {
         | 
| 146 | 
            +
                                        $(this.attributes).each(function () {
         | 
| 147 | 
            +
                                            item[this.name] = this.value;
         | 
| 148 | 
            +
                                        });
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                                        gridData.push(item);
         | 
| 151 | 
            +
                                    }
         | 
| 152 | 
            +
                                });
         | 
| 153 | 
            +
                                break;
         | 
| 154 | 
            +
                            case 'jqgrid':
         | 
| 155 | 
            +
                                $($settings.dataset).find("rows > row").each(function (key, value) {
         | 
| 156 | 
            +
                                    var item = {};
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                                    if (this.children != null && this.children.length > 0) {
         | 
| 159 | 
            +
                                        $(this.children).each(function () {
         | 
| 160 | 
            +
                                            item[this.tagName] = $(this).text();
         | 
| 161 | 
            +
                                        });
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                                        gridData.push(item);
         | 
| 164 | 
            +
                                    }
         | 
| 165 | 
            +
                                });
         | 
| 166 | 
            +
                                break;
         | 
| 167 | 
            +
                        }
         | 
| 168 | 
            +
                    }
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                    function ConvertFromTable() {
         | 
| 171 | 
            +
                        var result = $('<div>').append($('#' + $settings.containerid).clone()).html();
         | 
| 172 | 
            +
                        return result;
         | 
| 173 | 
            +
                    }
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    function ConvertDataStructureToTable() {
         | 
| 176 | 
            +
                        var result = "<table>";
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                        result += "<thead><tr>";
         | 
| 179 | 
            +
                        $($settings.columns).each(function (key, value) {
         | 
| 180 | 
            +
                            if (this.ishidden != true) {
         | 
| 181 | 
            +
                                result += "<th";
         | 
| 182 | 
            +
                                if (this.width != null) {
         | 
| 183 | 
            +
                                    result += " style='width: " + this.width + "'";
         | 
| 184 | 
            +
                                }
         | 
| 185 | 
            +
                                result += ">";
         | 
| 186 | 
            +
                                result += this.headertext;
         | 
| 187 | 
            +
                                result += "</th>";
         | 
| 188 | 
            +
                            }
         | 
| 189 | 
            +
                        });
         | 
| 190 | 
            +
                        result += "</tr></thead>";
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                        result += "<tbody>";
         | 
| 193 | 
            +
                        $(gridData).each(function (key, value) {
         | 
| 194 | 
            +
                            result += "<tr>";
         | 
| 195 | 
            +
                            $($settings.columns).each(function (k, v) {
         | 
| 196 | 
            +
                                if (value.hasOwnProperty(this.datafield)) {
         | 
| 197 | 
            +
                                    if (this.ishidden != true) {
         | 
| 198 | 
            +
                                        result += "<td";
         | 
| 199 | 
            +
                                        if (this.width != null) {
         | 
| 200 | 
            +
                                            result += " style='width: " + this.width + "'";
         | 
| 201 | 
            +
                                        }
         | 
| 202 | 
            +
                                        result += ">";
         | 
| 203 | 
            +
                                        result += value[this.datafield];
         | 
| 204 | 
            +
                                        result += "</td>";
         | 
| 205 | 
            +
                                    }
         | 
| 206 | 
            +
                                }
         | 
| 207 | 
            +
                            });
         | 
| 208 | 
            +
                            result += "</tr>";
         | 
| 209 | 
            +
                        });
         | 
| 210 | 
            +
                        result += "</tbody>";
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                        result += "</table>";
         | 
| 213 | 
            +
                        return result;
         | 
| 214 | 
            +
                    }
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                    function Export(htmltable) {
         | 
| 217 | 
            +
                        var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
         | 
| 218 | 
            +
                        excelFile += "<head>";
         | 
| 219 | 
            +
                        excelFile += '<meta http-equiv="Content-type" content="text/html;charset=' + $defaults.encoding + '" />';
         | 
| 220 | 
            +
                        excelFile += "<!--[if gte mso 9]>";
         | 
| 221 | 
            +
                        excelFile += "<xml>";
         | 
| 222 | 
            +
                        excelFile += "<x:ExcelWorkbook>";
         | 
| 223 | 
            +
                        excelFile += "<x:ExcelWorksheets>";
         | 
| 224 | 
            +
                        excelFile += "<x:ExcelWorksheet>";
         | 
| 225 | 
            +
                        excelFile += "<x:Name>";
         | 
| 226 | 
            +
                        excelFile += "{worksheet}";
         | 
| 227 | 
            +
                        excelFile += "</x:Name>";
         | 
| 228 | 
            +
                        excelFile += "<x:WorksheetOptions>";
         | 
| 229 | 
            +
                        excelFile += "<x:DisplayGridlines/>";
         | 
| 230 | 
            +
                        excelFile += "</x:WorksheetOptions>";
         | 
| 231 | 
            +
                        excelFile += "</x:ExcelWorksheet>";
         | 
| 232 | 
            +
                        excelFile += "</x:ExcelWorksheets>";
         | 
| 233 | 
            +
                        excelFile += "</x:ExcelWorkbook>";
         | 
| 234 | 
            +
                        excelFile += "</xml>";
         | 
| 235 | 
            +
                        excelFile += "<![endif]-->";
         | 
| 236 | 
            +
                        excelFile += "</head>";
         | 
| 237 | 
            +
                        excelFile += "<body>";
         | 
| 238 | 
            +
                        excelFile += htmltable.replace(/"/g, '\'');
         | 
| 239 | 
            +
                        excelFile += "</body>";
         | 
| 240 | 
            +
                        excelFile += "</html>";
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                        var uri = "data:application/vnd.ms-excel;base64,";
         | 
| 243 | 
            +
                        var ctx = { worksheet: $settings.worksheetName, table: htmltable };
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                        return (uri + base64(format(excelFile, ctx)));
         | 
| 246 | 
            +
                    }
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    function base64(s) {
         | 
| 249 | 
            +
                        return window.btoa(unescape(encodeURIComponent(s)));
         | 
| 250 | 
            +
                    }
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                    function format(s, c) {
         | 
| 253 | 
            +
                        return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; });
         | 
| 254 | 
            +
                    }
         | 
| 255 | 
            +
                };
         | 
| 256 | 
            +
            })(jQuery);
         | 
| 257 | 
            +
             | 
| 258 | 
            +
            </script>
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            <div id="syhostmodeldetails">
         | 
| 2 | 
            +
              <%= f.fields_for :syhostmodeldetails do |f| %>
         | 
| 3 | 
            +
              <div class="row">
         | 
| 4 | 
            +
                <div class="col-md-3 column form-group">
         | 
| 5 | 
            +
                  <label>no</label>
         | 
| 6 | 
            +
                  <%= f.text_field :no, class: "form_datetime form-control" %>
         | 
| 7 | 
            +
                </div>
         | 
| 8 | 
            +
                <div class="col-md-3 column form-group">
         | 
| 9 | 
            +
                  <label>status</label>
         | 
| 10 | 
            +
                  <%= f.select :status, [['please select', nil],"true", "false"], placeholder: "status", control_label: 'status', class: "col-md-3 column form-control"%>
         | 
| 11 | 
            +
                  <%#= f.text_field :status, class: "form_datetime form-control" %>
         | 
| 12 | 
            +
                </div>
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                <div class="col-md-3 column form-group">
         | 
| 15 | 
            +
                  <label>fact_name_id</label><br />
         | 
| 16 | 
            +
                  <%= f.select :fact_name_id, FactName.all.collect { |p| [ p.name, p.id ] }, include_blank: true , class: "col-md-3 column form-control"%>
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  <%#= f.text_field :fact_name_id, class: "form_datetime form-control" %>
         | 
| 19 | 
            +
                </div>
         | 
| 20 | 
            +
                <div class="col-md-1 column form-group">
         | 
| 21 | 
            +
                  <label>delete</label>
         | 
| 22 | 
            +
                  <%= f.link_to_remove "删除", class: "btn btn-danger" %>
         | 
| 23 | 
            +
                </div>
         | 
| 24 | 
            +
              </div>
         | 
| 25 | 
            +
              <%= f.hidden_field :syhostmodel_id, value: object.id %>
         | 
| 26 | 
            +
              <%= f.hidden_field :syhostmodel_type, value: object.class.to_s %>
         | 
| 27 | 
            +
            <% end %>
         | 
| 28 | 
            +
            </div>
         | 
| 29 | 
            +
            <div class="row">
         | 
| 30 | 
            +
              <div class="col-md-9 column form-group">
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              </div>
         | 
| 33 | 
            +
              <div class="col-md-1 column form-group">
         | 
| 34 | 
            +
                <label></label>
         | 
| 35 | 
            +
                <%= f.link_to_add "新增", :syhostmodeldetails, :data => { :target => "#syhostmodeldetails" }, class: "btn btn-primary" %>
         | 
| 36 | 
            +
              </div>
         | 
| 37 | 
            +
            </div>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= render 'form' %>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= render 'form' %>
         | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            <div class="container">
         | 
| 3 | 
            +
            	<div class="row">
         | 
| 4 | 
            +
            		<h1 class="clearfix">
         | 
| 5 | 
            +
            			<%= link_to '返回', foreman_hosts_syhostmodels_path, class: "btn btn-primary pull-right mr1" %>
         | 
| 6 | 
            +
            			<%= link_to '编辑', edit_foreman_hosts_syhostmodel_path(@syhostmodel), class: "btn btn-warning pull-right mr1" %>
         | 
| 7 | 
            +
            		</h1>
         | 
| 8 | 
            +
            	</div>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            	<div class="row col-md-12">
         | 
| 11 | 
            +
            		<table class="table table-striped table-bordered">
         | 
| 12 | 
            +
            			<thead></thead>
         | 
| 13 | 
            +
            			<tbody>
         | 
| 14 | 
            +
            				<tr>
         | 
| 15 | 
            +
            					<td><strong>name</strong></td>
         | 
| 16 | 
            +
            				</tr>
         | 
| 17 | 
            +
            				<tr>
         | 
| 18 | 
            +
            					<td><%= @syhostmodel.name %></td>
         | 
| 19 | 
            +
            				</tr>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            				<tr>
         | 
| 22 | 
            +
            					<td><strong>remark</strong></td>
         | 
| 23 | 
            +
            				</tr>
         | 
| 24 | 
            +
            				<tr>
         | 
| 25 | 
            +
            					<td><%= @syhostmodel.remark %></td>
         | 
| 26 | 
            +
            				</tr>
         | 
| 27 | 
            +
            			</tbody>
         | 
| 28 | 
            +
            		</table>
         | 
| 29 | 
            +
            	</div>
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            	<div class="row col-md-12">
         | 
| 32 | 
            +
            		<ul class="nav nav-tabs mb1">
         | 
| 33 | 
            +
            			<li class="active"><a href="#models" data-toggle="tab">Detail</a></li>
         | 
| 34 | 
            +
            			<li><a href="#previews" data-toggle="tab">Preview</a></li>
         | 
| 35 | 
            +
            		</ul>
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            		    <div class="tab-content">
         | 
| 38 | 
            +
            		      <div class="tab-pane active" id="models">
         | 
| 39 | 
            +
            		        <div id="models">
         | 
| 40 | 
            +
            		          
         | 
| 41 | 
            +
            		          <div class="panel-body">
         | 
| 42 | 
            +
            								<table class="table table-striped table-bordered models">
         | 
| 43 | 
            +
            									<thead>
         | 
| 44 | 
            +
            										<th>no</th>
         | 
| 45 | 
            +
            										<th>status</th>
         | 
| 46 | 
            +
            										<th>fact_name</th>
         | 
| 47 | 
            +
            									</thead>
         | 
| 48 | 
            +
            									<tbody>
         | 
| 49 | 
            +
            										<% @syhostmodel.syhostmodeldetails.order("no Asc").each do |syhostmodeldetail|%>
         | 
| 50 | 
            +
            											<tr class="success">
         | 
| 51 | 
            +
            												<td><%= syhostmodeldetail.no %></td>
         | 
| 52 | 
            +
            												<td><%= syhostmodeldetail.status %></td>
         | 
| 53 | 
            +
            												<td><%= syhostmodeldetail.fact_name.name rescue nil %></td>
         | 
| 54 | 
            +
            											</tr>
         | 
| 55 | 
            +
            										<% end %>
         | 
| 56 | 
            +
            									</tbody>
         | 
| 57 | 
            +
            								</table>
         | 
| 58 | 
            +
            		          </div>
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            			
         | 
| 61 | 
            +
            		        </div>
         | 
| 62 | 
            +
            		      </div>
         | 
| 63 | 
            +
            		      <div class="tab-pane" id="previews">
         | 
| 64 | 
            +
            		        <div id="previews">
         | 
| 65 | 
            +
            							<div class="panel-body">
         | 
| 66 | 
            +
            <%= render partial: "foreman_hosts/syhostmodels/report", locals: { details: @syhostmodel.syhostmodeldetails} %>
         | 
| 67 | 
            +
            							</div>
         | 
| 68 | 
            +
            		        </div>
         | 
| 69 | 
            +
            		      </div>
         | 
| 70 | 
            +
            		  </div>
         | 
| 71 | 
            +
            	</div>
         | 
| 72 | 
            +
            </div>
         | 
    
        data/config/routes.rb
    CHANGED
    
    | @@ -1,5 +1,8 @@ | |
| 1 1 | 
             
            Rails.application.routes.draw do
         | 
| 2 | 
            -
             | 
| 3 | 
            -
               | 
| 4 | 
            -
             | 
| 2 | 
            +
             | 
| 3 | 
            +
              namespace :foreman_hosts do
         | 
| 4 | 
            +
              	match 'report_index', to: 'hosts#report_index'
         | 
| 5 | 
            +
                resources :syhostmodels
         | 
| 6 | 
            +
                resources :syhostmodeldetails
         | 
| 7 | 
            +
              end
         | 
| 5 8 | 
             
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            class CreateSyhostmodeldetails < ActiveRecord::Migration
         | 
| 2 | 
            +
            	drop tables syhostmodeldetails if table_exists? :syhostmodeldetails
         | 
| 3 | 
            +
              def change
         | 
| 4 | 
            +
                create_table :syhostmodeldetails do |t|
         | 
| 5 | 
            +
            			t.integer :syhostmodel_id
         | 
| 6 | 
            +
            			t.string :syhostmodel_type
         | 
| 7 | 
            +
            			t.string :no
         | 
| 8 | 
            +
            			t.integer :fact_name_id
         | 
| 9 | 
            +
            			t.boolean :status
         | 
| 10 | 
            +
            			t.timestamps
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
    
        data/lib/foreman_hosts/engine.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module ForemanHosts | |
| 11 11 |  | 
| 12 12 | 
             
                # Add any db migrations
         | 
| 13 13 | 
             
                initializer 'foreman_hosts.load_app_instance_data' do |app|
         | 
| 14 | 
            -
                   | 
| 14 | 
            +
                  app.config.paths['db/migrate'] += ForemanHosts::Engine.paths['db/migrate'].existent
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 17 | 
             
                initializer 'foreman_hosts.register_plugin', after: :finisher_hook do |_app|
         | 
| @@ -21,22 +21,21 @@ module ForemanHosts | |
| 21 21 | 
             
                    # Add permissions
         | 
| 22 22 | 
             
                    security_block :foreman_hosts do
         | 
| 23 23 | 
             
                      permission :view_foreman_hosts, :'foreman_hosts/hosts' => [:report_index]
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                      permission :view_foreman_syhostmodels, :'foreman_hosts/syhostmodels' => [:index, :show, :auto_complete_search] 
         | 
| 26 | 
            +
                      permission :new_foreman_syhostmodels, :'foreman_hosts/syhostmodels' => [:new, :create] 
         | 
| 27 | 
            +
                      permission :edit_foreman_syhostmodels, :'foreman_hosts/syhostmodels' => [:edit, :update] 
         | 
| 28 | 
            +
                      permission :delete_foreman_syhostmodels, :'foreman_hosts/syhostmodels' => [:destroy]
         | 
| 24 29 | 
             
                    end
         | 
| 25 30 |  | 
| 26 31 | 
             
                    # Add a new role called 'Discovery' if it doesn't exist
         | 
| 27 | 
            -
                    role 'ForemanHosts', [:view_foreman_hosts]
         | 
| 32 | 
            +
                    role 'ForemanHosts', [:view_foreman_hosts, :view_foreman_syhostmodels, :new_foreman_syhostmodels, :edit_foreman_syhostmodels, :delete_foreman_syhostmodels]
         | 
| 28 33 |  | 
| 29 34 | 
             
                    # add menu entry
         | 
| 30 35 |  | 
| 31 36 | 
             
                     sub_menu :top_menu, :export_menu, :caption=> N_('Export'), :after=> :infrastructure_menu do
         | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
                       # menu :top_menu, :level3, :url_hash => {:controller=> :example, :action=>:index}
         | 
| 35 | 
            -
                       # sub_menu :top_menu, :inner_level, :caption=> N_('Inner level') do
         | 
| 36 | 
            -
                       #   menu :top_menu, :level41, :url_hash => {:controller=> :example, :action=>:index}
         | 
| 37 | 
            -
                       #   menu :top_menu, :level42, :url_hash => {:controller=> :example, :action=>:index}
         | 
| 38 | 
            -
                       # end
         | 
| 39 | 
            -
                       # menu :top_menu, :level5, :url_hash => {:controller=> :example, :action=>:index}
         | 
| 37 | 
            +
                      menu :top_menu, :level1, :caption=>N_('ExportTemplates'), :url_hash => { :controller => 'foreman_hosts/syhostmodels', :action => :index }
         | 
| 38 | 
            +
                      menu :top_menu, :level2, :caption=>N_('ExportHosts'), :url_hash => { :controller => 'foreman_hosts/hosts', :action => :report_index }
         | 
| 40 39 | 
             
                     end
         | 
| 41 40 | 
             
                    # menu :top_menu, :template,
         | 
| 42 41 | 
             
                    #      url_hash: { controller: :'foreman_hosts/hosts', action: :new_action },
         |