Basic fullcalendar integration

This commit is contained in:
2015-02-19 20:37:58 +01:00
parent c17442ad77
commit adeedb2f1b
34 changed files with 11018 additions and 8 deletions
@@ -1,4 +1,5 @@
@App.modals.BaseController = Ember.ObjectController.extend
needs: ['application']
alert_message: ""
title: (->
# return title if directly set by options
@@ -0,0 +1,21 @@
App.modals.EmployeeEditController = App.modals.BaseController.extend
isNotSelf: (->
@get('model.id') isnt @get('current_employee.id')
).property('model.id')
colors: (->
# taken from http://www.somacon.com/p142.php
[
'#458B74'
'#838B8B'
'#8B7D6B'
'#00008B'
'#8B2323'
'#8A2BE2'
'#458B00'
'#EEAD0E'
]
).property()
actions:
setColor: (color)->
@set 'model.color', color
@@ -0,0 +1,7 @@
App.modals.SelectEmployeeController = App.modals.BaseController.extend
employee: null
employees: (-> @store.all 'employee').property()
actions:
selectEmployee: (employee)->
@set 'employee', employee
@send 'ok'
@@ -0,0 +1,6 @@
App.ScheduleController = Ember.ArrayController.extend
event_changed: (event)->
@store.find('employee-shift', event.id).then (employee_shift)->
employee_shift.set 'start_on', event.start.toDate()
employee_shift.set 'end_on', event.end.toDate()
employee_shift.save()
@@ -0,0 +1,2 @@
Ember.Handlebars.helper 'colorbox', (color, options)->
"<span class='colorbox-container'><span style='background-color:#{color}'></span></span>".htmlSafe()
@@ -0,0 +1,12 @@
attr = DS.attr
App.EmployeeShift = DS.Model.extend
start_on: attr('date')
end_on: attr('date')
employee: DS.belongsTo 'employee'
calendar_event: (->
id: @id
title: @get('employee.name')
start: @get('start_on')
end: @get('end_on')
color: @get('employee.color')
).property('start_on', 'end_on')
@@ -4,6 +4,8 @@ App.Employee= DS.Model.extend Ember.Validations.Mixin,
email: attr 'string'
manager: attr 'boolean', defaultValue: false
active: attr 'boolean', defaultValue: true
color: attr 'string', defaultValue: '#3a87ad'
employee_shifts: DS.hasMany('employee-shift')
validations:
name: {presence: true}
@@ -17,5 +17,6 @@ App.Router.map ->
@route 'orders_display' # chromecast etc
@route 'menu'
@route 'settings'
@route 'schedule'
@route 'empty'
#@resource 'lists', queryParams: ['state']
@@ -1,2 +1,2 @@
App.EmployeesRoute = Ember.Route.extend
model: -> @store.find 'employee'
model: -> @store.all 'employee'
@@ -0,0 +1,2 @@
App.ScheduleRoute = Ember.Route.extend
model: -> @store.find 'employee-shift'
@@ -6,6 +6,9 @@
tr
th.name=t 'attributes.employee.name'
th.email=t 'attributes.employee.email'
th.boolean= t 'attributes.employee.manager'
th.boolean= t 'attributes.employee.active'
th.colorbox= t 'attributes.employee.color'
th.actions=t 'helpers.actions.title'
tbody
each employee in employees
@@ -14,6 +17,9 @@
td.email
= employee.email
= errors employee.errors.email
td.boolean= boolean employee.manager
td.boolean= boolean employee.active
td.colorbox= colorbox employee.color
td.actions
can manage sections
a.table-edit{ action 'editEmployee' employee }: span
@@ -15,6 +15,8 @@ header.top-menu
= t 'models.plural.list'
= link-to "employees" class="top-menu-employees"
= t 'models.plural.employee'
= link-to "schedule" class="top-menu-schedule"
= t 'supplier.top_menu.schedule'
.extra-info{action "showSupplierStatusInfo"}
.supplier-info-row
.counter.supplier-orders-placed-count
@@ -9,6 +9,20 @@ p=t 'employee.modal.body_header'
.form-field
= input type="email" valueBinding="model.email" action="save"
= errors model.errors.email
if isNotSelf
.form-row.active
.form-label= t 'attributes.employee.manager'
.form-field= view "boolean-switch" value=model.manager
.form-row.active
.form-label= t 'attributes.employee.active'
.form-field= view "boolean-switch" value=model.active
.form-row.active
.form-label= t 'attributes.employee.color'
.form-field.full
span.current-color= colorbox model.color
each color in colors
a{action "setColor" color}= colorbox color
hr
button.modal-close{action "close"}=t 'employee.modal.close_button'
button.modal-confirm.right{action "save"} disabled=model.isInvalid
@@ -0,0 +1,7 @@
p Select employee
ul.select-employees
each employee in employees
li.select-employee
= employee.name
a.employee-selector{action "selectEmployee" employee}: span
button.modal-close{action "close"}=t 'employee.select_modal.close_button'
@@ -0,0 +1,2 @@
.row: .small-12.columns
#schedule-placeholder
@@ -0,0 +1,30 @@
App.ScheduleView = Ember.View.extend
classNames: ['schedule-view']
didInsertElement: ->
placeholder = @$('#schedule-placeholder')
controller = @get('controller')
events = controller.get('model').map (employee_shift)->employee_shift.get('calendar_event')
placeholder.fullCalendar
header:
left: 'prev,next,today'
center: 'title'
right: 'month,agendaWeek,agendaDay'
selectable: true
selectHelper: true
select: (start, end)=>
controller.modal 'select_employee',
ok: ->
# this context is SelectEmployeeController
if employee = @get('employee')
shift = controller.store.createRecord 'employee-shift', start_on: start.toDate(), end_on: end.toDate()
shift.set 'employee', employee
shift.save()
placeholder.fullCalendar('renderEvent', shift.get('calendar_event'), true)
editable: true
defaultView: 'agendaWeek'
events: events
timezone: 'UTC'
eventDrop: controller.event_changed.bind(controller)
eventResize: controller.event_changed.bind(controller)