<?
/**
 * Controller
 *
 * Laudo final Tipo LF007 / Safra15 - Item Segurado
 *
 * @author Marcelo Paulino
 * @date 19/07/2011
 *
 */
class Safra15_Lf007itemseguradoController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
	}

	public function getModel() {
	    return new Safra15_Model_Lf007ItensSeguradosAmostras();
	}

    public function getModelLf007ItensSegurados() {
        return new Safra15_Model_Lf007ItensSegurados();
    }

	public function getForm($dados = array()) {
	    return new Sinistro_Form_LaudoFinalItemSegurado(array('dados'=>$dados));
	}

    public function formAction() {
        $params = $this->getRequest()->getParams();

		$dadosForm = array();

		$arAmostras = array();

		$dadosForm['id_laudo_final'] = $params['id_laudo_final'];
		$dadosForm['id_item_segurado'] = $params['id_item_segurado'];

        $ProcessosEmpresas = new Sinistro_Model_ProcessosEmpresas();
        $dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($params['id_processo']);

		$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro/laudofinalitemsegurado.js');
        $this->view->jQuery()->addStylesheet('/resources/css/sinistro/laudo.css');

		// Configura paramentro para campo 'Área Sinistrada' ser um campo bloqueado apenas exibindo a área da quadra
		$dadosForm['fl_area_sinistrada_readonly'] = true;

        $Model = $this->getModel();
        $Form = $this->getForm($dadosForm);

        $this->view->back = '/'.$this->_request->module.'/lf007/form/id_laudo_final/'.$params['id_laudo_final'].'/id_processo/'.$params['id_processo'];

        if($this->getRequest()->isPost()) {

            $Form->populate($params);

			$TotalizacaoPerdas = $this->calculaTotalizacaoPerdas($params);

            if($Form->isValid($Form->getValues())) {
                Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

                $dados = $Form->getValues();

                $dados['dt_vistoria'] = Agro_Util::formatDate($dados['dt_vistoria_data'].' '.$dados['dt_vistoria_hora'].' '.$dados['dt_vistoria_minutos'], 'yyyy-MM-dd HH:mm:ss');

                if(count($TotalizacaoPerdas['amostras_validas']) == 0) {
                    $erros[] = 'Informe pelo menos uma amostra';
                    $this->view->showMessage($erros, 'error');
                } else {

                    $dados = array_merge($TotalizacaoPerdas, $dados);

                    $params['id_laudo_final_item_segurado'] = $Model->save($dados);

                    if($params['id_laudo_final_item_segurado']) {
                        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                        $this->view->showMessage(MSG_SUCCESS,'success');
                    } else {
                        Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                        $this->view->showMessage($Model->getMessages(), 'error');
                    }
                }
            } else {
                $this->view->showMessage($this->getAllFormErros(array($Form),$_POST), 'error');
				$arAmostras = $TotalizacaoPerdas['amostras_validas'];
            }
        }
        
		$this->view->data = array();
		$this->view->data['id_laudo_final'] = $params['id_laudo_final'];
		$this->view->data['amostras'] = array();

        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf007ItensSegurados = $this->getModelLf007ItensSegurados();

            $dataLf007ItensSegurados = $Model_Lf007ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final_item_segurado']);

            if ($dataLf007ItensSegurados) {
                $params = array_merge($dataLf007ItensSegurados, $params);
            }

			if (count($arAmostras) > 0) {
				$this->view->data['amostras'] = $arAmostras;
			} else {
				$this->view->data['amostras'] = $Model->getAmostras($params['id_laudo_final_item_segurado']);
			}

        } else {
        	$Form->setReadOnly(true);
		}
		
		if (count($arAmostras) > 0) {
			$this->view->data['amostras'] = $arAmostras;
		}
		
        $Form->populate($params);

		$this->view->form = $Form;

        $this->view->data['vl_percent_perdas'] = $params['vl_percent_perdas'];
        $this->view->data['vl_percent_perda_qualidade'] = $params['vl_percent_perda_qualidade'];
        $this->view->data['configuracoes'] = $this->getConfiguracoesPlanilhaTP($params['vl_percent_perda_qualidade']);
    }

    public function calculaTotalizacaoPerdas($params) {

        $Configuracoes = $this->getConfiguracoesPlanilhaTP();
        $data['amostras_validas'] = array();
        $somaPerdasAmostras = 0;

        for ($y = 1; $y <= $Configuracoes['nr_amostras']; $y++) {
            $flAmostraValida = false;
            $Amostra = array();

            if (
                is_numeric($params['ds_estadio'][$y])  &&
                is_numeric($params['vl_percent_plantas_mortas'][$y]) &&
                is_numeric($params['vl_percent_bulbos_danificados'][$y]) &&
                is_numeric($params['vl_percent_desfolhamento'][$y])
            ) {
                $flAmostraValida = true;

                $Amostra['ds_estadio'] = $params['ds_estadio'][$y];
                $Amostra['vl_percent_plantas_mortas'] = $params['vl_percent_plantas_mortas'][$y];
                $Amostra['vl_percent_bulbos_danificados'] = $params['vl_percent_bulbos_danificados'][$y];
                $Amostra['vl_percent_desfolhamento'] = $params['vl_percent_desfolhamento'][$y];
                $Amostra['vl_percent_dano_bruto'] = $params['vl_percent_dano_bruto'][$y];
                
                $ModelLf007Aux = new Safra15_Model_Lf007Auxiliar();

                $Amostra['vl_percent_dano_bruto'] = $ModelLf007Aux->get($Amostra['ds_estadio'],$Amostra['vl_percent_desfolhamento']);

                // Cálculo População restante (%)
                $Amostra['vl_percent_populacao_restante'] = 100 - $Amostra['vl_percent_plantas_mortas'];

                // Cálculo Bulbos danificados (%)
                $Amostra['vl_percent_total_dano_bulbo'] = round((($Amostra['vl_percent_bulbos_danificados']/100) * ($Amostra['vl_percent_populacao_restante']/100)) * 100, 2);

                // Cálculo Total dano direto (%)
                $Amostra['vl_percent_total_dano_direto'] = $Amostra['vl_percent_plantas_mortas'] + $Amostra['vl_percent_total_dano_bulbo'];

                // Cálculo Capacidade produtiva restante (%)
                $Amostra['vl_percent_capacidade_produtiva_restante'] = 100 - $Amostra['vl_percent_total_dano_direto'];

                // Cálculo Dano (%)
                $Amostra['vl_percent_dano'] = round((($Amostra['vl_percent_dano_bruto']/100) * ($Amostra['vl_percent_capacidade_produtiva_restante']/100)) * 100, 2);

                // Cálculo Total dano granizo
                $Amostra['vl_percent_total_dano_granizo'] = $Amostra['vl_percent_total_dano_direto'] + $Amostra['vl_percent_dano'];

                $somaPerdasAmostras += $Amostra['vl_percent_total_dano_granizo'];
            }

            if ($flAmostraValida) {
                $data['amostras_validas'][$y] = $Amostra;
            }
        }

        if (count($data['amostras_validas']) > 0) {
            $data['vl_percent_perdas'] = round($somaPerdasAmostras / (count($data['amostras_validas'])), 2);
        }

        return $data;
    }

    public function getConfiguracoesPlanilhaTP($vlPercentPerdaQualidade = null) {
        /*
         * Configurações da planilha de Totalização de Perdas
         */
        $Configuracoes = array();

        /*
         * Colunas
         */
        $Colunas = array();
        $Colunas[] = array(
            'nr_coluna'		    => 1,
            'ds_nome_campo'		=> 'ds_estadio',
            'ds_nome_exibicao'  => 'Estádio',
            'ds_tipo'			=> 'select',
            'ar_opcoes'			=> $this->getArrayEstadios()
        );

        $Colunas[] = array(
            'nr_coluna'		    => 2,
            'ds_nome_campo'		=> 'vl_percent_plantas_mortas',
            'ds_nome_exibicao'  => 'Plantas mortas (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 3,
            'ds_nome_campo'		=> 'vl_percent_populacao_restante',
            'ds_nome_exibicao'  => 'População remanescente (%)',
			'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 4,
            'ds_nome_campo'		=> 'vl_percent_bulbos_danificados',
            'ds_nome_exibicao'  => 'Bulbos danificados (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'integer'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 5,
            'ds_nome_campo'		=> 'vl_percent_total_dano_bulbo',
            'ds_nome_exibicao'  => 'Total dano Bulbo (%)',
            'ds_tipo'		    => 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 6,
            'ds_nome_campo'		=> 'vl_percent_total_dano_direto',
            'ds_nome_exibicao'  => 'Total dano direto (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 7,
            'ds_nome_campo'		=> 'vl_percent_capacidade_produtiva_restante',
            'ds_nome_exibicao'  => 'CPR Capacidade produtiva restante (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 8,
            'ds_nome_campo'		=> 'vl_percent_desfolhamento',
            'ds_nome_exibicao'  => 'Desfolhamento (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 9,
            'ds_nome_campo'		=> 'vl_percent_dano_bruto',
            'ds_nome_exibicao'  => 'Dano bruto cfe. tabela (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 10,
            'ds_nome_campo'		=> 'vl_percent_dano',
            'ds_nome_exibicao'  => 'Dano (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 11,
            'ds_nome_campo'		=> 'vl_percent_total_dano_granizo',
            'ds_nome_exibicao'  => 'Total dano granizo (%)',
            'ds_tipo'			=> 'result'
        );

        $Configuracoes['colunas'] = $Colunas;

        /*
         * Número de amostras
         */
        $Configuracoes['nr_amostras'] = 11;

        return $Configuracoes;
    }

    public function getArrayEstadios() {
        $Estadios = array(
            '1'=>'1',
        	'2'=>'2',
        	'3'=>'3',
            '4'=>'4',
            '5'=>'5',
            '6'=>'6.1',
        	'7'=>'6.2',
            '8'=>'7',
            '9'=>'8'
        );
        return $Estadios;
    }
}
