UNPKG

@fabrix/spool-cart

Version:

Spool - eCommerce Spool for Fabrix

49 lines (48 loc) 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@fabrix/fabrix/dist/common"); class TaxService extends common_1.FabrixService { publish(type, event, options = {}) { if (this.app.services.EventsService) { options.include = options.include || [{ model: this.app.models.EventItem.instance, as: 'objects' }]; return this.publish(type, event, options); } this.app.log.debug('spool-events is not installed, please install it to use publish'); return Promise.resolve(); } calculate(obj, lineItems, shippingAddress, resolver, options = {}) { let resObj; return resolver.resolve(obj, { transaction: options.transaction || null }) .then(_obj => { if (!_obj) { throw new Error('Could not resolve for taxes'); } resObj = _obj; return this.app.services.ProxyCartService.resolveItemsFromTo(resObj, lineItems.filter(i => i.requires_taxes), shippingAddress); }) .then(resolvedItemsFromTo => { if (!resolvedItemsFromTo) { return resObj; } return this.getTaxes(resObj, lineItems, resolvedItemsFromTo, options); }) .then(taxesResult => { return taxesResult; }); } getTaxes(obj, lineItems = [], resolvedItemsFromTo, options = {}) { const taxProvider = this.app.config.get(`generics.${obj.tax_provider}`) || this.app.config.get('generics.tax_provider'); return this.app.services.TaxGenericService.taxForOrder({ nexus_addresses: resolvedItemsFromTo.nexus_addresses, to_address: resolvedItemsFromTo.to_address, line_items: lineItems, subtotal_price: obj.subtotal_price, total_shipping: obj.total_shipping }, taxProvider); } } exports.TaxService = TaxService;