<?php

/**
* Clase Dispacher para BalanceGeneral
*
* @package IM
* @subpackage BalanceGeneralDP
* @author Willy
* @version SVN: : BalanceGeneralDP.class.php,v 1.1 2009/06/26 00:11:33 Exp $
*/
class BalanceGeneralDP implements interfaceDP {

  protected $o_Bean;

  /**
  * Constructor donde asigna a un atributo el objeto BalanceGeneralBean
  *
  * @param BalanceGeneralBean $o_BalanceGeneralBean
  */
  public function __construct(BalanceGeneralBean $o_BalanceGeneralBean){
  
    $this->o_Bean = $o_BalanceGeneralBean;
    
  }
  
  /**
  * Retorna el objeto BalanceGeneralBean
  *
  * @return Object
  */
  protected function getObjetoBean(){
  
    if(!$this->o_Bean){
        $this->o_Bean = new BalanceGeneralBean();
    }        
    return $this->o_Bean;
    
  }
  
  /**
  * Ingresa un nuevo registro
  *
  * @return IdGenerado
  */
  public function save(){

      $con = Conexion::getConexion();

      $a_Fields = array();

      if($this->getObjetoBean()->getIdBalanceGeneral()) : $a_Fields['IdBalanceGeneral'] = ($this->getObjetoBean()->getIdBalanceGeneral()); endif;
      if($this->getObjetoBean()->getIdSucursal()) : $a_Fields['IdSucursal'] = ($this->getObjetoBean()->getIdSucursal()); endif;
      if($this->getObjetoBean()->getNombreSucursal()) : $a_Fields['NombreSucursal'] = ($this->getObjetoBean()->getNombreSucursal()); endif;
      if($this->getObjetoBean()->getIdAdministrador()) : $a_Fields['IdAdministrador'] = ($this->getObjetoBean()->getIdAdministrador()); endif;
      if($this->getObjetoBean()->getNombreAdministrador()) : $a_Fields['NombreAdministrador'] = ($this->getObjetoBean()->getNombreAdministrador()); endif;
      if($this->getObjetoBean()->getDescripcion()) : $a_Fields['Descripcion'] = ($this->getObjetoBean()->getDescripcion()); endif;
      if($this->getObjetoBean()->getFecha()) : $a_Fields['Fecha'] = ($this->getObjetoBean()->getFecha()); endif;
      if($this->getObjetoBean()->getIdSucursal()) : $a_Fields['IdSucursal'] = ($this->getObjetoBean()->getIdSucursal()); endif;
      if($this->getObjetoBean()->getNombreSucursal()) : $a_Fields['NombreSucursal'] = ($this->getObjetoBean()->getNombreSucursal()); endif;
      if($this->getObjetoBean()->getTotalBalanceDia()) : $a_Fields['TotalBalanceDia'] = ($this->getObjetoBean()->getTotalBalanceDia()); endif;
      if($this->getObjetoBean()->getTotalGastoGeneral()) : $a_Fields['TotalGastoGeneral'] = ($this->getObjetoBean()->getTotalGastoGeneral()); endif;
      if($this->getObjetoBean()->getTotalIngreso()) : $a_Fields['TotalIngreso'] = ($this->getObjetoBean()->getTotalIngreso()); endif;
      if($this->getObjetoBean()->getTotalAdelantoSueldo()) : $a_Fields['TotalAdelantoSueldo'] = ($this->getObjetoBean()->getTotalAdelantoSueldo()); endif;
      if($this->getObjetoBean()->getTotal()) : $a_Fields['Total'] = ($this->getObjetoBean()->getTotal()); endif;
      if($this->getObjetoBean()->getUsuarioCreacion()) : $a_Fields['UsuarioCreacion'] = ($this->getObjetoBean()->getUsuarioCreacion()); endif;
      if($this->getObjetoBean()->getFechaCreacion()) : $a_Fields['FechaCreacion'] = ($this->getObjetoBean()->getFechaCreacion()); endif;
	  
      $sStringField = arrayClass::implode_keys(',', $a_Fields);
      $sStringValue = "'".implode("','", $a_Fields)."'";

      //$con = Conexion::getConexion();
      $sql = "INSERT INTO cr_balance_general (".$sStringField.")
                      VALUES (".$sStringValue.");";
      
      $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
      mysql_close($con);
	 
      $iResultSave = $result;
      if($iResultSave > 0){
        return $iResultSave;
      }else{
        return false;
      }

    
  }
  
  /**
  * Modifica un nuevo registro
  *
  * @return IdGenerado
  */
  public function update() {
 
      return false;

  }
  
  /**
  * Elimina registro
  *
  * @return Boolean
  */
  public function delete(){
    /*
      $o_BalanceGeneral = new BalanceGeneral();
      
      if($this->getObjetoBean()->getIdBalanceGeneral()){
          $o_BalanceGeneral->setIdBalanceGeneral($this->getObjetoBean()->getIdBalanceGeneral());
      }
      $iResultDelete = $o_BalanceGeneral->delete();
      if($iResultDelete > 0){
          return true;
      }else{
          return false;
      }    
    */
  }
  /**
  * Selecciona un nuevo registro
  *
  * @return IdGenerado
  */
  public function select(){
      
    $where = "";
    if($this->getObjetoBean()->getIdSucursal()){
      	 $where .= " AND IdSucursal ='".$this->getObjetoBean()->getIdSucursal()."'";
    }
    
     if($this->getObjetoBean()->getFecha()){
      	 $where .= " AND Fecha >= '".$this->getObjetoBean()->getFecha()."'";
    }
    
    if($this->getObjetoBean()->getFechaFinal()){
      	 $where .= " AND Fecha <= '".$this->getObjetoBean()->getFechaFinal()."'";
    }
    
    
    $con = Conexion::getConexion();
    $sql = "SELECT * FROM cr_balance_general 
    
    		WHERE 1 ".$where
    		." order by Fecha desc";
   
    $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);
    
    $a_tmp = array();

    if($num_rows>0){
      while ($o_valor = mysql_fetch_object($result)) {
      $a_tmp[] = $this->insertarObjetoBean($o_valor);
      }
    }

    mysql_close($con);
   
    return count($a_tmp)>0?$a_tmp:null;
      
  }
  
  public function ObtnerTotalAnterior($fecha){
  	$where = "";
    if($this->getObjetoBean()->getIdSucursal()){
      	 $where .= " AND IdSucursal ='".$this->getObjetoBean()->getIdSucursal()."'";
      	 $where_bd .= " AND IdSucursal ='".$this->getObjetoBean()->getIdSucursal()."'";
      	 $where_s .= " AND IdSucursal ='".$this->getObjetoBean()->getIdSucursal()."'";
    }
             
    if($fecha){
      	 $where .= " AND Fecha <= '".$fecha."'";
      	 $where_bd .= " AND FechaBalance <= '".$fecha."'";
    }
    
    $con = Conexion::getConexion();
    $sql = "SELECT sum(SaldoDisponibleIni) as Total
    		FROM cr_sucursal 
    		WHERE 1 ".$where_s;
    
   	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);
    
    if($num_rows>0){
      while ($a_valor = mysql_fetch_array($result)) {
      	$saldoIni = $a_valor['Total'];
      }
    }
   
    //Fecha de inicio por sucursal
     $sql = "SELECT FechaSaldoIni
    		 FROM cr_sucursal 
    		 WHERE 1 ".$where_s;
     $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
     $num_rows = mysql_num_rows($result);
     if($num_rows>0){
      while ($a_valor = mysql_fetch_array($result)) {
      	$fechaIniSaldo = $a_valor['FechaSaldoIni'];
      }
    }
     
     //------------------------------
  
   	if($fechaIniSaldo ){
      	 $where .= " AND Fecha >= '$fechaIniSaldo'";
      	 $where_bd .= " AND FechaBalance >= '$fechaIniSaldo'";
      	 
   	}
    
    
    $con = Conexion::getConexion();
    $sql = "SELECT sum(Total) as Total
    		FROM cr_balance_general 
    		WHERE 1 ".$where;
  	//echo $sql;
   	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);
    
    if($num_rows>0){
      while ($a_valor = mysql_fetch_array($result)) {
      	$totales = $a_valor['Total'];
      }
    }
    
 
    
    $con = Conexion::getConexion();
    $sql = "SELECT sum(TotalCaja) as Total
    		FROM cr_balance_dia_detalle 
    		WHERE 1 ".$where_bd;
  
   	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);
    
    if($num_rows>0){
      while ($a_valor = mysql_fetch_array($result)) {
      	$capitalIni = $a_valor['Total'];
      }
    }
    
    return $saldoIni + $totales - $capitalIni;
  }
  
  /**
  * Retorna un objeto BalanceGeneralBean
  *
  * @return Object
  */
  public function selectByPk(){
  
    $con = Conexion::getConexion();
    $sql = "SELECT * FROM cr_balance_general WHERE 1 ";
    $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $o_Propel = $result ? mysql_fetch_object($result) : null;
    mysql_close($con);

    return $o_Propel?$this->insertarObjetoBean($o_Propel):null;
  
  }
  
  /**
  * Reasigna valores retornados del propel a un objeto BalanceGeneralBean
  *
  * @param Object $o_Propel
  * @return BalanceGeneralBean
  */
  private function insertarObjetoBean($o_Propel){

    $o_BalanceGeneralBean = new BalanceGeneralBean();
    
    $o_BalanceGeneralBean->setIdBalanceGeneral($o_Propel->IdBalanceGeneral);
    $o_BalanceGeneralBean->setDescripcion($o_Propel->Descripcion);
    $o_BalanceGeneralBean->setFecha($o_Propel->Fecha);
    $o_BalanceGeneralBean->setTotalBalanceDia($o_Propel->TotalBalanceDia);
    $o_BalanceGeneralBean->setTotalGastoGeneral($o_Propel->TotalGastoGeneral);
    $o_BalanceGeneralBean->setTotalIngreso($o_Propel->TotalIngreso);
    $o_BalanceGeneralBean->setTotalAdelantoSueldo($o_Propel->TotalAdelantoSueldo);
    $o_BalanceGeneralBean->setTotal($o_Propel->Total);
    $o_BalanceGeneralBean->setTotalAnterior($this->ObtnerTotalAnterior(date('Y-m-d',strtotime($o_Propel->Fecha." -1 days"))));
    $o_BalanceGeneralBean->setNombreSucursal($o_Propel->NombreSucursal);
    $o_BalanceGeneralBean->setIdSucursal($o_Propel->IdSucursal);
    $o_BalanceGeneralBean->setIdAdministrador($o_Propel->IdAdministrador);
    $o_BalanceGeneralBean->setNombreAdministrador($o_Propel->NombreAdministrador);
    $o_BalanceGeneralBean->setUsuarioCreacion($o_Propel->UsuarioCreacion);
    $o_BalanceGeneralBean->setFechaCreacion($o_Propel->FechaCreacion);
             
    return $o_BalanceGeneralBean;    
    
  }
   
  
   function ObtenerAdministradorNewBalance(){
   	$con = Conexion::getConexion();
  	$i=1;  
    $a_TotalesColaborador[$i]['NombreCompleto'] 		= $this->getObjetoBean()->getNombreAdministrador();
    $a_TotalesColaborador[$i]['IdAdministrador'] 		= $this->IdAdministrador;
    $a_TotalesColaborador[$i]['TotalBalanceDia']		= $this->ObtenerTotalBalanceDia($con);
    $a_TotalesColaborador[$i]['TotalGastoGeneral'] 		= $this->ObtenerTotalGastoGeneral($con);
    $a_TotalesColaborador[$i]['TotalIngreso'] 			= $this->ObtenerTotalIngreso($con);
    $a_TotalesColaborador[$i]['TotalAdelantoSueldo'] 	= $this->ObtenerTotalAdelantoSueldo($con);
    return $a_TotalesColaborador;
  }
  
  public function ObtenerDiaAbierto(){
  	$con = Conexion::getConexion();
  	if($this->getObjetoBean()->getIdAdministrador()) $where = " AND IdAdministrador = '".$this->getObjetoBean()->getIdAdministrador()."'";
  	$where .= " AND IdSucursal = '".$this->getObjetoBean()->getIdSucursal()."'";
  	$sql = "
  				SELECT 	Fecha as FechaCierre
  				FROM 	cr_balance_general  
  				WHERE 1
  						".$where." 
  				order by FechaCierre desc
  				LIMIT 0,".Constantes::V_NUM_DIAS_OPEN.""
  			 ;
  	//echo $sql;
  	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  	
  	if($result){
  		if(mysql_num_rows($result) > 0 ){
  			$i = 1;
		  	while ($row = mysql_fetch_array($result)){
			  	if($row['FechaCierre']){
			  		if($fecha_anterior){
			  			if($fecha_anterior != $row['FechaCierre']){
			  				return $fecha_anterior;
			  			}
			  		}else{
			  			$maxDiaCerrado = $row['FechaCierre'];
			  		}
			  		$fecha_anterior = date('Y-m-d',strtotime($row['FechaCierre']." -1 days"));
			  	}else{
			  		return date('Y-m-d',strtotime(Constantes::V_INICIO_BALANCE." +1 days"));;
			  	}
			  	$i++;
		  	}
		  	
  		}else{
  			$sql = "
					SELECT 	 fechaInicioBalance 
					FROM 	cr_sucursal   
					WHERE 	1 and IdSucursal  = '".$this->getObjetoBean()->getIdSucursal()."'		
					";
  			
  			$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  			if(mysql_num_rows($result) > 0 ){	  		
			  	while ($row = mysql_fetch_array($result)){
			  		return  $row['fechaInicioBalance'];
			  	}
	  		}
  		}
  		
  		if($i < Constantes::V_NUM_DIAS_OPEN ){
			$sql = "
					SELECT 	FechaCierre as FechaCierre
					FROM 	cr_inicio_balance   
					WHERE 	1
							and IdSucursal  = '".$this->getObjetoBean()->getIdSucursal()."'					
					";
			$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
			if($result){
		  		if(mysql_num_rows($result) > 0 ){
		  			$i = 1;
				  	while ($row = mysql_fetch_array($result)){
				  		if($row['FechaCierre'] == $fecha_anterior){
				  			return $fecha_anterior;
				  		}
				  	}
		  		}
			}
  		}
	  	
  		return date('Y-m-d',strtotime($maxDiaCerrado." +1 days"));
  	}
   
  } 
  
  private function ObtenerTotalBalanceDia($con){
  	
  	$fecha  = $this->ObtenerDiaAbierto();
  	$sql = "SELECT sum(TotalDia) as Suma
  			FROM cr_balance_dia 
  			WHERE 1 
  					and IdAdministrador = '".$this->getObjetoBean()->getIdAdministrador()."'
  					and FechaCierre 	= '$fecha'	
  				".$where
  			 ;
  	
  	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  	
  	while ($row = mysql_fetch_array($result)){
  		return $row['Suma'];
  	}
  	
  }
  
   private function ObtenerTotalGastoGeneral($con){
  	$fecha  = $this->ObtenerDiaAbierto();
  	$sql = "SELECT sum(Monto) as Suma
  			FROM cr_gastos_generales  
  			WHERE 1 
  					and Estado = 'A'
  					and Eliminado <> '1'
  					and IdSucursal	= '".$this->getObjetoBean()->getIdSucursal()."'
  					and FechaGasto 	= '$fecha'	
  				".$where
  			 ;
  	
  	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  	
  	while ($row = mysql_fetch_array($result)){
  		return $row['Suma'];
  	}
  	
  }
  
  private function ObtenerTotalIngreso($con){
  	$fecha  = $this->ObtenerDiaAbierto();
  	$sql = "SELECT sum(Monto) as Suma
  			FROM cr_ingreso_diversos  
  			WHERE 1 
  					and Estado = 'A'
  					and Eliminado <> '1'
  					and IdSucursal	= '".$this->getObjetoBean()->getIdSucursal()."'
  					and FechaIngreso 	= '$fecha'	
  				".$where
  			 ;
  	
  	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  	//echo $sql;
  	while ($row = mysql_fetch_array($result)){
  		return $row['Suma'];
  	}
  	
  }
  
   private function ObtenerTotalAdelantoSueldo($con){
  	   	
   	$fecha  = $this->ObtenerDiaAbierto();
        	
   	$sql = "
   			SELECT 	IdColaborador
  			FROM 	cr_colaborador  
  			WHERE 	IdPadre = '".$this->getObjetoBean()->getIdAdministrador()."'
  					and Eliminado <>1	
					and UsuarioCreacion <> 'sys.planilla'
  			";
   
   	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
  	
  	while ($row = mysql_fetch_array($result)){
  		$a_colaborador[] = $row['IdColaborador'];
  	}
  	$a_colaborador[] = $this->getObjetoBean()->getIdAdministrador();
  	
  	if(is_array($a_colaborador)){
      	 $where .= " AND IdColaborador in ('".implode("','",$a_colaborador)."')";
      	 $sql = "SELECT sum(Monto) as Suma
	  			FROM cr_adelanto_sueldo  
	  			WHERE 1 
  					and Estado = 'A'
  					and Eliminado <> '1'
  					and FechaAdelanto 	= '$fecha'	
  				".$where
  			 ;
		  	
		   $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
		  	
		  	while ($row = mysql_fetch_array($result)){
		  		return $row['Suma'];
		  	}
    }else {
    	return 0;
    }
  	
  }
  
   public function selectHeader(){
  	$where = "";
    
    $con = Conexion::getConexion();
    $sql = "SELECT * 
    		FROM cr_balance_general
    		WHERE 1 ".$where;
    $result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);

    $a_tmp = array();

    if($num_rows>0){
      while ($o_valor = mysql_fetch_object($result)) {
      $a_tmp[] = $this->insertarObjetoBean($o_valor);
      }
    }

    mysql_close($con);
   
    return count($a_tmp)>0?$a_tmp:null;
     
  }
  
  function ObtenerPeriodosBG(){
  	$con = Conexion::getConexion();
	$sql= "	SELECT substring( `Fecha` , 1, 7 ) as periodo
			FROM `cr_balance_general`
			GROUP BY substring( `Fecha` , 1, 7 )
			ORDER BY `cr_balance_general`.`Fecha` ASC";
	$result = mysql_db_query(Conexion::getNameDb(), $sql, $con);
    $num_rows = mysql_num_rows($result);

    if($num_rows>0){
      	while ($row = mysql_fetch_array($result)){
		  	$periodo[] = $row['periodo'];
		}
    }

    mysql_close($con);
   
    return $periodo;
	
  }
}

