import ngModule from '../module'; export default class Controller { constructor($state, $scope, $http, $q, $translate, vnApp) { this.$state = $state; this.$scope = $scope; this.$http = $http; this.$q = $q; this.$translate = $translate; this.vnApp = vnApp; this.barcodes = []; this.removedBarcodes = []; this.oldBarcodes = {}; } _setIconAdd() { if (this.barcodes.length) { this.barcodes.map(element => { element.showAddIcon = false; return true; }); this.barcodes[this.barcodes.length - 1].showAddIcon = true; } else { this.addBarcode(); } } _setDirtyForm() { if (this.$scope.form) { this.$scope.form.$setDirty(); } } _unsetDirtyForm() { if (this.$scope.form) { this.$scope.form.$setPristine(); } } _equalBarcodes(oldBarcode, newBarcode) { return oldBarcode.id === newBarcode.id && oldBarcode.code === newBarcode.code; } addBarcode() { this.barcodes.push({code: null, itemFk: this.$state.params.id, showAddIcon: true}); this._setIconAdd(); } removeBarcode(index) { let item = this.barcodes[index]; if (item) { this.barcodes.splice(index, 1); this._setIconAdd(); if (item.id) { this.removedBarcodes.push(item.id); this._setDirtyForm(); } } } submit() { let codes = []; let repeatedBarcodes = false; let canSubmit; let barcodesObj = { delete: this.removedBarcodes, create: [], update: [] }; for (let i = 0; i < this.barcodes.length; i++) { let barcode = this.barcodes[i]; let isNewBarcode = barcode.id === undefined; if (barcode.code && codes.indexOf(barcode.code) !== -1) { repeatedBarcodes = true; break; } if (barcode.code) codes.push(barcode.code); if (isNewBarcode && barcode.code) { barcodesObj.create.push(barcode); } else if (!isNewBarcode && !this._equalBarcodes(this.oldBarcodes[barcode.id], barcode)) { barcodesObj.update.push(barcode); } } if (repeatedBarcodes) { return this.vnApp.showMessage(this.$translate.instant('The barcode must be unique')); } canSubmit = barcodesObj.update.length > 0 || barcodesObj.create.length > 0 || barcodesObj.delete.length > 0; if (canSubmit) { return this.$http.post(`/item/api/ItemBarcodes/crudItemBarcodes`, barcodesObj).then(() => { this.getBarcodes(); this._unsetDirtyForm(); }); } this.vnApp.showMessage(this.$translate.instant('No changes to save')); } setOldBarcodes(response) { this._setIconAdd(); response.data.forEach(barcode => { this.oldBarcodes[barcode.id] = Object.assign({}, barcode); }); } getBarcodes() { let filter = { where: {itemFk: this.$state.params.id} }; this.$http.get(`/item/api/ItemBarcodes?filter=${JSON.stringify(filter)}`).then(response => { this.barcodes = response.data; this.setOldBarcodes(response); }); } $onInit() { this.getBarcodes(); } } Controller.$inject = ['$state', '$scope', '$http', '$q', '$translate', 'vnApp']; ngModule.component('vnItemBarcode', { template: require('./item-barcode.html'), controller: Controller });