<?php

/**
 * UnidadesController
 * 
 * @author Renato Dehnhardt - 09/08/2010
 */

class Seguro_UnidadesController extends Agro_Controller_Action {
	
	/**
	 * Inicializa a classe
	 * 
	 * @author Renato - 09/08/2010
	 */
	public function init() {
		$this->getHelper('layout')->disableLayout();
	}

	/**
	 * Carrega a tabela de unidades seguradas da proposta
	 * 
	 * @author Renato - 09/08/2010
	 */
	public function tableAction() {
		if ($this->getRequest()->getParam('id_proposta')) {
			$Propostas = new Seguro_Model_Propostas();
			$this->view->proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
		}
	}
	
	/**
	 * Salva as unidades seguradas da proposta
	 * 
	 * @author Renato - 09/08/2010
	 */
	public function salvarAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$Propostas = new Seguro_Model_Propostas();
		$Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
		$result = array('status' => true);
		
		if ($this->getRequest()->isPost()) {
			$ItensSegurados = new Seguro_Model_ItensSegurados();
			$ItensSegurados->getAdapter()->beginTransaction();
			
			try {
				if (is_array($this->getRequest()->getParam('unidade'))) {
					$ItensSegurados->deleteProposta($Session->id_proposta);
					$propriedades = $Proposta->atributos('PROPRIEDADE');
					$unidades = $this->getRequest()->getParam('unidade');
					$Regras = new Agro_Regras();
					
					$validarLimiteIS = Agro_Regras::validarLimiteIS($Proposta->id_proposta_mae, $unidades);

					// Percorre unidades
					foreach ($unidades as $nro => $item) {
						// Atribui o numero do item
						$item['nr_item_segurado'] = $nro;
						
						// Verifica producao garantida
						if ($Proposta->respostas('QUEST_PRODUTIVIDADE_DECLARADA') == 2) {
							
							// Aplica Regra RN_IS_04
							$item = $Regras->RN_IS_04($item);
							if ($item->error) {
								$result['message'] = "Item $nro: ".$item->message;
								$result['status'] = false;
								
								$ItensSegurados->getAdapter()->rollBack();
								break;
							}
						}

						// Valida limite de IS
                        if (!empty($validarLimiteIS['unidades'][$nro])) {
							$result['message'] = "Item $nro: " . $validarLimiteIS['unidades'][$nro]['message'];
							$result['status'] = false;
							
							$ItensSegurados->getAdapter()->rollBack();
							break;
                        }
						
						// Aplica Regra RN_IS_02
						$item = $Regras->RN_IS_02($item, $Proposta, $propriedades);
						if ($item->error) {
							$result['message'] = "Item $nro: ".$item->message;
							$result['status'] = false;
							
							$ItensSegurados->getAdapter()->rollBack();
							break;
						}
						
						// Aplica Regra RN_IS_05
						$item = $Regras->RN_IS_05($item, $Proposta);
						if ($item->error) {
							$result['message'] = "Item $nro: ".$item->message;
							$result['status'] = false;
							
							$ItensSegurados->getAdapter()->rollBack();
							break;
						}
						
						if ($result['status'] == true) {
							$ItensSegurados->save($nro, $item, $Session->id_proposta);
						}
					}
				}
				
				$result['message'] = 'Itens salvos com sucesso.';
				$result['execute'] = "history.go(0)";
				$ItensSegurados->getAdapter()->commit();
			} catch (Exception $e) {
				$this->view->showMessage(MSG_ERROR, 'error', $e);
				$ItensSegurados->getAdapter()->rollBack();
			}
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
}