import ngModule from '../module'; import './style.scss'; class Controller { constructor($scope, $http, $state, $window, $translate) { this.$scope = $scope; this.$http = $http; this.$state = $state; this.$window = $window; this.$translate = $translate; } $postLink() { if (this.item) this.filterBuilder(); } set item(value) { this._item = value; if (value && this.$scope.model) this.filterBuilder(); } get item() { return this._item; } onChange(value) { if (!value) return; this.filter.where.warehouseFk = value; this.$scope.model.refresh(); } /** * Builds a filter with default values * and aplies query params. */ filterBuilder() { this.filter = { where: { itemFk: this.item.id, warehouseFk: this.item.itemType.warehouseFk } }; let where = this.filter.where; if (this.$state.params.q) { let queryFilter = JSON.parse(this.$state.params.q); where.warehouseFk = queryFilter.warehouseFk; } } get freeLineIndex() { let lines = this.$scope.model.data; for (let i = 0; i < lines.length; i++) { let isFutureDate = new Date(lines[i].date) > new Date(); if (isFutureDate) return i; } } get onPreparationLineIndex() { let lines = this.$scope.model.data; for (let i = this.freeLineIndex; i > 0; i--) { let line = lines[i]; let currentDate = new Date(); currentDate.setHours(0, 0, 0); let isPastDate = new Date(lines[i].date) < currentDate; let isPicked = line.alertLevel == 1 && line.isPicked; if ((isPicked) || line.alertLevel > 1 || isPastDate) return i; } } scrollToActive() { let body = this.$window.document.body; let lineIndex = this.onPreparationLineIndex; let lines = body.querySelector('vn-tbody').children; if (!lineIndex || !lines.length) return; let onPreparationLine = lines[lineIndex]; let balance = onPreparationLine.querySelector('.balance'); balance.classList.add('counter'); balance.title = this.$translate.instant('Visible quantity'); let headerOffset = body.querySelector('header').getBoundingClientRect(); let headerHeight = headerOffset.height; let offsetTop = onPreparationLine.offsetTop - headerHeight; body.querySelector('ui-view').scrollTop = offsetTop; } /** * Compares a date with the current one * @param {Object} date - Date to compare * @return {Boolean} - Returns true if the two dates equals */ isToday(date) { let today = new Date(); today.setHours(0, 0, 0, 0); let comparedDate = new Date(date); comparedDate.setHours(0, 0, 0, 0); if (!(today - comparedDate)) return true; } showDescriptor(event, sale) { if (!sale.isTicket) return; this.$scope.descriptor.ticketFk = sale.origin; this.$scope.descriptor.parent = event.target; this.$scope.descriptor.show(); event.preventDefault(); event.stopImmediatePropagation(); } showClientDescriptor(event, sale) { if (!sale.isTicket) return; this.$scope.clientDescriptor.clientFk = sale.clientFk; this.$scope.clientDescriptor.parent = event.target; this.$scope.clientDescriptor.show(); event.preventDefault(); event.stopImmediatePropagation(); } onDescriptorLoad() { this.$scope.popover.relocate(); } } Controller.$inject = ['$scope', '$http', '$state', '$window', '$translate']; ngModule.component('vnItemDiary', { template: require('./index.html'), controller: Controller, bindings: { item: '<' } });