From c369453bfc25cb24b1a6851e15c42f2651e8c469 Mon Sep 17 00:00:00 2001 From: joan Date: Tue, 31 May 2022 13:36:27 +0200 Subject: [PATCH] Added model fields --- .../10470-family/00-defaultViewConfig.sql | 2 +- front/core/components/smart-table/index.js | 22 +- loopback/locale/es.json | 4 +- ...{detailFilter.js => extendedListFilter.js} | 139 ++++------- modules/client/back/models/client.js | 2 +- modules/client/front/detail/index.js | 113 --------- modules/client/front/detail/locale/es.yml | 2 - modules/client/front/detail/style.scss | 32 --- .../{detail => extended-list}/index.html | 217 ++++++++---------- modules/client/front/extended-list/index.js | 184 +++++++++++++++ .../{detail => extended-list}/index.spec.js | 0 .../client/front/extended-list/locale/es.yml | 3 + modules/client/front/extended-list/style.scss | 6 + modules/client/front/index.js | 2 +- modules/client/front/locale/es.yml | 1 + modules/client/front/routes.json | 10 +- .../client/front/search-panel/locale/es.yml | 2 +- modules/monitor/front/index/tickets/index.js | 2 +- 18 files changed, 377 insertions(+), 366 deletions(-) rename modules/client/back/methods/client/{detailFilter.js => extendedListFilter.js} (58%) delete mode 100644 modules/client/front/detail/index.js delete mode 100644 modules/client/front/detail/locale/es.yml delete mode 100644 modules/client/front/detail/style.scss rename modules/client/front/{detail => extended-list}/index.html (61%) create mode 100644 modules/client/front/extended-list/index.js rename modules/client/front/{detail => extended-list}/index.spec.js (100%) create mode 100644 modules/client/front/extended-list/locale/es.yml create mode 100644 modules/client/front/extended-list/style.scss diff --git a/db/changes/10470-family/00-defaultViewConfig.sql b/db/changes/10470-family/00-defaultViewConfig.sql index 5290f5a98..0a394e5bc 100644 --- a/db/changes/10470-family/00-defaultViewConfig.sql +++ b/db/changes/10470-family/00-defaultViewConfig.sql @@ -1,3 +1,3 @@ INSERT INTO salix.defaultViewConfig (tableCode, columns) -VALUES ('clientsDetail', '{"id":true,"phone":true,"city":true,"socialName":true,"salesPersonFk":true,"email":true}'); +VALUES ('clientsDetail', '{"id":true,"phone":true,"city":true,"socialName":true,"salesPersonFk":true,"email":true,"name":false,"fi":false,"credit":false,"creditInsurance":false,"mobile":false,"street":false,"countryFk":false,"provinceFk":false,"postcode":false,"created":false,"businessTypeFk":false,"payMethodFk":false,"sageTaxTypeFk":false,"sageTransactionTypeFk":false,"isActive":false,"isVies":false,"isTaxDataChecked":false,"isEqualizated":false,"isFreezed":false,"hasToInvoice":false,"hasToInvoiceByAddress":false,"isToBeMailed":false,"hasLcr":false,"hasCoreVnl":false,"hasSepaVnl":false}'); diff --git a/front/core/components/smart-table/index.js b/front/core/components/smart-table/index.js index 81d8d103e..9f913071e 100644 --- a/front/core/components/smart-table/index.js +++ b/front/core/components/smart-table/index.js @@ -318,6 +318,8 @@ export default class SmartTable extends Component { for (let column of columns) { const field = column.getAttribute('field'); const cell = document.createElement('td'); + cell.setAttribute('centered', ''); + if (field) { let input; let options; @@ -346,6 +348,23 @@ export default class SmartTable extends Component { on-change="$ctrl.searchByColumn('${field}')" clear-disabled="true" />`)(this.$inputsScope); + } else if (options && options.checkbox) { + input = this.$compile(` + `)(this.$inputsScope); + } else if (options && options.datepicker) { + input = this.$compile(` + `)(this.$inputsScope); } else { input = this.$compile(` { - Self.remoteMethodCtx('detailFilter', { + Self.remoteMethodCtx('extendedListFilter', { description: 'Find all instances of the model matched by filter from the data source.', accessType: 'READ', accepts: [ @@ -13,128 +13,84 @@ module.exports = Self => { type: 'object', description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', }, - { - arg: 'tags', - type: ['object'], - description: 'List of tags to filter with', - }, { arg: 'search', type: 'string', description: `If it's and integer searchs by id, otherwise it searchs by name`, }, { - arg: 'id', - type: 'integer', - description: 'Item id', - }, - { - arg: 'categoryFk', - type: 'integer', - description: 'Category id', - }, - { - arg: 'typeFk', - type: 'integer', - description: 'Type id', - }, - { - arg: 'isActive', - type: 'boolean', - description: 'Whether the item is or not active', - }, - { - arg: 'buyerFk', - type: 'integer', - description: 'The buyer of the item', - }, - { - arg: 'supplierFk', - type: 'integer', - description: 'The supplier of the item', - }, - { - arg: 'description', + arg: 'name', type: 'string', - description: 'The item description', + description: 'The client name', }, { - arg: 'stemMultiplier', - type: 'integer', - description: 'The item multiplier', + arg: 'salesPersonFk', + type: 'number', }, { - arg: 'landed', - type: 'date', - description: 'The item last buy landed date', + arg: 'fi', + type: 'string', + description: 'The client fiscal id', }, { - arg: 'isFloramondo', - type: 'boolean', - description: 'Whether the the item is or not floramondo', - } + arg: 'socialName', + type: 'string', + }, + { + arg: 'city', + type: 'string', + }, + { + arg: 'postcode', + type: 'string', + }, + { + arg: 'provinceFk', + type: 'number', + }, + { + arg: 'email', + type: 'string', + }, + { + arg: 'phone', + type: 'string', + }, ], returns: { type: ['object'], root: true }, http: { - path: `/detailFilter`, + path: `/extendedListFilter`, verb: 'GET' } }); - Self.detailFilter = async(ctx, filter, options) => { + Self.extendedListFilter = async(ctx, filter, options) => { const conn = Self.dataSource.connector; const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); - let codeWhere; - - if (ctx.args.search) { - const items = await Self.app.models.ItemBarcode.find({ - where: {code: ctx.args.search}, - fields: ['itemFk'] - }, myOptions); - - const itemIds = []; - - for (const item of items) - itemIds.push(item.itemFk); - - codeWhere = {'i.id': {inq: itemIds}}; - } - const where = buildFilter(ctx.args, (param, value) => { switch (param) { case 'search': return /^\d+$/.test(value) - ? {or: [{'i.id': value}, codeWhere]} - : {or: [ - {'i.name': {like: `%${value}%`}}, - {'i.longName': {like: `%${value}%`}}, - codeWhere]}; - case 'id': - case 'isActive': - case 'typeFk': - case 'isFloramondo': - return {[`i.${param}`]: value}; - case 'multiplier': - return {'i.stemMultiplier': value}; - case 'categoryFk': - return {'ic.id': value}; - case 'buyerFk': - return {'it.workerFk': value}; - case 'supplierFk': - return {'s.id': value}; - case 'origin': - return {'ori.code': value}; - case 'intrastat': - return {'intr.description': value}; - case 'landed': - return {'lb.landed': value}; + ? {'c.id': {inq: value}} + : {'c.name': {like: `%${value}%`}}; + case 'name': + case 'salesPersonFk': + case 'fi': + case 'socialName': + case 'city': + case 'postcode': + case 'provinceFk': + case 'email': + case 'phone': + param = `c.${param}`; + return {[param]: value}; } }); @@ -175,6 +131,8 @@ module.exports = Self => { u.name AS salesPerson, bt.code AS businessTypeFk, bt.description AS businessType, + pm.id AS payMethodFk, + pm.name AS payMethod, sti.CodigoIva AS sageTaxTypeFk, sti.Iva AS sageTaxType, stt.CodigoTransaccion AS sageTransactionTypeFk, @@ -184,6 +142,7 @@ module.exports = Self => { LEFT JOIN country ct ON ct.id = c.countryFk LEFT JOIN province p ON p.id = c.provinceFk LEFT JOIN businessType bt ON bt.code = c.businessTypeFk + LEFT JOIN payMethod pm ON pm.id = c.payMethodFk LEFT JOIN sage.TiposIva sti ON sti.CodigoIva = c.taxTypeSageFk LEFT JOIN sage.TiposTransacciones stt ON stt.CodigoTransaccion = c.transactionTypeSageFk diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index d71279bd0..03ad90285 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -31,7 +31,7 @@ module.exports = Self => { require('../methods/client/createReceipt')(Self); require('../methods/client/updatePortfolio')(Self); require('../methods/client/checkDuplicated')(Self); - require('../methods/client/detailFilter')(Self); + require('../methods/client/extendedListFilter')(Self); // Validations diff --git a/modules/client/front/detail/index.js b/modules/client/front/detail/index.js deleted file mode 100644 index cca19622a..000000000 --- a/modules/client/front/detail/index.js +++ /dev/null @@ -1,113 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; -import './style.scss'; - -class Controller extends Section { - constructor($element, $) { - super($element, $); - - this.smartTableOptions = { - activeButtons: { - search: true, - shownColumns: true, - }, - columns: [ - { - field: 'category', - autocomplete: { - url: 'ItemCategories', - valueField: 'name', - } - }, - { - field: 'origin', - autocomplete: { - url: 'Origins', - showField: 'code', - valueField: 'code' - } - }, - { - field: 'typeFk', - autocomplete: { - url: 'ItemTypes', - } - }, - { - field: 'intrastat', - autocomplete: { - url: 'Intrastats', - showField: 'description', - valueField: 'description' - } - }, - { - field: 'buyerFk', - autocomplete: { - url: 'Workers/activeWithRole', - where: `{role: {inq: ['logistic', 'buyer']}}`, - searchFunction: '{firstName: $search}', - showField: 'nickname', - valueField: 'id', - } - }, - { - field: 'active', - searchable: false - }, - { - field: 'landed', - searchable: false - }, - ] - }; - } - - exprBuilder(param, value) { - switch (param) { - case 'category': - return {'ic.name': value}; - case 'buyerFk': - return {'it.workerFk': value}; - case 'grouping': - return {'b.grouping': value}; - case 'packing': - return {'b.packing': value}; - case 'origin': - return {'ori.code': value}; - case 'typeFk': - return {'i.typeFk': value}; - case 'intrastat': - return {'intr.description': value}; - case 'name': - return {'i.name': {like: `%${value}%`}}; - case 'producer': - return {'pr.name': {like: `%${value}%`}}; - case 'id': - case 'size': - case 'subname': - case 'isActive': - case 'density': - case 'stemMultiplier': - case 'stems': - return {[`i.${param}`]: value}; - } - } - - onCloneAccept(itemFk) { - return this.$http.post(`Items/${itemFk}/clone`) - .then(res => { - this.$state.go('item.card.tags', {id: res.data.id}); - }); - } - - preview(client) { - this.clientSelected = client; - this.$.preview.show(); - } -} - -ngModule.vnComponent('vnClientDetail', { - template: require('./index.html'), - controller: Controller -}); diff --git a/modules/client/front/detail/locale/es.yml b/modules/client/front/detail/locale/es.yml deleted file mode 100644 index 0d72edd28..000000000 --- a/modules/client/front/detail/locale/es.yml +++ /dev/null @@ -1,2 +0,0 @@ -picture: Foto -Buy requests: Peticiones de compra \ No newline at end of file diff --git a/modules/client/front/detail/style.scss b/modules/client/front/detail/style.scss deleted file mode 100644 index eaa1a16ed..000000000 --- a/modules/client/front/detail/style.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import "variables"; - -vn-item-product { - display: block; - - .id { - background-color: $color-main; - color: $color-font-dark; - margin-bottom: 0; - } - .image { - height: 112px; - width: 112px; - - & > img { - max-height: 100%; - max-width: 100%; - border-radius: 3px; - } - } - vn-label-value:first-of-type section{ - margin-top: 9px; - } -} - -table { - img { - border-radius: 50%; - width: 50px; - height: 50px; - } -} \ No newline at end of file diff --git a/modules/client/front/detail/index.html b/modules/client/front/extended-list/index.html similarity index 61% rename from modules/client/front/detail/index.html rename to modules/client/front/extended-list/index.html index 66028efc0..23c331915 100644 --- a/modules/client/front/detail/index.html +++ b/modules/client/front/extended-list/index.html @@ -1,12 +1,13 @@ Social name - Fiscal ID + Tax number Salesperson @@ -75,43 +76,46 @@ Business type - + + Billing data + + Sage tax type Sage tr. type - + Active - + Vies - - Tax data checked + + Verified data - - Tax equalized + + Is equalizated - + Freezed - + Invoice - + Invoice by address - + Mailing - + Received LCR - + Received core VNL - + Received B2B VNL @@ -124,11 +128,11 @@ params: {id: client.id} }"> - - @@ -162,116 +166,97 @@ {{::client.email | dashIfEmpty}} {{::client.created | date:'dd/MM/yyyy'}} {{::client.businessType | dashIfEmpty}} + {{::client.payMethod | dashIfEmpty}} {{::client.sageTaxType | dashIfEmpty}} {{::client.sageTransactionType | dashIfEmpty}} - - - + + + {{ ::client.isActive ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.isVies ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.isTaxDataChecked ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.isEqualizated ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.isFreezed ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.hasToInvoice ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.hasToInvoiceByAddress ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.isToBeMailed ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.hasLcr ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.hasCoreVnl ? 'Yes' : 'No' | translate}} + - - - + + + {{ ::client.hasSepaVnl ? 'Yes' : 'No' | translate}} + - - +