##// END OF EJS Templates
- Corregido el bug cuando se agrega el nuevo perfil y agregada nuevos filtros a la plantilla administrador de la aplicacion.
jsalyrosas -
r189:190
parent child
Show More
@@ -1,42 +1,45
1 1 from abscontrol.models import Profile, Pattern, AntennaUp, AntennaDown
2 2 from django.contrib import admin
3 3
4 4 class AntennaUpInline(admin.StackedInline):
5 5 model = AntennaUp
6 6
7 7 class AntennaDownInline(admin.StackedInline):
8 8 model = AntennaDown
9 9
10 10 class PatternAdmin(admin.ModelAdmin):
11 11 fieldsets = [
12 12 (None, {'fields': ['value']}),
13 13 ('Date information', {'fields': ['date_create', 'date_modified'], 'classes': ['collapse']}),
14 14 ]
15 15 inlines = [AntennaUpInline]
16 16 inlines = [AntennaDownInline]
17 17
18 18 class PatternInline(admin.StackedInline):
19 19 model = Pattern
20 20 readonly_fields = ['date_create', 'date_modified', 'hits']
21 21
22 22 fieldsets = [
23 23 (None, {'fields': ['value']}),
24 24 ('Date information', {'fields': [('date_create', 'date_modified')], 'classes': ['collapse']}),
25 25 ('State', {'fields': ['hits', 'state'], 'classes': ['collapse', 'wide', 'extrapretty']}),
26 26 ]
27 27 extra = 0
28 28
29 29 class ProfileAdmin(admin.ModelAdmin):
30 list_display = ('name', 'date_create','hits','state')
31 list_filter = ['state','date_create','date_modified']
32 date_hierarchy = 'date_create'
30 33 readonly_fields = ['date_create', 'date_modified','hits']
31 34 fieldsets = [
32 35 (None, {'fields': ['name']}),
33 36 ('Date information', {'fields': [('date_create', 'date_modified')], 'classes': ['collapse']}),
34 37 ('State', {'fields': ['hits', 'state'], 'classes': ['collapse']}),
35 38 ]
36 39 inlines = [PatternInline]
37 40
38 41
39 42 admin.site.register(Profile, ProfileAdmin)
40 43 #admin.site.register(Pattern, PatternAdmin)
41 44 #admin.site.register(AntennaUp)
42 45 #admin.site.register(AntennaDown) No newline at end of file
@@ -1,25 +1,26
1 1 from django.conf.urls import patterns, url
2 2
3 3 urlpatterns = patterns('abscontrol.views',
4 4 url(r'^$', 'index'),
5 5 url(r'^new/$', 'new'),
6 6 url(r'^save/$', 'save'),
7 7 url(r'^view/(?P<profile_id>\d+)/$', 'view'),
8 8 url(r'^edit/(?P<profile_id>\d+)/$', 'edit'),
9 9 url(r'^update/(?P<profile_id>\d+)/$', 'update'),
10 url(r'^upgrade/(?P<profile_id>\d+)/$', 'upgrade'),
10 11 url(r'^changeName/(?P<profile_id>\d+)/$', 'changeName'),
11 12 #url(r'^(?P<profile_id>\d+)/$', 'detail'),
12 13 url(r'^(?P<profile_id>\d+)/add/$', 'addPattern'),
13 14 url(r'^(?P<profile_id>\d+)/save/$', 'savePattern'),
14 15 url(r'^(?P<profile_id>\d+)/edit/(?P<pattern_id>\d+)/$', 'editPattern'),
15 16 url(r'^(?P<profile_id>\d+)/view/(?P<pattern_id>\d+)/$', 'viewPattern'),
16 17 url(r'^(?P<profile_id>\d+)/delete/(?P<pattern_id>\d+)/$', 'deletePattern'),
17 18 #url(r'^(?P<poll_id>\d+)/results/$', 'results'),
18 19 #url(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
19 20 url(r'^import/$', 'importProfile'),
20 21 url(r'^upload/$', 'upload'),
21 22 #url(r'^saveImport/$', 'saveImport'),
22 23 url(r'^(?P<profile_id>\d+)/(?P<pattern_id>\d+)/overjro/(?P<antenna_id>\d+)/$', 'overJRO'),
23 24 url(r'^export/(?P<profile_id>\d+)/$', 'export'),
24 25 url(r'^send/(?P<profile_id>\d+)/$', 'send'),
25 26 ) No newline at end of file
@@ -1,410 +1,430
1 1 from django.shortcuts import render_to_response, redirect
2 2 from django.http import HttpResponse
3 3 from django.conf import settings
4 4 from django.utils.encoding import smart_str
5 5 from django.core.servers.basehttp import FileWrapper
6 6 import mimetypes
7 7
8 8 from datetime import datetime
9 9
10 10 from abscontrol.models import Profile, Pattern, AntennaDown, AntennaUp
11 11
12 12 from util.readABSFile import readABSFile
13 13 from util.saveABSFile import saveABSFile
14 14 from scripts.sendFile import sendFile
15 15
16 16 txtAntenna = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
17 17 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
18 18 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
19 19 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
20 20 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
21 21 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
22 22 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
23 23 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]"
24 24
25 25 txtTxUp = "[[1,1,1,1,1,1,1,1]," \
26 26 "[1,1,1,1,1,1,1,1]," \
27 27 "[1,1,1,1,1,1,1,1]," \
28 28 "[1,1,1,1,1,1,1,1]," \
29 29 "[1,1,1,1,1,1,1,1]," \
30 30 "[1,1,1,1,1,1,1,1]," \
31 31 "[1,1,1,1,1,1,1,1]," \
32 32 "[1,1,1,1,1,1,1,1]]"
33 33
34 34 txtTxDown = "[[1,1,1,1,0,0,0,0]," \
35 35 "[1,1,1,1,0,0,0,0]," \
36 36 "[1,1,1,1,0,0,0,0]," \
37 37 "[1,1,1,1,0,0,0,0]," \
38 38 "[0,0,0,0,1,1,1,1]," \
39 39 "[0,0,0,0,1,1,1,1]," \
40 40 "[0,0,0,0,1,1,1,1]," \
41 41 "[0,0,0,0,1,1,1,1]]"
42 42
43 43 txtRxUp = "[[0,0,0,0,1,1,1,1]," \
44 44 "[0,0,0,0,1,1,1,1]," \
45 45 "[0,0,0,0,1,1,1,1]," \
46 46 "[0,0,0,0,1,1,1,1]," \
47 47 "[1,1,1,1,1,1,1,1]," \
48 48 "[1,1,1,1,1,1,1,1]," \
49 49 "[1,1,1,1,1,1,1,1]," \
50 50 "[1,1,1,1,1,1,1,1]]"
51 51
52 52 txtRxDown = "[[1,1,1,1,1,1,1,1]," \
53 53 "[1,1,1,1,1,1,1,1]," \
54 54 "[1,1,1,1,1,1,1,1]," \
55 55 "[1,1,1,1,1,1,1,1]," \
56 56 "[1,1,1,1,1,1,1,1]," \
57 57 "[1,1,1,1,1,1,1,1]," \
58 58 "[1,1,1,1,1,1,1,1]," \
59 59 "[1,1,1,1,1,1,1,1]]"
60 60
61 61 txtUes = "[0.533333,0.00000,1.06667,0.00000]"
62 62
63 63 def index(request):
64 64 #latest_poll_list = profileAntenna.objects.all().order_by('-pub_date')[:5]
65 65 profile_list = Profile.objects.filter(state=1)
66 66 return render_to_response('abscontrol/index.html', {'profile_list': profile_list})
67 67
68 68 def new(request):
69 69 profile_list = Profile.objects.filter(state=1)
70 70 txtProfile = datetime.now().strftime("%Y%m%d%H%M%S%f")
71 71 newprofile = Profile(name=txtProfile)
72 72 newprofile.save()
73 73
74 74 lsPatterns = None
75 75
76 76 return render_to_response('abscontrol/new.html', {'profile_list': profile_list,
77 77 'txtAntenna' : txtAntenna,
78 78 'profile_name' : newprofile.name,
79 79 'profile_id' : newprofile.id,
80 80 'lsPatterns' : lsPatterns,
81 81 'txtUes' : txtUes, 'txtTxUp' : txtTxUp,
82 82 'txtTxDown' : txtTxDown, 'txtRxUp' : txtRxUp,
83 83 'txtRxDown' : txtRxDown,
84 84 'range' : range(8),
85 85 })
86 86
87 87 def save(request):
88 88
89 89 txtProfile = request.POST["txtProfile"]
90 90
91 91 txtAntennaUp = request.POST["txtAntennaUp"]
92 92 txtTxUp = request.POST["txtTxUp"]
93 93 txtRxUp = request.POST["txtRxUp"]
94 94 txtUesUp = request.POST["txtUesUp"]
95 95
96 96 txtAntennaDown = request.POST["txtAntennaDown"]
97 97 txtTxDown = request.POST["txtTxDown"]
98 98 txtRxDown = request.POST["txtRxDown"]
99 99 txtUesDown = request.POST["txtUesDown"]
100 100
101 101 newprofile = Profile(name=txtProfile)
102 102 newprofile.save()
103 103
104 104 newpattern = newprofile.pattern_set.create(value=1)
105 105 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
106 106 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
107 107
108 108 newurl = '/abscontrol/view/%d' % newprofile.id
109 109
110 return redirect(newurl)
111
112 # Update temporal experiment
113 def upgrade(request, profile_id):
114 txtAntennaUp = request.POST["txtAntennaUp"]
115 txtTxUp = request.POST["txtTxUp"]
116 txtRxUp = request.POST["txtRxUp"]
117 txtUesUp = request.POST["txtUesUp"]
118
119 txtAntennaDown = request.POST["txtAntennaDown"]
120 txtTxDown = request.POST["txtTxDown"]
121 txtRxDown = request.POST["txtRxDown"]
122 txtUesDown = request.POST["txtUesDown"]
123
124 objProfile = Profile.objects.get(pk=profile_id)
125 newpattern = objProfile.pattern_set.create(value=1)
126 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
127 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
128
129 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), newpattern.id)
110 130 return redirect(newurl)
111 131
112 132 def update(request, profile_id):
113 133 txtProfile = request.POST["txtProfile"]
114 134
115 135 objProfile = Profile.objects.get(pk=profile_id)
116 136 objProfile.name = txtProfile
117 137 objProfile.state = 1
118 138 objProfile.save()
119 139
120 140 newurl = '/abscontrol/view/%d' % objProfile.id
121 141 return redirect(newurl)
122 142
123 143 def changeName(request, profile_id):
124 144 profile_list = Profile.objects.filter(state=1)
125 145 objProfile = Profile.objects.get(pk=profile_id)
126 146 lsPatterns = objProfile.pattern_set.all()
127 147
128 148 return render_to_response('abscontrol/changeName.html', {'profile_list': profile_list,
129 149 'objProfile': objProfile,
130 150 'lsPatterns' : lsPatterns,
131 151 })
132 152
133 153 def view(request, profile_id):
134 154 nextPattern = 0
135 155
136 156 if request.method == 'GET' and 'pattern' in request.GET:
137 157 pattern_value = request.GET["pattern"]
138 158 else:
139 159 pattern_value = 1
140 160
141 161 profile_list = Profile.objects.filter(state=1)
142 162 objProfile = Profile.objects.get(pk=profile_id)
143 163
144 164 lsPatterns = objProfile.pattern_set.all()
145 165 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
146 166 objAntennaUp = patternChoosen.antennaup_set.get()
147 167 objAntennaDown = patternChoosen.antennadown_set.get()
148 168
149 169 if len(lsPatterns) > 1:
150 170 if pattern_value == 1:
151 171 nextValuePattern = pattern_value + 1
152 172 nextPattern = objProfile.pattern_set.get(value=nextValuePattern)
153 173
154 174
155 175 return render_to_response('abscontrol/view.html', {'objProfile': objProfile, 'profile_list': profile_list,
156 176 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
157 177 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
158 178 'nextPattern' : nextPattern,
159 179 })
160 180
161 181 def edit(request, profile_id):
162 182 if request.method == 'GET' and 'pattern' in request.GET:
163 183 pattern_value = request.GET["pattern"]
164 184 else:
165 185 pattern_value = 1
166 186
167 187 profile_list = Profile.objects.filter(state=1)
168 188 objProfile = Profile.objects.get(pk=profile_id)
169 189
170 190 lsPatterns = objProfile.pattern_set.all()
171 191 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
172 192 objAntennaUp = patternChoosen.antennaup_set.get()
173 193 objAntennaDown = patternChoosen.antennadown_set.get()
174 194
175 195 return render_to_response('abscontrol/edit.html', {'objProfile': objProfile, 'profile_list': profile_list,
176 196 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
177 197 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
178 198 })
179 199
180 200 def addPattern(request, profile_id):
181 201 profile_list = Profile.objects.filter(state=1)
182 202 objProfile = Profile.objects.get(pk=profile_id)
183 203
184 204 return render_to_response('abscontrol/addPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
185 205 'txtAntenna' : txtAntenna, 'txtUes' : txtUes,
186 206 'txtTxUp' : txtTxUp, 'txtTxDown' : txtTxDown,
187 207 'txtRxUp' : txtRxUp, 'txtRxDown' : txtRxDown,
188 208 })
189 209
190 210 def editPattern(request, profile_id, pattern_id):
191 211 profile_list = Profile.objects.filter(state=1)
192 212 objProfile = Profile.objects.get(pk=profile_id)
193 213 lsPatterns = objProfile.pattern_set.all()
194 214 patternChoosen = Pattern.objects.get(pk=pattern_id)
195 215 objAntennaUp = patternChoosen.antennaup_set.get()
196 216 objAntennaDown = patternChoosen.antennadown_set.get()
197 217
198 218 return render_to_response('abscontrol/editPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
199 219 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
200 220 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
201 221 })
202 222
203 223 def savePattern(request, profile_id):
204 224 pattern_id = 0
205 225 method = "save"
206 226
207 227 if 'pattern_id' in request.POST:
208 228 pattern_id = request.POST["pattern_id"]
209 229 method = "update"
210 230
211 231 maxValuePattern = 0
212 232 txtAntennaUp = request.POST["txtAntennaUp"]
213 233 txtTxUp = request.POST["txtTxUp"]
214 234 txtRxUp = request.POST["txtRxUp"]
215 235 txtUesUp = request.POST["txtUesUp"]
216 236
217 237 txtAntennaDown = request.POST["txtAntennaDown"]
218 238 txtTxDown = request.POST["txtTxDown"]
219 239 txtRxDown = request.POST["txtRxDown"]
220 240 txtUesDown = request.POST["txtUesDown"]
221 241
222 242 mode = request.POST["mode"]
223 243
224 244 if method == "save":
225 245 objProfile = Profile.objects.get(pk=profile_id)
226 246 lsPatterns = objProfile.pattern_set.all()
227 247 if len(lsPatterns) > 0:
228 248 for element in lsPatterns:
229 249 if element.value > maxValuePattern:
230 250 maxPattern = element.value
231 251 else:
232 252 maxPattern = 0
233 253
234 254 if maxPattern < 10 :
235 255 newValuePattern = maxPattern + 1
236 256 newpattern = objProfile.pattern_set.create(value=newValuePattern)
237 257 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
238 258 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
239 259 error = 0
240 260 else:
241 261 error = 1 # Can not add more patterns
242 262
243 263 if mode == "e":
244 264 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), newpattern.id)
245 265 else:
246 266 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), newpattern.id)
247 267 else:
248 268 txtAntennaUpId = request.POST["txtAntennaUpId"]
249 269 objAntennaUp = AntennaUp.objects.get(pk=txtAntennaUpId)
250 270 objAntennaUp.value = txtAntennaUp
251 271 objAntennaUp.tx = txtTxUp
252 272 objAntennaUp.rx = txtRxUp
253 273 objAntennaUp.ues = txtUesUp
254 274 objAntennaUp.save()
255 275
256 276 txtAntennaDownId = request.POST["txtAntennaDownId"]
257 277 objAntennaDown = AntennaDown.objects.get(pk=txtAntennaDownId)
258 278 objAntennaDown.value = txtAntennaDown
259 279 objAntennaDown.tx = txtTxDown
260 280 objAntennaDown.rx = txtRxDown
261 281 objAntennaDown.ues = txtUesDown
262 282 objAntennaDown.save()
263 283
264 284 if mode == "e":
265 285 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), int(pattern_id))
266 286 else:
267 287 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), int(pattern_id))
268 288
269 289 return redirect(newurl)
270 290
271 291 def viewPattern(request, profile_id, pattern_id):
272 292
273 293 profile_list = Profile.objects.filter(state=1)
274 294 objProfile = Profile.objects.get(pk=profile_id)
275 295
276 296 patternChoosen = Pattern.objects.get(pk=pattern_id)
277 297
278 298 objAntennaUp = patternChoosen.antennaup_set.get()
279 299 objAntennaDown = patternChoosen.antennadown_set.get()
280 300
281 301 lsPatterns = objProfile.pattern_set.all()
282 302
283 303 return render_to_response('abscontrol/viewPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
284 304 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
285 305 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
286 306 })
287 307
288 308 def deletePattern(request, profile_id, pattern_id):
289 309 newurl = '/abscontrol/edit/%d' % int(profile_id)
290 310
291 311 return redirect(newurl)
292 312
293 313 def importProfile(request):
294 314 profile_list = Profile.objects.filter(state=1)
295 315 return render_to_response('abscontrol/import.html', {'profile_list': profile_list,})
296 316
297 317 def upload(request):
298 318 profile_list = Profile.objects.filter(state=1)
299 319 if request.method == 'POST':
300 320 txtFilename = request.FILES['txtFile']
301 321 if txtFilename:
302 322 destination = open('/tmp/'+txtFilename.name, 'wb+')
303 323 for chunk in txtFilename.chunks():
304 324 destination.write(chunk)
305 325 destination.close()
306 326 filename = '/tmp/'+txtFilename.name
307 327 readFile = readABSFile(filename)
308 328 expName, num_patterns, patterns = readFile.getMetadata()
309 329
310 330 if expName != "" and num_patterns > 0:
311 331 newprofile = Profile(name=expName)
312 332 newprofile.save()
313 333 newprofile.state = 1
314 334
315 335 for element in patterns:
316 336 newpattern = newprofile.pattern_set.create(value=element["number"])
317 337 newpattern.antennaup_set.create(value=element["up"])
318 338 newpattern.antennadown_set.create(value=element["down"])
319 339
320 340 newprofile.save()
321 341
322 342 newurl = '/abscontrol/edit/%d' % int(newprofile.id)
323 343 return redirect(newurl)
324 344 else:
325 345 txtError = "Experiment's name not found or the number of patterns is 0."
326 346 return render_to_response('abscontrol/error.html', {'profile_list': profile_list,
327 347 'txtError' : txtError, })
328 348 else:
329 349 txtError = "No file."
330 350
331 351 return render_to_response('abscontrol/error.html', {'profile_list': profile_list, 'txtError' : txtError, })
332 352
333 353 def overJRO(request, profile_id, pattern_id, antenna_id):
334 354 if request.GET["beam"] == "Up":
335 355 objAntenna = AntennaUp.objects.get(pk=antenna_id)
336 356 else:
337 357 objAntenna = AntennaDown.objects.get(pk=antenna_id)
338 358 objProfile = Profile.objects.get(pk=profile_id)
339 359 exp_name = objProfile.name
340 360
341 361 phase_tx = objAntenna.value
342 362 gain_tx = objAntenna.tx
343 363 gain_rx = objAntenna.rx
344 364 ues_tx = objAntenna.ues
345 365 only_rx = objAntenna.only_rx
346 366
347 367 return exp_name, phase_tx, gain_tx, gain_rx, ues_tx, only_rx
348 368
349 369 def export(request, profile_id):
350 370 listPatterns = []
351 371 objProfile = Profile.objects.get(pk=profile_id)
352 372 exp_name = objProfile.name
353 373 lsPatterns = objProfile.pattern_set.all()
354 374 for element in lsPatterns:
355 375 objAntennaUp = element.antennaup_set.get()
356 376 objAntennaDown = element.antennadown_set.get()
357 377 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
358 378 listPatterns.append(dicPatterns)
359 379
360 380 absFile = saveABSFile()
361 381 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
362 382 filename, filesize = absFile.save()
363 383
364 384 wrapper = FileWrapper( open( filename, "r" ) )
365 385 content_type = mimetypes.guess_type( filename )[0]
366 386
367 387 response = HttpResponse(wrapper, content_type = content_type)
368 388 response['Content-Description'] = 'File Transfer'
369 389 response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(filename)
370 390 response['Content-Transfer-Encoding'] = 'binary'
371 391 response['Expires'] = '0'
372 392 response['Cache-Control'] = 'must-revalidate'
373 393 response['Pragma'] = 'public'
374 394 response['Content-Length'] = '%s' % str(filesize)
375 395 response['X-Sendfile'] = '%s' % smart_str(filename)
376 396
377 397 return response
378 398
379 399 def send(request, profile_id):
380 400 listPatterns = []
381 401 objProfile = Profile.objects.get(pk=profile_id)
382 402 exp_name = objProfile.name
383 403
384 404 lsPatterns = objProfile.pattern_set.all()
385 405 for element in lsPatterns:
386 406 objAntennaUp = element.antennaup_set.get()
387 407 objAntennaDown = element.antennadown_set.get()
388 408 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
389 409 listPatterns.append(dicPatterns)
390 410
391 411 absFile = saveABSFile()
392 412 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
393 413 filename, filesize = absFile.save()
394 414
395 415 apiclient = sendFile()
396 416 apiclient.execute(filename)
397 417 output = apiclient.getOutput()
398 418
399 419 if output == "OK":
400 420 message = "File sent successfully."
401 421 objProfile.hits += 1
402 422 objProfile.save()
403 423 else:
404 424 message = "Error sending file."
405 425
406 426 profile_list = Profile.objects.all()
407 427
408 428 return render_to_response('abscontrol/sendFile.html', {'message': message, "profile_list" : profile_list,
409 429 'objProfile': objProfile,
410 430 })
@@ -1,467 +1,467
1 1 /*
2 2 * font-family: 'Droid Sans', sans-serif;
3 3 * font-family: 'Ubuntu', sans-serif;
4 4 * font-family: 'Open Sans', sans-serif;
5 5 * font-family: 'Open Sans Condensed', sans-serif;
6 6 * font-family: 'Roboto Condensed', sans-serif;
7 7 */
8 8
9 9 body {
10 10 padding: 0;
11 11 margin: 0;
12 12 font-size: 12px; }
13 13
14 14 header {
15 15 width: 980px;
16 16 height: 50px;
17 17 text-align: center;
18 18 line-height: 50px;
19 19 border: 0px solid #fcc !important; }
20 20
21 21 #schema {
22 22 margin: 0 auto;
23 23 width: 980px;
24 24 padding: 10px 10px;
25 25 border: 0px solid #f00 !important; }
26 26
27 27 #content {
28 28 margin: 5px 0px;
29 29 border: 0px solid #1cc; }
30 30
31 31 #topcolumn {
32 32 float: left;
33 33 width: 980px;
34 34 height: 40px;
35 35 line-height: 35px;
36 36 margin: 2px 0px;
37 37 border: 1px solid #ddd !important;
38 38 box-shadow: 2px 2px 5px #888; }
39 39
40 40 #maincolumn {
41 41 float: left;
42 42 width: 980px;
43 43 margin: 2px 0px;
44 44 padding: 0px 0px;
45 45 border: 1px solid #ddd !important;
46 46 box-shadow: 2px 2px 5px #666; }
47 47
48 48 footer {
49 49 height: 30px;
50 50 line-height: 30px;
51 51 text-align: center;
52 52 margin: 0px 0px;
53 53 border: 0px solid #200 !important;
54 54 box-shadow: 2px 2px 5px #888; }
55 55
56 56 .cleardivs {
57 57 clear: both;
58 58 border: 0px solid #400;
59 59 height: 0px; }
60 60
61 61 textarea {
62 62 resize: none;
63 63 overflow: hidden; }
64 64
65 65 /****************************************************************************************/
66 66 /****** ESTILOS GENERALES *****************/
67 67 /****************************************************************************************/
68 68 .mnu {
69 69 height: 22px;
70 70 border: 0px solid #c55 !important; }
71 71
72 72 .mnu li {
73 73 display:inline; }
74 74
75 75 .MnuVertical, .MnuHorizontal {
76 76 font-family: 'Droid Sans', sans-serif;
77 77 font-size: inherit;
78 78 font-style: normal;
79 79 text-shadow: 2px 2px #eee; }
80 80
81 81 .MnuHorizontal ul {
82 82 list-style: none;
83 83 list-style-type: none;
84 84 margin: 0; }
85 85
86 86 /*.MnuHorizontal{
87 87 display: -webkit-box;
88 88 -webkit-box-orient:horizontal; }
89 89
90 90 .MnuHorizontal a{
91 91 display:block;
92 92 padding:10px;
93 93 -webkit-box-flex:1;
94 94 text-align:center; }*/
95 95
96 96 /****************************************************************************************/
97 97 /****** MENU DE NAVEGACION DE PERFILES *************/
98 98 /****************************************************************************************/
99 99 #infoProfiles {
100 100 float: left;
101 101 width: 300px;
102 102 margin: 0px;
103 103 padding: 2px 0px;
104 104 border: 0px solid #1cc !important; }
105 105
106 106 #infoProfiles label {
107 107 padding: 10px 10px 10px 12px;
108 108 margin: 10px 0; }
109 109
110 110 #infoProfiles select {
111 111 padding: 4px 0px; margin: 0;
112 112 font-family: 'Droid Sans', sans-serif;
113 113 font-size: 12px;
114 114 letter-spacing: 0.029em;
115 115 width: 200px; }
116 116
117 117 #mnuProfiles {
118 118 margin: 0;
119 119 float: right;
120 120 padding: 2px 10px;
121 121 border: 0px solid #1494F6 !important; }
122 122
123 123 #mnuProfiles ul {
124 124 list-style: none;
125 125 list-style-type: none;
126 126 margin: 0;
127 127 padding-left: 20px;
128 128 border: 0px solid #f00 !important; }
129 129
130 130 #mnuProfiles li {
131 131 width: 80px;
132 132 float: left;
133 133 padding: 2px;
134 134 border: 0px solid #c55 !important; }
135 135
136 136 #mnuProfiles a {
137 137 font-weight: normal;
138 138 color: #1494F6;
139 139 display: block;
140 140 text-align: center;
141 141 border-bottom: 1px solid #1494F6 !important;
142 142 text-decoration: none;
143 143 padding: 0px 4px;
144 144 line-height: 18px;
145 145 margin: 6px; }
146 146
147 147 /****************************************************************************************/
148 148 /******** FORMULARIO DE PERFILES *************************************/
149 149 /****************************************************************************************/
150 150 #divProfile {
151 151 margin: 10px 0px;
152 152 padding: 10px 10px;
153 153 width: 500px;
154 154 border: 0px solid #dff !important; }
155 155
156 156 #divPattern textarea,input[type=text],label,input[type=file],input[type=button],input[type=submit] {
157 157 font-family: 'Open Sans', sans-serif;
158 158 font-size: inherit; }
159 159
160 160 .antenna, .NewAntenna {
161 161 box-shadow: 1px 1px 2px #666;
162 162 padding: 5px;
163 163 margin: 10px auto;
164 164 width: 520px;
165 165 display: block;
166 166 border: 0px solid #fee !important; }
167 167
168 168 .antenna {
169 169 width: 520px; }
170 170
171 171 .NewAntenna {
172 172 width: 620px; }
173 173
174 174 .flsAntenna, .NewFlsAntenna {
175 175 margin: 0;
176 176 padding: 0px;
177 177 border: 1px solid #fee !important;
178 178 width: 510px; }
179 179
180 180 .flsAntenna {
181 181 width: 510px; }
182 182
183 183 .NewFlsAntenna {
184 184 width: 610px; }
185 185
186 186 .legendAntenna {
187 187 font-family: 'Roboto Condensed', sans-serif;
188 188 font-size: inherit;
189 189 text-align: center;
190 190 margin-left: 10px; }
191 191
192 192 .infoAntenna {
193 width: 480px;
193 width: 500px;
194 194 float: left;
195 195 border: 0px solid #f00 !important; }
196 196
197 197 .overJRO {
198 198 width: 250px;
199 199 float: left;
200 200 margin: 0px 5px;
201 201 border: 0px solid #1cc !important; }
202 202
203 203 .divAntenna {
204 204 width: 220px;
205 205 float: left;
206 206 margin: 10px;
207 207 border: 0px solid #fcc !important; }
208 208
209 209 .NewDivAntenna {
210 210 width: 290px;
211 211 float: left;
212 212 margin: 10px;
213 213 border: 0px solid #fcc !important; }
214 214
215 215 .titleField {
216 216 display: block;
217 217 text-align: center; }
218 218
219 219 .txtAntenna, .view-textAntenna {
220 220 width: 175px;
221 221 max-width: 180px;
222 222 height: 160px;
223 223 max-height: 165px;
224 224 background: #fdfdfb;
225 225 border: 2px solid #eee !important;
226 226 text-align: justify;
227 227 margin: 0 auto;
228 228 line-height: 20px; }
229 229
230 230 .txtAntenna {
231 231 padding: 4px;
232 232 }
233 233
234 234 .view-textAntenna {
235 235 padding: 2px;
236 236 font-family: "Ubuntu";
237 237 font-size: inherit; }
238 238
239 239 .boxAntenna {
240 240 width: 280px;
241 241 border: 2px solid #eee !important;
242 242 text-align: center;
243 243 display: block;
244 244 float: left;
245 245 margin: 0;
246 246 padding: 0; }
247 247
248 248 .lineInputs {
249 249 width: 262px;
250 250 text-align: center;
251 251 line-height: 18px;
252 252 padding: 0;
253 253 height: 20px;
254 254 margin: 0 auto;
255 255 display: block;
256 256 border: 0px solid #1cc !important; }
257 257
258 258 .lineInputs label {
259 259 float: left;
260 260 margin: 0px 2px;
261 261 border: 0px solid #bbb !important; }
262 262
263 263 .divValuesAntenna {
264 264 width: 230px;
265 265 border: 0px solid #bbb !important;
266 266 float: left;
267 267 display: block;
268 268 margin: 0 auto; }
269 269
270 270 .divValuesAntenna input[type=text] {
271 271 width: 18px;
272 272 border: 0px;
273 273 border-bottom: 1px solid #666 !important;
274 274 line-height: 20px; }
275 275
276 276 .lblSign {
277 277 width: 8px;
278 278 font-family: 'Roboto Condensed', sans-serif;
279 279 font-size: 1.1em;
280 280 color: #666; }
281 281
282 282 #lblSignLeft, #lblSignRight {
283 283 margin: 0;
284 284 line-height: 18px;
285 285 height: 20px;
286 286 float: left;
287 287 padding: 0; }
288 288
289 289 .divTx {
290 290 display: block;
291 291 float: left;
292 292 margin: 10px;
293 293 border: 0px solid #f00 !important; }
294 294
295 295 .divTx label {
296 296 display: block; }
297 297
298 298 .divTx textarea {
299 299 width: 100px;
300 300 max-width: 100px;
301 301 height: 160px;
302 302 max-height: 165px;
303 303 text-align: justify;
304 304 border: 2px solid #eee !important;
305 305 font-family: "Ubuntu";
306 306 font-size: inherit;
307 307 line-height: 20px; }
308 308
309 309 .divTx p {
310 310 width: 100px;
311 311 max-width: 105px;
312 312 height: 160px;
313 313 max-height: 165px;
314 314 background: #fdfdfb;
315 315 padding: 2px;
316 316 border: 1px solid #eee !important;
317 317 font-family: 'Ubuntu', sans-serif;
318 318 font-size: inherit;
319 319 text-align: justify;
320 320 margin: 0 auto;
321 321 line-height: 20px; }
322 322
323 323 .divUes {
324 324 display: block;
325 325 margin: 10px; }
326 326
327 327 .divUes input[type=text] {
328 328 width: 240px;
329 329 max-width: 240px;
330 330 font-family: 'Ubuntu', sans-serif;
331 331 font-size: inherit; }
332 332
333 333 .overJRO img {
334 334 width: 400px;
335 335 height: 200px;
336 336 text-align: center;
337 337 vertical-align: middle;
338 338 margin: 40px 5px 5px 5px;
339 339 display: block;
340 340 background: #fdfdfb;
341 341 border: 1px solid #eee !important; }
342 342
343 343 .overJRO a {
344 344 text-align: center;
345 345 margin: 0 auto;
346 346 display: block; }
347 347
348 348 /****************************************************************************************/
349 349 /****** MENU DE NAVEGACION DE PATRONES **********************************/
350 350 /****************************************************************************************/
351 351 #divMnuPattern {
352 352 width: 280px;
353 353 height: 25px;
354 354 display: block;
355 355 float: right;
356 356 margin: 5px 40px 5px 0px;
357 357 border: 0px solid #1cc !important; }
358 358
359 359 #divMnuPattern li {
360 360 float: right;
361 361 display: block;
362 362 width: 60px;
363 363 border: 0px solid #2cc !important; }
364 364
365 365 #divMnuPattern a {
366 366 display: block;
367 367 line-height: 22px;
368 368 text-decoration: none;
369 369 padding: 0px 5px;
370 370 margin: 0px 2px;
371 371 text-align: center;
372 372 color: #1494F6;
373 373 border-bottom: 1px solid #1494F6 !important; }
374 374
375 375 #infoPattern {
376 376 display: block;
377 377 margin: 0px 25px;
378 378 border: 0px solid #1494f6 !important; }
379 379
380 380 #navPatterns {
381 381 margin: 0 auto;
382 382 width: 700px;
383 383 height: 30px;
384 384 border: 0px solid #d00 !important;
385 385 font-family: 'Ubuntu', sans-serif;
386 386 font-size: 14px;
387 387 padding: 5px 0px; }
388 388
389 389 #navPatternList {
390 390 margin: 0 auto;
391 391 border: 0px solid #ecc !important; }
392 392
393 393 #navPatternList ul {
394 394 list-style: none;
395 395 list-style-type: none;
396 396 margin: 0; }
397 397
398 398 #navPatternList ul li {
399 399 float: left;
400 400 width: 50px;
401 401 border: 1px solid #eee !important; }
402 402
403 403 #navPatternList a {
404 404 width: 50px;
405 405 display: block;
406 406 text-align: center;
407 407 line-height: 30px;
408 408 padding: 1px 0px;
409 409 border: 0px solid #1cc !important; }
410 410
411 411 .lnkPattern {
412 412 background-color: #ccc !important;
413 413 color: #eee; }
414 414
415 415 .lnkPatternSelected {
416 416 background-color: #2cc !important;
417 417 color: #fff; }
418 418
419 419 .divListofPatterns {
420 420 width: 650px;
421 421 display: block;
422 422 border: 1px solid #1cc !important;
423 423 margin: 0 auto; }
424 424
425 425 .divPattern {
426 426 width: 600px;
427 427 display: block;
428 428 border: 1px solid #f00 !important;
429 429 margin: 2px auto; }
430 430
431 431 /****************************************************************************************/
432 432 /****** HEADER *************/
433 433 /****************************************************************************************/
434 434 header nav {
435 435 width: 960px;
436 436 margin: 0 auto;
437 437 height: 100%;
438 438 border: 0px solid #1cc !important; }
439 439
440 440 header nav a {
441 441 font-family: 'Roboto Condensed', sans-serif;
442 442 font-size: 1.98em;
443 443 text-transform: uppercase;
444 444 width: 232px;
445 445 padding: 2px;
446 446 text-align: center;
447 447 border: 1px solid #ddd !important;
448 448 box-shadow: 1px 1px 2px #ddd;
449 449 display: block;
450 450 float: left;
451 451 height: 45px;
452 452 text-decoration: none;
453 453 background: #eee;
454 454 line-height: 45px;
455 455 color: #15425d;
456 456 margin: 0px 1px; }
457 457
458 458 header nav a.selected {
459 459 background: #666;
460 460 color: #fff; }
461 461
462 462 /****************************************************************************************/
463 463 /****** FOOTER *************/
464 464 /****************************************************************************************/
465 465 footer p {
466 466 font-family: 'Roboto Condensed', sans-serif;
467 467 font-size: 0.98em; } No newline at end of file
@@ -1,38 +1,73
1 1 /**
2 2 * @author Jose Antonio Sal y Rosas Celi
3 3 * @contact: jose.salyrosas@jro.igp.gob.pe, arturo.jasyrc@gmail.com
4 4 */
5 5
6 6 $(document).on('ready',function(){
7 7 $('#listProfiles').change(function() {
8 8 if($(this).val() != -1){
9 9 location.href = "/abscontrol/view/" + $(this).val();
10 10 }
11 11 });
12 12 $('#lnkAdd').click(function() {
13 13 profile_id = $("#profile_id").val();
14 14 location.href = "/abscontrol/" + profile_id + "/add/";
15 15 });
16 16 $('#lnkSave').click(function() {
17 $('#frmPattern').submit();
17 $('#frmPattern').submit();
18 });
19 $('#lnkSavePattern').click(function() {
20 valueAntennaUp = "";
21 valueAntennaDown = "";
22 for(i=0; i<=7; i++){
23 if(i == 0){
24 valueAntennaUp += "[";
25 valueAntennaDown += "[";
26 }else{
27 valueAntennaUp += ",";
28 valueAntennaDown += ",";
29 }
30 for(j=0; j<=7; j++){
31 if(j == 0){
32 valueAntennaUp += "[";
33 valueAntennaDown += "[";
34 }
35 valueAntennaUp += $("input[id=txtUnitAntennaUp_"+i+"_"+j+"]").val();
36 valueAntennaDown += $("input[id=txtUnitAntennaDown_"+i+"_"+j+"]").val();
37 if(j != 7){
38 valueAntennaUp += ",";
39 valueAntennaDown += ",";
40 }else{
41 valueAntennaUp += "]";
42 valueAntennaDown += "]";
43 }
44 }
45 if(i == 7){
46 valueAntennaUp += "]";
47 valueAntennaDown += "]";
48 }
49 }
50 $('input[name=txtAntennaUp]').attr("value",valueAntennaUp);
51 $('input[name=txtAntennaDown]').attr("value",valueAntennaDown);
52 $('#frmPattern').submit();
18 53 });
19 54 $('#lnkCancel').click(function() {
20 55 if ($("#pattern_id").val() == 0){
21 56 location.href = "/abscontrol/edit/" + $("#profile_id").val();
22 57 }else{
23 58 //location.href="/abscontrol/" + $("#profile_id").val() + "/view/" + $("#pattern_id").val();
24 59 location.href = "/abscontrol/edit/" + $("#profile_id").val();
25 60 }
26 61 });
27 62 $('#lnkExport').click(function(){
28 63 profile_id = $(this).attr("alt");
29 64 location.href = "/abscontrol/export/" + profile_id + "/";
30 65 });
31 66 $('#lnkSendFile').click(function(){
32 67 profile_id = $(this).attr("alt");
33 68 location.href = "/abscontrol/send/" + profile_id + "/";
34 69 });
35 70 $('#lnkUpdateProfile').click(function(){
36 71 $('#frmProfile').submit();
37 72 });
38 73 }); No newline at end of file
@@ -1,91 +1,109
1 1 {% extends "abscontrol/index.html" %}
2 2 {% block title %}ABS CONTROL:::::NEW PROFILE{% endblock %}
3 3 {% block scripting %}
4 4 <script src="/static/static/js/patterns.js"></script>
5 5 {% endblock %}
6 6 {% block maincolumn%}
7 7 <div id="maincolumn">
8 <form action="/abscontrol/{{ profile_id }}/save/" method="post" id="frmPattern">
8 <!-- <form action="/abscontrol/{{ profile_id }}/save/" method="post" id="frmPattern"> -->
9 <form action="/abscontrol/upgrade/{{ profile_id }}/" method="post" id="frmPattern">
9 10 <div id="divProfile">
10 11 <label for="lblName">Profile: {{ profile_name }}</label>
11 12 </div>
12 13 {% block mnuPattern %}
13 14 <div class="divMenu" id="divMnuPattern">
14 15 <nav class="MnuHorizontal">
15 16 <ul class="mnu" id="mnuPattern">
16 <li><a href="#" id="lnkSave">Save</a></li>
17 <li><a href="#" id="lnkSavePattern">Save</a></li>
17 18 </ul>
18 19 </nav>
19 20 </div>
20 21 <div class="cleardivs"></div>
21 22 {% endblock %}
22 23 <div id="divPattern">
23 24 <div id="antennaUp" class="NewAntenna">
24 25 <fieldset class="NewFlsAntenna">
25 26 <legend class="legendAntenna">UP</legend>
26 27 <div class="NewDivAntenna">
27 28 <label for="lblAntenna" class="titleField">Antenna</label>
28 29 <div class="boxAntenna" id="divtxtAntenna">
29 30 {% for i in range %}
30 31 <div class="lineInputs">
31 32 {% if i == 0 %}<label for="lblSignLeft" class="lblSign" id="lblSignLeft">[</label>{% endif %}
32 33 <label for="lblSign" class="lblSign">[</label>
33 34 <div class="divValuesAntenna">
34 35 {% for j in range %}
35 <input type="text" name="txtUnitAntenna" class="txtUnitAntenna" value="0.5" />
36 <input type="text" name="txtUnitAntennaUp" class="txtUnitAntenna" id="txtUnitAntennaUp_{{ i }}_{{ j }}" value="0.5" />
36 37 {% if j != 7 %},{% endif %}
37 38 {% endfor %}
38 39 </div>
39 40 <label for="lblSign" class="lblSign">]</label>
40 41 {% if i == 7 %}<label for="lblSignRight" class="lblSign" id="lblSignRight">]</label>{% endif %}
41 42 </div>
42 43 {% endfor %}
43 44 </div>
44 45 </div>
45 46 <div class="divTx">
46 47 <label for="lblTx" class="titleField">Tx</label>
47 48 <textarea name="txtTxUp" class="txtTR" cols="18" rows="8">{{ txtTxUp }}</textarea>
48 49 </div>
49 50 <div class="divTx">
50 51 <label for="lblRx" class="titleField" >Rx</label>
51 52 <textarea name="txtRxUp" class="txtTR" cols="18" rows="8">{{ txtRxUp }}</textarea>
52 53 </div>
53 54 <div class="cleardivs"></div>
54 55 <div class="divUes">
55 56 <label for="lblUes">Ues:</label>
56 57 <input type="text" name="txtUesUp" value="{{ txtUes }}" />
57 58 <input type="checkbox" name="chkOnlyRxUp" value="" />
58 59 <label for="lblOnlyRx">Only RX</label>
59 60 </div>
60 61 </fieldset>
62 <input type="hidden" name="txtAntennaUp" value="" />
61 63 </div>
62 64
63 65 <div id="antennaDown" class="NewAntenna">
64 66 <fieldset class="NewFlsAntenna">
65 67 <legend class="legendAntenna">DOWN</legend>
66 <div class="divAntenna">
67 <label for="lblAntenna">Antenna</label>
68 <textarea name="txtAntennaDown" class="txtAntenna" cols="38" rows="8">{{ txtAntenna }}</textarea>
68 <div class="NewDivAntenna">
69 <label for="lblAntenna" class="titleField">Antenna</label>
70 <div class="boxAntenna" id="divtxtAntenna">
71 {% for i in range %}
72 <div class="lineInputs">
73 {% if i == 0 %}<label for="lblSignLeft" class="lblSign" id="lblSignLeft">[</label>{% endif %}
74 <label for="lblSign" class="lblSign">[</label>
75 <div class="divValuesAntenna">
76 {% for j in range %}
77 <input type="text" name="txtUnitAntennaDown" class="txtUnitAntenna" id="txtUnitAntennaDown_{{ i }}_{{ j }}" value="0.5" />
78 {% if j != 7 %},{% endif %}
79 {% endfor %}
80 </div>
81 <label for="lblSign" class="lblSign">]</label>
82 {% if i == 7 %}<label for="lblSignRight" class="lblSign" id="lblSignRight">]</label>{% endif %}
83 </div>
84 {% endfor %}
85 </div>
69 86 </div>
70 87 <div class="divTx">
71 88 <label for="lblTx">Tx</label>
72 89 <textarea name="txtTxDown" class="txtTR" cols="15" rows="8">{{ txtTxDown }}</textarea>
73 90 </div>
74 91 <div class="divTx">
75 92 <label for="lblRx">Rx</label>
76 93 <textarea name="txtRxDown" class="txtTR" cols="15" rows="8">{{ txtRxDown }}</textarea>
77 94 </div>
78 95 <div class="cleardivs"></div>
79 96 <div class="divUes">
80 97 <label for="lblUes">Ues:</label>
81 98 <input type="text" name="txtUesDown" value="{{ txtUes }}" />
82 99 <input type="checkbox" name="chkOnlyRxDown" value="" />
83 100 <label for="lblOnlyRx">Only RX</label>
84 101 </div>
85 102 </fieldset>
103 <input type="hidden" name="txtAntennaDown" value="" />
86 104 </div>
87 105 </div>
88 106 <input type="hidden" name="mode" value="e">
89 107 </form>
90 108 </div>
91 109 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now