UNPKG

gaf-mobile

Version:

GAF mobile Web site

145 lines (120 loc) 4.41 kB
'use strict'; angular.module('gafMobileApp') .controller('MyProjectsCtrl', function($scope, $route, $location, $anchorScroll, Projects, Bids, Pager, CookieStore, MilestoneRequests, LOOKING_FOR_COOKIE) { var _this = this; _this.loading = true; // Show users lookingFor val by default var lookingFor = CookieStore.get(LOOKING_FOR_COOKIE); var defaultVal = lookingFor === 'Worker' ? 'freelancer' : 'employer'; var selectTab = $location.hash(); $scope.tab = { name: selectTab ? selectTab : defaultVal }; // Change tab and update the location. _this.changeTab = function(tab) { if ($scope.tab.name !== tab) { $scope.tab.name = tab; $location.hash(tab); // We use replace() here to update the current history record // instead of creating a new one. $location.replace(); } else { // To go the top of the current view $anchorScroll(); } }; var pageSize = 3; _this.selectedBids = {}; _this.users = {}; _this.projects = { employer: { open: [], work_in_progress: [], complete: [], }, freelancer: { active: [], in_progress: [], complete: [] } }; _this.hasMoreProjects = angular.copy(_this.projects); // Pager for employer projects var loadEmployerProjects = Pager(Projects.getUserProjectsByStatus .bind(Projects), pageSize, 1, 0); // Pager for freelancer projects var loadFreelancerProjects = Pager(Bids.getBidderProjectsByStatus .bind(Bids), pageSize, 1, 0); _this.shouldShowCreateMilestoneButton = {}; var checkProjectMilestones = function(projects) { angular.forEach(projects.getProjects(), function(project) { MilestoneRequests.getMilestoneRequestsForProject(project.get().id) .then(function(requests) { if (requests.get().length === 0) { _this.shouldShowCreateMilestoneButton[project.get().id] = true; } }); }); }; _this.shouldShowAwardBidButton = function(project) { return project.bid_stats.bid_count > 0 && (project.status === 'active' || (project.status === 'frozen' && project.sub_status !== 'frozen_awarded')); }; // Load projects according project status for either freelancer/employer _this.loadProjects = function(status, user) { var params = { user_details: true, user_avatar: true }; var loader; if (user === 'freelancer') { loader = loadFreelancerProjects; } else { loader = loadEmployerProjects; params.selected_bids = true; } // Reset offset for current array according to its length loader.setOffset( _this.projects[user][status].length / pageSize); return loader.nextPage(status, params) .then(function(projects) { _this.loading = false; // Check if status is open or work in progress and user is // employer, then load milestones if (status === 'work_in_progress') { checkProjectMilestones(projects); } // Check for more projects _this.hasMoreProjects[user][status] = loader.hasNext(); _this.projects[user][status] = _this.projects[user][status] .concat(projects.getProjects()); // Load users _this.users = angular.extend(_this.users, projects.getUsers().getMap()); // Load selected bids _this.selectedBids = angular.extend(_this.selectedBids, projects.getSelectedBidsList()); }); }; _this.getDeadline = function(project) { var seconds; if(_this.selectedBids[project.get().id]) { seconds = _this.selectedBids[project.get().id][0].time_submitted + _this.selectedBids[project.get().id][0].period * 24 * 3600; if(seconds < (Date.now() / 1000)) { return { secondsLeft: seconds }; } else { return { secondsMore: seconds }; } } }; // Load stuff for both views _this.loadProjects('open', 'employer'); _this.loadProjects('work_in_progress', 'employer'); _this.loadProjects('complete', 'employer'); _this.loadProjects('active', 'freelancer'); _this.loadProjects('in_progress', 'freelancer'); _this.loadProjects('complete', 'freelancer'); });