示例#1
0
文件: views.py 项目: sai9912/mypyton
def barcodes_image_download(request, bc_kind, gtin, dl_type):
    parameters = request.GET.dict()
    parameters.update({
        'bc_kind': bc_kind,
        'gtin': gtin,
        'dl_type': dl_type,
        'user_id': request.user.id,
    })
    result = generate_download_file(parameters)

    if result.get('success'):
        file_path = result['file_path']
        filename = file_path.split('/')[-1]
        send_file = open(file_path, 'rb')
        response = HttpResponse(send_file)
        response['Content-Disposition'] = 'attachment; filename=%s' % filename

        if filename.endswith('.png'):
            response['Content-Type'] = 'image/png'
        elif filename.endswith('.gif'):
            response['Content-Type'] = 'image/gif'
        elif filename.endswith('.jpg'):
            response['Content-Type'] = 'image/jpeg'
        elif filename.endswith('.eps'):
            response['Content-Type'] = 'application/postscript'
        elif filename.endswith('.eps.bin'):
            response['Content-Type'] = 'application/postscript'
        elif filename.endswith('.pdf'):
            response['Content-Type'] = 'application/pdf'

        return response
    else:
        # error message
        return jsonify(**result)
示例#2
0
def ajax_subproduct_add(request, product_id):
    subproduct_id, quantity = _get_request_quantity(request.POST)
    action = request.POST.get('action', None)
    if action == 'edit':
        subproduct, created = sub_product_service.get_or_create_id(
            request.user,
            product_id,
            subproduct_id
        )
        if not subproduct:
            return jsonify(status='Error', message='Subproduct not found')
        subproduct.quantity += quantity
        subproduct.save()
    else:
        return jsonify(status='Error', message='Unknown command')
    return jsonify(status='Ok')
示例#3
0
def ajax_product_unmark(request, product_id):
    """
    makes product un-marked
    """
    product = Product.service.get(id=product_id)
    product.mark = 0
    product.save()
    return jsonify(success=True)
示例#4
0
def subproduct_ajax_selected(request):
    """
    returns selected subproducts
    """
    try:
        sub_products = request.session['new_product'].get('sub_products', [])
        sub_products.sort()
    except:
        sub_products = []
    return jsonify(sub_products=sub_products)
示例#5
0
def ajax_get_subproducts_by_gtin(request, gtin):
    product = product_service.get_by_gtin(request.user, gtin)
    associated = sub_product_service.get_associated(product)
    subproducts = []
    for item in associated:
        subproducts.append({'gtin': item.sub_product.gtin,
                            'package_level': item.sub_product.package_level.unit_descriptor,
                            'product_description': item.sub_product.description,
                            'quantity': item.quantity})
    return jsonify(status='Ok', subproducts=subproducts)
示例#6
0
def DamagedReport(name, location, damage):
    with app.app_context():
        msg = Message(
            subject="Damaged Report!",
            sender=app.config.get("MAIL_USERNAME"),
            recipients=["*****@*****.**"
                        ],  # replace with your email for testing
            body=
            "The following tablet {} from {} has been reported with a {} issue."
            .format(name, location, damage))
        mail.send(msg)
    return jsonify({'message': 'Your message has been sent successfully'}), 200
示例#7
0
def subproduct_ajax_unselect(request, product_id):
    """
    makes sub-product un-selected
    """
    product = Product.service.get_my_product(request.user, product_id)
    if not request.session.get('new_product', None):
        request.session['new_product'] = {}
    if not request.session['new_product'].get('sub_products'):
        request.session['new_product']['sub_products'] = []
    if product.id in request.session['new_product']['sub_products']:
        request.session['new_product']['sub_products'].remove(product.gtin)
    return jsonify(success=True)
示例#8
0
def prefixes_ajax(request):
    if request.method != 'POST':
        raise Http404()
    prefix_id = request.POST.get('pk', None)
    if not prefix_id:
        raise Http404()
    prefix = prefix_service.find_item(user=request.user, id=prefix_id)
    if not prefix:
        raise Http404()
    prefix.description = request.POST.get('value', None)
    prefix_service.save(prefix, user=request.user)
    return jsonify(success=True)
示例#9
0
def ajax_get_package_type(request, package_type_id):

    try:
        package_type = PackageType.objects.get(id=package_type_id)
    except PackageType.DoesNotExist:
        raise Http404()
    else:
        package_type_json = serialize('json', [package_type])
        package_type_json = json.loads(package_type_json)[0]['fields']
        package_type_json['type'] = package_type.type
        package_type_json['description'] = package_type.description
        return jsonify(package_type=package_type_json)
示例#10
0
def log_table(request, gtin):
    """
    Given a product's GTIN14 retrieve all status changes from teh audit table
    :param key:
    :return:
    """
    log_records = cloud_log_service.filter(
        username=request.user.email).order_by('-id')
    data = [{
        'id': log.id,
        'rc': log.gs1_cloud_last_rc,
        'time': log.created_at.strftime('%Y-%m-%d')
    } for log in log_records]
    return jsonify(data=data)
示例#11
0
def ajax_subproducts_list(request, product_id):
    """
    Given a product's ID retrieve all related subproducts and quantities
    :param key:
    :return:
    """
    product = Product.service.get_my_product(request.user, product_id)
    data = [{
        'DT_RowId': subproduct.sub_product.id,
        'gtin': subproduct.sub_product.gtin,
        'package_level': subproduct.sub_product.package_level.unit_descriptor,
        'description': subproduct.sub_product.description,
        'quantity': subproduct.quantity,
    } for subproduct in sub_product_service.get_associated(product)
    ]

    return jsonify(data=data)
示例#12
0
def ajax_av_subproducts_list(request, product_id):
    """
    Given a product's ID retrieve all related subproducts and quantities
    :param key:
    :return:
    """
    product = Product.service.get_my_product(request.user, product_id)
    all_in_range = Product.service.get_available_subproducts(
        owner=request.user,
        package_level=product.package_level
    )
    return jsonify(data=[
        {
            'DT_RowId': product.id,
            'gtin': product.gtin,
            'package_level': product.package_level.unit_descriptor,
            'description': product.description
        } for product in all_in_range
    ])
def account_create_or_update(request):
    if request.method == 'POST':
        form = AccountCreateOrUpdateForm(request.POST)
        if form.is_valid():
            try:
                # core data
                email = form.data.get('email')
                company_name = form.data.get('company_name')
                try:
                    member_organisation = MemberOrganisation.objects.get(
                        slug=form.cleaned_data.get('member_organisation'))
                except MemberOrganisation.DoesNotExist:
                    member_organisation = None

                # get company
                company_organisation, company_organisation_created = CompanyOrganisation.objects.get_or_create(
                    uuid=form.data.get('uuid'),
                    member_organisation=member_organisation)

                # update company name if any
                if company_name:
                    company_organisation.company = company_name
                    company_organisation.save()

                auth_user, auth_user_created = users_service.get_or_create(
                    email=email,
                    defaults={
                        'username': email,
                        'customer_role': 'gs1ie',
                        'member_organisation': member_organisation,
                        'company_organisation': company_organisation
                    })

                auth_user.save()

                company_organisation = users_service.get_company_organisation(
                    auth_user)

                # user, user_created = users_service.get_or_create(email=email,
                #                                                  defaults={
                #                                                      'username': email,
                #                                                      'customer_role': 'gs1ie',
                #                                                      'organisation': organisation
                #                                                  })

            except Exception as e:
                return jsonify(success=False, message=str(e))

            log_message = 'logging in: ' + str(auth_user.email) + '::' + str(
                company_organisation.company)
            log_extra = {
                'user': auth_user.email,
                'company': company_organisation.company,
                'ip_address': request.environ.get('REMOTE_ADDR')
            }
            logging.getLogger().info(log_message, extra=log_extra)
            logging.getLogger('audit').info(log_message, extra=log_extra)

            # if user's organisation has prefix override, use it
            # if not use prefixes provided by the form
            if not company_organisation.prefix_override:
                form_prefix = form.data.get('company_prefix', '')
            else:
                form_prefix = company_organisation.prefix_override
            form_prefixes = form_prefix.split(',')

            prefixes = prefix_service.find(
                company_organisation=company_organisation,
                member_organisation=member_organisation).all()
            prefixes_list = [p.prefix for p in prefixes]

            # set gln to be first prefix
            if len(prefixes_list) > 0:
                first_prefix = prefixes_list[0]
                derived_gln = normalize("EAN13", first_prefix)
                company_organisation.gln = derived_gln
                company_organisation.save()

            for prfx in form_prefixes:
                if not re.match(settings.GS1_PREFIX_START_REGEX,
                                prfx[:3]) or len(prfx) < 6:
                    if prfx.find(
                            '20'
                    ) == 0:  # we will not complain about variable weight
                        continue
                    else:
                        return jsonify(success=False,
                                       message='Invalid prefix %s' % prfx)
                if prfx not in prefixes_list:
                    try:
                        prefix = prefix_service.create(
                            prefix=prfx,
                            company_organisation=company_organisation,
                            member_organisation=member_organisation)
                    except IntegrityError:
                        return jsonify(
                            success=False,
                            message=
                            'Prefix %s has been allocated for another user' %
                            prfx)
                    try:
                        prefix.make_starting_from()
                    except:
                        prefix.starting_from = None
                    prefix_service.save(prefix)
                else:
                    i = prefixes_list.index(prfx)
                    if prefixes[i].is_suspended:
                        prefixes[i].is_suspended = False
                        prefix_service.save(prefixes[i])

            for prfx in prefixes_list:
                if prfx not in form_prefixes:
                    prefix = prefix_service.find(
                        company_organisation=company_organisation,
                        member_organisation=member_organisation,
                        prefix=prfx).first()
                    prefix.is_suspended = True
                    prefix.is_active = False
                    prefix_service.save(prefix)

            # Check active prefix and set accordingly
            try:
                prefix_service.find(company_organisation=company_organisation,
                                    member_organisation=member_organisation,
                                    is_active=True,
                                    is_suspended=False).first()
            except ObjectDoesNotExist:
                prefix = prefix_service.find(
                    company_organisation=company_organisation,
                    member_organisation=member_organisation,
                    is_active=False,
                    is_suspended=False).order_by('prefix').first()
                if not prefix:
                    return jsonify(success=False,
                                   message='No working prefix found')
                prefix.is_active = True
                prefix_service.save(prefix)
            except MultipleObjectsReturned:
                prefixes = prefix_service.find(
                    company_organisation=company_organisation,
                    member_organisation=member_organisation,
                    is_active=True,
                    is_suspended=False).order_by('prefix').all()
                for prefix in prefixes:
                    prefix.is_active = False
                    prefix_service.save(prefix)
                prefix = prefixes[0]
                prefix.is_active = True
                prefix_service.save(prefix)

            serializer = URLSafeTimedSerializer(settings.SECRET_KEY)
            token = serializer.dumps(
                [auth_user.email, company_organisation.uuid])
            logging.getLogger().debug('Created token: %s' % token)
            return redirect('/API/v1/auth/%s/' % token)
    else:
        form = AccountCreateOrUpdateForm()

    current_user = request.user
    context = {'current_user': current_user, 'active_page': '', 'form': form}
    return render(request, 'gs1ie/AccountCreateOrUpdate.html', context)
示例#14
0
文件: views.py 项目: sai9912/mypyton
def barcodes_generate(request, bc_kind, gtin):
    """
    ean-13-generate with ajax
    """
    if bc_kind not in ALLOWED_BARCODE_TYPES:
        return jsonify(success=False, msg='Wrong barcode kind')

    if not request.user.profile.agreed_barcode_disclaimer:
        request.user.profile.agreed_barcode_disclaimer = True
        request.user.profile.agreed_barcode_disclaimer_date = timezone.now()
        request.user.profile.save()

    size = 1.00
    bwr = 0.0000
    rqz = 'y'
    marks = ''
    debug = ''
    ps_type = 'win'
    kind = bc_kind
    '''
    # find barcode object, see if downloadable
    bc = barcode_service.first(user_id=current_user.id, gtin=gtin, kind=kind, 
    downloadable=True)
    if not bc:
        return jsonify({'success': False, 'msg': 'Barcode does not exist'})
    # if bc_kind == 'EAN13':
    #    gtin = gtin[1:14]
    '''

    prefix = None
    '''
    for prfx in current_user.organisation.prefixes:
        if prfx.is_active:
            prefix = prfx
            break
    if not prefix:
        return jsonify({'success': False, 'msg': 'You do not have an active 
        prefix'})
    if prefix.prefix not in gtin:
        return jsonify({'success': False, 'msg': 'This barcode is not of your 
        active prefix'})
    '''

    if request.method == 'POST':
        form = PreviewFormAjax(request.POST)
        if form.is_valid():
            size = float(form.cleaned_data['size'])
            bwr = float(form.cleaned_data['bwr'])
            rqz = form.cleaned_data['rqz']
            marks = form.cleaned_data['marks']
            debug = form.cleaned_data['debug']
    else:
        form = PreviewFormAjax({
            'size': '1.00',
            'bwr': '0.0000',
            'rqz': rqz,
            'marks': marks,
            'debug': debug
        })
    '''
    form_ps = GenerateForm(prefix="form_ps-" + kind.lower(), ps_type=ps_type)
    '''

    form_raster = GenerateForm({
        'prefix': 'form_raster-' + kind.lower(),
        'file_type': 'png',
        'resolution': '300 dpi'
    })

    form_ps = FormPS({'ps_type': 'win'})
    '''
    form_labels = GenerateForm(prefix="form_label-" + kind.lower(), 
    label_type="L7161")

    all_labels = label_service.all()
    form_labels.set_label_types(all_labels)
    '''
    form_labels = FormPDF({'label_type': 'L7161'})

    barcode = Storage({
        'gtin': str(gtin),
        'omlet': None,
        'id': str(gtin),
        'bwr': bwr,
        'size': size,
        'kind': kind,
        'pmk': marks,
        'price': None,
        'name': None,
        'debug': debug,
        'rqz': rqz
    })

    barcode.omlet = make_omlet(barcode)

    image_preview_path = os.path.join(settings.BARCODES_FILES_PATH,
                                      str(request.user.id), kind)
    image_preview = Preview(request,
                            barcode,
                            debug=debug,
                            watermark=False,
                            path=image_preview_path,
                            res=settings.BARCODES_GENERATE_RES)

    img_fn = image_preview.generate()

    image = '/'.join(img_fn.split('/')[-4:])

    context = {
        'form': form,
        'form_raster': form_raster,
        'form_ps': form_ps,
        'form_labels': form_labels,
        'image': image,
        'gtin': gtin,
        'kind': kind,
        'prefix': prefix,
        'labels': None
    }  # all_labels}

    return render(request, 'barcodes/generate.html', context)
示例#15
0
文件: views.py 项目: sai9912/mypyton
def barcodes_preview(request, bc_kind, gtin):
    if not re.match('\d{14}', gtin):
        return jsonify(success=False,
                       msg='You entered a non valid GTIN number')
    if bc_kind not in ALLOWED_BARCODE_TYPES:
        return jsonify(success=False, msg='Wrong barcode kind')
    # if bc_kind == 'EAN13':
    #    gtin = gtin[1:14]
    size = 1.00
    bwr = 0.0000
    rqz = 'y'
    marks = ''
    debug = ''
    kind = bc_kind

    # Prefix validation
    prefix = None
    '''
    for prfx in current_user.organisation.prefixes:
        if prfx.is_active:
            prefix = prfx
            break
    if not prefix:
        return jsonify({'success': False, 'msg': 'You do not have an active 
        prefix'})
    if not re.match('[0-9]{%d}' % len(prefix.prefix), prefix.prefix):
        return jsonify({'success': False, 'msg': 'This barcode is not of your 
        active prefix'})
    '''

    data_complete = get_completion(request.user, gtin)

    barcode = Storage({
        'gtin': str(gtin),
        'omlet': 'preview',
        'id': str(gtin),
        'bwr': bwr,
        'size': size,
        'kind': kind,
        'pmk': marks,
        'price': None,
        'name': None,
        'debug': debug,
        'rqz': rqz
    })

    image_preview_path = os.path.join(settings.BARCODES_FILES_PATH,
                                      str(request.user.id), kind)
    image_preview = Preview(request,
                            barcode,
                            debug=debug,
                            watermark=True,
                            path=image_preview_path)

    # Check cache for generated barcode
    if not os.path.exists(image_preview.img_fqn):
        image_preview.generate()

    context = {
        'image': image_preview.image,
        'gtin': gtin,
        'kind': kind,
        'prefix': prefix,
        'points': 0,  # current_user.organisation.credit_points_balance
        'data_compoete': data_complete,
        'barcode_credits':
        request.user.profile.member_organisation.barcode_credits
    }

    return render(request, 'barcodes/preview.html', context)
示例#16
0
def account_create_or_update(request):

    auth_only = False

    if request.method == 'POST':
        form = AccountCreateOrUpdateForm(request.POST)
        if form.is_valid():
            try:
                if not request.user.is_anonymous:
                    m2m_token = form.cleaned_data.get('m2m_token', '')
                    if not check_m2m_token(request.user, m2m_token):
                        return redirect(reverse('BCM:login'))

                try:
                    member_organisation = MemberOrganisation.objects.get(
                        slug=form.cleaned_data.get('member_organisation'))
                except MemberOrganisation.DoesNotExist:
                    member_organisation = None

                # core data
                email = form.cleaned_data.get('email')
                company_name = form.cleaned_data.get('company_name')

                # get company
                company_organisation, company_organisation_created = CompanyOrganisation.objects.get_or_create(
                    uuid=form.data.get('uuid'),
                    member_organisation=member_organisation)

                # update company name if any
                if company_name:
                    company_organisation.company = company_name
                    company_organisation.name = company_name
                    company_organisation.save()

                auth_user, auth_user_created = users_service.get_or_create(
                    email=email,
                    defaults={
                        'username': email,
                        'customer_role': 'gs1ie',
                        'member_organisation': member_organisation,
                        'company_organisation': company_organisation
                    })

                auth_user.save()

                company_organisation = users_service.get_company_organisation(
                    auth_user)
            except Exception as e:
                return jsonify(success=False, message=str(e))

            log_message = 'logging in: ' + str(auth_user.email) + '::' + str(
                company_organisation.company)
            log_extra = {
                'user': auth_user.email,
                'company': company_organisation.company,
                'ip_address': request.environ.get('REMOTE_ADDR')
            }
            logging.getLogger().info(log_message, extra=log_extra)
            logging.getLogger('audit').info(log_message, extra=log_extra)

            if form.data.get('company_prefix', '') == 13 * '0':
                auth_only = True

            if not auth_only:
                # if user's organisation has prefix override, use it
                # if not use prefixes provided by the form
                if not company_organisation.prefix_override:
                    form_prefix = form.data.get('company_prefix', '')
                else:
                    form_prefix = company_organisation.prefix_override
                form_prefixes = form_prefix.split(',')

                prefixes = prefix_service.find(user=auth_user).all()
                prefixes_list = list(prefixes.values_list('prefix', flat=True))

                # set gln to be first prefix
                if len(prefixes_list) > 0:
                    first_prefix = prefixes_list[0]
                    derived_gln = normalize("EAN13", first_prefix)
                    company_organisation.gln = derived_gln
                    company_organisation.save()

                for prfx in form_prefixes:
                    if not re.match(member_organisation.gs1_prefix_regex,
                                    prfx[:3]) or len(prfx) < 6:
                        if prfx.find(
                                '20'
                        ) == 0:  # we will not complain about variable weight
                            continue
                        else:
                            return jsonify(success=False,
                                           message='Invalid prefix %s' % prfx)
                    if prfx not in prefixes_list:
                        try:
                            prefix = prefix_service.create(
                                user=auth_user,
                                prefix=prfx,
                                status_id=Prefix.ACTIVE)
                        except IntegrityError:
                            return jsonify(
                                success=False,
                                message=
                                'Prefix %s has been allocated for another user'
                                % prfx)
                        try:
                            prefix.make_starting_from()
                        except:
                            prefix.starting_from = None
                        prefix_service.save(user=auth_user, prefix=prefix)
                    else:
                        i = prefixes_list.index(prfx)
                        if prefixes[i].is_suspended:
                            prefixes[i].is_suspended = False
                            prefix_service.save(prefixes[i])

                for prfx in prefixes_list:
                    if prfx not in form_prefixes:
                        prefix = prefix_service.find(user=auth_user,
                                                     prefix=prfx).first()
                        prefix.is_suspended = True
                        # prefix.is_active = False
                        prefix_service.save(prefix)

                # Check active prefix and set accordingly
                user_active_prefix = auth_user.profile.product_active_prefix
                if not user_active_prefix:
                    prefix = prefix_service.find(
                        user=auth_user,
                        is_suspended=False).order_by('prefix').first()

                    if prefix:
                        prefix_service.make_active(user=auth_user,
                                                   prefix=prefix.prefix)
                        prefix_service.save(prefix)
                    else:
                        return jsonify(success=False,
                                       message='No working prefix found')

            return redirect(get_api_auth(auth_user.email))
    else:
        form = AccountCreateOrUpdateForm()

    try:
        m2m_token_set = request.user.auth_token_set.all()
        m2m_token = m2m_token_set[0].digest
    except Exception:
        m2m_token = ''

    context = {
        'current_user': request.user,
        'm2m_token': m2m_token,
        'active_page': '',
        'form': form
    }
    return render(request, 'activate/AccountCreateOrUpdate.html', context)