<?php
class PresupuestoProveedor extends AppObjeto {
	
	//Propiedades
	protected $presupuesto;
	protected $proveedor;
	protected $fecha;
	protected $hora;
	protected $numeroPresupuestoProveedor;
	protected $comentarios;
	protected $coste;
	protected $pvp;
	protected $descuento;
	protected $pvpIncluidoMargen;
	
	
	const MARGEN_DEFECTO = 10;
			
		/* para conectar con bd */
	protected static $_aliasTabla = 'pres_prov';
	protected static $_nombreTabla = 'PRESUP_PROVEE';
	protected static $_campoPK = 'PRESUP';
	protected static $_camposClave = array('PRESUP','PROVEE');
	
	
	// InitMetaDatos
	
	protected static function initMetaDatos(){
		
		self::addPropiedadBD('pres_prov', 'PRESUP', 'presupuesto', self::META_VARCHAR);
		self::addPropiedadBD('pres_prov', 'PROVEE', 'proveedor', self::META_VARCHAR);
		self::addPropiedadBD('pres_prov', 'FECHA', 'fecha', self::META_DATE);
		self::addPropiedadBD('pres_prov', 'HORA', 'hora', self::META_VARCHAR);
		self::addPropiedadBD('pres_prov', 'PRESU_PROVEE', 'numeroPresupuestoProveedor', self::META_VARCHAR);
		self::addPropiedadBD('pres_prov', 'COSTE', 'coste', self::META_DECIMAL);
		self::addPropiedadBD('pres_prov', 'PVP_PRP', 'pvp', self::META_DECIMAL);
		self::addPropiedadBD('pres_prov', 'DTO_PRP', 'descuento', self::META_DECIMAL);
		self::addPropiedadBD('pres_prov', 'PVP_INC_PRP', 'pvpIncluidoMargen', self::META_DECIMAL);
		self::addPropiedadBD('pres_prov', 'COMENTARIO', 'comentarios', self::META_VARCHAR);
		self::addPropiedad('activo', 'activo');
	}

	// Métodos
	
	public function __construct($numeroPresupuesto, $numeroProveedor){

		$this->initMetaDatos ();
		$select = self::selectObjeto();
		$select->where('PRESUP=?',$numeroPresupuesto);
		$select->where('PROVEE=?',$numeroProveedor);

		$res = self::selectExecute($select);
		if ($res->estaVacio()){
			$this->presupuesto = $numeroPresupuesto;
			$this->proveedor = $numeroProveedor;
		} else {
			$row =  $res->getDatos();
			$row = $row[0];
			$this->id = 1;
			$this->asignaDatosObjeto($row);
			
		}
		
	}
	
	public function save() {
		$db = self::getDb();
		$this->fecha = date('d/m/Y');
		$this->hora = date('H:m');
		$numeroPresupuesto = $this->getPresupuesto();
		$presupuesto = new Presupuesto($numeroPresupuesto);
		$origen = new Origen($presupuesto->getOrigenPresupuesto());
		$porcentajeBeneficios = self::MARGEN_DEFECTO;
		if ($origen){
			if ($origen->getPorcentajeBeneficio()>0)
				$porcentajeBeneficios = $origen->getPorcentajeBeneficio();
		}
		$this->pvpIncluidoMargen = $this->pvp * (1+($porcentajeBeneficios/100)); 
		$data = $this->formatearObjToBDCampos();
		if ($this->id != 1) {
			$id = $db->insert ( $data );
			$this->id = 1;
		} else {
			
			if (isset($this->presupuesto) && ($this->presupuesto>0) && isset($this->proveedor) && ($this->proveedor>0)) {
				$where = array (
						'PRESUP = \'' . $this->presupuesto.'\' and PROVEE = \''.$this->proveedor.'\''
				);
				try {
					$db->update ( $data, $where );
				} catch (Exception $e) {
					echo 'save principal:'.$e;
				}
			
			}
			
		}
		
	}
	
	/**
		 * Devuelve los PresupuestoProveedors filtrados por parámetros
		 * @param array  $params todos
		 * @return AppResultado
		 */
		public static function lstPorPrespuesto($params){
			$select = self::selectObjeto();
			$select->where("PRESUP = '0000000365'");
			$res = self::selectExecute($select, $params);
			return $res;
		}
		
		
	
	public function getPresupuesto() {
	    return $this->presupuesto;
	}
	public function setPresupuesto($presupuesto) {
	    $this->presupuesto = $presupuesto;
	}
	
	public function getProveedor() {
	    return $this->proveedor;
	}
	public function setProveedor($proveedor) {
	    $this->proveedor = $proveedor;
	}
	
	public function getPVPsinIva() {
	    return $this->pvp;
	}
	public function setPVPsinIva($pvp) {
	    $this->pvp = $pvp;
	}
	
	public function getDescuento() {
	    return $this->descuento;
	}
	public function setDescuento($descuento) {
	    $this->descuento = $descuento;
	}
	
	public function getComentarios() {
	    return $this->comentarios;
	}
	public function setComentarios($comentarios) {
	    $this->comentarios = $comentarios;
	}
		
	public function getCoste() {
	    return $this->coste;
	}
	public function setCoste($coste) {
	    $this->coste = $coste;
	}
	public function getIvaImporte($iva){
		return number_format(($this->coste * $iva)/100,2);
	}
	
	public function getTotalConIva($iva){
		$ivaImporte = number_format(($this->coste * $iva)/100,2);
		$total = $this->coste + $ivaImporte;
		return number_format($total,2);
	}
	
}