def index(request): def format_time(datestr='', timestr=''): if datestr: datestr = time.strptime(datestr, "%Y%m%d") datestr = time.strftime("%d.%m.%Y", datestr) if timestr: timestr = time.strptime(timestr, "%H%M%S") timestr = time.strftime("%H:%M:%S", timestr) return datestr + ' ' + timestr order_manager = OrderManager(settings.ORDERS['db_catalog'], settings.ORDERS['rdx_path']) transactions = order_manager.get_orders(request.user.username) orgs = {} #for org_id in transactions_by_org: orders = [] for transaction in transactions: #print ET.tostring(transaction.illapdus[0].delivery_status.supplemental_item_description, encoding="UTF-8") try: doc = etree.XML(ET.tostring(transaction.illapdus[0].delivery_status.supplemental_item_description, encoding="UTF-8")) if not doc: continue result_tree = transform(doc) res = str(result_tree) except etree.XSLTApplyError, e: continue except Exception, e: raise e
def order(request, order_type='', org_id=''): """ order_type document || copy || reserve """ #zgate_cookie = request.session.get('zgate_cookie', '') #zworker = ZWorker(zgate_cookie) #zworker.xml_name = catalogs['1']['xml'] #zworker.xsl_name = catalogs['1']['xsl'] #zworker.entry_point = reverse("zgate_index", args=['1']) #заменяем F на X чтобы cgi вернул XML. О как! if 'zstate' in request.GET: zgate_url = catalogs[catalog_id]['url'] zstate = request.GET['zstate'].replace(' ', '+') (xml_record, cookies) = zworker.request(zgate_url + '?' + zstate.replace('1+F', '1+X'), cookies=request.COOKIES) #xml_record = zworker.make_get_request(request.GET['zstate'].replace(' F ', ' X ')) try: tree = ET.XML(xml_record.encode('UTF-8')) except SyntaxError as e: # Если zgate вернул html страницу, то печатаем ее как ошибку ыыы compiled_regx = re.compile(r".*<body>(?P<section>.*).*</body>", re.IGNORECASE | re.MULTILINE) xml_record = xml_record.replace("\n", '|||') #временно меняем символы новой строки, чтобы сработала регулярка ыыы xml_record = re.match(compiled_regx, xml_record).group('section') xml_record = xml_record.replace("|||", '\n') response = render(request, 'orders/orders_done.html', {'error': xml_record}) return set_cookies_to_response(cookies, response) order_manager = OrderManager(settings.ORDERS['db_catalog'], settings.ORDERS['rdx_path']) #return HttpResponse(u'Заказ сделан '+ order_type +'<br/>'+ org_id +'<br/>'+xml_record.decode('utf-8')) sender_id = 'belav' #id отправителя reciver_id = '19017901' #id получателя (огранизации) reserve_reciver_id = '' #id конечного получателя (огранизации) при бронировании if order_type == 'reserve': reserve_reciver_id = org_id try: result = order_manager.order_document( order_type=order_type, sender_id=sender_id, reciver_id=reciver_id, xml_record=xml_record, reserve_reciver_id=reserve_reciver_id, comments=u'Сделать как можно скорее!' ) except Exception as e: if settings.DEBUG == True: raise e else: raise RuntimeError(u'Ошибка при обработке заказа') #result = u'Заказ сделан '+ order_type +'<br/>'+xml_record.decode('utf-8') return render(request, 'orders/orders_done.html', {'result': result})
def delete_order(request, order_id=''): order_manager = OrderManager(settings.ORDERS['db_catalog'], settings.ORDERS['rdx_path']) transactions = order_manager.get_order(order_id=order_id.encode('utf-8'), user_id=request.user.username) if len(transactions): if check_for_can_delete(transactions[0]): pass order_manager.delete_order(order_id=order_id.encode('utf-8'), user_id=request.user.username) return redirect(reverse('orders_index'))
def make_order(request): if request.method != 'POST': return HttpResponse('Only post requests'); order_type = request.POST.get('type', None) order_manager_id = request.POST.get('org_id', None) # организация, которая получит заказ order_time = datetime.datetime.now() order_copy_limit = 1 order_document_limit = 2 order_reserve_limit = 3 user_order_times = UserOrderTimes.objects.filter( user=request.user, order_manager_id=order_manager_id, order_type=order_type, order_time__year=order_time.year, order_time__month=order_time.month, order_time__day=order_time.day ).count() if order_type == 'document': if user_order_times >= order_document_limit: return HttpResponse(simplejson.dumps( {'status': 'error', 'error': 'На сегодня Ваш лимит заказов на доставку в эту библиотеку исчерпан'}, ensure_ascii=False)) elif order_type == 'copy': if user_order_times >= order_copy_limit: return HttpResponse(simplejson.dumps( {'status': 'error', 'error': 'На сегодня Ваш лимит заказов на копию в эту библиотеку исчерпан'}, ensure_ascii=False)) elif order_type == 'reserve': if user_order_times >= order_reserve_limit: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'На сегодня Ваш лимит заказов на бронирование в эту библиотеку исчерпан'} , ensure_ascii=False)) else: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'Неизвестный тип заказа'}, ensure_ascii=False)) catalog = get_object_or_404(ZCatalog, latin_title=request.POST['catalog_id']) zgate_url = catalog.url zstate = 'present+' + request.POST['zsession'] +\ '+default+' + request.POST['zoffset'] +\ '+1+X+1.2.840.10003.5.28+' + catalog.default_lang (xml_record, cookies) = zworker.request(zgate_url + '?' + zstate, cookies=request.COOKIES) #определяем, сколько раз пользователь сдлела заказ за сегодня try: tree = ET.XML(xml_record) except SyntaxError as e: return HttpResponse(json_error(u'Заказ не выполнен. Возможно, время сессии истекло')) order_manager = OrderManager(settings.ORDERS['db_catalog'], settings.ORDERS['rdx_path']) library = None try: library = Library.objects.get(code=order_manager_id) except Library.DoesNotExist: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'Организация не найдена'})) def get_first_recivier_code(library): ancestors = library.get_ancestors() for ancestor in ancestors: if ancestor.ill_service and ancestor.ill_service.strip(): return ancestor.code return None # если у библиотеки указан ill адрес доставки, то пересылаем заказ ей if library.ill_service and library.ill_service.strip(): manager_id = '' reciver_id = library.code # иначе ищем родителя, у которого есть адрес доставки else: manager_id = library.code reciver_id = get_first_recivier_code(library) if not reciver_id: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'Организация не может получать заявки'})) sender_id = request.user.username #id отправителя copy_info = request.POST.get('copy_info', '') try: order_manager.order_document( order_type=order_type, sender_id=sender_id, reciver_id=reciver_id, manager_id=manager_id, xml_record=xml_record, comments=request.POST.get('comments', ''), copy_info=copy_info ) user_order_times = UserOrderTimes(user=request.user, order_type=order_type, order_manager_id=order_manager_id) user_order_times.save() except Exception as e: if settings.DEBUG == True: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'Ошибка при обработке заказа' + str(e)}, ensure_ascii=False)) else: return HttpResponse(simplejson.dumps({'status': 'error', 'error': 'Ошибка при обработке заказа'}, ensure_ascii=False)) #result = u'Заказ сделан '+ order_type +'<br/>'+xml_record.decode('utf-8') return HttpResponse(simplejson.dumps({'status': 'ok'}, ensure_ascii=False));