From 74881746ab6f552f0c9551f3e34a6478f4cceca1 Mon Sep 17 00:00:00 2001 From: Bohung Date: Sat, 23 Oct 2021 10:34:18 +0800 Subject: [PATCH] Add default_time_settings feature. --- .../admin/property_hires_controller.rb | 21 ++++- app/models/property_hire_setting.rb | 3 + app/views/admin/property_hires/_form.html.erb | 60 ++++++++++++- .../admin/property_hires/_time_form.html.erb | 4 +- .../admin/property_hires/settings.html.erb | 89 ++++++++++++++++++- config/locales/en.yml | 2 + config/locales/zh_tw.yml | 2 + 7 files changed, 175 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/property_hires_controller.rb b/app/controllers/admin/property_hires_controller.rb index c522754..8b2f6c7 100644 --- a/app/controllers/admin/property_hires_controller.rb +++ b/app/controllers/admin/property_hires_controller.rb @@ -131,8 +131,27 @@ class Admin::PropertyHiresController < OrbitAdminController @settings = PropertyHireSetting.first end if request.request_method == "PATCH" - @settings.update_attributes(settings_params) + @settings.update_attributes(settings_params.except("property_day_settings")) @settings.save + if settings_params["property_day_settings"] + property_day_settings = settings_params["property_day_settings"].values + property_day_settings.each do |setting| + setting["property_id"] = "default_settings" + s = nil + if setting["id"].present? + s = PropertyDaySetting.where(:id=>setting["id"]).first + end + if s + if setting["_destroy"] == "1" + s.destroy + else + s.update_attributes(setting.except("id","_destroy")) + end + else + s = PropertyDaySetting.create(setting.except("id","_destroy")) + end + end + end @saved = true else @saved = false diff --git a/app/models/property_hire_setting.rb b/app/models/property_hire_setting.rb index b1be029..85412c3 100644 --- a/app/models/property_hire_setting.rb +++ b/app/models/property_hire_setting.rb @@ -14,4 +14,7 @@ class PropertyHireSetting after_save do Property.init_class_variables end + def default_time_settings + PropertyDaySetting.where(:property_id=>"default_settings").asc(:key) + end end \ No newline at end of file diff --git a/app/views/admin/property_hires/_form.html.erb b/app/views/admin/property_hires/_form.html.erb index 884795c..c585bbf 100644 --- a/app/views/admin/property_hires/_form.html.erb +++ b/app/views/admin/property_hires/_form.html.erb @@ -60,6 +60,9 @@ .card-header h4 { margin: 0; } + .apply_default_time_settings{ + margin-bottom: 1em; + } <% content_for :page_specific_css do %> <%= stylesheet_link_tag "lib/main-forms" %> @@ -438,6 +441,9 @@
+
+ +
<% if all_day_settings[i.to_s] %> <% all_day_settings[i.to_s].each_with_index do |setting,j| %> @@ -765,9 +771,59 @@ } }) var setting_count = <%=setting_count%>; + var default_time_settings = <%= PropertyHireSetting.first.default_time_settings.map{|s| s.attributes.except("_id","created_at","updated_at")}.to_s.gsub("=>",": ").html_safe rescue "[]" %> + $(".apply_default_time_settings").click(function(){ + var target = $($(this).data("target")); + var key = $(this).data("count"); + var day = $(this).data("day"); + var new_key = $(this).prev().attr('value'); + var old_key = new RegExp("new_key", "g"); + var new_day = day; + var old_day = new RegExp("new_day", "g"); + var new_key = key; + target.empty(); + default_time_settings.forEach(function(setting){ + var old_index = new RegExp("new_index", "g"); + var new_index = setting_count; + setting_count += 1; + <% property_day_setting = f.object.property_day_settings.new(:id=>nil) %> + <%= f.fields_for :property_day_settings,property_day_setting,:child_index => "new_index" do |f| %> + var template_html = "<%= escape_javascript(render(:partial=>"time_form",:locals=>{:f=>f})) %>"; + <%end%> + var tmp = $(template_html.replace(old_index,new_index).replace(old_key,new_key).replace(old_day,new_day)); + Object.keys(setting).forEach(function(k){ + if(tmp.find("[name*='["+k+"]'").length != 0){ + tmp.find("[name*='["+k+"]']").val(setting[k]); + console.log([k,setting[k]]) + } + }); + target.append(tmp); + key += 1; + }) + $(this).data("count",key); + target.find("input[data-format]").each(function(i,input){ + var $input = $(input); + var format = $input.data("format"), + timeOnly = !(format.match(/Y|M|d/)), timeFormat, dateFormat = ""; + if(timeOnly){ + timeFormat = format; + }else{ + dateFormat = format.match(/yy(\/|-|)(mm|)(\/|-|)(dd|)/i)[0]; + timeFormat = $.trim(format.replace(dateFormat,"")); + } + var options = {dateFormat: dateFormat,timeFormat: timeFormat,timeOnly: timeOnly}; + var additionalOptions = $input.data(); + $.extend(options, additionalOptions); + $input.ui_datetimepicker(options); + $input.siblings('.clearDate').click(function(){ + $input.val(''); + $input.trigger('change'); + }); + }) + }) $(".add_weekday_setting").click(function(){ var target = $($(this).data("target")); - var key = $(this).data("key"); + var key = $(this).data("count"); var day = $(this).data("day"); var new_key = $(this).prev().attr('value'); var old_key = new RegExp("new_key", "g"); @@ -775,7 +831,7 @@ var old_day = new RegExp("new_day", "g"); var new_key = key; key += 1; - $(this).data("key",key); + $(this).data("count",key); var old_index = new RegExp("new_index", "g"); var new_index = setting_count; setting_count += 1; diff --git a/app/views/admin/property_hires/_time_form.html.erb b/app/views/admin/property_hires/_time_form.html.erb index d056e36..62d8066 100644 --- a/app/views/admin/property_hires/_time_form.html.erb +++ b/app/views/admin/property_hires/_time_form.html.erb @@ -24,13 +24,13 @@
<%= f.label :start_time, t("property_hire.limit_start_time"), :class => "control-label muted" %>
- <%= f.datetime_picker :start_time, :picker_type => "time", :no_label => true, :new_record => @property.new_record? %> + <%= f.datetime_picker :start_time, :picker_type => "time", :no_label => true, :new_record => (@property.new_record? rescue true) %>
<%= f.label :end_time, t("property_hire.limit_end_time"), :class => "control-label muted" %>
- <%= f.datetime_picker :end_time, :picker_type => "time", :no_label => true, :new_record => @property.new_record? %> + <%= f.datetime_picker :end_time, :picker_type => "time", :no_label => true, :new_record => (@property.new_record? rescue true) %>
<%= f.hidden_field :key, :value => key %> diff --git a/app/views/admin/property_hires/settings.html.erb b/app/views/admin/property_hires/settings.html.erb index 2844468..779b38f 100644 --- a/app/views/admin/property_hires/settings.html.erb +++ b/app/views/admin/property_hires/settings.html.erb @@ -6,6 +6,18 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "lib/module-area" %> <% end %> + <%= form_for @settings , :url => settings_admin_property_hires_path, html: {class: "form-horizontal main-forms"} do |f| %>
<% if @saved %> @@ -54,11 +66,31 @@
- <%= f.label :carousel_image_width, t("announcement.default_carousel_image_width"), :class => "control-label muted" %> + <%= f.label :carousel_image_width, t("property_hire.default_carousel_image_width"), :class => "control-label muted" %>
<%= f.text_field :carousel_image_width %>
+
+ <%= f.label :default_time_settings, t("property_hire.default_time_settings"), :class => "control-label muted" %> + <% default_time_settings = f.object.default_time_settings %> + <% setting_count = 0 %> +
+
+ <% if default_time_settings %> + <% default_time_settings.each_with_index do |setting,j| %> + <%= f.fields_for :property_day_settings do |f| %> + <%= f.fields_for setting_count.to_s, setting do |f| %> + <%= render :partial => "time_form", :locals=>{:key=>j,:day=>0,:f=>f} %> + <% setting_count += 1 %> + <% end %> + <% end %> + <% end %> + <% end %> +
+ <%=t(:add)%> +
+
@@ -67,4 +99,59 @@ <%= f.submit t('submit'), class: 'btn btn-primary' %> + <% end %> \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 69884cb..d8fd97c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -5,6 +5,8 @@ en: restful_actions: fields_display_order: "Fields display order" property_hire: + apply_default_time_settings: Apply default time settings + default_time_settings: Default time settings the_reservation_was_successfully_sent: "The reservation was successfully sent!Please see email to get more information" go_to_infos_page: Go to infos page display_in_reason_for_hire: "Display in reason for hire" diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 98999d0..fdb564b 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -5,6 +5,8 @@ zh_tw: restful_actions: fields_display_order: "欄位顯示順序" property_hire: + apply_default_time_settings: 套用預設時段設定 + default_time_settings: 預設時段設定 the_reservation_was_successfully_sent: "預約成功送出,請查看Email確認預約資訊!" go_to_infos_page: 前往資訊頁面 display_in_reason_for_hire: "顯示於使用用途"