/**
  * Crea las líneas de recepción relativas al pedido
  *
  * @param integer $idPedido
  */
 private function cargaLineasPedido($idPedido)
 {
     $rows = array();
     $lineas = new PedidosLineas();
     $articulos = new Articulos();
     $em = new EntityManager($lineas->getConectionName());
     if ($em->getDbLink()) {
         $query = "select l.IDLinea\n                    from {$lineas->getDataBaseName()}.{$lineas->getTableName()} l, {$articulos->getDataBaseName()}.{$articulos->getTableName()} a\n                    where l.IDPedido='{$idPedido}' and\n                          l.IDEstado='1' and\n                          l.IDArticulo=a.IDArticulo and\n                          a.Inventario='1'\n                    order by IDLinea ASC;";
         $em->query($query);
         $rows = $em->fetchResult();
         // Borrar eventuales recepciones del pedido que no estén recepcionadas
         $recepciones = new Recepciones();
         $recepciones->queryDelete("Entidad='PedidosCab' and IDEntidad='{$idPedido}' and Recepcionada='0'");
         $em->desConecta();
     }
     // Por cada línea de pedido crea una línea de recepción
     foreach ($rows as $row) {
         $this->creaLineaRecepcion('PedidosCab', $idPedido, new PedidosLineas($row['IDLinea']));
     }
 }
 /**
  * Renderiza el template _Emergente/historicoVentas.html.twig
  * mostrando las ventas realizadas a un cliente de un articulo dado en un periodo.
  *
  * La información se obtiene en base a los albaranes confimardos o facturados.
  * No se tienen en cuenta los albaranes no confirmados.
  *
  * Puede entrar por POST o por GET.
  *
  * Si es por POST los parametros vienen en:
  *
  *  idArticulo, idCliente, periodo, formato
  *
  * Si es por GET los parametros vienen en:
  *
  *  posicion 2 (idArticulo), 3 (idCliente), 4 (periodo), 5 (formato)
  *
  * @return array El template y los datos
  */
 public function HistoricoVentasAction()
 {
     $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 = '';
             }
             $idCliente = $this->request['3'];
             if ($idCliente == '0') {
                 $idCliente = '';
             }
             $periodo = $this->request['4'];
             $formato = $this->request['5'];
             break;
         case 'POST':
             $idArticulo = $this->request['idArticulo'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idCliente = $this->request['idCliente'];
             if ($idCliente == '0') {
                 $idCliente = '';
             }
             $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);
     $cliente = new Clientes($idCliente);
     $clienteTabla = $cliente->getDataBaseName() . "." . $cliente->getTableName();
     $articulo = new Articulos($idArticulo);
     $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName();
     $pedido = new PedidosCab();
     $pedidoTabla = $pedido->getDataBaseName() . "." . $pedido->getTableName();
     unset($pedido);
     $lineas = new PedidosLineas();
     $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     // Calcular el total de unidades vendidas y el precio medio de venta
     if ($idArticulo != '' or $idCliente != '') {
         $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, {$pedidoTabla} as t2";
             $query .= " WHERE t1.IdPedido=t2.Id AND t2.Fecha>='{$desdeFecha}'";
             if ($idCliente !== '') {
                 $query .= " AND  t2.IdCliente='{$idCliente}'";
             }
             if ($idArticulo !== '') {
                 $query .= " AND t1.IdArticulo='{$idArticulo}'";
             }
             $em->query($query);
             //echo $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('articulo' => $articulo->iterator(), 'cliente' => $cliente->iterator(), 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $periodos, 'precioMedio' => number_format($precioMedio, 3));
     // Obtener el litado histórico de ventas para el articulo y cliente
     $em = new EntityManager($articulo->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.Id,t1.Id NumeroPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.Fecha,'%d-%m-%Y') as Fecha,t2.Descripcion,t2.Unidades,t2.Precio,t2.Descuento1,t2.Descuento2,t2.Descuento3,t2.Importe\n                FROM {$pedidoTabla} as t1, {$lineasTabla} as t2";
         if ($idCliente !== '') {
             $query .= ", {$clienteTabla} as t3";
         }
         if ($idArticulo !== '') {
             $query .= ", {$articuloTabla} as t4";
         }
         $query .= " WHERE t1.Id=t2.IdPedido";
         if ($idCliente !== '') {
             $query .= " AND t1.IdCliente=t3.Id AND t1.IdCliente='{$idCliente}' ";
         }
         if ($idArticulo !== '') {
             $query .= " AND t2.IdArticulo=t4.Id AND t2.IdArticulo='{$idArticulo}'";
         }
         $query .= "\n                AND t1.Fecha>='{$desdeFecha}'\n                ORDER BY t1.Fecha DESC, t1.Id DESC";
         $em->query($query);
         //echo $query;
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     $values['listado'] = $rows;
     unset($em);
     unset($articulo);
     unset($cliente);
     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/historicoVentas.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);
 }
 /**
  * Recalcula los importes de la factura en base a sus lineas
  * Se utiliza durante el proceso de facturacion agrupada
  */
 public function recalcula()
 {
     //Si el cliente no está sujeto a iva
     //pongo el iva a cero en las líneas para evitar que por cambio
     //de cliente se aplique indebidamente
     $cliente = new Clientes($this->IDCliente);
     if ($cliente->getIva()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Iva" => 0, "Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     } elseif ($cliente->getRecargoEqu()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     }
     unset($cliente);
     //SI TIENE DESCUENTO, CALCULO EL PORCENTAJE QUE SUPONE RESPECTO AL IMPORTE BRUTO
     //PARA REPERCUTUIRLO PORCENTUALMENTE A CADA BASE
     $pordcto = 0;
     if ($this->getDescuento() != 0) {
         $pordcto = round(100 * ($this->getDescuento() / $this->getImporte()), 2);
     }
     //Calcular los totales, desglosados por tipo de iva.
     $this->conecta();
     if (is_resource($this->_dbLink)) {
         $lineas = new FemitidasLineas();
         $tableLineas = "{$lineas->getDataBaseName()}.{$lineas->getTableName()}";
         $articulos = new Articulos();
         $tableArticulos = "{$articulos->getDataBaseName()}.{$articulos->getTableName()}";
         unset($lineas);
         unset($articulos);
         $query = "select sum(Importe) as Bruto,sum(ImporteCosto) as Costo from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "')";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $bruto = $rows[0]['Bruto'];
         $query = "select Iva,Recargo, sum(Importe) as Importe from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "') group by Iva,Recargo order by Iva";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $totbases = 0;
         $totiva = 0;
         $totrec = 0;
         $bases = array();
         foreach ($rows as $key => $row) {
             $importe = $row['Importe'] * (1 - $pordcto / 100);
             $cuotaiva = round($importe * $row['Iva'] / 100, 2);
             $cuotarecargo = round($importe * $row['Recargo'] / 100, 2);
             $totbases += $importe;
             $totiva += $cuotaiva;
             $totrec += $cuotarecargo;
             $bases[$key] = array('b' => $importe, 'i' => $row['Iva'], 'ci' => $cuotaiva, 'r' => $row['Recargo'], 'cr' => $cuotarecargo);
         }
         $subtotal = $totbases + $totiva + $totrec;
         // Calcular el recargo financiero según la forma de pago
         $formaPago = new FormasPago($this->IDFP);
         $recFinanciero = $formaPago->getRecargoFinanciero();
         $cuotaRecFinanciero = $subtotal * $recFinanciero / 100;
         unset($formaPago);
         $total = $subtotal + $cuotaRecFinanciero;
         //Calcular el peso, volumen y n. de bultos de los productos inventariables
         switch ($_SESSION['ver']) {
             case '1':
                 //Cristal
                 $columna = "MtsAl";
             case '0':
                 //Estandar
             //Estandar
             default:
                 $columna = "Unidades";
         }
         $em = new EntityManager($this->getConectionName());
         $query = "select sum(a.Peso*l.{$columna}) as Peso,\n                        sum(a.Volumen*l.{$columna}) as Volumen,\n                        sum(Unidades) as Bultos \n                      from {$tableArticulos} as a,{$tableLineas} as l\n                      where (l.IDArticulo=a.IDArticulo)\n                        and (a.Inventario='1')\n                        and (l.IDFactura='{$this->IDFactura}')";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         $this->setImporte($bruto);
         $this->setBaseImponible1($bases[0]['b']);
         $this->setIva1($bases[0]['i']);
         $this->setCuotaIva1($bases[0]['ci']);
         $this->setRecargo1($bases[0]['r']);
         $this->setCuotaRecargo1($bases[0]['cr']);
         $this->setBaseImponible2($bases[1]['b']);
         $this->setIva2($bases[1]['i']);
         $this->setCuotaIva2($bases[1]['ci']);
         $this->setRecargo2($bases[1]['r']);
         $this->setCuotaRecargo2($bases[1]['cr']);
         $this->setBaseImponible3($bases[2]['b']);
         $this->setIva3($bases[2]['i']);
         $this->setCuotaIva3($bases[2]['ci']);
         $this->setRecargo3($bases[2]['r']);
         $this->setCuotaRecargo3($bases[2]['cr']);
         $this->setTotalBases($totbases);
         $this->setTotalIva($totiva);
         $this->setTotalRecargo($totrec);
         $this->setRecargoFinanciero($recFinanciero);
         $this->setCuotaRecargoFinanciero($cuotaRecFinanciero);
         $this->setTotal($total);
         $this->setPeso($rows[0]['Peso']);
         $this->setVolumen($rows[0]['Volumen']);
         $this->setBultos($rows[0]['Bultos']);
         $this->save();
     }
 }
 /**
  * Renderiza el template _Emergente/historicoVentas.html.twig
  * mostrando las ventas realizadas a un cliente de un articulo dado en un periodo.
  *
  * La información se obtiene en base a los albaranes confimardos o facturados.
  * No se tienen en cuenta los albaranes no confirmados.
  *
  * Puede entrar por POST o por GET.
  *
  * Si es por POST los parametros vienen en:
  *
  *  idArticulo, idCliente, periodo
  *
  * Si es por GET los parametros vienen en:
  *
  *  posicion 2 (idArticulo), 3 (idCliente), 4 (periodo)
  *
  * @return array El template y los datos
  */
 public function HistoricoVentasAction()
 {
     switch ($this->request["METHOD"]) {
         case 'GET':
             $idArticulo = $this->request['2'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idCliente = $this->request['3'];
             if ($idCliente == '0') {
                 $idCliente = '';
             }
             $periodo = $this->request['4'];
             break;
         case 'POST':
             $idArticulo = $this->request['idArticulo'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idCliente = $this->request['idCliente'];
             if ($idCliente == '0') {
                 $idCliente = '';
             }
             $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);
     $cliente = new Clientes($idCliente);
     $clienteTabla = $cliente->getDataBaseName() . "." . $cliente->getTableName();
     $articulo = new Articulos($idArticulo);
     $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName();
     $albaran = new AlbaranesCab();
     $albaranTabla = $albaran->getDataBaseName() . "." . $albaran->getTableName();
     unset($albaran);
     $lineas = new AlbaranesLineas();
     $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     // Calcular el total de unidades vendidas y el precio medio de venta
     // No tiene en cuenta los albaranes que no están confirmados
     if ($idArticulo != '' or $idCliente != '') {
         $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, {$albaranTabla} as t2";
             $query .= " WHERE t1.IDAlbaran=t2.IDAlbaran AND t2.IDEstado<>'0' AND t2.Fecha>='{$desdeFecha}'";
             if ($idCliente !== '') {
                 $query .= " AND  t2.IDCliente='{$idCliente}'";
             }
             if ($idArticulo !== '') {
                 $query .= " AND t1.IDArticulo='{$idArticulo}'";
             }
             $em->query($query);
             //echo $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, 'cliente' => $cliente, 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $this->periodos, 'precioMedio' => number_format($precioMedio, 3));
     // Obtener el litado histórico de ventas para el articulo y cliente
     // Solo muestra los albaranes que están confirmador o facturados
     $em = new EntityManager($articulo->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.IDLinea,t1.IDAlbaran,t1.NumeroAlbaran,t1.PrimaryKeyMD5,DATE_FORMAT(t1.Fecha,'%d-%m-%Y') as Fecha,t1.IDEstado,t1.IDFactura,t2.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe,t2.IDPromocion\n                FROM {$albaranTabla} as t1, {$lineasTabla} as t2";
         if ($idCliente !== '') {
             $query .= ", {$clienteTabla} as t3";
         }
         if ($idArticulo !== '') {
             $query .= ", {$articuloTabla} as t4";
         }
         $query .= " WHERE t1.IDAlbaran=t2.IDAlbaran";
         if ($idCliente !== '') {
             $query .= " AND t1.IDCliente=t3.IDCliente AND t1.IDCliente='{$idCliente}' ";
         }
         if ($idArticulo !== '') {
             $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'";
         }
         $query .= "\n                AND t1.IDEstado<>'0'\n                AND t1.Fecha>='{$desdeFecha}'\n                ORDER BY t1.Fecha DESC, t1.IDAlbaran DESC";
         $em->query($query);
         //echo $query;
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     // Recorro el array de resultados y convierto (si procede) la columna IDPromocion
     // en un objeto promocion para tener todos los datos de la promocion en el template.
     foreach ($rows as $key => $value) {
         $rows[$key]['Estado'] = new EstadosAlbaranes($value['IDEstado']);
         if ($value['IDFactura']) {
             $rows[$key]['Factura'] = new FemitidasCab($value['IDFactura']);
         }
         if ($value['IDPromocion']) {
             $rows[$key]['IDPromocion'] = new Promociones($value['IDPromocion']);
         }
     }
     $this->values['listado'] = $rows;
     unset($em);
     unset($articulo);
     unset($cliente);
     return array('template' => '_Emergente/historicoVentas.html.twig', 'values' => $this->values);
 }
 /**
  * Devuelve un array de objetos articulos que cumplen la
  * regla $idRegla, ordenados por SortOrder ASC
  * 
  * El array tendrá $nItems elementos.
  * 
  * @param int $idRegla El id de la regla
  * @param int $nItems El número máximo de elementos a devolver. Opcional, por defecto todos.
  * @return \ErpArticulos array de objetos Articulos
  */
 public function getArticulos($idRegla, $nItems = 999999)
 {
     $array = array();
     if ($nItems <= 0) {
         $nItems = 999999;
     }
     $articulos = new Articulos();
     $tablaArticulos = $articulos->getTableName();
     unset($articulos);
     $em = new EntityManager($this->getConectionName());
     if ($em->getDbLink()) {
         $query = "\n                SELECT a.IDArticulo as Id\n                FROM {$em->getDataBase()}.{$this->getTableName()} r, {$em->getDataBase()}.{$tablaArticulos} a\n                WHERE r.IDRegla='{$idRegla}' AND r.IDArticulo=a.IDArticulo AND a.Publish='1' AND a.Vigente='1' AND a.Deleted='0'\n                ORDER BY r.SortOrder ASC\n                LIMIT {$nItems}";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     unset($em);
     if (is_array($rows)) {
         foreach ($rows as $row) {
             $array[$row['Id']] = new Articulos($row['Id']);
         }
     }
     return $array;
 }
 private function recalcula($idAlmacen)
 {
     // Poner las reservadas y el entrando a cero
     $stock = new Existencias();
     $stock->queryUpdate(array("Reservadas" => 0, "Entrando" => 0), "IDAlmacen='{$idAlmacen}'");
     // Borrar los registros de stock que estén a cero
     $stock->queryDelete("IDAlmacen='{$idAlmacen}' and Reales=0 and Pales=0 and Cajas=0 and Reservadas=0 and Entrando=0");
     // Calcular las reservas de los artículos inventariables
     $lineas = new AlbaranesLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion, sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['reservas'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazReserva($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     // Calcular el entrando de los artículos inventariables
     $lineas = new PedidosLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion,sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['entrando'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazEntrando($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     return $resultado;
 }
Beispiel #7
0
 /**
  * Guardo la familia y actualizo sus articulos
  * haciendo que hereden ciertas características.
  * 
  * @return boolean
  */
 public function save()
 {
     $ok = parent::save();
     if ($ok) {
         $this->conecta();
         $articulo = new Articulos();
         $dbName = $articulo->getDataBaseName();
         $tableName = $articulo->getTableName();
         unset($articulo);
         if (is_resource($this->_dbLink)) {
             // Actualizar articulos
             $query = "UPDATE {$dbName}.{$tableName} set\n                            Inventario='{$this->Inventario}',\n                            Trazabilidad='{$this->Trazabilidad}',\n                            Publish='{$this->Publish}',\n                            BajoPedido='{$this->BajoPedido}',\n                            BloqueoStock='{$this->BloqueoStock}',\n                            ActiveFrom = CASE\n                              WHEN ActiveFrom<'{$this->ActiveFrom}' THEN '{$this->ActiveFrom}' ELSE ActiveFrom\n                            END,\n                            ActiveTo = CASE\n                              WHEN ActiveTo>'{$this->ActiveTo}' THEN '{$this->ActiveTo}' ELSE ActiveTo\n                            END\n                            where (IDCategoria='{$this->IDFamilia}') \n                                or (IDFamilia='{$this->IDFamilia}') \n                                or (IDSubfamilia='{$this->IDFamilia}');";
             $this->_em->query($query);
             // Actualizar familias y subfamilias
             $filtro = "BelongsTo='{$this->IDFamilia}'";
             $this->queryUpdate(array("MostrarPortada" => $this->MostrarPortada, "MostrarEnTpv" => $this->MostrarEnTpv), $filtro);
             //$this->_em->desConecta();
         }
         //unset($this->_em);
     }
     return $ok;
 }
Beispiel #8
0
 /**
  * Anula la confirmación del pedido
  * Pasando del estado CONFIRMADO (1) a PTE. CONFIRMAR (0)
  * Solo se tienen en cuenta los artículos inventariables.
  * Anula del registro de existencias las cantidades pendientes de entrada
  */
 public function anulaConfirmacion()
 {
     // Si está confirmado
     if ($this->getIDEstado()->getIDTipo() == 1) {
         $lineas = new PedidosLineas();
         $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
         $articulos = new Articulos();
         $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
         $em = new EntityManager($this->getConectionName());
         $query = "SELECT t1.IDArticulo, t1.IDAlmacen, sum(t1.Unidades) as Entrando, t1.UnidadMedida\n                        FROM {$tablaLineas} as t1, {$tablaArticulos} as t2\n                        WHERE t1.IDPedido='{$this->IDPedido}'\n                            AND t1.IDEstado='1'\n                            AND t1.IDArticulo=t2.IDArticulo\n                            AND t2.Inventario='1'\n                        GROUP BY t1.IDArticulo, t1.IDAlmacen, t1.UnidadMedida";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         // Quitar previsión de entrada
         $exi = new Existencias();
         foreach ($rows as $row) {
             $exi->quitaEntrando($row['IDAlmacen'], $row['IDArticulo'], $row['Entrando'], $row['UnidadMedida'], $this->Deposito);
         }
         unset($exi);
         // Marcar como NO CONFIRMADAS las líneas de pedido y
         // quitar la eventual asignación de lotes y UnidadesRecbidas
         $lineas->queryUpdate(array("IDEstado" => 0), "IDPedido='{$this->IDPedido}' and IDEstado='1'");
         // Borrar las eventuales líneas de recepción
         $recepciones = new Recepciones();
         $recepciones->queryDelete("Entidad='PedidosCab' and IDEntidad='{$this->IDPedido}'");
         // Anular la reserva en la cabecera del pedido
         // y quitar la fecha prevista de entrega y las posibles incidencias
         $this->setIDEstado(0);
         $this->setFechaEntrega('00/00/0000');
         $this->setIncidencias('');
         $this->save();
     }
 }
 /**
  * Crea las líneas de expediciones relativas al traspaso
  *
  * @param integer $idTraspaso
  */
 private function cargaLineasTraspaso($idTraspaso)
 {
     // Cargo las lineas del traspaso que no están expedidas y cuyos artículos son inventariables.
     // Borro las eventuales líneas de expedición que no están expedidas.
     $rows = array();
     $lineas = new TraspasosLineas();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $articulos = new Articulos();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     $em = new EntityManager($lineas->getConectionName());
     if ($em->getDbLink()) {
         $query = "select l.IDLinea\n                    from {$tablaLineas} l, {$tablaArticulos} a\n                    where l.IDTraspaso = '{$idTraspaso}' and\n                          l.IDEstado = '1' and\n                          l.Tipo = '0' and\n                          l.IDArticulo = a.IDArticulo and\n                          a.Inventario = '1'\n                    order by IDLinea ASC;";
         $em->query($query);
         $rows = $em->fetchResult();
         $expediciones = new Expediciones();
         $expediciones->queryDelete("Entidad='TraspasosCab' and IDEntidad='{$idTraspaso}' and Expedida='0'");
         unset($expediciones);
         $em->desConecta();
     }
     unset($em);
     // Crea las líneas de expedición preasignando lotes y ubicaciones
     foreach ($rows as $row) {
         $this->preasignaLinea('TraspasosCab', $idTraspaso, new TraspasosLineas($row['IDLinea']));
     }
 }
Beispiel #10
0
 static function getTopNFamilias($n = 10, $diasAtras = 365)
 {
     $femi = new FemitidasCab();
     $tablaFacturas = $femi->getDataBaseName() . "." . $femi->getTableName();
     $lineas = new FemitidasLineas();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $arti = new Articulos();
     $tablaArticulos = $arti->getDataBaseName() . "." . $arti->getTableName();
     $fami = new Familias();
     $tablaFamilias = $fami->getDataBaseName() . "." . $fami->getTableName();
     $idRol = $_SESSION['usuarioPortal']['IdRol'];
     if ($idRol != '0' and $idRol != '9') {
         $filtro = "(f.IDComercial='{$_SESSION['usuarioPortal']['Id']}')";
     } else {
         $filtro = "(1)";
     }
     $hoy = new Fecha();
     $desde = $hoy->sumaDias(-$diasAtras);
     $filtro .= " AND (f.Fecha>='{$desde}')";
     $em = new EntityManager($femi->getConectionName());
     if ($em->getDbLink()) {
         $query = "select c.Familia,sum(l.Importe) as Total \n                from {$tablaLineas} as l \n                    left join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo\n                    left join {$tablaFacturas} as f on l.IDFactura=f.IDFactura\n                    left join {$tablaFamilias} as c on a.IDFamilia=c.IDFamilia\n                where {$filtro}\n                group by c.IDFamilia\n                order by sum(l.Importe) DESC\n                limit 0,{$n}";
         $em->query($query);
         $rows = $em->fetchResult();
     }
     unset($em);
     unset($femi);
     unset($lineas);
     unset($arti);
     return $rows;
 }