<?php

class ServicioLinea extends AppObjeto {

	//Configuración de tabla
	
	protected static $_aliasTabla = 'a';
	protected static $_nombreTabla = 'LICON';
	protected static $_campoPK = 'CLAVE_LC';
	protected static $_tipo_primary = self::APP_TIPO_PRIMARY_STRING;
	
	//public $idServicioLinea;
	public $numeroServicio;
	public $incluido;
	public $concepto;
	public $descripcionConcepto;
	public $cantidad;
	public $precio;
	public $descuento;
	public $subtotal;
	public $iva;
	public $grupo;
	public $tarifa;
	
	CONST CONCEPTO_EXTRA_HORAS = 5;
	CONST CONCEPTO_EXTRA_KMS = 7;
	
	
	protected static function initMetaDatos(){
	
		self::addPropiedadBD('a', 'NUMERO', 'numeroServicio', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DESCCON', 'descripcionConcepto', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CONCEPTO', 'concepto', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CANTIDAD', 'cantidad', self::META_INT);
		self::addPropiedadBD('a', 'PRECIO', 'precio', self::META_DECIMAL);
		self::addPropiedadBD('a', 'DTO', 'descuento', self::META_DECIMAL);
		self::addPropiedadBD('a', 'SUBTOTAL', 'subtotal', self::META_DECIMAL);
		self::addPropiedadBD('a', 'INCLUIDO', 'incluido', self::META_INT);
		self::addPropiedadBD('a', 'IVA', 'iva', self::META_DECIMAL);
		self::addPropiedadBD('a', 'GRUPO', 'grupo', self::META_VARCHAR);
		self::addPropiedadBD('a', 'TARIFA', 'tarifa', self::META_VARCHAR);
	}
	
	
	public function save() {
		$db = self::getDb();
		$data = $this->formatearObjToBDCampos();
		if (isset ( $this->numeroServicio ) && $this->numeroServicio > 0) {
			$where = array (
						'numero = \'' . $this->numeroServicio.'\' and concepto = '.$this->concepto
				);
			try {
				$db->update ( $data, $where );
			} catch (Exception $e) {
				echo 'save principal:'.$e;
			}
				
		} 
		// no se contempla poder insertar servicio linea
		/*else {
			$id = $db->insert ( $data );
			if ($id !== false) {
				$this->id = $id;
				$this->$nombreId = $id;
			}
		}
		*/
	}
	
	
	/*
	public function save() {

	
		$nombreId = $this->nombreId ();
	
		$data = $this->datos ( true );
	
	
		if (isset ( $this->id ) && $this->id > 0) {
				$where = array (
						'numero = \'' . $this->numeroServicio.'\' and concepto = '.$this->concepto
				);
				
				
			// echo $this->update($data, $where);
				
			try {
				
			
				$this->db->update ( $data, $where );
			} catch (Exception $e) {
				echo 'save principa:'.$e;
				die();
			}
				
				
		} else {
			$id = $this->db->insert ( $data );
			if ($id !== false) {
				$this->id = $id;
			}
		}
	}
	*/
	
	
	public function __construct($id = null, $concepto = NULL) {
		/*
		$class = get_class ( $this );
		$this->_name = $class;
	
		if(isset($class::$name) &&$class::$name)
			$this->_name = $class::$name;
		if(!$this->_primary)
			$this->_primary = $class::$primary;
		$this->db = new AppDatabase ( $this->_name, null, $class::$_adaptador, $this->_primary );
		*/
		$this->initMetaDatos ();
		if (isset ( $id ) && $id != null && isset($concepto) && $concepto!=null)
			$this->carga ( $id, $concepto );
	}
	
	/**
	 * Carga un ServicioLinea. Si no está no carga nada.
	 * @param unknown $numeroServicio
	 * @param unknown $tipo
	 * @return boolean
	 */
	protected function carga($numeroServicio, $tipo) {
		
		$select = self::selectObjeto();
		$select->where('a.numero =?',$numeroServicio);
		$select->where('a.concepto = ?',$tipo);
		$res = self::selectExecute($select,null,true);
		$row = $res->getDatos();
		
		if (!$res->estaVacio()) {
			$row = $row[0];
			$this->id = 1;
			$this->asignaDatosObjeto($row);			
		} else {
			$this->numeroServicio = $numeroServicio;
			$this->concepto = $tipo;
		}
	}
	
	
	public function asignarCantidad($cantidad){
		$this->cantidad = $cantidad;
		$this->subtotal = $this->cantidad * $this->precio;
		if ($cantidad > 0)
			$this->incluido = -1;
		else 
			$this->incluido = 0;
			
	}
	
	public static function getParkingByServicio($id){
		$select = self::camposConsulta();
		$select->where('a.numero=?',$id);
		$select->where('a.incluido=-1');
		$select->where('a.concepto=24');
		
		$result = self::fetchAll($select);
		
		if(count($result)){
			$objetos = self::arrayToObjeto($result);
			return $objetos[0];
		}
		
	}
	public static function getByServicio($id){
		$select = self::selectObjeto();
		$select->where('numero=?',$id);
		$select->where('incluido=-1');
		$res = self::selectExecute($select);
		return $res;
		//return self::arrayToObjeto($res->getDatos());		
	}
	
	public static function lst_byServicio($parametros){
		$select = self::camposConsulta();
		$select->where('numero=?',$parametros['servicio']);
		$resultado = self::cargaListado($select, $parametros);
		return $resultado->render();
		
		
	}

	public static function getLineaConKmyHoras($idServicio) {
		
		$select = self::selectObjeto();
		$select->joinLeft(array('con'=>'concep_factur'), 'con.codigo=a.concepto',array('km','horas'));
		$select->joinInner(array('com_tar'=>'comporta_tarifas'), 'com_tar.ntari=a.tarifa and com_tar.concepto=a.concepto',array());
		$select->where('a.numero=?',$idServicio);
		$select->where('com_tar.ind_incluido=-1');
		$res = self::selectExecute($select);
		if ($res->estaVacio())
			return array();
		else
			return $res->toArray();

	}
	
}