Ignore:
Timestamp:
Jul 1, 2010, 4:03:40 PM (12 years ago)
Author:
duh
Message:
  • development version of samples page

-- improved handeling of samples
-- added warning page after clicking 'previous' in samples page

  • fixed exceptions in deleting events
  • added debug button to events page to reset revents
  • changed events page to check for at least 1 sampling event instead of just 1 event (you need sampling events in order to have samples and groups later on)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy

    r617 r635  
    393393                                if (!flow.event) {
    394394                                        flow.event                      = new Event()
    395                                         flow.events                     = []
    396                                         flow.eventGroups        = []
    397                                         flow.eventGroups[0]     = new EventGroup(name: 'Group 1')       // 1 group by default
     395                                        flow.events                     = [:]
     396                                        flow.eventGroups        = [ new EventGroup(name: 'Group 1') ]
    398397                                        flow.eventTemplates     = [:]
    399398                                } else if (!flash.values) {
     
    404403                                success()
    405404                        }
     405                        on("clear") {
     406                                flow.remove('event')
     407                                success()
     408                        }.to "events"
    406409                        on("switchTemplate") {
    407410                                flash.values = params
     
    491494                                        flow.eventTemplates.each() { eventTemplate ->
    492495                                                eventTemplate.value.events = eventTemplate.value.events.minus(delete)
     496                                        }
     497
     498                                        // find eventTemplates without events
     499                                flow.eventTemplates.find { eventTemplate ->
     500                                                eventTemplate.value.events.size() < 1
     501                                        }.each() {
     502                                                // remove eventTemplate
     503                                                flow.eventTemplates.remove( it.value.name )
    493504                                        }
    494505                                }
     
    556567
    557568                                // handle study data
    558                                 if (flow.events.size() < 1) {
     569                                if (!flow.eventTemplates.find { eventTemplate -> eventTemplate.value.template.entity == SamplingEvent }) {
    559570                                        // append error map
    560                                         this.appendErrorMap(['events': 'You need at least to create one event for your study'], flash.errors)
     571                                        this.appendErrorMap(['events': 'You need to create at least one sampling event for your study'], flash.errors)
    561572                                        error()                                         
    562573                                } else if (this.handleEvents(flow, flash, params)) {
     
    571582
    572583                                // handle study data
    573                                 if (flow.events.size() < 1) {
     584                                if (!flow.eventTemplates.find { eventTemplate -> eventTemplate.value.template.entity == SamplingEvent }) {
    574585                                        // append error map
    575                                         this.appendErrorMap(['events': 'You need at least to create one event for your study'], flash.errors)
     586                                        this.appendErrorMap(['events': 'You need to create at least one sampling event for your study'], flash.errors)
    576587                                        error()
    577588                                } else if (this.handleEvents(flow, flash, params)) {
     
    596607                        on("next") {
    597608                                this.handleSubjectGrouping(flow, flash, params)
     609                                flash.check = true
    598610                                success()
    599611                        }.to "samples"
     
    602614                                success()
    603615                        }.to "waitForSave"
     616                }
     617
     618                // sample 'previous' page with warning
     619                samplePrevious {
     620                        render(view: "_samples_previous_warning")
     621                        onRender {
     622                                flow.page = 6
     623                        }
     624                        on("next").to "samples"
     625                        on("previous").to "groups"
    604626                }
    605627
     
    612634                                // iterate through eventGroups
    613635                                if (!flow.samples) {
     636                                        flow.samplesWithTemplate = 0
    614637                                        flow.samples = []
    615638                                        flow.sampleTemplates = [:]
     
    639662                                                }
    640663                                        }
     664                                } else if (flash.check) {
     665                                        println "CHECKING SAMPLE CONSISTENCY"
     666                                        // check the consistency of the samples
     667                                        flow.samples.each() { sampleData ->
     668                                                println sampleData
     669                                                println sampleData.event.template
     670                                        }
    641671                                }
    642672
     
    645675                        on("switchTemplate") {
    646676                                handleSamples(flow, flash, params)
     677
     678                                // ignore errors
     679                                flash.errors = [:]
     680                               
    647681                                succes()
    648682                        }.to "samples"
     
    660694                                handleSamples(flow, flash, params)
    661695
     696                                // ignore errors
     697                                flash.errors = [:]
     698
    662699                                success()
    663700                        }.to "samples"
     
    672709                                handleSamples(flow, flash, params)
    673710
    674                                 success()
    675                         }.to "groups"
     711                                // ignore errors
     712                                flash.errors = [:]
     713
     714                                success()
     715                        }.to "samplePrevious"
    676716                        on("next") {
    677                                 // handle samples
    678                                 if (handleSamples(flow, flash, params)) {
     717                                flash.values = params
     718                                flash.errors = [:]
     719
     720                                // do all samples have a template assigned?
     721                                if (flow.samplesWithTemplate < flow.samples.size()) {
     722                                        // handle samples
     723                                        this.handleSamples(flow, flash, params)
     724
     725                                        // ignore errors
     726                                        flash.errors = [:]
     727                                       
     728                                        // add error
     729                                        this.appendErrorMap(['samples': 'you need to select a template for each sample'], flash.errors)
     730
     731                                        error()
     732                                } else if (this.handleSamples(flow, flash, params)) {
    679733                                        success()
    680734                                } else {
     
    11351189                                // iterate through template fields
    11361190                                flow.events[ eventId ].giveFields().each() { eventField ->
    1137                                         flow.events[ eventId ].setFieldValue(eventField.name, params.get( 'event_' + eventId + '_' + eventField.escapedName() ) )
     1191                                        if ( params.containsKey( 'event_' + eventId + '_' + eventField.escapedName() ) ) {
     1192                                                flow.events[ eventId ].setFieldValue(eventField.name, params.get( 'event_' + eventId + '_' + eventField.escapedName() ) )
     1193                                        }
    11381194                                }
    11391195
     
    12141270         */
    12151271        def handleSamples(flow, flash, params) {
     1272                flash.errors = [:]
     1273                def errors = false             
    12161274                def id = 0
    1217                 // TODO: Jeroen: why do you do this if you change the templates based on the name anyway in this function?
    1218                 // It causes somehow also the template_<number> param to disappear, and that is a problem
    1219                 //flow.sampleTemplates = [:]
    1220                 println ".handling ${flow.samples.size()} samples:"
     1275
     1276                // iterate through samples
    12211277                flow.samples.each() { sampleData ->
    12221278                        def sample = sampleData.sample
    12231279                        def sampleTemplateName = params.get('template_'+id)
    1224                         println "..this sample '${sampleData.name}' has template '${sampleTemplateName}' according to params and '${sampleData.sample.template.toString()}' according to sample.template"
    1225                         // set template for this sample?
    1226                         if (sampleTemplateName && sampleTemplateName.size() > 0) {
    1227                                 // remember templatename
     1280                        def oldSampleTemplateName = sampleData.sample.template.toString()
     1281
     1282                        // has the sample template for this sample changed
     1283                        if (sampleTemplateName && sampleTemplateName.size() > 0 && oldSampleTemplateName != sampleTemplateName) {
     1284                                // yes, has the template changed?
     1285                                println ".changing template for sample ${id} to ${sampleTemplateName}"
     1286
     1287                                // decrease previous template count
     1288                                if (oldSampleTemplateName && flow.sampleTemplates[ oldSampleTemplateName ]) {
     1289                                        flow.sampleTemplates[ oldSampleTemplateName ].count--
     1290
     1291                                        if (flow.sampleTemplates[ oldSampleTemplateName ].count < 1) {
     1292                                                // no samples left, remove template altogether
     1293                                                flow.sampleTemplates.remove( oldSampleTemplateName )
     1294                                        }
     1295                                } else {
     1296                                        // increate main template counter?
     1297                                        flow.samplesWithTemplate++
     1298                                }
     1299
     1300                                // increase current template count
    12281301                                if (!flow.sampleTemplates[ sampleTemplateName ]) {
    1229                                         println "...adding again template '${sampleTemplateName}' to flow.sampleTemplates"
    12301302                                        flow.sampleTemplates[ sampleTemplateName ] = [
    12311303                                                name            : sampleTemplateName,
     
    12331305                                                count           : 1
    12341306                                        ]
    1235                                 }
    1236 
    1237                                 if (sample.template.toString() != sampleTemplateName ) {
    1238                                         println "...changing from sample.template' ${sample.template.toString()}' to '${sampleTemplateName}' with fields [${flow.sampleTemplates[ sampleTemplateName ].template.fields}]"
    1239                                         // change template
    1240                                         sampleData.sample.template = flow.sampleTemplates[ sampleTemplateName ].template
    1241 
    1242                                         // decrease previous template use count
    1243                                         if (flow.sampleTemplates[ sample.template.toString() ]) {
    1244                                                 flow.sampleTemplates[ sample.template.toString() ].count--
    1245                                         }
    1246 
    1247                                         // increase template use count
     1307                                } else {
     1308                                        // increase count
    12481309                                        flow.sampleTemplates[ sampleTemplateName ].count++
    12491310                                }
    1250                         }
     1311
     1312                                // change template
     1313                                sampleData.sample.template = flow.sampleTemplates[ sampleTemplateName ].template
     1314                        }
     1315
     1316                        // handle values
     1317                        sampleData.sample.giveFields().each() { sampleField ->
     1318                                if ( params.containsKey( 'sample_'+id+'_'+sampleField.escapedName() ) ) {
     1319                                        sampleData.sample.setFieldValue( sampleField.name, params.get( 'sample_'+id+'_'+sampleField.escapedName() ) )
     1320                                }
     1321                        }
     1322
     1323                        // validate sample
     1324                        if (!sampleData.sample.validate()) {
     1325                                errors = true
     1326                                this.appendErrors(sampleData.sample, flash.errors, 'sample_' + id + '_' )
     1327                        }
     1328
     1329                        // increase counter
    12511330                        id++
    12521331                }
     1332
     1333                return !errors
    12531334        }
    12541335
Note: See TracChangeset for help on using the changeset viewer.