Changeset 383


Ignore:
Timestamp:
Apr 26, 2010, 6:36:49 PM (9 years ago)
Author:
duh
Message:
  • initial event template
Location:
trunk/grails-app
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BootStrap.groovy

    r382 r383  
    417417                        println ".adding event templates..."
    418418                        def dietTreatmentTemplate = new Template(
    419                                 name: 'Diet treatment ', entity: dbnp.studycapturing.Event)
     419                                name: 'Diet treatment', entity: dbnp.studycapturing.Event)
    420420                        .addToFields(sampleDescriptionField)
    421421                        .addToFields(new TemplateField(
     
    425425
    426426                        def boostTreatmentTemplate = new Template(
    427                                 name: 'Boost treatment ', entity: dbnp.studycapturing.Event)
     427                                name: 'Boost treatment', entity: dbnp.studycapturing.Event)
    428428                        .addToFields(sampleDescriptionField)
    429429                        .addToFields(new TemplateField(
  • trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy

    r368 r383  
    5252                                [title: 'Study'],                               // study
    5353                                [title: 'Subjects'],                    // subjects
    54                                 [title: 'Event Descriptions'],  // event descriptions
    5554                                [title: 'Events'],                              // events and event grouping
    5655                                [title: 'Confirmation'],                // confirmation page
     
    211210                                        success()
    212211                                }
    213                         }.to "eventDescriptions"
     212                        }.to "events"
    214213                        on("delete") {
    215214                                flash.errors = [:]
     
    237236                }
    238237
    239                 // render page three
    240                 eventDescriptions {
    241                         render(view: "_eventDescriptions")
    242                         onRender {
    243                                 flow.page = 4
    244 
    245                                 if (!flow.eventDescriptions) {
    246                                         flow.eventDescriptions = []
    247                                 }
    248                         }
    249                         on("add") {
    250                                 // fetch classification by name (as posted by the form)
    251                                 //params.classification = Term.findByName(params.classification)
    252 
    253                                 /* TODO: rewrite to Event template
    254 
    255                                 // fetch protocol by name (as posted by the form)
    256                                 params.protocol = Protocol.findByName(params.protocol)
    257 
    258                                 // transform checkbox form value to boolean
    259                                 params.isSamplingEvent = (params.containsKey('isSamplingEvent'))
    260 
    261 
    262                                 // instantiate EventDescription with parameters
    263                                 def eventDescription = new EventDescription(params)
    264 
    265                                 // validate
    266                                 if (eventDescription.validate()) {
    267                                         def increment = flow.eventDescriptions.size()
    268                                         flow.eventDescriptions[increment] = eventDescription
    269                                         success()
    270                                 } else {
    271                                         // validation failed, feedback errors
    272                                         flash.errors = [:]
    273                                         flash.values = params
    274                                         this.appendErrors(eventDescription, flash.errors)
    275                                         error()
    276                                 }
    277 
    278                                 */
    279                         }.to "eventDescriptions"
    280                         on("delete") {
    281                                 def delete = params.get('do') as int;
    282 
    283                                 /* TODO: rewrite to Event template
    284                                
    285                                 // handle form data
    286                                 if (!this.handleEventDescriptions(flow, flash, params)) {
    287                                         flash.values = params
    288                                         error()
    289                                 } else {
    290                                         success()
    291                                 }
    292 
    293                                 // remove eventDescription
    294                                 if (flow.eventDescriptions[ delete ] && flow.eventDescriptions[ delete ] instanceof EventDescription) {
    295                                         // remove all events based on this eventDescription
    296                                         for ( i in flow.events.size()..0 ) {
    297                                                 if (flow.events[ i ] && flow.events[ i ].eventDescription == flow.eventDescriptions[ delete ]) {
    298                                                         flow.events.remove(i)
    299                                                 }
    300                                         }
    301 
    302                                         flow.eventDescriptions.remove(delete)
    303                                 }
    304 
    305                                 */
    306                         }.to "eventDescriptions"
    307                         on("previous") {
    308                                 flash.errors = [:]
    309 
    310                                 // handle form data
    311                                 if (!this.handleEventDescriptions(flow, flash, params)) {
    312                                         flash.values = params
    313                                         error()
    314                                 } else {
    315                                         success()
    316                                 }
    317                         }.to "subjects"
    318                         on("next") {
    319                                 flash.errors = [:]
    320 
    321                                 // check if we have at least one subject
    322                                 // and check form data
    323                                 if (flow.eventDescriptions.size() < 1) {
    324                                         // append error map
    325                                         flash.values = params
    326                                         this.appendErrorMap(['eventDescriptions': 'You need at least to create one eventDescription for your study'], flash.errors)
    327                                         error()
    328                                 } else if (!this.handleEventDescriptions(flow, flash, params)) {
    329                                         flash.values = params
    330                                         error()
    331                                 } else {
    332                                         success()
    333                                 }
    334                         }.to "events"
    335                 }
    336 
    337238                // render events page
    338239                events {
    339240                        render(view: "_events")
    340241                        onRender {
    341                                 flow.page = 5
     242                                flow.page = 4
    342243
    343244                                if (!flow.events) {
     
    349250                                        flow.eventGroups[0] = new EventGroup(name: 'Group 1')   // 1 group by default
    350251                                }
     252println flow.events
    351253                        }
    352254                        on("add") {
    353                                 // create date instances from date string?
    354                                 // @see WizardTagLibrary::timeElement{...}
    355                                 if (params.get('startTime')) {
    356                                         params.startTime = new Date().parse("d/M/yyyy HH:mm", params.get('startTime').toString())
    357                                 }
    358                                 if (params.get('endTime')) {
    359                                         params.get('endTime').toString()
    360                                         params.endTime = new Date().parse("d/M/yyyy HH:mm", params.get('endTime').toString())
    361                                 }
    362 
    363                                 // get eventDescription instance by name
    364                                 params.eventDescription = this.getObjectByName(params.get('eventDescription'), flow.eventDescriptions)
    365 
    366                                 // instantiate Event with parameters
    367                                 def event = (params.eventDescription.isSamplingEvent) ? new SamplingEvent(params) : new Event(params)
    368 
    369                                 // handle event groupings
    370                                 this.handleEventGrouping(flow, flash, params)
    371 
    372                                 // validate event
    373                                 if (event.validate()) {
    374                                         def increment = flow.events.size()
    375                                         flow.events[increment] = event
    376                                         success()
     255                                def startTime   = (params.get('startTime')) ? params.startTime = new Date().parse("d/M/yyyy HH:mm", params.get('startTime').toString()) : null
     256                                def endTime             = (params.get('endTime')) ? new Date().parse("d/M/yyyy HH:mm", params.get('endTime').toString()) : null
     257                                def template    = params.get('template')
     258
     259                                // handle template
     260                                if (template instanceof String && template.size() > 0) {
     261                                        template = Template.findByName(template)
     262                                } else if (!template instanceof Template) {
     263                                        template = null
     264                                }
     265
     266                                // handle data
     267                                if (template && startTime && endTime) {
     268                                        // add an event instance
     269                                        def event = new Event(
     270                                                template        : template,
     271                                                startTime       : startTime,
     272                                                endTime         : endTime
     273                                        )
     274
     275                                        // validate event
     276                                        if (event.validate()) {
     277                                                // add event to event list
     278                                                flow.events[ flow.events.size() ] = event
     279                                                success()
     280                                        } else {
     281                                                // validation failed, feedback errors
     282                                                flash.errors = [:]
     283                                                flash.values = params
     284                                                this.appendErrors(event, flash.errors)
     285                                                error()
     286                                        }
    377287                                } else {
    378288                                        // validation failed, feedback errors
    379                                         flash.errors = [:]
    380                                         flash.values = params
    381                                         this.appendErrors(event, flash.errors)
    382 
    383                                         flash.startTime = params.startTime
    384                                         flash.endTime = params.endTime
    385                                         flash.eventDescription = params.eventDescription
    386 
     289                                        flash.errors    = [:]
     290                                        flash.values    = params
     291
     292                                        if (!template)  this.appendErrorMap(['template': 'You need to select an event template'], flash.errors)
     293                                        if (!startTime) this.appendErrorMap(['startTime': 'You need to define the start time of your study event'], flash.errors)
     294                                        if (!endTime)   this.appendErrorMap(['endTime': 'You need to define the end time of your study event'], flash.errors)
    387295                                        error()
    388296                                }
     
    448356                                // handle event groupings
    449357                                this.handleEventGrouping(flow, flash, params)
    450                         }.to "eventDescriptions"
     358                        }.to "subjects"
    451359                        on("next") {
    452360                                flash.values = params
     
    470378                        render(view: "_confirmation")
    471379                        onRender {
    472                                 flow.page = 6
     380                                flow.page = 5
    473381                        }
    474382                        on("toStudy").to "study"
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r381 r383  
    209209         */
    210210        def baseElement = {inputElement, attrs, help ->
    211 println "rendering " + inputElement + " with name " + attrs.get('name')
     211println ".rendering " + inputElement + " with name " + attrs.get('name')
    212212                // work variables
    213213                def description = attrs.remove('description')
  • trunk/grails-app/views/wizard/common/_error.gsp

    r359 r383  
    2121                                <g:if test="${!e}"><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 50px 0;"></span></g:if>
    2222                                ${error.value['key']} &rarr; ${error.value['value']}
    23 ${error.value['dynamic']}
    2423                        </p>
    2524                </g:each>
     
    2928                <g:each in="${errors}" var="error">
    3029                var element = $("input:[name='${error.key}'], input:[name='${error.key.toLowerCase().replaceAll("([^a-z0-9])","_")}'], select:[name='${error.key}'], select:[name='${error.key.toLowerCase().replaceAll("([^a-z0-9])","_")}']");
    31                 <g:if test="${error.value['dynamic']}">
     30                 <g:if test="${error.value['dynamic']}">
    3231                element.addClass('error');
    33                 </g:if><g:else>
     32                 </g:if><g:else>
    3433                element.parent().parent().addClass('error');
    35                 </g:else>
     34                 </g:else>
    3635                </g:each>
    3736
  • trunk/grails-app/views/wizard/pages/_events.gsp

    r359 r383  
    2626        </span>
    2727
    28         <wizard:selectElement name="eventDescription" description="Event Description" error="eventDescription" from="${eventDescriptions}" value="${values?.eventDescription}">
    29                 The event description for this event
    30         </wizard:selectElement>
     28        <wizard:templateElement name="template" description="Template" value="${values?.template}" entity="${dbnp.studycapturing.Event}" addDummy="true" >
     29                The template to use for this study
     30        </wizard:templateElement>
    3131        <wizard:timeElement name="startTime" description="Start Time" error="startTime" value="${values?.startTime}">
    3232                The start time of the study
     
    3434        <wizard:timeElement name="endTime" description="End time" error="endTimee" value="${values?.endTime}">
    3535                The end time of the study
    36         </wizard:timeElement>
     36        </wizard:timeElement>   
    3737        <wizard:buttonElement name="add" value="Add" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()"/>
    38 <g:if test="${events}">
     38<g:if test="${events}">
     39        <g:each var="event" status="i" in="${events}">
     40        <div class="table">
     41                <div class="header">
     42                        <div class="firstColumn">#</div>
     43                        <div class="firstColumn"></div>
     44                        <div class="column">start</div>
     45                        <div class="column">end</div>
     46                        <div class="column">duration</div>
     47                        <wizard:templateColumnHeaders template="${event.template}" class="column" />
     48                        <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}">
     49                        <div class="column">
     50                                <g:textField name="eventGroup_${g}_name" value="${eventGroup.name}" />
     51                                <wizard:ajaxButton name="deleteEventGroup" src="../images/icons/famfamfam/delete.png" alt="delete this eventgroup" class="famfamfam" value="-" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" before="\$(\'input[name=do]\').val(${g});" afterSuccess="onWizardPage()" />
     52                        </div>
     53                        </g:each></g:if>
     54                        <div class="column">
     55                                <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()" />
     56                        </div>
     57                </div>
     58                <div class="row">
     59                        <div class="firstColumn">${i + 1}</div>
     60                        <div class="firstColumn">
     61                                <wizard:ajaxButton name="delete" src="../images/icons/famfamfam/delete.png" alt="delete this event" class="famfamfam" value="-" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" before="\$(\'input[name=do]\').val(${i});" afterSuccess="onWizardPage()" />
     62                        </div>
     63                        <div class="column"><g:formatDate format="dd/MM/yyyy hh:mm" date="${event.startTime}" /></div>
     64                        <div class="column"><g:formatDate format="dd/MM/yyyy hh:mm" date="${event.endTime}" /></div>
     65                        <div class="column">${event.getShortDuration()}</div>
     66                        <wizard:templateColumns id="${i}" entity="${event}" template="${event.template}" name="event${i}" class="column" />
     67                        <g:if test="${eventGroups}"><g:each var="eventGroup" status="j" in="${eventGroups}">
     68                        <div class="column">
     69                                <g:if test="${eventGroup.events.find{ it == event} }">
     70                                        <input type="checkbox" name="event_${i}_group_${j}" checked="checked" />
     71                                </g:if><g:else>
     72                                        <input type="checkbox" name="event_${i}_group_${j}"/>
     73                                </g:else>
     74                        </div>
     75                        </g:each></g:if>
     76                        <div class="column"></div>
     77                </div>
     78        </div>
     79        </g:each>
     80<% /*
    3981        <div class="table">
    4082                <div class="header">
     
    81123                <div class="slider"></div>
    82124        </div>
     125 */ %>
    83126</g:if>
    84127       
  • trunk/grails-app/views/wizard/pages/_subjects.gsp

    r381 r383  
    4646                                <div class="column">species</div>
    4747                                <wizard:templateColumnHeaders template="${subjectTemplate.getValue().template}" class="column" />
    48                         </div> 
     48                        </div>
    4949                <g:each var="subjectId" in="${subjectTemplate.getValue().subjects}">
    5050                        <div class="row">
Note: See TracChangeset for help on using the changeset viewer.