<?php

class BudgetSalaryUsersController extends BaseController {

	protected $rules		 = array(
	);
	protected $messages	 = array(
	);
	/**
	 * Constructor
	 */
	public function __construct() {
		// Establish Filters
		$this->beforeFilter('auth');

		if ($this->user && $this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			//$this->beforeFilter('hasRole:' . Role::ROLE_BUDGET);
			$this->beforeFilter('hasRole:' . Role::ROLE_BUDGET_SALARY_MANAGMENT);
			//$this->beforeFilter('hasRole:' . Role::ROLE_BUDGET_ACCOUNTANT);
		}
		
		if (Auth::check()) {
			$this->user	    = Auth::user();
			$this->projects = $this->user->budgetProjects;
		}
		$this->projectPrefix = 'budget';
		parent::__construct();
	}

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function index() {
		$input = Input::all();

		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		if (Input::has('projectId')) {
			Session::put('work_projectId', $input['projectId']);
			return Redirect::to('budget/salary/users');
		}

		$workProject = $this->workProject;
		$salaryUsers = $workProject->salaryUsers()->orderBy('last_name')->get();
		if ($salaryUsers == null) {
			return Redirect::to("budget/");
		}
		return $this->setupLayout('budget.salary.users.index')
						   ->with('input', $input)
						   ->with('salaryUsers', $salaryUsers)
					     ->with('workProject', $workProject);
	}

	/**
	 * Show the form for editing the specified resource.
	 *
	 * @param  int  $id
	 * @return Response
	 */
	public function edit() {
		$input = Input::all();
		
		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		
		if (Input::has('projectId')) {
			Session::put('work_projectId', $input['projectId']);
			return Redirect::to('budget/salary/users/edit');
		}

		$workProject = $this->workProject;
		$users       =  $workProject->getAllowSalaryUsers();
		
		$usersList = $workProject->salaryUsers()->get();
		$salaryUsers = [];
		foreach ($usersList as $user){
			$salaryUsers[] = $user->id;
		}
		
		return $this->setupLayout('budget.salary.users.edit_users')
						    ->with('salaryUsers', $salaryUsers)
						    ->with('users', $users)
						    ->with('workProject', $workProject);
	}
	
	public function editProjects($id) {
		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		
		$editedUser  = User::find($id);
		if ( $editedUser == null || !is_numeric($id) ) {
			return \App::abort(404);
		}
		
		$projects = $editedUser->allBudgetProjects();
		
		$projectsList = $editedUser->salaryProjects()->get();
		$salaryProjects = [];
		foreach ($projectsList as $project){
			$salaryProjects[] = $project->id;
		}
		
		return $this->setupLayout('budget.salary.users.edit_projects')
						    ->with('salaryProjects', $salaryProjects)
						    ->with('editedUser', $editedUser)
						    ->with('projects', $projects);
	}

	/**
	 * Update the specified resource in storage.
	 *
	 * @param  int  $id
	 * @return Response
	 */
	public function update() {
		$input = Input::all();
		
		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}

		$project = Project::find($input['id']);
		if ( $project == null || !is_numeric($input['id']) ) {
			return \App::abort(404);
		}

		if (isset($input['salaryUsers'])) {
			$project->salaryUsers()->sync(array_keys($input['salaryUsers']));
		}
		else {
			$project->salaryUsers()->detach();
		}

		return Redirect::to('budget/salary/users');
	}
	
	public function updateProjects() {
		$input = Input::all();

		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		
		$user = User::find($input['id']);
		if ( $user == null || !is_numeric($input['id']) ) {
			return \App::abort(404);
		}

		if (isset($input['salaryProjects'])) {
			$user->salaryProjects()->sync(array_keys($input['salaryProjects']));
		}
		else {
			$user->salaryProjects()->detach();
		}

		return Redirect::to('budget/salary/users/all');
	}

	public function all() {
		$input = Input::all();

		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		/*if (Input::has('projectId')) {
			Session::put('work_projectId', $input['projectId']);
			return Redirect::to('budget/salary/users');
		}*/

		$workProject = $this->workProject;
		$salaryUsers = $workProject->getAllowSalaryUsers();
		if ($salaryUsers == null) {
			return Redirect::to("budget/");
		}
		return $this->setupLayout('budget.salary.users.all')
						   ->with('input', $input)
						   ->with('salaryUsers', $salaryUsers);
	}

	public function registrationIndex() {
		$input = Input::all();

		if ($this->user->projects->first() == null || !$this->user->hasRole(Role::ROLE_BUDGET_SALARY_MANAGMENT)) {
			return Redirect::to("budget/");
		}
		if (Input::has('projectId')) {
			Session::put('work_projectId', $input['projectId']);
			return Redirect::to('budget/salary/registration/index');
		}

		$workProject = $this->workProject;
		
		return $this->setupLayout('budget.salary.registration.index')
						   ->with('input', $input)
						   ->with('user', $this->user)
					     ->with('workProject', $workProject);
	}
}
