@raydeck/node-quickbooks
Version:
node.js client for Intuit's IPP QuickBooks V3 API.
1,409 lines (1,285 loc) • 99.5 kB
JavaScript
/**
* @file Node.js client for QuickBooks V3 API
* @name node-quickbooks
* @author Michael Cohen <michael_cohen@intuit.com>
* @license ISC
* @copyright 2014 Michael Cohen
*/
var request = require("request"),
uuid = require("uuid"),
debug = require("request-debug"),
util = require("util"),
moment = require("moment"),
_ = require("underscore"),
Promise = require("bluebird"),
version = require("./package.json").version,
jxon = require("@raydeck/jxon");
module.exports = QuickBooks;
QuickBooks.APP_CENTER_BASE = "https://appcenter.intuit.com";
QuickBooks.V3_ENDPOINT_BASE_URL =
"https://sandbox-quickbooks.api.intuit.com/v3/company/";
QuickBooks.QUERY_OPERATORS = ["=", "IN", "<", ">", "<=", ">=", "LIKE"];
QuickBooks.TOKEN_URL =
"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
var OAUTH_ENDPOINTS = {
"1.0a": function(callback) {
callback({
REQUEST_TOKEN_URL: "https://oauth.intuit.com/oauth/v1/get_request_token",
ACCESS_TOKEN_URL: "https://oauth.intuit.com/oauth/v1/get_access_token",
APP_CENTER_URL:
QuickBooks.APP_CENTER_BASE + "/Connect/Begin?oauth_token=",
RECONNECT_URL:
QuickBooks.APP_CENTER_BASE + "/api/v1/connection/reconnect",
DISCONNECT_URL:
QuickBooks.APP_CENTER_BASE + "/api/v1/connection/disconnect"
});
},
"2.0": function(callback, discoveryUrl) {
var NEW_ENDPOINT_CONFIGURATION = {};
request(
{
url: discoveryUrl,
headers: {
Accept: "application/json"
}
},
function(err, res) {
if (err) {
console.log(err);
return err;
}
var json;
try {
json = JSON.parse(res.body);
} catch (error) {
console.log(error);
return error;
}
NEW_ENDPOINT_CONFIGURATION.AUTHORIZATION_URL =
json.authorization_endpoint;
NEW_ENDPOINT_CONFIGURATION.TOKEN_URL = json.token_endpoint;
NEW_ENDPOINT_CONFIGURATION.USER_INFO_URL = json.userinfo_endpoint;
NEW_ENDPOINT_CONFIGURATION.REVOKE_URL = json.revocation_endpoint;
callback(NEW_ENDPOINT_CONFIGURATION);
}
);
}
};
OAUTH_ENDPOINTS["1.0"] = OAUTH_ENDPOINTS["1.0a"];
/**
* Sets endpoints per OAuth version
*
* @param version - 1.0 for OAuth 1.0a, 2.0 for OAuth 2.0
* @param useSandbox - true to use the OAuth 2.0 sandbox discovery document, false (or unspecified, for backward compatibility) to use the prod discovery document.
*/
QuickBooks.setOauthVersion = function(version, useSandbox) {
version = typeof version === "number" ? version.toFixed(1) : version;
QuickBooks.version = version;
var discoveryUrl = useSandbox
? "https://developer.intuit.com/.well-known/openid_sandbox_configuration/"
: "https://developer.api.intuit.com/.well-known/openid_configuration/";
OAUTH_ENDPOINTS[version](function(endpoints) {
for (var k in endpoints) {
QuickBooks[k] = endpoints[k];
}
}, discoveryUrl);
};
QuickBooks.setOauthVersion("1.0");
/**
* Node.js client encapsulating access to the QuickBooks V3 Rest API. An instance
* of this class should be instantiated on behalf of each user accessing the api.
*
* @param consumerKey - application key
* @param consumerSecret - application password
* @param token - the OAuth generated user-specific key
* @param tokenSecret - the OAuth generated user-specific password
* @param realmId - QuickBooks companyId, returned as a request parameter when the user is redirected to the provided callback URL following authentication
* @param useSandbox - boolean - See https://developer.intuit.com/v2/blog/2014/10/24/intuit-developer-now-offers-quickbooks-sandboxes
* @param debug - boolean flag to turn on logging of HTTP requests, including headers and body
* @param minorversion - integer to set minorversion in request
* @constructor
*/
function QuickBooks(
consumerKey,
consumerSecret,
token,
tokenSecret,
realmId,
useSandbox,
debug,
minorversion,
oauthversion,
refreshToken
) {
var prefix = _.isObject(consumerKey) ? "consumerKey." : "";
this.consumerKey = eval(prefix + "consumerKey");
this.consumerSecret = eval(prefix + "consumerSecret");
this.token = eval(prefix + "token");
this.tokenSecret = eval(prefix + "tokenSecret");
this.realmId = eval(prefix + "realmId");
this.useSandbox = eval(prefix + "useSandbox");
this.debug = eval(prefix + "debug");
this.endpoint = this.useSandbox
? QuickBooks.V3_ENDPOINT_BASE_URL
: QuickBooks.V3_ENDPOINT_BASE_URL.replace("sandbox-", "");
this.minorversion = eval(prefix + "minorversion") || 4;
this.oauthversion = eval(prefix + "oauthversion") || "1.0a";
this.refreshToken = eval(prefix + "refreshToken") || null;
if (!eval(prefix + "tokenSecret") && this.oauthversion !== "2.0") {
throw new Error("tokenSecret not defined");
}
}
/**
*
* Use the refresh token to obtain a new access token.
*
*
*/
QuickBooks.prototype.refreshAccessToken = function(callback) {
var auth = new Buffer(this.consumerKey + ":" + this.consumerSecret).toString(
"base64"
);
var postBody = {
url: QuickBooks.TOKEN_URL,
headers: {
Accept: "application/json",
"Content-Type": "application/x-www-form-urlencoded",
Authorization: "Basic " + auth
},
form: {
grant_type: "refresh_token",
refresh_token: this.refreshToken
}
};
request.post(
postBody,
function(e, r, data) {
if (r && r.body) {
var refreshResponse = JSON.parse(r.body);
this.refreshToken = refreshResponse.refresh_token;
this.token = refreshResponse.access_token;
if (callback) callback(e, refreshResponse);
} else {
if (callback) callback(e, r, data);
}
}.bind(this)
);
};
/**
* Use either refresh token or access token to revoke access (OAuth2).
*
* @param useRefresh - boolean - Indicates which token to use: true to use the refresh token, false to use the access token.
* @param {function} callback - Callback function to call with error/response/data results.
*/
QuickBooks.prototype.revokeAccess = function(useRefresh, callback) {
var auth = new Buffer(this.consumerKey + ":" + this.consumerSecret).toString(
"base64"
);
var revokeToken = useRefresh ? this.refreshToken : this.token;
var postBody = {
url: QuickBooks.REVOKE_URL,
headers: {
Accept: "application/json",
"Content-Type": "application/x-www-form-urlencoded",
Authorization: "Basic " + auth
},
form: {
token: revokeToken
}
};
request.post(
postBody,
function(e, r, data) {
if (r && r.statusCode === 200) {
this.refreshToken = null;
this.token = null;
this.realmId = null;
}
if (callback) callback(e, r, data);
}.bind(this)
);
};
/**
* Get user info (OAuth2).
*
* @param {function} callback - Callback function to call with error/response/data results.
*/
QuickBooks.prototype.getUserInfo = function(callback) {
module.request(
this,
"get",
{ url: QuickBooks.USER_INFO_URL },
null,
callback
);
};
/**
* Batch operation to enable an application to perform multiple operations in a single request.
* The following batch items are supported:
create
update
delete
query
* The maximum number of batch items in a single request is 25.
*
* @param {object} items - JavaScript array of batch items
* @param {function} callback - Callback function which is called with any error and list of BatchItemResponses
*/
QuickBooks.prototype.batch = function(items, callback) {
module.request(
this,
"post",
{ url: "/batch" },
{ BatchItemRequest: items },
callback
);
};
/**
* The change data capture (CDC) operation returns a list of entities that have changed since a specified time.
*
* @param {object} entities - Comma separated list or JavaScript array of entities to search for changes
* @param {object} since - JavaScript Date or string representation of the form '2012-07-20T22:25:51-07:00' to look back for changes until
* @param {function} callback - Callback function which is called with any error and list of changes
*/
QuickBooks.prototype.changeDataCapture = function(entities, since, callback) {
var url = "/cdc?entities=";
url += typeof entities === "string" ? entities : entities.join(",");
url += "&changedSince=";
url += typeof since === "string" ? since : moment(since).format();
module.request(this, "get", { url: url }, null, callback);
};
/**
* Uploads a file as an Attachable in QBO, optionally linking it to the specified
* QBO Entity.
*
* @param {string} filename - the name of the file
* @param {string} contentType - the mime type of the file
* @param {object} stream - ReadableStream of file contents
* @param {object} entityType - optional string name of the QBO entity the Attachable will be linked to (e.g. Invoice)
* @param {object} entityId - optional Id of the QBO entity the Attachable will be linked to
* @param {function} callback - callback which receives the newly created Attachable
*/
QuickBooks.prototype.upload = function(
filename,
contentType,
stream,
entityType,
entityId,
callback
) {
var that = this;
var opts = {
url: "/upload",
formData: {
file_content_01: {
value: stream,
options: {
filename: filename,
contentType: contentType
}
}
}
};
module.request(
this,
"post",
opts,
null,
module.unwrap(function(err, data) {
if (err || data[0].Fault) {
(callback || entityType)(err || data[0], null);
} else if (_.isFunction(entityType)) {
entityType(null, data[0].Attachable);
} else {
var id = data[0].Attachable.Id;
that.updateAttachable(
{
Id: id,
SyncToken: "0",
AttachableRef: [
{
EntityRef: {
type: entityType,
value: entityId + ""
}
}
]
},
function(err, data) {
callback(err, data);
}
);
}
}, "AttachableResponse")
);
};
/**
* Creates the Account in QuickBooks
*
* @param {object} account - The unsaved account, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Account
*/
QuickBooks.prototype.createAccount = function(account, callback) {
module.create(this, "account", account, callback);
};
/**
* Creates the Attachable in QuickBooks
*
* @param {object} attachable - The unsaved attachable, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Attachable
*/
QuickBooks.prototype.createAttachable = function(attachable, callback) {
module.create(this, "attachable", attachable, callback);
};
/**
* Creates the Bill in QuickBooks
*
* @param {object} bill - The unsaved bill, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Bill
*/
QuickBooks.prototype.createBill = function(bill, callback) {
module.create(this, "bill", bill, callback);
};
/**
* Creates the BillPayment in QuickBooks
*
* @param {object} billPayment - The unsaved billPayment, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent BillPayment
*/
QuickBooks.prototype.createBillPayment = function(billPayment, callback) {
module.create(this, "billPayment", billPayment, callback);
};
/**
* Creates the Class in QuickBooks
*
* @param {object} class - The unsaved class, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Class
*/
QuickBooks.prototype.createClass = function(klass, callback) {
module.create(this, "class", klass, callback);
};
/**
* Creates the CreditMemo in QuickBooks
*
* @param {object} creditMemo - The unsaved creditMemo, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent CreditMemo
*/
QuickBooks.prototype.createCreditMemo = function(creditMemo, callback) {
module.create(this, "creditMemo", creditMemo, callback);
};
/**
* Creates the Customer in QuickBooks
*
* @param {object} customer - The unsaved customer, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Customer
*/
QuickBooks.prototype.createCustomer = function(customer, callback) {
module.create(this, "customer", customer, callback);
};
/**
* Creates the Department in QuickBooks
*
* @param {object} department - The unsaved department, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Department
*/
QuickBooks.prototype.createDepartment = function(department, callback) {
module.create(this, "department", department, callback);
};
/**
* Creates the Deposit in QuickBooks
*
* @param {object} deposit - The unsaved Deposit, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Deposit
*/
QuickBooks.prototype.createDeposit = function(deposit, callback) {
module.create(this, "deposit", deposit, callback);
};
/**
* Creates the Employee in QuickBooks
*
* @param {object} employee - The unsaved employee, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Employee
*/
QuickBooks.prototype.createEmployee = function(employee, callback) {
module.create(this, "employee", employee, callback);
};
/**
* Creates the Estimate in QuickBooks
*
* @param {object} estimate - The unsaved estimate, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Estimate
*/
QuickBooks.prototype.createEstimate = function(estimate, callback) {
module.create(this, "estimate", estimate, callback);
};
/**
* Creates the Invoice in QuickBooks
*
* @param {object} invoice - The unsaved invoice, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Invoice
*/
QuickBooks.prototype.createInvoice = function(invoice, callback) {
module.create(this, "invoice", invoice, callback);
};
/**
* Creates the Item in QuickBooks
*
* @param {object} item - The unsaved item, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Item
*/
QuickBooks.prototype.createItem = function(item, callback) {
module.create(this, "item", item, callback);
};
/**
* Creates the JournalCode in QuickBooks
*
* @param {object} journalCode - The unsaved journalCode, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent JournalCode
*/
QuickBooks.prototype.createJournalCode = function(journalCode, callback) {
module.create(this, "journalCode", journalCode, callback);
};
/**
* Creates the JournalEntry in QuickBooks
*
* @param {object} journalEntry - The unsaved journalEntry, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent JournalEntry
*/
QuickBooks.prototype.createJournalEntry = function(journalEntry, callback) {
module.create(this, "journalEntry", journalEntry, callback);
};
/**
* Creates the Payment in QuickBooks
*
* @param {object} payment - The unsaved payment, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Payment
*/
QuickBooks.prototype.createPayment = function(payment, callback) {
module.create(this, "payment", payment, callback);
};
/**
* Creates the PaymentMethod in QuickBooks
*
* @param {object} paymentMethod - The unsaved paymentMethod, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent PaymentMethod
*/
QuickBooks.prototype.createPaymentMethod = function(paymentMethod, callback) {
module.create(this, "paymentMethod", paymentMethod, callback);
};
/**
* Creates the Purchase in QuickBooks
*
* @param {object} purchase - The unsaved purchase, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Purchase
*/
QuickBooks.prototype.createPurchase = function(purchase, callback) {
module.create(this, "purchase", purchase, callback);
};
/**
* Creates the PurchaseOrder in QuickBooks
*
* @param {object} purchaseOrder - The unsaved purchaseOrder, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent PurchaseOrder
*/
QuickBooks.prototype.createPurchaseOrder = function(purchaseOrder, callback) {
module.create(this, "purchaseOrder", purchaseOrder, callback);
};
/**
* Creates the RefundReceipt in QuickBooks
*
* @param {object} refundReceipt - The unsaved refundReceipt, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent RefundReceipt
*/
QuickBooks.prototype.createRefundReceipt = function(refundReceipt, callback) {
module.create(this, "refundReceipt", refundReceipt, callback);
};
/**
* Creates the SalesReceipt in QuickBooks
*
* @param {object} salesReceipt - The unsaved salesReceipt, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent SalesReceipt
*/
QuickBooks.prototype.createSalesReceipt = function(salesReceipt, callback) {
module.create(this, "salesReceipt", salesReceipt, callback);
};
/**
* Creates the TaxAgency in QuickBooks
*
* @param {object} taxAgency - The unsaved taxAgency, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent TaxAgency
*/
QuickBooks.prototype.createTaxAgency = function(taxAgency, callback) {
module.create(this, "taxAgency", taxAgency, callback);
};
/**
* Creates the TaxService in QuickBooks
*
* @param {object} taxService - The unsaved taxService, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent TaxService
*/
QuickBooks.prototype.createTaxService = function(taxService, callback) {
module.create(this, "taxService/taxcode", taxService, callback);
};
/**
* Creates the Term in QuickBooks
*
* @param {object} term - The unsaved term, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Term
*/
QuickBooks.prototype.createTerm = function(term, callback) {
module.create(this, "term", term, callback);
};
/**
* Creates the TimeActivity in QuickBooks
*
* @param {object} timeActivity - The unsaved timeActivity, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent TimeActivity
*/
QuickBooks.prototype.createTimeActivity = function(timeActivity, callback) {
module.create(this, "timeActivity", timeActivity, callback);
};
/**
* Creates the Transfer in QuickBooks
*
* @param {object} transfer - The unsaved Transfer, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Transfer
*/
QuickBooks.prototype.createTransfer = function(transfer, callback) {
module.create(this, "transfer", transfer, callback);
};
/**
* Creates the Vendor in QuickBooks
*
* @param {object} vendor - The unsaved vendor, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent Vendor
*/
QuickBooks.prototype.createVendor = function(vendor, callback) {
module.create(this, "vendor", vendor, callback);
};
/**
* Creates the VendorCredit in QuickBooks
*
* @param {object} vendorCredit - The unsaved vendorCredit, to be persisted in QuickBooks
* @param {function} callback - Callback function which is called with any error and the persistent VendorCredit
*/
QuickBooks.prototype.createVendorCredit = function(vendorCredit, callback) {
module.create(this, "vendorCredit", vendorCredit, callback);
};
/**
* Retrieves the Account from QuickBooks
*
* @param {string} Id - The Id of persistent Account
* @param {function} callback - Callback function which is called with any error and the persistent Account
*/
QuickBooks.prototype.getAccount = function(id, callback) {
module.read(this, "account", id, callback);
};
/**
* Retrieves the Attachable from QuickBooks
*
* @param {string} Id - The Id of persistent Attachable
* @param {function} callback - Callback function which is called with any error and the persistent Attachable
*/
QuickBooks.prototype.getAttachable = function(id, callback) {
module.read(this, "attachable", id, callback);
};
/**
* Retrieves the Bill from QuickBooks
*
* @param {string} Id - The Id of persistent Bill
* @param {function} callback - Callback function which is called with any error and the persistent Bill
*/
QuickBooks.prototype.getBill = function(id, callback) {
module.read(this, "bill", id, callback);
};
/**
* Retrieves the BillPayment from QuickBooks
*
* @param {string} Id - The Id of persistent BillPayment
* @param {function} callback - Callback function which is called with any error and the persistent BillPayment
*/
QuickBooks.prototype.getBillPayment = function(id, callback) {
module.read(this, "billPayment", id, callback);
};
/**
* Retrieves the Class from QuickBooks
*
* @param {string} Id - The Id of persistent Class
* @param {function} callback - Callback function which is called with any error and the persistent Class
*/
QuickBooks.prototype.getClass = function(id, callback) {
module.read(this, "class", id, callback);
};
/**
* Retrieves the CompanyInfo from QuickBooks
*
* @param {string} Id - The Id of persistent CompanyInfo
* @param {function} callback - Callback function which is called with any error and the persistent CompanyInfo
*/
QuickBooks.prototype.getCompanyInfo = function(id, callback) {
module.read(this, "companyInfo", id, callback);
};
/**
* Retrieves the CreditMemo from QuickBooks
*
* @param {string} Id - The Id of persistent CreditMemo
* @param {function} callback - Callback function which is called with any error and the persistent CreditMemo
*/
QuickBooks.prototype.getCreditMemo = function(id, callback) {
module.read(this, "creditMemo", id, callback);
};
/**
* Retrieves the Customer from QuickBooks
*
* @param {string} Id - The Id of persistent Customer
* @param {function} callback - Callback function which is called with any error and the persistent Customer
*/
QuickBooks.prototype.getCustomer = function(id, callback) {
module.read(this, "customer", id, callback);
};
/**
* Retrieves the Department from QuickBooks
*
* @param {string} Id - The Id of persistent Department
* @param {function} callback - Callback function which is called with any error and the persistent Department
*/
QuickBooks.prototype.getDepartment = function(id, callback) {
module.read(this, "department", id, callback);
};
/**
* Retrieves the Deposit from QuickBooks
*
* @param {string} Id - The Id of persistent Deposit
* @param {function} callback - Callback function which is called with any error and the persistent Deposit
*/
QuickBooks.prototype.getDeposit = function(id, callback) {
module.read(this, "deposit", id, callback);
};
/**
* Retrieves the Employee from QuickBooks
*
* @param {string} Id - The Id of persistent Employee
* @param {function} callback - Callback function which is called with any error and the persistent Employee
*/
QuickBooks.prototype.getEmployee = function(id, callback) {
module.read(this, "employee", id, callback);
};
/**
* Retrieves the Estimate from QuickBooks
*
* @param {string} Id - The Id of persistent Estimate
* @param {function} callback - Callback function which is called with any error and the persistent Estimate
*/
QuickBooks.prototype.getEstimate = function(id, callback) {
module.read(this, "estimate", id, callback);
};
/**
* Retrieves an ExchangeRate from QuickBooks
*
* @param {object} options - An object with options including the required `sourcecurrencycode` parameter and optional `asofdate` parameter.
* @param {function} callback - Callback function which is called with any error and the ExchangeRate
*/
QuickBooks.prototype.getExchangeRate = function(options, callback) {
var url = "/exchangerate";
module.request(this, "get", { url: url, qs: options }, null, callback);
};
/**
* Retrieves the Estimate PDF from QuickBooks
*
* @param {string} Id - The Id of persistent Estimate
* @param {function} callback - Callback function which is called with any error and the Estimate PDF
*/
QuickBooks.prototype.getEstimatePdf = function(id, callback) {
module.read(this, "Estimate", id + "/pdf", callback);
};
/**
* Emails the Estimate PDF from QuickBooks to the address supplied in Estimate.BillEmail.EmailAddress
* or the specified 'sendTo' address
*
* @param {string} Id - The Id of persistent Estimate
* @param {string} sendTo - optional email address to send the PDF to. If not provided, address supplied in Estimate.BillEmail.EmailAddress will be used
* @param {function} callback - Callback function which is called with any error and the Estimate PDF
*/
QuickBooks.prototype.sendEstimatePdf = function(id, sendTo, callback) {
var path = "/estimate/" + id + "/send";
callback = _.isFunction(sendTo) ? sendTo : callback;
if (sendTo && !_.isFunction(sendTo)) {
path += "?sendTo=" + sendTo;
}
module.request(
this,
"post",
{ url: path },
null,
module.unwrap(callback, "Estimate")
);
};
/**
* Retrieves the Invoice from QuickBooks
*
* @param {string} Id - The Id of persistent Invoice
* @param {function} callback - Callback function which is called with any error and the persistent Invoice
*/
QuickBooks.prototype.getInvoice = function(id, callback) {
module.read(this, "invoice", id, callback);
};
/**
* Retrieves the Invoice PDF from QuickBooks
*
* @param {string} Id - The Id of persistent Invoice
* @param {function} callback - Callback function which is called with any error and the Invoice PDF
*/
QuickBooks.prototype.getInvoicePdf = function(id, callback) {
module.read(this, "Invoice", id + "/pdf", callback);
};
/**
* Emails the Invoice PDF from QuickBooks to the address supplied in Invoice.BillEmail.EmailAddress
* or the specified 'sendTo' address
*
* @param {string} Id - The Id of persistent Invoice
* @param {string} sendTo - optional email address to send the PDF to. If not provided, address supplied in Invoice.BillEmail.EmailAddress will be used
* @param {function} callback - Callback function which is called with any error and the Invoice PDF
*/
QuickBooks.prototype.sendInvoicePdf = function(id, sendTo, callback) {
var path = "/invoice/" + id + "/send";
callback = _.isFunction(sendTo) ? sendTo : callback;
if (sendTo && !_.isFunction(sendTo)) {
path += "?sendTo=" + sendTo;
}
module.request(
this,
"post",
{ url: path },
null,
module.unwrap(callback, "Invoice")
);
};
/**
* Retrieves the Item from QuickBooks
*
* @param {string} Id - The Id of persistent Item
* @param {function} callback - Callback function which is called with any error and the persistent Item
*/
QuickBooks.prototype.getItem = function(id, callback) {
module.read(this, "item", id, callback);
};
/**
* Retrieves the JournalCode from QuickBooks
*
* @param {string} Id - The Id of persistent JournalCode
* @param {function} callback - Callback function which is called with any error and the persistent JournalCode
*/
QuickBooks.prototype.getJournalCode = function(id, callback) {
module.read(this, "journalCode", id, callback);
};
/**
* Retrieves the JournalEntry from QuickBooks
*
* @param {string} Id - The Id of persistent JournalEntry
* @param {function} callback - Callback function which is called with any error and the persistent JournalEntry
*/
QuickBooks.prototype.getJournalEntry = function(id, callback) {
module.read(this, "journalEntry", id, callback);
};
/**
* Retrieves the Payment from QuickBooks
*
* @param {string} Id - The Id of persistent Payment
* @param {function} callback - Callback function which is called with any error and the persistent Payment
*/
QuickBooks.prototype.getPayment = function(id, callback) {
module.read(this, "payment", id, callback);
};
/**
* Retrieves the PaymentMethod from QuickBooks
*
* @param {string} Id - The Id of persistent PaymentMethod
* @param {function} callback - Callback function which is called with any error and the persistent PaymentMethod
*/
QuickBooks.prototype.getPaymentMethod = function(id, callback) {
module.read(this, "paymentMethod", id, callback);
};
/**
* Retrieves the Preferences from QuickBooks
*
* @param {function} callback - Callback function which is called with any error and the persistent Preferences
*/
QuickBooks.prototype.getPreferences = function(callback) {
module.read(this, "preferences", null, callback);
};
/**
* Retrieves the Purchase from QuickBooks
*
* @param {string} Id - The Id of persistent Purchase
* @param {function} callback - Callback function which is called with any error and the persistent Purchase
*/
QuickBooks.prototype.getPurchase = function(id, callback) {
module.read(this, "purchase", id, callback);
};
/**
* Retrieves the PurchaseOrder from QuickBooks
*
* @param {string} Id - The Id of persistent PurchaseOrder
* @param {function} callback - Callback function which is called with any error and the persistent PurchaseOrder
*/
QuickBooks.prototype.getPurchaseOrder = function(id, callback) {
module.read(this, "purchaseOrder", id, callback);
};
/**
* Retrieves the RefundReceipt from QuickBooks
*
* @param {string} Id - The Id of persistent RefundReceipt
* @param {function} callback - Callback function which is called with any error and the persistent RefundReceipt
*/
QuickBooks.prototype.getRefundReceipt = function(id, callback) {
module.read(this, "refundReceipt", id, callback);
};
/**
* Retrieves the Reports from QuickBooks
*
* @param {string} Id - The Id of persistent Reports
* @param {function} callback - Callback function which is called with any error and the persistent Reports
*/
QuickBooks.prototype.getReports = function(id, callback) {
module.read(this, "reports", id, callback);
};
/**
* Retrieves the SalesReceipt from QuickBooks
*
* @param {string} Id - The Id of persistent SalesReceipt
* @param {function} callback - Callback function which is called with any error and the persistent SalesReceipt
*/
QuickBooks.prototype.getSalesReceipt = function(id, callback) {
module.read(this, "salesReceipt", id, callback);
};
/**
* Retrieves the SalesReceipt PDF from QuickBooks
*
* @param {string} Id - The Id of persistent SalesReceipt
* @param {function} callback - Callback function which is called with any error and the SalesReceipt PDF
*/
QuickBooks.prototype.getSalesReceiptPdf = function(id, callback) {
module.read(this, "salesReceipt", id + "/pdf", callback);
};
/**
* Emails the SalesReceipt PDF from QuickBooks to the address supplied in SalesReceipt.BillEmail.EmailAddress
* or the specified 'sendTo' address
*
* @param {string} Id - The Id of persistent SalesReceipt
* @param {string} sendTo - optional email address to send the PDF to. If not provided, address supplied in SalesReceipt.BillEmail.EmailAddress will be used
* @param {function} callback - Callback function which is called with any error and the SalesReceipt PDF
*/
QuickBooks.prototype.sendSalesReceiptPdf = function(id, sendTo, callback) {
var path = "/salesreceipt/" + id + "/send";
callback = _.isFunction(sendTo) ? sendTo : callback;
if (sendTo && !_.isFunction(sendTo)) {
path += "?sendTo=" + sendTo;
}
module.request(
this,
"post",
{ url: path },
null,
module.unwrap(callback, "SalesReceipt")
);
};
/**
* Retrieves the TaxAgency from QuickBooks
*
* @param {string} Id - The Id of persistent TaxAgency
* @param {function} callback - Callback function which is called with any error and the persistent TaxAgency
*/
QuickBooks.prototype.getTaxAgency = function(id, callback) {
module.read(this, "taxAgency", id, callback);
};
/**
* Retrieves the TaxCode from QuickBooks
*
* @param {string} Id - The Id of persistent TaxCode
* @param {function} callback - Callback function which is called with any error and the persistent TaxCode
*/
QuickBooks.prototype.getTaxCode = function(id, callback) {
module.read(this, "taxCode", id, callback);
};
/**
* Retrieves the TaxRate from QuickBooks
*
* @param {string} Id - The Id of persistent TaxRate
* @param {function} callback - Callback function which is called with any error and the persistent TaxRate
*/
QuickBooks.prototype.getTaxRate = function(id, callback) {
module.read(this, "taxRate", id, callback);
};
/**
* Retrieves the Term from QuickBooks
*
* @param {string} Id - The Id of persistent Term
* @param {function} callback - Callback function which is called with any error and the persistent Term
*/
QuickBooks.prototype.getTerm = function(id, callback) {
module.read(this, "term", id, callback);
};
/**
* Retrieves the TimeActivity from QuickBooks
*
* @param {string} Id - The Id of persistent TimeActivity
* @param {function} callback - Callback function which is called with any error and the persistent TimeActivity
*/
QuickBooks.prototype.getTimeActivity = function(id, callback) {
module.read(this, "timeActivity", id, callback);
};
/**
* Retrieves the Transfer from QuickBooks
*
* @param {string} Id - The Id of persistent Term
* @param {function} callback - Callback function which is called with any error and the persistent Transfer
*/
QuickBooks.prototype.getTransfer = function(id, callback) {
module.read(this, "transfer", id, callback);
};
/**
* Retrieves the Vendor from QuickBooks
*
* @param {string} Id - The Id of persistent Vendor
* @param {function} callback - Callback function which is called with any error and the persistent Vendor
*/
QuickBooks.prototype.getVendor = function(id, callback) {
module.read(this, "vendor", id, callback);
};
/**
* Retrieves the VendorCredit from QuickBooks
*
* @param {string} Id - The Id of persistent VendorCredit
* @param {function} callback - Callback function which is called with any error and the persistent VendorCredit
*/
QuickBooks.prototype.getVendorCredit = function(id, callback) {
module.read(this, "vendorCredit", id, callback);
};
/**
* Updates QuickBooks version of Account
*
* @param {object} account - The persistent Account, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Account
*/
QuickBooks.prototype.updateAccount = function(account, callback) {
module.update(this, "account", account, callback);
};
/**
* Updates QuickBooks version of Attachable
*
* @param {object} attachable - The persistent Attachable, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Attachable
*/
QuickBooks.prototype.updateAttachable = function(attachable, callback) {
module.update(this, "attachable", attachable, callback);
};
/**
* Updates QuickBooks version of Bill
*
* @param {object} bill - The persistent Bill, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Bill
*/
QuickBooks.prototype.updateBill = function(bill, callback) {
module.update(this, "bill", bill, callback);
};
/**
* Updates QuickBooks version of BillPayment
*
* @param {object} billPayment - The persistent BillPayment, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent BillPayment
*/
QuickBooks.prototype.updateBillPayment = function(billPayment, callback) {
module.update(this, "billPayment", billPayment, callback);
};
/**
* Updates QuickBooks version of Class
*
* @param {object} class - The persistent Class, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Class
*/
QuickBooks.prototype.updateClass = function(klass, callback) {
module.update(this, "class", klass, callback);
};
/**
* Updates QuickBooks version of CompanyInfo
*
* @param {object} companyInfo - The persistent CompanyInfo, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent CompanyInfo
*/
QuickBooks.prototype.updateCompanyInfo = function(companyInfo, callback) {
module.update(this, "companyInfo", companyInfo, callback);
};
/**
* Updates QuickBooks version of CreditMemo
*
* @param {object} creditMemo - The persistent CreditMemo, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent CreditMemo
*/
QuickBooks.prototype.updateCreditMemo = function(creditMemo, callback) {
module.update(this, "creditMemo", creditMemo, callback);
};
/**
* Updates QuickBooks version of Customer
*
* @param {object} customer - The persistent Customer, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Customer
*/
QuickBooks.prototype.updateCustomer = function(customer, callback) {
module.update(this, "customer", customer, callback);
};
/**
* Updates QuickBooks version of Department
*
* @param {object} department - The persistent Department, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Department
*/
QuickBooks.prototype.updateDepartment = function(department, callback) {
module.update(this, "department", department, callback);
};
/**
* Updates QuickBooks version of Deposit
*
* @param {object} deposit - The persistent Deposit, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Deposit
*/
QuickBooks.prototype.updateDeposit = function(deposit, callback) {
module.update(this, "deposit", deposit, callback);
};
/**
* Updates QuickBooks version of Employee
*
* @param {object} employee - The persistent Employee, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Employee
*/
QuickBooks.prototype.updateEmployee = function(employee, callback) {
module.update(this, "employee", employee, callback);
};
/**
* Updates QuickBooks version of Estimate
*
* @param {object} estimate - The persistent Estimate, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Estimate
*/
QuickBooks.prototype.updateEstimate = function(estimate, callback) {
module.update(this, "estimate", estimate, callback);
};
/**
* Updates QuickBooks version of Invoice
*
* @param {object} invoice - The persistent Invoice, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Invoice
*/
QuickBooks.prototype.updateInvoice = function(invoice, callback) {
module.update(this, "invoice", invoice, callback);
};
/**
* Updates QuickBooks version of Item
*
* @param {object} item - The persistent Item, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Item
*/
QuickBooks.prototype.updateItem = function(item, callback) {
module.update(this, "item", item, callback);
};
/**
* Updates QuickBooks version of JournalCode
*
* @param {object} journalCode - The persistent JournalCode, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent JournalCode
*/
QuickBooks.prototype.updateJournalCode = function(journalCode, callback) {
module.update(this, "journalCode", journalCode, callback);
};
/**
* Updates QuickBooks version of JournalEntry
*
* @param {object} journalEntry - The persistent JournalEntry, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent JournalEntry
*/
QuickBooks.prototype.updateJournalEntry = function(journalEntry, callback) {
module.update(this, "journalEntry", journalEntry, callback);
};
/**
* Updates QuickBooks version of Payment
*
* @param {object} payment - The persistent Payment, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Payment
*/
QuickBooks.prototype.updatePayment = function(payment, callback) {
module.update(this, "payment", payment, callback);
};
/**
* Updates QuickBooks version of PaymentMethod
*
* @param {object} paymentMethod - The persistent PaymentMethod, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent PaymentMethod
*/
QuickBooks.prototype.updatePaymentMethod = function(paymentMethod, callback) {
module.update(this, "paymentMethod", paymentMethod, callback);
};
/**
* Updates QuickBooks version of Preferences
*
* @param {object} preferences - The persistent Preferences, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Preferences
*/
QuickBooks.prototype.updatePreferences = function(preferences, callback) {
module.update(this, "preferences", preferences, callback);
};
/**
* Updates QuickBooks version of Purchase
*
* @param {object} purchase - The persistent Purchase, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Purchase
*/
QuickBooks.prototype.updatePurchase = function(purchase, callback) {
module.update(this, "purchase", purchase, callback);
};
/**
* Updates QuickBooks version of PurchaseOrder
*
* @param {object} purchaseOrder - The persistent PurchaseOrder, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent PurchaseOrder
*/
QuickBooks.prototype.updatePurchaseOrder = function(purchaseOrder, callback) {
module.update(this, "purchaseOrder", purchaseOrder, callback);
};
/**
* Updates QuickBooks version of RefundReceipt
*
* @param {object} refundReceipt - The persistent RefundReceipt, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent RefundReceipt
*/
QuickBooks.prototype.updateRefundReceipt = function(refundReceipt, callback) {
module.update(this, "refundReceipt", refundReceipt, callback);
};
/**
* Updates QuickBooks version of SalesReceipt
*
* @param {object} salesReceipt - The persistent SalesReceipt, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent SalesReceipt
*/
QuickBooks.prototype.updateSalesReceipt = function(salesReceipt, callback) {
module.update(this, "salesReceipt", salesReceipt, callback);
};
/**
* Updates QuickBooks version of TaxAgency
*
* @param {object} taxAgency - The persistent TaxAgency, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent TaxAgency
*/
QuickBooks.prototype.updateTaxAgency = function(taxAgency, callback) {
module.update(this, "taxAgency", taxAgency, callback);
};
/**
* Updates QuickBooks version of TaxCode
*
* @param {object} taxCode - The persistent TaxCode, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent TaxCode
*/
QuickBooks.prototype.updateTaxCode = function(taxCode, callback) {
module.update(this, "taxCode", taxCode, callback);
};
/**
* Updates QuickBooks version of TaxRate
*
* @param {object} taxRate - The persistent TaxRate, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent TaxRate
*/
QuickBooks.prototype.updateTaxRate = function(taxRate, callback) {
module.update(this, "taxRate", taxRate, callback);
};
/**
* Updates QuickBooks version of Term
*
* @param {object} term - The persistent Term, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Term
*/
QuickBooks.prototype.updateTerm = function(term, callback) {
module.update(this, "term", term, callback);
};
/**
* Updates QuickBooks version of TimeActivity
*
* @param {object} timeActivity - The persistent TimeActivity, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent TimeActivity
*/
QuickBooks.prototype.updateTimeActivity = function(timeActivity, callback) {
module.update(this, "timeActivity", timeActivity, callback);
};
/**
* Updates QuickBooks version of Transfer
*
* @param {object} Transfer - The persistent Transfer, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Transfer
*/
QuickBooks.prototype.updateTransfer = function(transfer, callback) {
module.update(this, "transfer", transfer, callback);
};
/**
* Updates QuickBooks version of Vendor
*
* @param {object} vendor - The persistent Vendor, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent Vendor
*/
QuickBooks.prototype.updateVendor = function(vendor, callback) {
module.update(this, "vendor", vendor, callback);
};
/**
* Updates QuickBooks version of VendorCredit
*
* @param {object} vendorCredit - The persistent VendorCredit, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent VendorCredit
*/
QuickBooks.prototype.updateVendorCredit = function(vendorCredit, callback) {
module.update(this, "vendorCredit", vendorCredit, callback);
};
/**
* Updates QuickBooks version of ExchangeRate
*
* @param {object} exchangeRate - The persistent ExchangeRate, including Id and SyncToken fields
* @param {function} callback - Callback function which is called with any error and the persistent ExchangeRate
*/
QuickBooks.prototype.updateExchangeRate = function(exchangeRate, callback) {
module.update(this, "exchangerate", exchangeRate, callback);
};
/**
* Deletes the Attachable from QuickBooks
*
* @param {object} idOrEntity - The persistent Attachable to be deleted, or the Id of the Attachable, in which case an extra GET request will be issued to first retrieve the Attachable
* @param {function} callback - Callback function which is called with any error and the status of the persistent Attachable
*/
QuickBooks.prototype.deleteAttachable = function(idOrEntity, callback) {
module.delete(this, "attachable", idOrEntity, callback);
};
/**
* Deletes the Bill from QuickBooks
*
* @param {object} idOrEntity - The persistent Bill to be deleted, or the Id of the Bill, in which case an extra GET request will be issued to first retrieve the Bill
* @param {function} callback - Callback function which is called with any error and the status of the persistent Bill
*/
QuickBooks.prototype.deleteBill = function(idOrEntity, callback) {
module.delete(this, "bill", idOrEntity, callback);
};
/**
* Deletes the BillPayment from QuickBooks
*
* @param {object} idOrEntity - The persistent BillPayment to be deleted, or the Id of the BillPayment, in which case an extra GET request will be issued to first retrieve the BillPayment
* @param {function} callback - Callback function which is called with any error and the status of the persistent BillPayment
*/
QuickBooks.prototype.deleteBillPayment = function(idOrEntity, callback) {
module.delete(this, "billPayment", idOrEntity, callback);
};
/**
* Deletes the CreditMemo from QuickBooks
*
* @param {object} idOrEntity - The persistent CreditMemo to be deleted, or the Id of the CreditMemo, in which case an extra GET request will be issued to first retrieve the CreditMemo
* @param {function} callback - Callback function which is called with any error and the status of the persistent CreditMemo
*/
QuickBooks.prototype.deleteCreditMemo = function(idOrEntity, callback) {
module.delete(this, "creditMemo", idOrEntity, callback);
};
/**
* Deletes the Deposit from QuickBooks
*
* @param {object} idOrEntity - The persistent Deposit to be deleted, or the Id of the Deposi