<?php

class PartnerHrController extends PartnerController {

	/**
	 * Constructor
	 */
	public function __construct() {
		parent::__construct();
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_HR_REJECT) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		if (!isset($input['reject_type']) || !$input['reject_type']) {
			if (!isset($input['comment']) || $input['comment'] == '') {
				$message		 = 'Необходимо указать причину отказа';
				$error_field = 'reject_comment';
				$response		 = array(
						'status'				 => 'fail',
						'error_message'	 => $message,
						'error_field'		 => $error_field
				);
				return Response::json($response);
			}
			$partner->reject_id = 0;
		}
		else {
			$reject = Reject::find($input['reject_type']);
			if ($reject == null || !is_numeric($input['reject_type']) || $reject->project_id != $partner->project_id) {
				$response = array(
						'status' => 'fail'
				);
				return Response::json($response);
			}
			$partner->reject_id = $reject->id;
			if (isset($input['comment']) && $input['comment']) {
				$input['comment'] = "{$reject->name}. {$input['comment']}";
			}
			else {
				$input['comment'] = $reject->name;
			}
		}

		$partner->recall = 0;

		$message = "Отказался на предварительном этапе: ";
		if ($partner->status == Partner::STATUS_HR_WAIT_CALL) {
			$message = "Отказался после собеседования: ";
		}
		elseif ($partner->status == Partner::STATUS_HR_TRAINEESHIP_EDU) {
			$message = "Не прошел обучение: ";
		}
		elseif ($partner->status == Partner::STATUS_HR_TRAINEESHIP_WORK) {
			$message = "Не сдал тест: ";
		}
		elseif ($partner->status == Partner::STATUS_HR_EMPLOYED) {
			$message = "Отказался: ";
		}
		$partner->status = Partner::STATUS_REJECT;
		$partner->save();

		$refrence	 = $partner->saveHistory($message . $input['comment']);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_HR_SUCCESS) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner->recall = 0;

		if ($partner->status == Partner::STATUS_HR_INTERVIEW_WAIT) {
			if (!isset($input['interview_name']) || !$input['interview_name']) {
				$message		 = 'Укажите как зовут кандидата';
				$error_field = 'interview_name';

				$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
				return Response::json($response);
			}
			if (!isset($input['interview_phone']) || !$input['interview_phone']) {
				$message		 = 'Укажите телефон';
				$error_field = 'interview_phone';

				$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
				return Response::json($response);
			}

			$partner->name						 = e($input['interview_name']);
			$partner->phone						 = e($this->preparePhone($input['interview_phone']));
			$partner->status					 = Partner::STATUS_HR_INTERVIEW;
			$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 20 MINUTE)');
			$message									 = "Пришел на собеседование.";
			
			$partnerRegistrationInfo = $partner->partnerRegistrationInfo()->first();
			
			if (e($input['interview_document_issue_date'])){
			  $issueDate = explode('.', e($input['interview_document_issue_date']));
				if (checkdate($issueDate[1], $issueDate[0], $issueDate[2])) {
						$date = "$issueDate[2]-$issueDate[1]-$issueDate[0]";
					}
			}else {
				$date = 0;
			}	
			
		  if (!$partnerRegistrationInfo) {
			  $partnerRegistrationInfo = PartnerRegistrationInfo::create(array(
			  'document_number'      => e($input['interview_document_number']),
				'issue_date'           => $date,
				'issue_place'          => e($input['interview_document_issue_place']),
			  'registration_address' => e($input['interview_registration_address'])
			));
			$partnerRegistrationInfo->partner()->associate($partner);
			$partnerRegistrationInfo->save();
			}else {
				$partnerRegistrationInfo->document_number = e($input['interview_document_number']);
				$partnerRegistrationInfo->issue_date = $date;
				$partnerRegistrationInfo->issue_place = e($input['interview_document_issue_place']);
				$partnerRegistrationInfo->registration_address = e($input['interview_registration_address']);
				$partnerRegistrationInfo->save();
			}
		}
		else {
			$message = "Прошел собеседование";
			if ($partner->status == Partner::STATUS_HR_INTERVIEW || $partner->status == Partner::STATUS_HR_TEST) {
				$message						 = "Прошел собеседование, принят на обучение.";
				$partner->hr_comment = e($input['hr_comment']);
				$partner->status		 = Partner::STATUS_HR_TRAINEESHIP_EDU;
			}
			elseif ($partner->status == Partner::STATUS_HR_WAIT_CALL) {
				$message				 = "Перезвонил, принят на обучение.";
				$partner->status = Partner::STATUS_HR_TRAINEESHIP_EDU;
			}
			elseif ($partner->status == Partner::STATUS_HR_TRAINEESHIP_EDU) {
				$message				 = "Прошел обучение.";
				$partner->status = Partner::STATUS_HR_TRAINEESHIP_WORK;
			}
			elseif ($partner->status == Partner::STATUS_HR_TRAINEESHIP_WORK) {
				$message				 = "Сдал тест, приступил к работе.";
				$partner->status = Partner::STATUS_HR_EMPLOYED;
			}
			$partner->datetime_of_agree	 = DB::raw('NOW()');
			$partner->salenextdatetime	 = DB::raw('DATE_ADD(NOW(), INTERVAL 1 HOUR)');
		}
		$partner->save();

		$refrence	 = $partner->saveHistory($message);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_HR_RESERVE) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		if (!isset($input['reserve_name']) || !$input['reserve_name']) {
			$message		 = 'Укажите как зовут кандидата';
			$error_field = 'reserve_name';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}
		if (!isset($input['reserve_phone']) || !$input['reserve_phone']) {
			$message		 = 'Укажите телефон';
			$error_field = 'reserve_phone';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		$message				 = "Отправлен в резерв.";
		$partner->name	 = e($input['reserve_name']);
		$partner->phone	 = e($this->preparePhone($input['reserve_phone']));
		$partner->recall = 0;
		$partner->status = Partner::STATUS_HR_RESERVE;
		$partner->save();

		$partnerRegistrationInfo = $partner->partnerRegistrationInfo()->first();
			
			if (e($input['reserve_document_issue_date'])){
			  $issueDate = explode('.', e($input['reserve_document_issue_date']));
				if (checkdate($issueDate[1], $issueDate[0], $issueDate[2])) {
						$date = "$issueDate[2]-$issueDate[1]-$issueDate[0]";
				}else {
				  $date = 0;
			  }
			}else {
				$date = 0;
			}	
			
		  if (!$partnerRegistrationInfo) {
			  $partnerRegistrationInfo = PartnerRegistrationInfo::create(array(
			  'document_number'      => e($input['reserve_document_number']),
				'issue_date'           => $date,
				'issue_place'          => e($input['reserve_document_issue_place']),
			  'registration_address' => e($input['reserve_registration_address'])
			));
			$partnerRegistrationInfo->partner()->associate($partner);
			$partnerRegistrationInfo->save();
			}else {
				$partnerRegistrationInfo->document_number = e($input['reserve_document_number']);
				$partnerRegistrationInfo->issue_date = $date;
				$partnerRegistrationInfo->issue_place = e($input['reserve_document_issue_place']);
				$partnerRegistrationInfo->registration_address = e($input['reserve_registration_address']);
				$partnerRegistrationInfo->save();
			}
		
		$refrence	 = $partner->saveHistory($message);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_HR_TEST) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$message				 = "Отправлен на рассмотрение.";
		$partner->recall = 0;
		$partner->status = Partner::STATUS_HR_TEST;
		$partner->save();

		$refrence	 = $partner->saveHistory($message);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

}
