class Admin::PropertyHiresController < OrbitAdminController include Admin::PropertyHiresHelper def index @tags = @module_app.tags @categories = @module_app.categories.enabled @filter_fields = filter_fields(@categories, @tags) @table_fields = ["property_hire.title", :category, "property_hire.location", "property_hire.available_for_hire"] @properties = Property.order_by(sort) .with_categories(filters("category")) .with_tags(filters("tag")) @properties = search_data(@properties,[:title]).page(params[:page]).per(10) if request.xhr? render :partial => "index" end end def fields_display_order uid = params[:id].split("-").last @property = Property.find_by(:uid=>uid) end def update_fields_display_order uid = params[:id].split("-").last @property = Property.find_by(:uid=>uid) prop = params.require(:property).permit! @property.update_attributes(prop) redirect_to params[:referer_url] end def order @properties = Property.all.sort_order end def updateorder ids_with_order = params[:order] ids_with_order.each_with_index do |id,idx| property = Property.find(id) rescue nil if !property.nil? property.order_position = idx property.save end end render :json => {"success" => true}.to_json end def my_bookings @table_fields = ["property_hire.title","property_hire.hiring_person_name", "property_hire.reason_for_hire", "property_hire.hiring_person_number", "property_hire.period", "property_hire.passed", :actions] @bookings = PHire.where(:hiring_person_id => current_user.member_profile.id.to_s).desc(:created_at).page(params[:page]).per(10) end def copy @property = Property.where(:uid => params[:id].split("-").last).first.clone_new #rescue nil create_set (false) @locations = PropertyLocation.all.desc(:created_at).collect{|loc| [loc.title, loc.id.to_s]} @locations << ["Other", "other_location"] end def new @property = Property.new create_set (false) @locations = PropertyLocation.all.desc(:created_at).collect{|loc| [loc.title, loc.id.to_s]} @locations << ["Other", "other_location"] end def edit_hire @phire = PHire.find(params[:id]) end def update_hire @phire = PHire.find(params[:id]) @phire.update_attributes(phire_params) redirect_to admin_property_hire_path(:id=>@phire.property) end def edit @property = Property.where(:uid => params[:id].split("-").last).first rescue nil create_set (true) @locations = PropertyLocation.all.desc(:created_at).collect{|loc| [loc.title, loc.id.to_s]} @locations << ["Other", "other_location"] end def show @table_fields = ["property_hire.hiring_person_name", "property_hire.reason_for_hire", "property_hire.hiring_person_number", "property_hire.period", "property_hire.passed", :actions] @property = Property.where(:uid => params[:id].split("-").last).first rescue nil @bookings = @property.p_hires.desc(:created_at).page(params[:page]).per(10) end def destroy property = Property.find(params[:id]) rescue nil email = property.get_owner_emails Admin::PropertyHiresHelper::HireMethod.send_mail('delete',email,property.id,nil,nil,current_user.id) property.destroy if !property.nil? if params[:page] redirect_to admin_property_hires_path(:page => params[:page]) else redirect_to admin_property_hires_path end end def update property = Property.where(:uid => params[:id].split("-").last).first rescue nil redirect_to admin_property_hires_path and return if property.nil? @property_params = property_params if @property_params[:p_hire_fields] @property_params[:p_hire_fields].each do |a| @field_name = 'property' field_status = a.last[:id].present? @attribute_field = PHireField.add_p_hire_field(property, a.last, a.last[:id], field_status) @attribute = property end if property.need_change_tmp_reason Thread.new do p_hire_field_ids = property.p_hire_fields.where(:display_in_reason_for_hire=>true).pluck(:id) property.p_hires.each do |p_hire| p_hire.tmp_reason_for_hire = p_hire.p_hire_field_values.where(:p_hire_field_id.in=>p_hire_field_ids).map{|v| v.get_value_by_locale(I18n.locale.to_s)}.join(" ") p_hire.save end property.update(:need_change_tmp_reason => false) end end flash.now[:notice] = "Updated Fields" property.p_hire_fields.each{|t| t.destroy if t["to_delete"] == true} else if @property_params["special_unavailable_dates"].nil? @property_params["special_unavailable_dates"] = [] end property.update_attributes(@property_params) email = property.get_owner_emails Admin::PropertyHiresHelper::HireMethod.send_mail('edit',email,property.id,nil,nil,current_user.id) end redirect_to params[:referer_url] end def create tmp_property_params = property_params if tmp_property_params["copy_id"] && tmp_property_params["clone_p_hires"].blank? tmp_property_params["except_clone_relations"] = ["p_hires","p_hire_field_values"] end if Property.create(tmp_property_params) redirect_to admin_property_hires_path end end def show_booking_details @booking = PHire.find(params[:id]) rescue nil end def settings @settings = PropertyHireSetting.first if request.request_method == "PATCH" @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 end end def delete_booking_details booking = PHire.find(params[:id]) property = booking.property booking.destroy if request.referrer.split("/").last == "my_bookings" redirect_to my_bookings_admin_property_hires_path else redirect_to admin_property_hire_path(property) end end def pass_booking phire = PHire.find(params[:id]) rescue nil case params[:status] when "accept" phire.passed = true when "reject" phire.passed = false end phire.save email = [phire.hiring_person_email].select{|e| e.present?} Admin::PropertyHiresHelper::HireMethod.send_mail('p_hire',email,phire.property.id,nil,phire.id,(current_user.id rescue nil)) if params[:ref] == "index" if params[:page] redirect_to admin_property_hire_path(phire.property, :page => params[:page]) else redirect_to admin_property_hire_path(phire.property) end else redirect_to show_booking_details_admin_property_hire_path(phire) end end def manage_locations @table_fields = ["property_hire.location", "property_hire.property_count"] @locations = PropertyLocation.all.desc(:created_at).page(params[:page]).per(10) end def add_location @location = PropertyLocation.new render :layout => false end def create_location PropertyLocation.create(location_params) redirect_to manage_locations_admin_property_hires_path end def edit_location @location = PropertyLocation.find(params[:id]) render :layout => false end def update_location location = PropertyLocation.find(params[:id]) rescue nil if location.nil? redirect_to manage_locations_admin_property_hires_path else location.update_attributes(location_params) if params[:page] redirect_to manage_locations_admin_property_hires_path(:page => params[:page]) else redirect_to manage_locations_admin_property_hires_path end end end def destroy_location location = PropertyLocation.find(params[:id]) rescue nil if location.nil? redirect_to manage_locations_admin_property_hires_path else location.destroy if params[:page] redirect_to manage_locations_admin_property_hires_path(:page => params[:page]) else redirect_to manage_locations_admin_property_hires_path end end end def custom_fields @field_name = 'property' uid = params[:id].split("-").last @attribute = Property.find_by(:uid=>uid) @attribute_type = 'property' @class = 'properties' end private def settings_params params.require(:property_hire_setting).permit! end def location_params params.require(:property_location).permit! end def phire_params p_hire_params = params.require(:p_hire).permit! property = (@phire ? @phire.property : Property.find(params[:p_hire][:property_id]) rescue nil) if(property.enable_notes_selector rescue false) note_texts = "" property.notes_selector.each do |index,sub_hash| name = sub_hash["name"][I18n.locale.to_s] name = sub_hash["name"].values.select{|v| v.present?}.first.to_s if name.blank? values = sub_hash["value"][I18n.locale.to_s] values = sub_hash["value"].values.select{|v| v.present?}.first.to_s if values.blank? value_text = p_hire_params["notes_selector"][index.to_s].to_a.map{|i| values[i.to_i]}.join(",") rescue "" value_text = I18n.t("property_hire.none") if value_text.blank? note_texts += (name + ":"+value_text) note_texts += "
".html_safe end p_hire_params["note_for_hire"] = note_texts p_hire_params.delete("notes_selector") end return p_hire_params end def property_params prop = params.require(:property).permit! if prop[:weekdays].nil? prop[:weekdays] = [] end if prop[:owners].nil? prop[:owners] = [] end prop.delete(:property_location) if prop[:property_location] == "other" notes_selector = prop["notes_selector"] notes_selector = {} if notes_selector.nil? prop["notes_selector"] = (0 ... notes_selector.keys.count).to_a.map{|k| k.to_s}.zip(notes_selector.values).to_h return prop end def create_set (save_flag) @email_set = [] ['p_hire','edit','delete'].each do |field_name| email_set = @property.hire_email_sets.select{|v| v.field_name==field_name} if email_set.length==0 title = Hash.new content = Hash.new I18n.available_locales.each do |locale| I18n.with_locale(locale) do title[locale] = t("property_hire.email_#{field_name}_success") content[locale] = t("property_hire.email_#{field_name}_content") end end if save_flag email_set = @property.hire_email_sets.create(field_name:field_name,title:title,content:content) else email_set = @property.hire_email_sets.new(field_name:field_name,title:title,content:content) end else email_set = email_set[0] end @email_set << email_set end end end