1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
class CalendarsController < ChouetteController
include PolicyChecker
include TimeTablesHelper
defaults resource_class: Calendar
before_action :ransack_contains_date, only: [:index]
respond_to :html
respond_to :json, only: :show
respond_to :js, only: :index
belongs_to :workgroup
belongs_to :workgroup
belongs_to :workgroup
def index
index! do
@calendars = decorate_calendars(@calendars)
end
end
def show
show! do
@year = params[:year] ? params[:year].to_i : Date.today.cwyear
@calendar = @calendar.decorate(context: {
workgroup: workgroup
})
end
end
def month
@date = params['date'] ? Date.parse(params['date']) : Date.today
@calendar = resource
end
def create
create! do
if @calendar.valid? && has_feature?('application_days_on_calendars')
redirect_to([:edit, @calendar])
return
end
end
end
def update
if params[:calendar]
super
else
state = JSON.parse request.raw_post
resource.state_update state
respond_to do |format|
format.json { render json: state, status: state['errors'] ? :unprocessable_entity : :ok }
end
end
end
private
def decorate_calendars(calendars)
CalendarDecorator.decorate(
calendars,
context: {
workgroup: workgroup
}
)
end
def calendar_params
permitted_params = [:id, :name, :short_name, :shared, periods_attributes: [:id, :begin, :end, :_destroy], date_values_attributes: [:id, :value, :_destroy]]
permitted_params << :shared if policy(Calendar).share?
params.require(:calendar).permit(*permitted_params)
end
def sort_column
Calendar.column_names.include?(params[:sort]) ? params[:sort] : 'short_name'
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc'
end
protected
alias_method :workgroup, :parent
helper_method :workgroup
def resource
@calendar ||= workgroup.calendars.where('(organisation_id = ? OR shared = ?)', current_organisation.id, true).find_by_id(params[:id])
end
def build_resource
super.tap do |calendar|
calendar.workgroup = workgroup
calendar.organisation = current_organisation
end
end
def collection
@calendars ||= begin
scope = workgroup.calendars.where('(organisation_id = ? OR shared = ?)', current_organisation.id, true)
scope = shared_scope(scope)
@q = scope.ransack(params[:q])
calendars = @q.result
calendars = calendars.order(sort_column + ' ' + sort_direction) if sort_column && sort_direction
calendars = calendars.paginate(page: params[:page])
end
end
def ransack_contains_date
date =[]
if params[:q] && !params[:q]['contains_date(1i)'].empty?
['contains_date(1i)', 'contains_date(2i)', 'contains_date(3i)'].each do |key|
date << params[:q][key].to_i
params[:q].delete(key)
end
params[:q]['contains_date'] = Date.new(*date) rescue nil
end
end
def shared_scope scope
return scope unless params[:q]
if params[:q][:shared_true] == params[:q][:shared_false]
params[:q].delete(:shared_true)
params[:q].delete(:shared_false)
end
scope
end
end
|