<?php
class Liquidacion extends AppObjeto {

	const TEXTO_SIN_LIQUIDAR = '<i>Sin Liquidar</i>';
	
	//Propiedades
	protected $codigoServicio;
	protected $fechaInicio;
	protected $horaInicio;
	protected $cocheDeVcc;
	protected $importe;
	protected $coste;
	protected $estaLiquidado;
	protected $fechaLiquidado;
	protected $comisionista1_numero;
	protected $comisionista1_nombre;
	protected $comisionista1_comision_vehiculoDeVcc;
	protected $comisionista1_comision_vehiculoNoDeVcc;
	protected $comisionista1_rapel_vehiculoDeVcc;
	protected $comisionista1_rapel_vehiculoNoDeVcc;
	protected $comisionista2_numero;
	protected $comisionista2_nombre;
	protected $comisionista2_comision_vehiculoDeVcc;
	protected $comisionista2_comision_vehiculoNoDeVcc;
	protected $comisionista2_rapel_vehiculoDeVcc;
	protected $comisionista2_rapel_vehiculoNoDeVcc;
	
		/* para conectar con bd */
	protected static $_aliasTabla = 'c1';
	protected static $_nombreTabla = 'contratos1';
	protected static $_campoPK = 'NUMERO';
	protected static $_tipo_primary = self::APP_TIPO_PRIMARY_STRING;
	
	
	
	// InitMetaDatos

	protected static function initMetaDatos(){
		
		self::addPropiedadBD('c1', 'NUMERO', 'codigoServicio', self::META_VARCHAR);
		self::addPropiedadBD('c1', 'FSALIDA_CON1', 'fechaInicio', self::META_DATE);
		self::addPropiedadBD('c1', 'HSALIDA_CON1', 'horaInicio', self::META_TIME);
		self::addPropiedadBD('c1', 'COSTE_CON1', 'coste', self::META_DECIMAL);
		self::addPropiedadBD('c1', 'LIQ_CON1', 'estaLiquidado', self::META_INT);
		self::addPropiedadBD('c1', 'FLIQ_CON1', 'fechaLiquidado', self::META_DATE);		
		
		self::addTablaRelacion('v2', 'vehiculo2', 'codiint', 'c1', 'vcact_con1');
		self::addPropiedadBD('v2', 'propio', 'cocheDeVcc', self::META_INT);
		
		self::addTablaRelacion('c2', 'contratos2', 'numero', 'c1', 'numero');
		self::addPropiedadBD('c2', 'basei_con2', 'importe', self::META_DECIMAL);
		
		self::addTablaRelacion('comisionista1', 'comisio', 'num_comi', 'c2', 'comisio_con2');
		self::addPropiedadBD('comisionista1', 'num_comi', 'comisionista1_numero', self::META_VARCHAR);
		self::addPropiedadBD('comisionista1', 'nombre', 'comisionista1_nombre', self::META_VARCHAR);
		self::addPropiedadBD('comisionista1', 'porcen', 'comisionista1_comision_vehiculoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista1', 'por_subcontra', 'comisionista1_comision_vehiculoNoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista1', 'subcomi_porcen', 'comisionista1_rapel_vehiculoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista1', 'subcomipor_subcontra', 'comisionista1_rapel_vehiculoNoDeVcc', self::META_DECIMAL);

		self::addTablaRelacion('comisionista2', 'comisio', 'num_comi', 'c2', 'comisio2_con2');
		self::addPropiedadBD('comisionista2', 'num_comi', 'comisionista2_numero', self::META_VARCHAR);
		self::addPropiedadBD('comisionista2', 'nombre', 'comisionista2_nombre', self::META_VARCHAR);
		self::addPropiedadBD('comisionista2', 'porcen', 'comisionista2_comision_vehiculoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista2', 'por_subcontra', 'comisionista2_comision_vehiculoNoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista2', 'subcomi_porcen', 'comisionista2_rapel_vehiculoDeVcc', self::META_DECIMAL);
		self::addPropiedadBD('comisionista2', 'subcomipor_subcontra', 'comisionista2_rapel_vehiculoNoDeVcc', self::META_DECIMAL);
		
	}
	
	// Métodos

	/**
		 * Devuelve los Liquidacions filtrados por parámetros
		 * @param array  $params comercial, mes y año 
		 * @return AppResultado
		 */
		public static function lst_calculateByComisionista($params){

		/*	$potencialLogueado = Usuario::getPotencialLogueado();
			$comercial = $potencialLogueado->getCodigoComisionista();
			$params['comercial'] = $comercial;
			*/
			$res = self::getServiciosConComisiones($params);
			$datos = $res->getDatos();
			$datos = self::calcularComisiones($datos, $params['comercial']);
			foreach ($datos as &$reg) {
				if (!$reg['estaLiquidado'])
					$reg['fechaLiquidado'] =  self::TEXTO_SIN_LIQUIDAR;
			}
			$res->setDatos($datos);
			return $res;
		}
		
		public static function lst_calculateMonthByComisionista($params){
			
			if (!($params['comercial']>0)) die('Obligatorio el comercial');
			$params['dia'] = '';
			$params['mes'] = '';
			$params['anyo'] = '';
			$res = self::getServiciosConComisiones($params);
			//print_r($res);
			$datos = $res->getDatos();
			$datos = self::calcularComisiones($datos, $params['comercial']);
			$liquidacionMensual = array();
			foreach ($datos as $liquidacion){
				$año = $liquidacion['anyoInicio'];
				$mes = $liquidacion['mesInicio'];
				$importe = $liquidacion['importe'];
				$beneficio = $liquidacion['beneficio'];
				$comision = $liquidacion['comision_valor'];
				if (!isset($liquidacionMensual[$año.$mes])){
					$liquidacionMensual[$año.$mes] = array();
					$liquidacionMensual[$año.$mes]['fechaTexto'] = ucfirst(Tool::fecha_NumeroMesACadena($mes)).' de '.$año;
					$liquidacionMensual[$año.$mes]['mes'] = intval($mes);
					$liquidacionMensual[$año.$mes]['anyo'] = $año;
					$liquidacionMensual[$año.$mes]['importe'] = 0;
					$liquidacionMensual[$año.$mes]['beneficio'] = 0;
					$liquidacionMensual[$año.$mes]['comision'] = 0;
				}
				$liquidacionMensual[$año.$mes]['importe'] += $importe;
				$liquidacionMensual[$año.$mes]['beneficio'] += $beneficio;
				$liquidacionMensual[$año.$mes]['comision'] += $comision;
			}
			krsort($liquidacionMensual);
			$ordenado = array();
			foreach ($liquidacionMensual as $reg) {
				$ordenado[]=$reg;
			}
			$res->setDatos($ordenado);
			$numeroRegistros = count($ordenado);
			$res->setTotal($numeroRegistros);
			//print_r($res);
			return $res;
		}
		
		private static function getServiciosConComisiones($params){
			if (!($params['comercial']>0)) die('Obligatorio el comercial');
				
				
			$select = self::selectObjeto();
			$select->where('c1.sublicen_con1=?','00');
			$select->where('c2.feanu_con2 is null');
			$select->where('c1.oficina_con1=?','C1');
			$select->order(array('c1.fsalida_con1 desc','c1.hsalida_con1 desc'));
			// and fechainicio between '2016-07-01' and '2016-07-31'
			if (isset($params['comercial']) && $params['comercial']){
				$select->where('comisionista1_numero = ? or comisionista2_numero = ?',$params['comercial']);
			}
			if (isset($params['dia']) && $params['dia']){
				$select->where('DAY(c1.fsalida_con1)=?',$params['dia']);
			}
				
			if (isset($params['mes']) && $params['mes']){
				$select->where('MONTH(c1.fsalida_con1) = ?',$params['mes']);
			}
			if (isset($params['anyo']) && $params['anyo']){
				$select->where('YEAR(c1.fsalida_con1)=?',$params['anyo']);
			}
			$res = self::selectExecute($select, $params);
			return $res;
		}
		
		private function calcularComisiones($liquidaciones, $comercial){
			foreach ($liquidaciones as &$liquidacion) {
				if (!$liquidacion['coste']) $liquidacion['coste']=0;
				$liquidacion['beneficio'] = $liquidacion['importe'] - $liquidacion['coste'];
				$liquidacion['horaInicio'] = substr($liquidacion['horaInicio'],0,5);
				$liquidacion['comision_porcentaje'] = 0;
				$liquidacion['comision_valor'] = 0;
				if ($liquidacion['comisionista1_numero'] == $comercial){
					if ($liquidacion['comisionista2_numero']>0){
						if ($liquidacion['cocheDeVcc'])
							$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_rapel_vehiculoDeVcc'];
						else
							$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_rapel_vehiculoNoDeVcc'];
						
					} else {
						if ($liquidacion['cocheDeVcc'])
							$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_comision_vehiculoDeVcc'];
						else
							$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_comision_vehiculoNoDeVcc'];
					}
				} else {
					if ($liquidacion['cocheDeVcc'])
						$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_comision_vehiculoDeVcc'];
					else 
						$liquidacion['comision_porcentaje'] = $liquidacion['comisionista1_comision_vehiculoNoDeVcc'];
				}
				$liquidacion['comision_valor'] = (($liquidacion['beneficio'] * $liquidacion['comision_porcentaje'])/100);
				$fechaPorComponentes = Tool::fechaSeparar($liquidacion['fechaInicio']);
				$liquidacion['mesInicio'] = $fechaPorComponentes['mes'];
				$liquidacion['anyoInicio'] = $fechaPorComponentes['año'];
			}
			return $liquidaciones;
		}
		
	// Get y Set
	
}

