<?php 
$I = new AcceptanceTester($scenario);

function bloqueioFuncionario($I, &$funcionario){
	$I->amOnPage(Url::create("funcionarios/view&id={$funcionario->FUN_IDFUNCIONARIO}"));
	if($funcionario->FUN_SITUACAO == "A"){
		$I->see("Bloqueio");
		$I->click("Bloqueio");
		$I->seeInCurrentUrl(Url::create("funcionarios/bloqueio&id={$funcionario->FUN_IDFUNCIONARIO}"));

		$I->checkOption(".acao-bloqueio");
		$bloqueado = FuncionariosBloqueio::model()->verificaBloqueio($funcionario->FUN_IDFUNCIONARIO);
		if(!$bloqueado){
			$I->seeElement('#acoes');
			$I->click("#submit_button");
			$I->seeElement('.alert-error');

			$I->fillField('FuncionariosBloqueio[FUQ_MENSAGEM]','teste automatizado');

			$datafim = $I->grabValueFrom("#FuncionariosBloqueio_DATAFIM");
			$horafim = $I->grabValueFrom("#FuncionariosBloqueio_HORAFIM");
			$bloqueado_ate = "$datafim $horafim";
		}
		else{
			$bloqueado_ate = false;
		}

		$I->click("#submit_button");

		$I->seeElement('.alert-success');

		$funcionario = Funcionarios::model()->findByPk($funcionario->FUN_IDFUNCIONARIO);

		$bloqueado = FuncionariosBloqueio::model()->verificaBloqueio($funcionario->FUN_IDFUNCIONARIO);
		if($bloqueado){
			$nova_situacao = "Bloqueado";
		}
		else{
			$nova_situacao = "Não-bloqueado";
		}

		$usuario_atualizado = $I->haveFriend("Usuário {$nova_situacao}");
		$usuario_atualizado->does(function(AcceptanceTester $I) use ($funcionario, $nova_situacao, $bloqueado_ate)  {
			Auth::loginById($I, $funcionario->FUN_IDFUNCIONARIO);
			if($nova_situacao == "Bloqueado"){
				$I->see("Oops! Usuário bloqueado");
				$I->see("O seu usuário estará bloqueado até {$bloqueado_ate}");
			}
			else{
				$I->dontSee("Oops! Usuário bloqueado");
			}
			Auth::logout($I);
		});
		$usuario_atualizado->leave();
	}
	else{
		$I->dontSee("Bloqueio");
	}
}

$I->wantTo('Bloquear/Desbloquear funcionário');

$usuario = ModelFind::getRand("Funcionarios", "FUN_SITUACAO = 'A' AND FUN_TBL_FUNCIONARIOS = 1 AND not exists (select * from funcionarios_bloqueio t2 where t2.FUQ_FUNCIONARIO = FUN_IDFUNCIONARIO AND t2.FUQ_DATAFIM > NOW())");
Auth::loginById($I, $usuario->FUN_IDFUNCIONARIO);

$funcionario_ativo = ModelFind::getRand("Funcionarios", "FUN_SITUACAO = 'A' AND not exists (select * from funcionarios_bloqueio t2 where t2.FUQ_FUNCIONARIO = FUN_IDFUNCIONARIO AND t2.FUQ_DATAFIM > NOW())");
$funcionario_inativo = ModelFind::getRand("Funcionarios", "FUN_SITUACAO = 'I' AND not exists (select * from funcionarios_bloqueio t2 where t2.FUQ_FUNCIONARIO = FUN_IDFUNCIONARIO AND t2.FUQ_DATAFIM > NOW())");

bloqueioFuncionario($I, $funcionario_inativo); // não deve poder ser bloqueado

bloqueioFuncionario($I, $funcionario_ativo); // bloqueia o funcionário
bloqueioFuncionario($I, $funcionario_ativo); // desbloqueia o funcionário