From 6c4e25bfe3630574cc918dcddb960b3aaa2372ba Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Fri, 10 Jan 2020 11:52:35 +0100 Subject: [PATCH] create entry.index --- db/changes/10140-kings/00-ACL.sql | 2 +- front/core/styles/icons/salixfont.css | 18 ++- front/core/styles/icons/salixfont.svg | 4 +- front/core/styles/icons/salixfont.ttf | Bin 26964 -> 27668 bytes front/core/styles/icons/salixfont.woff | Bin 27040 -> 27744 bytes front/module-import.js | 1 + front/salix/locale/es.yml | 1 + modules/entry/back/methods/entry/filter.js | 149 ++++++++++++++++++ .../back/methods/entry/specs/filter.spec.js | 77 +++++++++ modules/entry/back/model-config.json | 5 + modules/entry/back/models/entry.js | 4 + .../{travel => entry}/back/models/entry.json | 0 modules/entry/front/card/index.html | 5 + modules/entry/front/card/index.js | 33 ++++ modules/entry/front/descriptor/index.html | 21 +++ modules/entry/front/descriptor/index.js | 20 +++ modules/entry/front/descriptor/locale/es.yml | 1 + modules/entry/front/index.js | 11 ++ modules/entry/front/index/index.html | 63 ++++++++ modules/entry/front/index/index.js | 21 +++ modules/entry/front/locale/es.yml | 15 ++ modules/entry/front/main/index.html | 11 ++ modules/entry/front/main/index.js | 9 ++ modules/entry/front/module.js | 3 + modules/entry/front/routes.json | 32 ++++ modules/entry/front/search-panel/index.html | 78 +++++++++ modules/entry/front/search-panel/index.js | 7 + .../entry/front/search-panel/locale/es.yml | 7 + modules/travel/back/model-config.json | 2 - modules/travel/back/models/currency.json | 10 +- 30 files changed, 599 insertions(+), 11 deletions(-) create mode 100644 modules/entry/back/methods/entry/filter.js create mode 100644 modules/entry/back/methods/entry/specs/filter.spec.js create mode 100644 modules/entry/back/model-config.json create mode 100644 modules/entry/back/models/entry.js rename modules/{travel => entry}/back/models/entry.json (100%) create mode 100644 modules/entry/front/card/index.html create mode 100644 modules/entry/front/card/index.js create mode 100644 modules/entry/front/descriptor/index.html create mode 100644 modules/entry/front/descriptor/index.js create mode 100644 modules/entry/front/descriptor/locale/es.yml create mode 100644 modules/entry/front/index.js create mode 100644 modules/entry/front/index/index.html create mode 100644 modules/entry/front/index/index.js create mode 100644 modules/entry/front/locale/es.yml create mode 100644 modules/entry/front/main/index.html create mode 100644 modules/entry/front/main/index.js create mode 100644 modules/entry/front/module.js create mode 100644 modules/entry/front/routes.json create mode 100644 modules/entry/front/search-panel/index.html create mode 100644 modules/entry/front/search-panel/index.js create mode 100644 modules/entry/front/search-panel/locale/es.yml diff --git a/db/changes/10140-kings/00-ACL.sql b/db/changes/10140-kings/00-ACL.sql index 7d22bc2708..fa507a3c32 100644 --- a/db/changes/10140-kings/00-ACL.sql +++ b/db/changes/10140-kings/00-ACL.sql @@ -1,3 +1,3 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Thermograph', '*', '*', 'ALLOW', 'ROLE', 'buyer'); INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('TravelThermograph', '*', '*', 'ALLOW', 'ROLE', 'buyer'); - \ No newline at end of file +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Entry', '*', '*', 'ALLOW', 'ROLE', 'buyer'); diff --git a/front/core/styles/icons/salixfont.css b/front/core/styles/icons/salixfont.css index e3bdda5038..64f2776ea0 100644 --- a/front/core/styles/icons/salixfont.css +++ b/front/core/styles/icons/salixfont.css @@ -23,6 +23,18 @@ -moz-osx-font-smoothing: grayscale; } +.icon-buyrequest:before { + content: "\e914"; +} +.icon-entry:before { + content: "\e959"; +} +.icon-thermometer:before { + content: "\e95a"; +} +.icon-deletedTicket:before { + content: "\e958"; +} .icon-fruit:before { content: "\e957"; } @@ -134,9 +146,6 @@ .icon-doc:before { content: "\e913"; } -.icon-entry:before { - content: "\e914"; -} .icon-exit:before { content: "\e947"; } @@ -287,6 +296,3 @@ .icon-worker:before { content: "\e943"; } -.icon-deletedTicket:before { - content: "\e958"; -} diff --git a/front/core/styles/icons/salixfont.svg b/front/core/styles/icons/salixfont.svg index 26b1a31e99..2c13f601bd 100644 --- a/front/core/styles/icons/salixfont.svg +++ b/front/core/styles/icons/salixfont.svg @@ -27,7 +27,7 @@ - + @@ -96,4 +96,6 @@ + + \ No newline at end of file diff --git a/front/core/styles/icons/salixfont.ttf b/front/core/styles/icons/salixfont.ttf index 3242d75bec879b2fdab7ae6b93c255497b73d3c0..7a6ad2721937d8b4c55af2aab19a3dfa22ba4c22 100644 GIT binary patch delta 1149 zcmY*YT}&fY6uzfZI-UM(JCt@hrIb#m&J0VTrPG;#6cLqJ2wlx0#f5Ar71{zW!loFy zWY=!ibrVc9%VK=+XJ1T=@x=#>StAdPVzOCdR0MU`#0W7lzO2UIjj_es?!I`EGv|Ew zobTMZ=iIxy122CIB?Jf|Gdhn56nX6NaMadlIEPoZuue@cWR{q*oqdGBi}7eaQ&_^* zj&aQz^QX?_iiOqF7#9)B1!uFF8RoU0KR_t|I*zNec!Av3V{U#IF{D`gXd=n@K#r;p;J63@0~s(l8BKI>0YRZ-Y8K=Sjjf2bTv-fvbHJ}KR7)*aU zb>pivlU@r<@`OomFcNW+FjW@`1EGh&pnXCJvFQfn>+WAI7!c9Xm+v|C(aQBq1f} z8+4>>aFS2}!bGg3cJ-@lb-+HR~JQ?#A!FsXt8o zIFH-b_tLiBKap8qyZGpq`Tm_Z>khUXmaGQpje+bm6gJ<^+QC>$(jyQzuI1#?ZSx6B z((;mJ%WAaFTi-eIhz;31wo&_t{Vn^C^h0!xe&2D~@t*Tl=Yh+@G`S7zbx*`|)l+T0 z)V%A>dB67l<9nsG&)>^k*x9>Y4M1>vUU(qin#Y^IjWRZSoliF?^ oJ>ULYC=iK0QHpQF)*a<04ms%n^;l6P|bLlfg!yF$XCcq%uS68 zzv&L-PXTI}SCC&^0(2-4WSUIe;m#N_iP4)eVzUopuZRxNAO8=qFfbor;9_79R}@qf zRW}y}QVc8%|Gt0!&dB+P!GUr8vhUxQF|OYnDE{0}0p#^4%_RMJew(ih+$)#gl`@H z8UY3YJApX@2LuI#UJ3Jwd=a$~O%ux#PmolS?2`N;6(RLNT2K0bjDbvu><76S^3xRV zDS9YAQL0duQch4lq#~!XNwr5!M=eaPN^P0i19ctsGz}|_CQTL1TiQO_HQGmXWpwB1 ZDGBIR>020R88#X207qTyW~;1Qi~vd!ezyPs diff --git a/front/core/styles/icons/salixfont.woff b/front/core/styles/icons/salixfont.woff index e2f312391149c70ce576789b771343f2de7c3872..0e6d9a21a9ba5a148f072d8a8888067e0cc5f283 100644 GIT binary patch delta 1191 zcmY+DYfK|m6vyxFluoCQr9&UnDW%MG>fB)|6gr(5Hbq1w6hhY(LJ`P@E$Ss`BVr?6MY)EIdaPCY#Gd&AH?kDV{>M*bV{C*yb0OUEm$9^D0ZX5mi#pPA3 z_2KyQI%l4W^RxEdGWM^8;JX0Ub*2VT{gdg4~% z^ip9Nzod8L-U&EaO2Q#Hx%o1D!PR5|g@ZEjH&MoKWIzB2paUr27)XF&@J#8g$9+X7 zQV{RvAx42cuo=n_0&VLKGCBgRd;JTi|AlrO+D9zMWY%vRE5HOGw&)n8z1vAPRCuEwFq9&q$_ zRW(QvBr%Zw^wf=;X(qiEoDv9&(PSp#Bw?v85hlV2gHub(l|LB2pV_4-h2uJH)Gp&k zn(%==5pGM^wggQR3`d)YCH+F)!|;Pv6KU0Nt$b;(i%-Dq$;ks?sUz8miAQnnx5xHV zd%vdGF-c5`#ySHjo7^NUK*B<-q~z*noYQdL$@%=Dkl)8SEBmd6K|w{bj8vg=Sa0|zU zK`-b710V_J!PB^|imV9#BPP~<^9Xdia5)%{9L3+RsY*;l1TI7|rfRqtwGsrdkIAXX zZgdDicfrmsc+7A=Nhhsm!5QvHE48pDC@6+Yy@z&OQI1Oy+7Xwewl*ZiX*wcZ8k&o= zsG_L0MCKk2>9)#wy`0oB+TA@`?2w*hX__5_34vW@SJ<7=4$Z^QeZCErU1!D%uogW*a!|PrFXJS z$(jAld|!a5WX#FMyVh}A()OZl%Wk&M+uuCWUk~bi^`njv#~Y3x=tt-*{ho8(`L6pF z_rAx*xV$Fzy061`)mLr2()g7>>;KySZ{Vfo9#Q*>R delta 491 zcmaEGgK@!SMv-!VH#Y`G1|Y~>z`zZrLnex7*H06$r(UFpjZx&uL8pC zM_8mXa!V?JViSP+OF%fYmGg2=elk#rL}@1J$Mf5KW#9(6 zhJoScDiff4A@pRP40FcV$u1emj0~GsWC$=$K9Ff#@4>Z+dl~l&9x-NBXB@aK^56BqEgvfr7 zn;}0<;hv(0;uEC`WhvzZ { + Self.remoteMethodCtx('filter', { + description: 'Find all instances of the model matched by filter from the data source.', + accessType: 'READ', + accepts: [ + { + arg: 'filter', + type: 'Object', + description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', + http: {source: 'query'} + }, { + arg: 'search', + type: 'String', + description: 'Searchs the entry by id', + http: {source: 'query'} + }, { + arg: 'id', + type: 'Integer', + description: 'The entry id', + http: {source: 'query'} + }, { + arg: 'created', + type: 'Date', + description: 'The created date to filter', + http: {source: 'query'} + }, { + arg: 'travelFk', + type: 'Number', + description: 'The travel id to filter', + http: {source: 'query'} + }, { + arg: 'companyFk', + type: 'Number', + description: 'The company to filter', + http: {source: 'query'} + }, { + arg: 'isBooked', + type: 'Boolean', + description: 'The isBokked filter', + http: {source: 'query'} + }, { + arg: 'isConfirmed', + type: 'Boolean', + description: 'The isConfirmed filter', + http: {source: 'query'} + }, { + arg: 'isOrdered', + type: 'Boolean', + description: 'The isOrdered filter', + http: {source: 'query'} + }, { + arg: 'ref', + type: 'String', + description: 'The ref filter', + http: {source: 'query'} + }, { + arg: 'supplierFk', + type: 'Number', + description: 'The supplier id to filter', + http: {source: 'query'} + }, { + arg: 'currencyFk', + type: 'Number', + description: 'The currency id to filter', + http: {source: 'query'} + } + ], + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/filter`, + verb: 'GET' + } + }); + + Self.filter = async(ctx, filter) => { + let conn = Self.dataSource.connector; + let where = buildFilter(ctx.args, (param, value) => { + switch (param) { + case 'search': + return {'e.id': value}; + case 'ref': + param = `e.${param}`; + return {[param]: {like: `%${value}%`}}; + case 'created': + return {'e.created': {gte: value}}; + case 'id': + case 'isBooked': + case 'isConfirmed': + case 'isOrdered': + case 'companyFk': + case 'travelFk': + case 'currencyFk': + case 'supplierFk': + param = `e.${param}`; + return {[param]: value}; + } + }); + filter = mergeFilters(ctx.args.filter, {where}); + + let stmts = []; + let stmt; + stmt = new ParameterizedSQL( + `SELECT + e.id, + e.supplierFk, + e.dated, + e.ref, + e.isBooked, + e.isInventory, + e.notes, + e.isConfirmed, + e.isOrdered, + e.isRaid, + e.commission, + e.created, + e.evaNotes, + e.travelFk, + e.currencyFk, + e.companyFk, + e.gestDocFk, + e.invoiceInFk, + s.name AS supplierName, + co.code AS companyCode, + cu.code AS currencyCode + FROM vn.entry e + JOIN vn.supplier s ON s.id = e.supplierFk + JOIN vn.travel t ON t.id = e.travelFk + JOIN vn.company co ON co.id = e.companyFk + JOIN vn.currency cu ON cu.id = e.currencyFk` + ); + + + stmt.merge(conn.makeSuffix(filter)); + let itemsIndex = stmts.push(stmt) - 1; + + let sql = ParameterizedSQL.join(stmts, ';'); + let result = await conn.executeStmt(sql); + return itemsIndex === 0 ? result : result[itemsIndex]; + }; +}; + diff --git a/modules/entry/back/methods/entry/specs/filter.spec.js b/modules/entry/back/methods/entry/specs/filter.spec.js new file mode 100644 index 0000000000..9b935d831a --- /dev/null +++ b/modules/entry/back/methods/entry/specs/filter.spec.js @@ -0,0 +1,77 @@ +const app = require('vn-loopback/server/server'); + +describe('Entry filter()', () => { + it('should return the entry matching "search"', async() => { + let ctx = { + args: { + search: 1 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(1); + expect(result[0].id).toEqual(1); + }); + + it('should return the entry matching the currency', async() => { + let ctx = { + args: { + currencyFk: 1 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(7); + }); + + it('should return the entry matching the supplier', async() => { + let ctx = { + args: { + supplierFk: 2 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(5); + }); + + it('should return the entry matching the company', async() => { + let ctx = { + args: { + companyFk: 442 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(6); + }); + + it('should return the entries matching isBooked', async() => { + let ctx = { + args: { + isBooked: true, + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(0); + }); + + it('should return the routes matching the reference and travel', async() => { + let ctx = { + args: { + reference: 'movement', + travelFk: '2' + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(2); + }); +}); diff --git a/modules/entry/back/model-config.json b/modules/entry/back/model-config.json new file mode 100644 index 0000000000..cd763c4ea2 --- /dev/null +++ b/modules/entry/back/model-config.json @@ -0,0 +1,5 @@ +{ + "Entry": { + "dataSource": "vn" + } +} diff --git a/modules/entry/back/models/entry.js b/modules/entry/back/models/entry.js new file mode 100644 index 0000000000..4034b7e0aa --- /dev/null +++ b/modules/entry/back/models/entry.js @@ -0,0 +1,4 @@ + +module.exports = Self => { + require('../methods/entry/filter')(Self); +}; diff --git a/modules/travel/back/models/entry.json b/modules/entry/back/models/entry.json similarity index 100% rename from modules/travel/back/models/entry.json rename to modules/entry/back/models/entry.json diff --git a/modules/entry/front/card/index.html b/modules/entry/front/card/index.html new file mode 100644 index 0000000000..d386a9ebf9 --- /dev/null +++ b/modules/entry/front/card/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/entry/front/card/index.js b/modules/entry/front/card/index.js new file mode 100644 index 0000000000..62fed7db04 --- /dev/null +++ b/modules/entry/front/card/index.js @@ -0,0 +1,33 @@ +import ngModule from '../module'; +import ModuleCard from 'salix/components/module-card'; + +class Controller extends ModuleCard { + reload() { + let filter = { + include: [ + { + relation: 'company', + scope: { + fields: ['id', 'code'] + } + }, { + relation: 'travel' + }, { + relation: 'supplier', + scope: { + fields: ['id', 'name'] + } + }, { + relation: 'currency' + } + ] + }; + this.$http.get(`Entries/${this.$params.id}`, {filter}) + .then(response => this.entry = response.data); + } +} + +ngModule.component('vnEntry Card', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/entry/front/descriptor/index.html b/modules/entry/front/descriptor/index.html new file mode 100644 index 0000000000..372479c799 --- /dev/null +++ b/modules/entry/front/descriptor/index.html @@ -0,0 +1,21 @@ +
+
+ + + + + + + +
+
+
+ + + + +
+
+
diff --git a/modules/entry/front/descriptor/index.js b/modules/entry/front/descriptor/index.js new file mode 100644 index 0000000000..a9f5cd6796 --- /dev/null +++ b/modules/entry/front/descriptor/index.js @@ -0,0 +1,20 @@ +import ngModule from '../module'; + +class Controller { + constructor($scope) { + this.$ = $scope; + } +} + +Controller.$inject = ['$scope']; + +ngModule.component('vnEntryDescriptor', { + template: require('./index.html'), + bindings: { + entry: '<' + }, + require: { + card: '^?vnEntryCard' + }, + controller: Controller +}); diff --git a/modules/entry/front/descriptor/locale/es.yml b/modules/entry/front/descriptor/locale/es.yml new file mode 100644 index 0000000000..e5b926f1df --- /dev/null +++ b/modules/entry/front/descriptor/locale/es.yml @@ -0,0 +1 @@ +Reference: Referencia diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js new file mode 100644 index 0000000000..a0272fccf1 --- /dev/null +++ b/modules/entry/front/index.js @@ -0,0 +1,11 @@ +export * from './module'; + +import './main'; +import './index/'; +import './search-panel'; +import './descriptor'; +import './card'; +// import './summary'; +// import './basic-data'; +// import './log'; +// import './create'; diff --git a/modules/entry/front/index/index.html b/modules/entry/front/index/index.html new file mode 100644 index 0000000000..8ddd4d3a39 --- /dev/null +++ b/modules/entry/front/index/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + Id + Created + Travel + Notes + Reference + Booked + Is inventory + Confirmed + Ordered + Is raid + Commission + Supplier + Currency + Company + + + + + {{::entry.id}} + {{::entry.created | date:'dd/MM/yyyy'}} + {{::entry.travelFk}} + {{::entry.notes}} + {{::entry.ref}} + + + + + + {{::entry.commission}} + {{::entry.supplierName}} + {{::entry.currencyCode}} + {{::entry.companyCode}} + + + + + + + + + + \ No newline at end of file diff --git a/modules/entry/front/index/index.js b/modules/entry/front/index/index.js new file mode 100644 index 0000000000..ec78c06dfa --- /dev/null +++ b/modules/entry/front/index/index.js @@ -0,0 +1,21 @@ +import ngModule from '../module'; + +export default class Controller { + constructor($scope) { + this.$ = $scope; + } + + onSearch(params) { + if (params) + this.$.model.applyFilter(null, params); + else + this.$.model.clear(); + } +} + +Controller.$inject = ['$scope']; + +ngModule.component('vnEntryIndex', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/entry/front/locale/es.yml b/modules/entry/front/locale/es.yml new file mode 100644 index 0000000000..214be93d4d --- /dev/null +++ b/modules/entry/front/locale/es.yml @@ -0,0 +1,15 @@ +#Ordenar alfabeticamente +Reference: Referencia +Created: Creado +Booked: Facturado +Is inventory: Inventario +Notes: Notas +Travel: Envío +Supplier: Proveedor +Currency: Moneda +Company: Empresa +Confirmed: Confirmada +Ordered: Pedida +Is raid: Redada +Commission: Comisión +# Sections diff --git a/modules/entry/front/main/index.html b/modules/entry/front/main/index.html new file mode 100644 index 0000000000..44b1b2b4e7 --- /dev/null +++ b/modules/entry/front/main/index.html @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/entry/front/main/index.js b/modules/entry/front/main/index.js new file mode 100644 index 0000000000..75f1d098ad --- /dev/null +++ b/modules/entry/front/main/index.js @@ -0,0 +1,9 @@ +import ngModule from '../module'; +import ModuleMain from 'salix/components/module-main'; + +export default class Entry extends ModuleMain {} + +ngModule.vnComponent('vnEntry', { + controller: Entry, + template: require('./index.html') +}); diff --git a/modules/entry/front/module.js b/modules/entry/front/module.js new file mode 100644 index 0000000000..7a2d9943b7 --- /dev/null +++ b/modules/entry/front/module.js @@ -0,0 +1,3 @@ +import {ng} from 'core/vendor'; + +export default ng.module('entry', ['vnCore']); diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json new file mode 100644 index 0000000000..f23ff02bfb --- /dev/null +++ b/modules/entry/front/routes.json @@ -0,0 +1,32 @@ +{ + "module": "entry", + "name": "Entries", + "icon": "icon-entry", + "validations": true, + "menus": { + "main": [ + {"state": "entry.index", "icon": "icon-entry"} + ], + "card": [ + ] + }, + "routes": [ + { + "url": "/entry", + "state": "entry", + "abstract": true, + "component": "vn-entry", + "description": "Entries" + }, { + "url": "/index?q", + "state": "entry.index", + "component": "vn-entry-index", + "description": "Entries" + }, { + "url": "/:id", + "state": "entry.card", + "abstract": true, + "component": "vn-entry-card" + } + ] +} \ No newline at end of file diff --git a/modules/entry/front/search-panel/index.html b/modules/entry/front/search-panel/index.html new file mode 100644 index 0000000000..d648edcddc --- /dev/null +++ b/modules/entry/front/search-panel/index.html @@ -0,0 +1,78 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/modules/entry/front/search-panel/index.js b/modules/entry/front/search-panel/index.js new file mode 100644 index 0000000000..d728fe5e86 --- /dev/null +++ b/modules/entry/front/search-panel/index.js @@ -0,0 +1,7 @@ +import ngModule from '../module'; +import SearchPanel from 'core/components/searchbar/search-panel'; + +ngModule.component('vnEntrySearchPanel', { + template: require('./index.html'), + controller: SearchPanel +}); diff --git a/modules/entry/front/search-panel/locale/es.yml b/modules/entry/front/search-panel/locale/es.yml new file mode 100644 index 0000000000..1f892a7429 --- /dev/null +++ b/modules/entry/front/search-panel/locale/es.yml @@ -0,0 +1,7 @@ +Ticket id: Id ticket +Client id: Id cliente +Nickname: Alias +From: Desde +To: Hasta +Agency: Agencia +Warehouse: Almacén \ No newline at end of file diff --git a/modules/travel/back/model-config.json b/modules/travel/back/model-config.json index dfd39f7220..03307bd459 100644 --- a/modules/travel/back/model-config.json +++ b/modules/travel/back/model-config.json @@ -1,8 +1,6 @@ { "Travel": { "dataSource": "vn" - },"Entry": { - "dataSource": "vn" },"TravelLog": { "dataSource": "vn" },"Currency": { diff --git a/modules/travel/back/models/currency.json b/modules/travel/back/models/currency.json index 036da89f16..9ee7640b25 100644 --- a/modules/travel/back/models/currency.json +++ b/modules/travel/back/models/currency.json @@ -21,5 +21,13 @@ "ratio": { "type": "Number" } - } + }, + "acls": [ + { + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + } + ] }