Source: Invoices.js

/**
 * Copyright Mind Powered Corporation 2020
 * 
 * https://mindpowered.dev/
 */

const maglev = require('@mindpowered/maglev');
const invoices = require('../lib/invoices.js');

/**
 * An Library for Creating Invoices
 */
class Invoices {
	constructor() {
		let bus = maglev.maglev.MagLev.getInstance('default');
		let lib = new invoices.invoices.Invoices(bus);
	}

	/**
	 * Create a new invoice
	 * @param {string} clientId 
	 * @param {string} invoiceNumber 
	 * @param {string} date 
	 * @param {string} dueDate 
	 * @param {string} notes 
	 * @return {Promise} New invoice id Promise will resolve to type string.
	*/
	CreateInvoice(clientId, invoiceNumber, date, dueDate, notes) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [clientId, invoiceNumber, date, dueDate, notes];
		let ret = jsbus.call('Invoices.CreateInvoice', args);
		return ret;
	}

	/**
	 * Delete an invoice
	 * @param {string} invoiceId 
	*/
	DeleteInvoice(invoiceId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId];
		jsbus.call('Invoices.DeleteInvoice', args);
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @param {string} clientId 
	 * @param {string} invoiceNumber 
	 * @param {string} date 
	 * @param {string} dueDate 
	 * @param {string} notes 
	*/
	ChangeInvoice(invoiceId, clientId, invoiceNumber, date, dueDate, notes) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId, clientId, invoiceNumber, date, dueDate, notes];
		jsbus.call('Invoices.ChangeInvoice', args);
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @return {Promise}  Promise will resolve to type object.
	*/
	GetInvoiceSummary(invoiceId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId];
		let ret = jsbus.call('Invoices.GetInvoiceSummary', args);
		return ret;
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @return {Promise} Line items for invoice Promise will resolve to type array.
	*/
	GetLineItems(invoiceId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId];
		let ret = jsbus.call('Invoices.GetLineItems', args);
		return ret;
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @param {string} accountId 
	 * @param {string} description 
	 * @param {object} taxes 
	 * @param {number} quantity 
	 * @param {number} price 
	 * @return {Promise} lineNumber Promise will resolve to type number.
	*/
	AddLineItem(invoiceId, accountId, description, taxes, quantity, price) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId, accountId, description, taxes, quantity, price];
		let ret = jsbus.call('Invoices.AddLineItem', args);
		return ret;
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @param {number} lineNumber 
	 * @param {string} accountId 
	 * @param {string} description 
	 * @param {object} taxes 
	 * @param {number} quantity 
	 * @param {number} price 
	*/
	ChangeLineItem(invoiceId, lineNumber, accountId, description, taxes, quantity, price) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId, lineNumber, accountId, description, taxes, quantity, price];
		jsbus.call('Invoices.ChangeLineItem', args);
	}

	/**
	 * 
	 * @param {string} invoiceId 
	 * @param {number} lineNumber 
	*/
	RemoveLineItem(invoiceId, lineNumber) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceId, lineNumber];
		jsbus.call('Invoices.RemoveLineItem', args);
	}

	/**
	 * 
	 * @param {string} clientId 
	 * @return {Promise}  Promise will resolve to type array.
	*/
	GetInvoicesByClient(clientId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [clientId];
		let ret = jsbus.call('Invoices.GetInvoicesByClient', args);
		return ret;
	}

	/**
	 * 
	 * @param {number} page 
	 * @param {number} perpage 
	 * @return {Promise}  Promise will resolve to type array.
	*/
	GetAllInvoices(page, perpage) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [page, perpage];
		let ret = jsbus.call('Invoices.GetAllInvoices', args);
		return ret;
	}

	/**
	 * Returns the Invoice ID or null
	 * @param {string} invoiceNumber 
	 * @return {Promise}  Promise will resolve to type mixed.
	*/
	FindInvoiceByNumber(invoiceNumber) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [invoiceNumber];
		let ret = jsbus.call('Invoices.FindInvoiceByNumber', args);
		return ret;
	}

}
module.exports = Invoices;