<?php

/*CONTRATO      número de servicio que se cobra.
IMPORTE         importe cobrado
CLIENTE          viajero (es el campo COD_CLIENTE de Contra_Viajes)
FORMACOBRO            Forma de cobro (es el campo FPAGO de Contra_Viajes), si está en blanco 1
PAX_PAQ         si se trata de pago de pasajero o de paquetes (1 Personas / 2 Paquetes).
IDAVUELTA      si se paga el viaje de Ida o la Vuelta (Ida = 0, Vuelta 1)
COBRADO_DESDE_CTR
*/

class CobroViaje extends AppObjeto {
	
	
	//Propiedades
	protected $numero;
	protected $contrato;
	protected $fecha;
	protected $importe;
	protected $cliente;
	protected $formaPago;
	protected $quePago;
	protected $vuelta;
	protected $contratoDesdeDondeSeCobra;
	
	const TIPO_PAGO_PERSONA = 1;
	const TIPO_PAGO_PAQUETE = 2;
	const COBRO_FORMA_PAGO_EFECTIVO = 1;
	const COBRO_FORMA_PAGO_CHEQUE = 7;
	
	/* para conectar con bd */
	protected static $_aliasTabla = 'cob';
	protected static $_nombreTabla = 'COBROS';
	protected static $_campoPK = 'NUMERO';
	
	
	// InitMetaDatos
	
	protected static function initMetaDatos(){
	
		self::addPropiedadBD('cob', 'NUMERO', 'numero', self::META_VARCHAR);
		self::addPropiedadBD('cob', 'CONTRATO', 'contrato', self::META_VARCHAR);
		self::addPropiedadBD('cob', 'FECHA', 'fecha', self::META_DATE);
		self::addPropiedadBD('cob', 'IMPORTE', 'importe', self::META_DECIMAL);
		self::addPropiedadBD('cob', 'CLIENTE', 'cliente', self::META_VARCHAR);
		self::addPropiedadBD('cob', 'PAX_PAQ', 'quePago', self::META_INT);
		self::addPropiedadBD('cob', 'FORMA', 'formaPago', self::META_INT);
		self::addPropiedadBD('cob', 'IDA', 'vuelta', self::META_INT);
		self::addPropiedadBD('cob', 'COBRADO_DESDE_CTR', 'contratoDesdeDondeSeCobra', self::META_VARCHAR);
	
	}
	
	public function __construct($contrato = null, $cliente = null, $vuelta = null , $paxpaq = null){
		$clase = get_class($this);
		$clase::initMetaDatos();
		$this->contrato = $contrato;
		$this->vuelta= $vuelta;
		$this->cliente = $cliente;
		$this->quePago = $paxpaq;
	
		if ($contrato != null && $cliente != null && $vuelta != null &&  $paxpaq!=null){
			/* TODO: Pendiente de hacer */
			//$this->load($contrato, $cliente, $idavuelta, $paxpaq);
		}
	}
	
	public function save(){
		$sql = sprintf("execute spCobroViajes @CONTRATO='%s', @IMPORTE='%s', @CLIENTE='%s', @FORMACOBRO='%s', @PAX_PAQ='%s', @IDAVUELTA='%s', @COBRADO_DESDE_CTR='%s'",
		$this->contrato, $this->importe, $this->cliente, $this->formaPago, $this->quePago, $this->vuelta, $this->contratoDesdeDondeSeCobra);
		echo $sql;
		
		try{
			$db = self::getDb();
			$adapter = $db->getAdapter();
			$adapter->query($sql);
		} catch (Exception $e){
			echo $e->getMessage();
		}
	}

	public static function loadCobrosFranciaSinAgrupar($numeroContrato, $cliente, $vuelta){
		$servicio = new Servicio($numeroContrato);
		$contratoFrancia = $servicio->getCodigoParaViaje();
	
		$db= self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(FALSE);
		$select->from(array('co'=>'COBROS'), array( 'importePagado'=> new Zend_Db_Expr('SUM(IMPORTE)'),'pax_paq'=>'co.pax_paq'));
		$select->where("co.CONTRATO=? and co.COBRADO_DESDE_CTR =? AND importe>0 ", $contratoFrancia);
		$select->where("co.cliente=? ", $cliente);
		$select->where("co.ida=?",  $vuelta);
		$select->group("pax_paq");

		//echo $select;
		$res = self::selectExecute($select);
		$datos = $res->getDatos();
		$sal = array();
		foreach ($datos as $cob){
			$sal[$cob['pax_paq']] = $cob['importePagado'];
		}
		return $sal;
	}
	
	public static function loadCobrosFranciaPorContrato($numeroContrato){
		$servicio = new Servicio($numeroContrato);
		$contratoFrancia = $servicio->getCodigoParaViaje();
	
		$db= self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(FALSE);
		$select->from(array('co'=>'COBROS'), array( 'importePagado'=> new Zend_Db_Expr('sum(IMPORTE)'),'potencial'=>'pt.numero','formaPago'=>'forma','vuelta'=>'co.ida'));
		$select->joinInner(array('pt'=>'potenciales'), 'pt.cliente=co.cliente', array());
		$select->where('co.CONTRATO=? and co.COBRADO_DESDE_CTR =? AND importe>0', $contratoFrancia, $contratoFrancia);
		$select->group(array('co.contrato','pt.numero','co.ida','co.forma'));
		//echo $select;
		$res = self::selectExecute($select);
		$datos = $res->getDatos();
		$sal = array();
		foreach ($datos as $reg) {
			$sal[$reg['potencial'].'-'.$reg['vuelta']]['importe'] = $reg['importePagado'];
			$sal[$reg['potencial'].'-'.$reg['vuelta']]['formaPago'] = $reg['formaPago'];
		}
		unset($datos);
		return $sal;
	}

	public function getFormaPago() {
	    return $this->formaPago;
	}
	public function setFormaPago($formaPago) {
	    $this->formaPago = $formaPago;
	}

	public function getContratoDesdeDondeSeCobra() {
	    return $this->contratoDesdeDondeSeCobra;
	}
	public function setContratoDesdeDondeSeCobra($contratoDesdeDondeSeCobra) {
	    $this->contratoDesdeDondeSeCobra = $contratoDesdeDondeSeCobra;
	}
	
	public function getVuelta() {
	    return $this->vuelta;
	}
	public function setVuelta($vuelta) {
	    $this->vuelta = $vuelta;
	}
		
	public function getQuePago() {
	    return $this->quePago;
	}
	public function setQuePago($quePago) {
	    $this->quePago = $quePago;
	}
		
	public function getCliente() {
	    return $this->cliente;
	}
	public function setCliente($cliente) {
	    $this->cliente = $cliente;
	}
		
	public function getImporte() {
	    return $this->importe;
	}
	public function setImporte($importe) {
	    $this->importe = $importe;
	}
		
	public function getContrato() {
	    return $this->contrato;
	}
	public function setContrato($contrato) {
	    $this->contrato = $contrato;
	}
	
	
	
}