<?php

class HomeController extends BaseController {
	/*
	  |--------------------------------------------------------------------------
	  | Default Home Controller
	  |--------------------------------------------------------------------------
	  |
	  | You may wish to use controllers instead of, or in addition to, Closure
	  | based routes. That's great! Here is an example controller method to
	  | get you started. To route to this controller, just add the route:
	  |
	  |	Route::get('/', 'HomeController@showWelcome');
	  |
	 */

	public function __construct() {
		//Check CSRF token on POST
		$this->beforeFilter('auth');

		parent::__construct();
	}

	public function index() {
		$user			 = Auth::user();
		$dateWhere = 'DATE(created_at)=DATE(NOW())';

		if ($user->hasRole(Role::ROLE_CALL_CHECKER) && !$user->isAdmin()) {
			return Redirect::to('/checkcalls');
		}
		if ($user->hasAnyRole(array(Role::ROLE_LOGISTICS, Role::ROLE_CRM)) && !$user->isAdmin()) {
			return Redirect::to('/crm');
		}
		if ($user->hasRole(Role::ROLE_CRM_STAT)) {
			return Redirect::to('/stat/crm');
		}

		$date	 = Input::get('date');
		$today = true;
		if ($date) {
			$validator = Validator::make(
											Input::all(), array('date' => 'date_format:Y-m-d')
			);
			if ($validator->fails()) {
				return Redirect::action('HomeController@index');
			}

			$dateWhere = 'DATE(created_at)=\'' . $date . '\'';
			$today		 = false;
		}
		else {
			$date = date("Y-m-d");
		}

		for ($i = 0; $i < 3; $i++) {
			$res		 = DB::select('
				SELECT
					DATE(DATE_SUB(NOW(), INTERVAL ? DAY)) as date,
					SUM((CASE WHEN (l.deleted_at IS NULL) THEN 1 ELSE 0 END)) as cntIsNew,
					SUM((CASE WHEN (l.isbad != 1 AND l.deleted_at IS NOT NULL) THEN 1 ELSE 0 END)) as cntIsOk,
					COALESCE(COUNT(*), 0) as cntAll
				FROM leads l
				LEFT JOIN users_projects up ON up.project_id=l.project_id
				WHERE up.user_id=? AND DATE(l.created_at)=DATE(DATE_SUB(NOW(), INTERVAL ? DAY))
			', array($i, $user->id, $i));
			$stat [] = $res[0];
		}

		return View::make('home')
										->with('projects', $user->projects)
										->with('dateWhere', $dateWhere)
										->with('stat', $stat)
										->with('today', $today)
										->with('date', $date);
	}

	public function showStartWorkDay() {
		$user = Auth::user();

		$attemptUser = User::find($user->id);
		if ($attemptUser->use_sms_password && $attemptUser->sms_password_changed) {
			$attemptUser->sms_password_changed = 0;
			$attemptUser->save();
			return Redirect::to('logout');
		}

		$refrence				 = null;
		$lastDatePayroll = null;
		$timesheetday		 = null;
		if ($user->payroll) {
			$workDate = date("Y-m-d", time() - 3600 * 24);
			if (!$user->last_work_date) {
				$refrence = Refrence::whereSenderUserId($user->id)
								->whereUseful(1)
								->whereRaw(DB::raw('DATE(created_at)!=DATE(NOW())'))
								->orderBy('id', 'DESC')
								->first(array(DB::raw('DATE(created_at) as date')));
				if ($refrence) {
					$workDate = $refrence->date;
				}
			}
			elseif (Refrence::whereSenderUserId($user->id)->whereRaw(DB::raw('DATE(created_at)=DATE(?)'), array($user->last_work_date))->count()) {
				$workDate	 = $user->last_work_date;
				$refrence	 = Refrence::whereSenderUserId($user->id)
								->whereUseful(1)
								->whereRaw(DB::raw('DATE(created_at)=DATE(?)'), array($user->last_work_date))
								->orderBy('id', 'DESC')
								->first(array(DB::raw('DATE(created_at) as date')));
			}
			$lastDatePayroll									 = array();
			$lastDatePayroll['sum']						 = 0;
			$date															 = explode("-", $workDate);
			$date[2]													 = (int) $date[2];
			$lastDatePayroll['dateToShow']		 = "{$date[2]} {$this->months[$date[1]]}";
			$lastDatePayroll['date']					 = $workDate;
			$lastTimesheetday									 = Timesheetday::whereUserId($user->id)->orderBy('date', 'DESC')->first();
			$lastDatePayroll['pay_salary_day'] = 0;
			if ($lastTimesheetday && $lastTimesheetday->pay_salary_day) {
				$lastDatePayroll['pay_salary_day'] = $lastTimesheetday->pay_salary_day;
				$lastDatePayroll['sum'] += $lastDatePayroll['pay_salary_day'];
			}
			elseif ($lastTimesheetday && $user->pay_salary_day) {
				$lastDatePayroll['pay_salary_day'] = $user->pay_salary_day;
				$lastDatePayroll['sum'] += $lastDatePayroll['pay_salary_day'];
				$lastTimesheetday->pay_salary_day	 = $lastDatePayroll['pay_salary_day'];
			}
			$lastDatePayroll['late_fee'] = 0;
			if ($lastTimesheetday && $lastTimesheetday->late_fee) {
				$lastDatePayroll['late_fee']			 = $lastTimesheetday->late_fee;
				$lastDatePayroll['work_start_at']	 = $lastTimesheetday->work_start_at;
				$lastDatePayroll['sum'] -= $lastDatePayroll['late_fee'];
			}
			$lastDatePayroll['pay_percent_all'] = 0;
			if ($lastTimesheetday && $user->pay_percent_all) {
				$lastDatePayroll['pay_percent_all']	 = round(Partner::whereUserId($user->id)->checkStatus(array('statusType' => 'agreed'))->whereRaw(DB::raw('DATE(datetime_of_agree)=DATE(?)'), array($workDate))->sum('cartprice') * $user->pay_percent_all / 100, 2);
				$lastDatePayroll['sum'] += $lastDatePayroll['pay_percent_all'];
				$lastTimesheetday->pay_percent_all	 = $lastDatePayroll['pay_percent_all'];
			}
			$lastDatePayroll['pay_percent_margin'] = 0;
			if ($lastTimesheetday && $user->pay_percent_margin) {
				$lastDatePayroll['pay_percent_margin'] = round(Partner::whereUserId($user->id)->checkStatus(array('statusType' => 'agreed'))->whereRaw(DB::raw('DATE(datetime_of_agree)=DATE(?)'), array($workDate))->pluck(DB::raw("SUM(cartprice) - SUM(purchaseprice)")) * $user->pay_percent_margin / 100, 2);
				$lastDatePayroll['sum'] += $lastDatePayroll['pay_percent_margin'];
				$lastTimesheetday->pay_percent_margin	 = $lastDatePayroll['pay_percent_margin'];
			}
			if ($lastTimesheetday && $user->pay_percent_margin_all) {
				$lastDatePayroll['pay_percent_margin'] += round(Partner::checkStatus(array('statusType' => 'agreed'))->whereRaw(DB::raw('DATE(datetime_of_agree)=DATE(?)'), array($workDate))->pluck(DB::raw("SUM(cartprice) - SUM(purchaseprice)")) * $user->pay_percent_margin_all / 100, 2);
				$lastDatePayroll['sum'] += $lastDatePayroll['pay_percent_margin'];
				$lastTimesheetday->pay_percent_margin += $lastDatePayroll['pay_percent_margin'];
			}
			if ($lastTimesheetday) {
				$lastTimesheetday->save();
			}

			//обновляем зарплатную информацию по сегодняшнему дню
			$timesheetday = Timesheetday::whereDate(date('Y-m-d'))->whereUserId($user->id)->first();
			if (!$timesheetday) {
				$timesheetday									 = Timesheetday::create(array('date' => date('Y-m-d')));
				$timesheetday->user()->associate($user);
				$timesheetday->save();
				$timesheetday									 = Timesheetday::whereDate(date('Y-m-d'))->whereUserId($user->id)->first();
				//прописываем оклад за выход
				$timesheetday->pay_salary_day	 = $user->pay_salary_day;

				//время начала рабочего дня
				$startTime = '09:00:00';
				if (date('w') == 0 || date('w') == 6) {
					if ($user->work_day_start_at_weekend) {
						$startTime = $user->work_day_start_at_weekend;
					}
				}
				else {
					if ($user->work_day_start_at) {
						$startTime = $user->work_day_start_at;
					}
				}
				$time					 = date('H:i:s');
				list($hours, $mins, $secs) = explode(':', $startTime); //преобразовываем время начала работы в секунды
				$startSeconds	 = ($hours * 3600 ) + ($mins * 60 ) + $secs;
				list($hours, $mins, $secs) = explode(':', $time); //преобразовываем время начала работы в секунды
				$seconds			 = ($hours * 3600 ) + ($mins * 60 ) + $secs;

				if ($seconds > $startSeconds) {
					Event::fire('user.fine', array($user, Fine::FINE_LATE));
					$timesheetday->late_fee = $user->late_fee;

//					$smsc = new SMSCService();
//					$smsc->sendSMS('79063959102, 79033243597', "{$user->first_name} {$user->last_name} - опоздание, {$time}");
				}
				else {
					$timesheetday->late_fee = 0;
				}
				$timesheetday->work_start_at = $time;
				$timesheetday->save();
			}
		}

		return View::make('startworkday')
										->with('user', $user)
										->with('lastDatePayroll', $lastDatePayroll)
										->with('timesheetday', $timesheetday);
	}

	//начало рабочего дня
	public function startWorkDay() {
		if (Input::has('date')) {
			$user = Auth::user();
			//обновляем последий рабочий день у юзера
			$user->update(array('last_work_date' => date('Y-m-d')));
		}

		$response = array(
				'status' => 'success'
		);

		return Response::json($response);
	}

}
