Changeset 432

Show
Ignore:
Timestamp:
18-05-10 16:42:11 (4 years ago)
Author:
duh
Message:

- events page now seperates 'events' from 'samplingEvents'
- grouping is now in front to outline properly
- added radio form element
- todo: fix exceptions while deleting

Location:
trunk/grails-app
Files:
4 modified

Legend:

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

    r430 r432  
    5353                                [title: 'Subjects'],                    // subjects 
    5454                                [title: 'Events'],                              // events and event grouping 
     55                                [title: 'Samples'],                             // samples 
    5556                                [title: 'Confirmation'],                // confirmation page 
    5657                                [title: 'Done']                                 // finish page 
     
    248249                                        flow.eventGroups[0]     = new EventGroup(name: 'Group 1')       // 1 group by default 
    249250                                        flow.eventTemplates     = [:] 
     251                                } else if (!flash.values) { 
     252                                        // set flash.values.templateType based on the event instance 
     253                                        flash.values = [:] 
     254                                        flash.values.templateType = (flow.event instanceof Event) ? 'event' : 'sample' 
     255println "aapjes --> " + flash.values 
    250256                                } 
    251257                        } 
     
    261267                        on("add") { 
    262268                                flash.values                    = params 
    263                                 def eventTemplateName   = params.get('template') 
     269println params 
     270println params.get('eventType') 
     271println params.get('eventTemplate') 
     272println params.get('sampleTemplate') 
     273 
     274                                def eventTemplateName   = (params.get('eventType') == 'event') ? params.get('eventTemplate') : params.get('sampleTemplate') 
    264275                                def eventTemplate               = Template.findByName(eventTemplateName) 
     276println "test: "+ eventTemplateName + ", " + eventTemplate 
    265277 
    266278                                // add this event template to the event template array 
     
    345357                        on("deleteEventGroup") { 
    346358                                flash.values = params 
    347                                  
     359 
    348360                                def delete = params.get('do') as int; 
    349361 
     
    362374                        }.to "subjects" 
    363375                        on("next") { 
     376                                println params 
    364377                                flash.values = params 
    365378                                flash.errors = [:] 
     
    368381                                if (flow.events.size() < 1) { 
    369382                                        // append error map 
    370                                         flash.values = params 
    371383                                        this.appendErrorMap(['events': 'You need at least to create one event for your study'], flash.errors) 
    372384                                        error()                                          
     
    376388                                        error() 
    377389                                } 
    378                         }.to "events" 
    379                 } 
    380  
     390                        }.to "samples" 
     391                } 
     392 
     393                // samples page 
     394                samples { 
     395                        render(view: "_samples") 
     396                        onRender { 
     397                                flow.page = 5 
     398                        } 
     399                        on("previous").to "events" 
     400                        on("next").to "samples" 
     401                } 
     402 
     403                // confirmation 
    381404                confirm { 
    382405                        render(view: "_confirmation") 
    383406                        onRender { 
    384                                 flow.page = 5 
     407                                flow.page = 6 
    385408                        } 
    386409                        on("toStudy").to "study" 
    387410                        on("toSubjects").to "subjects" 
    388411                        on("toEvents").to "events" 
    389                         on("previous").to "events" 
     412                        on("toSamples").to "samples" 
     413                        on("previous").to "samples" 
    390414                        on("next").to "save" 
    391415                } 
     
    491515                        } 
    492516                        on("next").to "save" 
    493                         on("previous").to "events" 
     517                        on("previous").to "samples" 
    494518                } 
    495519 
     
    596620        def handleEvents(flow, flash, params) { 
    597621                def errors = false 
    598                  
    599                 // got an event in the flash scope? 
    600                 if (!flow.event) flow.event = new Event() 
     622                def template = null 
     623 
     624                // handle the type of event 
     625                if (params.eventType == 'event') { 
     626                        flow.event = new Event(); 
     627                        template = params.remove('eventTemplate') 
     628                } else if (params.eventType == 'sample') { 
     629                        flow.event = new SamplingEvent(); 
     630                        template = params.remove('sampleTemplate') 
     631                } 
     632 
     633                // got an event in the flow scope? 
     634                //if (!flow.event) flow.event = new Event() 
    601635 
    602636                // if a template is selected, get template instance 
    603                 def template = params.remove('template') 
    604637                if (template instanceof String && template.size() > 0) { 
    605638                        params.template = Template.findByName(template) 
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r416 r432  
    240240 
    241241                // render a form element 
    242                 out << '<div class="element">' 
     242                if (attrs.get('elementId')) { 
     243                out << '<div class="element" id="'+ attrs.remove('elementId') +'">' 
     244                } else { 
     245                        out << '<div class="element">' 
     246                } 
    243247                out << ' <div class="description">' 
    244248                out << description 
     
    344348                        body 
    345349                ) 
     350        } 
     351 
     352        /** 
     353         * render a set of radio form elements 
     354         * @param Map attrs 
     355         * @param Closure body  (help text) 
     356         */ 
     357        def radioElement = { attrs, body -> 
     358                baseElement.call( 
     359                        'radioList', 
     360                        attrs, 
     361                        body 
     362                ) 
     363        } 
     364 
     365        /** 
     366         * render a set of radio elements 
     367         * @param Map attrs 
     368         * @param Closure body  (help text) 
     369         */ 
     370        def radioList = { attrs -> 
     371                def checked = true 
     372 
     373                attrs.elements.each { 
     374                        out << radio( 
     375                                name: attrs.name, 
     376                                value: it, 
     377                                checked: (attrs.value == it || (!attrs.value && checked)) 
     378                        ) 
     379                        out << it 
     380                        checked = false 
     381                } 
    346382        } 
    347383 
  • trunk/grails-app/views/wizard/common/_wizard.gsp

    r359 r432  
    1616%> 
    1717<div id="wizard" class="wizard"> 
    18         <h1>Study capture wizard</h1> 
     18        <h1>Study wizard</h1> 
    1919        <g:form action="pages" name="wizardForm" id="wizardForm"> 
    2020        <g:hiddenField name="do" value="" /> 
  • trunk/grails-app/views/wizard/pages/_events.gsp

    r418 r432  
    2121        </span> 
    2222 
    23         <wizard:templateElement name="template" description="Template" value="${event?.template}" entity="${dbnp.studycapturing.Event}" addDummy="true" ajaxOnChange="switchTemplate" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" > 
     23        <wizard:radioElement name="eventType" description="Type" elements="['event','sample']" value="${values?.eventType}"> 
     24                Type of event 
     25        </wizard:radioElement> 
     26        <wizard:templateElement name="eventTemplate" elementId="eventTemplate" description="Event Template" value="${event?.template}" entity="${dbnp.studycapturing.Event}" addDummy="true" ajaxOnChange="switchTemplate" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" > 
    2427                The template to use for this study 
    2528        </wizard:templateElement> 
     29        <wizard:templateElement name="sampleTemplate" elementId="sampleTemplate" description="Sample Template" value="${event?.template}" entity="${dbnp.studycapturing.SamplingEvent}" addDummy="true" ajaxOnChange="switchTemplate" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" > 
     30                The template to use for this study 
     31        </wizard:templateElement> 
     32        <g:if test="${event?.template}"> 
     33        <div id="${values?.eventType}TemplateFields"> 
    2634        <g:if test="${event?.template}"><wizard:templateElements entity="${event}" /></g:if> 
    2735        <g:if test="${event?.template}"><wizard:buttonElement name="add" value="Add" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()"/></g:if> 
     36        </div> 
     37        </g:if> 
     38         
     39        <script type="text/javascript"> 
     40        function swapTemplate(value,refresh) { 
     41                $("div[id$='Template'],div[id$='TemplateFields']").each(function() { 
     42                        var e = $(this); 
     43                        if (e.attr('id').match("^"+value) != null) { 
     44                                e.show(); 
     45                        } else { 
     46                                e.hide(); 
     47                        } 
     48                }); 
    2849 
    29 <g:if test="${events}"> 
     50                if(refresh) { 
     51                } 
     52        } 
     53 
     54        // handle template selectors 
     55        $(document).ready(function() { 
     56                // bind event handlers 
     57                $("input[name=eventType]").click(function() { 
     58                        swapTemplate($(this).val(),true); 
     59                }); 
     60 
     61                // handle selects 
     62                swapTemplate($('input:radio[name=eventType]:checked').val(),false); 
     63        }); 
     64        </script> 
     65 
     66        <g:if test="${events}"> 
    3067        <g:each var="eventTemplate" in="${eventTemplates}"> 
    3168                <g:set var="showHeader" value="${true}" /> 
     
    3875                                <div class="firstColumn">#</div> 
    3976                                <div class="firstColumn"></div> 
    40                                 <wizard:templateColumnHeaders entity="${events[ eventId ]}" class="column"/> 
    4177                                <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}"> 
    4278                                <div class="column"> 
     
    4884                                        <wizard:ajaxButton name="addEventGroup" src="../images/icons/famfamfam/add.png" alt="add a new eventgroup" class="famfamfam" value="+" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" /> 
    4985                                </div> 
     86                                <wizard:templateColumnHeaders entity="${events[ eventId ]}" class="column"/> 
    5087                        </div> 
    5188                        </g:if> 
     
    5592                                        <wizard:ajaxButton name="deleteEvent" src="../images/icons/famfamfam/delete.png" alt="delete this subject" class="famfamfam" value="-" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" before="\$(\'input[name=do]\').val(${eventId});" afterSuccess="onWizardPage()"/> 
    5693                                </div> 
    57                                 <wizard:templateColumns id="${eventId}" entity="${events[ eventId ]}" template="${events[ eventId ].template}" name="event_${eventId}" class="column" /> 
    5894                                <g:if test="${eventGroups}"><g:each var="eventGroup" status="j" in="${eventGroups}"> 
    5995                                <div class="column"> 
     
    66102                                </g:each></g:if> 
    67103                                <div class="column"></div> 
     104                                <wizard:templateColumns id="${eventId}" entity="${events[ eventId ]}" template="${events[ eventId ].template}" name="event_${eventId}" class="column" /> 
    68105                        </div> 
    69106                </g:each>