<?
/**
 * Controller
 * 
 * Laudo final Tipo LF005 / Safra14
 * 
 * @author Fernando Nunes
 * @date 21/07/2011
 *
 */
class Safra14_Lf005itemseguradoController 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_Lf005ItensSegurados();
	}
	
	public function getForm($dados = array()) {
        return new Safra14_Form_Lf005ItemSegurado(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');
		
		$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'];
        
        // 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.'/lf005/form/id_laudo_final/'.$params['id_laudo_final'].'/id_processo/'.$params['id_processo'];
        
        if($this->getRequest()->isPost()) {

            $Form->populate($params);
			
			$ValoresPerdas = $this->calculaPerdas($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($ValoresPerdas['nr_total_cachos'] == 0) {
                    $erros[] = 'Não foram informados valores para as perdas';
                    $this->view->showMessage($erros, 'error');
                } else {
                
                    $dados = array_merge($ValoresPerdas, $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 {

            	$dados = $Form->getValues();

            	$erros[] = $this->getAllFormErros(array($Form),$_POST);
            	
            	if(!$dados['fl_floracao']){
            		$erros[] = "Informe a fase da cultura";
            	}

				if(!$dados['fl_indenizacao_fitossanitaria']){
            		$erros[] = "Informe se tem direito à fito";
            	}
            	
            	if(!$dados['nr_amostras']){
            		$erros[] = "Informe o número de amostras";
            	}

                if(!$dados['id_estadio_fenologico']){
            		$erros[] = "Informe o estádio fenológico";
            	}            	
            	
            	if(!$dados['fl_assinatura_segurado']){
            		$erros[] = "Informe a assinatura do segurado";
            	}
            	
            	if(!$dados['fl_assinatura_regulador']){
            		$erros[] = "Informe a assinatura do regulador";
            	}
            	
            	if(!$dados['dt_vistoria_data']){
            		$erros[] = "Informe a data da vistoria";
            	}

				if(!$dados['vistoriadores']){
            		$erros[] = "Informe o vistoriador";
            	}            	
            	
            	if(!$dados['ds_coordenadas_geograficas']){
            		$erros[] = "Informe as coordenadas geográficas";
            	}            	

				if(!$dados['vl_percent_colhido']){
            		$erros[] = "Informe o percentual colhido";
            	}            	
            	
            	$this->view->showMessage($erros, 'error');
                //$this->view->showMessage($this->getAllFormErros(array($Form),$_POST), 'error');
            }
        }/*else{
        	$this->view->showMessage($this->getAllFormErros(array($Form),$_POST), 'error');
        }*/

        $this->view->data = array();

        if($params['id_laudo_final_item_segurado']) {

            $Model_Lf005ItensSegurados = $this->getModel();
            
            $dataLf005ItensSegurados = $Model_Lf005ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final_item_segurado']);

            if ($dataLf005ItensSegurados) {
                $params = array_merge($dataLf005ItensSegurados, $params);
            }

        }
        //print_r($params);die;
        $Form->populate($params);

		$this->view->form = $Form;
        
        
        $this->view->data = $params;
    }
    
    public function calculaPerdas($params) {
        
        $data = array();
        $count = 0;
        
        // Nº total de cachos: soma das quantidades informados em todas as faixas de valores
        $data['nr_total_cachos'] = 0;
        
        // Soma de todas as multiplicações das quantidades informadas pelo percentual correpondente
        $data['vl_percent_perta_soma'] = 0;
        
        // Percorre as faixas de valores, multiplicando o quantidade informada pelo percentual correpondente
        while ($count <= 100) {
            if ($params['nr_cachos_percent_perda_'.$count]) {
                $data['nr_cachos_percent_perda_'.$count] = $params['nr_cachos_percent_perda_'.$count];
                $data['vl_percent_perda_'.$count] = $params['nr_cachos_percent_perda_'.$count] * $count;
                
                $data['nr_total_cachos'] += $params['nr_cachos_percent_perda_'.$count];
                $data['vl_percent_perda_soma'] += $data['vl_percent_perda_'.$count]; 
            }
            
            if ($count < 10) {
                $count += 5;
            } else {
                $count += 10;
            }
        }
        
        // Cálculo o percentual de perdas final
        if ($data['nr_total_cachos'] > 0) {
            $data['vl_percent_perdas'] = round($data['vl_percent_perda_soma'] / $data['nr_total_cachos'], 2);
        }

        return $data;
    }
}
