# coding: utf-8 ''' Created on 04.06.2014 @author: Victor B. ''' # not ended !!!!! import datetime from java.io import FileOutputStream from java.text import SimpleDateFormat import json from edu._edu_orm import vw_courseCursor, course_cycleCursor, \ course_edu_formCursor, courseCursor from edu.reports.printExcelReports import printToExcel from nci._nci_orm import education_formCursor, edu_organizationCursor from ru.curs.celesta.showcase.utils import XMLJSONConverter from umk._umk_orm import specialityCursor #try: # from ru.curs.showcase.util import XMLJSONConverter as XMLJSONConverter2 #except: # from ru.curs.celesta.showcase.utils import XMLJSONConverter as XMLJSONConverter2 try: from ru.curs.showcase.core.jython import JythonDTO from ru.curs.showcase.core.selector import ResultSelectorData from ru.beta2.extra.gwt.ui.selector.api import DataRecord from ru.curs.showcase.core import UserMessage from ru.curs.showcase.app.api import MessageType except: from ru.curs.celesta.showcase import JythonDTO def reportData(context): u'''Отчет по внебюджетным слушателям (по зачислению)''' speciality = specialityCursor(context) vw_course = vw_courseCursor(context) course_edu_form = course_edu_formCursor(context) education_form = education_formCursor(context) edu_organization = edu_organizationCursor(context) course_cycle = course_cycleCursor(context) speciality.orderBy('name') sdf = SimpleDateFormat('dd.MM.yyyy') data = {"schema": {"edu_org": [], 'date':sdf.format(datetime.datetime.now()) } } edu_organization.orderBy('name') count_edu_org = 1 for edu_org in edu_organization.iterate(): count_program = 1 edu_org_dict = {"name":edu_org.shortname, "number":count_edu_org, "program":'' } program_list = [] vw_course.setRange('edu_organization_id',edu_organization.uid) vw_course.orderBy('speciality_name') for course in vw_course.iterate(): course_cycle.setRange('course_id',course.uid) edu_forms = [] course_edu_form.setRange('course_id', course.uid) for course_edu_form in course_edu_form.iterate(): education_form.get(course_edu_form.edu_form_id) edu_forms.append(education_form.name) program_dict = {'number':'%d.%d' % (count_edu_org,count_program), 'spec_name':course.speciality_name, 'name':course.name, 'type':u'ПК', 'edu_forms': ','.join(edu_forms), 'internship':u'Да' if course.internship else u'Нет', 'simulation':u'Да' if course.osk else u'Нет', 'dot_eo':u'Да' if course.dot_and_eo else u'Нет', 'zet':course.course_hours if course.course_hours else '', 'zet_internship':course.internship_hours if course.internship_hours else '', 'zet_simulation':course.osk_hours if course.osk_hours else '', 'cycles_number':course_cycle.count(), 'edu_cost':course.edu_cost } count_program += 1 program_list.append(program_dict) edu_org_dict['program'] = program_list if program_list: count_edu_org += 1 data['schema']['edu_org'].append(edu_org_dict) xmlData = XMLJSONConverter.jsonToXml(json.dumps(data)) return (u'<?xml version="1.0" encoding="UTF-8"?> %s' % xmlData) def get_counts(vw_course): spec_set = set() for course in vw_course.iterate(): if course.speciality_id not in spec_set: spec_set.add(course.speciality_id) count_program = vw_course.count() vw_course.setRange('internship', True) count_intern = vw_course.count() vw_course.setRange('internship') vw_course.setRange('osk', True) count_sim = vw_course.count() vw_course.setRange('osk') vw_course.setRange('dot_and_eo') count_dot_eo = vw_course.count() vw_course.setRange('dot_and_eo') return len(spec_set), count_program, count_sim, count_intern, count_dot_eo def consolidateReportData(context): u'''Отчет по внебюджетным слушателям (по зачислению)''' course= courseCursor(context) speciality = specialityCursor(context) vw_course = vw_courseCursor(context) course_edu_form = course_edu_formCursor(context) education_form = education_formCursor(context) edu_organization = edu_organizationCursor(context) course_cycle = course_cycleCursor(context) speciality.orderBy('name') sdf = SimpleDateFormat('dd.MM.yyyy') data = {"schema": {"edu_org": [], 'date':sdf.format(datetime.datetime.now()) } } edu_organization.orderBy('name') count_edu_org = 1 for edu_org in edu_organization.iterate(): edu_org_dict = {"name":edu_org.shortname, "number":count_edu_org, } course.setRange('edu_organization_id',edu_organization.uid) course.setFilter('status_id', '0|1|2|3|8') edu_org_dict['all_spec'],edu_org_dict['all_program'], edu_org_dict['all_simulation'],\ edu_org_dict['all_internship'], edu_org_dict['all_dot_eo'] = get_counts(course) course.setRange('status_id', 3) edu_org_dict['appr_spec'],edu_org_dict['appr_program'], edu_org_dict['appr_simulation'],\ edu_org_dict['appr_internship'], edu_org_dict['appr_dot_eo'] = get_counts(course) course.setRange('status_id', 2) edu_org_dict['check_spec'],edu_org_dict['check_program'], edu_org_dict['check_simulation'],\ edu_org_dict['check_internship'], edu_org_dict['check_dot_eo'] = get_counts(course) course.setFilter('status_id', '0|1|8') edu_org_dict['form_spec'],edu_org_dict['form_program'], edu_org_dict['form_simulation'],\ edu_org_dict['form_internship'], edu_org_dict['form_dot_eo'] = get_counts(course) data['schema']['edu_org'].append(edu_org_dict) count_edu_org += 1 xmlData = XMLJSONConverter.jsonToXml(json.dumps(data)) return (u'<?xml version="1.0" encoding="UTF-8"?> %s' % xmlData) def printToFlute(context, params): u'''Функция для подготовки печатных форм через флейту. ''' arg_dict = json.loads(params.params) data = reportData(context) # печатаем в resultstream флейты printToExcel(data, 'programReport.xls', 'programReport.xml', params.resultstream) def printConsolidateToFlute(context, params): u'''Функция для подготовки печатных форм через флейту. ''' arg_dict = json.loads(params.params) data = consolidateReportData(context) # печатаем в resultstream флейты printToExcel(data, 'consolidateProgramReport.xls', 'consolidateProgramReport.xml', params.resultstream)