Example #1
0
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
Example #2
0
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})
Example #3
0
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'))
Example #4
0
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));