Changeset 383
- Timestamp:
- Apr 26, 2010, 6:36:49 PM (11 years ago)
- Location:
- trunk/grails-app
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/conf/BootStrap.groovy
r382 r383 417 417 println ".adding event templates..." 418 418 def dietTreatmentTemplate = new Template( 419 name: 'Diet treatment 419 name: 'Diet treatment', entity: dbnp.studycapturing.Event) 420 420 .addToFields(sampleDescriptionField) 421 421 .addToFields(new TemplateField( … … 425 425 426 426 def boostTreatmentTemplate = new Template( 427 name: 'Boost treatment 427 name: 'Boost treatment', entity: dbnp.studycapturing.Event) 428 428 .addToFields(sampleDescriptionField) 429 429 .addToFields(new TemplateField( -
trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy
r368 r383 52 52 [title: 'Study'], // study 53 53 [title: 'Subjects'], // subjects 54 [title: 'Event Descriptions'], // event descriptions55 54 [title: 'Events'], // events and event grouping 56 55 [title: 'Confirmation'], // confirmation page … … 211 210 success() 212 211 } 213 }.to "event Descriptions"212 }.to "events" 214 213 on("delete") { 215 214 flash.errors = [:] … … 237 236 } 238 237 239 // render page three240 eventDescriptions {241 render(view: "_eventDescriptions")242 onRender {243 flow.page = 4244 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 template254 255 // fetch protocol by name (as posted by the form)256 params.protocol = Protocol.findByName(params.protocol)257 258 // transform checkbox form value to boolean259 params.isSamplingEvent = (params.containsKey('isSamplingEvent'))260 261 262 // instantiate EventDescription with parameters263 def eventDescription = new EventDescription(params)264 265 // validate266 if (eventDescription.validate()) {267 def increment = flow.eventDescriptions.size()268 flow.eventDescriptions[increment] = eventDescription269 success()270 } else {271 // validation failed, feedback errors272 flash.errors = [:]273 flash.values = params274 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 template284 285 // handle form data286 if (!this.handleEventDescriptions(flow, flash, params)) {287 flash.values = params288 error()289 } else {290 success()291 }292 293 // remove eventDescription294 if (flow.eventDescriptions[ delete ] && flow.eventDescriptions[ delete ] instanceof EventDescription) {295 // remove all events based on this eventDescription296 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 data311 if (!this.handleEventDescriptions(flow, flash, params)) {312 flash.values = params313 error()314 } else {315 success()316 }317 }.to "subjects"318 on("next") {319 flash.errors = [:]320 321 // check if we have at least one subject322 // and check form data323 if (flow.eventDescriptions.size() < 1) {324 // append error map325 flash.values = params326 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 = params330 error()331 } else {332 success()333 }334 }.to "events"335 }336 337 238 // render events page 338 239 events { 339 240 render(view: "_events") 340 241 onRender { 341 flow.page = 5242 flow.page = 4 342 243 343 244 if (!flow.events) { … … 349 250 flow.eventGroups[0] = new EventGroup(name: 'Group 1') // 1 group by default 350 251 } 252 println flow.events 351 253 } 352 254 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 } 377 287 } else { 378 288 // 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) 387 295 error() 388 296 } … … 448 356 // handle event groupings 449 357 this.handleEventGrouping(flow, flash, params) 450 }.to " eventDescriptions"358 }.to "subjects" 451 359 on("next") { 452 360 flash.values = params … … 470 378 render(view: "_confirmation") 471 379 onRender { 472 flow.page = 6380 flow.page = 5 473 381 } 474 382 on("toStudy").to "study" -
trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy
r381 r383 209 209 */ 210 210 def baseElement = {inputElement, attrs, help -> 211 println " rendering " + inputElement + " with name " + attrs.get('name')211 println ".rendering " + inputElement + " with name " + attrs.get('name') 212 212 // work variables 213 213 def description = attrs.remove('description') -
trunk/grails-app/views/wizard/common/_error.gsp
r359 r383 21 21 <g:if test="${!e}"><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 50px 0;"></span></g:if> 22 22 ${error.value['key']} → ${error.value['value']} 23 ${error.value['dynamic']}24 23 </p> 25 24 </g:each> … … 29 28 <g:each in="${errors}" var="error"> 30 29 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']}"> 32 31 element.addClass('error'); 33 </g:if><g:else>32 </g:if><g:else> 34 33 element.parent().parent().addClass('error'); 35 </g:else>34 </g:else> 36 35 </g:each> 37 36 -
trunk/grails-app/views/wizard/pages/_events.gsp
r359 r383 26 26 </span> 27 27 28 <wizard: selectElement name="eventDescription" description="Event Description" error="eventDescription" from="${eventDescriptions}" value="${values?.eventDescription}">29 The event description for this event30 </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> 31 31 <wizard:timeElement name="startTime" description="Start Time" error="startTime" value="${values?.startTime}"> 32 32 The start time of the study … … 34 34 <wizard:timeElement name="endTime" description="End time" error="endTimee" value="${values?.endTime}"> 35 35 The end time of the study 36 </wizard:timeElement> 36 </wizard:timeElement> 37 37 <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 <% /* 39 81 <div class="table"> 40 82 <div class="header"> … … 81 123 <div class="slider"></div> 82 124 </div> 125 */ %> 83 126 </g:if> 84 127 -
trunk/grails-app/views/wizard/pages/_subjects.gsp
r381 r383 46 46 <div class="column">species</div> 47 47 <wizard:templateColumnHeaders template="${subjectTemplate.getValue().template}" class="column" /> 48 </div> 48 </div> 49 49 <g:each var="subjectId" in="${subjectTemplate.getValue().subjects}"> 50 50 <div class="row">
Note: See TracChangeset
for help on using the changeset viewer.