<?
/**
 * Controller
 *
 * Laudo final Tipo LF008 / Safra16 - Item Segurado
 *
 * @author Marcelo Paulino
 * @date 19/07/2011
 *
 */
class Safra16_Lf008itemseguradoController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
	}

	public function getModel() {
	    return new Safra16_Model_Lf008ItensSeguradosAmostras();
	}

    public function getModelLf008ItensSegurados() {
        return new Safra16_Model_Lf008ItensSegurados();
    }

	public function getForm($dados = array()) {
	    return new Safra16_Form_Lf008ItemSegurado(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');

		// 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.'/lf008/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['id_laudo_final'] = $params['id_laudo_final'];
        $this->view->data['amostras'] = array();

        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf008ItensSegurados = $this->getModelLf008ItensSegurados();

            $dataLf008ItensSegurados = $Model_Lf008ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final_item_segurado']);

            if ($dataLf008ItensSegurados) {
                $params = array_merge($dataLf008ItensSegurados, $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_perdas'];
        $this->view->data['vl_percent_perda_qualidade'] = $params['vl_percent_perda_qualidade'];
        $this->view->data['configuracoes'] = $this->getConfiguracoesPlanilhaTP($params['vl_percent_perda_qualidade']);
    }

    public function calculaTotalizacaoPerdas($params) {

        $Configuracoes = $this->getConfiguracoesPlanilhaTP();
        $data['amostras_validas'] = array();
        $somaPerdasAmostras = 0;

        $SomaAmostras  = array();
        $TotalAmostras = array();

        for ($y = 1; $y <= $Configuracoes['nr_amostras']; $y++) {
            $Amostra = array();

            if (
                is_numeric($params['nr_sem_dano'][$y])  &&
                is_numeric($params['nr_cortes_batidas_tunica'][$y]) &&
                is_numeric($params['nr_cortes_1_capa'][$y]) &&
                is_numeric($params['nr_cortes_2_capa'][$y]) &&
                is_numeric($params['nr_cortes_3_capa'][$y])
            ) {
                $Amostra['nr_sem_dano']              = $params['nr_sem_dano'][$y];
                $Amostra['nr_cortes_batidas_tunica'] = $params['nr_cortes_batidas_tunica'][$y];
                $Amostra['nr_cortes_1_capa']         = $params['nr_cortes_1_capa'][$y];
                $Amostra['nr_cortes_2_capa']         = $params['nr_cortes_2_capa'][$y];
                $Amostra['nr_cortes_3_capa']         = $params['nr_cortes_3_capa'][$y];

                $SomaAmostras['nr_soma_sem_dano']              += $params['nr_sem_dano'][$y];
                $SomaAmostras['nr_soma_cortes_batidas_tunica'] += $params['nr_cortes_batidas_tunica'][$y];
                $SomaAmostras['nr_soma_cortes_1_capa']         += $params['nr_cortes_1_capa'][$y];
                $SomaAmostras['nr_soma_cortes_2_capa']         += $params['nr_cortes_2_capa'][$y];
                $SomaAmostras['nr_soma_cortes_3_capa']         += $params['nr_cortes_3_capa'][$y];

                $data['amostras_validas'][$y] = $Amostra;
            }

        }

        if (count($data['amostras_validas']) > 0) {
            $TotalAmostras['vl_total_sem_dano']              = $SomaAmostras['nr_soma_sem_dano'] * 0;
            $TotalAmostras['vl_total_cortes_batidas_tunica'] = $SomaAmostras['nr_soma_cortes_batidas_tunica'] * 5;
            $TotalAmostras['vl_total_cortes_1_capa']         = $SomaAmostras['nr_soma_cortes_1_capa'] * 30;
            $TotalAmostras['vl_total_cortes_2_capa']         = $SomaAmostras['nr_soma_cortes_2_capa'] * 70;
            $TotalAmostras['vl_total_cortes_3_capa']         = $SomaAmostras['nr_soma_cortes_3_capa'] * 100;

            $somaAmostras  = ($SomaAmostras['nr_soma_sem_dano'] + $SomaAmostras['nr_soma_cortes_batidas_tunica'] + $SomaAmostras['nr_soma_cortes_1_capa'] + $SomaAmostras['nr_soma_cortes_2_capa'] + $SomaAmostras['nr_soma_cortes_3_capa']);
            $totalAmostras = ($TotalAmostras['vl_total_sem_dano'] + $TotalAmostras['vl_total_cortes_batidas_tunica'] + $TotalAmostras['vl_total_cortes_1_capa'] + $TotalAmostras['vl_total_cortes_2_capa'] + $TotalAmostras['vl_total_cortes_3_capa']);

            $data['vl_percent_perdas'] = round(($totalAmostras / $somaAmostras), 2);
        }

        return $data;
    }

    public function getConfiguracoesPlanilhaTP($vlPercentPerdaQualidade = null) {
        /*
         * Configurações da planilha de Totalização de Perdas
         */
        $Configuracoes = array();

        /*
         * Colunas
         */
        $Colunas = array();

        $Colunas[] = array(
            'nr_linha'		    => 1,
            'ds_nome_campo'		=> 'nr_sem_dano',
            'ds_nome_exibicao'  => 'Sem Dano',
            'ds_campo_soma'     => 'nr_soma_sem_dano',
            'ds_campo_total'    => 'vl_total_sem_dano',
            'vl_percent'        => '0',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_linha'		    => 2,
            'ds_nome_campo'		=> 'nr_cortes_batidas_tunica',
            'ds_nome_exibicao'  => 'Cortes e Batidas na Túnica',
            'ds_campo_soma'     => 'nr_soma_cortes_batidas_tunica',
            'ds_campo_total'    => 'vl_total_cortes_batidas_tunica',
            'vl_percent'        => '5',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_linha'		    => 3,
            'ds_nome_campo'		=> 'nr_cortes_1_capa',
            'ds_nome_exibicao'  => 'Cortes na 1ª Capa',
            'ds_campo_soma'     => 'nr_soma_cortes_1_capa',
            'ds_campo_total'    => 'vl_total_cortes_1_capa',
            'vl_percent'        => '30',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_linha'		    => 4,
            'ds_nome_campo'		=> 'nr_cortes_2_capa',
            'ds_nome_exibicao'  => 'Cortes na 2ª Capa',
            'ds_campo_soma'     => 'nr_soma_cortes_2_capa',
            'ds_campo_total'    => 'vl_total_cortes_2_capa',
            'vl_percent'        => '70',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Colunas[] = array(
            'nr_linha'		    => 5,
            'ds_nome_campo'		=> 'nr_cortes_3_capa',
            'ds_nome_exibicao'  => 'Cortes na 3ª Capa',
            'ds_campo_soma'     => 'nr_soma_cortes_3_capa',
            'ds_campo_total'    => 'vl_total_cortes_3_capa',
            'vl_percent'        => '100',
            'ds_tipo'			=> 'text',
            'ds_class'		    => 'decimal'
        );

        $Configuracoes['colunas'] = $Colunas;

        /*
         * Número de amostras
         */
        $Configuracoes['nr_amostras'] = 10;

        return $Configuracoes;
    }

    public function getArrayEstadios() {
        $Estadios = array(
            '1'=>'1',
        	'2'=>'2',
        	'3'=>'3',
            '4'=>'4',
            '5'=>'5',
            '6'=>'6',
            '7'=>'7',
            '8'=>'8'
        );
        return $Estadios;
    }
}
