Saltar al contenido

PHP y MySQL: genera un número de factura a partir de un entero de la base de datos

Solución:

Gracias a Gordon Linoff, pude encontrar una manera de resolver esto.

Compartiré un ejemplo, quizás a alguien le pueda interesar.

SQL – Factura sin prefijo: SELECT id, LPAD(id,7,'0') FROM invoice WHERE id = 1;

Resultado: 0000001

SQL – Factura con prefijo: SELECT id, CONCAT( 'F-', LPAD(id,7,'0') ) FROM invoice;

Resultado: F-0000001

Puede escribir una buena función auxiliar en PHP para usarla donde quiera en su aplicación para devolver un número de factura. La siguiente función auxiliar puede simplificar su proceso.

function invoice_num ($input, $pad_len = 7, $prefix = null) {
    if ($pad_len <= strlen($input))
        trigger_error('<strong>$pad_len</strong> cannot be less than or equal to the length of <strong>$input</strong> to generate invoice number', E_USER_ERROR);

    if (is_string($prefix))
        return sprintf("%s%s", $prefix, str_pad($input, $pad_len, "0", STR_PAD_LEFT));

    return str_pad($input, $pad_len, "0", STR_PAD_LEFT);
}

// Returns input with 7 zeros padded on the left
echo invoice_num(1); // Output: 0000001

// Returns input with 10 zeros padded
echo invoice_num(1, 10); // Output: 0000000001

// Returns input with prefixed F- along with 7 zeros padded
echo invoice_num(1, 7, "F-"); // Output: F-0000001

// Returns input with prefixed F- along with 10 zeros padded
echo invoice_num(1, 10, "F-"); // Output: F-0000000001

Una vez que haya terminado de escribir la función auxiliar, no necesita usar LPAD o CONCAT MySQL funciona cada vez en su consulta para devolver la ID con ceros o ceros con prefijo. Si tiene acceso global a la función de ayuda en toda la aplicación, solo necesita invocarla donde desee generar un número de factura.

Obtenga el último ID de la base de datos y guárdelo en una variable PHP.

Por ejemplo, si el último registro es 100, luego increméntelo en 1.

$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);

Finalmente, la respuesta a la segunda pregunta es,

$number = "F-". $number;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *