<?php

class Sinistro2_Form_LaudoFinalSafra16 extends Agro_Form
{
    private $readOnly = null;
    private $readOnlyAll = null;

    public function init($idLaudoFinal = null)
    {
        $dados = $this->getDados();

        $configuracoes = array(
            'fl_exibe_botao_enviar' => false,
            'fl_exibe_botao_devolver' => false
        );

        if ($idLaudoFinal) {

            $configuracoes = $this->getConfiguracoes($idLaudoFinal, $dados);

            switch ($configuracoes['readonly']) {
                case 'readOnly':
                    $this->setReadOnly(true);
                    break;
                case 'readOnlyAll':
                    $this->setReadOnly(true);
                    $this->setReadOnlyAll(true);
                    break;
                default:
                    break;
            }

        }

        $this->setMethod('post');
        $this->setAttrib('id', 'form-laudo');

        $this->setDisableLoadDefaultDecorators(true);
        $this->setDecorators($this->decorators);

        $this->addElement('hidden', 'id_laudo_final', array(
            'decorators' => $this->hiddendecorator,
            'order' => 1
        ));

        $this->addElement('hidden', 'id_processo', array(
            'decorators' => $this->hiddendecorator,
            'order' => 2
        ));

        $this->addElement('hidden', 'id_cobertura', array(
            'decorators' => $this->hiddendecorator,
            'order' => 3
        ));

        $this->addElement('hidden', 'id_vistoria', array(
            'decorators' => $this->hiddendecorator,
            'order' => 4
        ));

        $this->addElement('hidden', 'id_proposta', array(
            'decorators' => $this->hiddendecorator,
            'order' => 5
        ));

        $this->addElement('hidden', 'module_name', array(
            'decorators' => $this->hiddendecorator,
            'value' => $this->_request['module'],
            'order' => 60
        ));

        $this->addElement('hidden', 'controller_name', array(
            'decorators' => $this->hiddendecorator,
            'value' => $this->_request['controller'],
            'order' => 7
        ));

        $this->addElement('hidden', 'fl_vistoria_preliminar', array(
            'decorators' => $this->hiddendecorator,
            'order' => 8,
            'value' => $dados['fl_preliminar']
        ));

        $this->addElement('radio', 'fl_evento_nao_constatado', array(
            'MultiOptions' => array(0 => 'Sim', 1 => 'Não'),
            'decorators' => $this->multiElementDecorator,
            'disableLoadDefaultDecorators' => true,
            'separator' => '',
            'label' => 'Evento constatado?',
            'required' => true,
            'order' => 102,
        ));

        $this->addElement('text', 'ds_coordenadas', array(
            'decorators' => $this->elementDecorator,
            'disableLoadDefaultDecorators' => true,
            'label' => 'Coordenadas Geográficas da Sede',
            'class' => 'coordenadas',
            'size' => 26,
            'order' => 14,
            'required' => true,
        ));


        $this->addElement('file', 'ds_nome_laudo_fisico', array(
            'decorators' => $this->fileDecorator,
            'label' => '',
            'size' => 50,
            'class' => 'hide',
            'order' => 103,
            'MaxFileSize' => 4194304

        ));


        $this->addElement('text', 'dt_vistoria_data', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Data',
            'class' => 'data inline-element fieldset-informacoes-vistoria',
            'required' => true,
            'validators' => array(new Agro_Validate_DataVistoria)
        ));

        $this->addElement('select', 'dt_vistoria_hora', array(
            'MultiOptions' => array(
                0 => '00',
                1 => '01',
                2 => '02',
                3 => '03',
                4 => '04',
                5 => '05',
                6 => '06',
                7 => '07',
                8 => '08',
                9 => '09',
                10 => '10',
                11 => '11',
                12 => '12',
                13 => '13',
                14 => '14',
                15 => '15',
                16 => '16',
                17 => '17',
                18 => '18',
                19 => '19',
                20 => '20',
                21 => '21',
                22 => '22',
                23 => '23'
            ),
            'decorators' => $this->elementDecorator,
            'label' => 'Hora',
            'class' => 'inline-element fieldset-informacoes-vistoria',
            'required' => true,
            'ignore' => $this->getReadOnly(),
            'readonly' => $this->getReadOnly()
        ));

        $this->addElement('select', 'dt_vistoria_minutos', array(
            'MultiOptions' => array(
                0 => '00',
                5 => '05',
                10 => '10',
                15 => '15',
                20 => '20',
                25 => '25',
                30 => '30',
                35 => '35',
                40 => '40',
                45 => '45',
                50 => '50',
                55 => '55'
            ),
            'decorators' => $this->elementDecorator,
            'label' => ':',
            'class' => 'inline-element fieldset-informacoes-vistoria',
            'ignore' => $this->getReadOnly(),
            'readonly' => $this->getReadOnly()
        ));

        $modelFuncionarios = new Sistema_Model_Funcionarios();
        $this->addElement('multiCheckbox', 'vistoriadores', array(
            'MultiOptions' => $modelFuncionarios->getArrayVistoriadoresByEmpresa($dados["id_empresa_vistoriadora"]),
            'decorators' => $this->elementDecorator,
            'label' => 'Vistoriadores',
            'separator' => '',
            'required' => true,
            'class' => 'vistoriador',
            'ignore' => $this->getReadOnly(),
            'readonly' => $this->getReadOnly()
        ));

        $this->addElement('multiCheckbox', 'auxiliares', array(
            'MultiOptions' => $modelFuncionarios->getArrayAuxiliaresByEmpresa($dados["id_empresa_vistoriadora"]),
            'decorators' => $this->fieldDecorator,
            'label' => 'Auxiliares',
            'separator' => '',
            'class' => 'vistoriador',
            'ignore' => $this->getReadOnly(),
            'readonly' => $this->getReadOnly(),
        ));

        $this->addElement('radio', 'fl_dt_evento_em_cobertura', array(
            'MultiOptions' => array(1 => 'Sim', 0 => 'Não. Justifique nas observações'),
            'decorators' => $this->multiElementDecorator,
            'disableLoadDefaultDecorators' => true,
            'separator' => '',
            'label' => 'A data de ocorrência do evento está dentro do período de cobertura?',
            'required' => true,
            'order' => 102,
        ));

        $this->addElement('radio', 'fl_area_declarada_representa_area_cultivada', array(
            'MultiOptions' => array(1 => 'Sim', 0 => 'Não. Justifique nas observações'),
            'decorators' => $this->multiElementDecorator,
            'disableLoadDefaultDecorators' => true,
            'separator' => '',
            'label' => 'As áreas declaradas nas unidades seguradas da proposta representam toda a área cultivada na propriedade?',
            'required' => true,
            'order' => 103,
        ));


        $this->addElement('textarea', 'ds_observacao_assinatura_segurado', array(
            'decorators' => $this->elementDecorator,
            'label' => '',
            'maxlength' => 3000,
            'rows' => 3,
            'cols' => 80,
            'label' => ' ',
            'order' => 3,
            'class' => 'hide'
        ));

        $this->addElement('textarea', 'ds_observacao_assinatura_regulador', array(
            'decorators' => $this->elementDecorator,
            'label' => '',
            'maxlength' => 3000,
            'rows' => 3,
            'cols' => 80,
            'label' => ' ',
            'order' => 105,
            'class' => 'hide'
        ));

        $this->addElement('hidden', 'input_itens_segurados_parcial', array(
            'decorators' => $this->hiddendecorator,
            'order' => 1002
        ));

        $this->addDisplayGroup(
            array('input_itens_segurados_parcial'),
            'itens_segurados_parcial',
            array(
                'legend' => 'Itens Segurados',
                'order' => 1001,
                'class' => 'hide',
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->fieldsetDecorator
            )
        );

        $this->addDisplayGroup(
            array(
                'fl_evento_nao_constatado',
                'ds_nome_laudo_fisico'
            ),
            'informacoes-iniciais',
            array(
                'legend' => 'Informação Inicial',
                'order' => 40,
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->fieldsetDecorator
            )
        );

        $this->addElement('hidden', 'input_itens_segurados_laudo_final', array(
            'decorators' => $this->buttonDecorator,
            'order' => 1004
        ));

        $this->addDisplayGroup(
            array('input_itens_segurados_laudo_final'),
            'itens_segurados_laudo_final',
            array(
                'legend' => 'Itens Segurados',
                'order' => 1003,
                'class' => 'hide',
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->fieldsetDecorator
            )
        );

        $this->addElement('textarea', 'ds_observacao', array(
            'decorators' => $this->elementDecorator,
            'disableLoadDefaultDecorators' => true,
            'label' => 'Observações',
            'maxlength' => 3000,
            'rows' => 7,
            'cols' => 80,
            'order' => 1,
        ));

        $this->addElement('radio', 'fl_assinatura_segurado', array(
            'MultiOptions' => array(1 => 'Sim', 0 => 'Não. Justifique abaixo.'),
            'decorators' => $this->multiElementDecorator,
            'disableLoadDefaultDecorators' => true,
            'separator' => '',
            'label' => 'Assinatura do segurado coletada?',
            'required' => true,
            'order' => 2,
        ));

        $this->addElement('radio', 'fl_assinatura_regulador', array(
            'MultiOptions' => array(1 => 'Sim', 0 => 'Não. Justifique abaixo.'),
            'decorators' => $this->multiElementDecorator,
            'disableLoadDefaultDecorators' => true,
            'separator' => '',
            'label' => 'Assinatura do regulador coletada?',
            'required' => true,
            'order' => 4,
        ));

        $this->addDisplayGroup(
            array(
                'ds_observacao',
                'fl_assinatura_segurado',
                'ds_observacao_assinatura_segurado',
                'fl_assinatura_regulador',
                'ds_observacao_assinatura_regulador'
            ),
            'informacoes_complementares',
            array(
                'legend' => 'Informações Complementares',
                'order' => 1005,
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->fieldsetDecorator
            )
        );

        if ($this->getReadOnlyAll()) {
            $this->addElement('hidden', 'Salvar', array(
                'decorators' => $this->hiddendecorator,
                'order' => 1008
            ));
        } else {
            $this->addElement('button', 'Salvar', array(
                'decorators' => $this->buttonDecorator,
                'order' => 1008,
                'type' => 'submit',
                'value' => 'Salvar',
                'ignore' => true
            ));
        }

        if ($configuracoes['fl_exibe_botao_enviar']) {
            $this->addElement('button', 'Enviar', array(
                'decorators' => $this->buttonDecorator,
                'order' => 1009,
                'type' => 'button',
                'value' => 'Enviar',
                'ignore' => true
            ));
        } else {
            $this->addElement('hidden', 'Enviar', array(
                'decorators' => $this->hiddendecorator,
                'order' => 1009
            ));
        }

        if ($configuracoes['fl_exibe_botao_devolver']) {
            $this->addElement('button', 'Devolver', array(
                'decorators' => $this->buttonDecorator,
                'order' => 1010,
                'type' => 'button',
                'value' => 'Enviar',
                'ignore' => true
            ));
        } else {
            $this->addElement('hidden', 'Devolver', array(
                'decorators' => $this->hiddendecorator,
                'order' => 1010
            ));
        }

        $this->addElement('button', 'Cancelar', array(
            'decorators' => $this->buttonDecorator,
            'order' => 1011,
            'type' => 'button',
            'value' => 'Cancelar',
            'ignore' => true
        ));

        $this->addDisplayGroup(
            array('Salvar', 'Enviar', 'Devolver', 'Cancelar'),
            'buttons',
            array(
                'order' => 1012,
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->buttonsDecorator
            )
        );
    }

    public function setReadOnly($value)
    {
        $this->readOnly = ($value ? $value : null);
    }

    public function getReadOnly()
    {
        return $this->readOnly;
    }

    public function setReadOnlyAll($value)
    {
        $this->readOnlyAll = ($value ? $value : null);
    }

    public function getReadOnlyAll()
    {
        return $this->readOnlyAll;
    }

    public $decorators = array(
        'FormElements',
        'Form',
    );

    public $elementDecorator = array(
        'ViewHelper',
        array(
            'Description',
            array(
                'class' => 'help'
            )
        ),
        'Errors',
        'Label'
    );

    public $fieldsetDecorator = array(
        'FormElements',
        'Fieldset'
    );

    public $fieldDecorator = array(
        'ViewHelper',
        array(
            'Description',
            array(
                'class' => 'help'
            )
        ),
        'Errors',
        array(
            'Label',
            array(
                'tag' => 'div',
                'style' => 'width:100%'
            )
        ),
        array(
            array(
                'field-div' => 'HtmlTag'
            ),
            array(
                'tag' => 'div',
                'class' => 'row'
            )
        ),
        array(
            array(
                'br' => 'HtmlTag'
            ),
            array(
                'tag' => 'br'
            )
        ),
        array(
            array(
                'div' => 'HtmlTag'
            ),
            array(
                'tag' => 'div',
                'class' => 'clear'
            )
        ),
        array(
            array(
                'br' => 'HtmlTag'
            ),
            array(
                'tag' => 'br'
            )
        )
    );

    public function getConfiguracoes($idLaudoFinal, $dados = array())
    {
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $laudoFinal = $modelLaudosFinais->getLaudoFinal($idLaudoFinal);

        $configuracoes = array();

        $user = Zend_Auth::getInstance()->getIdentity();

        $f = (new Sistema_Model_Funcionarios())->fetchRow('id_usuario = ' . $user->id);
        $idEmpresaUserLogado = $f['id_empresa'];

        $idEmpresaVistoriadora = (new Sistema_Model_VistoriasEmpresas())->getIdEmpresaByLaudoFinal($idLaudoFinal);

        if (
            $laudoFinal['ds_chave_status'] == 'ENVIADO'
            || ($idEmpresaUserLogado != $idEmpresaVistoriadora && $user->tp_usuario != 'F')
        ) {
            $configuracoes['readonly'] = 'readOnlyAll';

        } elseif ($laudoFinal['fl_evento_nao_constatado']) {
            $configuracoes['readonly'] = 'readOnly';
        }

        if (
            $laudoFinal['ds_chave_status'] != 'ENVIADO'
            && $modelLaudosFinais->isComplete($idLaudoFinal, $dados['fl_preliminar'])
        ) {
            $configuracoes['fl_exibe_botao_enviar'] = true;
        }

        if (
            $laudoFinal['ds_chave_status'] == 'ENVIADO'
            && (Agro_Util::checkPermission('sinistro2:laudofinal:devolvelaudofinal'))
        ) {
            $configuracoes['fl_exibe_botao_devolver'] = true;
            $configuracoes['readonly'] = 'readOnly';
        }

        return $configuracoes;
    }

    public $buttonDecorator = array(
        'ViewHelper',
        array(array('elementLi' => 'HtmlTag'), array('tag' => 'li'))
    );

    public $buttonsDecorator = array(
        'FormElements',
        array(array('elementUl' => 'HtmlTag'), array('tag' => 'ul', 'class' => 'ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all'))
    );

    public $hiddendecorator = array(
        'ViewHelper',
    );
}