source: trunk/grails-app/services/CreateDataService.groovy @ 750

Last change on this file since 750 was 750, checked in by gav, 13 years ago

Update demo data with 'Parent PM' tasks.

File size: 80.1 KB
Line 
1import org.codehaus.groovy.grails.commons.ConfigurationHolder
2
3/**
4* Provides a data service to create base and demo data.
5* Beware that most, if not all, base data is referenced by "Id" throughout the program.
6* This allows changing the text of the 'name' property to something of the same meaning.
7* But be sure to maintain the correct Id during creation, indicated by #1, #2 etc.
8*/
9class  CreateDataService {
10
11    boolean transactional = false
12
13    def authService
14    def taskService
15    def dateUtilService
16    def appConfigService
17    def searchableService
18    def inventoryItemService
19    def assignedGroupService
20    def assignedPersonService
21
22    def grailsApplication
23
24/*******************************************
25Start of Group methods.
26Generally use these methods to create data.
27*******************************************/
28
29    /**
30    * Always call this at startup to ensure that we have admin access
31    * and that the system pseudo person is available.
32    */
33    def ensureSystemAndAdminAccess() {
34        if(!Authority.findByAuthority("ROLE_AppAdmin") ) {
35            log.warn "ROLE_AppAdmin not found, calling createAdminAuthority()."
36            createAdminAuthority()
37        }
38        if(!Person.findByLoginName("system") ) {
39            log.warn "LoginName 'system' not found, calling createSystemPerson()."
40            createSystemPerson()
41        }
42        if(!Person.findByLoginName("admin") ) {
43            log.warn "LoginName 'admin' not found, calling createAdminPerson()."
44            createAdminPerson()
45        }
46    }
47
48    /**
49    * Create the base data required for the application to function.
50    */
51    def createBaseData() {
52
53        if(appConfigService.exists("baseDataCreated")) {
54            log.info "Base data previously created."
55            return false
56        }
57
58        log.info "Creating base data."
59
60        // Person and Utils
61        createBaseAuthorities()
62        createBasePersonGroupTypes()
63        createBasePersonGroups()
64        createBaseDefinitions()
65        createBaseUnitsOfMeasure()
66        createBasePeriods()
67        createBaseSupplierTypes()
68        createBaseAddressTypes()
69        createBaseContactTypes()
70        createBaseMaintenancePolicies()
71        createBaseInventoryItemPurchaseTypes()
72
73        // Assets
74        createBaseExtenededAttributeTypes()
75
76        // Inventory
77        createBaseInventoryTypes()
78        createBaseInventoryMovementTypes()
79
80        // Tasks
81        createBaseTaskGroups()
82        createBaseTaskStatus()
83        createBaseTaskPriorities()
84        createBaseTaskBudgetStatus()
85        createBaseTaskTypes()
86        createBaseTaskModificationTypes()
87        createBaseEntryTypes()
88
89        // Record that data has been created.
90        appConfigService.set("baseDataCreated")
91    }
92
93    /**
94    * Create demo data for some example sites.
95    */
96    def createDemoData() {
97
98        if(!appConfigService.exists("baseDataCreated")) {
99            log.error "Demo data cannot be created until base data has been created."
100            return false
101        }
102
103        if(appConfigService.exists("demoDataCreated")) {
104            log.error "Demo data has already been created, will NOT recreate."
105            return false
106        }
107
108        if(appConfigService.exists("demoDataCreationDisabled")) {
109            log.error "Demo data creation has been disabled, will NOT create."
110            return false
111        }
112
113        log.info "Creating demo data..."
114
115        // Person and Utils
116        createDemoSites()
117        createDemoDepartments()
118        createDemoSuppliers()
119        createDemoProductionReference()
120        createDemoPurchasingGroups()  /// @todo: Perhaps a 'createQuickStartData' method?
121        createDemoCostCodes()
122        createDemoPersons()
123
124        // Assets
125        createDemoLifePlan()
126        createDemoSections()
127        createDemoAssetTree()
128        createDemoAssetExtendedAttributes()
129        createDemoAssetSubItemExtendedAttributes()
130
131        // Inventory
132        createDemoInventoryStores()  /// @todo: Perhaps a 'createQuickStartData' method?
133        createDemoInventoryLocations()
134        createDemoInventoryGroups() /// @todo: Perhaps a 'createQuickStartData' method?
135        createDemoInventoryItems()
136
137        // Tasks
138        createDemoTasks()
139        createDemoEntries()
140        createDemoAssignedGroups()
141        createDemoAssignedPersons()
142        createDemoTaskProcedure()
143        createDemoMaintenanceActions()
144        createDemoTaskRecurringSchedules()
145
146        // Record that data has been created.
147        appConfigService.set("demoDataCreated")
148    }
149
150/******************
151Start of Person
152*******************/
153
154    def createAdminAuthority() {
155        def authInstance
156
157        // Authority #1
158        authInstance = new Authority(description:"Application Admin, not required for daily use! \
159                                                                                Grants full admin access to the application.",
160                                        authority:"ROLE_AppAdmin")
161        saveAndTest(authInstance)
162    }
163
164    def createBaseAuthorities() {
165
166        def authInstance
167
168        // Authority #2
169        authInstance = new Authority(description:"Business Manager, grants full management access.",
170                                                            authority:"ROLE_Manager")
171        saveAndTest(authInstance)
172
173        // Authority #3
174        authInstance = new Authority(description:"Application User, all application users need this base role \
175                                                                                    to allow login.",
176                                                            authority:"ROLE_AppUser")
177        saveAndTest(authInstance)
178
179        // Authority #4
180        authInstance = new Authority(description:"Task Manager",
181                                                            authority:"ROLE_TaskManager")
182        saveAndTest(authInstance)
183
184        // Authority #5
185        authInstance = new Authority(description:"Task User",
186                                                            authority:"ROLE_TaskUser")
187        saveAndTest(authInstance)
188
189        // Authority #6
190        authInstance = new Authority(description:"Inventory Manager",
191                                                            authority:"ROLE_InventoryManager")
192        saveAndTest(authInstance)
193
194        // Authority #7
195        authInstance = new Authority(description:"Inventory User",
196                                                            authority:"ROLE_InventoryUser")
197        saveAndTest(authInstance)
198
199        // Authority #8
200        authInstance = new Authority(description:"Asset Manager",
201                                                            authority:"ROLE_AssetManager")
202        saveAndTest(authInstance)
203
204        // Authority #9
205        authInstance = new Authority(description:"Asset User",
206                                                            authority:"ROLE_AssetUser")
207        saveAndTest(authInstance)
208
209        // Authority #10
210        authInstance = new Authority(description:"Production Manager",
211                                                            authority:"ROLE_ProductionManager")
212        saveAndTest(authInstance)
213
214        // Authority #11
215        authInstance = new Authority(description:"Production User",
216                                                            authority:"ROLE_ProductionUser")
217        saveAndTest(authInstance)
218    }
219
220    void createBasePersonGroupTypes() {
221
222        //PersonGroupType.
223        def personGroupTypeInstance
224        personGroupTypeInstance = new PersonGroupType(name:"Team")
225        saveAndTest(personGroupTypeInstance)
226        personGroupTypeInstance = new PersonGroupType(name:"Contractor")
227        saveAndTest(personGroupTypeInstance)
228        personGroupTypeInstance = new PersonGroupType(name:"Project Team")
229        saveAndTest(personGroupTypeInstance)
230    }
231
232    void createBasePersonGroups() {
233
234        //PersonGroup
235        def personGroupInstance
236        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(1),
237                                                                                name:"Electrical - General")
238        saveAndTest(personGroupInstance)
239        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(1),
240                                                                                name:"Mechanical - General")
241        saveAndTest(personGroupInstance)
242        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(1),
243                                                                                name:"Production")
244        saveAndTest(personGroupInstance)
245        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(2),
246                                                                                name:"AirCon Contractor")
247        saveAndTest(personGroupInstance)
248        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(3),
249                                                                                name:"gnuMims")
250        saveAndTest(personGroupInstance)
251    }
252
253    def createSystemPerson() {
254        //Person
255        def passClearText = "pass"
256        def passwordEncoded = authService.encodePassword(passClearText)
257        def personInstance
258
259        //Person #1
260        personInstance = new Person(loginName:"system",
261                                    firstName:"gnuMims",
262                                    lastName:"System",
263                                    description:'''This is a pseudo person that the application uses to insert data. DO NOT
264                                                        assign login authorities or change the details of this person.''',
265                                    pass:passClearText,
266                                    password:passwordEncoded)
267        saveAndTest(personInstance)
268    }
269
270    def createAdminPerson() {
271        //Person
272        def passClearText = "pass"
273        def passwordEncoded = authService.encodePassword(passClearText)
274        def personInstance
275
276        //Person #2
277        personInstance = new Person(loginName:"admin",
278                                    firstName:"Admin",
279                                    lastName:"Powers",
280                                    description:'''Every time the application starts it ensures that the 'admin' login name is available.
281                                                        DO update the password and other details but keep the login name as 'admin'. ''',
282                                    pass:passClearText,
283                                    password:passwordEncoded)
284        saveAndTest(personInstance)
285        personInstance.addToAuthorities(Authority.get(1))
286    }
287
288    def createBasePersons() {
289    }
290
291    def createDemoPersons() {
292        //Person
293        def passClearText = "pass"
294        def passwordEncoded = authService.encodePassword(passClearText)
295        def personInstance
296
297        //Person #1 is system.
298        //Person #2 is admin.
299
300        //Person #3
301        personInstance = new Person(loginName:"manager",
302                                    firstName:"Demo",
303                                    lastName:"Manager",
304                                    pass:passClearText,
305                                    password:passwordEncoded)
306        saveAndTest(personInstance)
307        personInstance.addToAuthorities(Authority.get(2)) // ROLE_Manager.
308        personInstance.addToAuthorities(Authority.get(3)) // ROLE_AppUser.
309        personInstance.addToPersonGroups(PersonGroup.get(1))
310        personInstance.addToPurchasingGroups(PurchasingGroup.get(1))
311        personInstance.addToPurchasingGroups(PurchasingGroup.get(2))
312
313        //Person #4
314        personInstance = new Person(loginName:"user",
315                                    firstName:"Demo",
316                                    lastName:"User",
317                                    pass:passClearText,
318                                    password:passwordEncoded)
319        saveAndTest(personInstance)
320        personInstance.addToAuthorities(Authority.get(3)) // ROLE_AppUser.
321        personInstance.addToAuthorities(Authority.get(5)) // ROLE_TaskManager.
322        personInstance.addToAuthorities(Authority.get(7)) // ROLE_InventoryUser.
323        personInstance.addToAuthorities(Authority.get(9)) // ROLE_AssetUser.
324        personInstance.addToPersonGroups(PersonGroup.get(1))
325
326        //Person #5
327        personInstance = new Person(loginName:"craig",
328                                    firstName:"Craig",
329                                    lastName:"SuperSparky",
330                                    pass:passClearText,
331                                    password:passwordEncoded)
332        saveAndTest(personInstance)
333        personInstance.addToAuthorities(Authority.get(3))
334        personInstance.addToAuthorities(Authority.get(5))
335        personInstance.addToAuthorities(Authority.get(7))
336        personInstance.addToAuthorities(Authority.get(9))
337        personInstance.addToPersonGroups(PersonGroup.get(1))
338
339        //Person #6
340        personInstance = new Person(loginName:"john",
341                                    firstName:"John",
342                                    lastName:"SuperFitter",
343                                    pass:passClearText,
344                                    password:passwordEncoded)
345        saveAndTest(personInstance)
346        personInstance.addToAuthorities(Authority.get(3))
347        personInstance.addToAuthorities(Authority.get(5))
348        personInstance.addToAuthorities(Authority.get(7))
349        personInstance.addToAuthorities(Authority.get(9))
350        personInstance.addToPersonGroups(PersonGroup.get(2))
351
352        //Person #7
353        personInstance = new Person(loginName:"production manager",
354                                    firstName:"Production",
355                                    lastName:"Manager",
356                                    pass:passClearText,
357                                    password:passwordEncoded)
358        saveAndTest(personInstance)
359        personInstance.addToAuthorities(Authority.get(3)) // ROLE_AppUser.
360        personInstance.addToAuthorities(Authority.get(10)) // ROLE_ProductionManager.
361        personInstance.addToPersonGroups(PersonGroup.get(3))
362
363        //Person #8
364        personInstance = new Person(loginName:"production",
365                                    firstName:"Production",
366                                    lastName:"User",
367                                    pass:passClearText,
368                                    password:passwordEncoded)
369        saveAndTest(personInstance)
370        personInstance.addToAuthorities(Authority.get(3)) // ROLE_AppUser.
371        personInstance.addToAuthorities(Authority.get(11)) // ROLE_ProductionUser.
372        personInstance.addToPersonGroups(PersonGroup.get(3))
373
374        //Person #9
375        personInstance = new Person(loginName:"testmanager",
376                                    firstName:"Test",
377                                    lastName:"Manager",
378                                    pass:passClearText,
379                                    password:passwordEncoded)
380        saveAndTest(personInstance)
381        personInstance.addToAuthorities(Authority.get(3)) // ROLE_AppUser.
382        personInstance.addToAuthorities(Authority.get(4)) // ROLE_TaskManager.
383        personInstance.addToAuthorities(Authority.get(6)) // ROLE_InventoryManager.
384        personInstance.addToAuthorities(Authority.get(8)) // ROLE_AssetManager.
385        personInstance.addToPersonGroups(PersonGroup.get(3))
386    }
387
388/***********************
389START OF UTILITIES
390***********************/
391
392    //These can redefined by the site at deployment time.
393    /// @todo: build an admin view so that only the value (definition) can be changed.
394    def createBaseDefinitions() {
395        appConfigService.set("Department Definition", "A department as recongised by accounting.")
396        appConfigService.set("Site Definition", "The plant, work or production site.")
397        appConfigService.set("Section Definition", "A logical grouping of assets, which may be an area, system or process \
398                                            as determined by design.")
399        appConfigService.set("Asset Definition",
400                                            "The complete asset as it is known on the site. \
401                                            Often purchased as a whole with the primary purpose of returning value by performing a function. \
402                                            An asset is made up of 1 or more sub assets and performs a complete function as specified by the designer.")
403        appConfigService.set("Asset Sub Item 1 Name",
404                                            "Sub Asset")
405        appConfigService.set("Asset Sub Item 1 Definition",
406                                            "A machine that performs part of a complete asset's function and often has a model number.")
407        appConfigService.set("Asset Sub Item 2 Name",
408                                            "Functional Assembly")
409        appConfigService.set("Asset Sub Item 2 Definition",
410                                            "Functional Assemblies are taken from the designer's functional list for the sub asset and are made up of sub \
411                                            assemblies that together perform that function.")
412        appConfigService.set("Asset Sub Item 3 Name",
413                                            "Sub Assembly Group")
414        appConfigService.set("Asset Sub Item 3 Definition",
415                                            "Group or type of part.")
416        appConfigService.set("Asset Sub Item 4 Name",
417                                            "Component Item")
418        appConfigService.set("Asset Sub Item 4 Definition",
419                                            "The smallest part that would be analysed for failure.")
420    }
421
422    def createDemoSites() {
423        //Site
424        def siteInstance
425
426        siteInstance = new Site(name: "CSM",
427                                                    description: "Creek Side Mill")
428        saveAndTest(siteInstance)
429
430        siteInstance = new Site(name: "Jasper Street Depot",
431                                                    description: "Storage depot on Jasper Street.")
432        saveAndTest(siteInstance)
433
434        siteInstance = new Site(name: "River Press",
435                                                    description: "Printing press site")
436        saveAndTest(siteInstance)
437    }
438
439    def createDemoDepartments() {
440
441        //Department
442        def departmentInstance
443
444        //Department #1
445        departmentInstance = new Department(name: "Print Centre",
446                                                                                description: "Printing Department",
447                                                                                site: Site.get(1))
448        saveAndTest(departmentInstance)
449
450        //Department #2
451        departmentInstance = new Department(name: "Pulp Mill",
452                                                                                description: "Business Department",
453                                                                                site: Site.get(2))
454        saveAndTest(departmentInstance)
455    }
456
457    def createBaseUnitsOfMeasure() {
458
459        //UnitOfMeasure
460        def unitOfMeasureInstance
461
462        //UnitOfMeasure #1
463        unitOfMeasureInstance = new UnitOfMeasure(name: "each")
464        saveAndTest(unitOfMeasureInstance)
465
466        //UnitOfMeasure #2
467        unitOfMeasureInstance = new UnitOfMeasure(name: "meter(s)")
468        saveAndTest(unitOfMeasureInstance)
469
470        //UnitOfMeasure #3
471        unitOfMeasureInstance = new UnitOfMeasure(name: "box(es)")
472        saveAndTest(unitOfMeasureInstance)
473
474        //UnitOfMeasure #4
475        unitOfMeasureInstance = new UnitOfMeasure(name: "litre(s)")
476        saveAndTest(unitOfMeasureInstance)
477
478        //UnitOfMeasure #5
479        unitOfMeasureInstance = new UnitOfMeasure(name: "kilogram(s)")
480        saveAndTest(unitOfMeasureInstance)
481
482        //UnitOfMeasure #6
483        unitOfMeasureInstance = new UnitOfMeasure(name: "gram(s)")
484        saveAndTest(unitOfMeasureInstance)
485    }
486
487    def createBasePeriods() {
488
489        //Period
490        def periodInstance
491
492        //Period #1
493        periodInstance = new Period(period: "Day(s)")
494        saveAndTest(periodInstance)
495
496        //Period #2
497        periodInstance = new Period(period: "Week(s)")
498        saveAndTest(periodInstance)
499
500        //Period #3
501        periodInstance = new Period(period: "Month(s)")
502        saveAndTest(periodInstance)
503
504        //Period #4
505        periodInstance = new Period(period: "Year(s)")
506        saveAndTest(periodInstance)
507    }
508
509    def createBaseSupplierTypes() {
510
511        // SupplierType
512        def supplierTypeInstance
513
514        // SupplierType #1
515        supplierTypeInstance = new SupplierType(name: "Unknown",
516                                                                    description: "Unknown supplier type")
517        saveAndTest(supplierTypeInstance)
518
519        // SupplierType #2
520        supplierTypeInstance = new SupplierType(name: "OEM",
521                                                                    description: "Original equipment supplier")
522        saveAndTest(supplierTypeInstance)
523
524        // SupplierType #3
525        supplierTypeInstance = new SupplierType(name: "Local",
526                                                                    description: "Local supplier")
527        saveAndTest(supplierTypeInstance)
528    }
529
530    def createBaseAddressTypes() {
531
532        // AddressType
533        def addressTypeInstance
534
535        // AddressType #1
536        addressTypeInstance = new AddressType(name: "Postal",
537                                                                                description: "A postal address.")
538        saveAndTest(addressTypeInstance)
539
540        // AddressType #2
541        addressTypeInstance = new AddressType(name: "Physical",
542                                                                                description: "A physical address.")
543        saveAndTest(addressTypeInstance)
544
545        // AddressType #3
546        addressTypeInstance = new AddressType(name: "Postal & Physical",
547                                                                                description: "An address that is both the postal and physical address.")
548        saveAndTest(addressTypeInstance)
549
550        // AddressType #4
551        addressTypeInstance = new AddressType(name: "Invoice",
552                                                                                description: "An address to send invoices to.")
553        saveAndTest(addressTypeInstance)
554
555        // AddressType #5
556        addressTypeInstance = new AddressType(name: "Delivery",
557                                                                                description: "An address to send deliveries to.")
558        saveAndTest(addressTypeInstance)
559    }
560
561    def createBaseContactTypes() {
562
563        // ContactType
564        def contactTypeInstance
565
566        // ContactType #1
567        contactTypeInstance = new ContactType(name: "Email",
568                                                                                description: "Email address.")
569        saveAndTest(contactTypeInstance)
570
571        // ContactType #2
572        contactTypeInstance = new ContactType(name: "Alternate Email",
573                                                                                description: "Alternate email address.")
574        saveAndTest(contactTypeInstance)
575
576        // ContactType #3
577        contactTypeInstance = new ContactType(name: "Mobile",
578                                                                                description: "Modile phone number.")
579        saveAndTest(contactTypeInstance)
580
581        // ContactType #4
582        contactTypeInstance = new ContactType(name: "Work Phone",
583                                                                                description: "Work phone number.")
584        saveAndTest(contactTypeInstance)
585
586        // ContactType #5
587        contactTypeInstance = new ContactType(name: "Home Phone",
588                                                                                description: "Home phone number.")
589        saveAndTest(contactTypeInstance)
590
591        // ContactType #6
592        contactTypeInstance = new ContactType(name: "Work Fax",
593                                                                                description: "Work fax number.")
594        saveAndTest(contactTypeInstance)
595
596        // ContactType #7
597        contactTypeInstance = new ContactType(name: "Home Fax",
598                                                                                description: "Home fax number.")
599        saveAndTest(contactTypeInstance)
600
601        // ContactType #8
602        contactTypeInstance = new ContactType(name: "Web Site",
603                                                                                description: "Web site address.")
604        saveAndTest(contactTypeInstance)
605
606        // ContactType #9
607        contactTypeInstance = new ContactType(name: "Person",
608                                                                                description: "Contact person.")
609        saveAndTest(contactTypeInstance)
610    }
611
612    def createBaseInventoryItemPurchaseTypes() {
613
614        // InventoryItemPurchaseType
615        def inventoryItemPurchaseTypeInstance
616
617        // InventoryItemPurchaseType #1
618        inventoryItemPurchaseTypeInstance = new InventoryItemPurchaseType(name: "Order Placed",
619                                                                                description: "Order has been placed.")
620        saveAndTest(inventoryItemPurchaseTypeInstance)
621
622        // InventoryItemPurchaseType #2
623        inventoryItemPurchaseTypeInstance = new InventoryItemPurchaseType(name: "Received B/order To Come",
624                                                                                description: "Order has been partially received.")
625        saveAndTest(inventoryItemPurchaseTypeInstance)
626
627        // InventoryItemPurchaseType #3
628        inventoryItemPurchaseTypeInstance = new InventoryItemPurchaseType(name: "Received Complete",
629                                                                                description: "Order has been partially received.")
630        saveAndTest(inventoryItemPurchaseTypeInstance)
631
632        // InventoryItemPurchaseType #4
633        inventoryItemPurchaseTypeInstance = new InventoryItemPurchaseType(name: "Invoice Approved",
634                                                                                description: "Invoice approved for payment.")
635        saveAndTest(inventoryItemPurchaseTypeInstance)
636    }
637
638    def createDemoSuppliers() {
639
640        // Supplier
641        def supplierInstance
642
643        // Supplier #1
644        supplierInstance = new Supplier(name: "OEM Distributors",
645                                                                        supplierType: SupplierType.get(2))
646        saveAndTest(supplierInstance)
647
648        // Supplier #2
649        supplierInstance = new Supplier(name: "Mex Holdings",
650                                                                        supplierType: SupplierType.get(3))
651        saveAndTest(supplierInstance)
652    }
653
654    def createDemoProductionReference() {
655
656        // ProductionReference
657        def productionReferenceInstance
658
659        // ProductionReference #1
660        productionReferenceInstance = new ProductionReference(name: "Monday Production")
661        saveAndTest(productionReferenceInstance)
662
663        // ProductionReference #2
664        productionReferenceInstance = new ProductionReference(name: "Tuesday Production")
665        saveAndTest(productionReferenceInstance)
666    }
667
668    void createDemoPurchasingGroups() {
669
670        // PurchasingGroup
671        def purchasingGroupInstance
672
673        purchasingGroupInstance = new PurchasingGroup(name:"R&M")
674        saveAndTest(purchasingGroupInstance)
675
676        purchasingGroupInstance = new PurchasingGroup(name:"Raw Materials")
677        saveAndTest(purchasingGroupInstance)
678
679        purchasingGroupInstance = new PurchasingGroup(name:"Safety")
680        saveAndTest(purchasingGroupInstance)
681    }
682
683    def createDemoCostCodes() {
684
685        // CostCode
686        def costCodeInstance
687
688        // CostCode #1
689        costCodeInstance = new CostCode(name: "Reelstand.172",
690                                                                    purchasingGroup: PurchasingGroup.get(1))
691        saveAndTest(costCodeInstance)
692
693        // CostCode #2
694        costCodeInstance = new CostCode(name: "Reelstand.CAPEX",
695                                                                    purchasingGroup: PurchasingGroup.get(1))
696        saveAndTest(costCodeInstance)
697
698        // CostCode #2
699        costCodeInstance = new CostCode(name: "PrintUnit.123",
700                                                                    purchasingGroup: PurchasingGroup.get(3))
701        saveAndTest(costCodeInstance)
702    }
703
704/*********************
705START OF TASK
706*********************/
707
708    def createBaseTaskGroups() {
709        //TaskGroup
710        def taskGroupInstance
711
712        //TaskGroup #1
713        taskGroupInstance = new TaskGroup(name:"Engineering Activites",
714                                                                            description:"Engineering daily activities")
715        saveAndTest(taskGroupInstance)
716
717        //TaskGroup #2
718        taskGroupInstance = new TaskGroup(name:"Production Activites",
719                                                                            description:"Production daily activities")
720        saveAndTest(taskGroupInstance)
721
722        //TaskGroup #3
723        taskGroupInstance = new TaskGroup(name:"New Projects",
724                                                                            description:"New site projects")
725        saveAndTest(taskGroupInstance)
726
727        //TaskGroup #4
728        taskGroupInstance = new TaskGroup(name:"Electrical Dayshift",
729                                                                            description:"Group for dayshift electrical tasks")
730        saveAndTest(taskGroupInstance)
731
732        //TaskGroup #5
733        taskGroupInstance = new TaskGroup(name:"Electrical Nightshift",
734                                                                            description:"Group for dayshift mechanical tasks")
735        saveAndTest(taskGroupInstance)
736
737        //TaskGroup #6
738        taskGroupInstance = new TaskGroup(name:"Mechanical Dayshift",
739                                                                            description:"Group for nightshift electrical tasks")
740        saveAndTest(taskGroupInstance)
741
742        //TaskGroup #7
743        taskGroupInstance = new TaskGroup(name:"Mechanical Nightshift",
744                                                                            description:"Group for nightshift mechanical tasks")
745        saveAndTest(taskGroupInstance)
746    }
747
748    def createBaseTaskStatus() {
749
750        //TaskStatus
751        def taskStatusInstance
752
753        taskStatusInstance = new TaskStatus(name:"Not Started") // #1
754        saveAndTest(taskStatusInstance)
755
756        taskStatusInstance = new TaskStatus(name:"In Progress") // #2
757        saveAndTest(taskStatusInstance)
758
759        taskStatusInstance = new TaskStatus(name:"Complete") // #3
760        saveAndTest(taskStatusInstance)
761    }
762
763    def createBaseTaskPriorities() {
764
765        //TaskPriority
766        def taskPriorityInstance
767
768        taskPriorityInstance = new TaskPriority(name:"0 - Immediate") // #1
769        saveAndTest(taskPriorityInstance)
770
771        taskPriorityInstance = new TaskPriority(name:"1 - Very High") // #2
772        saveAndTest(taskPriorityInstance)
773
774        taskPriorityInstance = new TaskPriority(name:"2 - High") // #3
775        saveAndTest(taskPriorityInstance)
776
777        taskPriorityInstance = new TaskPriority(name:"3 - Normal") // #4
778        saveAndTest(taskPriorityInstance)
779
780        taskPriorityInstance = new TaskPriority(name:"4 - Low") // #5
781        saveAndTest(taskPriorityInstance)
782
783        taskPriorityInstance = new TaskPriority(name:"5 - Minor") //  #6
784        saveAndTest(taskPriorityInstance)
785    }
786
787    def createBaseTaskBudgetStatus() {
788
789        //TaskBudgetStatus
790        def taskBudgetStatusInstance
791
792        taskBudgetStatusInstance = new TaskBudgetStatus(name:"Unplanned") // #1
793        saveAndTest(taskBudgetStatusInstance)
794
795        taskBudgetStatusInstance = new TaskBudgetStatus(name:"Planned") // #2
796        saveAndTest(taskBudgetStatusInstance)
797    }
798
799    def createBaseTaskTypes() {
800
801        //TaskType
802        def taskTypeInstance
803
804        taskTypeInstance = new TaskType(name:"Immediate Callout") // #1
805        saveAndTest(taskTypeInstance)
806
807        taskTypeInstance = new TaskType(name:"Unscheduled Breakin") // #2
808        saveAndTest(taskTypeInstance)
809
810        taskTypeInstance = new TaskType(name:"Scheduled") // #3
811        saveAndTest(taskTypeInstance)
812
813        taskTypeInstance = new TaskType(name:"Preventative Maintenance") // #4
814        saveAndTest(taskTypeInstance)
815
816        taskTypeInstance = new TaskType(name:"Project") // #5
817        saveAndTest(taskTypeInstance)
818
819        taskTypeInstance = new TaskType(name:"Parent PM") // #6
820        saveAndTest(taskTypeInstance)
821    }
822
823    def createBaseTaskModificationTypes() {
824
825        //ModificationType
826        def taskModificationTypeInstance
827        taskModificationTypeInstance = new TaskModificationType(name:"Created").save()  // #1
828        taskModificationTypeInstance = new TaskModificationType(name:"Started").save()  // #2
829        taskModificationTypeInstance = new TaskModificationType(name:"Modified").save()  // #3
830        taskModificationTypeInstance = new TaskModificationType(name:"Completed").save()  // #4
831        taskModificationTypeInstance = new TaskModificationType(name:"Reopened").save()  // #5
832        taskModificationTypeInstance = new TaskModificationType(name:"Trashed").save()  // #6
833        taskModificationTypeInstance = new TaskModificationType(name:"Restored").save()  // #7
834        taskModificationTypeInstance = new TaskModificationType(name:"Approved").save()  // #8
835        taskModificationTypeInstance = new TaskModificationType(name:"Renege approval").save()  // #9
836        taskModificationTypeInstance = new TaskModificationType(name:"Modified (Assigned Groups)").save()  // #10
837        taskModificationTypeInstance = new TaskModificationType(name:"Modified (Assigned Persons)").save()  // #11
838        taskModificationTypeInstance = new TaskModificationType(name:"Modified (Flagged for attention)").save()  // #12
839        taskModificationTypeInstance = new TaskModificationType(name:"Modified (Attention flag cleared)").save()  // #13
840    }
841
842    def createDemoTasks() {
843
844        def taskResult
845        def p = [:]
846
847        //Task #1
848        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
849                taskPriority:TaskPriority.get(2),
850                taskType:TaskType.get(1),
851                leadPerson:Person.get(2),
852                primaryAsset:Asset.get(4),
853                description:"Level sensor not working",
854                comment:"Has been noted as problematic, try recalibrating.",
855                targetStartDate: dateUtilService.today,
856                targetCompletionDate: dateUtilService.today]
857
858        taskResult = taskService.save(p)
859        taskService.approve(taskResult.taskInstance)
860
861        //Task #2
862        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
863                taskPriority:TaskPriority.get(2),
864                taskType:TaskType.get(3),
865                leadPerson:Person.get(5),
866                primaryAsset:Asset.get(4),
867                description:"Some follow-up work",
868                comment:"Some help required",
869                targetStartDate: dateUtilService.tomorrow,
870                targetCompletionDate: dateUtilService.tomorrow,
871                parentTask: Task.list()[0]]
872
873        taskResult = taskService.save(p)
874        taskService.approve(taskResult.taskInstance)
875
876        //Task #3
877        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
878                taskPriority:TaskPriority.get(2),
879                taskType:TaskType.get(3),
880                leadPerson:Person.get(5),
881                primaryAsset:Asset.get(4),
882                description:"A Sub Task can be created from the 'Sub Task' tab.",
883                comment:"Some help required",
884                targetStartDate: dateUtilService.yesterday,
885                targetCompletionDate: dateUtilService.yesterday,
886                parentTask: Task.list()[0]]
887
888        taskResult = taskService.save(p)
889        taskService.approve(taskResult.taskInstance)
890
891        //Task #4
892        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
893                taskPriority:TaskPriority.get(2),
894                taskType:TaskType.get(2),
895                leadPerson:Person.get(4),
896                primaryAsset:Asset.get(4),
897                description:"Please replace sensor at next available opportunity.",
898                comment:"Nothing else has worked. So we now require the part to be replaced.",
899                targetStartDate: dateUtilService.today,
900                targetCompletionDate: dateUtilService.oneWeekFromNow,
901                parentTask: Task.list()[0]]
902
903        taskResult = taskService.save(p)
904        taskService.approve(taskResult.taskInstance)
905
906        //Task #5
907        p = [taskGroup:TaskGroup.findByName("Production Activites"),
908                taskPriority:TaskPriority.get(2),
909                taskType:TaskType.get(3),
910                leadPerson:Person.get(6),
911                primaryAsset:Asset.get(1),
912                description:"Production Task",
913                comment:"Production task for specific production run or shift",
914                targetStartDate: dateUtilService.today - 6,
915                targetCompletionDate: dateUtilService.today - 6]
916
917        taskResult = taskService.save(p)
918        taskService.approve(taskResult.taskInstance)
919
920        //Task #6
921        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
922                taskPriority:TaskPriority.get(4),
923                taskType:TaskType.get(6),
924                leadPerson:Person.get(4),
925                primaryAsset:Asset.get(2),
926                description:"This is a recurring preventative maintenance task.",
927                comment:"If there is a parent task specified then this is a generated sub task, if there is a recurring schedule specified then this is a parent task.",
928                targetStartDate: dateUtilService.today,
929                targetCompletionDate: dateUtilService.today + 30]
930
931        taskResult = taskService.save(p)
932        taskService.approve(taskResult.taskInstance)
933
934        //Task #7
935        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
936                taskPriority:TaskPriority.get(4),
937                taskType:TaskType.get(6),
938                leadPerson:Person.get(4),
939                primaryAsset:Asset.get(2),
940                description:"100hr Service.",
941                comment:"Based on OEM service.",
942                targetStartDate: dateUtilService.today,
943                targetCompletionDate: dateUtilService.today + 1]
944
945        taskResult = taskService.save(p)
946        taskService.approve(taskResult.taskInstance)
947    }
948
949    def createBaseEntryTypes() {
950
951        //EntryType
952        def entryTypeInstance
953
954        entryTypeInstance = new EntryType(name:"Fault") // #1
955        saveAndTest(entryTypeInstance)
956
957        entryTypeInstance = new EntryType(name:"Cause") // #2
958        saveAndTest(entryTypeInstance)
959
960        entryTypeInstance = new EntryType(name:"Work Done") // #3
961        saveAndTest(entryTypeInstance)
962
963        entryTypeInstance = new EntryType(name:"Production Note") // #4
964        saveAndTest(entryTypeInstance)
965
966        entryTypeInstance = new EntryType(name:"Work Request") // #5
967        saveAndTest(entryTypeInstance)
968    }
969
970    def createDemoEntries() {
971
972        def entryResult
973        def p = [:]
974
975        //Entry #1
976        p = [task: Task.list()[0],
977                entryType: EntryType.get(1),
978                comment: "This level sensor is causing us trouble.",
979                durationMinute: 20]
980
981        entryResult = taskService.saveEntry(p)
982
983        //Entry #2
984        p = [task: Task.list()[0],
985                entryType: EntryType.get(3),
986                comment: "Cleaned sensor, see how it goes.",
987                durationMinute: 30]
988
989        entryResult = taskService.saveEntry(p)
990
991        //Entry #3
992        p = [task: Task.list()[0],
993                entryType: EntryType.get(3),
994                comment: "Checked up on it later and sensor is dropping out intermittently, created sub task to replace sensor.",
995                durationMinute: 20]
996
997        entryResult = taskService.saveEntry(p)
998
999        //Entry #4
1000        p = [task: Task.list()[4],
1001                entryType: EntryType.get(3),
1002                comment: "Work done as per procedure.",
1003                durationMinute: 55]
1004
1005        entryResult = taskService.saveEntry(p)
1006    }
1007
1008    def createDemoAssignedGroups() {
1009
1010        def result
1011        def p = [:]
1012
1013        //AssignedGroup #1
1014        p = [personGroup: PersonGroup.get(1),
1015                task: Task.list()[0],
1016                estimatedHour: 2,
1017                estimatedMinute: 30]
1018        result = assignedGroupService.save(p)
1019
1020        //AssignedGroup #2
1021        p = [personGroup: PersonGroup.get(2),
1022                task: Task.list()[0],
1023                estimatedHour: 1,
1024                estimatedMinute: 0]
1025        result = assignedGroupService.save(p)
1026    }
1027
1028    def createDemoAssignedPersons() {
1029
1030        def result
1031        def p = [:]
1032
1033        //AssignedPerson #1
1034        p = [person: Person.get(3), // Demo Manager.
1035                task: Task.list()[5],
1036                estimatedHour: 1,
1037                estimatedMinute: 20]
1038        result = assignedPersonService.save(p)
1039
1040        //AssignedPerson #2
1041        p = [person: Person.get(4), // Demo User.
1042                task: Task.list()[5],
1043                estimatedHour: 1,
1044                estimatedMinute: 20]
1045        result = assignedPersonService.save(p)
1046
1047        //AssignedPerson #3
1048        p = [person: Person.get(3), // Demo Manager.
1049                task: Task.list()[6],
1050                estimatedHour: 3,
1051                estimatedMinute: 30]
1052        result = assignedPersonService.save(p)
1053
1054        //AssignedPerson #4
1055        p = [person: Person.get(4), // Demo User.
1056                task: Task.list()[6],
1057                estimatedHour: 3,
1058                estimatedMinute: 30]
1059        result = assignedPersonService.save(p)
1060    }
1061
1062    def createBaseMaintenancePolicies() {
1063
1064        //MaintenancePolicy
1065        def maintenancePolicyInstance
1066
1067        //MaintenancePolicy #1
1068        maintenancePolicyInstance = new MaintenancePolicy(name: "Fixed Time")
1069        saveAndTest(maintenancePolicyInstance)
1070
1071        //MaintenancePolicy #2
1072        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Online")
1073        saveAndTest(maintenancePolicyInstance)
1074
1075        //MaintenancePolicy #3
1076        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Offline")
1077        saveAndTest(maintenancePolicyInstance)
1078
1079        //MaintenancePolicy #4
1080        maintenancePolicyInstance = new MaintenancePolicy(name: "Design Out")
1081        saveAndTest(maintenancePolicyInstance)
1082
1083        //MaintenancePolicy #5
1084        maintenancePolicyInstance = new MaintenancePolicy(name: "Operate To Failure")
1085        saveAndTest(maintenancePolicyInstance)
1086
1087        //MaintenancePolicy #6
1088        maintenancePolicyInstance = new MaintenancePolicy(name: "Regulatory Requirement")
1089        saveAndTest(maintenancePolicyInstance)
1090
1091        //MaintenancePolicy #7
1092        maintenancePolicyInstance = new MaintenancePolicy(name: "Hidden Function Test")
1093        saveAndTest(maintenancePolicyInstance)
1094    }
1095
1096    def createDemoTaskProcedure() {
1097
1098        //TaskProcedure
1099        def taskProcedureInstance
1100
1101        taskProcedureInstance = new TaskProcedure(name: "Daily check")
1102        saveAndTest(taskProcedureInstance)
1103        taskProcedureInstance.addToTasks(Task.list()[0])
1104
1105        taskProcedureInstance = new TaskProcedure(name: "100hr Service")
1106        saveAndTest(taskProcedureInstance)
1107        taskProcedureInstance.addToTasks(Task.list()[6])
1108    }
1109
1110    def createDemoMaintenanceActions() {
1111
1112        //MaintenanceAction
1113        def maintenanceActionInstance
1114
1115        //MaintenanceAction #1
1116        maintenanceActionInstance = new MaintenanceAction(description: "Check all E-stops, activate E-stops S1-S12 and ensure machine cannot run",
1117                                                                                                        procedureStepNumber: 10,
1118                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
1119                                                                                                        taskProcedure: TaskProcedure.get(1))
1120        saveAndTest(maintenanceActionInstance)
1121
1122        //MaintenanceAction #2
1123        maintenanceActionInstance = new MaintenanceAction(description: "Do more pushups",
1124                                                                                                        procedureStepNumber: 20,
1125                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
1126                                                                                                        taskProcedure: TaskProcedure.get(1))
1127        saveAndTest(maintenanceActionInstance)
1128
1129        //MaintenanceAction #3
1130        maintenanceActionInstance = new MaintenanceAction(description: "Ok just one more pushup",
1131                                                                                                        procedureStepNumber: 30,
1132                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
1133                                                                                                        taskProcedure: TaskProcedure.get(1))
1134        saveAndTest(maintenanceActionInstance)
1135    }
1136
1137    def createDemoTaskRecurringSchedules() {
1138
1139        //TaskRecurringSchedule
1140        def taskRecurringScheduleInstance
1141
1142        //TaskRecurringSchedule #1
1143        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.list()[0],
1144                                                                                                    recurEvery: 1,
1145                                                                                                    recurPeriod: Period.get(2),
1146                                                                                                    nextTargetStartDate: dateUtilService.today,
1147                                                                                                    generateAhead: 1,
1148                                                                                                    taskDuration: 2,
1149                                                                                                    taskDurationPeriod: Period.get(1),
1150                                                                                                    enabled: false)
1151        saveAndTest(taskRecurringScheduleInstance)
1152
1153        //TaskRecurringSchedule #2
1154        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.list()[5],
1155                                                                                                    recurEvery: 1,
1156                                                                                                    recurPeriod: Period.get(1),
1157                                                                                                    nextTargetStartDate: dateUtilService.today,
1158                                                                                                    generateAhead: 1,
1159                                                                                                    taskDuration: 1,
1160                                                                                                    taskDurationPeriod: Period.get(1),
1161                                                                                                    enabled: true)
1162        saveAndTest(taskRecurringScheduleInstance)
1163
1164        //TaskRecurringSchedule #3
1165        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.list()[6],
1166                                                                                                    recurEvery: 1,
1167                                                                                                    recurPeriod: Period.get(1),
1168                                                                                                    nextTargetStartDate: dateUtilService.today,
1169                                                                                                    generateAhead: 1,
1170                                                                                                    taskDuration: 1,
1171                                                                                                    taskDurationPeriod: Period.get(1),
1172                                                                                                    enabled: true)
1173        saveAndTest(taskRecurringScheduleInstance)
1174    }
1175
1176/*************************
1177START OF INVENTORY
1178**************************/
1179
1180    def createDemoInventoryStores() {
1181
1182        //InventoryStore
1183        def inventoryStoreInstance
1184
1185        inventoryStoreInstance = new InventoryStore(site: Site.get(1), name: "Store #1")
1186        saveAndTest(inventoryStoreInstance)
1187
1188        inventoryStoreInstance = new InventoryStore(site: Site.get(2), name: "Store #2")
1189        saveAndTest(inventoryStoreInstance)
1190    }
1191
1192    def createDemoInventoryLocations() {
1193
1194        // InventoryLocation
1195        def inventoryLocation
1196
1197        inventoryLocation = new InventoryLocation(inventoryStore: InventoryStore.get(1), name: "A1-2")
1198        saveAndTest(inventoryLocation)
1199
1200        inventoryLocation = new InventoryLocation(inventoryStore: InventoryStore.get(2), name: "C55")
1201        saveAndTest(inventoryLocation)
1202    }
1203
1204    def createDemoInventoryGroups() {
1205
1206        //InventoryGroup
1207        def inventoryGroupInstance
1208
1209        //InventoryGroup #1
1210        inventoryGroupInstance = new InventoryGroup(name: "Misc")
1211        saveAndTest(inventoryGroupInstance)
1212
1213        //InventoryGroup #2
1214        inventoryGroupInstance = new InventoryGroup(name: "Electrical")
1215        saveAndTest(inventoryGroupInstance)
1216
1217        //InventoryGroup #3
1218        inventoryGroupInstance = new InventoryGroup(name: "Mechanical")
1219        saveAndTest(inventoryGroupInstance)
1220
1221        //InventoryGroup #4
1222        inventoryGroupInstance = new InventoryGroup(name: "Production")
1223        saveAndTest(inventoryGroupInstance)
1224    }
1225
1226    def createBaseInventoryTypes() {
1227
1228        //InventoryType
1229        def inventoryTypeInstance
1230
1231        //InventoryType #1
1232        inventoryTypeInstance = new InventoryType(name: "Consumable",
1233                                                                                description: "Standard inventory items that are received as new.")
1234        saveAndTest(inventoryTypeInstance)
1235
1236        //InventoryType #2
1237        inventoryTypeInstance = new InventoryType(name: "Rotable",
1238                                                                                description: "Repairable inventory items that are to be tracked as rotables.")
1239        saveAndTest(inventoryTypeInstance)
1240
1241        //InventoryType #3
1242        inventoryTypeInstance = new InventoryType(name: "Service",
1243                                                                                description: "Provided services from contractors etc.")
1244        saveAndTest(inventoryTypeInstance)
1245
1246        //InventoryType #4
1247        inventoryTypeInstance = new InventoryType(name: "Tool",
1248                                                                                description: "Tools that are held as inventory.")
1249        saveAndTest(inventoryTypeInstance)
1250    }
1251
1252    def createBaseInventoryMovementTypes() {
1253
1254        // InventoryMovementType
1255        def inventoryMovementTypeInstance
1256
1257        // InventoryMovementType #1
1258        inventoryMovementTypeInstance = new InventoryMovementType(name: "Used",
1259                                                                                                                        incrementsInventory: false)
1260        saveAndTest(inventoryMovementTypeInstance)
1261
1262        // InventoryMovementType #2
1263        inventoryMovementTypeInstance = new InventoryMovementType(name: "Repaired",
1264                                                                                                                        incrementsInventory: true)
1265        saveAndTest(inventoryMovementTypeInstance)
1266
1267        // InventoryMovementType #3
1268        inventoryMovementTypeInstance = new InventoryMovementType(name: "Purchase Received",
1269                                                                                                                        incrementsInventory: true)
1270        saveAndTest(inventoryMovementTypeInstance)
1271
1272        // InventoryMovementType #4
1273        inventoryMovementTypeInstance = new InventoryMovementType(name: "Correction Increase",
1274                                                                                                                        incrementsInventory: true)
1275        saveAndTest(inventoryMovementTypeInstance)
1276
1277        // InventoryMovementType #5
1278        inventoryMovementTypeInstance = new InventoryMovementType(name: "Correction Decrease",
1279                                                                                                                        incrementsInventory: false)
1280        saveAndTest(inventoryMovementTypeInstance)
1281    }
1282
1283    def createDemoInventoryItems() {
1284
1285        //InventoryItem
1286        def inventoryItemInstance
1287        def currency = Currency.getInstance('AUD')
1288
1289        def pictureResource = grailsApplication.mainContext.getResource('images/logo.png')
1290
1291        //InventoryItem #1
1292        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
1293                                                                                    inventoryType: InventoryType.get(1),
1294                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
1295                                                                                    inventoryLocation: InventoryLocation.get(1),
1296                                                                                    name: "Hemp rope",
1297                                                                                    description: "Natural hemp rope.",
1298                                                                                    estimatedUnitPriceAmount: 1.23,
1299                                                                                    estimatedUnitPriceCurrency: currency,
1300                                                                                    unitsInStock: 2,
1301                                                                                    reorderPoint: 0)
1302        saveAndTest(inventoryItemInstance)
1303        inventoryItemService.savePicture(inventoryItemInstance, pictureResource)
1304
1305        //InventoryItem #2
1306        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
1307                                                                                    inventoryType: InventoryType.get(1),
1308                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
1309                                                                                    inventoryLocation: InventoryLocation.get(1),
1310                                                                                    name: "Cotton Rope 12mm",
1311                                                                                    description: "A soft natural rope made from cotton.",
1312                                                                                    estimatedUnitPriceAmount: 2.50,
1313                                                                                    estimatedUnitPriceCurrency: currency,
1314                                                                                    unitsInStock: 2,
1315                                                                                    reorderPoint: 0)
1316        saveAndTest(inventoryItemInstance)
1317        inventoryItemService.savePicture(inventoryItemInstance, pictureResource)
1318
1319        //InventoryItem #3
1320        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
1321                                                                                    inventoryType: InventoryType.get(1),
1322                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
1323                                                                                    inventoryLocation: InventoryLocation.get(2),
1324                                                                                    name: "2305-2RS",
1325                                                                                    description: "Bearing 25x62x24mm double row self aligning ball",
1326                                                                                    estimatedUnitPriceAmount: 5,
1327                                                                                    estimatedUnitPriceCurrency: currency,
1328                                                                                    unitsInStock: 3,
1329                                                                                    reorderPoint: 2)
1330        saveAndTest(inventoryItemInstance)
1331        inventoryItemService.savePicture(inventoryItemInstance, pictureResource)
1332
1333        //InventoryItem #4
1334        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(2),
1335                                                                                    inventoryType: InventoryType.get(1),
1336                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
1337                                                                                    inventoryLocation: InventoryLocation.get(2),
1338                                                                                    name: "L1592-K10",
1339                                                                                    description: "10kW contactor",
1340                                                                                    estimatedUnitPriceAmount: 180,
1341                                                                                    estimatedUnitPriceCurrency: currency,
1342                                                                                    unitsInStock: 4,
1343                                                                                    reorderPoint: 0)
1344        saveAndTest(inventoryItemInstance)
1345        inventoryItemService.savePicture(inventoryItemInstance, pictureResource)
1346
1347        //InventoryItem #5
1348        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
1349                                                                                    inventoryType: InventoryType.get(1),
1350                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
1351                                                                                    inventoryLocation: InventoryLocation.get(2),
1352                                                                                    name: "6205-ZZ",
1353                                                                                    description: "Bearing 25x52x15mm single row ball shielded",
1354                                                                                    estimatedUnitPriceAmount: 3.45,
1355                                                                                    estimatedUnitPriceCurrency: currency,
1356                                                                                    unitsInStock: 5,
1357                                                                                    reorderPoint: 2)
1358        saveAndTest(inventoryItemInstance)
1359        inventoryItemService.savePicture(inventoryItemInstance, pictureResource)
1360    }
1361
1362/*******************
1363START OF ASSET
1364*******************/
1365
1366    def createDemoLifePlan() {
1367
1368        //LifePlan
1369        def lifeplanInstance
1370
1371        lifeplanInstance = new LifePlan(name: "Initial Plan")
1372        saveAndTest(lifeplanInstance)
1373    }
1374
1375    def createBaseExtenededAttributeTypes() {
1376
1377        //ExtendedAttributeType
1378        def extendedAttributeTypeInstance
1379
1380        //ExtendedAttributeType #1
1381        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Model Number")
1382        saveAndTest(extendedAttributeTypeInstance)
1383
1384        //ExtendedAttributeType #2
1385        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Purchase Cost")
1386        saveAndTest(extendedAttributeTypeInstance)
1387
1388        //ExtendedAttributeType #3
1389        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Serial Number")
1390        saveAndTest(extendedAttributeTypeInstance)
1391
1392        //ExtendedAttributeType #4
1393        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Manufactured Date")
1394        saveAndTest(extendedAttributeTypeInstance)
1395
1396        //ExtendedAttributeType #5
1397        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Location Description")
1398        saveAndTest(extendedAttributeTypeInstance)
1399
1400        //ExtendedAttributeType #6
1401        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Cost Centre")
1402        saveAndTest(extendedAttributeTypeInstance)
1403
1404        //ExtendedAttributeType #7
1405        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Cost Code")
1406        saveAndTest(extendedAttributeTypeInstance)
1407
1408        //ExtendedAttributeType #8
1409        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Manufacturer")
1410        saveAndTest(extendedAttributeTypeInstance)
1411
1412        //ExtendedAttributeType #9
1413        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "ecr")
1414        saveAndTest(extendedAttributeTypeInstance)
1415
1416        //ExtendedAttributeType #10
1417        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Risk Level")
1418        saveAndTest(extendedAttributeTypeInstance)
1419
1420        //ExtendedAttributeType #11
1421        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Safe Work Procedure")
1422        saveAndTest(extendedAttributeTypeInstance)
1423
1424        //ExtendedAttributeType #12
1425        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Regulatory Requirement")
1426        saveAndTest(extendedAttributeTypeInstance)
1427
1428        //ExtendedAttributeType #13
1429        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Maintenance % Completion")
1430        saveAndTest(extendedAttributeTypeInstance)
1431
1432        //ExtendedAttributeType #14
1433        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Registration Required")
1434        saveAndTest(extendedAttributeTypeInstance)
1435
1436        //ExtendedAttributeType #15
1437        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Registration Expiry Date")
1438        saveAndTest(extendedAttributeTypeInstance)
1439
1440        //ExtendedAttributeType #16
1441        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Asset Condition")
1442        saveAndTest(extendedAttributeTypeInstance)
1443
1444        //ExtendedAttributeType #17
1445        extendedAttributeTypeInstance = new ExtendedAttributeType(name: "Asset Number")
1446        saveAndTest(extendedAttributeTypeInstance)
1447    }
1448
1449    def createDemoSections() {
1450
1451        //Section
1452        def sectionInstance
1453
1454        //Section #1
1455        sectionInstance = new Section(name: "A-Press",
1456                                                                description: "Press Section",
1457                                                                site: Site.get(3),
1458                                                                department: Department.get(1))
1459        saveAndTest(sectionInstance)
1460
1461        //Section #2
1462        sectionInstance = new Section(name: "CSM-Delig",
1463                                                                description: "Pulp Delignification",
1464                                                                site: Site.get(1),
1465                                                                department: Department.get(2))
1466        saveAndTest(sectionInstance)
1467
1468        //Section #3
1469        sectionInstance = new Section(name: "CSM-Aux",
1470                                                                description: "Auxilliary Section",
1471                                                                site: Site.get(1),
1472                                                                department: Department.get(1))
1473        saveAndTest(sectionInstance)
1474    }
1475
1476    def createDemoAssetTree() {
1477
1478        //Asset
1479        def assetInstance
1480
1481        //Asset #1
1482        def assetInstance1 = new Asset(name: "Print Tower 22",
1483                                                                description: "Complete Printing Asset #22",
1484                                                                comment: "Includes everthing directly attached to the tower.",
1485                                                                section: Section.get(1))
1486        saveAndTest(assetInstance1)
1487//        assetInstance.addToMaintenanceActions(MaintenanceAction.get(1))
1488
1489        //Asset #2
1490        def assetInstance2 = new Asset(name: "Print Tower 21",
1491                                                                description: "Complete Printing Asset #21",
1492                                                                section: Section.get(1))
1493        saveAndTest(assetInstance2)
1494
1495        //Asset #3
1496        def assetInstance3 = new Asset(name: "Print Tower 23",
1497                                                                description: "Complete Printing Asset #23",
1498                                                                section: Section.get(1))
1499        saveAndTest(assetInstance3)
1500
1501        //Asset #4
1502        def assetInstance4 = new Asset(name: "C579",
1503                                                                description: "RO #1",
1504                                                                section: Section.get(2))
1505        saveAndTest(assetInstance4)
1506
1507        //AssetSubItem
1508        def assetSubItemInstance
1509
1510        //AssetSubItem #1 Level1
1511        def assetSubItemInstance1 = new AssetSubItem(name: "Print Tower",
1512                                                                                            description: "Common sub asset.")
1513        saveAndTest(assetSubItemInstance1)
1514
1515        // Add assetSubItemInstance1 to some assets.
1516        assetInstance1.addToAssetSubItems(assetSubItemInstance1)
1517        assetInstance2.addToAssetSubItems(assetSubItemInstance1)
1518        assetInstance3.addToAssetSubItems(assetSubItemInstance1)
1519
1520        //AssetSubItem #2 Level1
1521        def assetSubItemInstance2 = new AssetSubItem(name: "C579-44",
1522                                                                                            description: "Tanks and towers")
1523        saveAndTest(assetSubItemInstance2)
1524
1525        // Add assetSubItemInstance2 to some assets.
1526        assetInstance4.addToAssetSubItems(assetSubItemInstance2)
1527
1528        //AssetSubItem #3 Level1
1529        def assetSubItemInstance3 = new AssetSubItem(name: "C579-20",
1530                                                                                            description: "Control Loops")
1531        saveAndTest(assetSubItemInstance3)
1532
1533        // Add assetSubItemInstance3 to some assets.
1534        assetInstance4.addToAssetSubItems(assetSubItemInstance3)
1535
1536        //AssetSubItem #4 Level2
1537        assetSubItemInstance = new AssetSubItem(name: "C579-TK-0022",
1538                                                                                            description: "Blow Tank",
1539                                                                                            parentItem: AssetSubItem.get(2))
1540        saveAndTest(assetSubItemInstance)
1541
1542        //AssetSubItem #5 Level2
1543        assetSubItemInstance = new AssetSubItem(name: "C579-TK-0023",
1544                                                                                            description: "Reactor Tower",
1545                                                                                            parentItem: AssetSubItem.get(2))
1546        saveAndTest(assetSubItemInstance)
1547
1548        //AssetSubItem #6 Level2
1549        assetSubItemInstance = new AssetSubItem(name: "Print Unit",
1550                                                                                    description: "Print Unit - Common Level 2 sub item.",
1551                                                                                    parentItem: AssetSubItem.get(1))
1552        saveAndTest(assetSubItemInstance)
1553
1554        //AssetSubItem #7 Level2
1555        assetSubItemInstance = new AssetSubItem(name: "1925365",
1556                                                                                    description: "Agitator",
1557                                                                                    parentItem: AssetSubItem.get(4))
1558        saveAndTest(assetSubItemInstance)
1559
1560        //AssetSubItem #8 Level2
1561        assetSubItemInstance = new AssetSubItem(name: "1925366",
1562                                                                                    description: "Scraper",
1563                                                                                    parentItem: AssetSubItem.get(4))
1564        saveAndTest(assetSubItemInstance)
1565
1566        //AssetSubItem #9 Level3
1567        assetSubItemInstance = new AssetSubItem(name: "Motor",
1568                                                                                    description: "Motor - Level 3 sub item",
1569                                                                                    parentItem: AssetSubItem.get(6))
1570        saveAndTest(assetSubItemInstance)
1571
1572        //AssetSubItem #10 Level3
1573        assetSubItemInstance = new AssetSubItem(name: "Gearbox",
1574                                                                                    description: "Gearbox - Level 3 sub item, gearbox",
1575                                                                                    parentItem: AssetSubItem.get(6))
1576        saveAndTest(assetSubItemInstance)
1577
1578        //AssetSubItem #11 Level4
1579        assetSubItemInstance = new AssetSubItem(name: "DS Bearing",
1580                                                                                    description: "Drive Side Bearing",
1581                                                                                    parentItem: AssetSubItem.get(9))
1582        saveAndTest(assetSubItemInstance)
1583
1584        //AssetSubItem #12 Level4
1585        assetSubItemInstance = new AssetSubItem(name: "NDS Bearing",
1586                                                                                    description: "Non Drive Side Bearing",
1587                                                                                    parentItem: AssetSubItem.get(9))
1588        saveAndTest(assetSubItemInstance)
1589
1590        //AssetSubItem #13 Level2
1591        assetSubItemInstance = new AssetSubItem(name: "C579-F-0001",
1592                                                                                    description: "Weak Caustic Flow",
1593                                                                                    parentItem: AssetSubItem.get(3))
1594        saveAndTest(assetSubItemInstance)
1595
1596        //AssetSubItem #14 Level3
1597        assetSubItemInstance = new AssetSubItem(name: "C579-FT-0002",
1598                                                                                    description: "Weak Caustic Flow Transmitter",
1599                                                                                    parentItem: AssetSubItem.get(13))
1600        saveAndTest(assetSubItemInstance)
1601
1602        //AssetSubItem #15 Level3
1603        assetSubItemInstance = new AssetSubItem(name: "C579-PT-0003",
1604                                                                                    description: "Weak Caustic Pressure Transmitter",
1605                                                                                    parentItem: AssetSubItem.get(13))
1606        saveAndTest(assetSubItemInstance)
1607    } // createDemoAssetTree()
1608
1609    def createDemoAssetSubItemExtendedAttributes() {
1610
1611        //AssetSubItemExtendedAttribute
1612        def assetSubItemExtendedAttributeInstance
1613
1614        //AssetSubItemExtendedAttribute #1
1615        assetSubItemExtendedAttributeInstance = new AssetSubItemExtendedAttribute(value: "United Press",
1616                                                                                                                    assetSubItem: AssetSubItem.get(1),
1617                                                                                                                    extendedAttributeType: ExtendedAttributeType.get(8)) // Manufacturer.
1618        saveAndTest(assetSubItemExtendedAttributeInstance)
1619
1620        //AssetSubItemExtendedAttribute #2
1621        assetSubItemExtendedAttributeInstance = new AssetSubItemExtendedAttribute(value: "PU Mark 2",
1622                                                                                                                    assetSubItem: AssetSubItem.get(1),
1623                                                                                                                    extendedAttributeType: ExtendedAttributeType.get(1)) // Model Number.
1624        saveAndTest(assetSubItemExtendedAttributeInstance)
1625
1626        //AssetSubItemExtendedAttribute #3
1627        assetSubItemExtendedAttributeInstance = new AssetSubItemExtendedAttribute(value: "765895",
1628                                                                                                                    assetSubItem: AssetSubItem.get(1),
1629                                                                                                                    extendedAttributeType: ExtendedAttributeType.get(3)) // Serial Number.
1630        saveAndTest(assetSubItemExtendedAttributeInstance)
1631
1632        //AssetSubItemExtendedAttribute #4
1633        assetSubItemExtendedAttributeInstance = new AssetSubItemExtendedAttribute(value: "Jan-2003",
1634                                                                                                                    assetSubItem: AssetSubItem.get(1),
1635                                                                                                                    extendedAttributeType: ExtendedAttributeType.get(4)) // Manufactured Date.
1636        saveAndTest(assetSubItemExtendedAttributeInstance)
1637
1638    }
1639
1640    def createDemoAssetExtendedAttributes() {
1641
1642        //AssetExtendedAttribute
1643        def assetExtendedAttributeInstance
1644
1645        //AssetExtendedAttribute #1
1646        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "On the far side of Tank 5",
1647                                                                                                            asset: Asset.get(1),
1648                                                                                                            extendedAttributeType: ExtendedAttributeType.get(5)) // Location Description.
1649        saveAndTest(assetExtendedAttributeInstance)
1650
1651        //AssetExtendedAttribute #2
1652        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "3",
1653                                                                                                            asset: Asset.get(1),
1654                                                                                                            extendedAttributeType: ExtendedAttributeType.get(9)) // ecr.
1655        saveAndTest(assetExtendedAttributeInstance)
1656
1657        //AssetExtendedAttribute #3
1658        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "RP-001",
1659                                                                                                            asset: Asset.get(1),
1660                                                                                                            extendedAttributeType: ExtendedAttributeType.get(17)) // Asset Number.
1661        saveAndTest(assetExtendedAttributeInstance)
1662
1663        //AssetExtendedAttribute #4
1664        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "Good",
1665                                                                                                            asset: Asset.get(1),
1666                                                                                                            extendedAttributeType: ExtendedAttributeType.get(16)) // Asset Condition.
1667        saveAndTest(assetExtendedAttributeInstance)
1668
1669        //AssetExtendedAttribute #5
1670        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "TBA",
1671                                                                                                            asset: Asset.get(1),
1672                                                                                                            extendedAttributeType: ExtendedAttributeType.get(13)) // Maintenance % Completion.
1673        saveAndTest(assetExtendedAttributeInstance)
1674
1675        //AssetExtendedAttribute #6
1676        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "Y",
1677                                                                                                            asset: Asset.get(1),
1678                                                                                                            extendedAttributeType: ExtendedAttributeType.get(14)) // Registration Required.
1679        saveAndTest(assetExtendedAttributeInstance)
1680
1681        //AssetExtendedAttribute #7
1682        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "Feb-2009",
1683                                                                                                            asset: Asset.get(1),
1684                                                                                                            extendedAttributeType: ExtendedAttributeType.get(15)) // Registration Expiry Date.
1685        saveAndTest(assetExtendedAttributeInstance)
1686
1687        //AssetExtendedAttribute #8
1688        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "N",
1689                                                                                                            asset: Asset.get(1),
1690                                                                                                            extendedAttributeType: ExtendedAttributeType.get(12)) // Regulatory Requirement.
1691        saveAndTest(assetExtendedAttributeInstance)
1692
1693        //AssetExtendedAttribute #9
1694        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "Med",
1695                                                                                                            asset: Asset.get(1),
1696                                                                                                            extendedAttributeType: ExtendedAttributeType.get(10)) // Risk Level.
1697        saveAndTest(assetExtendedAttributeInstance)
1698
1699        //AssetExtendedAttribute #10
1700        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "WP-003",
1701                                                                                                            asset: Asset.get(1),
1702                                                                                                            extendedAttributeType: ExtendedAttributeType.get(11)) // Safe Work Procedure.
1703        saveAndTest(assetExtendedAttributeInstance)
1704    }
1705
1706    /**
1707    * SearchableIndex and mirroring is disabled at startup.
1708    * Use this to start indexing after creating bootstrap data.
1709    * @param indexInNewThread Whether to run the index in a new thread, defaults to true.
1710    */
1711    def startSearchableIndex(Boolean indexInNewThread = true) {
1712        log.info "Start mirroring searchable index."
1713        ConfigurationHolder.config.appSearchable.cascadeOnUpdate = true
1714        searchableService.startMirroring()
1715        if(indexInNewThread) {
1716            Thread.start {
1717                log.info "Rebuilding searchable index, bulkIndex (new thread)."
1718                searchableService.index()
1719                log.info "Rebuilding searchable index, complete."
1720            }
1721        }
1722        else {
1723            log.info "Rebuilding searchable index, bulkIndex."
1724            searchableService.index()
1725            log.info "Rebuilding searchable index, complete."
1726        }
1727    }
1728
1729    /**
1730    * Searchable index and mirroring during bulk data creation may be slow.
1731    * Use this to stop indexing and restart with startSearchableIndex() after data creation.
1732    */
1733    def stopSearchableIndex() {
1734        log.info "Stop mirroring searchable index."
1735        ConfigurationHolder.config.appSearchable.cascadeOnUpdate = false
1736        searchableService.stopMirroring()
1737    }
1738
1739    /**
1740    * Call this function instead of .save()
1741    */
1742    private boolean saveAndTest(object) {
1743        if(!object.save()) {
1744//             DemoDataSuccessful = false
1745            log.error "'${object}' failed to save!"
1746            log.error object.errors
1747            return false
1748        }
1749        return true
1750    }
1751
1752} // end of class
Note: See TracBrowser for help on using the repository browser.