/**
  * Devuelve un array de objetos PedidosCab con los pedidos
  * que están en estado Confirmado (1) y cuyo destino es el
  * almacén seleccionado
  *
  * @return array Array de objetos PedidosCab
  */
 private function getPedidos()
 {
     $data = array();
     $pedido = new PedidosCab();
     $filtro = "IDEstado='1' and IDAlmacen='{$this->request['idAlmacen']}'";
     $rows = $pedido->cargaCondicion('IDPedido', $filtro, 'FechaEntrega ASC');
     unset($pedido);
     foreach ($rows as $row) {
         $data[] = new PedidosCab($row['IDPedido']);
     }
     return $data;
 }
 /**
  * Borra una factura recibida, sus líneas, los posibles recibos
  * y marca el/los pedidos asociados como no facturados
  * Siempre que no esté traspasa a contabilidad (Asiento=0)
  *
  * @return boolean
  */
 public function erase()
 {
     if ($this->Asiento == 0) {
         if ($this->borraVctos()) {
             if ($this->borraLineas()) {
                 // Actualiza la cabecera del pedido
                 $pedidos = new PedidosCab();
                 $pedidos->queryUpdate(array("IDFactura" => 0, "IDEstado" => 2), "IDFactura='{$this->IDFactura}'");
                 unset($pedidos);
                 // Borrar la cabecera de la factura
                 parent::erase();
             }
         }
     } else {
         $this->_errores[] = "No se puede borrar. Está traspasada a contabilidad";
     }
     return count($this->_errores) == 0;
 }
 public function PedidosCab()
 {
     $nItems = 0;
     $nErrores = 0;
     $dbLink = mysql_connect("localhost", "root", "albatronic");
     $query = "TRUNCATE {$this->dbDestino}.ErpPedidosCab";
     mysql_query($query);
     $query = "select distinct IDPedido,IDFactura from {$this->dbOrigen}.frecibidas_lineas";
     $result = mysql_query($query, $dbLink);
     while ($row1 = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $correspondencia[$row1['IDPedido']] = $row1['IDFactura'];
     }
     $query = "select * from {$this->dbOrigen}.pedidos_cab";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $c = new PedidosCab();
         $c->setIDPedido($row['IDPedido']);
         $c->setIDSucursal(1);
         $c->setIDAlmacen(1);
         $c->setIDAgente(2);
         $c->setSuPedido($row['SuPedido']);
         $c->setFecha($row['Fecha']);
         $c->setFechaEntrega($row['FechaEntrega']);
         $c->setFechaEntrada($row['FechaEntrada']);
         $c->setIDProveedor($row['IDProveedor']);
         $c->setImporte($row['Importe']);
         $c->setDescuento($row['Descuento']);
         $c->setBaseImponible1($row['BaseImponible1']);
         $c->setIva1($row['Iva1']);
         $c->setCuotaIva1($row['CuotaIva1']);
         $c->setRecargo1($row['Recargo1']);
         $c->setCuotaRecargo1($row['CuotaRecargo1']);
         $c->setBaseImponible2($row['BaseImponible2']);
         $c->setIva2($row['Iva2']);
         $c->setCuotaIva2($row['CuotaIva2']);
         $c->setRecargo2($row['Recargo2']);
         $c->setCuotaRecargo2($row['CuotaRecargo2']);
         $c->setBaseImponible3($row['BaseImponible3']);
         $c->setIva3($row['Iva3']);
         $c->setCuotaIva3($row['CuotaIva3']);
         $c->setRecargo3($row['Recargo3']);
         $c->setCuotaRecargo3($row['CuotaRecargo3']);
         $c->setTotalBases($row['TotalBases']);
         $c->setTotalIva($row['TotalIva']);
         $c->setTotalRecargo($row['TotalRecargo']);
         $c->setTotal($row['Total']);
         $c->setObservaciones($row['Observaciones']);
         $c->setIDFP($row['IDFP']);
         $c->setIDAgencia(1);
         if ($row['Recepcionado'] == 'S') {
             $c->setIDEstado(2);
             $c->setIDFactura(isset($correspondencia[$row['IDPedido']]) ? $correspondencia[$row['IDPedido']] : 0);
         } else {
             $c->setIDEstado(0);
             $c->setIDFactura(0);
         }
         $c->setPrimaryKeyMD5(md5($row['IDPedido']));
         if (!$c->create()) {
             $errores[] = $c->getErrores();
             $nErrores++;
         } else {
             $nItems++;
         }
     }
     //mysql_close($dbLink);
     echo "Pedidos creados {$nItems}<br/>";
     if (count($errores)) {
         echo "<pre>";
         print_r($errores);
         echo "</pre>";
     }
 }
 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;
 }
 /**
  * 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);
 }
 /**
  * Devuelve un array con los proveedores que tienen pedidos pendientes
  * de facturar (IDEstado=2) en el periodo de fechas indicado y de la
  * sucursal indicada.
  *
  * El array tiene tres columnas:
  *       Id (el id del proveedor),
  *       Value (la razon social del proveedor)
  *       Total (la suma de los totales de todos sus pedidos pendientes de facturar)
  *
  * @param integer $idSucursal
  * @param date $desdeFecha Fecha en formato dd/mm/aaaa
  * @param date $hastaFecha Fecha en formato dd/mm/aaaa
  * @return array Array con los proveedores
  */
 public function fetchConPendienteDeFacturar($idSucursal, $desdeFecha, $hastaFecha)
 {
     $fecha = new Fecha($desdeFecha);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($hastaFecha);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     $this->conecta();
     $rows = array();
     $pedidos = new PedidosCab();
     $em = new EntityManager($pedidos->getConectionName());
     if (is_resource($em->getDbLink())) {
         $filtroSucursal = $idSucursal == '' ? "(1)" : "(a.IDSucursal='{$idSucursal}')";
         $filtro = $filtroSucursal . " and\n                      (a.Fecha>='{$desdeFecha}') and\n                      (a.Fecha<='{$hastaFecha}') and\n                      (a.IDEstado=2) and\n                      (c.IDProveedor=a.IDProveedor)";
         $query = "SELECT distinct c.IDProveedor as Id, c.RazonSocial as Value, sum(a.Total) as Total\n                        FROM \n                            `{$this->_dataBaseName}`.`{$this->_tableName}` c, \n                            `{$pedidos->getDataBaseName()}`.`{$pedidos->getTableName()}` a\n                        WHERE ( {$filtro} )\n                        GROUP BY c.IDProveedor\n                        ORDER BY c.RazonSocial";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         unset($em);
     }
     return $rows;
 }
 static function getCsv($idPedido)
 {
     $pedido = new PedidosCab($idPedido);
     $cabecera = '"Firma";"' . $pedido->getIdFirma()->getRazonSocial() . '"\\n';
     $cabecera .= '"Cliente";"' . $pedido->getIdCliente()->getRazonSocial() . '"\\n';
     $cabecera .= '"Dir. Entrega";"' . $pedido->getIdDirec()->getDireccion() . '"\\n';
     $cabecera .= '"Fecha";"' . $pedido->getFecha() . '"\\n';
     $cabecera .= '"S/Pedido";"' . $pedido->getSuPedido() . '"\\n';
     $cabecera .= '"Observaciones";"' . $pedido->getObservations() . '"\\n';
     $cabecera .= '"Forma de Pago";"' . $pedido->getFormaPago() . '"\\n';
     $cabecera .= '"Agencia Tte.";"' . $pedido->getAgencia() . '"\\n\\n';
     $lineas = '"Articulo";"Descripcion";"Unidades";"Precio";"Descuento1";"Descuento2";"Descuento3";"Importe"\\n';
     foreach ($pedido->getLineas() as $linea) {
         $lineas .= '"' . $linea->getIdArticulo()->getCodigo() . '";' . '"' . $linea->getIdArticulo()->getDescripcion() . '";' . '"' . $linea->getUnidades() . '";' . '"' . $linea->getPrecio() . '";' . '"' . $linea->getDescuento1() . '";' . '"' . $linea->getDescuento2() . '";' . '"' . $linea->getDescuento3() . '";' . '"' . $linea->getImporte() . '"\\n';
     }
     $csv = $lineas;
     $fileCsv = Archivo::getTemporalFileName("export", "csv");
     $archivo = new Archivo($fileCsv);
     if (!$archivo->write($csv)) {
         $fileCsv = "";
     }
     return $fileCsv;
 }
 /**
  * Proceso de facturación agrupada.
  *
  * Se pueden agrupar pedidos de distintas sucursales, en cuyo caso
  * la factura generada se asignará a la sucursal en curso.
  *
  * Se agrupan las facturas en base a la forma de pago.
  *
  * @return <type>
  */
 public function ConformarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     if ($filtro['idSucursal'] == '') {
         $filterSucursal = "(1)";
         $idSucursal = $_SESSION['suc'];
     } else {
         $filterSucursal = "(IDSucursal='{$filtro['idSucursal']}')";
         $idSucursal = $filtro['idSucursal'];
     }
     $filter = $filterSucursal . " AND c.IDFactura='0' and c.IDEstado='2' and c.IDProveedor='{$filtro['idProveedor']}' and c.Fecha>='{$desdeFecha}' and c.Fecha<'{$hastaFecha}' and c.FlagFacturar='1'";
     //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
     $pedidos = new PedidosCab();
     $em = new EntityManager($pedidos->getConectionName());
     if (!$em->getDbLink()) {
         $this->values['errores'] = $em->getError();
         return $this->listAction();
     }
     $query = "SELECT l.Iva\n                    FROM\n                        {$em->getDataBase()}.ErpPedidosLineas as l,\n                        {$em->getDataBase()}.ErpPedidosCab as c\n                    WHERE {$filter} and c.IDPedido=l.IDPedido\n                    GROUP BY l.Iva";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     if (count($rows) > 3) {
         $this->values['alertas'] = "Hay más de tres tipos de iva distintos. No se puede agrupar";
         return $this->listAction();
     }
     $contador = new Contadores($this->request['idContador']);
     // Buscar la cuenta contable de compras para la sucursal
     $sucursal = new Sucursales($idSucursal);
     $ctaCompras = $sucursal->getCtaContableCompras();
     unset($sucursal);
     //AGRUPO LOS PEDIDOS POR FORMA DE PAGO.
     $em = new EntityManager($pedidos->getConectionName());
     $query = "SELECT c.IDFP, sum(c.Total) as Total FROM {$pedidos->getDataBaseName()}.ErpPedidosCab as c WHERE {$filter} GROUP BY c.IDFP";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     foreach ($rows as $row) {
         $numeroFactura = $contador->asignaContador();
         $factura = new FrecibidasCab();
         $factura->setIDSucursal($idSucursal);
         $factura->setIDContador($this->request['idContador']);
         $factura->setNumeroFactura($numeroFactura);
         $factura->setSuFactura($this->request['suFactura']);
         $factura->setFecha($this->request['fecha']);
         $factura->setIDProveedor($filtro['idProveedor']);
         $factura->setCuentaCompras($ctaCompras);
         $factura->setIDFP($row['IDFP']);
         $idFactura = $factura->create();
         // Guardo en un array los id's de facturas generadas
         $facturados[] = $idFactura;
         if ($idFactura != 0) {
             // Crear las líneas de factura
             $em = new EntityManager($pedidos->getConectionName());
             $query = "select l.* from {$pedidos->getDataBaseName()}.ErpPedidosLineas l, {$pedidos->getDataBaseName()}.ErpPedidosCab c where (c.IDPedido=l.IDPedido) and (c.IDFP='{$row['IDFP']}') and {$filter}";
             $em->query($query);
             $lineas = $em->fetchResult();
             $em->desConecta();
             foreach ($lineas as $linea) {
                 $linFactura = new FrecibidasLineas();
                 $linFactura->setIDFactura($idFactura);
                 $linFactura->setIDArticulo($linea['IDArticulo']);
                 $linFactura->setDescripcion($linea['Descripcion']);
                 $linFactura->setUnidades($linea['UnidadesPtesFacturar']);
                 $linFactura->setPrecio($linea['Precio']);
                 $linFactura->setDescuento($linea['Descuento']);
                 $linFactura->setIva($linea['Iva']);
                 $linFactura->setIDPedido($linea['IDPedido']);
                 $linFactura->setIDLineaPedido($linea['IDLinea']);
                 if ($linFactura->create()) {
                     // Pongo el estado de la linea de pedido a "Facturado" y
                     // quitar el pendiente de facturar.
                     $lineaPedido = new PedidosLineas($linea['IDLinea']);
                     $lineaPedido->setIDEstado(3);
                     $lineaPedido->setUnidadesPtesFacturar(0);
                     $lineaPedido->save();
                 }
                 unset($linFactura);
             }
             // Totalizar la factura
             $factura->recalcula();
             // Crear vencimientos
             $factura->creaVctos();
             // Anotar en caja si procede
             $factura->anotaEnCaja();
             // Actualiza las cabecera del grupo de pedidos
             $em = new EntityManager($pedidos->getConectionName());
             $query = "update {$pedidos->getDataBaseName()}.ErpPedidosCab c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})";
             $em->query($query);
             $em->desConecta();
             unset($factura);
         } else {
             $this->values['errores'] = $factura->getErrores();
         }
     }
     return $this->listAction();
 }
 /**
  * Crea un registro nuevo en la entidad correspondiente
  * y su correspondiente registro en las líneas de recepción
  * 
  * @return array con el template y valores a renderizar
  */
 public function newAction()
 {
     switch ($this->request["entidad"]) {
         //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'PedidosCab':
             $pedido = new PedidosCab($this->request['idEntidad']);
             $lineaPedido = new PedidosLineas();
             $lineaPedido->setIDPedido($this->request['idEntidad']);
             $lineaPedido->setIDArticulo($this->request['idArticulo']);
             $lineaPedido->setDescripcion($this->request['Descripcion']);
             $lineaPedido->setUnidades(0);
             $lineaPedido->setIDEstado(1);
             $lineaPedido->setIDAgente($_SESSION['usuarioPortal']['Id']);
             $lineaPedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
             if ($lineaPedido->valida()) {
                 if ($lineaPedido->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaPedido);
                     $pedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
                     $pedido->setIncidencias($pedido->getIncidencias() . "\nFuera de pedido: " . $lineaPedido->getDescripcion());
                     $pedido->save();
                 }
             }
             $this->values['errores'] = $lineaPedido->getErrores();
             unset($pedido);
             unset($lineaPedido);
             break;
             //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'ManufacCab':
             $manufac = new ManufacCab($this->request['idEntidad']);
             $lineaManufac = new ManufacLineas();
             $lineaManufac->setIDManufac($this->request['idEntidad']);
             $lineaManufac->setTipo(1);
             $lineaManufac->setIDArticulo($this->request['idArticulo']);
             $lineaManufac->setDescripcion($this->request['Descripcion']);
             $lineaManufac->setUnidades(1);
             $lineaManufac->setIDEstado(0);
             $lineaManufac->setIDAlmacen($manufac->getIDAlmacenDestino()->getIDAlmacen());
             if ($lineaManufac->valida()) {
                 if ($lineaManufac->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaManufac);
                     $manufac->setIDAlmacenDestino($manufac->getIDAlmacenDestino()->getIDAlmacen());
                     $manufac->setIncidencias($manufac->getIncidencias() . "\nFuera de pedido: " . $lineaManufac->getDescripcion());
                     $manufac->save();
                 }
             }
             $this->values['errores'] = $lineaManufac->getErrores();
             unset($manufac);
             unset($lineaManufac);
             break;
             //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'TraspasosCab':
             $traspaso = new TraspasosCab($this->request['idEntidad']);
             $lineaTraspaso = new TraspasosLineas();
             $lineaTraspaso->setIDTraspaso($this->request['idEntidad']);
             $lineaTraspaso->setTipo(1);
             $lineaTraspaso->setIDArticulo($this->request['idArticulo']);
             $lineaTraspaso->setDescripcion($this->request['Descripcion']);
             $lineaTraspaso->setUnidades(1);
             $lineaTraspaso->setIDEstado(0);
             $lineaTraspaso->setIDAlmacen($traspaso->getIDAlmacenDestino()->getIDAlmacen());
             if ($lineaTraspaso->valida()) {
                 if ($lineaTraspaso->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaTraspaso);
                     $traspaso->setIDAlmacenDestino($traspaso->getIDAlmacenDestino()->getIDAlmacen());
                     $traspaso->setIncidencias($traspaso->getIncidencias() . "\nFuera de traspaso: " . $lineaTraspaso->getDescripcion());
                     $traspaso->save();
                 }
             }
             $this->values['errores'] = $lineaTraspaso->getErrores();
             unset($traspaso);
             unset($lineaTraspaso);
             break;
     }
     return $this->listAction($this->request['entidad'], $this->request['idEntidad']);
 }
 static function getTopFirmas($periodo = 3, $nItems = 10)
 {
     // Construir la parte del filtro que depende del periodo
     switch ($periodo) {
         case '':
             $periodo = 0;
         case '0':
             // Ultimo mes
             $diferenciaDias = -30;
             $titlePeriodo = "Último mes";
             break;
         case '1':
             // Ultimo Trimestre
             $diferenciaDias = -90;
             $titlePeriodo = "Últime trimestre";
             break;
         case '2':
             // Ultimo Semestre
             $diferenciaDias = -180;
             $titlePeriodo = "Último Semestre";
             break;
         case '3':
             // Ultimo año
             $diferenciaDias = -365;
             $titlePeriodo = "Últimos 12 meses";
             break;
         case '4':
             // Todo, 20 años hacia atrás
             $diferenciaDias = -7300;
             $titlePeriodo = "Todos los datos";
             break;
     }
     $fecha = new Fecha();
     $desdeFecha = $fecha->sumaDias($diferenciaDias);
     unset($fecha);
     $firma = new Firmas();
     $clienteTabla = $firma->getDataBaseName() . "." . $firma->getTableName();
     $pedidos = new PedidosCab();
     $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName();
     unset($pedidos);
     $em = new EntityManager($firma->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.RazonSocial as name, SUM(t1.TotalBases) as y\n                FROM {$pedidosTabla} as t1, {$clienteTabla} as t2\n                WHERE t1.IdFirma=t2.Id AND t1.Fecha>='{$desdeFecha}' \n                GROUP BY t1.IdFirma\n                ORDER BY SUM(t1.TotalBases) DESC LIMIT {$nItems}";
         //echo $query;
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     unset($firma);
     return array('title' => "TOP-{$nItems} Firmas. {$titlePeriodo}", 'serieName' => "Ventas", 'serie' => $rows);
 }
 /**
  * Devuelve una array con los id's de pedidos que están
  * pendientes de facturar (IDEstado=2) del proveedor $idProveedor
  * en el período $desdeFecha - $hastaFecha
  *
  * @param integer $idSucursal El id de sucursal (opcional)
  * @param integer $idProveedor El id de proveedor
  * @param string $desdeFecha Fecha en formato dd/mm/aaaa
  * @param string $hastaFecha Fecha en formato dd/mm/aaaa
  * @return array Array con los ids de pedido
  */
 public function getPendientesFacturar($idSucursal, $idProveedor, $desdeFecha, $hastaFecha)
 {
     $fecha = new Fecha($desdeFecha);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($hastaFecha);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     $filtroSucursal = $idSucursal == '' ? "(1)" : "(IDSucursal = '{$idSucursal}')";
     $filtro = $filtroSucursal . " and\n                  (IDProveedor='{$idProveedor}') and\n                  (Fecha>='{$desdeFecha}') and\n                  (Fecha<='{$hastaFecha}') and\n                  (IDEstado=2)";
     $pedido = new PedidosCab();
     $rows = $pedido->cargaCondicion("IDPedido", $filtro, "FechaEntrada,IDPedido ASC");
     unset($pedido);
     return $rows;
 }
 private function importPedidosCab()
 {
     $obj = new PedidosCab();
     $obj->truncate();
     $file = getcwd() . "/docs/docs1/import/PEDIDOS.txt";
     $archivo = new Archivo($file);
     $archivo->setColumnsDelimiter(";");
     $archivo->setColumnsEnclosure("\"");
     $errores = 0;
     if ($archivo->open()) {
         // Leer la cabecera
         $titulos = $archivo->readLine();
         // Leer el contenido
         $i = -1;
         while ($row = $archivo->readLine()) {
             $i++;
             $item = array();
             foreach ($titulos as $key => $titulo) {
                 $item[$titulo] = $row[$key];
             }
             $fecha = explode("/", substr($item['FECHA_PEDIDO'], 0, -8));
             $fecha = $fecha[0] . "-" . str_pad($fecha[1], 2, "0", STR_PAD_LEFT) . "-" . str_pad($fecha[2], 2, "0", STR_PAD_LEFT);
             $fechaEntrega = explode("/", substr($item['FECHA_ENTREGA'], 0, -8));
             $fechaEntrega = $fechaEntrega[0] . "-" . str_pad($fechaEntrega[1], 2, "0", STR_PAD_LEFT) . "-" . str_pad($fechaEntrega[2], 2, "0", STR_PAD_LEFT);
             $obj = new PedidosCab();
             $obj->setId($item['IDPEDIDO']);
             $obj->setFecha($fecha);
             $obj->setFechaEntrega($fechaEntrega);
             $obj->setIdFirma($item['IDFIRMA']);
             $obj->setIdCliente($item['IDCLIENTE']);
             $obj->setIdDirec($item['IDDIREC_ENTREGA']);
             $obj->setIdAgente($item['IDSUBAGENTE']);
             $obj->setIdAlmacen($item['IDALMACEN']);
             $obj->setSuPedido(utf8_encode($item['SN/PEDIDO']));
             $obj->setReferencia(utf8_encode($item['REFERENCIA']));
             $obj->setObservations(utf8_encode($item['OBSERVACIONES']));
             $obj->setComisionAgente(self::trataNumero($item['COMISION_AGENTE']));
             $obj->setComisionSubagente(self::trataNumero($item['COMISION_SUBAGENTE']));
             $obj->setDescuentos(self::trataMoneda($item['DESCUENTOS']));
             $obj->setDescuentoProntoPago(self::trataMoneda($item['DESCUENTO_PP']));
             $obj->setPortes($item['PORTES']);
             $obj->setImprimir($item['IMPRIMIR']);
             $obj->setServido($item['SERVIDO']);
             $obj->setFormaPago(utf8_encode($item['FORMA_PAGO']));
             $obj->setAgencia(utf8_encode($item['AGENCIA_TTE']));
             $base1 = self::trataMoneda($item['BASE1']);
             $cuotaIva1 = $base1 * $item['IVA1'] / 100;
             $cuotaRec1 = $base1 * $item['REC1'] / 100;
             $obj->setBaseImponible1($base1);
             $obj->setIva1($item['IVA1']);
             $obj->setCuotaIva1($cuotaIva1);
             $obj->setRecargo1($item['REC1']);
             $obj->setCuotaRecargo1($cuotaRec1);
             $base2 = self::trataMoneda($item['BASE2']);
             $cuotaIva2 = $base2 * $item['IVA2'] / 100;
             $cuotaRec2 = $base2 * $item['REC2'] / 100;
             $obj->setBaseImponible2($base2);
             $obj->setIva2($item['IVA2']);
             $obj->setCuotaIva2($cuotaIva2);
             $obj->setRecargo2($item['REC2']);
             $obj->setCuotaRecargo2($cuotaRec2);
             $base3 = self::trataMoneda($item['BASE3']);
             $cuotaIva3 = $base3 * $item['IVA3'] / 100;
             $cuotaRec3 = $base3 * $item['REC3'] / 100;
             $obj->setBaseImponible3($base3);
             $obj->setIva3($item['IVA3']);
             $obj->setCuotaIva3($cuotaIva3);
             $obj->setRecargo3($item['REC3']);
             $obj->setCuotaRecargo3($cuotaRec3);
             $totBases = $base1 + $base2 + $base3;
             $totIva = $cuotaIva1 + $cuotaIva2 + $cuotaIva3;
             $totRecargo = $cuotaRec1 + $cuotaRec2 + $cuotaRec3;
             $obj->setTotalBases($totBases);
             $obj->setTotalIva($totIva);
             $obj->setTotalRecargo($totRecargo);
             $obj->setTotalPedido($totBases + $totIva + $totRecargo);
             $id = $obj->create();
             if (!$id) {
                 print_r($obj->getErrores());
                 $errores++;
             }
         }
         $archivo->close();
     }
     if ($errores) {
         echo "Errores PedidosCab {$errores}</br>";
     }
 }
 /**
  * Crea pedido web en base a lo que hay
  * en el carrito de la sesion en curso.
  * 
  * Si ya hubiera un pedido asociado a esa sesion,
  * lo borra y lo crea de nuevo
  * 
  * @param integer $idCliente EL id del cliente
  * @param boolean $avisoRecepcionParcial
  * @return integer $idPedido
  */
 static function creaPedido($idCliente, $avisoRecepcionParcial = 0)
 {
     if ($avisoRecepcionParcial == '') {
         $avisoRecepcionParcial = 0;
     }
     $carrito = new Carrito();
     $filtro = "Sesion='{$_SESSION['IdSesion']}'";
     $rows = $carrito->cargaCondicion("*", $filtro, "Id ASC");
     unset($carrito);
     $totales = self::getTotales();
     $pedido = new PedidosCab();
     $pedido->setIdSucursal($_SESSION['usuarioPortal']['SucursalActiva']['Id']);
     $pedido->setIdUsuario($_SESSION['usuarioPortal']['Id']);
     $pedido->setIdCliente($idCliente);
     $pedido->setFecha(date('Y-m-d H:i:s'));
     $pedido->setNItems($totales['Unidades']);
     $pedido->setImporte($totales['total']);
     $pedido->setAvisoRecepcionParcial($avisoRecepcionParcial);
     $idPedido = $pedido->create();
     if ($idPedido > 0) {
         // Crear las líneas
         foreach ($rows as $row) {
             $linea = new PedidosLineas();
             $linea->setIdPedido($idPedido);
             $linea->setIdSucursal($row['IdSucursal']);
             $linea->setIdDistribuidora($row['IdDistribuidora']);
             $linea->setIdUsuario($row['IdUsuario']);
             $linea->setIdCliente($idCliente);
             $linea->setSku($row['Sku']);
             $linea->setEan($row['Ean']);
             $linea->setDescripcion($row['Descripcion']);
             $linea->setAutor($row['Autor']);
             $linea->setEditorial($row['Editorial']);
             $linea->setUrlImagen($row['UrlImagen']);
             $linea->setUnidades($row['Unidades']);
             $linea->setPrecio($row['Precio']);
             $linea->setDescuento($row['Descuento']);
             $linea->setPvd($row['Pvd']);
             $linea->setImporte($row['Importe']);
             $linea->setIva($row['Iva']);
             $linea->setRecargo($row['Recargo']);
             $linea->setIdEstado(0);
             $linea->setIvaIncluido($row['IvaIncluido']);
             $linea->create();
             //print_r($linea->getErrores());
         }
     }
     return $idPedido;
 }
 /**
  * Envia por email el albaran en formato PDF
  * @return <type>
  */
 public function enviarAction()
 {
     switch ($this->request['accion']) {
         case 'Enviar':
             $para = $this->request['Para'];
             $de = $this->request['De'];
             $deNombre = $this->request['DeNombre'];
             $conCopia = $this->request['Cc'];
             $conCopiaOculta = $this->request['Cco'];
             $asunto = $this->request['Asunto'];
             $mensaje = $this->request['Mensaje'];
             $adjuntos = array($this->request['Adjunto']);
             $envio = new Mail();
             $ok = $envio->send($para, $de, $deNombre, $conCopia, $conCopiaOculta, $asunto, $mensaje, $adjuntos);
             if ($ok) {
                 $entidad = new $this->entity($this->request['PedidosCab']['IDPedido']);
                 $entidad->auditaEmail();
                 unset($entidad);
                 $this->values['resultadoEnvio'][] = "Envío con éxito";
             } else {
                 $this->values['resultadoEnvio'] = $envio->getMensaje();
             }
             unset($envio);
             break;
         case 'CambioFormato':
             $datos = new PedidosCab($this->request['PedidosCab']['IDPedido']);
             $formatos = DocumentoPdf::getFormatos($this->entity);
             $formato = $this->request['Formato'];
             if ($formato == '') {
                 $formato = 0;
             }
             $this->values['archivo'] = $this->generaPdf($this->entity, array('0' => $datos->getIDPedido()), $formato);
             $this->values['email'] = array('Para' => $this->request['Para'], 'De' => $this->request['De'], 'DeNombre' => $this->request['DeNombre'], 'Cc' => $this->request['Cc'], 'Cco' => $this->request['Cco'], 'Asunto' => $this->request['Asunto'], 'Formatos' => $formatos, 'Formato' => $formato, 'Mensaje' => $this->request['Mensaje'], 'idPedido' => $datos->getIDPedido());
             break;
         case '':
             $datos = new $this->entity($this->request[$this->entity]['IDPedido']);
             $formatos = DocumentoPdf::getFormatos($this->entity);
             $formato = $this->request['Formato'];
             if ($formato == '') {
                 $formato = 0;
             }
             $this->values['archivo'] = $this->generaPdf($this->entity, array('0' => $datos->getIDPedido()), $formato);
             $this->values['email'] = array('Para' => $datos->getIDProveedor()->getEMail(), 'De' => $_SESSION['usuarioPortal']['email'], 'DeNombre' => $datos->getIDAgente()->getNombre(), 'Cco' => $_SESSION['usuarioPortal']['email'], 'Asunto' => 'Pedido n. ' . $datos->getIDPedido(), 'Formatos' => $formatos, 'Formato' => $formato, 'Mensaje' => 'Le adjunto el pedido ' . $datos->getIDPedido() . "\n\nUn saludo.", 'idPedido' => $datos->getIDPedido());
             break;
     }
     return parent::enviarAction();
 }
Exemple #15
0
 /**
  * Devuelve un array con las entradas en curso del articulo y almacen indicado
  *
  * Cada elemento del array es otro array con los elementos:
  * array (
  *   'IDPedido' =>
  *   'PrimaryKeyMD5' =>
  *   'Fecha' =>
  *   'FechaEntraga' =>
  *   'IDProveedor' =>
  *   'RazonSocial =>
  *   'Entrando' =>
  * )
  *
  * @param integer $idAlmacen El id de almacen
  * @return array Array con las unidades entrando
  */
 public function getEntrando($idAlmacen)
 {
     $reservas = array();
     $tablaPedidos = new PedidosCab();
     $tablaPedidosLineas = new PedidosLineas();
     $tablaProveedores = new Proveedores();
     $em = new EntityManager($this->getConectionName());
     if ($em->getDbLink()) {
         $query = "select\n                        cab.IDPedido,\n                        cab.PrimaryKeyMD5,                     \n                        cab.Fecha,\n                        cab.FechaEntrega,\n                        cab.IDProveedor,\n                        prv.RazonSocial,\n                        sum(lin.Unidades) as Entrando\n                      from\n                        {$tablaPedidos->getDataBaseName()}.{$tablaPedidos->getTableName()} as cab,\n                        {$tablaPedidosLineas->getDataBaseName()}.{$tablaPedidosLineas->getTableName()} as lin,\n                        {$tablaProveedores->getDataBaseName()}.{$tablaProveedores->getTableName()} as prv\n                      where\n                        cab.IDPedido  = lin.IDPedido and\n                        cab.IDProveedor  = prv.IDProveedor and\n                        lin.IDEstado   = '1' and\n                        lin.IDArticulo = '{$this->IDArticulo}' and\n                        lin.IDAlmacen  = '{$idAlmacen}'\n                      group by IDPedido\n                      order by Fecha ASC";
         $em->query($query);
         //echo $query,"<br/>";
         $reservas = $em->fetchResult();
         $em->desConecta();
     }
     unset($em);
     unset($tablaPedidos);
     unset($tablaPedidosLineas);
     unset($tablaProveedores);
     return $reservas;
 }
 /**
  * Renderiza el template _Emergente/historicoCompras.html.twig
  * mostrando las compras realizadas a un proveedor de un articulo y un periodo dado.
  *
  * La información se obtiene en base a los pedidos RECEPCIONADOS o FACTURADOS.
  *
  * No se tienen en cuenta los pedidos no confirmados.
  *
  * Puede entrar por POST o por GET.
  *
  * Si es por POST los parametros vienen en:
  *
  *  idArticulo, idProveedor, periodo
  *
  * Si es por GET los parametros vienen en:
  *
  *  posicion 2 (idArticulo), 3 (idProveedor), 4 (periodo)
  *
  * @return array El template y los datos
  */
 public function HistoricoComprasAction()
 {
     switch ($this->request["METHOD"]) {
         case 'GET':
             $idArticulo = $this->request['2'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $IDProveedor = $this->request['3'];
             if ($IDProveedor == '0') {
                 $IDProveedor = '';
             }
             $periodo = $this->request['4'];
             break;
         case 'POST':
             $idArticulo = $this->request['idArticulo'];
             if ($idArticulo == '0') {
                 $idArticulo = '';
             }
             $idProveedor = $this->request['idProveedor'];
             if ($idProveedor == '0') {
                 $idProveedor = '';
             }
             $periodo = $this->request['periodo'];
             break;
     }
     // Construir la parte del filtro que depende del periodo
     switch ($periodo) {
         case '':
             $periodo = 0;
         case '0':
             // Ultimo mes
             $diferenciaDias = -30;
             break;
         case '1':
             // Ultimo Trimestre
             $diferenciaDias = -90;
             break;
         case '2':
             // Ultimo año
             $diferenciaDias = -365;
             break;
         case '3':
             // Todo, 20 años hacia atrás
             $diferenciaDias = -7300;
             break;
     }
     $fecha = new Fecha(date('Y-m-d'));
     $desdeFecha = $fecha->sumaDias($diferenciaDias);
     unset($fecha);
     $proveedor = new Proveedores($idProveedor);
     $proveedorTabla = $proveedor->getDataBaseName() . "." . $proveedor->getTableName();
     $articulo = new Articulos($idArticulo);
     $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName();
     $pedidos = new PedidosCab();
     $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName();
     unset($pedidos);
     $lineas = new PedidosLineas();
     $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     // Calcular el total de unidades compradas y el precio medio de compra
     // Solo calcula los pedidos que están recepcionados o facturados
     if ($idArticulo != '' or $idProveedor != '') {
         $em = new EntityManager($articulo->getConectionName());
         if ($em->getDbLink()) {
             $query = "SELECT SUM(t1.Unidades) as Unidades, SUM(t1.Importe) as Importe\n                FROM {$lineasTabla} as t1, {$pedidosTabla} as t2\n                WHERE t1.IDPedido=t2.IDPedido AND t2.IDEstado>='2' AND t2.FechaEntrada>='{$desdeFecha}'";
             if ($idProveedor !== '') {
                 $query .= " AND  t2.IDProveedor='{$idProveedor}'";
             }
             if ($idArticulo !== '') {
                 $query .= " AND t1.IDArticulo='{$idArticulo}'";
             }
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
         }
         $precioMedio = $rows[0]['Unidades'] != 0 ? $rows[0]['Importe'] / $rows[0]['Unidades'] : 0;
         $unidades = $rows[0]['Unidades'] == '' ? 0 : $rows['0']['Unidades'];
     }
     $this->values['datos'] = array('idsucursal' => $_SESSION['usuarioPortal']['SucursalActiva']['Id'], 'articulo' => $articulo, 'proveedor' => $proveedor, 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $this->periodos, 'precioMedio' => number_format($precioMedio, 3));
     // Obtener el litado historico de compras para el articulo y proveedor
     // Solo muestra los pedidos que están confirmador o facturados
     $em = new EntityManager($articulo->getConectionName());
     if ($em->getDbLink()) {
         $query = "SELECT t2.IDLinea,t1.IDPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.FechaEntrada,'%d-%m-%Y') as FechaEntrada,t4.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe\n                FROM {$pedidosTabla} as t1, {$lineasTabla} as t2";
         if ($idProveedor !== '') {
             $query .= ", {$proveedorTabla} as t3";
         }
         if ($idArticulo !== '') {
             $query .= ", {$articuloTabla} as t4";
         }
         $query .= " WHERE t1.IDPedido=t2.IDPedido";
         if ($idProveedor !== '') {
             $query .= " AND t1.IDProveedor=t3.IDProveedor AND t1.IDProveedor='{$idProveedor}' ";
         }
         if ($idArticulo !== '') {
             $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'";
         }
         $query .= "\n                AND t1.IDEstado>='2'\n                AND t1.FechaEntrada>='{$desdeFecha}'\n                ORDER BY t1.FechaEntrada, t1.IDPedido DESC";
         //echo $query;
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     $this->values['listado'] = $rows;
     unset($em);
     unset($articulo);
     unset($proveedor);
     return array('template' => '_Emergente/historicoCompras.html.twig', 'values' => $this->values);
 }
 /**
  * Validaciones antes de actualizar o crear
  */
 public function valida(array $rules)
 {
     unset($this->_errores);
     //Para tener disponibles los datos de la
     //cabecera del pedido
     $pedido = new PedidosCab($this->IDPedido);
     // Compruebo la existencia del artículo y que pertenezca a
     // la sucursal de la cabecera del pedido.
     if ($this->IDArticulo == '') {
         $this->_errores[] = "Debe indicar un código de artículo";
     } else {
         $articulo = new Articulos($this->IDArticulo);
         if ($articulo->getStatus() == 0) {
             $this->_errores[] = "El artículo indicado no existe";
             unset($articulo);
         }
     }
     // Si existe el articulo ...
     if (count($this->_errores) == 0) {
         $aviso = $articulo->getAvisosPedidos();
         if ($aviso) {
             $this->_alertas[] = $aviso;
         }
         $this->checkPackingCompras($articulo);
         // Si la descripcion está vacia, pongo la del artículo
         // Si trae algo, la respeto.
         if ($this->Descripcion == '') {
             $this->setDescripcion($articulo->getDescripcion());
         }
         // Si no se ha indicado precio, pongo el precio de costo de la ficha del articulo
         if ($this->Precio == '') {
             $this->setPrecio($articulo->getPrecioCosto());
         }
         // Totalizar la linea de pedido
         $this->setImporte($this->Unidades * $this->Precio * (1 - $this->Descuento / 100));
         //Comparar el precio respecto al PMC.
         //Si el importe neto (despues de dctos) unitario supera el P.M.C. se emite alerta
         if ($this->getImporte() / $this->getUnidades() > $articulo->getPmc()) {
             $this->_alertas[] = "El precio supera al Precio Medio de Compra: " . $articulo->getPmc();
         }
         // Poner el mismo almacen de la cabecera del pedido y el agente en curso
         $this->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
         $this->setIDAgente($_SESSION['usuarioPortal']['Id']);
         // Si el proveedor no está sujeto a Iva, pongo a 0 el iva y el recargo
         if ($pedido->getIDProveedor()->getIva()->getIDTipo() == '0') {
             $this->setIva('0');
             $this->setRecargo('0');
         } else {
             // Si no se ha indicando iva, pongo el iva asociado al artículo,
             if ($this->Iva == '') {
                 $this->setIva($articulo->getIDIva()->getIva());
             }
         }
         // Si el artículo es inventariable:
         // Comprobar existencias sin tener en cuenta lote ni ubicación
         // de almacen. Solo se buscan existencias en el almacen indicado
         // en la línea del pedido
         if ($articulo->getInventario()->getIDTipo() == '1') {
             $existencias = new Existencias();
             $stock = $existencias->getStock($this->IDArticulo, $this->IDAlmacen);
             // Se genera una alerta si hay stock disponible o pendiente de entrada
             if ($stock['PE'] > 0 or $stock['DI'] > 0) {
                 $this->_alertas[] = "Hay stock";
                 $this->_alertas[] = "---------";
             }
             $this->_alertas[] = "Disponible: " . $stock['DI'];
             $this->_alertas[] = "Real: " . $stock['RE'];
             $this->_alertas[] = "Reservado: " . $stock['RV'];
             $this->_alertas[] = "Pte. Entrada: " . $stock['PE'];
         }
     }
     unset($articulo);
     unset($pedido);
     unset($existencias);
     return count($this->_errores) == 0;
 }
Exemple #18
0
 /**
  * Pedidos que estando confirmados, su fecha prevista de
  * entrega es anterior al día actual.
  * 
  * @return type
  */
 static function getEntradasRetrasadas()
 {
     $ped = new PedidosCab();
     $tablaPedidos = $ped->getDataBaseName() . "." . $ped->getTableName();
     $prov = new Proveedores();
     $tablaProveedores = $prov->getDataBaseName() . "." . $prov->getTableName();
     $rows = array();
     $hoy = date('Y-m-d');
     $em = new EntityManager($ped->getConectionName());
     if ($em->getDbLink()) {
         $query = "select a.PrimaryKeyMD5 as PrimaryKeyMD5,IDPedido,Fecha,RazonSocial,TotalBases from {$tablaPedidos} as a left join {$tablaProveedores} as c on a.IDProveedor=c.IDProveedor where (IDEstado='1') and FechaEntrega<'{$hoy}' order by Fecha ASC";
         $em->query($query);
         $rows = $em->fetchResult();
     }
     unset($em);
     unset($ped);
     unset($prov);
     return $rows;
 }