Changeset 635


Ignore:
Timestamp:
Jul 1, 2010, 4:03:40 PM (10 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)
Location:
trunk
Files:
5 added
5 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
  • trunk/grails-app/views/wizard/pages/_events.gsp

    r577 r635  
    1616%>
    1717<wizard:pageContent>
     18        <g:if env="development">
     19                <wizard:ajaxButtonElement description="Development feature (clear events)" name="clear" value="clear events" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()">
     20                        This functionality is only available in development mode for debugging purposes and will not show in test and production environments
     21                </wizard:ajaxButtonElement>
     22        </g:if>
     23
    1824        <span class="info">
    1925                <span class="title">Define all events that occur in your study</span>
     
    102108                                </g:each></g:if>
    103109                                <div class="firstColumn"></div>
     110<% /*
    104111                                <wizard:templateColumns id="${eventId}" entity="${events[ eventId ]}" template="${events[ eventId ].template}" name="event_${eventId}" class="column" />
     112   */ %>
    105113                        </div>
    106114                </g:each>
  • trunk/grails-app/views/wizard/pages/_samples.gsp

    r617 r635  
    2727</g:if><g:else>
    2828
     29
     30        <g:if env="development">
     31                <wizard:ajaxButtonElement description="Development feature (regenerate samples)" name="regenerate" value="regenerate new samples" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()">
     32                        This functionality is only available in development mode for debugging purposes and will not show in test and production environments
     33                </wizard:ajaxButtonElement>
     34        </g:if>
     35       
    2936        <span class="info">
    3037                <span class="title">Samples</span>
     
    3340        </span>
    3441
    35         <wizard:ajaxButtonElement name="regenerate" value="debug: regenerate the samples below..." url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()">
    36                 i need some new samples man!
    37         </wizard:ajaxButtonElement>
    38 
    3942        <g:if test="${samples}">
    40                 <g:set var="showHeader" value="${true}" />
    41                 <h1>Templateless</h1>
    42                 <div class="table">
    43                 <g:each status="s" var="sampleData" in="${samples}">
    44                         <g:if test="${!sampleData.sample.template}">
    45                                 <g:if test="${showHeader}">
    46                                 <g:set var="showHeader" value="${false}" />
    47                                 <div class="header">
    48                                         <div class="firstColumn">#</div>
    49                                         <div class="column">Template</div>
    50                                 </div>
     43                <g:if test="${samples.size() > samplesWithTemplate}">
     44                        <g:set var="showHeader" value="${true}" />
     45                        <h1>Samples that still need to have a template assigned</h1>
     46                        <div class="table">
     47                        <g:each status="s" var="sampleData" in="${samples}">
     48                                <g:if test="${!sampleData.sample.template}">
     49                                        <g:if test="${showHeader}">
     50                                        <g:set var="showHeader" value="${false}" />
     51                                        <div class="header">
     52                                                <div class="firstColumn">#</div>
     53                                                <div class="column">Template</div>
     54                                        </div>
     55                                        </g:if>
     56                                        <div class="row">
     57                                                <div class="firstColumn">${s+1}</div>
     58                                                <div class="column">
     59                                                        <wizard:templateSelect name="template_${s}" entity="${dbnp.studycapturing.Sample}" value="${sampleData['sample'].template}" addDummy="true" ajaxOnChange="switchTemplate" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" />
     60                                                </div>
     61                                                <wizard:templateColumns name="sample_${s}" class="column" id="1" entity="${sampleData.sample}"/>
     62                                        </div>
    5163                                </g:if>
    52                                 <div class="row">
    53                                         <div class="firstColumn">${s+1}</div>
    54                                         <div class="column">
    55                                                 <wizard:templateSelect name="template_${s}" entity="${dbnp.studycapturing.Sample}" value="${sampleData['sample'].template}" addDummy="true" ajaxOnChange="switchTemplate" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" />
    56                                         </div>
    57                                 </div>
    58                         </g:if>
    59                 </g:each>
    60                 </div>
    61                 <div class="sliderContainer">
    62                         <div class="slider" ></div>
    63                 </div>
     64                        </g:each>
     65                        </div>
     66                        <div class="sliderContainer">
     67                                <div class="slider" ></div>
     68                        </div>
     69                </g:if>
    6470
    6571                <g:each status="n" var="sampleTemplateName" in="${sampleTemplates}">
     
    8793                        </g:each>
    8894                        </div>
     95                        <div class="sliderContainer">
     96                                <div class="slider" ></div>
     97                        </div>
    8998                </g:each>
    9099        </g:if>
  • trunk/grails-app/views/wizard/pages/_wait.gsp

    r512 r635  
    2525                function handleDots() {
    2626                        var dots = $('#dots');
    27                         var html = dots.html();
    28                         dots.html( ((html.length) < 5) ? html+"." : "")
    29                         setTimeout("handleDots();", 1000);
     27
     28                        if (dots[0]) {
     29                                var html = dots.html();
     30                                dots.html( ((html.length) < 5) ? html+"." : "")
     31                                setTimeout("handleDots();", 1000);
     32                        }
    3033                }
    3134
  • trunk/web-app/css/wizard.css

    r590 r635  
    2424
    2525.wizard .info .error {
     26    color:#006DBA;
     27    font-size:14px;
     28    font-weight:normal;
     29    display: block;
     30    margin-bottom: 5px;
     31    padding-left: 20px;
     32    background: url(../images/icons/famfamfam/error.png) no-repeat center left;
     33}
     34
     35.wizard .info .warning {
    2636    color:#006DBA;
    2737    font-size:14px;
Note: See TracChangeset for help on using the changeset viewer.