<?php

$Permissoes = User::getUser(true);

if ($Permissoes->FUN_TBL_PENDENCIAS_CRM == 1 or $Permissoes->FUN_TBL_RELATORIO_PENDENCIAS_CRM == 1) {

	class PendenciasController extends GxController {

		var $help = 'Esta é a ajuda';

		public function actionView($id) {
			$this->render('view', array(
					'model' => $this->loadModel($id, 'Pendencias'),
				));
		}

		public function actionCreate() {
			$model    = new Pendencias;
			$arquivos = array();

            $model->PEN_CAMPO_BASE = false;
            if (in_array(User::getId(), array(3, 17, 97, 461, 545, 368))) {
                $model->PEN_CAMPO_BASE = true;
            }

			if (isset($_POST['Pendencias'])) {

				$model->setAttributes($_POST['Pendencias']);
				$model->PEN_DATACADASTRO  = date('d/m/Y H:i:s');
				$model->PEN_IDFUNCIONARIO = User::getId();

				if (!in_array(User::getId(), array(3, 17, 97, 368, 461, 545, 566))) {
					if ($model->PEN_IDMOTIVO == 154) { // Falha do Usuário
						$model->PEN_IDLOCAL = 3;
					} else if ($model->PEN_IDMOTIVO == 450 || ($model->PEN_IDMOTIVO == 452 && $model->PEN_IDFORMULARIO == 405)) { // sincronização de prospectos / clientes ou Novos ou Manutenção de Cadastros (comercial)
						$model->PEN_IDLOCAL = 2;
					} else {
						$model->PEN_IDLOCAL = 13;
					}
				}

				$save = true;
				if (isset($_POST['Arquivos']) && is_array($_POST['Arquivos'])) {
					$arquivos = $_POST['Arquivos'];
					if (isset($_FILES['Arquivos']) && is_array($_FILES['Arquivos'])) {
						foreach ($_FILES['Arquivos'] as $name => $files) {
							foreach ($files as $key              => $value) {
								$arquivos[$key]['ARQ_ARQUIVO'][$name] = $value;
							}
						}
					}
					foreach ($arquivos as $key => $file) {
						$arquivo           = new Arquivos;
						$arquivo->scenario = 'upload';
						$arquivo->setAttributes($file);
						if (is_array($arquivo->ARQ_ARQUIVO) && !$arquivo->upload(true)) {
							$save = false;
						}

						$arquivos[$key] = $arquivo;
					}

                    if (!$save) {
                        Yii::app()->user->setFlash('danger', 'Erro ao salvar um ou mais arquivos anexados!');
                    }
				}

                if(empty($model->PEN_IDVERSAO)) {
    				$criteriaVersao = $criteria=new CDbCriteria();
                    $criteria->addCondition('VRP_IDPROJETO = "20" and VER_DTLIBERACAO <= NOW() AND VER_SITUACAO = "A"');
                    $criteria->order = 'VER_DTLIBERACAO DESC';
                    $criteria->with = array('Versao');
                    $Versao = VersoesProjetos::model()->with('Versao')->find($criteria);
                    if(isset($Versao->Versao->VER_IDVERSAO)) {
                        $model->PEN_IDVERSAO = $Versao->Versao->VER_IDVERSAO;
                    }
                }

				if ($save && $model->save()) {
					foreach ($arquivos as $arquivo) {
						$arquivo->ARQ_FOREIGNKEY = $model->PEN_IDPENDENCIA;
						$arquivo->ARQ_MODEL      = 'Pendencias';
						$arquivo->save();
					}

					$modelAtividade                      = new PendenciasAtividades;
					$modelAtividade->PAT_IDPENDENCIA     = $model->PEN_IDPENDENCIA;
					$modelAtividade->PAT_DATACADASTRO    = date('d/m/Y H:i:s');
					$modelAtividade->PAT_IDAUTOR         = $model->PEN_IDFUNCIONARIO;
					$modelAtividade->PAT_IDLOCAL         = $model->PEN_IDLOCAL;
					$modelAtividade->PAT_IDMOTIVO        = $model->PEN_IDMOTIVO;
					$modelAtividade->PAT_IDFORMULARIO    = $model->PEN_IDFORMULARIO;
					$modelAtividade->PAT_IDPRIORIDADE    = $model->PEN_IDPRIORIDADE;
					$modelAtividade->PAT_IDDESENVOLVEDOR = $model->PEN_IDDESENVOLVEDOR;
					$modelAtividade->PAT_SITUACAO        = $model->PEN_SITUACAO;
					$modelAtividade->PAT_DATAPREVISAO    = $model->PEN_DATAPREVISAO;
                    $modelAtividade->PAT_IDVERSAO_FALHA  = $model->PEN_IDVERSAO_FALHA;
                    $modelAtividade->PAT_IDVERSAO        = $model->PEN_IDVERSAO;
                    $modelAtividade->PAT_BASE            = $model->PEN_BASE;
					switch ($model->PEN_IDLOCAL) {
						case '1':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, em desenvolvimento.';
							break;

						case '2':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, em análise.';
							break;

						case '3':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, em análise e desenvolvimento.';
							break;

						case '4':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, em testes.';
							break;

						case '5':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, liberada.';
							break;

						case '6':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, entregue.';
							break;

						case '7':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, em espera.';
							break;

						case '13':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, aguardando análise.';
							break;

						case '22':
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, entregue por pré análise.';
							break;

						default:
							$modelAtividade->PAT_DESCRICAO = 'Pendência cadastrada, aguardando análise.';
							break;
					}
					$modelAtividade->PAT_IDSETOR = $model->PEN_IDSETOR;
					$modelAtividade->save(false, array('PAT_IDPENDENCIA', 'PAT_DATACADASTRO', 'PAT_IDAUTOR', 'PAT_IDLOCAL', 'PAT_IDMOTIVO', 'PAT_IDFORMULARIO', 'PAT_IDPRIORIDADE', 'PAT_IDDESENVOLVEDOR', 'PAT_SITUACAO', 'PAT_DATAPREVISAO', 'PAT_BASE', 'PAT_IDVERSAO_FALHA', 'PAT_IDVERSAO', 'PAT_DESCRICAO', 'PAT_IDSETOR'));

					if (Yii::app()->getRequest()->getIsAjaxRequest()) {
						Yii::app()->end();
					} else {
						Yii::app()->user->setFlash('success', 'Pendência cadastrada com sucesso!');
						$this->redirect(array('view', 'id' => $model->PEN_IDPENDENCIA));
					}
				}
			}

			$this->render('create', array('model' => $model, 'arquivos' => $arquivos));
		}

		public function actionUpdate($id) {
			$model    = $this->loadModel($id, 'Pendencias');
			$anterior = $this->loadModel($id, 'Pendencias');

			if (isset($_POST['Pendencias'])) {
				$model->setAttributes($_POST['Pendencias']);

				if ($model->save()) {
					$alteracoes = '';

					if ($anterior->PEN_TITULO != $model->PEN_TITULO) {
						$alteracoes .= "\n\r Título: ".$anterior->PEN_TITULO.' -> '.$model->PEN_TITULO;
					}

					if ($anterior->PEN_IDLOCAL != $model->PEN_IDLOCAL) {
						$alteracoes .= "\n\r Local: ".$anterior->Local.' -> '.$model->Local;
					}

					if ($anterior->PEN_IDPRIORIDADE != $model->PEN_IDPRIORIDADE) {
						$alteracoes .= "\n\r Prioridade: ".$anterior->Prioridade.' -> '.$model->Prioridade;
					}

					if ($anterior->PEN_IDSETOR != $model->PEN_IDSETOR) {
						$alteracoes .= "\n\r Setor: ".$anterior->Setor.' -> '.$model->Setor;
					}

					if ($anterior->PEN_IDFORMULARIO != $model->PEN_IDFORMULARIO) {
						$alteracoes .= "\n\r Menu: ".$anterior->Formulario.' -> '.$model->Formulario;
					}

					if ($anterior->PEN_IDVERSAO != $model->PEN_IDVERSAO) {
						$alteracoes .= "\n\r Versão: ".$anterior->Versao.' -> '.$model->Versao;
					}

					if ($anterior->PEN_IDMOTIVO != $model->PEN_IDMOTIVO) {
						$alteracoes .= "\n\r Motivo: ".$anterior->Motivo.' -> '.$model->Motivo;
					}

					if ($anterior->PEN_TXTSOLICITACAO != $model->PEN_TXTSOLICITACAO) {
						$alteracoes .= "\n\r Descrição da Solicitação: ".$anterior->PEN_TXTSOLICITACAO.' -> '.$model->PEN_TXTSOLICITACAO;
					}

					if ($anterior->PEN_TXTPROCEDIMENTO != $model->PEN_TXTPROCEDIMENTO) {
						$alteracoes .= "\n\r Procedimento para simulação do problema: ".$anterior->PEN_TXTPROCEDIMENTO.' -> '.$model->PEN_TXTPROCEDIMENTO;
					}

					if ($alteracoes != '') {
						$modelAtividade                       = new PendenciasAtividades;
						$modelAtividade->PAT_IDPENDENCIA      = $model->PEN_IDPENDENCIA;
						$modelAtividade->PAT_DATACADASTRO     = date('d/m/Y H:i:s');
						$modelAtividade->PAT_IDAUTOR          = User::getId();
						$modelAtividade->PAT_IDLOCAL          = 21;
						$modelAtividade->PAT_IDMOTIVO         = $model->PEN_IDMOTIVO;
						$modelAtividade->PAT_IDPRIORIDADE     = $model->PEN_IDPRIORIDADE;
						$modelAtividade->PAT_IDDESENVOLVEDOR  = $model->PEN_IDDESENVOLVEDOR;
						$modelAtividade->PAT_SITUACAO         = $model->PEN_SITUACAO;
						$modelAtividade->PAT_DATAPREVISAO     = Util::formatDataBr($model->PEN_DATAPREVISAO);
						$modelAtividade->PAT_IDPREVISAOVERSAO = $model->PEN_IDPREVISAOVERSAO;
						$modelAtividade->PAT_DESCRICAO        = "Alteradas informações da pendência. \n\r".$alteracoes;
						$modelAtividade->PAT_IDSETOR          = $model->PEN_IDSETOR;
						$modelAtividade->save(false, array('PAT_IDPENDENCIA', 'PAT_DATACADASTRO', 'PAT_IDAUTOR', 'PAT_IDLOCAL', 'PAT_IDMOTIVO', 'PAT_IDPRIORIDADE', 'PAT_IDDESENVOLVEDOR', 'PAT_SITUACAO', 'PAT_DATAPREVISAO', 'PAT_DESCRICAO', 'PAT_IDSETOR', 'PAT_IDPREVISAOVERSAO'));
					}

					$this->redirect(array('view', 'id' => $model->PEN_IDPENDENCIA));
				}
			}

			$this->render('update', array('model' => $model));
		}

		public function actionAnalise($id) {
			$model           = $this->loadModel($id, 'Pendencias');
			$anterior        = $this->loadModel($id, 'Pendencias');
			$model->scenario = 'analise';
			if (isset($_POST['Pendencias'])) {
				$fields_unset = array('PEN_TITULO', 'PEN_IDPRIORIDADE', 'PEN_IDSETOR', 'PEN_IDFORMULARIO', 'PEN_IDVERSAO', 'PEN_TXTSOLICITACAO', 'PEN_TXTPROCEDIMENTO');
				$countCampos  = 0;
				$campos       = array();
				foreach ($fields_unset as $field) {
					if (isset($_POST['Pendencias'][$field])) {
						unset($_POST['Pendencias'][$field]);
						$countCampos++;
						$campos[] = $model->getAttributeLabel($field);
					}
				}
				$model->setAttributes($_POST['Pendencias']);
				if ($countCampos == 0) {
					if ($model->save()) {
						$alteracoes = '';
						if ($anterior->PEN_IDMOTIVO != $model->PEN_IDMOTIVO) {
							$alteracoes .= "\n\rMotivo: ".$anterior->Motivo.' -> '.$model->Motivo;
						}

						if ($anterior->PEN_IDDESENVOLVEDOR != $model->PEN_IDDESENVOLVEDOR) {
							$alteracoes .= "\n\rDesenvolvedor: ".Util::getCampoVazio($anterior->Desenvolvedor).' -> '.$model->Desenvolvedor;
						}

						if ($anterior->PEN_GRAUDIFICULDADE != $model->PEN_GRAUDIFICULDADE) {
							$alteracoes .= "\n\rGrau de Dificuldade: ".Util::getGrauDificuldade($anterior->PEN_GRAUDIFICULDADE).' -> '.Util::getGrauDificuldade($model->PEN_GRAUDIFICULDADE);
						}

						if ($anterior->PEN_IDPREVISAOVERSAO != $model->PEN_IDPREVISAOVERSAO) {
							$alteracoes .= "\n\rPrevisão de Versão: ".Util::getCampoVazio($anterior->PrevisaoVersao).' -> '.Util::getCampoVazio($model->PrevisaoVersao);
						}

						if ($anterior->PEN_ESTIMATIVAUNIDADE != $model->PEN_ESTIMATIVAUNIDADE || $anterior->PEN_ESTIMATIVATEMPO != $model->PEN_ESTIMATIVATEMPO) {
							$alteracoes .= "\n\rEstimativa de tempo de trabalho: ".$anterior->PEN_ESTIMATIVATEMPO." ".Util::getUnidadeEstimativaTempo($anterior->PEN_ESTIMATIVAUNIDADE).' -> '.$model->PEN_ESTIMATIVATEMPO." ".Util::getUnidadeEstimativaTempo($model->PEN_ESTIMATIVAUNIDADE);
						}

						if ($anterior->PEN_DATAPREVISAO != Util::formatDataBr($model->PEN_DATAPREVISAO)) {
							$alteracoes .= "\n\rPrevisão de Entrega: ".Util::getCampoVazio($anterior->PEN_DATAPREVISAO).' -> '.Util::getCampoVazio(Util::formatDataBr($model->PEN_DATAPREVISAO));
						}

						if ($alteracoes != '') {
							$modelAtividade                       = new PendenciasAtividades;
							$modelAtividade->PAT_IDPENDENCIA      = $model->PEN_IDPENDENCIA;
							$modelAtividade->PAT_DATACADASTRO     = date('d/m/Y H:i:s');
							$modelAtividade->PAT_IDAUTOR          = User::getId();
							$modelAtividade->PAT_IDLOCAL          = 21;
							$modelAtividade->PAT_IDMOTIVO         = $model->PEN_IDMOTIVO;
							$modelAtividade->PAT_IDPRIORIDADE     = $model->PEN_IDPRIORIDADE;
							$modelAtividade->PAT_IDDESENVOLVEDOR  = $model->PEN_IDDESENVOLVEDOR;
							$modelAtividade->PAT_SITUACAO         = $model->PEN_SITUACAO;
							$modelAtividade->PAT_DATAPREVISAO     = Util::formatDataBr($model->PEN_DATAPREVISAO);
							$modelAtividade->PAT_IDPREVISAOVERSAO = $model->PEN_IDPREVISAOVERSAO;
							$modelAtividade->PAT_DESCRICAO        = "Alteradas estimativas da pendência. \n\r".$alteracoes;
							$modelAtividade->PAT_IDSETOR          = $model->PEN_IDSETOR;
							$modelAtividade->save(false, array('PAT_IDPENDENCIA', 'PAT_DATACADASTRO', 'PAT_IDAUTOR', 'PAT_IDLOCAL', 'PAT_IDMOTIVO', 'PAT_IDPRIORIDADE', 'PAT_IDDESENVOLVEDOR', 'PAT_SITUACAO', 'PAT_DATAPREVISAO', 'PAT_DESCRICAO', 'PAT_IDSETOR', 'PAT_IDPREVISAOVERSAO'));
						}
						$this->redirect(array('view', 'id' => $model->PEN_IDPENDENCIA));
					}
				} else {
					$corpo = "<p><b>Houve um indício de tentativa de burlar o sistema.</b>";
                    $corpo .= "<b>Usuário responsável pela tentativa:</b> ".User::getName() . "<br />";
                    $corpo .= "<b>Data:</b> ".date('d/m/Y H:m:i') . "<br />";
                    $corpo .= "<b>Descrição da tentativa:</b> o usuário tentou alterar campos no formulário de análise das pendências do CRM, os quais não podiam ser alterados pelo mesmo<br />";
                    $corpo .= "<b>Pendência:</b> ".$model->PEN_TITULO . "<br />";
                    $corpo .= "<b>Campos:</b> ".implode(', ', $campos)."</p>";
                    $extra = array('CC' => array(User::getUser()->FUN_EMAIL));
                    Util::sendEmail('marcio@delvale.com.br', 'Indício de tentativa de burlar o sistema identificada', $corpo, $extra);
                    Yii::app()->user->setFlash('error', 'Indício de tentativa de burlar o sistema identificada. O administrador do sistema foi notificado. Caso você acredite que isto se trate de um erro, favor contate o mesmo.');
                    $this->redirect(array('view', 'id' => $model->PEN_IDPENDENCIA));
				}
			}

			$this->render('analise', array('model' => $model));
		}

		public function actionDelete($id) {
			if (Yii::app()->getRequest()->getIsPostRequest()) {
				$this->loadModel($id, 'Pendencias')->delete();

				if (!Yii::app()->getRequest()->getIsAjaxRequest()) {
					$this->redirect(array('admin'));
				}
			} else {

				throw new CHttpException(400, 'Sua solicitação é inválida.');
			}
		}

		public function actionAdmin() {
			$model = new Pendencias('search');
			$model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

			if (isset($_GET['Pendencias'])) {
				$model->setAttributes($_GET['Pendencias']);
			}

			$this->render('admin', array(
					'model' => $model,
				));
		}

		public function actionRelatorio() {
			$model = new Pendencias('search');
			$model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

			if (isset($_GET['Pendencias'])) {
				$model->setAttributes($_GET['Pendencias']);
            }

            if (isset($_GET['exportar']) && $_GET['exportar'] == 1) {
                $this->actionGenerateExcel($model);
            }

			$this->render('relatorio', array(
					'model' => $model,
				));
		}

		public function actionGenerateExcel($model = false) {

            if($model == false ){
                $model = new Pendencias('search');
                if (isset($_GET['Pendencias'])) {
                    $model->setAttributes($_GET['Pendencias']);
                }
            }

            $search = $model->search();
            $dataProvider = $model->search($search->totalItemCount);
            if ($dataProvider === false) {
                throw new CHttpException(400, 'Sua solicitação é inválida. Você não definiu nenhum critério de busca ou seus critérios expiraram por terem sido gerados há mais de 60 minutos');
            }

            $data = $dataProvider->getData();
			Yii::app()->request->sendFile(
                'relatorio-pendencias-crm-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('excelReport', array(
                    'dataProvider' => $dataProvider,
                    'data' => $data
                ), true),
                'application/vnd.ms-excel', true
            );
		}

		public function actionCommits($id) {
			$model = $this->loadModel($id, 'Pendencias');
			$commits = new Commits();
			$commits->CMT_IDPENDENCIA =  $model->PEN_IDPENDENCIA;
    		$commits->CMT_MODEL = get_class($model);

			$this->render('commits', array(
					'model' => $model,
					'commits' => $commits,
				)
			);
		}
	}
}
