<?
/**
 * Controller
 * 
 * Laudo final Tipo LF014 / Safra16 - Item Segurado (Classificação de Frutos)
 * 
 * @author Samir Ortiz
 * @date 14/02/2012
 *
 */
class Safra16_Lf014itemseguradocfController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Classificação de Frutos';
	}

	public function getModel() {
	    return new Safra16_Model_Lf014ItensSeguradosCFAmostras();
	}
	
	public function getModelLf014ItensSegurados() {
	    return new Safra16_Model_Lf014ItensSegurados();
	}	
    
    public function formAction() {
        
        $Model = $this->getModel();
        
        $params = $this->getRequest()->getParams();
        
        $this->view->back = '/'.$this->_request->module.'/lf014/form/id_laudo_final/'.$params['id_laudo_final']."/id_processo/".$params['id_processo'];
		$this->view->jQuery()->addStylesheet('/resources/css/sinistro/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_Lf014ItensSegurados = $this->getModelLf014ItensSegurados();

            $dataLf014ItensSegurados = $Model_Lf014ItensSegurados->fetchRow($Model_Lf014ItensSegurados->select()->where('id_laudo_final_item_segurado = ?', $params['id_laudo_final_item_segurado']));
            
            if ($dataLf014ItensSegurados) {
                $params['fl_classificacao_frutos'] = $dataLf014ItensSegurados['fl_classificacao_frutos'];
                $params['vl_percent_perda_qualidade'] = $dataLf014ItensSegurados['vl_percent_perda_qualidade'];
            }
            
            if ($dataLf014ItensSegurados['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 Sinistro_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;
        
        //cat1
        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'] * 25;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat2_total'];
        }
        
        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat1_cat3_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat3_total'] * 50;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat3_total'];
        } 

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat1_cat4_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat4_total'] * 75;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat1_cat4_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'];
        }
        
        //cat2
        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_cat3_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_cat3_total'] * 25;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_cat3_total'];
        }
        
        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat2_cat4_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_cat4_total'] * 50;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_cat4_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total'] * 75;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat2_descarte_total'];
        }
        
        
        //cat3
        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat3_cat3_total', $params)) {
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat3_cat3_total'];
        }
        
        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat3_cat4_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat3_cat4_total'] * 25;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat3_cat4_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat3_descarte_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat3_descarte_total'] * 50;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat3_descarte_total'];
        }
        
        //cat4
        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat4_cat4_total', $params)) {
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat4_cat4_total'];
        }

        if (array_key_exists($Configuracoes['ds_prefixo_com_dano'].'cat4_descarte_total', $params)) {
            $vlTotalPerc += $params[$Configuracoes['ds_prefixo_com_dano'].'cat4_descarte_total'] * 25;
            $nrTotalFrutos += $params[$Configuracoes['ds_prefixo_com_dano'].'cat4_descarte_total'];
        }
        
        //descarte
        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'		=> 'cat3',
            'ds_nome_exibicao'  => 'CAT 3'
        );        

        $Categorias[] = array(
            'nr_categoria'		=> 4,
            'ds_nome_campo'		=> 'cat4',
            'ds_nome_exibicao'  => 'CAT 4'
        );        
        
        $Categorias[] = array(
            'nr_categoria'		=> 5,
            'ds_nome_campo'		=> 'descarte',
            'ds_nome_exibicao'  => 'Descarte'
        );
        
        $Configuracoes['categorias'] = $Categorias;
        
        /*
         * Valores de depreciação
         */
        $Depreciacao = array();
        $Depreciacao['cat1_cat1'] = 0;
        $Depreciacao['cat1_cat2'] = 25;
        $Depreciacao['cat1_cat3'] = 50;
        $Depreciacao['cat1_cat4'] = 75;
        $Depreciacao['cat1_descarte'] = 100;
        $Depreciacao['cat2_cat2'] = 0;
        $Depreciacao['cat2_cat3'] = 25;
        $Depreciacao['cat2_cat4'] = 50;
        $Depreciacao['cat2_descarte'] = 75;
        $Depreciacao['cat3_cat3'] = 0;
        $Depreciacao['cat3_cat4'] = 25;
        $Depreciacao['cat3_descarte'] = 50;
        $Depreciacao['cat4_cat4'] = 0;
        $Depreciacao['cat4_descarte'] = 25;
        $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;
    }

}
