<?php
class LocaisPendencias {

	private static $_pendencia;

	public static function podeMovimentar($PEN_IDPENDENCIA, $PEN_IDLOCAL) {
		$atual = self::getLocais($PEN_IDPENDENCIA);
		return isset($atual[$PEN_IDLOCAL]);
	}

	public static function getLocais($PEN_IDPENDENCIA) {
		$Funcionario = Funcionarios::model()->findByPk(Yii::app()->user->id);
		if (!isset($Funcionario->FUN_IDFUNCIONARIO)) {
			return array();
		}

		self::$_pendencia = Pendencias::model()->findByPk($PEN_IDPENDENCIA);
		if ((self::isAnalista(false) || self::isDesenvolvedor() || self::isDiretor()) && $PEN_IDPENDENCIA == false) {
			if (self::isDesenvolvedor()) {
				return array('13' => 'Pendência Aguardando Análise', '3' => 'Análise Desenvolvimento', '1' => 'Desenvolvimento', '5' => 'Liberadas', '7' => 'Em Espera', '6' => 'Entregues', '4' => 'Testes');
			} elseif (self::isDiretor()) {
				return array('13' => 'Pendência Aguardando Análise', '3' => 'Análise Desenvolvimento', '1' => 'Desenvolvimento');
			} else {
				return array('13' => 'Pendência Aguardando Análise', '2' => 'Análise', '3' => 'Análise Desenvolvimento', '7' => 'Em Espera', '22' => 'Entregue por Pré Análise', '4' => 'Testes');
			}
		}

		if (!self::getLocalPendencia()) {
			return array();
		}

		$Locais = array();
		if (self::getLocalPendencia() == 13) { // Pendência Aguardando Análise
			if (self::isAnalista()) {
				$Locais = array('2' => 'Análise');
			} else if (self::isTrabalhoAdministrativo()) { // sincronização prospectos/clientes
				$Locais = array('2' => 'Análise');
			} else if (self::isGerenteProjeto()) {
				$Locais = array('3' => 'Análise e Desenvolvimento', '6' => 'Entregues', '9' => 'Não Realizada');
			}
		} elseif (self::getLocalPendencia() == 2) { // Análise
			if (self::isAnalista()) {
				$Locais = array('3' => 'Análise Desenvolvimento', '7' => 'Em Espera', '22' => 'Entregue por Pré Análise', '15' => 'Espera Revenda', '9' => 'Não Realizada');
			} else if (self::isTrabalhoAdministrativo()) {
				$Locais = array('13' => 'Pendência Aguardando Análise', '3' => 'Análise Desenvolvimento', '22' => 'Entregue por Pré Análise', '15' => 'Espera Revenda', '9' => 'Não Realizada');
			} else if (self::isGerenteProjeto()) {
				$Locais = array('3' => 'Análise e Desenvolvimento', '6' => 'Entregues', '9' => 'Não Realizada');
			}
		} elseif (self::getLocalPendencia() == 9) { // Não Realizada
			if (self::isAnalista()) {
				$Locais = array('2' => 'Análise');
			} else if(self::isDesenvolvedor()) {
				$anterior = PendenciasAtividades::model()->find('PAT_IDPENDENCIA = '.self::$_pendencia->PEN_IDPENDENCIA.' AND PAT_IDLOCAL in (2,3) ORDER BY PAT_DATACADASTRO DESC');
				if ($anterior && $anterior->PAT_IDLOCAL == 3) {
					$Locais = array('3' => 'Análise Desenvolvimento');
				}
			}
		} elseif (self::getLocalPendencia() == 3) { // Análise Desenvolvimento
			if (self::isDesenvolvedor() || self::isDiretor()) {
				$Locais = array('2' => 'Análise', '1' => 'Desenvolvimento', '7' => 'Em Espera', '15' => 'Espera Revenda', '9' => 'Não Realizada', '16' => 'Pré Testes', '4' => 'Testes');
				if(in_array(self::$_pendencia->PEN_IDMOTIVO, [154]) || self::isGerenteProjeto()) {
					$Locais['6'] = 'Entregues';
				}
			}
		} elseif (self::getLocalPendencia() == 16) { // Pré testes
            if (in_array(User::getId(), [368, 461, 545, 566])) {
                $Locais = array('1' => 'Desenvolvimento', '4' => 'Testes');
            }
        } elseif (self::getLocalPendencia() == 1) { // Desenvolvimento
			if (self::isDesenvolvedor()) {
                $Locais = array('3' => 'Análise Desenvolvimento', '15' => 'Espera Revenda', '16' => 'Pré Testes', '4' => 'Testes', '9' => 'Não Realizada');
                if (self::$_pendencia->PEN_IDMOTIVO == 154 || self::isGerenteProjeto()) { // falha do usuário
					$Locais['6'] = 'Entregues';
                	$Locais['9'] = 'Não Realizada';
                }
            }
		} elseif (self::getLocalPendencia() == 7) { // Em Espera
			if (self::isAnalista() or self::isDesenvolvedor()) {
				$Locais = array('2' => 'Análise');
			}
		} elseif (self::getLocalPendencia() == 15) { // Espera Revenda
			if (self::isAutor() || self::isMesmaRevendaAutor()) {
				$anterior = PendenciasAtividades::model()->find('PAT_IDPENDENCIA = '.self::$_pendencia->PEN_IDPENDENCIA.' AND PAT_IDLOCAL in (1,2,3) ORDER BY PAT_DATACADASTRO DESC');
				if ($anterior) {
					if ($anterior->PAT_IDLOCAL == 1) {
						$Locais = array('1' => 'Desenvolvimento');
					} elseif ($anterior->PAT_IDLOCAL == 2) {
						$Locais = array('2' => 'Análise');
					} elseif ($anterior->PAT_IDLOCAL == 3) {
						$Locais = array('3' => 'Análise Desenvolvimento');
					}
				}
			}
		} elseif (self::getLocalPendencia() == 4) { // Testes
			if (self::isAnalista()) {
				$Locais = array(
					'3' => 'Análise Desenvolvimento',
					'26' => 'Liberadas para Pré-Produção',
					'5' => 'Liberadas'
				);
			} elseif (self::$_pendencia->PEN_IDMOTIVO == 154) { // falha do usuário
				if (self::isAutor() || self::isMesmaRevendaAutor()) {
					$Locais = array('3' => 'Análise Desenvolvimento', '5' => 'Liberadas');
				} elseif (self::isGerenteProjeto()) {
					$Locais = array('6' => 'Entregues');
				}
			} elseif (self::isGerenteProjeto()) {
				$Locais = array('6' => 'Entregues');
			}
		} elseif (self::getLocalPendencia() == 5) { // Liberadas
			if (self::isAnalista()) {
				$Locais = array('4' => 'Testes');
			} elseif (self::isDesenvolvedor()) {
				$Locais = array('6' => 'Entregues');
			}
		} elseif (self::getLocalPendencia() == 26) { // Liberadas para Pré-Produção
			if (self::isDesenvolvedor()) {
				$Locais = array('27' => 'Aguardando Testes Pré-Produção');
			}
		} elseif (self::getLocalPendencia() == 27) { // Aguardando Testes Pré-Produção
			if (self::isAnalista()) {
				$Locais = array('3' => 'Análise Desenvolvimento', '5' => 'Liberadas');
			}
		} elseif (self::getLocalPendencia() == 6) { // Entregues
			if (self::isAnalista()) {
				$Locais = array('3' => 'Análise Desenvolvimento');
			} elseif (self::isDesenvolvedor()) {
				$Locais = array('21' => 'Observação');
			} else if(self::isAutor() || self::isMesmaRevendaAutor()) {
				if(in_array(self::$_pendencia->PEN_IDMOTIVO, [154])) {
					$Locais = array('3' => 'Análise Desenvolvimento');
				}
			}
		}
		
		$Locais[21] = 'Observação';

		if (self::$_pendencia->podeVoltarLocal()) {
			$Locais[-1] = 'Voltar para local anterior ('.self::$_pendencia->printLocalAnterior().')';
		}

		return $Locais;
	}

    public static function getLocaisFiltros() {
        return array(
            '13' => 'Pendência Aguardando Análise',
            '2' => 'Análise',
            '3' => 'Análise Desenvolvimento',
            '1' => 'Desenvolvimento',
            '9' => 'Não Realizada',
            '7' => 'Em Espera',
            '15' => 'Espera Revenda',
            '4' => 'Testes',
            '16' => 'Pré Testes',
            '5' => 'Liberadas',
            '6' => 'Entregues',
            '22' => 'Entregue por Pré Análise',
            '26' => 'Liberadas para Pré-Produção',
            '27' => 'Aguardando Testes Pré-Produção',
        );
    }

	private static function getLocalPendencia() {
		if(!isset(self::$_pendencia->PEN_IDLOCAL)) {
			return false;
		}
		return self::$_pendencia->PEN_IDLOCAL;
	}

	private static function isAnalista($incluir_atendente = true) {
		$jones = User::getId() == 3;
		$catilene = User::getId() == 17;
        $adilson = User::getId() == 21;

		if($incluir_atendente) {
			$atendente = User::getId() == self::$_pendencia->PEN_IDATENDENTE;
			return ($jones || $catilene || $adilson || $atendente);
		} else {
			return ($jones || $catilene || $adilson);
		}
	}

	private static function isGerenteProjeto() {
		return User::getId() == 368;
	}

	private static function isDesenvolvedor() {
		$desenvolvedores = array_keys(self::desenvolvedoresCrm());
		return in_array(User::getId(), $desenvolvedores) || (isset(self::$_pendencia->PEN_IDLOCAL) && User::getId() == self::$_pendencia->PEN_IDDESENVOLVEDOR);
	}

	public static function desenvolvedoresCrm($active = false)
	{
		$desenvolvedores = [];
		if($active) {	
			$desenvolvedores = GxHtml::listDataEx(Funcionarios::model()->findAll('FUN_IDSETOR = 11 and FUN_SITUACAO = "A" and FUN_IDFUNCAO in(6, 7, 2, 8)  order by FUN_NOME'));
		} else {
			$desenvolvedores = GxHtml::listDataEx(Funcionarios::model()->findAll('FUN_IDSETOR = 11 and FUN_IDFUNCAO in(6, 7, 2, 8)  order by FUN_NOME'));
		}

		if(empty($desenvolvedores))
			return [];

		return $desenvolvedores;
	}

	private static function isTrabalhoAdministrativo() {
		$administrativo = (User::getId() == 192 || User::getId() == 262);
		if(!$administrativo) {
			return false;
		}
		return self::$_pendencia->PEN_IDMOTIVO == 450 || (self::$_pendencia->PEN_IDMOTIVO == 452 && self::$_pendencia->PEN_IDSETOR = 5);
	}

	private static function isAutor() {
		return self::$_pendencia->PEN_IDFUNCIONARIO == User::getId();
	}

	private static function isMesmaRevendaAutor() {
		$RevendasFuncionarioLogado = FuncionariosRevendas::model()->findAll("FRV_IDFUNCIONARIO = ".Yii::app()->user->id);
		$data_revendas             = CHtml::listData($RevendasFuncionarioLogado, 'FRV_IDREVENDA', 'FRV_IDREVENDA');

		$RevendasAutorPendencia = FuncionariosRevendas::model()->findAll("FRV_IDFUNCIONARIO = ".self::$_pendencia->PEN_IDFUNCIONARIO);
		$data_revendas          = CHtml::listData($RevendasAutorPendencia, 'FRV_IDREVENDA', 'FRV_IDREVENDA');

		return !empty(array_intersect($RevendasFuncionarioLogado, $RevendasAutorPendencia));
	}

	private static function isDiretor()
	{
		return User::getPrivilegio() == 6;
	}

}
