- Timestamp:
- 26 Oct 2012, 17:57:26 (12 years ago)
- Location:
- main/waeup.kofa/trunk/src/waeup/kofa/students
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/trunk/src/waeup/kofa/students/export.py
r9420 r9427 24 24 from waeup.kofa.students.interfaces import ( 25 25 IStudent, IStudentStudyCourse, IStudentStudyLevel, ICourseTicket, 26 IStudentOnlinePayment, ICSVStudentExporter )26 IStudentOnlinePayment, ICSVStudentExporter, IBedTicket) 27 27 from waeup.kofa.utils.batching import ExporterBase 28 28 from waeup.kofa.utils.helpers import iface_names … … 76 76 return payments 77 77 78 def get_bedtickets(students): 79 """Get all bedtickets of `students`. 80 """ 81 tickets = [] 82 for student in students: 83 for ticket in student.get('accommodation', {}).values(): 84 tickets.append(ticket) 85 return tickets 78 86 79 87 class StudentExporterBase(ExporterBase): … … 273 281 def export_student(self, student, filepath=None): 274 282 return self.export(get_payments([student]), filepath) 283 284 class BedTicketsExporter(grok.GlobalUtility, StudentExporterBase): 285 """Exporter for BedTicket instances. 286 """ 287 grok.name('bedtickets') 288 289 #: Fieldnames considered by this exporter 290 fields = tuple( 291 sorted(iface_names( 292 IBedTicket, exclude_attribs=False))) + ( 293 'student_id', 'actual_bed_type') 294 295 #: The title under which this exporter will be displayed 296 title = _(u'Bed Tickets') 297 298 def mangle_value(self, value, name, context=None): 299 """Treat location values and others special. 300 """ 301 if context is not None: 302 student = context.student 303 if name in ['student_id'] and student is not None: 304 value = getattr(student, name, None) 305 if name == 'bed' and value is not None: 306 value = getattr(value, 'bed_id', None) 307 if name == 'actual_bed_type': 308 value = getattr(getattr(context, 'bed', None), 'bed_type') 309 return super( 310 BedTicketsExporter, self).mangle_value( 311 value, name, context=context) 312 313 def export_all(self, site, filepath=None): 314 """Export payments into filepath as CSV data. 315 316 If `filepath` is ``None``, a raw string with CSV data is returned. 317 """ 318 return self.export(get_bedtickets(get_students(site)), filepath) 319 320 def export_student(self, student, filepath=None): 321 return self.export(get_bedtickets([student]), filepath) -
main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py
r9316 r9427 5 5 from waeup.kofa.students.export import ( 6 6 StudentsExporter, StudentStudyCourseExporter, StudentStudyLevelExporter, 7 CourseTicketExporter, PaymentsExporter )7 CourseTicketExporter, PaymentsExporter, BedTicketsExporter) 8 8 from waeup.kofa.students.payments import StudentOnlinePayment 9 from waeup.kofa.students.accommodation import BedTicket 9 10 from waeup.kofa.students.studycourse import StudentStudyCourse 10 11 from waeup.kofa.students.studylevel import StudentStudyLevel, CourseTicket … … 440 441 ) 441 442 return 443 444 class BedTicketsExporterTest(StudentImportExportSetup): 445 446 layer = FunctionalLayer 447 448 def setUp(self): 449 super(BedTicketsExporterTest, self).setUp() 450 self.setup_for_export() 451 return 452 453 def test_ifaces(self): 454 # make sure we fullfill interface contracts 455 obj = BedTicketsExporter() 456 verifyObject(ICSVExporter, obj) 457 verifyClass(ICSVExporter, BedTicketsExporter) 458 return 459 460 def test_get_as_utility(self): 461 # we can get a bedtickets exporter as utility 462 result = queryUtility(ICSVExporter, name="bedtickets") 463 self.assertTrue(result is not None) 464 return 465 466 def test_export_empty(self): 467 # we can export a nearly empty bedticket 468 bedticket = BedTicket() 469 bed = self.app['hostels']['hall-1']['hall-1_A_101_A'] 470 bedticket.bed = bed 471 exporter = BedTicketsExporter() 472 exporter.export([bedticket], self.outfile) 473 result = open(self.outfile, 'rb').read() 474 self.assertMatches( 475 result, 476 'bed,bed_coordinates,bed_type,booking_code,booking_date,' 477 'booking_session,student_id,actual_bed_type\r\n' 478 'hall-1_A_101_A,,,,<YYYY-MM-DD hh:mm:ss>.<6-DIGITS>,,,regular_male_fr\r\n' 479 ) 480 return 481 482 def test_export(self): 483 # we can really export student bedtickets. 484 # set values we can expect in export file 485 self.setup_student(self.student) 486 bedticket = self.student['accommodation']['2004'] 487 exporter = BedTicketsExporter() 488 exporter.export([bedticket], self.outfile) 489 result = open(self.outfile, 'rb').read() 490 self.assertMatches( 491 result, 492 'bed,bed_coordinates,bed_type,booking_code,booking_date,' 493 'booking_session,student_id,actual_bed_type\r\n' 494 'hall-1_A_101_A,,any bed type,,<YYYY-MM-DD hh:mm:ss>.<6-DIGITS>,2004,' 495 'A111111,regular_male_fr\r\n' 496 ) 497 return 498 499 def test_export_all(self): 500 # we can really export all bedtickets 501 # set values we can expect in export file 502 self.setup_student(self.student) 503 exporter = BedTicketsExporter() 504 exporter.export_all(self.app, self.outfile) 505 result = open(self.outfile, 'rb').read() 506 self.assertMatches( 507 result, 508 'bed,bed_coordinates,bed_type,booking_code,booking_date,' 509 'booking_session,student_id,actual_bed_type\r\n' 510 'hall-1_A_101_A,,any bed type,,<YYYY-MM-DD hh:mm:ss>.<6-DIGITS>,2004,' 511 'A111111,regular_male_fr\r\n' 512 ) 513 return 514 515 def test_export_student(self): 516 # we can really export all bedtickets of a certain student 517 # set values we can expect in export file 518 self.setup_student(self.student) 519 exporter = BedTicketsExporter() 520 exporter.export_student(self.student, self.outfile) 521 result = open(self.outfile, 'rb').read() 522 self.assertMatches( 523 result, 524 'bed,bed_coordinates,bed_type,booking_code,booking_date,' 525 'booking_session,student_id,actual_bed_type\r\n' 526 'hall-1_A_101_A,,any bed type,,<YYYY-MM-DD hh:mm:ss>.<6-DIGITS>,2004,' 527 'A111111,regular_male_fr\r\n' 528 ) 529 return
Note: See TracChangeset for help on using the changeset viewer.