/*
 * Author       : zchelp
 * Generated on : 22-Nov-2009 20:34:36
 * Version      : 3.0
 */
application "CourseRegistration"
{
    type = public
    date format = "dd-MMM-yyyy"
    time zone = "America/Los_Angeles"
    section Home
    {
        form  Courses
        {
            
            CourseName
            (
                type  =  text
            )

            TotalSeats
            (
                type  =  number
                width  =  20
            )

            SeatsAvailable
            (
                type  =  number
                width  =  20
            )

            actions
            {
                on add
                {
                    Submit
                    (
                        type  =  submit
                        displayname  =  "Submit"
                    )
                    Reset
                    (
                        type  =  reset
                        displayname  =  "Reset"
                    )
                }
                on edit
                {
                    Update
                    (
                        type  =  submit
                        displayname  =  "Update"
                    )
                    Cancel
                    (
                        type  =  cancel
                        displayname  =  "Cancel"
                    )
                }
            }
        }

        list  Courses_View
        {
            displayname = "Courses View"
            show  all  rows  from  Courses 
            (
                CourseName
                TotalSeats
                SeatsAvailable
            )
            options
            (
                display rows = 100
            )
        }

        form  Register
        {
            
            Name
            (
                type  =  text
            )

            Course
            (
                type  =  picklist
                values  =  Courses.CourseName
                on user input
                {
                    dit  =  Courses  [CourseName == input.Course];
                    input.AvailableSeats = dit.SeatsAvailable;
                }
            )

            AvailableSeats
            (
                type  =  number
                width  =  20
            )

            actions
            {
                on add
                {
                    on load
                    {
                        disable AvailableSeats;
                    }
                    Submit
                    (
                        type  =  submit
                        displayname  =  "Submit"
                        on validate
                        {
                            if (input.AvailableSeats  ==  0)
                            {
                                alert "The Registration is Full for this Course. Please select another Course or wait till next semester";
                                cancel submit;
                            }
                        }
                        on success
                        {
                            dat  =  Courses  [CourseName == input.Course];
                            if (count(Register[Course == input.Course])  <  1)
                            {
                                input.AvailableSeats = dat.SeatsAvailable;
                            }
                            else
                            {
                                dat.SeatsAvailable = (dat.SeatsAvailable  -  1);
                                input.AvailableSeats = dat.SeatsAvailable;
                            }
                        }
                    )
                    Reset
                    (
                        type  =  reset
                        displayname  =  "Reset"
                    )
                }
                on edit
                {
                    Update
                    (
                        type  =  submit
                        displayname  =  "Update"
                    )
                    Cancel
                    (
                        type  =  cancel
                        displayname  =  "Cancel"
                    )
                }
                on delete
                {
                    on success
                    {
                        tad  =  Courses  [CourseName == input.Course];
                        tad.SeatsAvailable = (tad.SeatsAvailable  +  1);
                    }
                }
            }
        }

        list  Register_View
        {
            displayname = "Register View"
            show  all  rows  from  Register 
            (
                Name
                Course
                AvailableSeats as "SeatsAvailable"
            )
            filters 
            (
                Course
            )
            options
            (
                display rows = 100
            )
        }

    }

}
