Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
def js_add_product(request):
    """
    GET/POST for adding a new base or case product
    :return:
    """

    user_active_prefix = request.user.profile.product_active_prefix
    prefix = request.POST.get('prefix', None)
    if prefix is None:
        prefix = request.GET.get('prefix', None)
    if prefix:
        prefix = prefix_service.find_item(user=request.user, prefix=prefix)
        if prefix and prefix != user_active_prefix:
            prefix_service.make_active(user=request.user, prefix=prefix.prefix)
        if request.session.get('new_product', None):
            del request.session['new_product']
    else:
        prefix = user_active_prefix
    if not prefix:
        flash(request, 'You must have an active prefix set to enter new product. Please choose one', 'danger')
        return redirect(reverse('prefixes:prefixes_list'))
    if not prefix.starting_from:
        flash(request, 'You must have a starting number set to enter new product. Please set one', 'danger')
        return redirect(reverse('prefixes:prefixes_list'))
    if prefix.is_special == 'READ-ONLY':
        flash(
            request, 'You can not add a new product in this range. It\'s a suspended read-only range', 'danger'
        )
        return redirect(reverse('products:products_list'))

    # if prefix.is_special != 'NULL':
    #    package_rows = services.package_level_service.find(
    #        id=models.PACKAGE_LEVEL_SPECIAL_ENUM[prefix.is_special]).all()
    # else:
    #    package_rows = package_level_service.all()
    package_rows = PackageLevel.service.all()

    express = True if request.POST.get('express') or request.GET.get('express') else False

    title = _('New Product')

    if express:
        title = 'Express Allocation'

    if request.method == 'POST':
        form = PackageLevelForm(request.POST)
        form.set_package_levels(package_rows)
        if form.is_valid():
            if not request.session.get('new_product', None):
                request.session['new_product'] = {'gtin': str(prefix.starting_from),
                                                  'package_level': form.data['package_level']}
            elif request.session.get('new_product')['gtin'] != str(prefix.starting_from):
                request.session['new_product'] = {'gtin': str(prefix.starting_from),
                                                  'package_level': form.data['package_level']}
            else:
                request.session['new_product']['package_level'] = form.data['package_level']
            if express:
                request.session['new_product'].update({'express': True})
            elif 'express' in request.session['new_product']:
                del request.session['new_product']['express']
            return redirect(reverse('products:add_product_package_type'))
            # if session['new_product']['package_level'] == str(models.BASE_PACKAGE_LEVEL):
            #    if session['new_product'].get('express'):
            #        return redirect(url_for('products.add_product_express'))
            #    else:
            #        return redirect(url_for('products.add_product_package_type'))
            # else:
            #    return redirect(url_for('products.subproduct_add_case'))
        else:
            flash(request, 'You must choose a level to proceed', 'danger')
    else:
        form = PackageLevelForm()
        form.set_package_levels(package_rows)
        if (
            request.session.get('new_product', None) and
            request.session.get('new_product')['gtin'] == str(prefix.starting_from)
        ):
            form.data['package_level'] = request.session.get('new_product')['package_level']

    package_type_list_qs = PackageType.service.filter(ui_enabled=True).order_by('id').all()
    package_type_list = json.loads(serializers.serialize("json", package_type_list_qs))
    context = {
        'title': title,
        'prefix': prefix,
        'flashed_messages': flash_get_messages(request),
        'form_data_json': json.dumps({
            'mo_slug': prefix.member_organisation.slug,
            'package_type_list': package_type_list,
            'gtin': str(prefix.starting_from),
            'gln_of_information_provider': normalize('EAN13', prefix.prefix),
            'language': translation_helpers.get_current_language(),
            'fallback_languages': settings.FALLBACK_LANGUAGES,
        })
    }

    return render(request, 'products/product_add_js.html', context)
Beispiel #4
0
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        try:
            member_organisation = MemberOrganisation.objects.get(
                slug=request.data['member_organisation'])
        except:
            return Response({'data': 'Unknown member_organisation'},
                            status=status.HTTP_400_BAD_REQUEST)
        if member_organisation.login_api_auth_only:
            try:
                company_organisation, auth_user = self.perform_login(
                    serializer)
            except Exception:
                return Response({'data': 'Unknown user'},
                                status=status.HTTP_400_BAD_REQUEST)
        else:
            company_organisation, auth_user = self.perform_create(serializer)

        member_organisation = auth_user.profile.member_organisation

        self.push_info_to_logger(auth_user, company_organisation)

        if member_organisation.login_api_secure:
            try:
                token_user = request._auth.user
                assert token_user.profile.member_organisation == auth_user.profile.member_organisation
            except AssertionError as e:
                return Response({'data': 'm2m token mismatch'},
                                status=status.HTTP_400_BAD_REQUEST)

        # return if we are in read-only mode
        if member_organisation.login_api_auth_only:
            return Response(get_api_auth(auth_user.email),
                            status=status.HTTP_200_OK)

        # 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 = serializer.validated_data.get('company_prefix', None)
        else:
            form_prefix = company_organisation.prefix_override
        if form_prefix is not None:
            form_prefixes = form_prefix.split(',')
        else:
            form_prefixes = []

        prefixes = prefix_service.find(user=auth_user).all()
        prefixes_list = [v for v in 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

        # if we are in read-write copy country from MO to the company
        self.set_country_and_save(company_organisation, member_organisation)

        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 Response(status=400, data=f'Invalid prefix {prfx}')

            if prfx not in prefixes_list:
                try:
                    prefix = prefix_service.create(user=auth_user, prefix=prfx)
                except IntegrityError:
                    return Response(
                        status=400,
                        data=
                        f'Prefix {prfx} has been allocated for another user')
                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_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 Response(status=400, data='No working prefix found')

        return Response(get_api_auth(auth_user.email),
                        status=status.HTTP_201_CREATED)
Beispiel #5
0
    def handle(self, *args, **options):
        """
        python manage.py load_company_user deployment/deployment-v1-2018-03/mo_users.json
        :return:
        """
        filename = options['filename']

        try:
            with open(filename) as json_data:
                data = json.load(json_data)
        except Exception as e:
            print(
                '\n**************\nUnable to load json file. {0}. \n\n\nException message: '
                .format(filename), e.message)
        else:

            companies_data = data.get('companies')
            if companies_data:
                for company_data in companies_data:

                    if not 'uuid' in company_data:
                        continue
                    try:
                        # expected value: email, company_name, member_organization, uuid, company_prefix
                        email = company_data.get('email')
                        company_name = company_data.get('company_name')
                        try:
                            member_organisation = MemberOrganisation.objects.get(
                                slug=company_data.get('role'))
                        except MemberOrganisation.DoesNotExist:
                            member_organisation = None

                        # get company
                        company_organisation, company_organisation_created = CompanyOrganisation.objects.get_or_create(
                            uuid=company_data.get('uuid'),
                            defaults={
                                'member_organisation': member_organisation,
                                'name': company_data.get('name')
                            })
                        #print("Company  Created:- " if company_organisation_created else "Company Updated:- ",
                        #      u' '.join(
                        #          [company_organisation.uuid]).encode('utf-8').strip())

                        # 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,
                                'member_organisation': member_organisation,
                                'company_organisation': company_organisation
                            })

                        auth_user.save()
                        # print('Create New User:- ' if auth_user_created else 'Updated User:- ', auth_user.email)
                        company_organisation = users_service.get_company_organisation(
                            auth_user)

                    except Exception as e:
                        print(company_data)
                        print(str(e))
                        continue

                    log_message = 'logging in: ' + str(
                        auth_user.email) + '::' + str(
                            company_organisation.company)
                    log_extra = {
                        'user': auth_user.email,
                        'company': company_organisation.company
                    }
                    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 company_organisation.prefix_override:
                        form_prefix = company_organisation.prefix_override
                        form_prefixes = form_prefix.split(',')
                    else:
                        form_prefixes = company_data.get('prefixes')

                    prefixes = prefix_service.find(user=auth_user).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(user=auth_user,
                                                               prefix=prfx)
                            except IntegrityError:
                                print(
                                    '\n\n*** ERROR:  Prefix {0} has been allocated for another user\n\n'
                                    .format(prfx))
                                continue
                            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(user=auth_user,
                                                         prefix=prfx).first()
                            prefix.is_suspended = True
                            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:
                            print('\n\nERROR: No working prefix found\n\n')
                            continue

                    serializer = URLSafeTimedSerializer(settings.SECRET_KEY)
                    token = serializer.dumps(
                        [auth_user.email, company_organisation.uuid])
                    logging.getLogger().debug('Created token: %s' % token)
Beispiel #6
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)
Beispiel #7
0
def add_product_base_details(request):
    """
     -- used for the NEW (Step 2 - EACH)
    GET / POST for adding a base level item
    :template_name: products/product_details_form.html
    :return:
    """

    session = request.session.get('new_product', None)
    if not session:
        raise Http404()
    for k in ['package_type', 'package_level', 'gtin', 'bar_placement']:  # Check session and restart if missing
        if k not in session.keys():
            del request.session['new_product']
            flash(request, 'Add new product restarted #010', 'danger')
            return redirect(reverse('products:add_product'))

    gtin = session.get('gtin', '0')

    prefix = prefix_service.find_item(user=request.user, starting_from=gtin)
    if not prefix:
        raise Http404()
    if prefix.is_upc():
        kind = 'UPCA'
    else:
        kind = 'EAN13'

    if request.method == 'POST':
        context_is_new = 0
        post_data = request.POST.dict()

        form = ProductDetailForm(data=post_data)

        verified = True
        if not form.data.get('gtin', '')[1:14].startswith(prefix.prefix):
            flash(request, 'You entered a non valid GTIN number (error #001)', 'danger')
            verified = False
        if not form.is_valid(request):
            verified = False
        if verified:
            form_data = {}
            for formfield in form.cleaned_data:
                try:
                    if formfield == 'csrfmiddlewaretoken':
                        continue
                    if form.data[formfield] != '':
                        form_data[formfield] = form.cleaned_data[formfield]
                    else:
                        pass
                except Exception as e:
                    pass

            try:
                ### PRODUCT CREATE UI
                with translation.override(form_data.get('language', 'en')):
                    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:add_product_base_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 request.session.get('new_product'):
                del request.session['new_product']

            return redirect(reverse('products:view_product_summary', args=(product.id,)))
        else:
            logging.debug('ProductDetailFormOptions error: %s' % str(form.errors))
    else:
        context_is_new = 1
        form = ProductDetailForm()
        # default values - new product GET
        form.initial['gln_of_information_provider'] = normalize('EAN13', prefix.prefix)
        form.initial['is_bunit'] = True
        form.initial['company'] = prefix.company_organisation.company

    form.initial['gtin'] = '0' + session.get('gtin')
    form.initial['bar_placement'] = session.get('bar_placement')
    form.initial['package_level'] = session.get('package_level')
    form.initial['package_type'] = session.get('package_type')
    form.initial['image'] = session.get('image', settings.NO_IMAGE)

    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
    form.initial['category'] = 'asdfasdf'

    context = {'title': 'New Base Unit / Each (Step 2 of 2: Details)',
               'is_new': context_is_new,
               'prefix': prefix,
               'gtin0': '0',
               'gtin13': session['gtin'],
               'kind': kind,
               'product_package_level_id': int(session['package_level']),
               'leading_gln': normalize('EAN13', prefix.prefix),
               'form': form,
               'flashed_messages': flash_get_messages(request)}
    return render(request, 'products/product_details_form.html', context=context)