2013-09-20 3 views
1

Я создал форму, которая отслеживает количество студентов, подписавшихся на компьютерную лабораторию в определенный день. Моя проблема заключается в том, что я хотел бы, чтобы форма генерировала сообщение, когда человек начинает подписываться, и количество студентов превышает количество доступных компьютеров, либо индивидуально, либо в сочетании с количеством людей, уже зарегистрированных за этот конкретный день ,Доступность компьютера (проверка формы пользовательского интерфейса)

Мне также хотелось бы сообщить, сколько мест осталось в лаборатории, если оно не заполнено.

Мой вопрос в том, что я хочу знать, какой код я бы добавил для создания сообщения, когда слишком много людей подписались на работу в лаборатории. Я не знаю, с чего начать или как это сделать.

Сейчас все, что я делаю, это номера треков, кто подписался.

//Create the GUI form 

function doGet() { 
    var app = UiApp.createApplication().setTitle('DHS: Kurzweil Calendar'); 

    //Create a panel which holds all the form elelemnts 
    var vertMainPanel = app.createVerticalPanel().setId('vertMainPanel'); 

    //Create the form elelemnts 
    var lblTeacherName = app.createLabel('Teacher Name:'); 
    var txtTeacherName = app.createTextBox().setName('txtTeacherName'); 

    var lblExt = app.createLabel('Ext:'); 
    var txtExt = app.createTextBox().setName('txtExt'); 

    var lblDate = app.createLabel('Date:'); 
    var boxDate = app.createDateBox().setId('boxDate').setName('boxDate'); 

    var lbxSubject = app.createListBox().setId('lbxSubject').setName('lbxSubject'); 
     lbxSubject.setVisibleItemCount(5); 
     lbxSubject.addItem('-- Select One --'); 
     lbxSubject.addItem('Algebra I (OCS)'); 
     lbxSubject.addItem('Algebra II'); 
     lbxSubject.addItem('Algebra II (Honors)'); 
     lbxSubject.addItem('Agriscience Applications'); 
     lbxSubject.addItem('Agriscience Applications (OCS)'); 
     lbxSubject.addItem('Anatomy and Physiology'); 
     lbxSubject.addItem('Anatomy and Physiology (Honors)'); 
     lbxSubject.addItem('Animal Science'); 
     lbxSubject.addItem('American Sign Language II'); 
     lbxSubject.addItem('Apparel I'); 
     lbxSubject.addItem('Art History (AP)'); 
     lbxSubject.addItem('Advanced Functions and Modeling'); 
     lbxSubject.addItem('Automotive Computer System Diagnostics'); 
     lbxSubject.addItem('Automotive Brakes'); 
     lbxSubject.addItem('Automotive Service'); 
     lbxSubject.addItem('Automotive Service (OCS)'); 
     lbxSubject.addItem('Benchmarks'); 
     lbxSubject.addItem('Bible History'); 
     lbxSubject.addItem('Biology'); 
     lbxSubject.addItem('Biology (AP)'); 
     lbxSubject.addItem('Biology (Honors)'); 
     lbxSubject.addItem('Biology (OCS)'); 
     lbxSubject.addItem('Biomedical Technology'); 
     lbxSubject.addItem('Biotechnology and Agriscience'); 
     lbxSubject.addItem('Calculus AB (AP)'); 
     lbxSubject.addItem('Calculus BC (AP)'); 
     lbxSubject.addItem('Carpentry I'); 
     lbxSubject.addItem('Carpentry I (OCS)'); 
     lbxSubject.addItem('Carpentry III'); 
     lbxSubject.addItem('Chemistry'); 
     lbxSubject.addItem('Chemistry (AP)'); 
     lbxSubject.addItem('Chemistry (Honors)'); 
     lbxSubject.addItem('Choral Arts (Beginning)'); 
     lbxSubject.addItem('Civics and Economics'); 
     lbxSubject.addItem('Civics and Economics (Honors)'); 
     lbxSubject.addItem('Computer Programming I'); 
     lbxSubject.addItem('Computer Science (AP)'); 
     lbxSubject.addItem('Computer Technology'); 
     lbxSubject.addItem('Concert Band II (Beginning)');   
     lbxSubject.addItem('Concert Band II (Proficient)'); 
     lbxSubject.addItem('Core and Sustainable Construction'); 
     lbxSubject.addItem('Core and Sustainable Construction (OCS)'); 
     lbxSubject.addItem('Digital Media I'); 
     lbxSubject.addItem('Digitial Media I (OCS)'); 
     lbxSubject.addItem('Digital Media II'); 
     lbxSubject.addItem('Discrete Mathematics'); 
     lbxSubject.addItem('Drafting I'); 
     lbxSubject.addItem('Drafting Architecture II (Honors)'); 
     lbxSubject.addItem('Drafting Architecture III (Honors)'); 
     lbxSubject.addItem('Earth and Environmental Science'); 
     lbxSubject.addItem('Earth and Environmental Sceince (AP)'); 
     lbxSubject.addItem('Earth and Environmental Science (Honors)'); 
     lbxSubject.addItem('Early Childhood Ed I'); 
     lbxSubject.addItem('eCommerce I (Honors)'); 
     lbxSubject.addItem('English I'); 
     lbxSubject.addItem('English I (Honors)'); 
     lbxSubject.addItem('English II');   
     lbxSubject.addItem('English II (Honors)'); 
     lbxSubject.addItem('English II (OCS)'); 
     lbxSubject.addItem('English III'); 
     lbxSubject.addItem('English III (Honors)'); 
     lbxSubject.addItem('English III (OCS)'); 
     lbxSubject.addItem('English IV'); 
     lbxSubject.addItem('English IV (Honors)'); 
     lbxSubject.addItem('English IV (OCS)'); 
     lbxSubject.addItem('English Lang and Comp (AP)'); 
     lbxSubject.addItem('English Language Arts II'); 
     lbxSubject.addItem('English Language Arts III'); 
     lbxSubject.addItem('Engish Literature (AP)'); 
     lbxSubject.addItem('European History (AP)'); 
     lbxSubject.addItem('Fashion Merchandising'); 
     lbxSubject.addItem('Financial Management (OCS)'); 
     lbxSubject.addItem('Foods I'); 
     lbxSubject.addItem('Foods I (OCS)'); 
     lbxSubject.addItem('Foods II - Enterprise'); 
     lbxSubject.addItem('Foods II - Advanced (OCS)'); 
     lbxSubject.addItem('French I'); 
     lbxSubject.addItem('French II'); 
     lbxSubject.addItem('French III (Honors)'); 
     lbxSubject.addItem('Functional Finances'); 
     lbxSubject.addItem('Geometry'); 
     lbxSubject.addItem('Geometry (Honors)'); 
     lbxSubject.addItem('German I'); 
     lbxSubject.addItem('German II'); 
     lbxSubject.addItem('German III (Honors)'); 
     lbxSubject.addItem('Health and Physical Education'); 
     lbxSubject.addItem('Health Sciences (Advanced Studies)'); 
     lbxSubject.addItem('Health Team Relations'); 
     lbxSubject.addItem('Human Geography (AP)'); 
     lbxSubject.addItem('Holocaust and Peace Studies'); 
     lbxSubject.addItem('Horticulture I'); 
     lbxSubject.addItem('Horticulture I (OCS)'); 
     lbxSubject.addItem('Horticulture II'); 
     lbxSubject.addItem('Horticulture II (OCS)'); 
     lbxSubject.addItem('Integrated Math I'); 
     lbxSubject.addItem('Interior Design I'); 
     lbxSubject.addItem('Introduction to Math'); 
     lbxSubject.addItem('Japanese I'); 
     lbxSubject.addItem('JROTC I'); 
     lbxSubject.addItem('JROTC II'); 
     lbxSubject.addItem('JROTC III'); 
     lbxSubject.addItem('JROTC IV'); 
     lbxSubject.addItem('Latin I'); 
     lbxSubject.addItem('Latim II'); 
     lbxSubject.addItem('Latin III (Honors)'); 
     lbxSubject.addItem('Leadership Development'); 
     lbxSubject.addItem('Marketing Management'); 
     lbxSubject.addItem('Masonry I'); 
     lbxSubject.addItem('Masonry I (OCS)'); 
     lbxSubject.addItem('Masonry III'); 
     lbxSubject.addItem('Microsoft Excel and Access'); 
     lbxSubject.addItem('Microsoft Word PowerPoint and Publisher'); 
     lbxSubject.addItem('Multimedia and Webpage Design'); 
     lbxSubject.addItem('Music Business and Recording (Beginning)'); 
     lbxSubject.addItem('Occupational Preparations I'); 
     lbxSubject.addItem('Occupational Preparations II'); 
     lbxSubject.addItem('Occupational Preparations III'); 
     lbxSubject.addItem('Occupational Preparations IV'); 
     lbxSubject.addItem('Parent and Child Development');   
     lbxSubject.addItem('Parent and Child Development (OCS)'); 
     lbxSubject.addItem('Personal Finance');   
     lbxSubject.addItem('Personal Finance (OCS)'); 
     lbxSubject.addItem('Physical Science'); 
     lbxSubject.addItem('Physics (Honors)'); 
     lbxSubject.addItem('Pre-Calculus (Honors)'); 
     lbxSubject.addItem('Professional Management and Leadership I'); 
     lbxSubject.addItem('Professional Management and Leadership II'); 
     lbxSubject.addItem('Psychology'); 
     lbxSubject.addItem('Physcology (AP)'); 
     lbxSubject.addItem('Psychology (Honors)'); 
     lbxSubject.addItem('SAT Preparation'); 
     lbxSubject.addItem('Science and Technical Visualization I'); 
     lbxSubject.addItem('Science and Technical Visualization II'); 
     lbxSubject.addItem('Social Studies (OCS)'); 
     lbxSubject.addItem('Spanish I'); 
     lbxSubject.addItem('Spanish II'); 
     lbxSubject.addItem('Spanish III (Honors)'); 
     lbxSubject.addItem('Spanish IV (Honors)'); 
     lbxSubject.addItem('Special Topics of Mathematics'); 
     lbxSubject.addItem('Symphonic Band II (Beginning)'); 
     lbxSubject.addItem('Symphonic Band II (Intermediate)'); 
     lbxSubject.addItem('Symphonic Band II (Proficient)'); 
     lbxSubject.addItem('Technology Engineering and Design'); 
     lbxSubject.addItem('Theatre Arts (Beginning)'); 
     lbxSubject.addItem('Theatre Arts (Intermediate)'); 
     lbxSubject.addItem('US History'); 
     lbxSubject.addItem('US History (AP)'); 
     lbxSubject.addItem('US History (Honors)'); 
     lbxSubject.addItem('Visual Arts (Beginning)'); 
     lbxSubject.addItem('Visual Arts (Intermediate)'); 
     lbxSubject.addItem('Visual Arts (Proficient)'); 
     lbxSubject.addItem('Visual Arts (Advanced)'); 
     lbxSubject.addItem('Visual Arts Specialization in Ceramics (Advanced)'); 
     lbxSubject.addItem('Vocal Ensemble (Intermediate)'); 
     lbxSubject.addItem('Vocal Ensemble (Proficient)'); 
     lbxSubject.addItem('Wind Ensemble II (Intermediate)'); 
     lbxSubject.addItem('Wind Ensemble II (Proficient)'); 
     lbxSubject.addItem('Wind Ensemble II (Advanced)'); 
     lbxSubject.addItem('World Geography'); 
     lbxSubject.addItem('World History'); 
     lbxSubject.addItem('World History'); 
     lbxSubject.addItem('World History (Honors)'); 

    var lbxPeriod = app.createListBox().setId('lbxPeriod').setName('lbxPeriod'); 
     lbxSubject.setVisibleItemCount(1); 
     lbxPeriod.addItem('-- Select One --'); 
     lbxPeriod.addItem('1st Period'); 
     lbxPeriod.addItem('2nd Period'); 
     lbxPeriod.addItem('3rd Period'); 
     lbxPeriod.addItem('4th Period'); 

    var lblStudentNum = app.createLabel('Number of Students:'); 
    var txtStudentNum = app.createTextBox().setName('txtStudentNum'); 

    var radSource1 = app.createRadioButton('group1', 'Hard-Copy').setFormValue('Hard-Copy').setName('Hard-Copy').setId('Hard-Copy'); 
    var radSource2 = app.createRadioButton('group1', 'Electronic-Copy').setFormValue('Electronic-Copy').setName('Electronic-Copy').setId('Electronic-Copy'); 

    var radSource3 = app.createRadioButton('group2', 'Teacher-Made Exam').setFormValue('Teacher-Made Exam').setName('Teacher-Made').setId('Teacher-Made'); 
    var radSource4 = app.createRadioButton('group2', 'Elements Exam').setFormValue('Elements Exam').setName('Elements').setId('Elements'); 
    var radSource5 = app.createRadioButton('group2', 'Quia Exam').setFormValue('Quia Exam').setName('Quia').setId('Quia'); 

    var btnCreate = app.createButton('Create Event'); 

    //Create handler which will execute 'createEvents(e)' on clicking the button 
    var evtHandler = app.createServerClickHandler('createEvents'); 
     evtHandler.addCallbackElement(vertMainPanel); 
    //Add this handler to the button 
     btnCreate.addClickHandler(evtHandler); 

    //Add all the elemnts to the panel 
    vertMainPanel.add(lblTeacherName) 
     .add(txtTeacherName) 
     .add(lblExt) 
     .add(txtExt) 
     .add(lblDate) 
     .add(boxDate) 
     .add(lbxSubject) 
     .add(lbxPeriod) 
     .add(lblStudentNum) 
     .add(txtStudentNum) 
     .add(radSource1) 
     .add(radSource2) 
     .add(radSource3) 
     .add(radSource4) 
     .add(radSource5) 
     .add(btnCreate); 

    //Add this panel to the application 
    app.add(vertMainPanel); 

    //Return the application 
    return app; 
} 

function createEvents(e){ 

    //Get the active application 
    var app = UiApp.getActiveApplication(); 

    try{ 
    //Get the entries 
    var ssTeacher = e.parameter.txtTeacherName; 
    var ssExt = e.parameter.txtExt; 
    var ssSubject = e.parameter.lbxSubject; 
    var ssPeriod = e.parameter.lbxPeriod; 
    var ssStudentNum = e.parameter.txtStudentNum; 
    var ssSource = ""; 
    var ssType = ""; 
    var eventDate = e.parameter.boxDate; 
    var eventCalSubject = ssPeriod + ": " + ssTeacher + " (" + ssStudentNum + ")"; 
    var eventCalDetails = "Extension: " + ssExt + "\n" + 
      "Subject: " + ssSubject + "\n\n" + 
      "Source: " + ssSource + "\n" + 
      "Type: " + ssType + "\n"; 

    //Get the calendar 
    var cal = CalendarApp.getCalendarById('[email protected].com');//Change the calendar id 
    //Create the events 
    cal.createAllDayEvent(eventCalSubject, Utilities.formatDate(eventDate, 'EST', 'MM/DD/YYYY'), {description:eventCalDetails}); 

    //Log the entries in a spreadsheet 
    var ss = SpreadsheetApp.openById('0Aur3owCpuUY-dGJIOGZ1LXhqT2FNMGVXSGNJazFnUmc#gid=0');//Change the spreadhseet key to yours 
    var sheet = ss.getSheets()[0]; 
    sheet.getRange(sheet.getLastRow()+1, 1, 1, 10).setValues([[new Date(), eventDate, ssTeacher, ssExt, ssSubject, ssPeriod, ssSource, ssType, ssStudentNum, 'Event created']]); 

    //Show the confirmation message 
    app.add(app.createLabel('Kurzweil Calendar Event created successfully...')); 
    //Make the form panel invisible 
    app.getElementById('vertMainPanel').setVisible(false); 
    return app; 
    } 

    //If an error occurs, show it on the panel 
    catch(e){ 
    app.add(app.createLabel('Error occured: '+ e)); 
    return app; 
    } 
} 
+0

Что ваш вопрос? И можете ли вы поделиться кодом, который у вас уже есть, который показывает, что у вас есть вышеперечисленные требования? – rene

+0

Я добавил свой код выше и попытался уточнить мой вопрос ... –

+0

В чем же проблема или трудности с этой задачей? Вы пробовали что-то, что работает неправильно? – Brandon

ответ

0

Это не должно быть слишком трудно получить ... Вы просто должны сохранить количество подписок в каком-то месте (например, в scriptProperties) в функции обработчика, и если она достигает максимального числа, то вы просто отключите кнопку отправки, чтобы никакая форма не была проверена.

В вашей функции doGet легко отправить кнопку отправки в соответствии с соответствующим параметром scriptProperty, который вы определили, и показать ярлык, который объясняет, почему подписка закрыта.

Если установить предел 20, то вы получите максимум 21 (учитывая есть 1 компьютер/резервирования), но если вы установите его на 19, то вы получите 20.

+0

Можете ли вы привести мне пример ... похоже, что это будет работать в зависимости от того, как была отправлена ​​форма. Однако есть ли способ заставить его работать на основе TOTAL количества студентов, перечисленных в электронной таблице в определенный день? Студенты будут перечисляться разными классами в день, поэтому необходимо иметь отсечку. –

+0

, не зная ваших данных, нелегко привести рабочий пример ... Думаю, для вас ясно, как вы организуете свое мероприятие, но не для меня ... :) –

+0

может ли ученик подписаться на все темы? и период? Как вам их подсчитать? каковы критерии? –

Смежные вопросы