/** * Genera array con los clientes del la ruta para el * comercial y dia indicado * * @param integer $idComercial * @param integer $dia * @return <type> */ public function listAction($idComercial = '', $dia = '') { if ($idComercial == '') { $idComercial = $this->request[2]; } if ($dia == '') { $dia = $this->request[3]; } $this->values['listado']['dia'] = $dia; // Busco los clientes del comercial indicado y sucursal actual // que aun no estén asignados al día solicitado $cliente = new Clientes(); $rutasVentas = new RutasVentas(); $filtro = "IDComercial='{$idComercial}'\n AND IDSucursal='{$_SESSION['suc']}'\n AND IDCliente NOT IN\n (SELECT IDCliente FROM {$rutasVentas->getDataBaseName()}.{$rutasVentas->getTableName()}\n WHERE IDComercial='{$idComercial}' AND Dia='{$dia}')"; $clientes = $cliente->cargaCondicion("IDCliente as Id, RazonSocial as Value", $filtro, "RazonSocial ASC"); $this->values['listado']['clientes'] = $clientes; array_unshift($this->values['listado']['clientes'], array('Id' => '', 'Value' => ':: Indique un cliente')); // Busco las zonas de los clientes del comercial indicado y sucursal actual // que aun no estén asignados al día solicitado $zona = new Zonas(); $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT DISTINCT t1.IDZona as Id, t2.Zona as Value \n FROM \n {$cliente->getDataBaseName()}.{$cliente->getTableName()} as t1, \n {$zona->getDataBaseName()}.{$zona->getTableName()} as t2\n WHERE t1.IDZona=t2.IDZona\n AND t1.IDComercial='{$idComercial}'\n AND t1.IDSucursal='{$_SESSION['suc']}'\n AND t1.IDCliente NOT IN\n (SELECT IDCliente FROM {$rutasVentas->getDataBaseName()}.{$rutasVentas->getTableName()}\n WHERE IDComercial='{$idComercial}' AND Dia='{$dia}')\n ORDER BY t2.Zona ASC"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } $this->values['listado']['zonas'] = $rows; array_unshift($this->values['listado']['zonas'], array('Id' => '', 'Value' => ':: Indique una Zona')); //----------------------------------------------- // Lleno los clientes asignados al comercial y día // ordenados por Zona // ----------------------------------------------- $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t1.Id \n FROM \n {$rutasVentas->getDataBaseName()}.{$rutasVentas->getTableName()} as t1,\n {$cliente->getDataBaseName()}.{$cliente->getTableName()} as t2\n WHERE t1.IDCliente=t2.IDCliente\n AND t2.IDSucursal='{$_SESSION['suc']}'\n AND t1.IDComercial='{$idComercial}'\n AND t1.Dia='{$dia}'\n ORDER BY t1.OrdenCliente,t1.IDZona"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($em); unset($em); unset($cliente); unset($zona); unset($rutasVentas); foreach ($rows as $row) { $lineas[] = new $this->parentEntity($row['Id']); } //----------------------------------------------- $template = $this->entity . '/list.html.twig'; $this->values['linkBy']['value'] = $idComercial; $this->values['listado']['data'] = $lineas; $this->values['listado']['nClientes'] = count($lineas); unset($lis); unset($lineas); return array('template' => $template, 'values' => $this->values); }
/** * Devuelve el top de clientes * @param int $periodo * @param int $nItems * @return array */ static function getTopClientes($periodo = 3, $nItems = 10) { // Construir la parte del filtro que depende del periodo switch ($periodo) { case '': $periodo = 0; case '0': // Ultimo mes $diferenciaDias = -30; $titlePeriodo = "Último mes"; break; case '1': // Ultimo Trimestre $diferenciaDias = -90; $titlePeriodo = "Últime trimestre"; break; case '2': // Ultimo Semestre $diferenciaDias = -180; $titlePeriodo = "Último Semestre"; break; case '3': // Ultimo año $diferenciaDias = -365; $titlePeriodo = "Últimos 12 meses"; break; case '4': // Todo, 20 años hacia atrás $diferenciaDias = -7300; $titlePeriodo = "Todos los datos"; break; } $fecha = new Fecha(); $desdeFecha = $fecha->sumaDias($diferenciaDias); unset($fecha); $cliente = new Clientes(); $clienteTabla = $cliente->getDataBaseName() . "." . $cliente->getTableName(); $pedidos = new PedidosCab(); $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName(); unset($pedidos); $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t2.RazonSocial as name, SUM(t1.TotalBases) as y\n FROM {$pedidosTabla} as t1, {$clienteTabla} as t2\n WHERE t1.IdCliente=t2.Id AND t1.Fecha>='{$desdeFecha}' \n GROUP BY t1.IdCliente\n ORDER BY SUM(t1.TotalBases) DESC LIMIT {$nItems}"; //echo $query; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($cliente); return array('title' => "TOP-{$nItems} Clientes. {$titlePeriodo}", 'serieName' => "Ventas", 'serie' => $rows); }
/** * Genera array con las direcciones de entrega de la ruta para el * repartidor y dia indicado * * @param integer $idRepartidor * @param integer $dia * @return <type> */ public function listAction($idRuta = '', $dia = '') { if ($idRuta == '') { $idRuta = $this->request[2]; } if ($dia == '') { $dia = $this->request[3]; } $this->values['listado']['dia'] = $dia; $cliente = new Clientes(); $zona = new Zonas(); $dentrega = new ClientesDentrega(); $ruta = new RutasRepartoDetalle(); // Busco las direcciones de entrega de la ruta indicada y sucursal actual // que aun no estén asignadas al día solicitado $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t1.IDDirec as Id, t1.Nombre as Value\n FROM \n {$dentrega->getDataBaseName()}.{$dentrega->getTableName()} as t1, \n {$cliente->getDataBaseName()}.{$cliente->getTableName()} as t2, \n {$zona->getDataBaseName()}.{$zona->getTableName()} as t3\n WHERE t1.IDCliente=t2.IDCliente\n AND t2.IDSucursal='{$_SESSION['suc']}'\n AND t3.IDSucursal='{$_SESSION['suc']}'\n AND t1.IDZona=t3.IDZona\n AND t1.IDDirec NOT IN\n (SELECT IDDirec FROM {$ruta->getDataBaseName()}.{$ruta->getTableName()}\n WHERE IDRuta='{$idRuta}' AND Dia='{$dia}')\n ORDER BY t1.Nombre ASC"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($em); $this->values['listado']['direcciones'] = $rows; array_unshift($this->values['listado']['direcciones'], array('Id' => '', 'Value' => ':: Indique una dirección')); // Busco las zonas de las direcciones de entrega de la sucursal actual // que aun no estén asignadas al día solicitado $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT DISTINCT t1.IDZona as Id, t2.Zona as Value \n FROM \n {$dentrega->getDataBaseName()}.{$dentrega->getTableName()} as t1, \n {$zona->getDataBaseName()}.{$zona->getTableName()} as t2, \n {$cliente->getDataBaseName()}.{$cliente->getTableName()} as t3\n WHERE t1.IDZona=t2.IDZona\n AND t1.IDCliente=t3.IDCliente\n AND t3.IDSucursal='{$_SESSION['suc']}'\n AND t2.IDSucursal='{$_SESSION['suc']}'\n AND t1.IDDirec NOT IN\n (SELECT IDDirec FROM {$ruta->getDataBaseName()}.{$ruta->getTableName()}\n WHERE IDRuta='{$idRuta}' AND Dia='{$dia}')\n ORDER BY t2.Zona ASC"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($em); $this->values['listado']['zonas'] = $rows; array_unshift($this->values['listado']['zonas'], array('Id' => '', 'Value' => ':: Indique una Zona')); //----------------------------------------------- // Lleno las direcciones asignadas al repartidor y día // ordenados por Orden de direccion de entrega y IDZona // ----------------------------------------------- $em = new EntityManager($cliente->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t1.Id,t1.IDRepartidor \n FROM \n {$ruta->getDataBaseName()}.{$ruta->getTableName()} as t1, \n {$dentrega->getDataBaseName()}.{$dentrega->getTableName()} as t2, \n {$zona->getDataBaseName()}.{$zona->getTableName()} as t3\n WHERE t1.IDDirec=t2.IDDirec\n AND t2.IDZona=t3.IDZona\n AND t1.IDRuta='{$idRuta}'\n AND t1.Dia='{$dia}'\n ORDER BY t1.OrdenDirec,t1.IDZona"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($em); unset($cliente); unset($dentrega); unset($zona); foreach ($rows as $row) { $lineas[] = new $this->entity($row['Id']); } //----------------------------------------------- $this->values['listado']['IDRepartidor'] = $rows[0]['IDRepartidor']; $template = $this->entity . '/list.html.twig'; $this->values['linkBy']['value'] = $idRuta; $this->values['listado']['data'] = $lineas; $this->values['listado']['nDirecciones'] = count($lineas); unset($lis); unset($lineas); return array('template' => $template, 'values' => $this->values); }