]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/conify/global/action/survey/edit.js
survey list and edit interface. some known issues (i18n) that will be cleanup up...
[working/Evergreen.git] / Open-ILS / web / js / ui / default / conify / global / action / survey / edit.js
1 dojo.require('dojox.grid.DataGrid');
2 dojo.require('dojox.grid.cells.dijit');
3 dojo.require('dojo.data.ItemFileWriteStore');
4 dojo.require('dojo.date.stamp');
5 dojo.require('dijit.form.TextBox');
6 dojo.require('dijit.form.Button');
7 dojo.require('dijit.Dialog');
8 dojo.require('dojox.widget.PlaceholderMenuItem');
9 dojo.require('fieldmapper.OrgUtils');
10 dojo.require('openils.widget.OrgUnitFilteringSelect');
11 dojo.require('openils.PermaCrud');
12 dojo.require('openils.DojoPatch');
13 dojo.require('openils.widget.GridColumnPicker');
14 dojo.require('openils.widget.EditPane');
15
16 var surveyId;
17 var startDate;
18 var endDate;
19 var today;
20 function drawSurvey(svyId) {
21     today = new Date();    
22     var surveyTable = dojo.byId('edit-pane');
23     var surveyHead = dojo.create('thead', {style: "background-color: #99CCFF", innerHTML: "Survey ID #" +svyId}, surveyTable);
24     var pcrud = new openils.PermaCrud();
25     var survey = pcrud.retrieve('asv', svyId);
26     startDate = dojo.date.stamp.fromISOString(survey.start_date());
27     endDate = dojo.date.stamp.fromISOString(survey.end_date());
28     var pane = new openils.widget.EditPane({fmObject : survey, hideActionButtons:false}, dojo.byId('edit-pane'));
29     if ( endDate > today) {
30         var buttonBody = dojo.create( 'tbody', {innerHTML: "End Survey Now"}, surveyTable);
31         var endButton = new dijit.form.Button({onClick:function() {endSurvey(survey.id())} }, buttonBody);
32     }       
33     pane.fieldOrder = ['id', 'name', 'description', 'owner', 'start_date', 'end_date'];
34     pane.onCancel = cancelEdit;
35     pane.startup();
36     getQuestions(svyId, survey);
37
38 }
39
40 function cancelEdit(){
41     document.location.href = "/eg/conify/global/action/survey";
42 }
43
44 function endSurvey(svyId) {
45     var pcrud = new openils.PermaCrud();
46     var survey = pcrud.retrieve('asv', svyId);
47     var today = new Date();
48     var date = dojo.date.stamp.toISOString(today);
49     survey.end_date(date);
50     survey.ischanged(true);
51     return pcrud.update(survey);
52
53 }
54
55 // all functions for question manipulation
56
57 function getQuestions(svyId, survey) {
58   
59     surveyId = svyId;
60       
61     var pcrud = new openils.PermaCrud();
62     var questions = pcrud.search('asvq', {survey:svyId});
63     
64     for(var i in questions) {
65         questionId = questions[i].id(); 
66         var answers = pcrud.search('asva', {question:questionId});
67         if (answers)
68             drawQuestionBody(questions[i], answers, survey);
69     }
70     if ( startDate > today) newQuestionBody(surveyId);
71 }
72  
73 function newQuestionBody(svyId) {
74     var surveyTable = dojo.byId("survey_table");
75     var surveyBody = dojo.create('tbody', {style: "background-color: #d9e8f9"}, surveyTable);
76     var questionRow = dojo.create('tr', null, surveyBody);
77     var questionLabel = dojo.create('td',{ innerHTML: "Question"}, questionRow, "first");
78     var questionTextbox = dojo.create('td', null, questionRow, "second");
79     var qInput = new dijit.form.TextBox(null, questionTextbox);
80     var questionButton = dojo.create('td', { innerHTML: "Save & Add Answers" }, questionRow);
81     var qButton = new dijit.form.Button({onClick:function() {newQuestion(svyId, qInput.getValue(), questionRow)} }, questionButton);
82     
83 }
84
85 function drawQuestionBody(question, answers, survey){
86
87     var surveyTable = dojo.byId('survey_table');
88     var surveyBody = dojo.create( 'tbody', {quid:question.id(), id:("q" + question.id()), style: "background-color: #d9e8f9"}, surveyTable);
89     var questionRow = dojo.create('tr', {quid:question.id()}, surveyBody);
90     var questionLabel = dojo.create('td', {quid:question.id(), innerHTML: "Question"}, questionRow, "first");
91     var questionTextbox = dojo.create('td', {quid: question.id() }, questionRow, "second");
92     var qInput = new dijit.form.TextBox(null, questionTextbox);
93     qInput.attr('value', question.question());
94     if (startDate > today){
95         var questionButton = dojo.create('td', {quid: question.id(), innerHTML: "Delete Question & Answers" }, questionRow);
96         var qButton = new dijit.form.Button({onClick:function() {deleteQuestion(question.id(), surveyBody) }}, questionButton);
97         var qChangesButton = dojo.create('td', {quid: question.id(), innerHTML: "Save Changes" }, questionRow);
98         var qcButton = new dijit.form.Button({onClick:function() {changeQuestion(question.id(), qInput.attr('value')) }}, qChangesButton);
99        
100     }
101     for (var i in answers) {
102         if(!answers) return'';
103         drawAnswer(answers[i], question.id(), surveyBody, survey);
104     }
105     drawNewAnswerRow(question.id(), surveyBody);  
106 }
107
108 function newQuestion(svyId, questionText, questionRow) {
109     var pcrud = new openils.PermaCrud();
110     var question = new asvq();
111     question.survey(svyId);
112     question.question(questionText);
113     question.isnew(true);
114     pcrud.create(question, 
115                  {oncomplete: function(r) 
116                          { var q = openils.Util.readResponse(r); 
117                              questionRow.parentNode.removeChild(questionRow);
118                              drawQuestionBody(q, null);
119                              newQuestionBody(svyId);
120                          } 
121                  }
122                  ); 
123 }
124
125 function changeQuestion(quesId, questionText) {
126     var pcrud = new openils.PermaCrud();
127     var question = pcrud.retrieve('asvq', quesId);
128     question.question(questionText);
129     question.ischanged(true);
130     return pcrud.update(question);
131 }
132
133 function deleteQuestion(quesId, surveyBody) {
134     var pcrud = new openils.PermaCrud();
135     var delQuestion = new asvq();
136     var answers = pcrud.search('asva', {question:quesId});
137     for(var i in answers){
138         var ansId = answers[i].id();
139         deleteAnswer(ansId);
140     }
141     delQuestion.id(quesId);
142     delQuestion.isdeleted(true);
143     surveyBody.parentNode.removeChild(surveyBody);
144     return pcrud.delete(delQuestion);
145
146 }
147
148 // all functions for answer manipulation
149
150 function drawAnswer(answer, qid, surveyBody, survey) {
151     var surveyBody = dojo.byId(("q" + qid)); 
152     var answerRow = dojo.create('tr', {anid: answer.id(), style: "background-color: #FFF"}, surveyBody);
153     var answerSpacer =  dojo.create('td', {anid: answer.id()}, answerRow, "first");
154     var answerLabel =  dojo.create('td', {anid: answer.id(), style: "float: right", innerHTML: "Answer" }, answerRow, "second");
155     var answerTextbox = dojo.create('td', {anid: answer.id() }, answerRow, "third");
156     var input = new dijit.form.TextBox(null, answerTextbox);
157     input.attr('value', answer.answer());
158     if (startDate > today){
159         var answerSpacer =  dojo.create('td', {anid: answer.id()}, answerRow);
160         var delanswerButton = dojo.create('td', {anid: answer.id(), innerHTML: "Delete Answer" }, answerRow);
161         var aid = answer.id();
162         var aButton = new dijit.form.Button({onClick:function(){deleteAnswer(aid);answerRow.parentNode.removeChild(answerRow)} }, delanswerButton);
163         var aChangesButton = dojo.create('td', {anid: qid, innerHTML: "Save Changes" }, answerRow);
164         var acButton = new dijit.form.Button({onClick:function() {changeAnswer(answer.id(), input.attr('value')) }}, aChangesButton);
165     }
166 }
167
168 function drawNewAnswerRow(qid, surveyBody) {
169     var answerRow = dojo.create('tr', {quid: qid, style: "background-color: #FFF"}, surveyBody);
170     var answerSpacer =  dojo.create('td', {quid: qid}, answerRow, "first");
171     var answerLabel =  dojo.create('td', {quid: qid, innerHTML: "Answer", style: "float:right" }, answerRow, "second");
172     var answerTextbox = dojo.create('td', {quid: qid }, answerRow, "third");
173     var input = new dijit.form.TextBox(null, answerTextbox);
174     var answerButton = dojo.create('td', {anid: qid, innerHTML: "Add Answer" }, answerRow);
175     var aButton = new dijit.form.Button({onClick:function() {newAnswer(qid, input.attr('value'), answerRow, surveyBody)} }, answerButton);
176
177 }
178
179
180 function deleteAnswer(ansId) {
181     var pcrud = new openils.PermaCrud();
182     var delAnswer = new asva();
183     delAnswer.id(ansId);
184     delAnswer.isdeleted(true);
185     return pcrud.delete(delAnswer);
186   
187 }
188 function newAnswer(quesId, answerText, answerRow, surveyBody) {
189     var pcrud = new openils.PermaCrud();
190     var answer = new asva();
191     answer.question(quesId);
192     answer.answer(answerText);
193     answer.isnew(true);
194     answerRow.parentNode.removeChild(answerRow);
195     drawAnswer(answer, answer.question());
196     drawNewAnswerRow(quesId, surveyBody);
197     return pcrud.create(answer);
198 }
199
200
201 function changeAnswer(ansId, answerText) {
202     var pcrud = new openils.PermaCrud();
203     var answer = pcrud.retrieve('asva', ansId);
204     answer.answer(answerText);
205     answer.ischanged(true);
206     return pcrud.update(answer);
207 }
208
209
210
211
212
213