/
user.js.coffee
59 lines (45 loc) · 1.46 KB
/
user.js.coffee
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
class User extends Backbone.Model
weekInterval: 15
initialize: (userdata) ->
@fromDate = new Time().advanceWeeks(-1).beginningOfWeek()
@toDate = @fromDate.clone().advanceWeeks @weekInterval
@projects = new ProjectList @get( "projects" ),
parent: @
$( document.body ).bind 'work_week:value:updated', =>
@view.renderWeekHourCounter()
urlRoot: "/users"
dateChanged: (event) ->
event.preventDefault()
interval = if $(event.currentTarget).data().changePage == 'next' then @weekInterval else -@weekInterval
@fromDate.advanceWeeks interval
@toDate.advanceWeeks interval
@view.renderAllProjects()
dateRangeMeta: ->
fromDate: @fromDate
toDate: @toDate
dates: @getYearsAndWeeks()
getYearsAndWeeks: ->
# XXX Needs cacheing or memoization badly
yearsAndWeeks = []
from = @fromDate.clone()
to = @toDate.clone()
while from.isBefore to
yearsAndWeeks.push
year: from.year()
cweek: from.week()
month: from.month()
mweek: from.week()
mday: from.day()
weekHasPassed: from.isBefore new Date
from = from.advanceWeeks(1)
yearsAndWeeks
projectsByClient: ->
_.reduce @projects.models, (projectsByClient, project) ->
clientId = project.getClientId()
projectsByClient[ clientId ] ||= []
projectsByClient[ clientId ].push project
projectsByClient
, {}
url: ->
"/users/#{@id}"
window.User = User