dhatu 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 310d2306a14f602500128b494f6ee13378836145
4
- data.tar.gz: ffad0ed3f1b05f4a582c282c359b827fc2dfca13
3
+ metadata.gz: 5aa15ef1778f28fd3c9a4c2e5fa38c70a04691fb
4
+ data.tar.gz: db924144919db1ce6795890dac67ec1e969d4aa8
5
5
  SHA512:
6
- metadata.gz: 4d206c07bb298481e3b79fb2367735f4c9525f90a856e6c0be8414452b63866b411653c63db43bab70472fc639e7c9ed8e1289b4a7dfd089ff1221ec56de73c1
7
- data.tar.gz: 86edc9cd171fdeba5e76515bf0986e1fa9d89da322bb40e85d56abba41a35665255de707db64ea60a4cb8124ab25c9aaaad4d33eeef7f319d5e13c62714957f4
6
+ metadata.gz: 06ee7c08dfed11f1b3c2c753b0f3fce3bf64ae2aa043ad9dde093fc9c8cd7cbd90f927345632161c6907c203e5c4e710c027e2b2ab026a15bd0b985a53e36159
7
+ data.tar.gz: 7d3a7f3177d7df229009a8cc9f9dc313e19bd230061c5ab6a86be036e0e68bc11321d9cce89573d2c28dda3b7c7cc085829e2801d988b48ba2b1a48a72f1313a
@@ -4,7 +4,7 @@ module Dhatu
4
4
  private
5
5
 
6
6
  def permitted_params
7
- params.require("dhatu/blog_post").permit(:title, :slug, :author, :meta_description, :description, :posted_at, :tags)
7
+ params.require("dhatu/blog_post").permit(:title, :slug, :author, :meta_description, :description, :posted_at, :tags, :category_id)
8
8
  end
9
9
 
10
10
  def get_collections
@@ -42,15 +42,13 @@ module Dhatu
42
42
  params[:category].permit(:name, :permalink, :one_liner, :description, :parent_id, :priority)
43
43
  end
44
44
 
45
- def resource_url(obj)
46
- url_for([:admin, obj])
47
- end
48
-
49
45
  def set_navs
50
46
  set_nav("admin/categories")
51
47
  end
52
48
 
53
49
  def get_collections
50
+ @category_types = Dhatu::Category.distinct.pluck(:category_type)
51
+ @category_types.unshift('All')
54
52
 
55
53
  @current_category = Dhatu::Category.find_by_id(params[:parent_id])
56
54
 
@@ -77,6 +75,12 @@ module Dhatu
77
75
  end
78
76
 
79
77
  def apply_filters
78
+
79
+ @category_type = params[:category_type] || "All"
80
+ if @category_type && @category_type != "All"
81
+ @relation = @relation.where("category_type = ?", params[:category_type])
82
+ end
83
+
80
84
  @relation = @relation.search(@query) if @query
81
85
  @relation = @relation.status(@status) if @status
82
86
  @relation = @relation.featured(@featured) unless @featured.nil?
@@ -118,7 +122,7 @@ module Dhatu
118
122
  end
119
123
 
120
124
  def permitted_params
121
- params.require(:category).permit(:name, :one_liner, :description, :priority, :parent_id)
125
+ params.require("dhatu/category").permit(:name, :one_liner, :description, :priority, :parent_id, :category_type)
122
126
  end
123
127
 
124
128
  def set_navs
@@ -0,0 +1,94 @@
1
+ module Dhatu
2
+ class ServicesController < ResourceController
3
+
4
+ private
5
+
6
+ def permitted_params
7
+ params.require("dhatu/service").permit(:name, :one_liner, :permalink, :description, :price, :duration, :category_id, :priority)
8
+ end
9
+
10
+ def get_collections
11
+ category_ids = Dhatu::Service.distinct.pluck(:category_id)
12
+ @categories = Dhatu::Category.where(id: category_ids).to_a
13
+ @categories.unshift(Dhatu::Category.new(id: -1, name: "All"))
14
+
15
+ @relation = Dhatu::Service.includes(:cover_image).where("")
16
+ # params[:st] = "published" if params[:st].nil?
17
+
18
+ parse_filters
19
+ apply_filters
20
+ @services = @r_objects = @relation.page(@current_page).per(@per_page)
21
+ return true
22
+ end
23
+
24
+ def apply_filters
25
+ @category = Dhatu::Category.find_by_id(params[:ct]) || Dhatu::Category.new(id: -1, name: "All")
26
+
27
+ if @category && @category.id != -1
28
+ @relation = @relation.where("category_id = ?", @category.id)
29
+ end
30
+
31
+ @relation = @relation.search(@query) if @query
32
+ @relation = @relation.status(@status) if @status
33
+
34
+ @order_by = "created_at desc" unless @order_by
35
+ @relation = @relation.order(@order_by)
36
+ end
37
+
38
+ def configure_filter_settings
39
+ @filter_settings = {
40
+ string_filters: [
41
+ { filter_name: :query },
42
+ { filter_name: :status }
43
+ ],
44
+
45
+ boolean_filters: [],
46
+
47
+ reference_filters: [],
48
+ variable_filters: [],
49
+ }
50
+ end
51
+
52
+ def configure_filter_ui_settings
53
+ @filter_ui_settings = {
54
+ status: {
55
+ object_filter: false,
56
+ select_label: "Select Status",
57
+ display_hash: Dhatu::Service::STATUS,
58
+ current_value: @status,
59
+ values: Dhatu::Service::STATUS_REVERSE,
60
+ current_filters: @filters,
61
+ filters_to_remove: [],
62
+ filters_to_add: {},
63
+ url_method_name: 'services_url',
64
+ show_all_filter_on_top: true
65
+ }
66
+ }
67
+ end
68
+
69
+ def resource_controller_configuration
70
+ {
71
+ page_title: "Services",
72
+ js_view_path: "/kuppayam/workflows/peacock",
73
+ view_path: "dhatu/services",
74
+ collection_name: :services,
75
+ item_name: :service,
76
+ class: Dhatu::Service
77
+ }
78
+ end
79
+
80
+ def breadcrumbs_configuration
81
+ {
82
+ heading: "Manage services",
83
+ icon: "fa-reorder",
84
+ description: "Listing all services",
85
+ links: [{name: "Dashboard", link: dashboard_path, icon: 'fa-dashboard'},
86
+ {name: "Manage services", link: dhatu.services_path, icon: 'fa-calendar', active: true}]
87
+ }
88
+ end
89
+
90
+ def set_navs
91
+ set_nav("service")
92
+ end
93
+ end
94
+ end
@@ -14,8 +14,11 @@ class Dhatu::BlogPost < Dhatu::ApplicationRecord
14
14
  validates :description, presence: true
15
15
  validates :posted_at, presence: true
16
16
  validates :meta_description, presence: true, length: {minimum: 10, maximum: 500}, allow_blank: false
17
+
18
+ validates :category, presence: true
17
19
 
18
20
  # Associations
21
+ belongs_to :category
19
22
  has_one :cover_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
20
23
  has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
21
24
 
@@ -18,8 +18,7 @@ class Dhatu::Category < Dhatu::ApplicationRecord
18
18
  validate_string :one_liner, mandatory: false, format: /.*/i
19
19
  validate_string :permalink, mandatory: true, format: /.*/i, min_length: 4, max_length: 128
20
20
  validates :category_type, :presence=> true, length: {maximum: 64}
21
- validates :status, :presence=> true, :inclusion => {:in => STATUS.keys, :presence_of => :status, :message => "%{value} is not a valid status" }
22
-
21
+
23
22
  # Associations
24
23
  belongs_to :parent, :class_name => 'Dhatu::Category', optional: true
25
24
  belongs_to :top_parent, :class_name => 'Dhatu::Category', optional: true
@@ -41,6 +40,8 @@ class Dhatu::Category < Dhatu::ApplicationRecord
41
40
  LOWER(description) LIKE LOWER('%#{query}%')")
42
41
  }
43
42
 
43
+ scope :filter_by_category_type, lambda { |ctype| where("category_type = ?", ctype) }
44
+
44
45
  scope :status, lambda { |status| where("LOWER(status)='#{status}'") }
45
46
  scope :featured, lambda { |val| where(featured: val) }
46
47
 
@@ -127,6 +128,22 @@ class Dhatu::Category < Dhatu::ApplicationRecord
127
128
  true
128
129
  end
129
130
 
131
+ def can_be_published?
132
+ unpublished? or archived?
133
+ end
134
+
135
+ def can_be_unpublished?
136
+ published? or archived?
137
+ end
138
+
139
+ def can_be_archived?
140
+ unpublished?
141
+ end
142
+
143
+ def can_be_removed?
144
+ unpublished? or archived?
145
+ end
146
+
130
147
  # Callback methods
131
148
  # ------------------
132
149
 
@@ -0,0 +1,75 @@
1
+ class Dhatu::Service < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "services"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+
9
+ # Constants
10
+ COVER_IMAGE_INSTRUCTIONS = [
11
+ "the file extension should be .jpg / .jpeg or .png format",
12
+ "the image should be in resolution 750 pixels by 368 pixels, (Portrait Format). (most cameras and camera phones will produce images bigger than this)",
13
+ "the file size should not be less than 20 Kb, or bigger than <strong>1 MB</strong>"
14
+ ]
15
+
16
+ # Constants
17
+ GALLERY_IMAGE_INSTRUCTIONS = [
18
+ "the file extension should be .jpg / .jpeg or .png format",
19
+ "the image should be in resolution 750 pixels by 368 pixels, (Portrait Format). (most cameras and camera phones will produce images bigger than this)",
20
+ "the file size should not be less than 20 Kb, or bigger than <strong>1 MB</strong>"
21
+ ]
22
+
23
+ # Validations
24
+ validate_string :name, mandatory: true, min_length: 2, format: /.*/i
25
+ validate_string :one_liner, mandatory: false, format: /.*/i
26
+ validate_string :permalink, mandatory: true, format: /.*/i, min_length: 4, max_length: 128
27
+
28
+ validates :category, presence: true
29
+
30
+ # Associations
31
+ belongs_to :category
32
+ has_one :cover_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
33
+ has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
34
+
35
+ # ------------------
36
+ # Class Methods
37
+ # ------------------
38
+
39
+ scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%') OR\
40
+ LOWER(one_liner) LIKE LOWER('%#{query}%') OR\
41
+ LOWER(permalink) LIKE LOWER('%#{query}%') OR\
42
+ LOWER(description) LIKE LOWER('%#{query}%')")
43
+ }
44
+
45
+ scope :filter_by_category, lambda { |c| where("category_id = ?", (c.is_a? Dhatu::Category ? c.id : c)) }
46
+
47
+ scope :upcoming, lambda { where("created_at >= ?", Time.now) }
48
+ scope :past, lambda { where("created_at < ?", Time.now) }
49
+
50
+ # ------------------
51
+ # Instance variables
52
+ # ------------------
53
+
54
+ # Generic Methods
55
+ # ---------------
56
+ def to_param
57
+ "#{id}-#{name.parameterize[0..32]}"
58
+ end
59
+
60
+ def display_name
61
+ "#{name_was}"
62
+ end
63
+
64
+ # Permission Methods
65
+ # ------------------
66
+
67
+ def can_be_edited?
68
+ status?(:published) or status?(:unpublished)
69
+ end
70
+
71
+ def can_be_deleted?
72
+ status?(:removed)
73
+ end
74
+
75
+ end
@@ -12,7 +12,15 @@
12
12
 
13
13
  <%= theme_form_field(@blog_post, :title, form_style: "top-bottom") %>
14
14
 
15
- <%= theme_form_field(@blog_post, :slug, form_style: "top-bottom", html_options: {"data-id": @blog_post.id.to_s}) %>
15
+ <div class="row">
16
+ <div class="col-md-6 pr-20">
17
+ <% options = {assoc_collection: Dhatu::Category.filter_by_category_type("Blog").published.select("id, name").order("name ASC").all, editable: true, assoc_display_method: :name} %>
18
+ <%= theme_form_assoc_group(@blog_post, :category_id, label: "Choose Category", form_style: "top-bottom", **options) %>
19
+ </div>
20
+ <div class="col-md-6 pl-20">
21
+ <%= theme_form_field(@blog_post, :slug, form_style: "top-bottom", html_options: {"data-id": @blog_post.id.to_s}) %>
22
+ </div>
23
+ </div>
16
24
 
17
25
  <%= theme_form_field(@blog_post, :meta_description, required: true, html_options: {type: :textarea, class: "form-control", style: "height: 80px;"}, form_style: "top-bottom") %>
18
26
 
@@ -1,12 +1,16 @@
1
- <%= form_for([:admin, @category], :html => {:id=>"form_category", :class=>"mb-0 form-horizontal", :role => "form", :method => (@category.new_record? ? :post : :put), :remote=>true}) do |f| %>
1
+ <%= form_for(@category, :html => {:id=>"form_category", :class=>"mb-0 form-horizontal", :role => "form", :method => (@category.new_record? ? :post : :put), :remote=>true}) do |f| %>
2
2
 
3
3
  <div id="category_form_error">
4
4
  <%= @category.errors[:base].to_sentence %>
5
5
  </div>
6
6
 
7
7
  <div class="form-inputs mb-30 mt-30">
8
+
9
+ <% @category.category_type = params[:category_type] if @category.category_type.blank? && params[:category_type] != "All" %>
10
+
8
11
  <%= theme_form_field(@category, :name) %>
9
12
 
13
+ <%= theme_form_field(@category, :category_type, required: true) %>
10
14
  <%= theme_form_field(@category, :one_liner, required: false) %>
11
15
  <%= theme_form_field(@category, :description, required: false, html_options: {type: :textarea}) %>
12
16
  <%= theme_form_field(@category, :priority, required: false, html_options: {type: :number, style: "width:70px;"}) %>
@@ -20,7 +24,7 @@
20
24
  <%= theme_form_assoc_group(@category, :parent_id, **options) %>
21
25
  </div>
22
26
 
23
-
27
+
24
28
 
25
29
  <div>
26
30
 
@@ -6,10 +6,10 @@
6
6
  <%= theme_button('Back', 'arrow-left', categories_path(parent_id: @current_category.parent_id), classes: "pull-left mr-10", btn_type: "white") %>
7
7
  <% end %>
8
8
 
9
- <%= theme_button('Refresh', 'refresh', categories_path(parent_id: @current_category.try(:id)), classes: "pull-left mr-10", btn_type: "white") %>
9
+ <%= theme_button('Refresh', 'refresh', categories_path(parent_id: @current_category.try(:id), category_type: @category_type), classes: "pull-left mr-10", btn_type: "white") %>
10
10
 
11
- <% if @current_category.try(:id) && @current_user.has_create_permission?(Dhatu::Category) %>
12
- <%= theme_button('Add a Category', 'plus', new_category_path(parent_id: @current_category.try(:id)), classes: "pull-left mr-10", btn_type: "success") %>
11
+ <% if @current_user.has_create_permission?(Dhatu::Category) %>
12
+ <%= theme_button('Add a Category', 'plus', new_category_path(parent_id: @current_category.try(:id), category_type: @category_type), classes: "pull-left mr-10", btn_type: "success") %>
13
13
  <% end %>
14
14
 
15
15
  </div>
@@ -48,11 +48,11 @@
48
48
  <tr>
49
49
  <th style="text-align: center;width:60px">#</th>
50
50
  <th>Name</th>
51
- <th>Parent</th>
52
- <th>Top Parent</th>
51
+ <!-- <th>Parent</th>
52
+ <th>Top Parent</th> -->
53
53
  <th style="text-align: center;width:100px;">Status</th>
54
- <th style="text-align: center;width:100px;">Priority</th>
55
- <th style="text-align: center;width:120px;">End Node?</th>
54
+ <!-- <th style="text-align: center;width:100px;">Priority</th>
55
+ <th style="text-align: center;width:120px;">End Node?</th> -->
56
56
  <% if display_manage_links? %>
57
57
  <th style="text-align: center;" colspan="2">Actions</th>
58
58
  <% end %>
@@ -77,17 +77,19 @@
77
77
  <%= link_to raw("<i class=\"fa fa-caret-right\"></i> #{category.display_name}"), categories_path(parent_id: category.id), remote: true %></td>
78
78
  <% end %>
79
79
 
80
- <% if category.parent == @current_category %>
81
- <td class="category-name"><%= category.parent.display_name if category.parent %></td>
82
- <% else %>
83
- <td class="category-name"><%= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
84
- <% end %>
80
+ <!--
81
+ <%# if category.parent == @current_category %>
82
+ <td class="category-name"><%#= category.parent.display_name if category.parent %></td>
83
+ <%# else %>
84
+ <td class="category-name"><%#= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
85
+ <%# end %>
85
86
 
86
- <% if category.top_parent == @current_category %>
87
- <td class="category-name"><%= category.top_parent.display_name if category.top_parent %></td>
88
- <% else %>
89
- <td class="category-name"><%= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
90
- <% end %>
87
+ <%# if category.top_parent == @current_category %>
88
+ <td class="category-name"><%#= category.top_parent.display_name if category.top_parent %></td>
89
+ <%# else %>
90
+ <td class="category-name"><%#= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
91
+ <%# end %>
92
+ -->
91
93
 
92
94
  <td style="text-align: center;width:100px;">
93
95
  <% if category.unpublished? %>
@@ -99,8 +101,10 @@
99
101
  <% end %>
100
102
  </td>
101
103
 
102
- <td style="text-align: center;width:100px;"><%= category.priority if category.priority %></td>
103
- <td style="text-align: center;width:120px;"><%= category.end_node.to_s.titleize %></td>
104
+ <!--
105
+ <td style="text-align: center;width:100px;"><%#= category.priority if category.priority %></td>
106
+ <td style="text-align: center;width:120px;"><%#= category.end_node.to_s.titleize %></td>
107
+ -->
104
108
 
105
109
  <% if display_manage_links? %>
106
110
  <% edit_link = edit_category_path(id: category.id) %>
@@ -15,17 +15,19 @@
15
15
  <%= link_to raw("<i class=\"fa fa-caret-right\"></i> #{category.display_name}"), categories_path(parent_id: category.id), remote: true %></td>
16
16
  <% end %>
17
17
 
18
- <% if category.parent == @current_category %>
19
- <td class="category-name"><%= category.parent.display_name if category.parent %></td>
20
- <% else %>
21
- <td class="category-name"><%= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
22
- <% end %>
18
+ <!--
19
+ <%# if category.parent == @current_category %>
20
+ <td class="category-name"><%#= category.parent.display_name if category.parent %></td>
21
+ <%# else %>
22
+ <td class="category-name"><%#= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
23
+ <%# end %>
23
24
 
24
- <% if category.top_parent == @current_category %>
25
- <td class="category-name"><%= category.top_parent.display_name if category.top_parent %></td>
26
- <% else %>
27
- <td class="category-name"><%= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
28
- <% end %>
25
+ <%# if category.top_parent == @current_category %>
26
+ <td class="category-name"><%#= category.top_parent.display_name if category.top_parent %></td>
27
+ <%# else %>
28
+ <td class="category-name"><%#= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
29
+ <%# end %>
30
+ -->
29
31
 
30
32
  <td style="text-align: center;width:100px;">
31
33
  <% if category.unpublished? %>
@@ -37,8 +39,10 @@
37
39
  <% end %>
38
40
  </td>
39
41
 
40
- <td style="text-align: center;width:100px;"><%= category.priority if category.priority %></td>
41
- <td style="text-align: center;width:120px;"><%= category.end_node.to_s.titleize %></td>
42
+ <!--
43
+ <td style="text-align: center;width:100px;"><%#= category.priority if category.priority %></td>
44
+ <td style="text-align: center;width:120px;"><%#= category.end_node.to_s.titleize %></td>
45
+ -->
42
46
 
43
47
  <% if display_manage_links? %>
44
48
  <% edit_link = edit_category_path(id: category.id) %>
@@ -1,100 +1,99 @@
1
- <% status_hash = {published: "success", unpublished: "default", disabled: "danger"} %>
1
+ <div id="div_category_show">
2
2
 
3
- <div class="media <%= status_hash[@category.status.to_sym] %>">
4
-
5
- <!-- <div class="pull-left pt-10 pr-10 pb-10" style="width:30%;"> -->
6
- <%#= edit_image(@category,
7
- "category_image.image.small.url",
8
- upload_image_link(@category, :category_image, nil ),
9
- remove_image_link(@category, :category_image, nil ),
10
- image_options: {assoc_name: :category_image }) %>
11
- <!-- </div> -->
12
-
13
- <!-- <div class="pull-left ml-10" style="width:65%;"> -->
14
- <div class="">
15
-
16
- <h1><%= @category.name %></h1>
17
-
18
- <% if @category.one_liner %>
19
- <strong><%= @category.one_liner %></strong>
20
- <% end %>
3
+ <div class="row">
4
+
5
+ <!-- <div class="col-md-3 col-sm-12 col-xs-12" style="border-right:1px solid #f1f1f1;"> -->
6
+ <%# if display_edit_links? %>
7
+ <%#= edit_image(@category,
8
+ "cover_image.image.large.url",
9
+ upload_image_link(@category, :cover_image, nil ),
10
+ remove_image_link(@category, :cover_image, nil ),
11
+ image_options: {assoc_name: :cover_image }) %>
12
+ <%# else %>
13
+ <%#= display_image(@category, "cover_image.image.large.url", class: "img-inline", alt: @category.display_name) %>
14
+ <%# end %>
15
+ <!-- </div> -->
16
+
17
+ <div class="col-md-9 col-sm-12 col-xs-12" style="border-right:1px solid #f1f1f1;">
18
+
19
+ <%= theme_panel_heading(@category.name) %>
20
+
21
+ <%= theme_panel_sub_heading(@category.category_type, "#") if @category.one_liner %>
22
+
23
+ <%= clear_tag(10) %>
24
+ <%= display_publishable_status(@category) %>
25
+ <%= clear_tag(10) %>
26
+ <%= theme_panel_description(@category.one_liner) %>
27
+ <%= clear_tag(5) %>
28
+ <%= theme_panel_description(@category.description) %>
29
+ <%= clear_tag(20) %>
30
+
31
+ </div>
21
32
 
22
- <% if @category.description %>
23
- <p><%= @category.description %></p>
33
+ <% if display_manage_links? %>
34
+ <div class="col-md-3 col-sm-12 col-xs-12">
35
+ <%= display_manage_buttons(@category) %>
36
+ <%= display_publishable_buttons(@category) %>
37
+ <%= display_featurable_buttons(@category) %>
38
+ </div>
24
39
  <% end %>
25
-
26
- <span class="label label-<%= status_hash[@category.status.to_sym] %>"><%= @category.status.titleize %></span>
27
40
 
28
- <%= clear_tag %>
29
41
  </div>
30
42
 
31
- </div>
32
-
33
- <%= clear_tag(30) %>
34
-
35
- <ul class="nav nav-pills">
36
-
37
- <li class="active">
38
- <a href="#technical_details" data-toggle="tab" aria-expanded="false">
39
- <span class="visible-xs"><i class="fa-database"></i></span>
40
- <span class="hidden-xs">Technical Details</span>
41
- </a>
42
- </li>
43
-
44
- </ul>
45
-
46
- <div class="tab-content">
47
- <div class="tab-pane active" id="technical_details" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
48
-
49
- <%= clear_tag(20) %>
50
-
51
- <div class="table-responsive mb-50">
52
- <table class="table table-striped table-condensed table-bordered">
53
- <tbody>
54
-
55
- <tr>
56
- <th>ID</th><td><%= @category.id %></td>
57
- <th>Permalink</th><td><%= @category.permalink %></td>
58
- </tr>
59
-
60
- <tr>
61
- <th>Parent</th><td><%= @category.parent.try(:display_name) %> (<%= @category.parent.try(:id) %>)</td>
62
- <th>Top Parent</th><td><%= @category.top_parent.try(:display_name) %> (<%= @category.top_parent.try(:id) %>)</td>
63
- </tr>
64
-
65
- <tr>
66
- <th>Status</th><td><%= @category.status %></td>
67
- <th>Featured</th><td><%= @category.featured? ? "Yes" : "No" %></td>
68
- </tr>
69
-
70
- <tr>
71
- <th>Priority</th><td><%= @category.priority %></td>
72
- <th>End Node</th><td><%= @category.end_node? ? "Yes" : "No" %></td>
73
- </tr>
74
-
75
- <tr>
76
- <th>Created At</th><td><%= @category.created_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.created_at %></td>
77
- <th>Updated At</th><td><%= @category.updated_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.updated_at %></td>
78
- </tr>
79
-
80
- </tbody>
81
- </table>
43
+ <%= clear_tag(20) %>
44
+
45
+ <ul class="nav nav-pills">
46
+ <li class="active">
47
+ <a href="#technical_details" data-toggle="tab" aria-expanded="false">
48
+ <span class="visible-xs"><i class="fa-database"></i></span>
49
+ <span class="hidden-xs">Technical Details</span>
50
+ </a>
51
+ </li>
52
+ </ul>
53
+
54
+ <div class="tab-content">
55
+ <div class="tab-pane active" id="technical_details" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
56
+
57
+ <%= clear_tag(20) %>
58
+
59
+ <div class="table-responsive">
60
+ <table class="table table-striped table-condensed table-bordered mb-60">
61
+ <tbody>
62
+
63
+ <tr>
64
+ <th>ID</th><td><%= @category.id %></td>
65
+ <th>Permalink</th><td><%= @category.permalink %></td>
66
+ </tr>
67
+
68
+ <tr>
69
+ <th>Parent</th><td><%= @category.parent.try(:display_name) %> (<%= @category.parent.try(:id) %>)</td>
70
+ <th>Top Parent</th><td><%= @category.top_parent.try(:display_name) %> (<%= @category.top_parent.try(:id) %>)</td>
71
+ </tr>
72
+
73
+ <tr>
74
+ <th>Status</th><td><%= @category.status %></td>
75
+ <th>Featured</th><td><%= @category.featured? ? "Yes" : "No" %></td>
76
+ </tr>
77
+
78
+ <tr>
79
+ <th>Priority</th><td><%= @category.priority %></td>
80
+ <th>End Node</th><td><%= @category.end_node? ? "Yes" : "No" %></td>
81
+ </tr>
82
+
83
+ <tr>
84
+ <th>Created At</th><td><%= @category.created_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.created_at %></td>
85
+ <th>Updated At</th><td><%= @category.updated_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.updated_at %></td>
86
+ </tr>
87
+
88
+ </tbody>
89
+ </table>
90
+ </div>
91
+
82
92
  </div>
83
-
84
93
  </div>
85
- </div>
86
-
87
- <div>
88
- <%
89
- edit_link = edit_category_url(id: @category.id)
90
- delete_link = category_url(id: @category.id)
91
- %>
92
-
93
- <%= link_to raw("<i class=\"fa fa-close mr-5\"></i> <span>Cancel</span>"), "#", onclick: "closeGenericModal();", class: "btn btn-white pull-left" %>
94
94
 
95
- <%= link_to raw("<i class=\"fa fa-trash mr-5\"></i> <span>Delete</span>"), delete_link, method: :delete, :remote=>true, class: "btn btn-gray pull-right" %>
95
+ <%= link_to "Close", "#", onclick: "closeLargeModal();", class: "btn btn-primary pull-right" %>
96
96
 
97
- <%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Edit"), edit_link, method: :get, :remote=>true, class: "btn btn-gray pull-right mr-10" %>
98
- </div>
97
+ <%= clear_tag %>
99
98
 
100
- <%= clear_tag %>
99
+ </div>
@@ -1,20 +1,26 @@
1
1
  <div class="row">
2
2
 
3
3
  <div class="col-md-12">
4
-
5
- <ul class="nav nav-tabs">
6
- </ul>
7
- <div class="tab-content">
8
- <div class="tab-pane active">
9
-
10
- <div id="div_category_index">
11
- <%= render :partial=>"dhatu/categories/index" %>
4
+ <div class="tabs-vertical-env">
5
+
6
+ <ul id="div_category_types" class="nav tabs-vertical">
7
+ <% @category_types.each do |ctype| %>
8
+ <li class="<%= ctype == @category_type ? 'active' : '' %>">
9
+ <%= link_to ctype, categories_path(category_type: ctype) %>
10
+ </li>
11
+ <% end %>
12
+ </ul>
13
+
14
+ <div class="tab-content">
15
+ <div class="tab-pane active" id="v-home">
16
+ <div id="div_category_index">
17
+ <%= render :partial=>"dhatu/categories/index" %>
18
+ </div>
19
+ <%= clear_tag(10) %>
12
20
  </div>
13
- <%= clear_tag(10) %>
14
-
15
21
  </div>
22
+
16
23
  </div>
17
-
18
24
  </div>
19
25
 
20
26
  </div>
@@ -12,6 +12,12 @@
12
12
  url: dhatu.blog_posts_url,
13
13
  has_permission: @current_user.has_read_permission?(Dhatu::BlogPost)
14
14
  },
15
+ services: {
16
+ text: "Services",
17
+ icon_class: "fa-glass",
18
+ url: dhatu.services_url,
19
+ has_permission: @current_user.has_read_permission?(Dhatu::Service)
20
+ },
15
21
  branches: {
16
22
  text: "Branches",
17
23
  icon_class: "fa-location-arrow",
@@ -41,6 +47,12 @@
41
47
  icon_class: "fa-group",
42
48
  url: dhatu.team_members_url,
43
49
  has_permission: @current_user.has_read_permission?(Dhatu::TeamMember)
50
+ },
51
+ categories: {
52
+ text: "Categories",
53
+ icon_class: "fa-sitemap",
54
+ url: dhatu.categories_url,
55
+ has_permission: @current_user.has_read_permission?(Dhatu::Category)
44
56
  }
45
57
  }
46
58
  %>
@@ -0,0 +1,57 @@
1
+ <%= form_for(@service,
2
+ :url => (@service.new_record? ? dhatu.services_path : dhatu.service_path),
3
+ :method => (@service.new_record? ? :post : :put),
4
+ :remote => true,
5
+ :html => {:id=>"form_service", :class=>"mb-0 form-horizontal"}) do |f| %>
6
+
7
+ <div id="service_form_error">
8
+ <%= @service.errors[:base].to_sentence %>
9
+ </div>
10
+
11
+ <div class="form-inputs m-15">
12
+
13
+ <%= theme_form_field(@service, :name, required: true, form_style: "top-bottom", html_options: { placeholder: "", "data-id": @service.id.to_s}) %>
14
+
15
+ <div class="row">
16
+ <div class="col-md-4 pr-20">
17
+ <% options = {assoc_collection: Dhatu::Category.filter_by_category_type("Service").published.select("id, name").order("name ASC").all, editable: true, assoc_display_method: :name} %>
18
+ <%= theme_form_assoc_group(@service, :category_id, label: "Choose Category", form_style: "top-bottom", **options) %>
19
+ </div>
20
+ <div class="col-md-4 pl-20">
21
+ <%= theme_form_field(@service, :one_liner, required: false, form_style: "top-bottom", html_options: { placeholder: "" }) %>
22
+ </div>
23
+ <div class="col-md-4 pl-20">
24
+ <% if @service.new_record? || @current_user.super_admin? %>
25
+ <%= theme_form_field(@service, :permalink, form_style: "top-bottom", html_options: { placeholder: ""}) %>
26
+ <% else %>
27
+ <%= theme_form_field(@service, :permalink, form_style: "top-bottom", html_options: { placeholder: "", readonly: true}) %>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+
32
+ <%= theme_form_field(@service, :description, required: true, html_options: {type: :textarea, class: "form-control wysihtml5", "data-stylesheet-url": "assets/wysiwyg-color.css"}, form_style: "top-bottom") %>
33
+
34
+ <div class="row">
35
+ <div class="col-md-4 pr-20">
36
+ <%= theme_form_field(@service, :price, required: false, form_style: "top-bottom", html_options: { placeholder: "" }) %>
37
+ </div>
38
+ <div class="col-md-4 pl-20">
39
+ <%= theme_form_field(@service, :duration, required: false, form_style: "top-bottom", html_options: { placeholder: "" }) %>
40
+ </div>
41
+ <div class="col-md-4 pl-20">
42
+ <%= theme_form_field(@service, :priority, required: false, form_style: "top-bottom", html_options: { placeholder: "" }) %>
43
+ </div>
44
+ </div>
45
+
46
+ </div>
47
+
48
+ <div>
49
+ <%= submit_tag("Save", :class=>"btn btn-primary pull-right ml-10") %>
50
+
51
+ <%= link_to raw("<i class='fa fa-close mr-5'></i><span>Cancel</span>"), "#", onclick: "closeLargeModal();", class: "pull-right btn btn-white" %>
52
+ </div>
53
+
54
+ <%= clear_tag %>
55
+
56
+ <% end %>
57
+
@@ -0,0 +1,54 @@
1
+ <div class="table-responsive">
2
+ <table class="table table-hover members-table middle-align">
3
+ <thead>
4
+ <tr>
5
+ <th style="text-align: center;width:5%">#</th>
6
+ <th style="text-align: center;width:100px"><i class="fa fa-photo"></i></th>
7
+ <th>Service Name</th>
8
+ <th style="width:200px">Category</th>
9
+ <th style="width:100px;" class="hidden-sm hidden-xs">Status</th>
10
+ <% if display_manage_links? %>
11
+ <th style="text-align: center;" colspan="2" class="hidden-sm hidden-xs">Actions</th>
12
+ <% end %>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <tr id="tr_service_0"></tr>
17
+ <% @services.each_with_index do |service, i| %>
18
+
19
+ <tr id="tr_service_<%= service.id %>">
20
+
21
+ <th scope="row" style="text-align: center;">
22
+ <%= serial_number(i) %>
23
+ </th>
24
+
25
+ <td class="display-image">
26
+ <%= display_thumbnail_small(service) %>
27
+ </td>
28
+
29
+ <td class="display-link">
30
+ <%= link_to service.name, service_path(service), remote: true %><br>
31
+ <%= link_to service.category.try(:display_name), service_path(service), remote: true %>
32
+ </td>
33
+
34
+ <td class="hidden-sm hidden-xs"><%= display_publishable_status(service) %></td>
35
+
36
+ <% if display_manage_links? %>
37
+ <td class="action-links hidden-sm hidden-xs" style="width:10%"><%= display_publishable_links(service) %></td>
38
+
39
+ <td class="action-links hidden-sm hidden-xs" style="width:10%">
40
+ <%= display_manage_links(service, @current_user) %>
41
+ </td>
42
+ <% end %>
43
+
44
+ </tr>
45
+ <% end %>
46
+ </tbody>
47
+ </table>
48
+ </div>
49
+
50
+ <div class="row">
51
+ <div class="col-sm-12">
52
+ <%= paginate_kuppayam(@services) %>
53
+ </div>
54
+ </div>
@@ -0,0 +1,26 @@
1
+ <tr id="tr_service_<%= service.id %>">
2
+
3
+ <th scope="row" style="text-align: center;">
4
+ <%= serial_number(i) %>
5
+ </th>
6
+
7
+ <td class="display-image">
8
+ <%= display_thumbnail_small(service) %>
9
+ </td>
10
+
11
+ <td class="display-link">
12
+ <%= link_to service.name, service_path(service), remote: true %><br>
13
+ <%= link_to service.category.try(:display_name), service_path(service), remote: true %>
14
+ </td>
15
+
16
+ <td class="hidden-sm hidden-xs"><%= display_publishable_status(service) %></td>
17
+
18
+ <% if display_manage_links? %>
19
+ <td class="action-links hidden-sm hidden-xs" style="width:10%"><%= display_publishable_links(service) %></td>
20
+
21
+ <td class="action-links hidden-sm hidden-xs" style="width:10%">
22
+ <%= display_manage_links(service, @current_user) %>
23
+ </td>
24
+ <% end %>
25
+
26
+ </tr>
@@ -0,0 +1,128 @@
1
+ <div id="div_service_show">
2
+
3
+ <div class="row">
4
+
5
+ <div class="col-md-3 col-sm-12 col-xs-12" style="border-right:1px solid #f1f1f1;">
6
+ <% if display_edit_links? %>
7
+ <%= edit_image(@service,
8
+ "cover_image.image.large.url",
9
+ upload_image_link(@service, :cover_image, nil ),
10
+ remove_image_link(@service, :cover_image, nil ),
11
+ image_options: {assoc_name: :cover_image }) %>
12
+ <% else %>
13
+ <%= display_image(@service, "cover_image.image.large.url", class: "img-inline", alt: @service.display_name) %>
14
+ <% end %>
15
+ </div>
16
+
17
+ <div class="col-md-6 col-sm-12 col-xs-12" style="border-right:1px solid #f1f1f1;">
18
+
19
+ <%= theme_panel_heading(@service.name) %>
20
+
21
+ <%= theme_panel_sub_heading(@service.category.try(:display_name), "#") if @service.category %>
22
+
23
+ <%= clear_tag(10) %>
24
+
25
+ <%= display_publishable_status(@service) %>
26
+
27
+ <%= display_featured(@service) %>
28
+
29
+ <%= clear_tag(20) %>
30
+
31
+ </div>
32
+
33
+ <% if display_manage_links? %>
34
+ <div class="col-md-3 col-sm-12 col-xs-12">
35
+ <%= display_manage_buttons(@service) %>
36
+ <%= display_publishable_buttons(@service) %>
37
+ </div>
38
+ <% end %>
39
+
40
+ </div>
41
+
42
+ <hr>
43
+
44
+ <div class="visible-sm visible-xs mb-50"></div>
45
+
46
+ <%= clear_tag(20) %>
47
+
48
+ <ul class="nav nav-pills">
49
+ <li class="active">
50
+ <a href="#service_details" data-toggle="tab" aria-expanded="false">
51
+ <span class="visible-xs"><i class="fa-database"></i></span>
52
+ <span class="hidden-xs">Service Details</span>
53
+ </a>
54
+ </li>
55
+
56
+ <li class="">
57
+ <a href="#service_images" data-toggle="tab" aria-expanded="false">
58
+ <span class="visible-xs"><i class="fa-database"></i></span>
59
+ <span class="hidden-xs">Images</span>
60
+ </a>
61
+ </li>
62
+
63
+ <li class="">
64
+ <a href="#technical_details" data-toggle="tab" aria-expanded="false">
65
+ <span class="visible-xs"><i class="fa-database"></i></span>
66
+ <span class="hidden-xs">Technical Details</span>
67
+ </a>
68
+ </li>
69
+ </ul>
70
+
71
+ <div class="tab-content">
72
+ <div class="tab-pane active" id="service_details" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
73
+
74
+ <%= clear_tag(20) %>
75
+ <strong>Description</strong>
76
+ <%= raw(@service.description) %>
77
+ <%= clear_tag(20) %>
78
+
79
+ </div>
80
+
81
+ <div class="tab-pane" id="service_images" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
82
+
83
+ <%= clear_tag(20) %>
84
+
85
+ <div id="div_service_images_buttons">
86
+ <div class="row">
87
+ <div class="col-md-6">
88
+ <%= theme_button('Upload a New Image', 'refresh', upload_multiple_image_link(@service, :gallery_images, nil ), classes: "pull-left", btn_type: "white") %>
89
+ </div>
90
+ <div class="col-md-6">
91
+ </div>
92
+ </div>
93
+ </div>
94
+ <%= clear_tag(10) %>
95
+
96
+ <%= render :partial=>"kuppayam/images/multiple_images", locals: { images: @service.gallery_images } %>
97
+
98
+ </div>
99
+
100
+ <div class="tab-pane" id="technical_details" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
101
+
102
+ <%= clear_tag(20) %>
103
+
104
+ <div class="table-responsive">
105
+ <table class="table table-striped table-condensed table-bordered mb-60">
106
+ <tbody>
107
+
108
+ <tr>
109
+ <th>ID</th><td><%= @service.id %></td>
110
+ <th>Status</th><td><%= @service.status %></td>
111
+ </tr>
112
+ <tr>
113
+ <th>Created At</th><td><%= @service.created_at.strftime("%m/%d/%Y - %H:%M:%S") if @service.created_at %></td>
114
+ <th>Updated At</th><td><%= @service.updated_at.strftime("%m/%d/%Y - %H:%M:%S") if @service.updated_at %></td>
115
+ </tr>
116
+
117
+ </tbody>
118
+ </table>
119
+ </div>
120
+
121
+ </div>
122
+ </div>
123
+
124
+ <%= link_to "Close", "#", onclick: "closeLargeModal();", class: "btn btn-primary pull-right" %>
125
+
126
+ <%= clear_tag %>
127
+
128
+ </div>
@@ -0,0 +1,69 @@
1
+ <div class="row">
2
+
3
+ <div class="col-md-12">
4
+
5
+ <div class="tabs-vertical-env">
6
+
7
+ <ul id="div_category_types" class="nav tabs-vertical">
8
+ <% @categories.each do |ct| %>
9
+ <li class="<%= ct == @category ? 'active' : '' %>">
10
+ <%= link_to ct.name, services_path(ct: ct.id) %>
11
+ </li>
12
+ <% end %>
13
+ </ul>
14
+
15
+ <!-- <ul class="nav nav-tabs nav-tabs-justified">
16
+ <%# Dhatu::Service::STATUS.each do |key, value| %>
17
+ <li class="<%#= @status == value ? 'active' : '' %>">
18
+ <%#= link_to dhatu.services_path(st: value), "aria-expanded" => "#{ @status == value ? 'true' : 'false' }" do %>
19
+ <span class="visible-xs"><i class="fa-gift"></i></span>
20
+ <span class="hidden-xs"><%#= key %></span>
21
+ <%# end %>
22
+ </li>
23
+ <%# end %>
24
+ </ul> -->
25
+
26
+ <div class="tab-content">
27
+ <div class="tab-pane active">
28
+
29
+ <div id="div_service_action_buttons">
30
+ <div class="row">
31
+ <div class="col-sm-6">
32
+ <%= theme_button('Add a Service', 'plus', dhatu.new_service_path(), classes: "pull-left mr-10", btn_type: "success") if @current_user.has_create_permission?(Dhatu::Service) %>
33
+
34
+ <%= theme_button('Refresh', 'refresh', dhatu.services_path(st: @status), classes: "pull-left mr-10", btn_type: "white") %>
35
+ </div>
36
+ <div class="col-sm-6">
37
+ <%= search_form_kuppayam(Dhatu::Service, dhatu.services_path(st: @status), text: @filters[:query]) %>
38
+ </div>
39
+ </div>
40
+
41
+ </div>
42
+ <%= clear_tag(10) %>
43
+
44
+ <div id="div_service_index">
45
+ <%= render :partial=>"dhatu/services/index" %>
46
+ </div>
47
+ <%= clear_tag(10) %>
48
+
49
+ </div>
50
+ </div>
51
+
52
+ </div>
53
+
54
+ </div>
55
+
56
+ </div>
57
+
58
+ <script type="text/javascript">
59
+ $('body').on('change', '#inp_name', function() {
60
+ var serviceId = $('#inp_permalink').data("id");
61
+ if(serviceId){
62
+ } else {
63
+ var permalink = convertToSlug($(this).val()).slice(0, 63);
64
+ $('#inp_permalink').val(permalink);
65
+ }
66
+ });
67
+ </script>
68
+
69
+
@@ -12,6 +12,12 @@
12
12
  url: dhatu.blog_posts_url,
13
13
  has_permission: @current_user.has_read_permission?(Dhatu::BlogPost)
14
14
  },
15
+ services: {
16
+ text: "Services",
17
+ icon_class: "fa-glass",
18
+ url: dhatu.services_url,
19
+ has_permission: @current_user.has_read_permission?(Dhatu::Service)
20
+ },
15
21
  branches: {
16
22
  text: "Branches",
17
23
  icon_class: "fa-location-arrow",
@@ -41,6 +47,12 @@
41
47
  icon_class: "fa-group",
42
48
  url: dhatu.team_members_url,
43
49
  has_permission: @current_user.has_read_permission?(Dhatu::TeamMember)
50
+ },
51
+ categories: {
52
+ text: "Categories",
53
+ icon_class: "fa-sitemap",
54
+ url: dhatu.categories_url,
55
+ has_permission: @current_user.has_read_permission?(Dhatu::Category)
44
56
  }
45
57
  }
46
58
  %>
@@ -4,6 +4,14 @@ Dhatu::Engine.routes.draw do
4
4
 
5
5
  scope :admin do
6
6
 
7
+ resources :services do
8
+ member do
9
+ put :update_status, as: :update_status
10
+ put :mark_as_featured
11
+ put :remove_from_featured
12
+ end
13
+ end
14
+
7
15
  resources :branches do
8
16
  member do
9
17
  put :make_main, as: :make_main
@@ -1,3 +1,3 @@
1
1
  module Dhatu
2
- VERSION = '0.1.4'
2
+ VERSION = '0.1.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dhatu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - kpvarma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-03 00:00:00.000000000 Z
11
+ date: 2017-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -107,7 +107,7 @@ dependencies:
107
107
  version: '0.1'
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 0.1.18
110
+ version: 0.1.19
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
@@ -117,7 +117,7 @@ dependencies:
117
117
  version: '0.1'
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 0.1.18
120
+ version: 0.1.19
121
121
  - !ruby/object:Gem::Dependency
122
122
  name: pattana
123
123
  requirement: !ruby/object:Gem::Requirement
@@ -414,6 +414,7 @@ files:
414
414
  - app/controllers/dhatu/offers_controller.rb
415
415
  - app/controllers/dhatu/resource_controller.rb
416
416
  - app/controllers/dhatu/sections_controller.rb
417
+ - app/controllers/dhatu/services_controller.rb
417
418
  - app/controllers/dhatu/team_members_controller.rb
418
419
  - app/controllers/dhatu/testimonials_controller.rb
419
420
  - app/helpers/dhatu/application_helper.rb
@@ -426,6 +427,7 @@ files:
426
427
  - app/models/dhatu/event.rb
427
428
  - app/models/dhatu/offer.rb
428
429
  - app/models/dhatu/section.rb
430
+ - app/models/dhatu/service.rb
429
431
  - app/models/dhatu/team_member.rb
430
432
  - app/models/dhatu/testimonial.rb
431
433
  - app/models/image/category_image.rb
@@ -462,6 +464,11 @@ files:
462
464
  - app/views/dhatu/sections/_row.html.erb
463
465
  - app/views/dhatu/sections/_show.html.erb
464
466
  - app/views/dhatu/sections/index.html.erb
467
+ - app/views/dhatu/services/_form.html.erb
468
+ - app/views/dhatu/services/_index.html.erb
469
+ - app/views/dhatu/services/_row.html.erb
470
+ - app/views/dhatu/services/_show.html.erb
471
+ - app/views/dhatu/services/index.html.erb
465
472
  - app/views/dhatu/team_members/_form.html.erb
466
473
  - app/views/dhatu/team_members/_index.html.erb
467
474
  - app/views/dhatu/team_members/_row.html.erb