<?

class Safra14_Lf009itemseguradoController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
	}
	
	public function getModel() {
	    return new Safra14_Model_Lf009ItensSeguradosAmostras();
	}
	
    public function getModelLf009ItensSegurados() {
        return new Safra14_Model_Lf009ItensSegurados();
    }   
    
	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');
        
        $Model = $this->getModel();
        $Form = $this->getForm($dadosForm);
		
        $this->view->back = '/'.$this->_request->module.'/lf009/form/id_laudo_final/'.$params['id_laudo_final'].'/id_processo/'.$params['id_processo'];
        
        //POST
	    if($this->getRequest()->isPost()) {
            $Form->populate($params);
            $TotalizacaoPerdas = $this->calculaPerdasCitricos($params);

            $erros = array();

			if($Form->isValid($Form->getValues())) {
				
	            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
				
				$dados = $Form->getValues();				
				
	            $dados['id_laudo_final'] = $params['id_laudo_final'];
	            $dados['id_item_segurado'] = $params['id_item_segurado'];
	            $dados['id_laudo_final_item_segurado'] = $params['id_laudo_final_item_segurado'];
				$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) {
	
					$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();

        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf009ItensSegurados = $this->getModelLf009ItensSegurados();
            
            $dataLf009ItensSegurados = $Model_Lf009ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final_item_segurado']);
            
			if ($dataLf009ItensSegurados) {
                $params['vl_percent_perda_qualidade'] = $dataLf009ItensSegurados['vl_percent_perda_qualidade'];
				$params = array_merge($dataLf009ItensSegurados, $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);
		}

        $Form->populate($params);

		$this->view->form = $Form;
        $this->view->data['vl_percent_perdas'] = $params['vl_percent_perda_qualidade'];
        $this->view->data['vl_percent_perda_qualidade'] = $params['vl_percent_perda_qualidade'];
        $this->view->data['configuracoes'] = $this->getConfiguracoesPlanilhaCF();        
    }

	public function calculaPerdasCitricos($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 - não entra com o valor percent
		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;
        }

        $data['vl_percent_perdas'] = $data['vl_percent_perda_qualidade']; 
        
        return $data;
    }    

    
    public function getConfiguracoesPlanilhaCF() {

        $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;
    }
    
}
