source: trunk/grails-app/conf/Config.groovy @ 637

Last change on this file since 637 was 637, checked in by gav, 14 years ago

Add feature to import inventory item pictures from zip file, part 3.

File size: 25.3 KB
Line 
1// locations to search for config files that get merged into the main config
2// config files can either be Java properties files or ConfigSlurper scripts
3
4// grails.config.locations = [ "classpath:${appName}-config.properties",
5//                             "classpath:${appName}-config.groovy",
6//                             "file:${userHome}/.grails/${appName}-config.properties",
7//                             "file:${userHome}/.grails/${appName}-config.groovy"]
8
9// if(System.properties["${appName}.config.location"]) {
10//    grails.config.locations << "file:" + System.properties["${appName}.config.location"]
11// }
12grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
13grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
14                      xml: ['text/xml', 'application/xml'],
15                      text: 'text-plain',
16                      js: 'text/javascript',
17                      rss: 'application/rss+xml',
18                      atom: 'application/atom+xml',
19                      css: 'text/css',
20                      csv: 'text/csv',
21                      pdf: 'application/pdf',
22                      rtf: 'application/rtf',
23                      excel: 'application/vnd.ms-excel',
24                      ods: 'application/vnd.oasis.opendocument.spreadsheet',
25                      all: '*/*',
26                      json: ['application/json','text/json'],
27                      form: 'application/x-www-form-urlencoded',
28                      multipartForm: 'multipart/form-data'
29                    ]
30// The default codec used to encode data with ${}
31grails.views.default.codec="none" // none, html, base64
32grails.views.gsp.encoding="UTF-8"
33grails.converters.encoding="UTF-8"
34
35// enable Sitemesh preprocessing of GSP pages
36grails.views.gsp.sitemesh.preprocess = true
37// scaffolding templates configuration
38grails.scaffolding.templates.domainSuffix = 'Instance'
39
40// Set to false to use the new Grails 1.2 JSONBuilder in the render method
41grails.json.legacy.builder=false
42
43// enabled native2ascii conversion of i18n properties files
44grails.enable.native2ascii = true
45
46// whether to install the java.util.logging bridge for sl4j. Disable fo AppEngine!
47grails.logging.jul.usebridge = true
48// packages to include in Spring bean scanning
49grails.spring.bean.packages = []
50
51/**
52* Internal searchable index config.
53*/
54// Is set true by createDataService.startSearchableIndex() once bootstrap completes.
55appSearchable.cascadeOnUpdate = false
56
57/**
58* Directory configuration.
59* Pickup the Tomcat/Catalina directory else use the target or current dir.
60*/
61def fs = File.separator // Local variable.
62globalDirs.targetDir = new File("target${fs}").isDirectory() ? "target${fs}" : ''
63globalDirs.catalinaBase = System.properties.getProperty('catalina.base')
64globalDirs.logDirectory = globalDirs.catalinaBase ? "${globalDirs.catalinaBase}${fs}logs${fs}" : globalDirs.targetDir
65globalDirs.workDirectory = globalDirs.catalinaBase ? "${globalDirs.catalinaBase}${fs}work${fs}" : globalDirs.targetDir
66globalDirs.tempDirectory = globalDirs.catalinaBase ? "${globalDirs.catalinaBase}${fs}temp${fs}${appName}${fs}" : globalDirs.targetDir
67globalDirs.searchableIndexDirectory = "${globalDirs.workDirectory}SearchableIndex${fs}${appName}${fs}"
68globalDirs.tempInventoryItemPicturesDirectory = "${globalDirs.tempDirectory}InventoryItemPictures${fs}"
69
70/**
71 * Log4j configuration.
72 * Causing this file to reload (e.g. edit+save) may break the appLog destination
73 * and further logs will be written to files or directories like "[:]".
74 * For more info see http://logging.apache.org/log4j/1.2/manual.html
75 * For log levels see http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html
76 * Basic log levels are ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
77 */
78
79log4j = {
80    appenders {
81        // Use if we want to prevent creation of a stacktrace.log file.
82        'null' name:'stacktrace'
83
84        // Use this if we want to modify the default appender called 'stdout'.
85        console name:'stdout', layout:pattern(conversionPattern: '[%t] %-5p %c{2} %x - %m%n')
86
87        // Custom log file.
88        rollingFile name:"appLog",
89                        file:"${globalDirs.logDirectory}${appName}.log".toString(),
90                        maxFileSize:'300kB',
91                        maxBackupIndex:1,
92                        layout:pattern(conversionPattern: '%d{[EEE, dd-MMM-yyyy @ HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n')
93    }
94
95    // This is for the built-in stuff and from the default Grails-1.2.1 config.
96    error 'org.codehaus.groovy.grails.web.servlet',  //  controllers
97            'org.codehaus.groovy.grails.web.pages', //  GSP
98            'org.codehaus.groovy.grails.web.sitemesh', //  layouts
99            'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
100            'org.codehaus.groovy.grails.web.mapping', // URL mapping
101            'org.codehaus.groovy.grails.commons', // core / classloading
102            'org.codehaus.groovy.grails.plugins', // plugins
103            'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
104            'org.springframework',
105            'org.hibernate',
106            'net.sf.ehcache.hibernate'
107
108    warn   'org.mortbay.log' // Jetty
109
110    error 'grails.app' // Set the default log level for our app code.
111    info 'grails.app.bootstrap' // Set the log level per type and per type.class
112    error 'grails.app.service.AuthService'
113    error 'grails.app.service.NavigationService'
114    error 'grails.app.service.com.zeddware.grails.plugins.filterpane.FilterService'
115    info 'org.codehaus.groovy.grails.plugins.searchable'
116    //info 'org.compass'
117    error 'grails.app.task' // Quartz jobs.
118    info 'grails.app.task.InventoryIndexJob'
119
120    // Move anything that should behave differently into this section.
121    switch(environment) {
122        case 'development':
123            // Configure the root logger to output to stdout and appLog appenders.
124            root {
125                error 'stdout','appLog'
126                additivity = true
127            }
128            //debug "org.hibernate.SQL"
129            debug 'grails.app.service'
130            debug 'grails.app.controller'
131            break
132        case 'test':
133            // Configure the root logger to only output to appLog appender.
134            root {
135                error 'stdout','appLog'
136                additivity = true
137            }
138            debug 'grails.app.service'
139            debug 'grails.app.controller'
140            break
141        case 'production':
142            // Configure the root logger to only output to appLog appender.
143            root {
144                error 'appLog'
145                additivity = true
146            }
147            warn 'grails.app.service'
148            warn 'grails.app.controller'
149            debug 'grails.app.service.AssetCsvService'
150            debug 'grails.app.service.PersonCsvService'
151            debug 'grails.app.service.InventoryCsvService'
152            info 'grails.app.service.InventoryItemService'
153            debug 'grails.app.service.AssetTreeService' /// @todo: remove after testing.
154            break
155    }
156}
157
158/**
159 * Environment specific configuration.
160 */
161environments {
162
163    production {
164        grails.serverURL = "http://www.changeme.com" // Set serverURL stem for creating absolute links.
165    }
166
167    development {
168        grails.serverURL = "http://localhost:8080/${appName}" // Set serverURL stem for creating absolute links.
169    }
170
171    test {
172        grails.serverURL = "http://localhost:8080/${appName}" // Set serverURL stem for creating absolute links.
173    }
174
175} // end environments
176
177/**
178 * Navigation plugin menu.
179 * The top level titles are taken from i18n message bundles.
180 * Subitems i18n message bundles are not currently resolving with this plugin.
181 */
182navigation.nav = [
183    [order:10, controller:'appCore', title:'home', action:'start',
184        subItems: [
185            [order:10, controller:'appCore', title:'Start', action:'start', isVisible: { true }],
186            [order:20, controller:'appCore', title:'Manager', action:'manager', isVisible: {
187                    authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager,ROLE_InventoryManager,ROLE_AssetManager,ROLE_ProductionManager')
188                }
189            ],
190            [order:30, controller:'appCore', title:'Admin', action:'appAdmin', isVisible: { authenticateService.ifAllGranted('ROLE_AppAdmin') }],
191            [order:90, controller:'appCore', title:'Timeout', action:'changeSessionTimeout', isVisible: { params.action == 'changeSessionTimeout' }],
192            [order:91, controller:'appCore', title:'Password', action:'changePassword', isVisible: { params.action == 'changePassword' }],
193        ]
194    ],
195    [order:20, controller:'taskDetailed', title:'tasks', action:'search',
196        subItems: [
197            [order:10, controller:'taskDetailed', title:'Search', action:'search', isVisible: { true }],
198            [order:11, controller:'taskDetailed', title:'Calendar', action:'searchCalendar', isVisible: { true }],
199            [order:20, controller:'taskDetailed', title:'+Scheduled', action:'create', isVisible: { true }],
200            [order:30, controller:'taskDetailed', title:'+Unsheduled', action:'createUnscheduled', isVisible: { true }],
201            [order:40, controller:'taskDetailed', title:'+Callout', action:'createImmediateCallout', isVisible: { true }],
202            [order:90, controller:'taskDetailed', title:'Show', action:'show', id:'nav', isVisible: { params.action == 'show' }],
203            [order:91, controller:'taskDetailed', title:'Edit', action:'edit', id:'nav', isVisible: { params.action == 'edit' }]
204        ]
205    ],
206    [order:30, controller:'inventoryItemDetailed', title:'inventory', action:'search',
207        subItems: [
208            [order:10, controller:'inventoryItemDetailed', title:'Search', action:'search', isVisible: { true }],
209            [order:20, controller:'inventoryItemDetailed', title:'Create', action:'create', isVisible: { true }],
210            [order:90, controller:'inventoryItemDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
211            [order:91, controller:'inventoryItemDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
212        ]
213    ],
214    [order:40, controller:'assetDetailed', title:'assets', action:'search',
215        subItems: [
216            [order:10, controller:'assetDetailed', title:'Search', action:'search', isVisible: { true }],
217            [order:20, controller:'assetDetailed', title:'Create', action:'create', isVisible: { true }],
218            [order:90, controller:'assetDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
219            [order:91, controller:'assetDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }],
220            [order:99, controller:'assetSubItemDetailed', title:'Sub Items', action:'search', isVisible: { true }]
221        ]
222    ]
223]
224
225/**
226 * Navigation plugin alternate menu.
227 * The alternate menu top level titles are not displayed anywhere.
228 * Subitems i18n message bundles are not currently resolving with this plugin.
229 */
230navigation.navAlt = [
231    [order:10, controller:'person', title:'person', action:'list',
232        subItems: [
233            [order:10, controller:'person', title:'Person List', action:'list', isVisible: { true }],
234            [order:20, controller:'person', title:'Create', action:'create', isVisible: { true }],
235            [order:90, controller:'person', title:'Show', action:'show', isVisible: { params.action == 'show' }],
236            [order:91, controller:'person', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
237        ]
238    ],
239    [order:20, controller:'taskProcedureDetailed', title:'taskProcedure', action:'list',
240        subItems: [
241            [order:10, controller:'taskProcedureDetailed', title:'Task Procedure List', action:'list', isVisible: { true }],
242            [order:20, controller:'taskProcedureDetailed', title:'Create', action:'create', isVisible: { true }],
243            [order:90, controller:'taskProcedureDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
244            [order:91, controller:'taskProcedureDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
245        ]
246    ],
247    [order:30, controller:'assetSubItemDetailed', title:'assetSubItem', action:'search',
248        subItems: [
249            [order:10, controller:'assetSubItemDetailed', title:'Sub Item Search', action:'search', isVisible: { true }],
250            [order:20, controller:'assetSubItemDetailed', title:'Create', action:'create', isVisible: { true }],
251            [order:90, controller:'assetSubItemDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
252            [order:91, controller:'assetSubItemDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
253        ]
254    ],
255    [order:40, controller:'maintenancePolicyDetailed', title:'maintenancePolicy', action:'list',
256        subItems: [
257            [order:10, controller:'maintenancePolicyDetailed', title:'Maintenance Policy List', action:'list', isVisible: { true }],
258            [order:20, controller:'maintenancePolicyDetailed', title:'Create', action:'create', isVisible: { true }],
259            [order:90, controller:'maintenancePolicyDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
260            [order:91, controller:'maintenancePolicyDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
261        ]
262    ],
263    [order:50, controller:'supplierDetailed', title:'supplier', action:'list',
264        subItems: [
265            [order:10, controller:'supplierDetailed', title:'Supplier List', action:'list', isVisible: { true }],
266            [order:20, controller:'supplierDetailed', title:'Create', action:'create', isVisible: { true }],
267            [order:90, controller:'supplierDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
268            [order:91, controller:'supplierDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
269        ]
270    ],
271    [order:60, controller:'manufacturerDetailed', title:'manufacturer', action:'list',
272        subItems: [
273            [order:10, controller:'manufacturerDetailed', title:'Manufacturer List', action:'list', isVisible: { true }],
274            [order:20, controller:'manufacturerDetailed', title:'Create', action:'create', isVisible: { true }],
275            [order:90, controller:'manufacturerDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
276            [order:91, controller:'manufacturerDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
277        ]
278    ],
279    [order:70, controller:'inventoryStoreDetailed', title:'inventoryStore', action:'list',
280        subItems: [
281            [order:10, controller:'inventoryStoreDetailed', title:'Inventory Store List', action:'list', isVisible: { true }],
282            [order:20, controller:'inventoryStoreDetailed', title:'Create', action:'create', isVisible: { true }],
283            [order:90, controller:'inventoryStoreDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
284            [order:91, controller:'inventoryStoreDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
285        ]
286    ],
287    [order:80, controller:'inventoryLocationDetailed', title:'inventoryLocation', action:'list',
288        subItems: [
289            [order:10, controller:'inventoryLocationDetailed', title:'Inventory Location List', action:'list', isVisible: { true }],
290            [order:20, controller:'inventoryLocationDetailed', title:'Create', action:'create', isVisible: { true }],
291            [order:90, controller:'inventoryLocationDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
292            [order:91, controller:'inventoryLocationDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
293        ]
294    ],
295    [order:90, controller:'inventoryGroupDetailed', title:'inventoryGroup', action:'list',
296        subItems: [
297            [order:10, controller:'inventoryGroupDetailed', title:'Inventory Group List', action:'list', isVisible: { true }],
298            [order:20, controller:'inventoryGroupDetailed', title:'Create', action:'create', isVisible: { true }],
299            [order:90, controller:'inventoryGroupDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
300            [order:91, controller:'inventoryGroupDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
301        ]
302    ],
303    [order:100, controller:'manufacturerTypeDetailed', title:'manufacturerType', action:'list',
304        subItems: [
305            [order:10, controller:'manufacturerTypeDetailed', title:'Manufacturer Type List', action:'list', isVisible: { true }],
306            [order:20, controller:'manufacturerTypeDetailed', title:'Create', action:'create', isVisible: { true }],
307            [order:90, controller:'manufacturerTypeDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
308            [order:91, controller:'manufacturerTypeDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
309        ]
310    ],
311    [order:110, controller:'supplierTypeDetailed', title:'supplierType', action:'list',
312        subItems: [
313            [order:10, controller:'supplierTypeDetailed', title:'Supplier Type List', action:'list', isVisible: { true }],
314            [order:20, controller:'supplierTypeDetailed', title:'Create', action:'create', isVisible: { true }],
315            [order:90, controller:'supplierTypeDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
316            [order:91, controller:'supplierTypeDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
317        ]
318    ],
319    [order:120, controller:'siteDetailed', title:'site', action:'list',
320        subItems: [
321            [order:10, controller:'siteDetailed', title:'Site List', action:'list', isVisible: { true }],
322            [order:20, controller:'siteDetailed', title:'Create', action:'create', isVisible: { true }],
323            [order:90, controller:'siteDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
324            [order:91, controller:'siteDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
325        ]
326    ],
327    [order:130, controller:'sectionDetailed', title:'section', action:'list',
328        subItems: [
329            [order:10, controller:'sectionDetailed', title:'Section List', action:'list', isVisible: { true }],
330            [order:20, controller:'sectionDetailed', title:'Create', action:'create', isVisible: { true }],
331            [order:90, controller:'sectionDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
332            [order:91, controller:'sectionDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
333        ]
334    ],
335    [order:140, controller:'extendedAttributeTypeDetailed', title:'extendedAttributeType', action:'list',
336        subItems: [
337            [order:10, controller:'extendedAttributeTypeDetailed', title:'Attribute Type List', action:'list', isVisible: { true }],
338            [order:20, controller:'extendedAttributeTypeDetailed', title:'Create', action:'create', isVisible: { true }],
339            [order:90, controller:'extendedAttributeTypeDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
340            [order:91, controller:'extendedAttributeTypeDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
341        ]
342    ],
343    [order:150, controller:'departmentDetailed', title:'department', action:'list',
344        subItems: [
345            [order:10, controller:'departmentDetailed', title:'Department List', action:'list', isVisible: { true }],
346            [order:20, controller:'departmentDetailed', title:'Create', action:'create', isVisible: { true }],
347            [order:90, controller:'departmentDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
348            [order:91, controller:'departmentDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
349        ]
350    ],
351    [order:160, controller:'productionReferenceDetailed', title:'productionReference', action:'list',
352        subItems: [
353            [order:10, controller:'productionReferenceDetailed', title:'Production Reference List', action:'list', isVisible: { true }],
354            [order:20, controller:'productionReferenceDetailed', title:'Create', action:'create', isVisible: { true }],
355            [order:90, controller:'productionReferenceDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
356            [order:91, controller:'productionReferenceDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
357        ]
358    ],
359    [order:170, controller:'costCodeDetailed', title:'costCode', action:'list',
360        subItems: [
361            [order:10, controller:'costCodeDetailed', title:'Cost Code List', action:'list', isVisible: { true }],
362            [order:20, controller:'costCodeDetailed', title:'Create', action:'create', isVisible: { true }],
363            [order:90, controller:'costCodeDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
364            [order:91, controller:'costCodeDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
365        ]
366    ],
367    [order:180, controller:'personGroupDetailed', title:'personGroup', action:'list',
368        subItems: [
369            [order:10, controller:'personGroupDetailed', title:'Person Group List', action:'list', isVisible: { true }],
370            [order:20, controller:'personGroupDetailed', title:'Create', action:'create', isVisible: { true }],
371            [order:90, controller:'personGroupDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
372            [order:91, controller:'personGroupDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
373        ]
374    ],
375    [order:190, controller:'personGroupTypeDetailed', title:'personGroupType', action:'list',
376        subItems: [
377            [order:10, controller:'personGroupTypeDetailed', title:'Person Group Type List', action:'list', isVisible: { true }],
378            [order:20, controller:'personGroupTypeDetailed', title:'Create', action:'create', isVisible: { true }],
379            [order:90, controller:'personGroupTypeDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
380            [order:91, controller:'personGroupTypeDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
381        ]
382    ],
383    [order:200, controller:'taskGroupDetailed', title:'taskProcedure', action:'list',
384        subItems: [
385            [order:10, controller:'taskGroupDetailed', title:'Task Group List', action:'list', isVisible: { true }],
386            [order:20, controller:'taskGroupDetailed', title:'Create', action:'create', isVisible: { true }],
387            [order:90, controller:'taskGroupDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
388            [order:91, controller:'taskGroupDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
389        ]
390    ],
391    [order:210, controller:'unitOfMeasureDetailed', title:'unitOfMeasure', action:'list',
392        subItems: [
393            [order:10, controller:'unitOfMeasureDetailed', title:'Unit Of Measure List', action:'list', isVisible: { true }],
394            [order:20, controller:'unitOfMeasureDetailed', title:'Create', action:'create', isVisible: { true }],
395            [order:90, controller:'unitOfMeasureDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
396            [order:91, controller:'unitOfMeasureDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
397        ]
398    ],
399    [order:220, controller:'inventoryItemPurchaseDetailed', title:'inventoryItemPurchase', action:'search',
400        subItems: [
401            [order:10, controller:'inventoryItemPurchaseDetailed', title:'Purchase Search', action:'search', isVisible: { true }],
402            [order:20, controller:'inventoryItemPurchaseDetailed', title:'Order', action:'create', isVisible: { true }],
403            [order:90, controller:'inventoryItemPurchaseDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
404            [order:91, controller:'inventoryItemPurchaseDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
405        ]
406    ],
407    [order:230, controller:'purchasingGroupDetailed', title:'purchasingGroup', action:'list',
408        subItems: [
409            [order:10, controller:'purchasingGroupDetailed', title:'Purchasing Group List', action:'list', isVisible: { true }],
410            [order:20, controller:'purchasingGroupDetailed', title:'Create', action:'create', isVisible: { true }],
411            [order:90, controller:'purchasingGroupDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
412            [order:91, controller:'purchasingGroupDetailed', title:'Edit', action:'edit', isVisible: { params.action == 'edit' }]
413        ]
414    ]
415]
416
417/**
418 * Custom application global settings.
419 * @todo: externalise these settings to a config file (along with the database settings) or have them configurable via the web interface+database.
420 */
421taskRecurringScheduleJob.repeatInterval=10
422// It is recommended to limit the currencyList to the one that the site uses e.g: currencyList = ['AUD']
423currencyList = ['EUR', 'XCD', 'USD', 'XOF', 'NOK', 'AUD', 'XAF', 'NZD', 'MAD', 'DKK', 'GBP', 'CHF', 'XPF', 'ILS', 'ROL', 'TRL']
424
Note: See TracBrowser for help on using the repository browser.