Cómo crear una factura, albarán, pedido o presupuesto
Los documentos de compra o de venta son modelos más complejos y van enlazados con un cliente o proveedor, tienen una o varias líneas y además hay que calcular sus totales.
Cómo crear un presupuesto de compra
Aquí tienes un ejemplo de cómo crear un presupuesto de proveedor. Es lo mismo para pedidos, albaranes y facturas de proveedor.
// cargamos el proveedor 1
$proveedor = new Proveedor();
if (false === $proveedor->loadFromCode('1')) {
// no hemos encontrado el proveedor
}
// creamos el presupuesto (se le asigna empresa, almacén, serie, divisa, forma de pago y fecha predeterminada
$presupuesto = new PresupuestoProveedor();
$presupuesto->setSubject($proveedor); // asignamos el proveedor
if (false === $presupuesto->save()) {
// no se ha podido guardar
}
// añadimos una línea con un producto al presupuesto
$newLinea1 = $presupuesto->getNewProductLine('referencia1'); // se asigna el producto, descripción, precio, etc
$newLinea1->cantidad = 1;
if (false === $newLinea1->save()) {
// no se ha podido guardar la línea
}
// añadimos una línea de texto
$newLinea2 = $presupuesto->getNewLine();
$newLinea2->descripcion = 'Mano de obra';
$newLinea2->cantidad = 5;
$newLinea2->pvpunitario = 10;
if (false === $newLinea2->save()) {
// no se ha podido guardar
}
// actualizamos los totales del presupuesto
$lineas = $presupuesto->getLines();
if (false === Calculator::calculate($presupuestos, $lineas, true)) {
// no se ha podido actualizar el presupuesto
}
Asignamos el proveedor llamando al método setSubject()
. Para las líneas llamamos al método getNewProductLine()
para que nos devuelva una nueva línea enlazada al producto cuya referencia pasemos como parámetro. Para líneas sin producto llamamos al método getNewLine()
. Por últimos llamamos a la clase Calculator
para que actualice los totales del documento.
La clase Calculator
La clase Calculator se encarga de calcular los impuestos y totales del documento de compra o venta. No olvides incluir el use correspondiente:
use FacturaScripts\Core\Base\Calculator;
Cómo crear una factura de venta
Aquí tienes otro ejemplo de cómo crear una factura de cliente. Comprobarás que es prácticamente idéntico. Lo único que cambia es el nombre de la clase. Es lo mismo para albaranes, pedidos y presupuestos de cliente.
// cargamos el cliente 1
$cliente = new Cliente();
if (false === $cliente->loadFromCode('1')) {
// no hemos encontrado el cliente
}
// creamos la factura (se le asigna empresa, almacén, serie, divisa, forma de pago y fecha predeterminada
$factura = new PresupuestoProveedor();
$factura->setSubject($cliente); // asignamos el cliente
if (false === $factura->save()) {
// no se ha podido guardar
}
// añadimos una línea con un producto a la factura
$newLinea1 = $factura->getNewProductLine('referencia1'); // se asigna el producto, descripción, precio, etc
$newLinea1->cantidad = 1;
if (false === $newLinea1->save()) {
// no se ha podido guardar la línea
}
// añadimos una línea de texto
$newLinea2 = $factura->getNewLine();
$newLinea2->descripcion = 'Mano de obra';
$newLinea2->cantidad = 5;
$newLinea2->pvpunitario = 10;
if (false === $newLinea2->save()) {
// no se ha podido guardar
}
// actualizamos los totales de la factura
$lineas = $factura->getLines();
if (false === Calculator::calculate($factura, $lineas, true)) {
// no se ha podido actualizar la factura
}
Actualización de stock
Los stocks se actualizan automáticamente cuando guardamos documentos de compra o venta. Para albaranes y facturas de compra se suman las cantidades al stock de los productos. Para albaranes y facturas de venta se restan las cantidades del stock. Para pedidos de compra se anotan las cantidades como pendiente de recepción en el stock del producto. Y para pedidos de venta se anotan las cantidades como reservadas.
Este comportamiento está definido en los estados del documento, que se pueden configurar desde el panel de control.