def test_prefix_increase(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' starting_from = prefix.starting_from response = self.client.post(self.url, self.valid_data) assert response.status_code == 302 assert response.url == '/products/1/view_summary/' prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert starting_from != prefix.starting_from
def test_increase_active_prefix(self): prefix = prefix_service.find_item(user=self.user, starting_from='5390001100003') self.loadSession() self.loadProducts() response = self.client.post(self.url, self.valid_data) assert response.status_code == 302 assert response.url == '/products/4/view_summary/' prefix = prefix_service.find_item(user=self.user, prefix=prefix.prefix) assert prefix.starting_from == '5390001100027'
def test_next_number_field(self): response = self.client.get(self.url, follow=True) assert response.status_code == 200 # self.assertNotContains(response, '<b>53900011</b><span # style="color:#F26334">0002</span>7') prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix.starting_from = '5390001100027' prefix.save() prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix.starting_from == '5390001100027' response = self.client.get(self.url, follow=True) assert response.status_code == 200
def test_ajax(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix.description == '' prefix_id = prefix.id response = self.client.post('/prefixes/ajax/', { 'pk': prefix_id, 'value': 'New description' }) assert response.status_code == 200 assert response.content == b'{"success": true}' prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix.description == 'New description'
def _test_suspended_prefixes_exist(self): response = self.client.get(self.url) assert response.status_code == 200 prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix.is_suspended = 1 prefix.save() prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix.is_suspended == 1 response = self.client.get(self.url) assert response.status_code == 200 self.assertContains(response, 'Suspended prefixes') self.assertContains(response, '<td>53900011</td>')
def test_product_delete_set(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') prefix.starting_from = '5390001100010' prefix.save() url = self.reverse('products:delete_product', product_id=2) + '?set=1' response = self.post(url) assert response.status_code == 302 assert response.url == self.reverse('products:products_list') response = self.get('products:products_list') assert response.status_code == 200 #self.assertContains(response, 'Product 1') self.assertNotContains(response, 'Product 2') #self.assertContains(response, 'Product 3') prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.starting_from == '5390001100003'
def setUp_createAccount(self): country = Country(slug='BE', name='Belgium') country.save() member_organisation = MemberOrganisation(name='GS1', slug='gs1', is_active=1, country=country) member_organisation.save() data = { 'uuid': '53900011', 'email': '*****@*****.**', 'company_prefix': '53900011,53900012', 'company_name': 'GS1 Ireland', 'credits': '39:20,43:100,44:100', 'txn_ref': 'Test_1,Test_3,Test_2', 'member_organisation': 'gs1' } url = '/API/v0/AccountCreateOrUpdate/' response = self.client.post(url, data=data) assert response.status_code == 302 self.client.get(response.url) user = User.objects.get(email='*****@*****.**') user.profile.agreed = True user.profile.save() prefix = prefix_service.find_item(user=user, prefix='53900011') assert prefix.prefix == '53900011' prefix_service.make_active(user=user, prefix=prefix.prefix) self.user = user return user
def setUp(self): self.user = self.setUp_createAccount() prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' if prefix == self.user.profile.product_active_prefix: self.user.profile.product_active_prefix = None self.user.profile.save()
def test_with_active_prefix(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix_service.make_active(user=self.user, prefix=prefix.prefix) response = self.client.get(self.url) self.assertContains(response, 'New Product') self.assertContains(response, 'Packaging Level')
def test_active(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.status_id == Prefix.ACTIVE response = self.client.get(self.url) assert response.status_code == 200 self.assertNotContains(response, 'Suspended prefixes') self.assertNotContains(response, 'Transferred prefixes')
def excel_import_file(request): def validate_file(filename): ALLOWED_EXTENSIONS = {'xls', 'xlsx', 'ods', 'csv'} return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS prefix_prefix = prefix_service.get_active(user=request.user) if prefix_prefix: prefix = prefix_service.find_item(user=request.user, prefix=prefix_prefix) else: flash( request, 'You must have an active prefix to be able to import product data', 'danger') return redirect(reverse('prefixes:prefixes_list')) if request.method == 'POST': imp_file = request.FILES['import_file'] if imp_file and validate_file(imp_file.name): ext = imp_file.name.rsplit('.', 1)[1] tfile = tempfile.NamedTemporaryFile(suffix=".%s" % ext, delete=False) for chunk in imp_file.chunks(): tfile.write(chunk) tfile.close() # try: errors = import_products(prefix, request.user, tfile.name, request) if errors and len(errors) != 0: zfile = tempfile.NamedTemporaryFile(suffix='.zip') with ZipFile(zfile.name, 'w') as z: efile = tempfile.NamedTemporaryFile(suffix='.txt') with open(efile.name, 'w') as error_file: for error in errors: for label, field_errors in error.items(): error_file.write('%s: \r\n' % label) for field, field_error in field_errors.items(): error_file.write('\t%s: %s\r\n' % (field, field_error)) error_file.write('\r\n') z.write(efile.name, 'import_errors.txt') try: prefix.make_starting_from() except Exception as ex: prefix.starting_from = None finally: prefix_service.save(prefix) send_file = open(zfile.name, 'rb') response = HttpResponse(send_file, content_type='application/zip') response[ 'Content-Disposition'] = 'attachment; filename="import_errors.zip"' return response else: flash(request, 'Import completed with no errors', 'success') return redirect(reverse('products:products_list')) form = ImportForm() context = {'prefix': prefix, 'form': form} return render(request, 'excel/import_file.html', context=context)
def products_list_js(request): user_active_prefix = request.user.profile.product_active_prefix if request.GET.get('prefix'): prefix = prefix_service.find_item(user=request.user, prefix=request.GET.get('prefix')) if prefix and prefix != user_active_prefix: prefix_service.make_active(prefix.prefix, user=request.user) elif not prefix: flash(request, 'Incorrect active prefix. Please choose one', 'danger') return redirect(reverse('prefixes:prefixes_list')) else: prefix = user_active_prefix if not prefix: flash(request, 'You must have an active prefix to see products. Please choose one', 'danger') return redirect(reverse('prefixes:prefixes_list')) templates = {} for item in ProductTemplate.objects.filter(member_organisation=request.user.profile.member_organisation): templates[item.package_level_id] = True all_in_range = Product.objects.filter( company_organisation=request.user.profile.company_organisation, gs1_company_prefix=prefix.prefix ) completeness = product_helper.get_completeness(all_in_range) context = { 'prefix': prefix, 'templates': templates, 'completeness': completeness } return render(request, 'products/list_js.html', context=context)
def setUp_createAccount(self): country, is_created = Country.objects.get_or_create(slug='BE', name='Belgium') member_organisation, is_created = MemberOrganisation.objects.get_or_create( slug='gs1', defaults=dict(name='GS1', gs1_enable_advanced_dashboard=1, is_active=1, country=country)) response = self.client.post( '/API/v0/AccountCreateOrUpdate/', { 'uuid': '53900011', 'email': '*****@*****.**', 'company_prefix': '53900011,53900012', 'company_name': 'GS1 Ireland', 'credits': '39:20,43:100,44:100', 'txn_ref': 'Test_1,Test_3,Test_2', 'member_organisation': 'gs1' }) assert response.status_code == 302 self.client.get(response.url) user = User.objects.get(email='*****@*****.**') assert not user is None user.profile.agreed = True user.profile.save() prefix = prefix_service.find_item(user=user, prefix='53900011') assert prefix.prefix == '53900011' prefix_service.make_active(user=user, prefix=prefix.prefix) return user
def test_frozen(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') prefix.status_id = Prefix.FROZEN prefix.save() response = self.client.get(self.url) assert response.status_code == 200 self.assertNotContains(response, 'Suspended prefixes') self.assertNotContains(response, 'Transferred prefixes')
def test_prefix_rollover_product(self): response = self.client.post(self.url, self.valid_data) assert response.status_code == 302 assert response.url == '/products/1/view_summary/' prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix.starting_from = '5390001199991' prefix.increment_starting_from() assert prefix.starting_from == '5390001100010'
def delete_product(request, product_id): product = Product.service.get_my_product(request.user, product_id) user_active_prefix = request.user.profile.product_active_prefix prefix = prefix_service.find_item(user=request.user, prefix=product.gs1_company_prefix) if not prefix: raise Http404() if prefix != user_active_prefix: flash(request, 'This product is not in your active prefix', 'danger') return redirect(reverse('products:products_list')) if prefix.is_special == 'READ-ONLY': flash(request, 'This product belongs to read only range', 'danger') return redirect(reverse('products:products_list')) #if product.associated_products: # flash(request, 'This product is part of a container and cannot be deleted', 'danger') # return redirect(request.referrer) gtin = product.gtin if product.image != settings.NO_IMAGE: try: image = os.path.split(product.image)[1] except: image = None else: image = None if image: delete_product_image(image, request.user.id) ''' barcodes = Barcodes.service.find(product_id=product_id, user_id=request.user.id).all() for barcode in barcodes: delete_barcode_images(gtin[1:14], current_user.id) services.barcode_service.delete(barcode) ''' ''' sub_product_entries = services.sub_product_service.find(product_id=product_id).all() try: services.product_service.delete(product) except Exception as e: logging.getLogger().error('Delete product error: ' + str(e)) flash('An error happened while trying to delete this product', 'danger') return redirect(request.referrer) for sbe in sub_product_entries: services.sub_product_service.delete(sbe) ''' extra = '' if request.GET.get('set'): prefix.starting_from = gtin[1:14] prefix_service.save(user=request.user, prefix=prefix) extra = " Prefix's starting number set to deleted product's GTIN" product.delete() flash(request, 'Product deleted successfully.' + extra, 'success') return redirect(reverse('products:products_list'))
def _add_package_type(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix_service.make_active(user=self.user, prefix=prefix.prefix) package_level = PackageLevel( id='60', level='Consumer Unit (Base Unit/Each) e.g. bottle of beer', unit_descriptor='BASE_UNIT_OR_EACH') package_level.save() response = self.client.post('/products/add/', {'package_level': '60'}) assert response.status_code == 302 assert response.url == '/products/add_product_package_type/'
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 fulledit(request, product_id): """ displays via GET and provides product update mechanics via POST :param product_id: :return: """ product = Product.service.get_my_product(request.user, product_id) user_active_prefix = request.user.profile.product_active_prefix prefix = prefix_service.find_item(user=request.user, prefix=product.gs1_company_prefix) if not prefix: raise Http404() if prefix != user_active_prefix: flash(request, 'This product is not in your active prefix', 'danger') return redirect(reverse('products:products_list')) barcodes = {} # for bc in product.barcodes: # barcodes.update({bc.kind: bc}) if request.GET.get('barcodes'): active_tab = 'barcodes' elif request.GET.get('cloud'): active_tab = 'cloud' else: active_tab = 'details' if prefix.is_upc(): kind = 'UPCA' else: kind = 'EAN13' context = {'product': product, 'barcodes': barcodes, 'active_tab': active_tab, 'product_id': product_id, 'pkg_level': product.package_level_id, 'prefix': prefix, 'agreed': request.user.profile.agreed, 'product_image': product.website_url, 'gtin': product.gtin, 'gtin0': product.gtin[0:1], 'gtin13': product.gtin[1:14], 'product_package_level_id': product.package_level_id, 'advanced_tab': product.owner.profile.advanced_tab, 'kind': kind } # if sub_products: # context.update({'nop': product.number_of_products()}) # context['sub_products'] = _get_subprods_from_obj(product) return render(request, 'products_react/product_react_fulledit_form.html', context=context)
def add_product_package_type(request): """ package type selector :return: """ session = request.session.get('new_product', None) if not session: raise Http404('Session does not exist') gtin = session.get('gtin', None) if not gtin: raise Http404('No gtin in session') prefix = prefix_service.find_item(user=request.user, starting_from=str(gtin)) if not prefix: raise Http404('Starting prefix (%s) not found' % prefix) if request.method == 'POST': form = PackageTypeForm(request.POST, prefix=prefix) if form.is_valid(): request.session['new_product'].update({ 'package_type': form.cleaned_data['package_type'], 'bar_placement': form.cleaned_data['bar_placement'] }) if session.get('package_level') == '70': return redirect(reverse('products:add_product_base_details')) else: return redirect(reverse('products:subproduct_add_case')) else: form = PackageTypeForm(prefix=prefix) if session.get('package_level') == '70': form.initial['bar_placement'] = settings.STATIC_URL + 'products/site/wizard/proddesc/BG.png' form.initial['package_type'] = '1' else: form.initial['bar_placement'] = settings.STATIC_URL + 'products/site/wizard/proddesc/CS.png' form.initial['package_type'] = '34' if session.get('package_level') == '70': package_level = 'Base Unit / Each' elif session.get('package_level') == '60': package_level = 'Pack or inner pack' elif session.get('package_level') == '50': package_level = 'Case or mixed case' elif session.get('package_level') == '40': package_level = 'Display unit' else: package_level = 'Pallet' # 30 context = { 'form': form, 'prefix': prefix, 'package_types': PackageType.service.filter(ui_enabled=True).order_by('id'), 'package_level': package_level } return render(request, 'products/package_type_form.html', context=context)
def prefixes_set_starting(request, prefix_id): current_user = request.user prefix = prefix_service.find_item(user=current_user, id=prefix_id) if not prefix: raise Http404() sn_length = 12 - len(prefix.prefix) if request.method == 'POST': error = 'Incorrect entry. Please enter a valid number' form = StartingNumberForm(request.POST) if form.is_valid(): if len(form.data['starting_number']) == sn_length: try: int(form.cleaned_data['starting_number']) except (ValueError, TypeError): pass else: starting_number = normalize( 'EAN13', prefix.prefix + form.cleaned_data['starting_number']) products = product_service.filter( gtin="0" + starting_number, owner=current_user).all() if len(products) == 0: prefix.starting_from = starting_number prefix_service.save(prefix) flash( request, 'Starting gtin has been set to GTIN-%s' % prefix.starting_from, 'success') return redirect(reverse('prefixes:prefixes_list')) else: error = 'This number is already assigned. Try another one.' flash(request, error, 'danger') form = StartingNumberForm() if not prefix.starting_from: try: prefix.make_starting_from() except: return render(request, 'prefixes/prefix_exhausted.html', { 'current_user': current_user, 'prefix': prefix }) prefix_service.save(prefix) form.data['starting_number'] = prefix.starting_from[len(prefix.prefix):12] context = { 'current_user': current_user, 'prefix': prefix, 'form': form, 'current': prefix.starting_from, 'sn_length': sn_length, 'flashed_messages': flash_get_messages(request) } return render(request, 'prefixes/set_starting.html', context=context)
def prefixes_ajax(request): if request.method != 'POST': return Http404() current_user = request.user prefix_id = request.POST.get('pk', None) if not prefix_id: return Http404() company_organisation = users_service.get_company_organisation(current_user) prefix = prefix_service.find_item( company_organisation=company_organisation, id=prefix_id) if not prefix: return Http404() prefix.description = request.POST.get('value', None) prefix_service.save(prefix) return jsonify(success=True)
def test_tm_stays_gtin_allocated(self): products_count_old = len(Product.objects.all()) product = Product.objects.get(id=2) product.package_level_id = PackageLevel.BASE product.save() prefix = prefix_service.find_item(user=self.user, prefix=product.gs1_company_prefix) for i in range(0, 3): prefix.increment_starting_from() prefix_service.save(prefix) url = self.reverse( 'products:duplicate_product', product_id=product.id, target_market=product.target_market.code ) response = self.client.get(url) assert response.status_code == 302 assert response.url == '/products/4/fulledit/' assert response.url != self.reverse('products:fulledit', product_id=product.id) products_count_new = len(Product.objects.all()) assert products_count_new == products_count_old + 1 # new product created
def subproduct_add_case_skip(request): """ Clean selection of subproducts to be included into parent upper level item (PACK, CASE, ...). :return: """ session = request.session.get('new_product', {}) if not session: raise Http404() gtin = session.get('gtin', 0) prefix = prefix_service.find_item(user=request.user, starting_from=str(gtin)) if not prefix: raise Http404() pl = session.get('package_level', None) if not pl: flash(request, 'Choose a package level', 'danger') return redirect(reverse('products:add_product')) # we remove subproducts, we move to the next step session['sub_products'] = [] return redirect('/products/js-add/#/details?package_level=%s&package_type=%s' % (session['package_level'], session['package_type']))
def view_product_summary(request, product_id): product = Product.service.get_my_product(request.user, product_id) prefix = prefix_service.find_item(user=request.user, prefix=product.gs1_company_prefix) if not prefix: raise Http404() sub_products = sub_product_service.get_associated(product) nop = None if product.package_level.id == PackageLevel.BASE: title = 'New Base Unit / Each (Summary)' else: title = 'New item (Summary)' nop = len(sub_products) is_xhr = request.GET.get('xhr', False) and True if is_xhr: template_name = 'products/product_summary_xhr.html' else: template_name = 'products/product_summary.html' product_fields = [] product_fields_list = product._meta.get_fields() for field in product_fields_list: product_fields.append({'name': field.name, 'value': getattr(product, field.name)}) context = { 'title': title, 'prefix': prefix, 'product': product, 'product_fields': product_fields, 'nop': nop, 'sub_products': sub_products, 'debug': False } return render(request, template_name, context=context)
def test_make_active(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix == self.user.profile.product_active_prefix prefix1 = prefix.prefix prefix = prefix_service.find_item(user=self.user, prefix='53900012') assert prefix.prefix == '53900012' assert prefix != self.user.profile.product_active_prefix prefix2 = prefix.prefix prefix_service.make_active(user=self.user, prefix=prefix1) prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix == self.user.profile.product_active_prefix prefix = prefix_service.find_item(user=self.user, prefix='53900012') assert prefix.prefix == '53900012' assert prefix != self.user.profile.product_active_prefix prefix_service.make_active(user=self.user, prefix=prefix2) prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix != self.user.profile.product_active_prefix prefix = prefix_service.find_item(user=self.user, prefix='53900012') assert prefix.prefix == '53900012' assert prefix == self.user.profile.product_active_prefix
def test_models_get_active(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' assert prefix == self.user.profile.product_active_prefix
def test_models_make_starting_from(self): prefix = prefix_service.find_item(user=self.user, prefix='53900011') assert prefix.prefix == '53900011' prefix.make_starting_from() assert prefix.starting_from == '5390001100003'
def subproduct_add_case_details(request): """ GET / POST for adding a new upper level item (case, pack, pallet) :template_name: products/product_details_form.html :return: """ session = request.session.get('new_product', None) if not session: raise Http404() # Check session and restart if missing, allow for missing sub_products for k in ['sub_products', 'package_level', 'gtin']: if k not in session.keys(): del session['new_product'] flash(request, 'Add new product restarted #011', 'danger') return redirect(reverse('products:add_product')) gtin = session.get('gtin', '0') prefix = None if len(gtin) == 13: prefix = prefix_service.find_item( user=request.user, starting_from=str(gtin) ) elif len(gtin) == 14: # FIXME - dirty hack p_list = [gtin[1:x] for x in range(-6, 0)] # build a list of possible prefixes prefix = prefix_service.find_prefix_from_list(p_list) # select the correct one if not prefix: raise Http404() if prefix.is_upc(): kind = 'UPCA' else: kind = 'EAN13' p_ids = session.get('sub_products', []) if not p_ids: flash(request, 'Choose products for this container', 'danger') return redirect(reverse('products:subproduct_add_case')) if len(p_ids) == 1 and p_ids[0] == '0': arbitrary = True products = [] elif len(p_ids) == 0: arbitrary = False products = [] else: arbitrary = False products = [ (p, 0, True) for p in Product.objects.filter(id__in=p_ids).order_by('gtin').all() ] if len(products) == 0: flash(request, 'Choose products for this container', 'danger') return redirect(reverse('products:subproduct_add_case')) title = 'New item (Step 2 of 2: Details)' readonly = False # if not request.user.enable_leading: # readonly = True context = {'prefix': prefix, 'sub_products': products, 'title': title, 'arbitrary': arbitrary, 'product_package_level_id': int(session.get('package_level', '0')), 'kind': kind, 'readonly': readonly} if len(gtin) == 13: context.update({'gtin0': '0', 'gtin13': session.get('gtin','')}) elif len(gtin) == 14: # readonly = False context.update({'gtin0': gtin[0], 'gtin13': gtin[1:]}) context['leading_gln'] = normalize('EAN13', prefix.prefix) if request.method == 'POST': context['is_new'] = 0 sub_prods = _get_prods_from_form(request) context['sub_products'] = sub_prods form = ProductCaseDetailForm(request.POST) form_valid = form.is_valid(show_flash=request) if not form_valid: for error in form.errors: if error != 'optionalFields': error_message = '%s: %s' % (error, form.errors[error][0]) flash(request, error_message, 'danger') if not sub_prods and not arbitrary: flash(request, 'You must enter the number of products contained (error #006)', 'danger') form_valid = False if not arbitrary: subs_valid = _validate_subprods(request, sub_prods) else: subs_valid = True if not subs_valid: form.errors['subProducts'] = ['invalid subproducts'] if form.data.get('gtin', '')[1:14].startswith(prefix.prefix): gtin_valid = True else: flash(request, 'You entered a non valid GTIN number (error #001)', 'danger') gtin_valid = False if form_valid and subs_valid and gtin_valid: form_data = {} for formfield in form.data: try: if formfield == 'csrfmiddlewaretoken': continue if form.data[formfield] != '': form_data[formfield] = form.data[formfield] else: pass except Exception: pass try: ### PRODUCT CREATE UI (PACK) product = Product.service.create(owner=request.user, company_organisation=prefix.company_organisation, prefix=prefix, **form_data) except Exception as e: flash(request, str(e), 'danger') return redirect(reverse('products:subproduct_add_case_details')) # Load image if request.FILES: upload_image(request, product) # Update prefix try: prefix.increment_starting_from() prefix_service.save(prefix) except Exception as e: flash(request, str(e), 'danger') if not arbitrary: for sub_p in sub_prods: quantity = int(sub_p[1]) if quantity > 0: sub_product_service.create(product_id=product.id, sub_product_id=sub_p[0].id, quantity=sub_p[1]) if request.session.get('new_product'): del request.session['new_product'] return redirect(reverse('products:view_product_summary', args=(product.id,))) else: # GET context['is_new'] = 1 form = ProductCaseDetailForm() #_add_field_descriptions(form) if len(products) > 0: form.initial['brand'] = products[0][0].brand form.initial['sub_brand'] = products[0][0].sub_brand form.initial['functional_name'] = products[0][0].functional_name form.initial['variant'] = products[0][0].variant # copy category from child if there is just one child (issue #147) form.initial['category'] = products[0][0].category # set default GLN form.initial['gln_of_information_provider'] = normalize('EAN13', prefix.prefix) form.initial['company'] = prefix.company_organisation.company form.initial['package_level'] = session.get('package_level', '0') form.initial['package_type'] = session.get('package_type', '0') form.initial['image'] = session.get('image', settings.NO_IMAGE) # if _session['package_level'] in ["4", "70"]: # form.bar_placement.data = settings.STATIC_URL + 'products/site/wizard/proddesc/base.gif' if session.get('package_level', '0') in ['3', '60']: form.initial['bar_placement'] = settings.STATIC_URL + 'products/site/wizard/proddesc/innerpack_PIDS.gif' elif session.get('package_level', '0') in ['2', '50']: form.initial['bar_placement'] = settings.STATIC_URL + 'products/site/wizard/proddesc/case.png' elif session['package_level'] in ['1', '30']: form.initial['bar_placement'] = settings.STATIC_URL + 'products/site/wizard/proddesc/pallet_PIDS.gif' context['form'] = form country = request.user.profile.member_organisation.country country_of_origin = country_of_origin_service.find_by_country(country) if country_of_origin: form.initial['country_of_origin'] = country_of_origin.code target_market = target_market_service.find_by_country(country) if target_market: form.initial['target_market'] = target_market.code language_slug = request.user.profile.language language = language_service.find_by_slug(language_slug) if language: form.initial['language'] = language.slug return render(request, 'products/product_details_form.html', context=context)
def subproduct_add_case(request): """ Allows for selection of subproducts to be included into parent upper level item (PACK, CASE, ...). :return: """ session = request.session.get('new_product', {}) if request.GET.get('gtin', None): session['gtin'] = request.GET.get('gtin') if request.GET.get('package_level', None): session['package_level'] = request.GET.get('package_level') if request.GET.get('package_type', None): session['package_type'] = request.GET.get('package_type') request.session['new_product'] = session if not session: raise Http404() gtin = session.get('gtin', 0) prefix = prefix_service.find_item( user=request.user, starting_from=str(gtin) ) if not prefix: raise Http404() pl = session.get('package_level', None) if not pl: flash(request, 'Choose a package level', 'danger') return redirect(reverse('products:add_product')) try: page = int(request.GET.get('page', '1')) except (ValueError, TypeError): page = 1 settings_per_page = getattr(settings, 'PRODUCTS_PER_PAGE', 10) try: per_page = int(request.GET.get('per_page')) except (ValueError, TypeError): per_page = None if per_page: session['per_page'] = per_page else: per_page = session.get('per_page', settings_per_page) prefixes = prefix_service.all(user=request.user) package_level = package_level_service.get(pl) products = Product.service.get_available_subproducts( owner=request.user, package_level=package_level ) target_markets = gtin_target_market_service.get_by_products_list(products) target_market_choices = [['', '']] for target_market in target_markets: try: if target_market_choices[-1][0] == target_market.target_market.code: continue except Exception: pass target_market_choices.append([ target_market.target_market.code, target_market.target_market.market ]) filter_data = {} form = SubProductsForm() filterform = FilterForm() if request.method == 'POST': form = SubProductsForm(request.POST) if form.is_valid(): if request.POST.get('filtersubmit'): filterform = FilterForm(request.POST) if filterform.is_valid(): products = product_helper.filter_list(products, filterform) session['adding_filter'] = filter_data else: # form = forms.SubProductsForm(request.form) # we no longer use data from form but from session sub_products = session.get('sub_products', []) sub_products.sort() if len(sub_products) > 0: sub_products_data = Product.service.check_subproducts( sub_product_gtins=sub_products, package_level=package_level, owner=request.user ) if sub_products_data['is_valid']: # we have subproducts, we move to the next step session['sub_products'] = sub_products # return redirect(reverse('products:subproduct_add_case_details')) return redirect('/products/js-add/#/details?package_level=%s&package_type=%s' % (session['package_level'], session['package_type'])) else: # we have incorrect subproducts flash(request, sub_products_data['error'], 'danger') return redirect(reverse('products:subproduct_add_case')) else: # we do not have subproducts - we reselect flash(request, 'You must choose products before proceeding to next form', 'danger') return redirect(reverse('products:subproduct_add_case')) else: session['sub_products'] = [] if request.GET.get('clear_filter'): if session.get('adding_filter'): del session['adding_filter'] if session.get('adding_filter'): filter_data = session['adding_filter'] else: filterform = FilterForm() filterform.initial['pallet'] = False if package_level.id >= PackageLevel.CASE: filterform.initial['case'] = False if package_level.id >= PackageLevel.PACK: filterform.initial['pack'] = False # products = ProductFilter(filter_data, queryset=products).qs filterform.set_prefixes(prefixes) if products: paginator = Paginator(products, per_page) try: paginator_page = paginator.page(page) except InvalidPage: paginator_page = paginator.page(1) object_list = paginator_page.object_list else: paginator_page = None object_list = None assoc_products = get_assoc_products_by_products_list(object_list) filterform.fields['target_market'].choices = target_market_choices filterform.base_fields['target_market'].choices = target_market_choices filterform.declared_fields['target_market'].choices = target_market_choices context = { 'products': object_list, 'assoc_products': assoc_products, 'prefix': prefix, 'form': form, 'filterform': filterform, 'pagination': paginator_page, 'per_page': per_page, 'ppp': settings_per_page, 'enable_leading': True # user.profile.enable_leading } return render(request, 'products/subproduct_add_case.html', context=context)