public function Inventarios()
 {
     $nItems = 0;
     $nErrores = 0;
     $dbLink = mysql_connect("localhost", "root", "albatronic");
     $query = "TRUNCATE {$this->dbDestino}.ErpInventariosCab";
     mysql_query($query);
     $query = "TRUNCATE {$this->dbDestino}.ErpInventariosLineas";
     mysql_query($query);
     $query = "select distinct IDSucursal,DATE_FORMAT(Fecha,'%Y-%m-%d') as FInventario, Cerrado FROM {$this->dbOrigen}.inventarios order by DATE_FORMAT(Fecha,'%Y-%m-%d') asc";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $i = new InventariosCab();
         $i->setIDAlmacen($row['IDSucursal']);
         $i->setFecha($row['FInventario']);
         $i->setCerrado($row['Cerrado']);
         $id = $i->create();
         if (!$id) {
             $errores[] = $i->getErrores();
             $nErrores++;
         } else {
             $i->setIDInventario($id);
             $i->setPrimaryKeyMD5(md5($id));
             $i->save();
             $nItems++;
             $this->LineasInventario($row['FInventario'], $id, $dbLink);
         }
     }
     echo "Inventarios cabeceras {$nItems}<br/>";
     if (count($errores)) {
         echo "<pre>";
         print_r($errores);
         echo "</pre>";
     }
 }
 /**
  * Cierra el inventario
  */
 public function cerrarAction()
 {
     if ($this->values['permisos']['permisosModulo']['UP']) {
         $datos = new InventariosCab($this->request['InventariosCab']['IDInventario']);
         $datos->cierra();
         $this->values['errores'] = $datos->getErrores();
         $this->values['alertas'] = $datos->getAlertas();
         $datos = new InventariosCab($this->request['InventariosCab']['IDInventario']);
         $this->values['datos'] = $datos;
         unset($datos);
         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
     } else {
         return array('template' => '_global/forbiden.html.twig');
     }
 }
 /**
  * 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;
     }
 }