/**
  * Genera un array con la informacion necesaria para imprimir el documento
  * Recibe un array con los ids de inventario
  *
  * @param array $idsDocumento Array con los ids de inventario
  * @return array Array con dos elementos: master es un objeto inventario y detail es un array de objetos lineas de inventario
  */
 protected function getDatosDocumento(array $idsDocumento)
 {
     $master = array();
     $detail = array();
     // Recorro el array de los inventarios a imprimir
     foreach ($idsDocumento as $key => $idDocumento) {
         // Instancio la cabecera del inventario
         $master[$key] = new InventariosCab($idDocumento);
         // LLeno el array con objetos de lineas de inventario
         $lineas = array();
         $inventarioLineas = new InventariosLineas();
         $rows = $inventarioLineas->cargaCondicion('IDLinea', "IDInventario='{$idDocumento}'", "IDUbicacion,IDArticulo ASC");
         foreach ($rows as $row) {
             $lineas[] = new InventariosLineas($row['IDLinea']);
         }
         $detail[$key] = $lineas;
     }
     return array('master' => $master, 'detail' => $detail);
 }
 /**
  * Cierra el inventario.
  * 
  * Consiste en generar los movimientos de almacén necesarios
  * para dejar las existencias de cada articulo/lote/ubicación 
  * según lo indicado en las líneas de inventario
  */
 public function cierra()
 {
     $ok = true;
     // Si no está cerrado
     if ($this->Cerrado == 0) {
         $lineas = new InventariosLineas();
         $rows = $lineas->cargaCondicion("*", "IDInventario='{$this->IDInventario}'");
         unset($lineas);
         $exi = new Existencias();
         foreach ($rows as $row) {
             // Buscar la existencias que hay para calcular el mvto
             // de almacén de tal forma que se queden como dice el inventario
             $stock = $exi->cargaCondicion("*", "IDAlmacen='{$this->IDAlmacen}' and IDArticulo='{$row['IDArticulo']}' and IDLote='{$row['IDLote']}' and IDUbicacion='{$row['IDUbicacion']}'");
             $valores = array('UM' => 'UMA', 'Reales' => $row['Stock'] - $stock[0]['Reales'], 'Pales' => $row['Pales'] - $stock[0]['Pales'], 'Cajas' => $row['Cajas'] - $stock[0]['Cajas'], 'Reservadas' => 0, 'Entrando' => 0);
             /**
             if ($valores['Reales']>=0)
                 $signo = "E";
             else {
                 $signo = "S";
                 $valores['Reales'] = abs($valores['Reales']);
             }
             */
             $signo = "E";
             $mvtoAlmacen = new MvtosAlmacen();
             $ok = $mvtoAlmacen->genera('InventariosCab', $signo, $this->IDInventario, $this->IDAlmacen, $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores);
             // Valores con los que actualizar
         }
         unset($exi);
         unset($mvtoAlmacen);
         // Marcar el inventario como cerrado
         if ($ok) {
             $this->setCerrado(1);
             $this->save();
         }
     }
     return $ok;
 }