<?php
class LocaisDocumentos {

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

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

        $administrativo = ($Funcionario->FUN_PRM_PRIVILEGIO == 11 || $Funcionario->FUN_PRM_PRIVILEGIO == 7 || $Funcionario->FUN_IDFUNCIONARIO == 356);
        $supervisor = ($Funcionario->FUN_PRM_PRIVILEGIO == 7);
        $diretor = ($Funcionario->FUN_PRM_PRIVILEGIO == 6);
        $gerente_comercial_geral = ($Funcionario->FUN_PRM_PRIVILEGIO == 8);

        $Locais = array();
        if ($Contrato->COT_SITUACAO == Contratos::ADENDO) {
            if ($Contrato->COT_STATUS == 1) {// Aguardando análise
                if ($administrativo) {
                    $Locais = array('3' => 'Em análise', '5' => 'Reprovado');
                    if($gerente_comercial_geral) {
                        $Locais[15] = 'Justificativa de desconto';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                }
            } elseif ($Contrato->COT_STATUS == 3) {// Em análise
                if ($administrativo) {
                    if ($Contrato->temExcecao()) {
                        $Locais = array('6' => 'Aguardando liberação de exceção', '7' => 'Aguardando resposta do vendedor', '4' => 'Aguardando aceite do cliente', '5' => 'Reprovado', '17' => 'Reprovado por solicitação');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } else {
                        $Locais = array('4' => 'Aguardando aceite do cliente', '7' => 'Aguardando resposta do vendedor', '5' => 'Reprovado', '17' => 'Reprovado por solicitação');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }

                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('15' => 'Justificativa de desconto');
                }
            } elseif ($Contrato->COT_STATUS == 4) {// Aguardando aceite do cliente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                    if($gerente_comercial_geral) {
                        $Locais[10] = 'Enviando documentação';
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 6) {// Aguardando liberação de exceção
                if ($diretor or $supervisor or $administrativo or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('7' => 'Aguardando resposta do vendedor', '8' => 'Exceção aprovada', '9' => 'Exceção reprovada');

                    if($gerente_comercial_geral) {
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }

                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            } elseif ($Contrato->COT_STATUS == 7) {// Aguardando resposta do vendedor
                $Locais = array('1' => 'Aguardando análise');
                $atendimento = Atendimentos::model()->find("ATD_IDCONTRATO = {$Contrato->COT_IDCONTRATO} AND ATD_IDMOTIVO in (3,6) order by ATD_IDATENDIMENTO DESC");
                if(isset($atendimento->ATD_IDMOTIVO)) {
                    if($atendimento->ATD_IDMOTIVO == 3) {
                        $Locais = array(3 => 'Em Análise');
                    } else if($atendimento->ATD_IDMOTIVO == 6) {
                        $Locais = array(6 => 'Aguardando liberação de exceção');
                    }
                }

                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            } elseif ($Contrato->COT_STATUS == 8) {// Exceção aprovada
                if ($administrativo or $supervisor or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('4' => 'Aguardando aceite do cliente', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 9) {// Exceção reprovada

            } elseif ($Contrato->COT_STATUS == 10) {// Enviando documentação
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 11 || $Contrato->COT_STATUS == 494) {// Analisando documentação recebida || Documento aceito pelo cliente
                if ($administrativo) {
                    $Locais = array('12' => 'Documentação reprovada', '14' => 'Processo concluído', '17' => 'Reprovado por solicitação', '21' => 'Documentação pendente');
                }
            } elseif ($Contrato->COT_STATUS == 12) {// Documentação reprovada
                if ($Contrato->COT_TIPOASSINATURA == Contratos::ASSINADO_DIGITAL && (User::isRevenda() || $gerente_comercial_geral)) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 13) {// Documento cancelado, prazo expirado
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                }
            } elseif ($Contrato->COT_STATUS == 21) {// Documentação pendente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                    if($gerente_comercial_geral) {
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 22) {// Solicitação de reprovação
                if ($administrativo) {
                    $Locais = array('17' => 'Reprovado por solicitação', '4' => 'Aguardando aceite do cliente');
                }
            } elseif ($Contrato->COT_STATUS == 16) {// Documento cancelado
                if ($administrativo) {
                    $Locais = array('2' => 'Documento ativado');
                }
            }
        } elseif ($Contrato->COT_SITUACAO == Contratos::CONTRATO) {
            if ($Contrato->temExcecao() and ($Contrato->COT_STATUS == 1 or $Contrato->COT_STATUS == 3) and (User::isRevenda() || $gerente_comercial_geral) && !$administrativo) {
                if ($Contrato->COT_STATUS == 1) {// Aguardando análise
                    $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                } elseif ($Contrato->COT_STATUS == 3) {// Em análise
                    $Locais = array('15' => 'Justificativa de desconto');
                }
            } elseif ($Contrato->COT_STATUS == 1) {// Aguardando análise
                if ($Contrato->temExcecao()) {
                    if ($administrativo) {
                        $Locais = array('3' => 'Em análise', '5' => 'Reprovado');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } elseif (User::isRevenda() || $gerente_comercial_geral) {
                        $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                    }
                } else {
                    if ($administrativo) {
                        $Locais = array('3' => 'Em análise', '5' => 'Reprovado');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } else {
                        $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                    }
                }
            } elseif ($Contrato->COT_STATUS == 3) {// Em análise
                if ($administrativo) {
                    if ($Contrato->temExcecao()) {
                        $Locais = array('6' => 'Aguardando liberação de exceção', '7' => 'Aguardando resposta do vendedor', '5' => 'Reprovado', '17' => 'Reprovado por solicitação');
                        
                        if ($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } else {
                        $Locais = array('4' => 'Aguardando aceite do cliente', '7' => 'Aguardando resposta do vendedor', '5' => 'Reprovado', '17' => 'Reprovado por solicitação');
                    }

                } else {
                    if ($Contrato->temExcecao()) {
                        $Locais = array('15' => 'Justificativa de desconto');
                    }
                }
            } elseif ($Contrato->COT_STATUS == 4) {// Aguardando aceite do cliente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                    
                    if($gerente_comercial_geral) {
                        $Locais[10] = 'Enviando documentação';
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 6) {// Aguardando liberação de Exceção
                if ($diretor or $supervisor or $administrativo or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('7' => 'Aguardando resposta do vendedor', '8' => 'Exceção aprovada', '9' => 'Exceção reprovada');
                    
                    if($gerente_comercial_geral) {
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }
                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }

            } elseif ($Contrato->COT_STATUS == 7) {// Aguardando resposta do vendedor
                $Locais = array('1' => 'Aguardando análise');
                $atendimento = Atendimentos::model()->find("ATD_IDCONTRATO = {$Contrato->COT_IDCONTRATO} AND ATD_IDMOTIVO in (3,6) order by ATD_IDATENDIMENTO DESC");
                if(isset($atendimento->ATD_IDMOTIVO)) {
                    if($atendimento->ATD_IDMOTIVO == 3) {
                        $Locais = array(3 => 'Em Análise');
                    } else if($atendimento->ATD_IDMOTIVO == 6) {
                        $Locais = array(6 => 'Aguardando liberação de exceção');
                    }
                }

                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            } elseif ($Contrato->COT_STATUS == 8) {// Exceção aprovada
                if ($administrativo or $supervisor or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('4' => 'Aguardando aceite do cliente', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 9) {// Exceção reprovada

            } elseif ($Contrato->COT_STATUS == 10) {// Enviando documentação
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 11 || $Contrato->COT_STATUS == 494) {// Analisando documentação recebida || Documento aceito pelo cliente
                if ($administrativo) {
                    $Locais = array('12' => 'Documentação reprovada', '14' => 'Processo concluído', '17' => 'Reprovado por solicitação', '21' => 'Documentação pendente');
                }
            } elseif ($Contrato->COT_STATUS == 12) {// Documentação reprovada
                if ($Contrato->COT_TIPOASSINATURA == Contratos::ASSINADO_DIGITAL && (User::isRevenda() || $gerente_comercial_geral)) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 13) {// Documento cancelado, prazo expirado
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                }
            } elseif ($Contrato->COT_STATUS == 21) {// Documentação pendente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                    
                    if($gerente_comercial_geral) {
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 22) {// Solicitado reprovação de documento
                if ($administrativo) {
                    $Locais = array('17' => 'Reprovado por solicitação', '4' => 'Aguardando aceite do cliente');
                }
            } elseif ($Contrato->COT_STATUS == 16) {// Documento cancelado
                if ($administrativo) {
                    $Locais = array('2' => 'Documento ativado');
                }
            }
        } elseif (in_array($Contrato->COT_SITUACAO, array(Contratos::PEDIDO_IMPLANTACAO, Contratos::PEDIDO_REATIVACAO))) {
            if ($Contrato->temExcecao() and ($Contrato->COT_STATUS == 1 or $Contrato->COT_STATUS == 3) and (User::isRevenda() || $gerente_comercial_geral) && !$administrativo) {
                if ($Contrato->COT_STATUS == 1) {// Aguardando análise
                    $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                } elseif ($Contrato->COT_STATUS == 3) {// Em análise
                    $Locais = array('15' => 'Justificativa de desconto');
                }
            } elseif ($Contrato->COT_STATUS == 1) {// Aguardando análise
                if ($Contrato->temExcecao()) {
                    if ($administrativo) {
                        $Locais = array('3' => 'Em análise', '5' => 'Reprovado');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } elseif (User::isRevenda() || $gerente_comercial_geral) {
                        $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                    }
                } else {
                    if ($administrativo) {
                        $Locais = array('3' => 'Em análise', '5' => 'Reprovado');
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } else {
                        $Locais = array('15' => 'Justificativa de desconto', '5' => 'Reprovado');
                    }
                }
            } elseif ($Contrato->COT_STATUS == 3) {// Em análise
                if ($administrativo) {
                    if ($Contrato->temExcecao()) {
                        $Locais = array('6' => 'Aguardando liberação de exceção', '7' => 'Aguardando resposta do vendedor', '5' => 'Reprovado', '17' => 'Reprovado por solicitação');
                        
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    } else {
                        $Locais = array('4' => 'Aguardando aceite do cliente', '7' => 'Aguardando resposta do vendedor', '5' => 'Reprovado', '17' => 'Reprovado por solicitação', '15' => 'Justificativa de desconto');
                        
                        if($gerente_comercial_geral) {
                            $Locais[15] = 'Justificativa de desconto';
                        }
                    }
                } else {
                    if ($Contrato->temExcecao()) {
                        $Locais = array('15' => 'Justificativa de desconto');
                    }
                }
            } elseif ($Contrato->COT_STATUS == 4) {// Aguardando aceite do cliente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                    
                    if($gerente_comercial_geral) {
                        $Locais[10] = 'Enviando documentação';
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 6) {// Aguardando liberação de Exceção
                if ($diretor or $supervisor or $administrativo or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('7' => 'Aguardando resposta do vendedor', '8' => 'Exceção aprovada', '9' => 'Exceção reprovada');
                    
                    if($gerente_comercial_geral) {
                        $Locais[22] = 'Solicitado reprovação de documento';
                    }
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }
                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            } elseif ($Contrato->COT_STATUS == 7) {// Aguardando resposta do vendedor
                $Locais = array('1' => 'Aguardando análise');
                $atendimento = Atendimentos::model()->find("ATD_IDCONTRATO = {$Contrato->COT_IDCONTRATO} AND ATD_IDMOTIVO in (3,6) order by ATD_IDATENDIMENTO DESC");
                if(isset($atendimento->ATD_IDMOTIVO)) {
                    if($atendimento->ATD_IDMOTIVO == 3) {
                        $Locais = array(3 => 'Em Análise');
                    } else if($atendimento->ATD_IDMOTIVO == 6) {
                        $Locais = array(6 => 'Aguardando liberação de exceção');
                    }
                }

                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            } elseif ($Contrato->COT_STATUS == 8) {// Exceção aprovada
                if ($administrativo or $supervisor or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('4' => 'Aguardando aceite do cliente', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 9) {// Exceção reprovada

            } elseif ($Contrato->COT_STATUS == 10) {// Enviando documentação
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida', '17' => 'Reprovado por solicitação');
                }
            } elseif ($Contrato->COT_STATUS == 11 || $Contrato->COT_STATUS == 494) {// Analisando documentação recebida || Documento aceito pelo cliente
                if ($administrativo) {
                    $Locais = array('12' => 'Documentação reprovada', '14' => 'Processo concluído', '17' => 'Reprovado por solicitação', '21' => 'Documentação pendente');
                }
            } elseif ($Contrato->COT_STATUS == 12) {// Documentação reprovada
                if ($Contrato->COT_TIPOASSINATURA == Contratos::ASSINADO_DIGITAL && (User::isRevenda() || $gerente_comercial_geral)) {
                    $Locais = array('10' => 'Enviando documentação', '22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 13) {// Documento cancelado, prazo expirado
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                }
            } elseif ($Contrato->COT_STATUS == 21) {// Documentação pendente
                if ($administrativo) {
                    $Locais = array('11' => 'Analisando documentação recebida');
                } elseif (User::isRevenda() || $gerente_comercial_geral) {
                    $Locais = array('22' => 'Solicitado reprovação de documento');
                }
            } elseif ($Contrato->COT_STATUS == 22) {// Solicitação de reprovação
                if ($administrativo) {
                    $Locais = array('17' => 'Reprovado por solicitação', '4' => 'Aguardando aceite do cliente');
                }
            } elseif ($Contrato->COT_STATUS == 16) {// Documento cancelado
                if ($administrativo) {
                    $Locais = array('2' => 'Documento ativado');
                }
            }
        } elseif ($Contrato->COT_SITUACAO == Contratos::TERMO_CANCELAMENTO) {
            if ($Contrato->COT_STATUS == 6) { // Aguardando liberação de Exceção
                if ($diretor or $supervisor or $administrativo or $Funcionario->FUN_PRM_EXCECOES == 1) {
                    $Locais = array('8' => 'Exceção aprovada', '9' => 'Exceção reprovada');
                }

                if ($administrativo) {
                    $Locais[17] = 'Reprovado por Solicitação';
                }
            }
        }

        $Locais[20] = 'Observação';

        if ($Contrato->podeVoltarLocal()) {
            $LocalAnterior = Motivos::model()->findByPk($Contrato->getLocalAnterior());
            $Locais[-1] = 'Voltar para local anterior ('.$LocalAnterior.')';
        }
        if (User::isAdmin()) {
            $Locais = CHtml::listData(Motivos::model()->findAll('MOT_TIPO = 6 AND MOT_SITUACAO = "A" ORDER BY MOT_DESCRICAO'), 'MOT_IDMOTIVO', 'MOT_DESCRICAO');
        }
        return $Locais;
    }

}