property_hire/app/controllers/admin/property_hires_controller.rb

276 lines
9.4 KiB
Ruby

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)
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 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 = Array(MemberProfile.find(property.owners)).collect{|v| v.email} rescue []
email = User.all.select{|v| v.is_admin? && v.user_name != 'rulingcom'}.collect{|v| v.member_profile.email} if email.length == 0
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
property.update_attributes(@property_params)
email = Array(MemberProfile.find(property.owners)).collect{|v| v.email} rescue []
email = User.all.select{|v| v.is_admin? && v.user_name != 'rulingcom'}.collect{|v| v.member_profile.email} if email.length == 0
Admin::PropertyHiresHelper::HireMethod.send_mail('edit',email,property.id,nil,nil,current_user.id)
end
redirect_to params[:referer_url]
end
def create
if Property.create(property_params)
redirect_to admin_property_hires_path
end
end
def show_booking_details
@booking = PHire.find(params[:id]) rescue nil
end
def settings
if PropertyHireSetting.count == 0
@settings = PropertyHireSetting.create
else
@settings = PropertyHireSetting.first
end
if request.request_method == "PATCH"
@settings.update_attributes(settings_params)
@settings.save
@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 = [hire.hiring_person_email].select{|e| e.present?}
Admin::PropertyHiresHelper::HireMethod.send_mail('p_hire',email,phire.property.id,nil,hire.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
params.require(:p_hire).permit!
end
def property_params
prop = params.require(:property).permit!
if prop[:weekdays].nil?
prop[:weekdays] = []
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