import ngModule from '../module'; import Section from 'salix/components/section'; import './style.scss'; export default class Controller extends Section { constructor($element, $) { super($element, $); this.editedColumn; this.checkAll = false; this.checkedBuys = []; this.smartTableOptions = { activeButtons: { search: true, shownColumns: true, }, columns: [ { field: 'code', autocomplete: { url: 'ItemTypes', showField: 'code', valueField: 'code', } }, { field: 'origin', autocomplete: { url: 'Origins', showField: 'code', valueField: 'code' } }, { field: 'family', autocomplete: { url: 'ItemFamilies', valueField: 'code', showField: 'code' } }, { field: 'intrastat', autocomplete: { url: 'Intrastats', showField: 'description', valueField: 'description' } }, { field: 'packageFk', autocomplete: { url: 'Packagings', showField: 'id' } }, { field: 'isActive', searchable: false }, { field: 'isIgnored', searchable: false }, { field: 'landing', searchable: false } ] }; } get columns() { if (this._columns) return this._columns; this._columns = [ {field: 'packing', displayName: this.$t('Packing')}, {field: 'grouping', displayName: this.$t('Grouping')}, {field: 'packageValue', displayName: this.$t('Package value')}, {field: 'weight', displayName: this.$t('Weight')}, {field: 'description', displayName: this.$t('Description')}, {field: 'size', displayName: this.$t('Size')}, {field: 'weightByPiece', displayName: this.$t('weight/Piece')}, {field: 'packingOut', displayName: this.$t('PackingOut')}, {field: 'landing', displayName: this.$t('Landing')} ]; return this._columns; } get checked() { const buys = this.$.model.data || []; const checkedBuys = []; for (let buy of buys) { if (buy.checked) checkedBuys.push(buy); } return checkedBuys; } exprBuilder(param, value) { switch (param) { case 'id': case 'size': case 'weightByPiece': case 'isActive': case 'family': case 'minPrice': case 'packingOut': return {[`i.${param}`]: value}; case 'name': case 'description': return {[`i.${param}`]: {like: `%${value}%`}}; case 'code': return {'it.code': value}; case 'intrastat': return {'intr.description': value}; case 'origin': return {'ori.code': value}; case 'landing': return {[`lb.${param}`]: value}; case 'packing': case 'grouping': case 'quantity': case 'entryFk': case 'buyingValue': case 'freightValue': case 'comissionValue': case 'packageValue': case 'isIgnored': case 'price2': case 'price3': case 'ektFk': case 'weight': case 'packageFk': return {[`b.${param}`]: value}; } } uncheck() { this.checkAll = false; this.checkedBuys = []; } get totalChecked() { if (this.checkedDummyCount) return this.checkedDummyCount; return this.checked.length; } saveChecked(buyId) { const index = this.checkedBuys.indexOf(buyId); if (index !== -1) return this.checkedBuys.splice(index, 1); return this.checkedBuys.push(buyId); } reCheck() { if (!this.$.model.data) return; if (!this.checkedBuys.length) return; this.$.model.data.forEach(buy => { if (this.checkedBuys.includes(buy.id)) buy.checked = true; }); } onEditAccept() { const rowsToEdit = []; for (let row of this.checked) rowsToEdit.push({id: row.id, itemFk: row.itemFk}); const data = { field: this.editedColumn.field, newValue: this.editedColumn.newValue, lines: rowsToEdit }; if (this.checkedDummyCount && this.checkedDummyCount > 0) { const params = {}; if (this.$.model.userParams) { const userParams = this.$.model.userParams; for (let param in userParams) { let newParam = this.exprBuilder(param, userParams[param]); if (!newParam) newParam = {[param]: userParams[param]}; Object.assign(params, newParam); } } if (this.$.model.userFilter) Object.assign(params, this.$.model.userFilter.where); data.filter = params; } return this.$http.post('Buys/editLatestBuys', data) .then(() => { this.uncheck(); this.$.model.refresh(); }); } } ngModule.component('vnEntryLatestBuys', { template: require('./index.html'), controller: Controller });