<?
/**
 * Controller
 *
 * Laudo final Tipo LF001 / Safra17 - Item Segurado (Classificação de Frutos)
 *
 * @author Fernando Nunes
 * @date 16/02/2011
 *
 */
class Regulacao_Lf001itemseguradocfController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Classificação de Frutos';
	}

	public function getModel() {
	    return new Regulacao_Model_Lf001ItensSeguradosCFAmostras();
	}

	public function getModelLf001ItensSegurados() {
	    return new Regulacao_Model_Lf001ItensSegurados();
	}

    public function formAction() {

        $Model = $this->getModel();

        $params = $this->getRequest()->getParams();

        $this->view->back = '/'.$this->_request->module.'/lf001/form/id_laudo_final/'.$params['id_laudo_final']."/id_processo/".$params['id_processo'];
		$this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudo.css');

        if($this->getRequest()->isPost()) {
            $erros = array();
            if ($params['fl_classificacao_frutos'] == null) {
                $erros[] = 'Informe se houve classificação de frutos';
                $this->view->showMessage($erros, 'error');
            } else {
                $ClassificacaoFrutos = $this->calculaClassificacaoFrutos($params);
                if($params['fl_classificacao_frutos'] && count($ClassificacaoFrutos['amostras_validas']) == 0) {
                    $erros[] = 'Informe pelo menos uma amostra';
                    $this->view->showMessage($erros, 'error');
                } else {

                    Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

                    $ClassificacaoFrutos['id_laudo_final'] = $params['id_laudo_final'];
                    $ClassificacaoFrutos['id_item_segurado'] = $params['id_item_segurado'];
                    $ClassificacaoFrutos['id_processo'] = $params['id_processo'];
                    $ClassificacaoFrutos['id_proposta'] = $params['id_proposta'];
                    $ClassificacaoFrutos['id_laudo_final_item_segurado'] = $params['id_laudo_final_item_segurado'];
                    $ClassificacaoFrutos['fl_classificacao_frutos'] = $params['fl_classificacao_frutos'];

                    $params['id_laudo_final_item_segurado'] = $Model->save($ClassificacaoFrutos);

                    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');
                    }
                }
            }
        }

        $this->view->data = array();
        $this->view->data['amostras'] = array();

        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf001ItensSegurados = $this->getModelLf001ItensSegurados();

            $dataLf001ItensSegurados = $Model_Lf001ItensSegurados->fetchRow($Model_Lf001ItensSegurados->select()->where('id_laudo_final_item_segurado = ?', $params['id_laudo_final_item_segurado']));

            if ($dataLf001ItensSegurados) {
                $params['fl_classificacao_frutos'] = $dataLf001ItensSegurados['fl_classificacao_frutos'];
                $params['vl_percent_perda_qualidade'] = $dataLf001ItensSegurados['vl_percent_perda_qualidade'];
            }

            if ($dataLf001ItensSegurados['fl_classificacao_frutos']) {
                $this->view->data['amostras'] = $Model->getAmostras($params['id_laudo_final_item_segurado']);
            }
        }

        $this->view->data['id_proposta'] = $params['id_proposta'];
        $this->view->data['id_processo'] = $params['id_processo'];
        $this->view->data['id_item_segurado'] = $params['id_item_segurado'];
        $this->view->data['id_laudo_final'] = $params['id_laudo_final'];
        $this->view->data['id_laudo_final_item_segurado'] = $params['id_laudo_final_item_segurado'];
        $this->view->data['fl_classificacao_frutos'] = $params['fl_classificacao_frutos'];
        if (!is_null($params['fl_classificacao_frutos']) && $params['fl_classificacao_frutos'] == 0) {
            $this->view->data['fl_disabled'] = true;
        } else {
            $this->view->data['fl_disabled'] = false;
        }

        $this->view->data['vl_percent_perda_qualidade'] = $params['vl_percent_perda_qualidade'];
        $this->view->data['configuracoes'] = $this->getConfiguracoesPlanilhaCF();

		// Verifica se o laudo deve ser exibido como "somente leitura"
		$Model_LaudosFinais = new Sinistro2_Model_LaudosFinais();
		$this->view->data['fl_readonly'] = $Model_LaudosFinais->isReadonly($params['id_laudo_final']);
    }

    public function calculaClassificacaoFrutos($params) {

        $Configuracoes = $this->getConfiguracoesPlanilhaCF();
        $data['amostras_validas'] = array();

        for ($y = 1; $y <= $Configuracoes['nr_amostras']; $y++) {
            $flAmostraValida = false;
            $Amostra = array();
            for ($x = 0; $x < count($Configuracoes['categorias']); $x++) {
                $Categoria1 = $Configuracoes['categorias'][$x];
                $CategoriasRestantes = array_slice($Configuracoes['categorias'], $x);
                foreach ($CategoriasRestantes as $Categoria2) {
                    if($params[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo']][$y]) {
                        $flAmostraValida = true;
                        $params[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo'].'_total'] += $params[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo']][$y];
                        $Amostra[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo']] = $params[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo']][$y];
                    } else {
                        $Amostra[$Configuracoes['ds_prefixo_com_dano'].$Categoria1['ds_nome_campo'].'_'.$Categoria2['ds_nome_campo']] = 0;
                    }
                }
            }

            if ($flAmostraValida) {
                $data['amostras_validas'][] = $Amostra;
            }
        }

        $nrTotalFrutos = 0;
        $vlTotalPerc = 0;

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat1_cat1_total', $params)) {
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat1_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat1_cat2_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat2_total'] * 50;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat2_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat1_descarte_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_descarte_total'] * 100;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_descarte_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat2_cat2_total', $params)) {
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_cat2_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total'] * 50;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'descarte_descarte_total', $params)) {
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'descarte_descarte_total'];
        }

        $params['vlTotalPerc'] = $vlTotalPerc;
        $params['nrTotalFrutos'] = $nrTotalFrutos;

        if($vlTotalPerc && $nrTotalFrutos) {
            $data['vl_percent_perda_qualidade'] = round(($vlTotalPerc / $nrTotalFrutos), 2);
        } else {
            $data['vl_percent_perda_qualidade'] = 0;
        }

        return $data;
    }

    public function getConfiguracoesPlanilhaCF() {
        /*
         * Configurações da planilha de Classificação de Frutos
         */
        $Configuracoes = array();

        /*
         * Categorias de frutos
         */
        $Categorias = array();
        $Categorias[] = array(
            'nr_categoria'		=> 1,
            'ds_nome_campo'		=> 'cat1',
            'ds_nome_exibicao'  => 'CAT 1'
        );

        $Categorias[] = array(
            'nr_categoria'		=> 2,
            'ds_nome_campo'		=> 'cat2',
            'ds_nome_exibicao'  => 'CAT 2'
        );

        $Categorias[] = array(
            'nr_categoria'		=> 3,
            'ds_nome_campo'		=> 'descarte',
            'ds_nome_exibicao'  => 'Descarte'
        );

        $Configuracoes['categorias'] = $Categorias;

        /*
         * Valores de depreciação
         */
        $Depreciacao = array();
        $Depreciacao['cat1_cat1'] = 0;
        $Depreciacao['cat1_cat2'] = 50;
        $Depreciacao['cat1_descarte'] = 100;
        $Depreciacao['cat2_cat2'] = 0;
        $Depreciacao['cat2_descarte'] = 50;
        $Depreciacao['descarte_descarte'] = 0;

        $Configuracoes['depreciacao'] = $Depreciacao;

        /*
         * Número de amostras
         */
        $Configuracoes['nr_amostras'] = 11;

        /*
         * Prefixo dos nomes dos campos
         */
        $Configuracoes['ds_prefixo_com_dano'] = 'nr_categoria_com_dano_';
        $Configuracoes['ds_prefixo_sem_dano'] = 'nr_categoria_sem_dano_';

        return $Configuracoes;
    }

}
