invoice-fs
Version:
Nostalgic command-line invoicing application producing plain text invoices and JSON data structures. Uses the file system as a database
57 lines (50 loc) • 1.68 kB
JavaScript
var out = require('../lib/out'),
Invoice = require('../lib/invoice'),
InvoiceItem = require('../lib/invoiceItem'),
EditFlow = require('../lib/editFlow'),
EditFlowStep = require('../lib/editFlowStep'),
state = require('../lib/state'),
router = require('route-cli');
module.exports = function(command, extraArgs, flags) {
var invoice = new Invoice(extraArgs[0] !== undefined ? extraArgs[0] : state.get('invoice')),
model = new InvoiceItem(invoice);
if (invoice.data.isLocked()) {
out.error("INVOICE #" + invoice.data.number + " HAS ALREADY BEEN FINISHED");
return;
}
out.writeCliTitle("Add Invoice Item");
var flow = new EditFlow({
model: model,
steps: [
new EditFlowStep({
label: "Quantity",
property: "units",
matches: /^\d*(\.\d+)?$/,
type: "decimal",
required: true,
default: 1
}),
new EditFlowStep({
label: "Price",
property: "unitPrice",
matches: /^\d*(\.\d+)?$/,
type: "decimal",
required: true,
default: "0.00"
}),
new EditFlowStep({
label: "Description",
property: "description",
type: "string",
required: true
})
],
onSave: function() {
out.write("\nThe item was added!\n");
invoice.save();
out.writeCliDivider();
router.execute(['show', 'invoice']);
}
});
flow.start();
};