import ngModule from '../module'; import './style.scss'; class Controller { constructor($scope, $http, $state, $window, $translate, $stateParams) { this.$scope = $scope; this.$http = $http; this.$state = $state; this.$stateParams = $stateParams; this.$window = $window; this.$translate = $translate; } get item() { return this._item; } set item(value) { this._item = value; this.filter = { where: {itemFk: this.$stateParams.id} }; this.$scope.$applyAsync(() => { if (this.$stateParams.warehouseFk) this.warehouseFk = this.$stateParams.warehouseFk; else if (value) this.warehouseFk = value.itemType.warehouseFk; if (this.$stateParams.ticketFk) this.ticketFk = this.$stateParams.ticketFk; }); } set warehouseFk(value) { if (value && value != this._warehouseFk) { this._warehouseFk = value; this.$state.go(this.$state.current.name, { warehouseFk: value }); this.filter.where.warehouseFk = value; this.$scope.model.refresh(); } } get warehouseFk() { return this._warehouseFk; } get freeLineIndex() { let lines = this.$scope.model.data; let minDate = new Date(); minDate.setHours(0, 0, 0, 0); let maxDate = new Date(); maxDate.setHours(23, 59, 59, 59); for (let i = 0; i < lines.length; i++) { const dated = new Date(lines[i].date); let isForFuture = dated > maxDate; let isForToday = (dated >= minDate && dated <= maxDate); if (isForFuture || isForToday) 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, 0); let isPastDate = new Date(lines[i].date) < currentDate; let isPicked = line.alertLevel == 1 && line.isPicked; if ((isPicked) || line.alertLevel > 1 || isPastDate) return i + 1; } } get givenTicketIndex() { let lines = this.$scope.model.data; for (let i = lines.length - 1; i > 0; i--) { let line = lines[i]; if (line.origin == this.ticketFk) return i; } } scrollToLine() { let body = this.$window.document.body; let selectedTicketLineIndex = this.givenTicketIndex; let lineIndex = this.onPreparationLineIndex; let lines = body.querySelector('vn-tbody').children; if (lineIndex == undefined || !lines.length) return; let onPreparationLine = lines[lineIndex]; let balance = onPreparationLine.querySelector('.balanceSpan'); balance.classList.add('message'); balance.title = this.$translate.instant('Visible quantity'); let headerOffset = body.querySelector('vn-topbar').getBoundingClientRect(); let headerHeight = headerOffset.height; let offsetTop; if (this.ticketFk) { let selectedTicketLine = lines[selectedTicketLineIndex]; let id = selectedTicketLine.querySelector('[name=origin]'); id.classList.add('message'); offsetTop = selectedTicketLine.offsetTop - headerHeight; } else offsetTop = onPreparationLine.offsetTop - headerHeight; this.$window.scrollTo(0, offsetTop); this.ticketFk = null; } /** * 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(); } 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(); } onDescriptorLoad() { this.$scope.popover.relocate(); } } Controller.$inject = ['$scope', '$http', '$state', '$window', '$translate', '$stateParams']; ngModule.component('vnItemDiary', { template: require('./index.html'), controller: Controller, bindings: { item: '<' } });