Changeset 416


Ignore:
Timestamp:
May 12, 2010, 3:38:46 PM (14 years ago)
Author:
duh
Message:
  • updated Events to handle constraints properly
  • updated event wizard
Location:
trunk/grails-app
Files:
5 edited

Legend:

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

    r414 r416  
    260260                        }.to "events"
    261261                        on("add") {
    262                                 /*
    263                                 def startTime   = (params.get('startTime')) ? params.startTime = new Date().parse("d/M/yyyy HH:mm", params.get('startTime').toString()) : null
    264                                 def endTime             = (params.get('endTime')) ? new Date().parse("d/M/yyyy HH:mm", params.get('endTime').toString()) : null
    265                                 def template    = params.get('template')
    266 
    267                                 // handle template
    268                                 if (template instanceof String && template.size() > 0) {
    269                                         template = Template.findByName(template)
    270                                 } else if (!template instanceof Template) {
    271                                         template = null
    272                                 }
    273 
    274                                 // handle data
    275                                 if (template && startTime && endTime) {
    276                                         // add an event instance
    277                                         def event = new Event(
    278                                                 template        : template,
    279                                                 startTime       : startTime,
    280                                                 endTime         : endTime
    281                                         )
    282 
    283                                         // validate event
    284                                         if (event.validate()) {
    285                                                 // add event to event list
    286                                                 flow.events[ flow.events.size() ] = event
    287                                                 success()
    288                                         } else {
    289                                                 // validation failed, feedback errors
    290                                                 flash.errors = [:]
    291                                                 flash.values = params
    292                                                 this.appendErrors(event, flash.errors)
    293                                                 error()
    294                                         }
    295                                 } else {
    296                                         // validation failed, feedback errors
    297                                         flash.errors    = [:]
    298                                         flash.values    = params
    299 
    300                                         if (!template)  this.appendErrorMap(['template': 'You need to select an event template'], flash.errors)
    301                                         if (!startTime) this.appendErrorMap(['startTime': 'You need to define the start time of your study event'], flash.errors)
    302                                         if (!endTime)   this.appendErrorMap(['endTime': 'You need to define the end time of your study event'], flash.errors)
    303                                         error()
    304                                 }
    305                                 */
    306262                                flash.values                    = params
    307263                                def eventTemplateName   = params.get('template')
     
    322278                                // validate event object
    323279                                if (flow.event.validate()) {
    324 
    325 flow.event.template.fields.each() {
    326         println "["+it.name+"] = "+flow.event.getFieldValue(it.name)   
    327 }
    328280                                        // it validated! Duplicate the event object...
    329281                                        def newEvent    = flow.event
     
    412364                                flash.values = params
    413365                                flash.errors = [:]
    414                                 /*
    415 
    416                                 // handle event groupings
    417                                 this.handleEventGrouping(flow, flash, params)
    418 
    419                                 // check if we have at least one subject
    420                                 // and check form data
     366
     367                                // handle study data
    421368                                if (flow.events.size() < 1) {
    422369                                        // append error map
    423370                                        flash.values = params
    424371                                        this.appendErrorMap(['events': 'You need at least to create one event for your study'], flash.errors)
     372                                        error()                                         
     373                                } else if (this.handleEvents(flow, flash, params)) {
     374                                        success()
     375                                } else {
    425376                                        error()
    426377                                }
    427                                 */
    428378                        }.to "events"
    429379                }
     
    645595         */
    646596        def handleEvents(flow, flash, params) {
     597                def errors = false
     598               
    647599                // got an event in the flash scope?
    648600                if (!flow.event) flow.event = new Event()
     
    669621                flow.eventTemplates.each() { eventTemplate ->
    670622                        // iterate through events
    671                         eventTemplate.getValue().events.each() { event ->
    672                                 println eventTemplate
    673                                 println event.class
    674                                 //println event.template
    675 
     623                        eventTemplate.getValue().events.each() { eventId ->
    676624                                // iterate through template fields
    677                                 /*
    678                                 event.giveFields().each() { eventField ->
    679                                         event.setFieldValue(eventField.name, params.get( 'event_' + event + '_' + eventField.escapedName() ) )
     625                                flow.events[ eventId ].giveFields().each() { eventField ->
     626                                        flow.events[ eventId ].setFieldValue(eventField.name, params.get( 'event_' + eventId + '_' + eventField.escapedName() ) )
    680627                                }
    681628
    682629                                // validate event
    683                                 if (!flow.events[ event ].validate()) {
     630                                if (!flow.events[ eventId ].validate()) {
    684631                                        errors = true
    685632                                        this.appendErrors(flow.events[ eventId ], flash.errors, 'event_' + eventId + '_')
    686633                                }
    687                                 */
    688634                        }
    689635                }
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r408 r416  
    1717        Date endTime
    1818
     19        /**
     20         * Constraints
     21         */
    1922        static constraints = {
    20                 endTime(validator: {val, obj ->
    21                         if (val && val.before(obj.startTime)) {
    22                                 return 'endTimeshouldbegreater'
     23                endTime(validator: { fields, obj, errors ->
     24                        def error = false
     25
     26                        // endTime must be >= the startTime
     27                        if ( fields && fields.compareTo(obj.startTime) < 0 ) {
     28                                error = true
     29                                errors.rejectValue(
     30                                        'endTime',
     31                                        'event.endTime.greaterThanStartTime',
     32                                        ['endTime', fields] as Object[],
     33                                        'End time should be greater than or equal to the Start Time'
     34                                )
    2335                        }
     36
     37                        return (!error)
    2438                })
    2539        }
  • trunk/grails-app/i18n/messages.properties

    r332 r416  
    6363templateEntity.typeMismatch.date=Property {0} must be of type Date and is currently of type {1}
    6464templateEntity.typeMismatch.term=Property {0} must be of type Term and is currently of type {1}
     65
     66event.endTime.greaterThanStartTime=End time should be greater than or equal to the Start Time
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r399 r416  
    620620                        def from = []
    621621                        attrs.from.each { from[ from.size() ] = it.toString() }
     622
     623                        // sort alphabetically
     624                        from.sort()
     625
     626                        // set attributes
    622627                        attrs.from = from
    623628                        attrs.value = (attrs.value) ? attrs.value.toString() : ''
  • trunk/grails-app/views/wizard/pages/_events.gsp

    r397 r416  
    2929<g:if test="${events}">
    3030        <g:each var="eventTemplate" in="${eventTemplates}">
     31                <g:set var="showHeader" value="${true}" />
    3132                <h1>${eventTemplate.getValue().name} template</h1>
    3233        <div class="table">
    33                 <div class="header">
    34                         <div class="firstColumn">#</div>
    35                         <div class="firstColumn"></div>
    36                         <wizard:templateColumnHeaders template="${eventTemplate.getValue().template}" class="column"/>
    37                         <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}">
    38                         <div class="column">
    39                                 <g:textField name="eventGroup_${g}_name" value="${eventGroup.name}" />
    40                                 <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()" />
     34                <g:each var="eventId" in="${eventTemplate.getValue().events}">
     35                        <g:if test="${showHeader}">
     36                        <g:set var="showHeader" value="${false}" />
     37                        <div class="header">
     38                                <div class="firstColumn">#</div>
     39                                <div class="firstColumn"></div>
     40                                <wizard:templateColumnHeaders entity="${events[ eventId ]}" class="column"/>
     41                                <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}">
     42                                <div class="column">
     43                                        <g:textField name="eventGroup_${g}_name" value="${eventGroup.name}" />
     44                                        <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()" />
     45                                </div>
     46                                </g:each></g:if>
     47                                <div class="column">
     48                                        <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()" />
     49                                </div>
    4150                        </div>
    42                         </g:each></g:if>
    43                         <div class="column">
    44                                 <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()" />
    45                         </div>
    46                 </div>
    47                 <g:each var="eventId" in="${eventTemplate.getValue().events}">
     51                        </g:if>
    4852                        <div class="row">
    4953                                <div class="firstColumn">${eventId + 1}</div>
Note: See TracChangeset for help on using the changeset viewer.