public function renumerar() { $ejercicio = new ejercicio(); foreach ($ejercicio->all_abiertos() as $eje) { $posicion = 0; $numero = 1; $sql = ''; $continuar = TRUE; $consulta = "SELECT idasiento,numero,fecha FROM " . $this->table_name . " WHERE codejercicio = '" . $eje->codejercicio . "'\n ORDER BY codejercicio ASC, fecha ASC, idasiento ASC"; $asientos = $this->db->select_limit($consulta, 1000, $posicion); while ($asientos and $continuar) { foreach ($asientos as $col) { if ($col['numero'] != $numero) { $sql .= "UPDATE " . $this->table_name . " SET numero = '" . $numero . "' WHERE idasiento = '" . $col['idasiento'] . "'; "; } $numero++; } $posicion += 1000; if ($sql != '') { if (!$this->db->exec($sql)) { $this->new_error_msg("Se ha producido un error mientras se\n renumeraban los asientos del ejercicio " . $eje->codejercicio); $continuar = FALSE; } $sql = ''; } $asientos = $this->db->select_limit($consulta, 1000, $posicion); } } return $continuar; }
public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error); if ($error) { $ejercicio = new ejercicio(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = intval(FS_NFACTURA_CLI); /// definido en el config2 $numeros = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($numeros) { foreach ($numeros as $n) { if ($n['codserie'] != $codserie) { $codserie = $n['codserie']; $num = intval(FS_NFACTURA_CLI); /// definido en el config2 } if (intval($n['numero']) != $num) { while ($num < intval($n['numero'])) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($n['fecha'])), 'hora' => $n['hora']); $num++; } } $num++; } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600); } return $huecolist; }
/** * Devuelve un array con los huecos en la numeración. * @return type */ public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error); if ($error) { $ejercicio = new ejercicio(); $serie = new serie(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = 1; $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($data) { foreach ($data as $d) { if ($d['codserie'] != $codserie) { $codserie = $d['codserie']; $num = 1; $se = $serie->get($codserie); if ($se) { /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio? if ($eje->codejercicio == $se->codejercicio) { $num = $se->numfactura; } } } if (intval($d['numero']) < $num) { /** * El número de la factura es menor que el inicial. * El usuario ha cambiado el número inicial después de hacer * facturas. */ } else { if (intval($d['numero']) == $num) { /// el número es correcto, avanzamos $num++; } else { /** * Hemos encontrado un hueco y debemos usar el número y la fecha. * La variable pasos permite dejar de añadir huecos al llegar a 100, * así evitamos agotar la memoria en caso de error grave. */ $pasos = 0; while ($num < intval($d['numero']) and $pasos < 100) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']); $num++; $pasos++; } /// avanzamos uno más $num++; } } } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600); } return $huecolist; }
public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error, TRUE); if ($error) { $ejercicio = new ejercicio(); $serie = new serie(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = 1; $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($data) { foreach ($data as $d) { if ($d['codserie'] != $codserie) { $codserie = $d['codserie']; $num = 1; if (defined('FS_NFACTURA_CLI')) { /// mantenemos compatibilidad con versiones anteriores $num = intval(FS_NFACTURA_CLI); } $se = $serie->get($codserie); if ($se) { /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio? if ($eje->codejercicio == $se->codejercicio) { $num = $se->numfactura; } } } if (intval($d['numero']) < $num) { /** * El número de la factura es menor que el inicial. * El usuario ha cambiado el número inicial después de hacer * facturas. */ } else { if (intval($d['numero']) == $num) { /// el número es correcto, avanzamos $num++; } else { /// Hemos encontrado un hueco y debemos usar el número y la fecha. while ($num < intval($d['numero'])) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']); $num++; } /// avanzamos uno más $num++; } } } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600, TRUE); } return $huecolist; }