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)
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')
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)
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)
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)
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
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)
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)
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)
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)
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)
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)
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)
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)
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)