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();
     }
 }
Exemplo n.º 2
0
 /**
  * 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();
 }
Exemplo n.º 3
0
 /**
  * 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>';
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
 /**
  * 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;
 }
Exemplo n.º 7
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']));
     }
 }
Exemplo n.º 9
0
 /**
  * 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);
 }
Exemplo n.º 11
0
 /**
  * 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;
 }
Exemplo n.º 12
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;
Exemplo n.º 13
0
 /**
  * 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;
 }
Exemplo n.º 15
0
 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>";
     }
 }
Exemplo n.º 16
0
 /**
  * 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);
 }
Exemplo n.º 18
0
/**
 * 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;
 }
Exemplo n.º 21
0
 /**
  * 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;
 }
Exemplo n.º 22
0
 /**
  * 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);
 }
Exemplo n.º 23
0
 /**
  * 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);
 }
Exemplo n.º 24
0
 /**
  * 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();
     }
 }
Exemplo n.º 25
0
 /**
  * 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;
 }
Exemplo n.º 26
0
 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>';
Exemplo n.º 30
0
 /**
  * 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;
 }