/**
  * Devuelve un array con las entradas en curso del articulo y almacen indicado
  *
  * Cada elemento del array es otro array con los elementos:
  * array (
  *   'IDPedido' =>
  *   'PrimaryKeyMD5' =>
  *   'Fecha' =>
  *   'FechaEntraga' =>
  *   'IDProveedor' =>
  *   'RazonSocial =>
  *   'Entrando' =>
  * )
  *
  * @param integer $idAlmacen El id de almacen
  * @return array Array con las unidades entrando
  */
 public function getEntrando($idAlmacen)
 {
     $reservas = array();
     $tablaPedidos = new PedidosCab();
     $tablaPedidosLineas = new PedidosLineas();
     $tablaProveedores = new Proveedores();
     $em = new EntityManager($this->getConectionName());
     if ($em->getDbLink()) {
         $query = "select\n                        cab.IDPedido,\n                        cab.PrimaryKeyMD5,                     \n                        cab.Fecha,\n                        cab.FechaEntrega,\n                        cab.IDProveedor,\n                        prv.RazonSocial,\n                        sum(lin.Unidades) as Entrando\n                      from\n                        {$tablaPedidos->getDataBaseName()}.{$tablaPedidos->getTableName()} as cab,\n                        {$tablaPedidosLineas->getDataBaseName()}.{$tablaPedidosLineas->getTableName()} as lin,\n                        {$tablaProveedores->getDataBaseName()}.{$tablaProveedores->getTableName()} as prv\n                      where\n                        cab.IDPedido  = lin.IDPedido and\n                        cab.IDProveedor  = prv.IDProveedor and\n                        lin.IDEstado   = '1' and\n                        lin.IDArticulo = '{$this->IDArticulo}' and\n                        lin.IDAlmacen  = '{$idAlmacen}'\n                      group by IDPedido\n                      order by Fecha ASC";
         $em->query($query);
         //echo $query,"<br/>";
         $reservas = $em->fetchResult();
         $em->desConecta();
     }
     unset($em);
     unset($tablaPedidos);
     unset($tablaPedidosLineas);
     unset($tablaProveedores);
     return $reservas;
 }
 /**
  * Renderiza el template _Emergente/historicoCompras.html.twig
  * mostrando las compras realizadas a un proveedor de un articulo y un periodo dado.
  *
  * La información se obtiene en base a los pedidos RECEPCIONADOS o FACTURADOS.
  *
  * No se tienen en cuenta los pedidos no confirmados.
  *
  * Puede entrar por POST o por GET.
  *
  * Si es por POST los parametros vienen en:
  *
  *  idArticulo, idProveedor, periodo
  *
  * Si es por GET los parametros vienen en:
  *
  *  posicion 2 (idArticulo), 3 (idProveedor), 4 (periodo)
  *
  * @return array El template y los datos
  */
 public function HistoricoComprasAction()
 {
     switch ($this->request["METHOD"]) {
         case 'GET':
             $idArticulo = $this->request['2'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $IDProveedor = $this->request['3'];
             if ($IDProveedor == '0') {
                 $IDProveedor = '';
             }
             $periodo = $this->request['4'];
             break;
         case 'POST':
             $idArticulo = $this->request['idArticulo'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idProveedor = $this->request['idProveedor'];
             if ($idProveedor == '0') {
                 $idProveedor = '';
             }
             $periodo = $this->request['periodo'];
             break;
     }
     // Construir la parte del filtro que depende del periodo
     switch ($periodo) {
         case '':
             $periodo = 0;
         case '0':
             // Ultimo mes
             $diferenciaDias = -30;
             break;
         case '1':
             // Ultimo Trimestre
             $diferenciaDias = -90;
             break;
         case '2':
             // Ultimo año
             $diferenciaDias = -365;
             break;
         case '3':
             // Todo, 20 años hacia atrás
             $diferenciaDias = -7300;
             break;
     }
     $fecha = new Fecha(date('Y-m-d'));
     $desdeFecha = $fecha->sumaDias($diferenciaDias);
     unset($fecha);
     $proveedor = new Proveedores($idProveedor);
     $proveedorTabla = $proveedor->getDataBaseName() . "." . $proveedor->getTableName();
     $articulo = new Articulos($idArticulo);
     $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName();
     $pedidos = new PedidosCab();
     $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName();
     unset($pedidos);
     $lineas = new PedidosLineas();
     $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     // Calcular el total de unidades compradas y el precio medio de compra
     // Solo calcula los pedidos que están recepcionados o facturados
     if ($idArticulo != '' or $idProveedor != '') {
         $em = new EntityManager($articulo->getConectionName());
         if ($em->getDbLink()) {
             $query = "SELECT SUM(t1.Unidades) as Unidades, SUM(t1.Importe) as Importe\n                FROM {$lineasTabla} as t1, {$pedidosTabla} as t2\n                WHERE t1.IDPedido=t2.IDPedido AND t2.IDEstado>='2' AND t2.FechaEntrada>='{$desdeFecha}'";
             if ($idProveedor !== '') {
                 $query .= " AND  t2.IDProveedor='{$idProveedor}'";
             }
             if ($idArticulo !== '') {
                 $query .= " AND t1.IDArticulo='{$idArticulo}'";
             }
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
         }
         $precioMedio = $rows[0]['Unidades'] != 0 ? $rows[0]['Importe'] / $rows[0]['Unidades'] : 0;
         $unidades = $rows[0]['Unidades'] == '' ? 0 : $rows['0']['Unidades'];
     }
     $this->values['datos'] = array('idsucursal' => $_SESSION['usuarioPortal']['SucursalActiva']['Id'], 'articulo' => $articulo, 'proveedor' => $proveedor, 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $this->periodos, 'precioMedio' => number_format($precioMedio, 3));
     // Obtener el litado historico de compras para el articulo y proveedor
     // Solo muestra los pedidos que están confirmador o facturados
     $em = new EntityManager($articulo->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.IDLinea,t1.IDPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.FechaEntrada,'%d-%m-%Y') as FechaEntrada,t4.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe\n                FROM {$pedidosTabla} as t1, {$lineasTabla} as t2";
         if ($idProveedor !== '') {
             $query .= ", {$proveedorTabla} as t3";
         }
         if ($idArticulo !== '') {
             $query .= ", {$articuloTabla} as t4";
         }
         $query .= " WHERE t1.IDPedido=t2.IDPedido";
         if ($idProveedor !== '') {
             $query .= " AND t1.IDProveedor=t3.IDProveedor AND t1.IDProveedor='{$idProveedor}' ";
         }
         if ($idArticulo !== '') {
             $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'";
         }
         $query .= "\n                AND t1.IDEstado>='2'\n                AND t1.FechaEntrada>='{$desdeFecha}'\n                ORDER BY t1.FechaEntrada, t1.IDPedido DESC";
         //echo $query;
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     $this->values['listado'] = $rows;
     unset($em);
     unset($articulo);
     unset($proveedor);
     return array('template' => '_Emergente/historicoCompras.html.twig', 'values' => $this->values);
 }
 /**
  * Renderiza el template _Emergente/historicoCompras.html.twig
  * mostrando las compras realizadas a un proveedor de un articulo y un periodo dado.
  *
  * La información se obtiene en base a los pedidos RECEPCIONADOS o FACTURADOS.
  *
  * No se tienen en cuenta los pedidos no confirmados.
  *
  * Puede entrar por POST o por GET.
  *
  * Si es por POST los parametros vienen en:
  *
  *  idArticulo, idProveedor, periodo
  *
  * Si es por GET los parametros vienen en:
  *
  *  posicion 2 (idArticulo), 3 (idProveedor), 4 (periodo), 5 (formato)
  *
  * @return array El template y los datos
  */
 public function HistoricoComprasAction()
 {
     $periodos = array(array('Id' => '0', 'Value' => 'Último Mes'), array('Id' => '1', 'Value' => 'Último Trimestre'), array('Id' => '2', 'Value' => 'Último Año'), array('Id' => '3', 'Value' => 'Todo'));
     switch ($this->request["METHOD"]) {
         case 'GET':
             $idArticulo = $this->request['2'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idProveedor = $this->request['3'];
             if ($idProveedor == '0') {
                 $idProveedor = '';
             }
             $periodo = $this->request['4'];
             $formato = $this->request['5'];
             break;
         case 'POST':
             $idArticulo = $this->request['idArticulo'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idProveedor = $this->request['idProveedor'];
             if ($idProveedor == '0') {
                 $idProveedor = '';
             }
             $periodo = $this->request['periodo'];
             $formato->this->request['formato'];
             break;
     }
     $formato = strtoupper($formato);
     // Construir la parte del filtro que depende del periodo
     switch ($periodo) {
         case '':
             $periodo = 1;
         case '0':
             // Ultimo mes
             $diferenciaDias = -30;
             break;
         case '1':
             // Ultimo Trimestre
             $diferenciaDias = -90;
             break;
         case '2':
             // Ultimo año
             $diferenciaDias = -365;
             break;
         case '3':
             // Todo, 20 años hacia atrás
             $diferenciaDias = -7300;
             break;
     }
     $fecha = new Fecha(date('Y-m-d'));
     $desdeFecha = $fecha->sumaDias($diferenciaDias);
     unset($fecha);
     $proveedor = new Proveedores($idProveedor);
     $proveedorTabla = $proveedor->getDataBaseName() . "." . $proveedor->getTableName();
     $articulo = new Articulos($idArticulo);
     $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName();
     $pedidos = new PedidosCab();
     $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName();
     unset($pedidos);
     $lineas = new PedidosLineas();
     $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     // Calcular el total de unidades compradas y el precio medio de compra
     // Solo calcula los pedidos que están recepcionados o facturados
     if ($idArticulo != '' or $idProveedor != '') {
         $em = new EntityManager($articulo->getConectionName());
         if ($em->getDbLink()) {
             $query = "SELECT SUM(t1.Unidades) as Unidades, SUM(t1.Importe) as Importe\n                FROM {$lineasTabla} as t1, {$pedidosTabla} as t2\n                WHERE t1.IDPedido=t2.IDPedido AND t2.IDEstado>='2' AND t2.FechaEntrada>='{$desdeFecha}'";
             if ($idProveedor !== '') {
                 $query .= " AND  t2.IDProveedor='{$idProveedor}'";
             }
             if ($idArticulo !== '') {
                 $query .= " AND t1.IDArticulo='{$idArticulo}'";
             }
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
         }
         $precioMedio = $rows[0]['Unidades'] != 0 ? $rows[0]['Importe'] / $rows[0]['Unidades'] : 0;
         $unidades = $rows[0]['Unidades'] == '' ? 0 : $rows['0']['Unidades'];
     }
     $values['datos'] = array('idsucursal' => $_SESSION['suc'], 'articulo' => $articulo->iterator(), 'proveedor' => $proveedor->iterator(), 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $periodos, 'precioMedio' => number_format($precioMedio, 3));
     // Obtener el litado historico de compras para el articulo y proveedor
     // Solo muestra los pedidos que están confirmador o facturados
     $em = new EntityManager($articulo->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.IDLinea,t1.IDPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.FechaEntrada,'%d-%m-%Y') as FechaEntrada,t2.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe\n                FROM {$pedidosTabla} as t1, {$lineasTabla} as t2";
         if ($idProveedor !== '') {
             $query .= ", {$proveedorTabla} as t3";
         }
         if ($idArticulo !== '') {
             $query .= ", {$articuloTabla} as t4";
         }
         $query .= " WHERE t1.IDPedido=t2.IDPedido";
         if ($idProveedor !== '') {
             $query .= " AND t1.IDProveedor=t3.IDProveedor AND t1.IDProveedor='{$idProveedor}' ";
         }
         if ($idArticulo !== '') {
             $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'";
         }
         $query .= "\n                AND t1.IDEstado>='2'\n                AND t1.FechaEntrada>='{$desdeFecha}'\n                ORDER BY t1.FechaEntrada, t1.IDPedido DESC";
         //$values['query'] = $query;
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     $values['listado'] = $rows;
     unset($em);
     unset($articulo);
     unset($proveedor);
     if (in_array($formato, $this->formats)) {
         $values['status'] = '200';
         $values['statusMessage'] = "";
         switch ($formato) {
             case '':
             case 'JSON':
                 header('Content-type: application/json; charset="UTF-8"', true);
                 $template = "_global/json.twig";
                 $this->values['json'] = $values;
                 break;
             case 'HTML':
                 $this->values = $values;
                 $template = "_Emergente/historicoCompras.html.twig";
                 break;
         }
     } else {
         $this->values['json'] = array('status' => 401, 'statusMessage' => 'Format not implemented', 'result' => array());
         $template = "_global/json.twig";
     }
     return array('template' => $template, 'values' => $this->values);
 }
 /**
  * Pedidos que estando confirmados, su fecha prevista de
  * entrega es anterior al día actual.
  * 
  * @return type
  */
 static function getEntradasRetrasadas()
 {
     $ped = new PedidosCab();
     $tablaPedidos = $ped->getDataBaseName() . "." . $ped->getTableName();
     $prov = new Proveedores();
     $tablaProveedores = $prov->getDataBaseName() . "." . $prov->getTableName();
     $rows = array();
     $hoy = date('Y-m-d');
     $em = new EntityManager($ped->getConectionName());
     if ($em->getDbLink()) {
         $query = "select a.PrimaryKeyMD5 as PrimaryKeyMD5,IDPedido,Fecha,RazonSocial,TotalBases from {$tablaPedidos} as a left join {$tablaProveedores} as c on a.IDProveedor=c.IDProveedor where (IDEstado='1') and FechaEntrega<'{$hoy}' order by Fecha ASC";
         $em->query($query);
         $rows = $em->fetchResult();
     }
     unset($em);
     unset($ped);
     unset($prov);
     return $rows;
 }