<?
/**
 * Controller
 *
 * Laudo final Tipo LF014 / Safra17 - Item Segurado
 *
 * @author Samir Ortiz
 * @date 14/02/2012
 *
 */
class Regulacao_Lf014itemseguradoController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
	}

	public function getModel() {
	    return new Regulacao_Model_Lf014ItensSeguradosAmostras();
	}

    public function getModelLf014ItensSegurados() {
        return new Regulacao_Model_Lf014ItensSegurados();
    }

	public function getForm($dados = array()) {
	    return new Sinistro2_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 Sinistro2_Model_ProcessosEmpresas();
        $dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($params['id_processo']);

		$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro2/laudofinalitemsegurado.js?nocache='.rand(1,1000));
        $this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudo.css');

		$Cultura = new Produto_Model_Culturas();
		$dadosForm['id_cultura'] = $Cultura->getCulturaByProposta($params['id_proposta']);

		$this->view->id_cultura = $dadosForm['id_cultura'];
		$params['id_cultura'] = $dadosForm['id_cultura'];
		$estadios = $this->getArrayEstadios($params['id_cultura']);


		/*
		 * Verifica se já possui identificador para laudo final - item segurado.
		 * Em caso positivo permite a edição do laudo, pois a Classificação de Frutos já foi informada.
		 * Em caso negativo, bloqueia os campos, pois a Classificação de Frutos ainda não foi informada, e exibe
		 * mensagem informando que a Classificação deve ser informada.
		 */

		if ($params['id_laudo_final_item_segurado']) {
			$dadosForm['readonly'] = false;
		} else {
			$dadosForm['readonly'] = true;
			$this->view->showMessage('Informe a classificação de frutos antes de inserir o laudo final para esta quadra.', 'error');
		}

		// 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);

        if($params['fl_item_digitado']){
        	$this->view->back = '/sinistro2/processo/view/id/'.$params["id_processo"].'#regulacao_laudos';
        } else {
        	$this->view->back = '/'.$this->_request->module."/lf014/form/id_proposta/".$params["id_proposta"]."/id_processo/".$params["id_processo"]."/id_cobertura/".$params["id_cobertura"]."/id_vistoria/".$params["id_vistoria"]."/id_laudo_final/".$params["id_laudo_final"];
        }        
        //$this->view->back = '/'.$this->_request->module.'/lf014/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['amostras'] = array();

		$Form->populate($params);

        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf014ItensSegurados = $this->getModelLf014ItensSegurados();

            $dataLf014ItensSegurados = $Model_Lf014ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final_item_segurado']);

            if ($dataLf014ItensSegurados) {
                	$params = array_merge($dataLf014ItensSegurados, $params);
                	if($params['vl_percent_colhido'] == '0.00' || $params['vl_percent_colhido'] == ''){
						unset($params['fl_assinatura_segurado']);
						unset($params['fl_assinatura_regulador']);
                	}
                	$Form->populate($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);
		}

		$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'],$estadios);
    }

    public function calculaTotalizacaoPerdas($params) {

        $Configuracoes = $this->getConfiguracoesPlanilhaTP(null,$estadios);
        $data['amostras_validas'] = array();
        $somaPerdasAmostras = 0;

        for ($y = 1; $y <= $Configuracoes['nr_amostras']; $y++) {
            $flAmostraValida = false;
            $Amostra = array();

            if (
                is_numeric($params['id_estadio_fenologico'][$y])  &&
                is_numeric($params['vl_percent_plantas_mortas'][$y]) &&
                is_numeric($params['vl_percent_perda_producao_reducao_stand'][$y]) &&
                is_numeric($params['nr_total_frutos_produzidos_plantas'][$y]) &&
                is_numeric($params['nr_atual_frutos_plantas'][$y]) &&
                is_numeric($params['vl_percent_desfolhamento'][$y]) &&
                is_numeric($params['vl_percent_dano_bruto'][$y])
            ) {
                $flAmostraValida = true;

                $Amostra['id_estadio_fenologico'] = $params['id_estadio_fenologico'][$y];
                $Amostra['vl_percent_plantas_mortas'] = $params['vl_percent_plantas_mortas'][$y];
                $Amostra['vl_percent_perda_producao_reducao_stand'] = $params['vl_percent_perda_producao_reducao_stand'][$y];
                $Amostra['nr_total_frutos_produzidos_plantas'] = $params['nr_total_frutos_produzidos_plantas'][$y];
                $Amostra['nr_atual_frutos_plantas'] = $params['nr_atual_frutos_plantas'][$y];
                $Amostra['vl_percent_frutos_danificados'] = $params['vl_percent_frutos_danificados'][$y];
                $Amostra['vl_percent_desfolhamento'] = $params['vl_percent_desfolhamento'][$y];
                $Amostra['vl_percent_dano_bruto'] = $params['vl_percent_dano_bruto'][$y];

                // Cálculo População restante (%)
                $Amostra['vl_percent_populacao_restante'] = 100 - $Amostra['vl_percent_perda_producao_reducao_stand'];

                // Cálculo Produção representativa (%)
                if ($Amostra['nr_atual_frutos_plantas'] > 0 && $Amostra['nr_total_frutos_produzidos_plantas'] > 0) {
                	$Amostra['vl_percent_producao_representativa'] = round($Amostra['nr_atual_frutos_plantas'] / $Amostra['nr_total_frutos_produzidos_plantas'] * 100, 2);
				} else {
					$Amostra['vl_percent_producao_representativa'] = 0;
				}

                // Cálculo Total dano fruto (%)
                $Amostra['vl_percent_total_dano_fruto'] = round((($Amostra['vl_percent_populacao_restante']/100) * ($Amostra['vl_percent_producao_representativa']/100) * ($Amostra['vl_percent_frutos_danificados']/100)) * 100, 2);

                // Cálculo Total dano direto (%)
                $Amostra['vl_percent_total_dano_direto'] = $Amostra['vl_percent_perda_producao_reducao_stand'] + $Amostra['vl_percent_total_dano_fruto'];

                // 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, $estadios) {

        /*
         * Configurações da planilha de Totalização de Perdas
         */
        $Configuracoes = array();

        /*
         * Colunas
         */

        $Colunas = array();
        $Colunas[] = array(
            'nr_coluna'		    => 1,
            'ds_nome_campo'		=> 'id_estadio_fenologico',
            'ds_nome_exibicao'  => 'Estádio',
            'ds_tipo'			=> 'select',
            'ar_opcoes'			=> $estadios
        );

        $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_perda_producao_reducao_stand',
            'ds_nome_exibicao'  => 'Perda produção red. estande (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 4,
            'ds_nome_campo'		=> 'vl_percent_populacao_restante',
            'ds_nome_exibicao'  => 'População restante (%)',
			'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 5,
            'ds_nome_campo'		=> 'nr_total_frutos_produzidos_plantas',
            'ds_nome_exibicao'  => 'Nº total frutos produzidos em 4 plantas',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'integer'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 6,
            'ds_nome_campo'		=> 'nr_atual_frutos_plantas',
            'ds_nome_exibicao'  => 'Nº atual frutos produzidos em 4 plantas',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'integer'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 7,
            'ds_nome_campo'		=> 'vl_percent_producao_representativa',
            'ds_nome_exibicao'  => 'Produção representativa (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 8,
            'ds_nome_campo'		=> 'vl_percent_frutos_danificados',
            'ds_nome_exibicao'  => 'Frutos danificados (%)',
            'ds_tipo'			=> 'label-hidden',
            'value'             => $vlPercentPerdaQualidade
        );

        $Colunas[] = array(
            'nr_coluna'		    => 9,
            'ds_nome_campo'		=> 'vl_percent_total_dano_fruto',
            'ds_nome_exibicao'  => 'Total dano fruto (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 10,
            'ds_nome_campo'		=> 'vl_percent_total_dano_direto',
            'ds_nome_exibicao'  => 'Total dano direto (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 11,
            'ds_nome_campo'		=> 'vl_percent_capacidade_produtiva_restante',
            'ds_nome_exibicao'  => 'Capacidade produtiva restante (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 12,
            'ds_nome_campo'		=> 'vl_percent_desfolhamento',
            'ds_nome_exibicao'  => 'Desfolhamento (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 13,
            'ds_nome_campo'		=> 'vl_percent_dano_bruto',
            'ds_nome_exibicao'  => 'Dano bruto cfe. tabela (%)',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 13,
            'ds_nome_campo'		=> 'vl_percent_dano',
            'ds_nome_exibicao'  => 'Dano (%)',
            'ds_tipo'			=> 'result'
        );

        $Colunas[] = array(
            'nr_coluna'		    => 14,
            '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($idCultura) {
        $Model_Culturas = new Produto_Model_Culturas();
        $Estadios = $Model_Culturas->getComboEstadios($idCultura);

        return $Estadios;
    }
}
