/**
  * Crea las líneas de expediciones relativas al albarán
  * 
  * @param integer $idAlbaran
  * @param integer $idRepartidor 
  */
 private function cargaLineasAlbaran($idAlbaran, $idRepartidor)
 {
     // Cargo las lineas del albarán que no están expedidas y cuyos artículos son inventariables.
     // Borro las eventuales líneas de expedición que no están expedidas.
     $rows = array();
     $lineas = new AlbaranesLineas();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $articulos = new Articulos();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     $em = new EntityManager($lineas->getConectionName());
     if ($em->getDbLink()) {
         $query = "select l.IDLinea\n                    from {$tablaLineas} l, {$tablaArticulos} a\n                    where l.IDAlbaran = '{$idAlbaran}' 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();
         $expediciones = new Expediciones();
         $expediciones->queryDelete("Entidad='AlbaranesCab' and IDEntidad='{$idAlbaran}' and Expedida='0'");
         unset($expediciones);
         $em->desConecta();
     }
     unset($em);
     // Crea las líneas de expedición preasignando lotes y ubicaciones
     foreach ($rows as $row) {
         $this->preasignaLinea('AlbaranesCab', $idAlbaran, new AlbaranesLineas($row['IDLinea']), $idRepartidor);
     }
 }
 private function recalcula($idAlmacen)
 {
     // Poner las reservadas y el entrando a cero
     $stock = new Existencias();
     $stock->queryUpdate(array("Reservadas" => 0, "Entrando" => 0), "IDAlmacen='{$idAlmacen}'");
     // Borrar los registros de stock que estén a cero
     $stock->queryDelete("IDAlmacen='{$idAlmacen}' and Reales=0 and Pales=0 and Cajas=0 and Reservadas=0 and Entrando=0");
     // Calcular las reservas de los artículos inventariables
     $lineas = new AlbaranesLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion, sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['reservas'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazReserva($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     // Calcular el entrando de los artículos inventariables
     $lineas = new PedidosLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion,sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['entrando'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazEntrando($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     return $resultado;
 }
 /**
  * Devuelve un array con los $nTop objetos Articulos más vendidos
  * 
  * @param int $nTop Por defecto 20
  * @return array \Articulos
  */
 public function getTops($nTop = 20)
 {
     if ($nTop <= 0) {
         $nTop = 20;
     }
     $lineasAlbaranes = new AlbaranesLineas();
     $rows = $lineasAlbaranes->cargaCondicion("IDArticulo,sum(Unidades)", "1 group by IDArticulo", "sum(Unidades) DESC limit {$nTop}");
     unset($lineasAlbaranes);
     $array = array();
     foreach ($rows as $row) {
         $array[] = new Articulos($row['IDArticulo']);
     }
     return $array;
 }
 /**
  * Proceso de facturacion.
  * Puede ser facturación separada: Una factura por cada albarán
  * o facturación agrupada: Una factura con todos los albaranes, con las siguientes salvedades:
  *
  * Se agrupan las facturas en base a la forma de pago, comercial y al flag "Facturación agrupada"
  * de la ficha del cliente.
  *
  * @return <type>
  */
 public function facturarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     switch ($this->request['tipo']) {
         case '0':
             // Facturación individual. Se genera una factura por cada albarán
             $filter = "IDFactura='0' and IDEstado='2' and IDCliente='{$filtro['idCliente']}' and FechaEntrega>='{$desdeFecha}' and FechaEntrega<'{$hastaFecha}' and FlagFacturar='1'";
             $albaran = new AlbaranesCab();
             $rows = $albaran->cargaCondicion("IDAlbaran", $filter, "FechaEntrega ASC");
             foreach ($rows as $row) {
                 $albaran = new AlbaranesCab($row['IDAlbaran']);
                 $idFactura = $albaran->facturar(new Contadores($this->request['idContador']), $this->request['fecha']);
                 if (count($albaran->getErrores()) != 0) {
                     $this->values['errores'] = $albaran->getErrores();
                     break;
                 } else {
                     $facturados[] = $idFactura;
                 }
             }
             unset($albaran);
             break;
         case '1':
             // Agrupada. Se agrupan los albaranes por forma de pago, comercial
             $filter = "c.IDFactura='0' and c.IDEstado='2' and c.IDCliente='{$filtro['idCliente']}' and c.FechaEntrega>='{$desdeFecha}' and c.FechaEntrega<'{$hastaFecha}' and c.FlagFacturar='1'";
             //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
             $albaran = new AlbaranesCab();
             $albaranTabla = $albaran->getDataBaseName() . "." . $albaran->getTableName();
             $lineas = new AlbaranesLineas();
             $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
             $em = new EntityManager($albaran->getConectionName());
             if (!$em->getDbLink()) {
                 $this->values['errores'] = $em->getError();
                 return $this->listAction();
             }
             $query = "select l.Iva from {$lineasTabla} as l, {$albaranTabla} as c\n                        where {$filter} and c.IDAlbaran=l.IDAlbaran\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 ventas para la sucursal
             $sucursal = new Sucursales($filtro['idSucursal']);
             $ctaVentas = $sucursal->getCtaContableVentas();
             unset($sucursal);
             $cliente = new Clientes($filtro['idCliente']);
             $agruparDireccionEntrega = $cliente->getFacturacionAgrupada()->getIDTipo() == '1';
             unset($cliente);
             $query = $agruparDireccionEntrega ? "select c.IDFP,c.IDComercial, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial;" : "select c.IDFP,c.IDComercial, c.IDDirec, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial, c.IDDirec;";
             unset($cliente);
             //AGRUPO LOS ALBARANES POR FORMA DE PAGO, COMERCIAL Y (si procede) DIRECCION DE ENTREGA.
             $em = new EntityManager($albaran->getConectionName());
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
             foreach ($rows as $row) {
                 $numeroFactura = $contador->asignaContador();
                 $factura = new FemitidasCab();
                 $factura->setIDSucursal($filtro['idSucursal']);
                 $factura->setIDContador($this->request['idContador']);
                 $factura->setNumeroFactura($numeroFactura);
                 $factura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $factura->setIDComercial($row['IDComercial']);
                 $factura->setFecha($this->request['fecha']);
                 $factura->setIDCliente($filtro['idCliente']);
                 $factura->setCuentaVentas($ctaVentas);
                 $factura->setDescuento($row['Descuento']);
                 $factura->setImporte($row['Importe']);
                 $factura->setIDFP($row['IDFP']);
                 $idFactura = $factura->create();
                 // Guardo en un array los id's de facturas generadas
                 $facturados[] = $idFactura;
                 if ($idFactura != 0) {
                     // Crear las lineas de factura
                     // No incluyo las lineas de albaran cuyas unidades sean 0
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (l.Unidades<>0) and {$filter}" : "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and (l.Unidades<>0) and {$filter}";
                     $em->query($query);
                     $lineas = $em->fetchResult();
                     $em->desConecta();
                     foreach ($lineas as $linea) {
                         $linFactura = new FemitidasLineas();
                         $linFactura->setIDFactura($idFactura);
                         $linFactura->setIDArticulo($linea['IDArticulo']);
                         $linFactura->setDescripcion($linea['Descripcion']);
                         $linFactura->setUnidades($linea['Unidades']);
                         $linFactura->setPrecio($linea['Precio']);
                         $linFactura->setDescuento($linea['Descuento']);
                         $linFactura->setImporte($linea['Importe']);
                         $linFactura->setImporteCosto($linea['ImporteCosto']);
                         $linFactura->setIDAlbaran($linea['IDAlbaran']);
                         $linFactura->setIDLineaAlbaran($linea['IDLinea']);
                         $linFactura->setIva($linea['Iva']);
                         $linFactura->setRecargo($linea['Recargo']);
                         $linFactura->setIDVenta($linea['IDVenta']);
                         $linFactura->setComisionAgente($linea['ComisionAgente']);
                         $linFactura->setComisionMontador($linea['ComisionMontador']);
                         $linFactura->setComisionar($linea['Comisionar']);
                         $linFactura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                         $linFactura->setIDComercial($linea['IDComercial']);
                         $linFactura->setIDPromocion($linea['IDPromocion']);
                         $linFactura->setAltoAl($linea['AltoAl']);
                         $linFactura->setAnchoAl($linea['AnchoAl']);
                         $linFactura->setMtsAl($linea['MtsAl']);
                         $linFactura->setAltoFa($linea['AltoFa']);
                         $linFactura->setAnchoFa($linea['AnchoFa']);
                         $linFactura->setMtsFa($linea['MtsFa']);
                         if ($linFactura->create()) {
                             // Pongo el estado de la linea de albaran a "Facturado"
                             $lineaAlbaran = new AlbaranesLineas($linea['IDLinea']);
                             $lineaAlbaran->setIDEstado(3);
                             $lineaAlbaran->save();
                         } else {
                             print_r($linFactura->getErrores());
                         }
                         unset($linFactura);
                     }
                     // Totalizar la factura
                     $factura->recalcula();
                     // Crear vencimientos
                     $factura->creaVctos();
                     // Anotar en caja sin procede
                     $factura->anotaEnCaja();
                     // Actualiza las cabecera del grupo de albaranes
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})" : "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and ({$filter})";
                     $em->query($query);
                     $em->desConecta();
                     unset($factura);
                 } else {
                     $this->values['errores'] = $factura->getErrores();
                 }
             }
             break;
     }
     if ($this->request['imprimir'] == 'on' and count($facturados) > 0) {
         $this->values['archivo'] = $this->generaPdf('FemitidasCab', $facturados);
     }
     if (count($facturados) > 0) {
         $this->values['alertas'][] = "Se han generado las siguientes facturas:";
         foreach ($facturados as $item) {
             $this->values['alertas'][] = $item;
         }
     }
     return $this->listAction();
 }
 public function AlbaranesLineas()
 {
     $nItems = 0;
     $nErrores = 0;
     $dbLink = mysql_connect("localhost", "root", "albatronic");
     $query = "TRUNCATE {$this->dbDestino}.ErpAlbaranesLineas";
     mysql_query($query);
     $query = "select Codigo,IDArticulo from {$this->dbDestino}.ErpArticulos";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $correspondencia[$row['Codigo']] = $row['IDArticulo'];
     }
     $query = "select l.*, c.IDAgente, c.Expedido, c.IDFactura, c.Fecha from {$this->dbOrigen}.albaranes_lineas as l LEFT JOIN {$this->dbOrigen}.albaranes_cab as c ON l.IDAlbaran=c.IDAlbaran where c.IDAlbaran>0";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $c = new AlbaranesLineas();
         $c->setIDAlbaran($row['IDAlbaran']);
         $c->setIDLinea($row['IDLinea']);
         $c->setIDArticulo($correspondencia[$row['IDArticulo']]);
         $c->setDescripcion($row['Descripcion']);
         $c->setUnidades($row['Unidades']);
         $c->setUnidadMedida("UMV");
         $c->setPvpVigente($row['Precio']);
         $c->setPrecio($row['Precio']);
         $c->setDescuento($row['Descuento']);
         $c->setImporte($row['Importe']);
         $c->setImporteCosto($row['ImporteCosto']);
         $c->setIDAlmacen(1);
         if ($row['Fecha'] >= '2012-09-01') {
             $c->setIva($this->correspondenciaIva[$row['Iva']]);
         } else {
             $c->setIva($row['Iva']);
         }
         $c->setIDAgente($this->agentes[$row['IDAgente']]);
         $c->setIDComercial($this->agentes[$row['IDAgente']]);
         if ($row['Expedido'] == 0) {
             $c->setIDEstado(0);
         } elseif ($row['IDFactura']) {
             $c->setIDEstado(3);
         } else {
             $c->setIDEstado(2);
         }
         $c->setPrimaryKeyMD5(md5($row['IDLinea']));
         if (!$c->create()) {
             $errores[] = $c->getErrores();
             $nErrores++;
         } else {
             $nItems++;
         }
     }
     //mysql_close($dbLink);
     echo "Líneas Albaranes {$nItems}<br/>";
     if (count($errores)) {
         echo "<pre>";
         print_r($errores);
         echo "</pre>";
     }
 }
 public function NavegarAction()
 {
     if ($this->values['permisos']['permisosModulo']['CO']) {
         $idAlbaran = $this->request['AlbaranesCab']['IDAlbaran'];
         switch ($this->request['accion']) {
             case 'nuevo':
                 $albaran = new AlbaranesCab();
                 $albaran->setIDSucursal($_SESSION['suc']);
                 break;
             case 'crear':
                 $albaran = $this->guardar($this->request['AlbaranesCab']);
                 break;
             case 'buscar':
                 $albaran = new AlbaranesCab($idAlbaran);
                 break;
             case 'guardar':
                 $albaran = $this->guardar($this->request['AlbaranesCab']);
                 break;
             case 'borrar':
                 $albaran = $this->borrar($this->request['AlbaranesCab']);
                 break;
             case 'U':
                 $albaran = $this->getUltimo();
                 break;
             case 'P':
                 $albaran = $this->getPrimero();
                 break;
             case 'A':
                 $albaran = $this->getAnterior($idAlbaran);
                 break;
             case 'S':
                 $albaran = $this->getSiguiente($idAlbaran);
                 break;
         }
         /**
          if ($albaran->getIDEstado()->getIDTipo() == '0') {
          // Si el albaran está pte de confirmar, puedo modificar sus líneas y
          // por lo tanto le añado un objeto linea vacío
          $objetoNuevo = new AlbaranesLineas();
          $objetoNuevo->setIDAlbaran($albaran->getIDAlbaran());
          $lineas[] = $objetoNuevo;
          unset($objetoNuevo);
          }
         */
         $lin = new AlbaranesLineas();
         $rows = $lin->cargaCondicion("IDLinea", "IDAlbaran='{$albaran->getIDAlbaran()}'", "IDLinea ASC");
         unset($lin);
         foreach ($rows as $linea) {
             $lineas[] = new AlbaranesLineas($linea['IDLinea']);
         }
         // Cargo los favoritos del tpv
         $fav = new FavoritosTpv();
         $this->values['favoritos'] = $fav->cargaCondicion("Id,IDArticulo,Descripcion", "IDTpv='{$_SESSION['tpv']}'", "SortOrder ASC");
         unset($fav);
         $this->values['albaran'] = $albaran;
         $this->values['lineas'] = $lineas;
         $template = "Tpv/index.html.twig";
         unset($albaran);
         unset($lineas);
     } else {
         $template = "_global/forbiden.html.twig";
     }
     return array('template' => $template, 'values' => $this->values);
 }
 /**
  * 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);
 }
Exemple #8
0
            $alertas = $linea->getAlertas();
        }
        break;
    case 'guardar':
        if ($pvpConIva == '1') {
            // El precio viene con iva, calculo la base
            $datos['Precio'] = $datos['Precio'] * 100 / (100 + $datos['Iva']);
        }
        $linea = new AlbaranesLineas($datos['IDLinea']);
        $linea->bind($datos);
        if ($linea->valida(array())) {
            if (!$linea->save()) {
                $errores = $linea->getErrores();
            } else {
                $alertas = $linea->getAlertas();
                $linea = new AlbaranesLineas($datos['IDLinea']);
            }
        }
        break;
    case 'cierre':
        include_once '../modules/ExpedirLineas/ExpedirLineasController.class.php';
        $albaran = new AlbaranesCab($datos['IDAlbaran']);
        $albaran->confirma();
        $expedir = new ExpedirLineasController();
        $expedir->cargaLineasAlbaran($datos['IDAlbaran'], 0);
        //$albaran->expide();
        break;
}
$albaran = new AlbaranesCab($datos['IDAlbaran']);
$lineaAlbaran = $linea->iterator();
$lineaAlbaran['Codigo'] = $linea->getIDArticulo()->getCodigo();
 /**
  * GENERA LOS ALBARANES Y FACTURAS DE MANTENIMIENTOS
  * EN BASE A LOS INDICADO EN EL ARCHIVO CSV
  * 
  * @param string $fileCsv
  */
 public function mantenimientosAction($fileCsv = '')
 {
     if ($fileCsv == '') {
         $fileCsv = 'tmp/mantenimientos.csv';
     }
     $archivo = new Archivo($fileCsv);
     $archivo->setColumnsDelimiter(";");
     if ($archivo->open()) {
         while (($linea = $archivo->readLine()) !== FALSE) {
             $idSucursal = $linea[0];
             $idAlmacen = $linea[1];
             $idComercial = $linea[2];
             $idCliente = $linea[3];
             $codigoArticulo = $linea[4];
             $unidades = $linea[5];
             $precio = $linea[6];
             $cliente = new Clientes($idCliente);
             $direccionesEntrega = $cliente->getDireccionesEntrega();
             $direcEntrega = $direccionesEntrega[0];
             $albaran = new AlbaranesCab();
             $albaran->setIDCliente($cliente->getIDCliente());
             $albaran->setIDSucursal($idSucursal);
             $albaran->setFecha(date("d-m-Y"));
             $albaran->setIDDirec($direcEntrega->getIDDirec());
             $albaran->setIDAlmacen($idAlmacen);
             $albaran->setIDComercial($idComercial);
             $albaran->setIDContador(2);
             $albaran->setIDEstado(0);
             $albaran->setIDFP($cliente->getIDFP()->getIDFP());
             $idAlbaran = $albaran->create();
             if ($idAlbaran) {
                 $articulo = new Articulos();
                 $articulo = $articulo->find("Codigo", $codigoArticulo);
                 $lineas = new AlbaranesLineas();
                 $lineas->setIDAlbaran($idAlbaran);
                 $lineas->setIDArticulo($articulo->getIDArticulo());
                 $lineas->setDescripcion($articulo->getDescripcion() . " Mes " . date("m Y"));
                 $lineas->setUnidades($unidades);
                 $lineas->setPrecio($precio);
                 $lineas->setDescuento(0);
                 $lineas->setIva($articulo->getIDIva()->getIva());
                 $lineas->setImporte($unidades * $precio);
                 $ok = $lineas->create();
                 if ($ok) {
                     $albaran = new AlbaranesCab($idAlbaran);
                     $albaran->confirma();
                     if ($albaran->expide()) {
                         $albaran = new AlbaranesCab($idAlbaran);
                         $contador = new Contadores();
                         $contador = $contador->dameContador($idSucursal, 2);
                         $albaran->facturar($contador);
                     }
                 } else {
                     print_r($lineas->getErrores());
                     exit;
                 }
             } else {
                 $this->values['errores'][] = "No se ha podido crear el albarán para " . $cliente->getRazonSocial();
             }
         }
     } else {
         $this->values['errores'][] = "El fichero de importación " . $fileCsv . " no existe";
     }
 }
 /**
  * Edita, actualiza o borrar un registro
  *
  * Si viene por GET es editar
  * Si viene por POST puede ser actualizar o borrar
  * según el valor de $this->request['accion']
  *
  * @return array con el template y valores a renderizar
  */
 public function editAction()
 {
     switch ($this->request["METHOD"]) {
         case 'GET':
             if ($this->values['permisos']['permisosModulo']['CO']) {
                 //SI EN LA POSICION 3 DEL REQUEST VIENE ALGO,
                 //SE ENTIENDE QUE ES EL VALOR DE LA CLAVE PARA LINKAR CON LA ENTIDAD PADRE
                 //ESTO SE UTILIZA PARA LOS FORMULARIOS PADRE->HIJO
                 if ($this->request['3'] != '') {
                     $this->values['linkBy']['value'] = $this->request['3'];
                 }
                 //MOSTRAR DATOS. El ID viene en la posicion 2 del request
                 $datos = new $this->entity();
                 $datos = $datos->find('PrimaryKeyMD5', $this->request[2]);
                 if ($datos->getStatus()) {
                     $lineasAlbaranes = new AlbaranesLineas();
                     $promoAplicada = $lineasAlbaranes->cargaCondicion("IDPromocion", "IDPromocion='{$datos->getIDPromocion()}'");
                     $this->values['promoAplicada'] = count($promoAplicada);
                     $this->values['datos'] = $datos;
                     $this->values['errores'] = $datos->getErrores();
                     return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                 } else {
                     $this->values['errores'] = array("Valor no encontrado. El objeto que busca no existe. Es posible que haya sido eliminado por otro usuario.");
                     return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                 }
             } else {
                 return array('template' => '_global/forbiden.html.twig');
             }
             break;
         case 'POST':
             //COGER DEL REQUEST EL LINK A LA ENTIDAD PADRE
             if ($this->values['linkBy']['id'] != '') {
                 $this->values['linkBy']['value'] = $this->request[$this->entity][$this->values['linkBy']['id']];
             }
             switch ($this->request['accion']) {
                 case 'Guardar':
                     //GUARDAR DATOS
                     if ($this->values['permisos']['permisosModulo']['UP']) {
                         // Cargo la entidad
                         $datos = new $this->entity($this->request[$this->entity][$this->form->getPrimaryKey()]);
                         // Vuelco los datos del request
                         $datos->bind($this->request[$this->entity]);
                         if ($datos->valida($this->form->getRules())) {
                             $this->values['alertas'] = $datos->getAlertas();
                             $datos->save();
                             //Recargo el objeto para refrescar las propiedas que
                             //hayan podido ser objeto de algun calculo durante el proceso
                             //de guardado.
                             $datos = new $this->entity($this->request[$this->entity][$datos->getPrimaryKeyName()]);
                         } else {
                             $this->values['errores'] = $datos->getErrores();
                             $this->values['alertas'] = $datos->getAlertas();
                         }
                         $this->values['datos'] = $datos;
                         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                     } else {
                         return array('template' => '_global/forbiden.html.twig');
                     }
                     break;
                 case 'Borrar':
                     //BORRAR DATOS
                     if ($this->values['permisos']['permisosModulo']['DE']) {
                         $datos = new $this->entity();
                         $datos->bind($this->request[$this->entity]);
                         if ($datos->erase()) {
                             $datos = new $this->entity();
                             $this->values['datos'] = $datos;
                             $this->values['errores'] = array();
                             return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                         } else {
                             $this->values['datos'] = $datos;
                             $this->values['errores'] = $datos->getErrores();
                             $this->values['alertas'] = $datos->getAlertas();
                             return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                         }
                     } else {
                         return array('template' => '_global/forbiden.html.twig');
                     }
                     break;
             }
             break;
     }
 }
Exemple #11
0
 /**
  * Confirma el presupuesto, que consiste en aprobarlo
  * y generar un albaran en base al mismo.
  * Devuelve el id del albaran generado
  * IMPORTANTE: APLICA LA TARIFA Y PROMOCIONES VIGENTES
  *
  * @return integer El id del albaran generado
  */
 public function confirma()
 {
     //Crear cabecera de albaran.
     //No pongo los totales porque los recalculo una vez
     //creadas las lineas del albaran.
     $contador = new Contadores();
     $albaran = new AlbaranesCab();
     $albaran->setIDSucursal($this->IDSucursal);
     $albaran->setIDContador($contador->dameContador($this->IDSucursal, 1));
     $albaran->setIDAlmacen($this->IDAlmacen);
     $albaran->setIDAgente($_SESSION['usuarioPortal']['Id']);
     $albaran->setIDComercial($this->IDComercial);
     $albaran->setFecha(date('d-m-Y'));
     $albaran->setIDCliente($this->IDCliente);
     $albaran->setIDDirec($this->IDDirec);
     $albaran->setDescuento($this->Descuento);
     $albaran->setObservaciones($this->Observaciones . "Proviene del Psto N. " . $this->NumeroPsto);
     $albaran->setIDAgencia($this->IDAgencia);
     $albaran->setIDFP($this->IDFP);
     $albaran->setIDPsto($this->IDPsto);
     $idAlbaran = $albaran->create();
     unset($contador);
     if ($idAlbaran) {
         // Marco el presupuesto como confirmado (Estado=1)
         $this->setIDEstado(1);
         $this->setIDAlbaran($idAlbaran);
         $this->setFechaAceptacion(date('d-m-Y'));
         $this->save();
         // Crear las lineas de albaran
         $lineas = new PstoLineas();
         $rows = $lineas->cargaCondicion('*', "IDPsto='{$this->IDPsto}'", "IDLinea ASC");
         unset($lineas);
         foreach ($rows as $row) {
             $linea = new AlbaranesLineas();
             $linea->setIDAlbaran($idAlbaran);
             $linea->setIDArticulo($row['IDArticulo']);
             $linea->setDescripcion($row['Descripcion']);
             $linea->setUnidades($row['Unidades']);
             $linea->setPrecio($row['Precio']);
             $linea->setDescuento($row['Descuento']);
             $linea->setImporte($row['Importe']);
             $linea->setImporteCosto($row['ImporteCosto']);
             $linea->setIDAlmacen($this->IDAlmacen);
             $linea->setIva($row['Iva']);
             $linea->setRecargo($row['Recargo']);
             $linea->setIDAgente($_SESSION['usuarioPortal']['Id']);
             $linea->setIDComercial($this->IDComercial);
             $linea->setAltoAl($row['AltoAl']);
             $linea->setAnchoAl($row['AnchoAl']);
             $linea->setIDEstado(0);
             if ($linea->valida()) {
                 $linea->create();
                 // Marco la línea de psto como confirmado (Estado=1)
                 $lineaPsto = new PstoLineas($row['IDLinea']);
                 $lineaPsto->setIDEstado(1);
                 $lineaPsto->save();
                 unset($lineaPsto);
             }
         }
         // Recalcular el albarán
         $albaran->recalcula();
         $albaran->save();
         // Confirmar el albarán
         $albaran->confirma();
         $this->_alertas[] = "Se ha generado el albarán n. " . $albaran->getNumeroAlbaran();
     } else {
         $this->_alertas[] = "No se ha generado albarán";
     }
     return $idAlbaran;
 }