private function generaCombinaciones($idArticulo, $combinaciones) { foreach ($combinaciones as $value) { $nuevo = new Articulos($idArticulo); $nuevo->setIDArticulo(''); $nuevo->setDescripcion($nuevo->getDescripcion() . " " . $value); $nuevo->setBelongsTo($idArticulo); $nuevo->setPrimaryKeyMD5(''); $nuevo->setNivelJerarquico($nuevo->getNivelJerarquico() + 1); $nuevo->create(); } }
/** * Devuelve array de objetos Articulos con los * artículos de la promoción en curso * * @param type $nItems Cero o negativo, sin límite. Positivo indica el número de artículos a devolver * @return array Array de objetos Artículos */ public function getArticulos($nItems = 0) { $limit = $nItems <= 0 ? "" : "limit {$nItems}"; $array = array(); if ($this->getIDFamilia()->getPrimaryKeyValue()) { $articulo = new Articulos(); $rows = $articulo->cargaCondicion("IDArticulo", "IDFamilia='{$this->getIDFamilia()->getPrimaryKeyValue()}'", "PublishedAt DESC {$limit}"); unset($articulo); foreach ($rows as $row) { $array[] = new Articulos($row['IDArticulo']); } } else { $array[] = $this->getIDArticulo(); } return $array(); }
/** * Finds the Articulos model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Articulos the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModelArticulo($id) { $usuario = Yii::$app->getUser()->identity->getId(); if (($model = Articulos::find()->where(['idarticulo' => $id, 'usuario' => $usuario])->one()) !== null) { return $model; } }
public function mostrar_filas() { $toggle = 0; $result = parent::get_detalle(); $articulos = new Articulos(); print '<tbody>'; while ($row = mysql_fetch_array($result)) { print '<tr class="'; $toggle++ % 2 == 0 ? print 'even' : (print 'odd'); print '">'; print '<td>' . Formatter::code_format($row[2]) . '</td>'; print '<td>' . $articulos->get_articulo_descripcion($row[2]) . '</td>'; print '<td align="right">' . Formatter::number_format($row[3]) . '</td>'; print '</tr>'; } print '</tbody>'; }
public function addProduct($idArticulo, $unidades) { $ok = false; $filtro = "session='{$_SESSION['IdSesion']}' and IDArticulo='{$idArticulo}'"; $rows = $this->cargaCondicion("Id", $filtro); if ($rows[0]['Id']) { $carrito = new Carrito($rows[0]['Id']); $carrito->setUnidades($carrito->getUnidades() + $unidades); $carrito->setImporte($carrito->getUnidades() * $carrito->getPrecio() * (1 - $carrito->getDescuento() / 100)); $ok = $carrito->save(); unset($carrito); } else { $articulo = new Articulos($idArticulo); $this->sesion = $_SESSION['IdSesion']; $this->IpOrigen = $_SERVER['REMOTE_ADDR']; $this->UserAgent = $_SERVER['HTTP_USER_AGENT']; $this->IDArticulo = $idArticulo; $this->Descripcion = $articulo->getDescripcion(); $this->Unidades = $unidades; $this->UnidadMedida = $articulo->getUnidadMedida("UMV"); $this->Precio = $articulo->getPrecioVentaConImpuestos(); $this->Descuento = 0; $this->Importe = $this->Unidades * $this->Precio * (1 - $this->Descuento / 100); $this->Iva = $articulo->getIDIva()->getIva(); $this->Recargo = $articulo->getIDIva()->getRecargo(); $this->Estado = 0; $ok = $this->create() > 0; unset($articulo); } return $ok; }
/** * Calculo las unidades (kgrs) netas restando a las unidades brutas * Comprueba que se haya indicado el lote si procede( * Comprueba que se haya indicado la ubiación si procede * * @return boolean */ public function validaLogico() { parent::validaLogico(); $this->setUnidadesNetas($this->UnidadesBrutas - ($this->Pales * $this->DestarePale + $this->Cajas * $this->DestareCaja)); if ($this->Unidades == 0 or $this->UnidadesNetas == 0) { $this->_errores[] = "Debe indicar la cantidad recibida y las unidades brutas"; } $articulo = new Articulos($this->IDArticulo); if ($articulo->getTrazabilidad()->getIDTipo() and !$this->IDLote) { $this->_errores[] = "Debe indicar un lote"; } unset($articulo); $almacen = new Almacenes($this->IDAlmacen); if ($almacen->getControlUbicaciones()->getIDTipo() and !$this->IDUbicacion) { $this->_errores[] = "Debe indicar una ubicación"; } unset($almacen); return count($this->_errores) == 0; }
public function valida(array $rules) { $validacion = parent::valida($rules); if ($validacion) { if ($this->FechaFabricacion == "0000-00-00") { $this->FechaFabricacion = date('Y-m-d'); } if ($this->FechaCaducidad <= $this->FechaFabricacion) { //Calcular la fecha de caducidad en base a la de fabricacion //y el número de días de caducidad del artículo $articulo = new Articulos($this->IDArticulo); $date = new Fecha($this->FechaFabricacion); $this->FechaCaducidad = $date->sumaDias($articulo->getCaducidad()); unset($articulo); unset($date); } } return $validacion; }
/** * 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'])); } }
/** * Realiza validaciones logicas antes de crear/actualizar el objeto: * * 1.- Comprueba la existencia del lote y ubicación (si procede) * 2.- Agrupa con código de artículo, lote ubicación */ public function validaLogico() { parent::validaLogico(); // Control Lote y Ubicación $articulo = new Articulos($this->IDArticulo); if ($articulo->getStatus()) { $trazabilidad = $articulo->getTrazabilidad()->getIDTipo() == 1; $this->Descripcion = $articulo->getDescripcion(); } else { $this->_errores[] = "El artículo no existe"; } unset($articulo); $inventario = new InventariosCab($this->IDInventario); $controlUbicaciones = $inventario->getIDAlmacen()->getControlUbicaciones()->getIDTipo() == 1; unset($inventario); if ($trazabilidad) { if ($this->IDLote == 0) { $this->_errores[] = "Debe indicar un lote"; } else { // Comprobar que el lote pertenezca al artículo $lote = new Lotes($this->IDLote); if ($lote->getIDArticulo()->getIDArticulo() != $this->IDArticulo) { $this->_errores[] = "El lote no pertenece al artículo"; } unset($lote); } } if ($controlUbicaciones and $this->IDUbicacion == 0) { $this->_errores[] = "Debe indicar la ubicación"; } // Agrupar en la misma línea de inventario las entradas // que coinciden en el código de articulo, lote y ubicación $rows = $this->cargaCondicion("*", "IDArticulo='{$this->IDArticulo}' and IDLote='{$this->IDLote}' and IDUbicacion='{$this->IDUbicacion}' and IDInventario='{$this->IDInventario}'"); if (count($rows)) { $this->_idLineaNueva = $rows[0]['IDLinea']; $this->Stock += $rows[0]['Stock']; $this->Cajas += $rows[0]['Cajas']; $this->Pales += $rows[0]['Pales']; $this->_flagAgrupa = true; } }
public function listArticulosAction($idFirma = "", $idFamilia = "") { if ($idFirma == '') { $idFirma = $this->request[2]; } if ($idFamilia == '') { $idFamilia = $this->request[3]; } $this->values['idFirma'] = $idFirma; $this->values['idFamilia'] = $idFamilia; $this->values['promociones'] = array(); $this->values['promociones'][] = new Promociones(); $promos = Articulos::getPromocionesFirmaFamilia($idFirma, $idFamilia, false); foreach ($promos as $promo) { $this->values['promociones'][] = new Promociones($promo['Id']); } return array('template' => $this->entity . "/listArticulos.html.twig", 'values' => $this->values); }
/** * Valida que la cantidad indicada esté disponible en * el almacén, ubicación y lote * * @return boolean */ public function validaLogico() { parent::validaLogico(); $articulo = new Articulos($this->IDArticulo); $bloqueoStock = $articulo->getBloqueoStock()->getIDTIpo() == '1'; if ($this->Unidades == 0) { $this->_errores[] = "Debe indicar una cantidad distinta a cero"; } $almacen = new Almacenes($this->IDAlmacen); //print_r($this); if ($almacen->getControlUbicaciones()->getIDTipo() == '1' and $this->IDUbicacion == 0) { $this->_errores[] = "Debe indicar la ubicación"; } unset($almacen); if ($bloqueoStock) { $udadMedidaVenta = $articulo->getUMV(); $udadMedidaAlmacen = $articulo->getUMA(); $stock = new Existencias(); $existencias = $stock->getStock($this->IDArticulo, $this->IDAlmacen, $this->IDLote, $this->IDUbicacion); unset($stock); // Calcular las cantidades de ese articulo, almacen, lote y ubicación que estan // en lineas de expediciones sin estar expedidas aún. O sea lo que está en // proceso de expedición. No tengo en cuenta los valores de la BD de la línea actual // porque puede que hayan cambiado. $filtro = "IDLinea<>'{$this->IDLinea}' and Expedida='0' and IDAlmacen='{$this->IDAlmacen}' and IDLote='{$this->IDLote}' and IDUbicacion='{$this->IDUbicacion}'"; $expedicion = new Expediciones(); $rows = $expedicion->cargaCondicion("sum(Unidades) as Unidades,sum(Pales) as Pales,sum(Cajas) as Cajas", $filtro); $row = $rows[0]; $row['Unidades'] += $this->Unidades; $row['Pales'] += $this->Pales; $row['Cajas'] += $this->Cajas; unset($expedicion); if ($existencias['DI'] < $articulo->convertUnit('UMV', 'UMA', $row['Unidades'])) { $this->_errores[] = "Hay " . round($articulo->convertUnit('UMA', 'UMV', $existencias['DI']), 2) . " {$udadMedidaVenta} (" . round($existencias['DI'], 2) . " {$udadMedidaAlmacen}) disponibles para ese lote y ubicación"; } if ($existencias['CA'] < $row['Cajas']) { $this->_errores[] = "Hay {$existencias['CA']} cajas disponibles para ese lote y ubicacion"; } if ($existencias['PT'] < $row['Pales']) { $this->_errores[] = "Hay {$existencias['PT']} pales disponibles para ese lote y ubicacion"; } } unset($articulo); return count($this->_errores) == 0; }
exit; } // --------------------------------------------------------------- // CARGO LOS PARAMETROS DE CONFIGURACION. // --------------------------------------------------------------- $config = sfYaml::load('../config/config.yml'); $app = $config['config']['app']; // --------------------------------------------------------------- // ACTIVAR EL AUTOLOADER DE CLASES Y FICHEROS A INCLUIR // --------------------------------------------------------------- define("APP_PATH", $_SERVER['DOCUMENT_ROOT'] . $app['path'] . "/"); include_once "../" . $app['framework'] . "Autoloader.class.php"; Autoloader::setCacheFilePath(APP_PATH . 'tmp/class_path_cache.txt'); Autoloader::excludeFolderNamesMatchingRegex('/^CVS|\\..*$/'); Autoloader::setClassPaths(array('../' . $app['framework'], '../entities/', '../lib/')); spl_autoload_register(array('Autoloader', 'loadClass')); $v = $_GET; $idArticulo = $v['idArticulo']; $formato = strtoupper($v['formato']); $articulo = new Articulos($idArticulo); $arrayEscandallo = $articulo->getEscandallo(); switch ($formato) { case '': case 'JSON': $tag = json_encode($arrayEscandallo); break; default: $tag = ""; break; } echo $tag;
/** * Recepciona la línea de elaboración de tipo 1 (la de entrada) * Actualiza las existencias y marca la línea como recepcionada. * * NO SE REALIZA NINGUN TRATAMIENTO CON LAS EXISTENCIAS SI EL ARTICULO NO ES INVENTARIABLE * * @return boolean */ public function recepciona() { $ok = true; $articulo = new Articulos($this->IDArticulo); $esInventariable = $articulo->getInventario()->getIDTipo(); if ($esInventariable) { // Recepcionar la línea de elaboración $recepcion = new Recepciones(); $unidadesNetas = $recepcion->recepciona("ManufacCab", $this->IDLinea); unset($recepcion); } else { $unidadesNetas = $this->Unidades; } if ($ok) { // Marcar la línea de elaboración como recepcionada y // Poner las unidades netas recibidas // Recalcular la línea // Actualiza los precios del artículo $this->setIDEstado(3); $this->setUnidades($unidadesNetas); $this->TotalizaLinea(); if ($unidadesNetas != 0) { $articulo = new Articulos($this->IDArticulo); $articulo->actualizaPrecios($unidadesNetas, abs($this->Importe / $unidadesNetas)); unset($articulo); } $this->save(); } return $ok; }
private function cargarLineas($idPedido, $idFirma, $idCliente, $archivoCsv) { $nLinea = 0; $errores = array(); $csv = new Archivo($archivoCsv); $csv->setColumnsDelimiter(";"); if ($csv->open()) { $articulo = new Articulos(); while ($linea = $csv->readLine()) { $nLinea++; $codigo = trim($linea[0]); $unidades = trim($linea[1]); if ($codigo != '') { $filtro = "IdFirma='{$idFirma}' and (Codigo='{$codigo}' or CodigoEAN='{$codigo}')"; //echo $filtro,"\n"; $rows = $articulo->cargaCondicion("Id,IdFamilia,Codigo,Descripcion,Pvd", $filtro); $row = $rows[0]; if ($row['Id'] != '') { $articulo = new Articulos($row['Id']); $pedidoLinea = new PedidosLineas(); $pedidoLinea->setIdPedido($idPedido); $pedidoLinea->setIdFirma($idFirma); $pedidoLinea->setIdFamilia($row['IdFamilia']); $pedidoLinea->setIdCliente($idCliente); $pedidoLinea->setIdArticulo($row['Id']); $pedidoLinea->setDescripcion($row['Descripcion']); $pedidoLinea->setUnidades($unidades); $pedidoLinea->setPrecio($row['Pvd']); $pedidoLinea->setIva($articulo->getIdIva()->getIva()); $pedidoLinea->setImporte($unidades * $row['Pvd']); $id = $pedidoLinea->create(); if (!$id) { $errores[] = "Línea {$nLinea}: No se pudo crear la línea de pedido."; } } else { $errores[] = "Línea {$nLinea}: El artículo {$codigo} no existe o no pertenece a la firma del pedido."; } } } $csv->close(); unset($articulo); unset($pedidoLinea); // Recalcular los totales del pedido if (count($errores) == 0) { $pedido = new PedidosCab($idPedido); $pedido->save(); unset($pedido); } } else { $errores[] = "No se ha podido abrir el archivo cargado"; } return $errores; }
public function Articulos() { $nItems = 0; $nErrores = 0; $dbLink = mysql_connect("localhost", "root", "albatronic"); $query = "TRUNCATE {$this->dbDestino}.ErpArticulos"; mysql_query($query); $query = "select * from {$this->dbOrigen}.articulos"; $result = mysql_query($query, $dbLink); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $row = $this->utf($row); $f = new Familias(); $f = $f->find("Observations", $row['IDSubfamilia']); $idFamilia = $f->getIDFamilia(); $c = new Articulos(); $c->setCodigo($row['IDArticulo']); $c->setDescripcion($row['Descripcion']); $c->setIDCategoria($row['IDFamilia']); $c->setIDFamilia($idFamilia ? $idFamilia : 0); $c->setIDFabricante($row['IDFabricante']); $c->setPvd($row['Pvd']); $c->setPvp($row['Pvp']); $c->setMargen($row['Margen']); $c->setPmc($row['Pmc']); $c->setIDIva($row['IDIva']); $c->setEtiqueta($row['Etiqueta']); $c->setCodigoEAN($row['CodigoEAN']); $c->setGarantia($row['Garantia']); $c->setPeso($row['Peso']); $c->setVolumen($row['Volumen']); $c->setCaracteristicas($row['Caracteristicas']); $c->setFechaUltimoPrecio($row['FechaUltimoPrecio']); $c->setVigente($row['Vigente']); $c->setPrimaryKeyMD5(md5($row['IDArticulo'])); if (!$c->create()) { $errores[] = $c->getErrores(); $nErrores++; } else { $nItems++; } } //mysql_close($dbLink); echo "Artículos {$nItems}<br/>"; if (count($errores)) { echo "<pre>"; print_r($errores); echo "</pre>"; } }
/** * Comprueba la unidad minima de compra * @param Articulos $articulo El objeto articulo */ public function checkPackingCompras(Articulos $articulo) { // Comprobar la unidad mínina de compra (PackingCompras) $packing = $articulo->getPackingCompras(); if (abs($this->Unidades) < $packing) { $this->setUnidades($packing); $this->_alertas[] = "Unidad Mínima de Compra " . $packing; } elseif (abs($this->Unidades) > $packing) { // Compruebo multiplo, redondeo al múltiplo inmediatamente superior $v = explode(".", $this->Unidades / $packing); $resultado = $v[0]; if ($v[1]) { $resultado++; } $this->setUnidades($resultado * $packing); $this->_alertas[] = "Unidad Mínima de Compra " . $packing; } }
/** * 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); }
/** * Construye un tag html <select> con todos los lotes que existen de un * articulo en un almacen * * @param type $filtro El id de almacen y el id de articulo separados por un guion * @param string $nameSelect El Name del select * @param string $idSelect El Id del select * @return string Codigo html con el tag select */ function lotesAlmacenArticulo($filtro, $nameSelect = '', $idSelect = '') { if ($nameSelect == '') { $nameSelect = $_GET['nameselect']; } if ($idSelect == '') { $idSelect = $_GET['idselect']; } // En el filtro viene separado por un guión el id del almacen y el id del articulo $valores = explode("-", $filtro); $idAlmacen = $valores[0]; $idArticulo = $valores[1]; $articulo = new Articulos($idArticulo); $rows = $articulo->getLotesDisponibles($idAlmacen, true); $uma = $articulo->getUMA(); unset($articulo); $ch .= "<div class='Etiqueta'>Lote</div>"; if (count($rows)) { $ch .= "<select name='MvtosAlmacen[IDLote]' id='MvtosAlmacen_IDLote' class='Select' style='width:190px;'"; $ch .= "onblur=\"DesplegableAjax('div_MvtosAlmacen_IDUbicacion','MvtosAlmacen_IDUbicacion','MvtosAlmacen[IDUbicacion]','mvtosAlmacenUbicacion',this.value+'-'+\$('#MvtosAlmacen_IDAlmacen').val());\""; $ch .= ">"; foreach ($rows as $row) { $ch .= "<option value='" . $row['Id'] . "'>" . $row['Value'] . " -> " . sprintf("%9.2f", $row['Reales']) . " {$uma}</option>"; } } else { $ch .= "No hay lotes"; } $ch .= "</select></div>"; return $ch; }
/** * Recalcula los precios de costo y de venta de los articulos * obtenidos en la elaboración, prorrateando el costo total de * la elaboración entre las UMAs obtenidas de cada producto * * Este proceso se hace con las líneas de tipo 1 que estén recepcionadas (Estado=3) * y en base a la política de recálculo de precios definida con el parámetro ACTU_PRECIOS */ public function CotizarAction() { if ($this->values['permisos']['permisosModulo']['UP']) { $idManufac = $this->request['ManufacCab']['IDManufac']; $datos = new ManufacCab($idManufac); if ($datos->getKilosDestino() != 0) { $totalCoste = $datos->getTotalCoste(); $totalUMAObtenidos = $datos->getKilosDestino(); $costePorUMA = $totalCoste / $datos->getKilosDestino(); //Recorrer las lineas de elaboracion tipo 1 $lineas = new ManufacLineas(); $rows = $lineas->cargaCondicion("*", "IDManufac='{$idManufac}' and Tipo='1' and IDEstado='3'"); unset($lineas); foreach ($rows as $row) { $articulo = new Articulos($row['IDArticulo']); if ($articulo->actualizaPrecios($row['Unidades'], $costePorUMA)) { $this->values['alertas'][] = "Se actualizó: " . $articulo->getCodigo() . " " . $articulo->getDescripcion(); } else { $this->values['alertas'][] = "NO Se actualizó: " . $articulo->getCodigo() . " " . $articulo->getDescripcion(); } } unset($articulo); } $this->values['datos'] = $datos; $this->values['errores'] = $datos->getErrores(); unset($datos); return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values); } else { return array('template' => '_global/forbiden.html.twig'); } }
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; }
/** * Devuelve un array de objetos fabricantes que están relacionados * con la categoría/famila/subfamilia en curso * * @return \Fabricantes */ public function getFabricantes() { switch ($this->NivelJerarquico) { case 1: $campo = "IDCategoria"; break; case 2: $campo = "IDFamilia"; break; case 3: $campo = "IDSubfamilia"; break; } $array = array(); $articulo = new Articulos(); $rows = $articulo->cargaCondicion("distinct IDFabricante", "{$campo}='{$this->IDFamilia}' and Vigente='1'"); unset($articulo); foreach ($rows as $row) { $array[] = new Fabricantes($row['IDFabricante']); } return $array; }
/** * Listado de articulos * @param int $id opcional * @return array */ public function detalle($id) { $parametros = array(); $criteria = new CDbCriteria(); $criteria->with = array('ELPROPIETARIO.MIPERFIL', 'ELPROPIETARIO' => array("select" => "id,username,email,profile", "together" => false), 'LAGALERIA', 'LACATEGORIA', 'LAMONEDA'); //detalle articulo if (!empty($id) && is_int($id)) { $criteria->condition = 't.id = :id'; $parametros[':id'] = $id; } $criteria->params = $parametros; $model = Articulos::model()->find($criteria); $model->megusta = !empty($model->megusta) ? $model->megusta : 0; $model->precio = $model->getValor(); $model->categoria = $model->LACATEGORIA->attributes; $model->moneda = $model->LAMONEDA->attributes; $model->categoria = $model->LACATEGORIA->attributes; $model->galeria = array("fotos" => !empty($model->LAGALERIA->imagen) ? ImagenHelper::obtenerFotosArticulo($model->LAGALERIA->imagen) : array(ImagenHelper::imagenArticuloPorDefecto())); $listado = array("propietario" => array("id" => $model->ELPROPIETARIO->id, "id_perfil" => !empty($model->ELPROPIETARIO->MIPERFIL->id) ? $model->ELPROPIETARIO->MIPERFIL->id : 0, "usuario" => $model->ELPROPIETARIO->username, "nombre" => $model->ELPROPIETARIO->MIPERFIL->nombre, "megusta" => !empty($model->ELPROPIETARIO->MIPERFIL->megusta) ? $model->ELPROPIETARIO->MIPERFIL->megusta : 0, "correo" => $model->ELPROPIETARIO->email, "estado" => $model->ELPROPIETARIO->MIPERFIL->estado, "imagen" => !empty($model->ELPROPIETARIO->MIPERFIL->image) ? ImagenHelper::obtenerFotoUsuario($model->ELPROPIETARIO->MIPERFIL->image) : ImagenHelper::imagenUsuarioPorDefecto(), "ubicacion" => $model->ELPROPIETARIO->MIPERFIL->ubicacion)); return array_merge($model->attributes, $listado); }
/** * Importa artículos desde fichero externo csv según * el formato de facturaplus * * NOTA IMPORTANTE: SE HAN DE IMPORTAR LAS FAMILIAS ANTES. */ public function ImportarAction() { $fileName = "docs/docs{$_SESSION['emp']}/tmp/articulos.csv"; $archivo = new Archivo($fileName); $archivo->setColumnsDelimiter(";"); //$archivo->setColumnsEnclosure('"'); if ($archivo->open("r")) { set_time_limit(0); // Me salto la primera línea de cabecera $linea = $archivo->readLine(); while (($linea = $archivo->readLine()) !== FALSE) { //print_r($linea); $fam = new Familias(); $fam = $fam->find('Observations', trim($linea[2])); $idFamilia = $fam->getIDFamilia(); if (!$idFamilia) { $idFamilia = 1; } $arti = new Articulos(); $arti->setCodigo($linea[0]); $arti->setDescripcion(utf8_encode($linea[1])); $arti->setIDCategoria($idFamilia); $arti->setAllowsChildren($linea[4]); $arti->setInventario(1); $arti->setIDIva(1); $arti->setPmc(str_replace(",", ".", $linea[6])); $arti->setPvd(str_replace(",", ".", $linea[7])); $arti->setPvp(str_replace(",", ".", $linea[8])); $arti->setMargen(str_replace(",", ".", $linea[9])); $arti->setPeso(str_replace(",", ".", $linea[5])); $arti->setStockMaximo($linea[11]); $arti->setStockMinimo($linea[12]); $arti->setGarantia("S/F"); $idArti = $arti->create(); if (!$idArti) { $nErrores += 1; print_r($arti->getErrores()); } else { $nAciertos += 1; } unset($arti); } $archivo->close(); } else { $this->values['errores'][] = "El fichero de importación " . $fileName . " no existe"; } echo "Aciertos: {$nAciertos}, Errores: {$nErrores}"; unset($archivo); }
/** * 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(); } }
/** * Devuelve un array con los artículos que forman * parte del escandallo del articulo actual * * array('IDArticulo'=>,'Codigo'=>,'Descripcion'=>,'Unidades'=>,'UMV'=>) * * @return array \Articulos */ public function getEscandallo() { $escan = new ArticulosEscandallos(); $filtro = "IDArticuloOrigen='{$this->IDArticulo}' and IDArticuloDestino<>'0'"; $rows = $escan->cargaCondicion("IDArticuloDestino,Unidades", $filtro, "Id ASC"); unset($escan); $array = array(); foreach ($rows as $row) { $articulo = new Articulos($row['IDArticuloDestino']); $array[] = array('IDArticulo' => $articulo->getIDArticulo(), 'Codigo' => $articulo->getCodigo(), 'Descripcion' => $articulo->getDescripcion(), 'Unidades' => $row['Unidades'], 'UMV' => $articulo->getUMV()->getUnidadMedida()); unset($articulo); } return $array; }
private function checkMultiplos(Articulos $articulo) { //Calcular los metros de almacén if ($this->AltoAl + $this->AnchoAl == 0) { $this->setMtsAl($this->Unidades); } else { $this->setMtsAl($this->Unidades * $this->AltoAl * $this->AnchoAl); } //Comprobar las unidades mínimas de venta para la factura $articulo->getMinimoVentaAlto() > $this->AltoAl ? $this->setAltoFa($articulo->getMinimoVentaAlto()) : $this->setAltoFa($this->AltoAl); $articulo->getMinimoVentaAncho() > $this->AnchoAl ? $this->setAnchoFa($articulo->getMinimoVentaAncho()) : $this->setAnchoFa($this->AnchoAl); //Comprobar los múltiplos if ($articulo->getMultiploAlto() > 0) { $v = explode(".", $this->AltoFa / $articulo->getMultiploAlto()); $resultado = $v[0]; if ($v[1]) { $resultado++; } $this->setAltoFa($resultado * $articulo->getMultiploAlto()); } if ($articulo->getMultiploAncho() > 0) { $v = explode(".", $this->AnchoFa / $articulo->getMultiploAncho()); $resultado = $v[0]; if ($v[1]) { $resultado++; } $this->setAnchoFa($resultado * $articulo->getMultiploAncho()); } //Calcular los metros en factura teniendo en cuenta los metros mínimos de venta $this->setMtsFa($this->AltoFa * $this->AnchoFa); if ($this->MtsFa == 0) { $this->MtsFa = 1; } if ($this->MtsFa < $articulo->getMinimoVenta()) { $this->setMtsfa($articulo->getMinimoVenta()); } $this->setMtsFa($this->Unidades * $this->MtsFa); }
<?php include_once "conexion.php"; include_once "table_handler.php"; include_once "tabla.php"; include_once "lista_articulos.php"; include_once "articulos/articulos.php"; include_once "configuracion/alicuotas.php"; Conexion::conectar(); session_start(); if (isset($_SESSION["lista_articulos"])) { $articulos = new Articulos(); $alicuotas = new Alicuotas(); $art = $articulos->get_articulo($_REQUEST['codigo']); $_SESSION["lista_articulos"]->add($art['codigo'], $art['descripcion'], $art['precio'], $alicuotas->get_field(2, $art['alicuota']), 1); }
/** * 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); }
<?php include_once 'conexion.php'; include_once 'articulos/articulos.php'; Conexion::conectar(); $articulos = new Articulos(); $articulos->set_busqueda_filter($_REQUEST['busqueda']); $toggle = 0; $result = $articulos->get_articulos(); print '<tbody>'; while ($row = mysql_fetch_row($result)) { print '<tr class="' . ($toggle++ % 2 == 0 ? 'even' : 'odd') . '"><td name="codigo">' . $row[0] . '</td><td name="descripcion">' . $row[1] . '</td></tr>'; } print '</tbody>';
/** * 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; }