/* ======================================= ADD ITEMS POPUP FOR ATUM ORDERS ======================================= */ import AtumOrders from './_atum-orders'; import {Blocker} from '../_blocker'; import Settings from '../../config/_settings'; import Tooltip from '../_tooltip'; export default class AddItemsPopup { constructor( private settings: Settings, private $container: JQuery, private atumOrders: AtumOrders, private tooltip: Tooltip ) { $('body') .on( 'wc_backbone_modal_loaded', (evt: Event, target: string) => this.init(evt, target) ) .on( 'wc_backbone_modal_response', (evt: Event, target: string, data: any) => this.response(evt, target, data) ); } init( evt: Event, target: string ) { if ( 'atum-modal-add-products' === target ) { $('body').trigger( 'wc-enhanced-select-init' ); } } response( evt: Event, target: string, data: any ) { if ( 'atum-modal-add-tax' === target ) { let rateId = data.add_atum_order_tax, manualRateId = ''; if ( data.manual_tax_rate_id ) { manualRateId = data.manual_tax_rate_id; } this.addTax( rateId, manualRateId ); } if ( 'atum-modal-add-products' === target ) { this.addItem( data.add_atum_order_items ); } } addItem( itemIds: string|string[] ) { if ( itemIds ) { Blocker.block(this.$container); const data: any = { action : 'atum_order_add_item', item_to_add : itemIds, atum_order_id: this.settings.get('post_id'), security : this.settings.get('atum_order_item_nonce'), } $.post( window['ajaxurl'], data, (response: any) => { if ( response.success ) { $('#atum_order_line_items').append( response.data.html ); } else { this.atumOrders.showAlert('error', this.settings.get('error'), response.data.error); } this.tooltip.addTooltips(); Blocker.unblock(this.$container); }, 'json'); } } addTax( rateId: string, manualRateId: string ) { if ( manualRateId ) { rateId = manualRateId; } if ( ! rateId ) { return false; } const rates: any[] = $('.atum-order-tax-id').map( (index: number, elem: Element) => { return $(elem).val(); }).get(); // Test if already exists if ( -1 === $.inArray( rateId, rates ) ) { this.atumOrders.loadItemsTable({ action : 'atum_order_add_tax', rate_id : rateId, atum_order_id: this.settings.get('post_id'), security : this.settings.get('atum_order_item_nonce'), }, 'json'); } else { this.atumOrders.showAlert('error', this.settings.get('error'), this.settings.get('tax_rate_already_exists')); } } }