Created
March 18, 2015 12:57
-
-
Save normancapule/8fd2a63f5abb217cc7b4 to your computer and use it in GitHub Desktop.
Refactor this!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
angular.module "streams" | |
.controller "ClientTeamCtrl", ['$scope', '$rootScope', 'Worklog', 'Day', 'Project', 'Clients', '$pusher', | |
($scope, $rootScope, Worklog, Day, Project, Clients, $pusher) -> | |
$scope.todayDuration = {h: 0, m: 0} | |
$scope.weekDuration = {h: 0, m: 0, start_date: null, end_date: null} | |
$scope.date = moment() | |
$scope.week = [] | |
$scope.worklogs = [] | |
$scope.timeline = [] | |
$scope.newWorklogs = [] | |
$scope.config = { processing: false, toggleHide: true} | |
$scope.selectedProject = null | |
if $rootScope.currentUser.isClient() | |
pusher = $pusher(pusherClient) | |
channel = pusher.subscribe 'client-channel' | |
channel.bind 'hours', (data) -> | |
worklog = if $scope.selectedProject then data[$scope.selectedProject.id] else null | |
if worklog and _.findIndex($scope.newWorklogs, { 'id': worklog.id}) < 0 | |
$scope.newWorklogs.push worklog | |
$scope.checkNewWorklogs = () -> | |
$scope.resetWorklogs() | |
createWeek() | |
$scope.$watch ( -> | |
Clients.getSelectedProject() | |
), ((newValue, oldValue) -> | |
if newValue | |
$scope.selectedProject = newValue | |
$scope.resetWorklogs() | |
createWeek() | |
), true | |
$scope.$watch ( -> | |
$scope.week | |
), ((newValue, oldValue) -> | |
duration = moment.duration() | |
_.forEach $scope.week, (day) -> | |
duration.add(day.seconds, 'seconds') | |
$scope.weekDuration.h = Math.floor(duration.asHours()) | |
$scope.weekDuration.m = duration.minutes() | |
), true | |
$scope.resetWorklogs = () -> | |
if $scope.selectedProject | |
$scope.newWorklogs = [] | |
$scope.config.processing = true | |
Project.worklogs ( | |
project_id: $scope.selectedProject.slug | |
start_date: moment($scope.date.toDate()).startOf('day').format() | |
end_date: moment($scope.date.toDate()).endOf('day').format() | |
), | |
(data) -> | |
$scope.config.processing = false | |
formatscope(data.worklogs) | |
resetTimeline() | |
getDayDuration(data.seconds) | |
checkIfInitializeWeek() | |
formatscope = (data) -> | |
while $scope.worklogs.length > 0 | |
$scope.worklogs.pop() | |
_.forEach data, (worklog) -> | |
unless _.find($scope.worklogs, { 'id': worklog.id}) | |
worklog = new Worklog(worklog) | |
worklog.setMockStart() | |
worklog.setStartedFormatted() | |
$scope.worklogs.push(worklog) | |
resetTimeline = () -> | |
while $scope.timeline.length > 0 | |
$scope.timeline.pop() | |
grouped = _.groupBy($scope.worklogs, 'cluster_id') | |
_.forEach grouped, (group) -> | |
latestGroupLog = _.last(_.sortByAll(group, ['status', 'started_at'])) | |
$scope.timeline.push latestGroupLog | |
checkIfInitializeWeek = () -> | |
if $scope.week[0] | |
selectedDate = moment($scope.date.toDate()).startOf('isoWeek') | |
weekStart = moment($scope.week[0].date.toDate()).startOf('isoWeek') | |
createWeek() if selectedDate.isoWeek() != weekStart.isoWeek() | |
else | |
createWeek() | |
getDayDuration = (seconds) -> | |
duration = moment.duration(seconds, 'seconds') | |
$scope.todayDuration.h = Math.floor(duration.asHours()) | |
$scope.todayDuration.m = duration.minutes() | |
dayIndex = _.findIndex($scope.week, { 'format': $scope.date.format("YYYY-MM-DD")}) | |
if dayIndex >= 0 | |
$scope.week[dayIndex] = new Day(duration, $scope.week[dayIndex].date) | |
createWeek = () -> | |
current = moment($scope.date.toDate()).startOf('isoWeek') | |
end = moment($scope.date.toDate()).endOf('isoWeek') | |
i = 0 | |
while current.isoWeek() == end.isoWeek() | |
$scope.week[i] = { date: moment(current.toDate()), h: 0, m: 0} | |
current = current.add(1, 'day') | |
i+=1 | |
$scope.week.forEach (day, i) -> | |
Project.worklogs ( | |
project_id: $scope.selectedProject.slug | |
start_date: day.date.startOf('day').format() | |
end_date: day.date.endOf('day').format() | |
), | |
(data) -> | |
duration = moment.duration(data.seconds, 'seconds') | |
$scope.week[i] = new Day(duration, day.date) | |
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
angular.module "streams" | |
.controller "HoursCtrl", ['$scope', '$rootScope', 'User', 'Worklog', 'Event', 'Day', | |
($scope, $rootScope, User, Worklog, Event, Day) -> | |
init = () -> | |
$scope.todayDuration = {h: 0, m: 0} | |
$scope.weekDuration = {h: 0, m: 0, start_date: null, end_date: null} | |
$scope.date = moment() | |
$scope.eventSources = [] | |
$scope.state = 'add' | |
$scope.worklogs = [] | |
$scope.timeline = [] | |
$scope.week = [] | |
$scope.config = { processing: true} | |
checkIfInitializeWeek() | |
User.getProjects { id: $rootScope.currentUser.slug }, | |
(data) -> | |
$scope.projects = _.reject(data, { status: 'Archived' }) | |
$scope.newWorklog = '#' | |
if $rootScope.currentUser.favorite_id | |
$scope.favoriteProject = _.find($scope.projects, { id: $rootScope.currentUser.favorite_id}) | |
$scope.newWorklog = '#' + $scope.favoriteProject.slug | |
$scope.$watch ( -> | |
$scope.week | |
), ((newValue, oldValue) -> | |
duration = moment.duration() | |
_.forEach $scope.week, (day) -> | |
duration.add(day.seconds, 'seconds') | |
$scope.weekDuration.h = Math.floor(duration.asHours()) | |
$scope.weekDuration.m = duration.minutes() | |
), true | |
$scope.resetWorklogs = () -> | |
$scope.config.processing = true | |
Worklog.query ( | |
user_id: $rootScope.currentUser.slug | |
start_date: moment($scope.date.toDate()).startOf('day').format() | |
end_date: moment($scope.date.toDate()).endOf('day').format() | |
), | |
(data) -> | |
$scope.config.processing = false | |
formatscope(data.worklogs) | |
resetTimeline() | |
getDayDuration(data.seconds) | |
checkIfInitializeWeek() | |
createWeek = () -> | |
$scope.week = [] | |
current = moment($scope.date.toDate()).startOf('isoWeek') | |
end = moment($scope.date.toDate()).endOf('isoWeek') | |
while current.isoWeek() == end.isoWeek() | |
$scope.week.push { date: moment(current.toDate()), h: 0, m: 0} | |
current = current.add(1, 'day') | |
$scope.week.forEach (day, i) -> | |
Worklog.query ( | |
user_id: $rootScope.currentUser.slug | |
start_date: day.date.startOf('day').format() | |
end_date: day.date.endOf('day').format() | |
), | |
(data) -> | |
duration = moment.duration(data.seconds, 'seconds') | |
$scope.week[i] = new Day(duration, day.date) | |
formatscope = (data) -> | |
while $scope.worklogs.length > 0 | |
$scope.worklogs.pop() | |
_.forEach data, (worklog) -> | |
unless _.find($scope.worklogs, { 'id': worklog.id}) | |
worklog = new Worklog(worklog) | |
worklog.setMockStart() | |
worklog.setStartedFormatted() | |
$scope.worklogs.push(worklog) | |
createEventSource() | |
resetTimeline = () -> | |
while $scope.timeline.length > 0 | |
$scope.timeline.pop() | |
worklogs = _.reject($scope.worklogs, { status: 'Working'}) | |
grouped = _.groupBy(worklogs, 'cluster_id') | |
_.forEach grouped, (group) -> | |
latestGroupLog = _.last(_.sortByAll(group, ['status', 'started_at'])) | |
$scope.timeline.push latestGroupLog | |
checkIfInitializeWeek = () -> | |
if $scope.week[0] | |
selectedDate = moment($scope.date.toDate()).startOf('isoWeek') | |
weekStart = moment($scope.week[0].date.toDate()).startOf('isoWeek') | |
createWeek() if selectedDate.isoWeek() != weekStart.isoWeek() | |
else | |
createWeek() | |
getDayDuration = (seconds) -> | |
duration = moment.duration(seconds, 'seconds') | |
$scope.todayDuration.h = Math.floor(duration.asHours()) | |
$scope.todayDuration.m = duration.minutes() | |
dayIndex = _.findIndex($scope.week, { 'format': $scope.date.format("YYYY-MM-DD")}) | |
if dayIndex >= 0 | |
$scope.week[dayIndex] = new Day(duration, $scope.week[dayIndex].date) | |
createEventSource = () -> | |
while $scope.eventSources.length > 0 | |
$scope.eventSources.pop() | |
events = _.reject $scope.worklogs, (worklog) -> | |
worklog.status == 'working' && moment(worklog.started_at).startOf('day').format() != $scope.date.startOf('day').format() | |
_.forEach events, (worklog) -> | |
$scope.eventSources.push new Event(worklog, $scope.date) | |
getGaps() if $rootScope.currentUser.isProfessional() | |
getGaps = () -> | |
startOfDay = moment($scope.date.toDate()).startOf('day') | |
endOfDay = moment($scope.date.toDate()).endOf('day') | |
gap = {type: 'addhours'} | |
if $scope.eventSources.length > 0 | |
events = _.sortBy($scope.eventSources, 'end') | |
_.forEach events, (event, i) -> | |
gap.start = event.end | |
if events[i+1] | |
gap.end = events[i+1].start | |
mins = events[i+1].start.diff(event.end, 'minutes') | |
if mins > 0 then $scope.eventSources.push Event.createGap(gap.start, gap.type, gap.end) | |
lastEvent = _.last(events) | |
if endOfDay.diff(lastEvent.end, 'minutes') > 0 and lastEvent.status == 'done' | |
$scope.eventSources.push Event.createGap(lastEvent.end, gap.type, endOfDay) | |
if events[0].start.diff(startOfDay, 'minutes') > 0 | |
$scope.eventSources.push Event.createGap(startOfDay, gap.type, events[0].start) | |
else | |
$scope.eventSources.push Event.createGap(startOfDay, gap.type, endOfDay) | |
init() | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment