コード例 #1
0
def rm_ctg_fet(request, context=None):
    if request.method == 'POST':
        try:
            fetId = request.POST['feature_id']
            clientId = request.session['id']

            # Verification
            feature = CtgFeature.objects.get(client_id=clientId,
                                             feature_id=fetId,
                                             active=True)
            product = CtgProduct.objects.get(product_id=feature.product_id,
                                             active=True)

            redir = reverse('go_pr_config') + '?doc_id=' + \
                str(product.ctg_doc_id).replace('-', '')

            feature.active = False

            feature.save()
            # Cascade process
            removeFeatureCascade(feature.ctg_doc_id)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Feature removed'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #2
0
def rm_ctg_spec(request, context=None):
    if request.method == 'POST':
        try:
            flag = request.POST['flag']
            specId = request.POST['specification_id']

            # Verification
            client = UnoClient.objects.get(client_id=request.session['id'])
            spec = CtgSpecification.objects.get(specification_id=specId,
                                                active=True)

            redir = '?doc_id=' + str(spec.parent_ctg_id).replace('-', '')
            if flag == 'PR':
                redir = reverse('go_pr_config') + redir
            else:
                redir = reverse('go_fet_config') + redir

            spec.active = False

            spec.save()
            # Cascade process
            removeSpecCascade(spec.specification_id)
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Specification removed'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #3
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def rm_site(request, context=None):
    if request.method == 'POST':
        try:
            context = {}
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_site_config')

            siteId = request.POST['site-id']
            site = PtaSite.objects.get(pta_site_id=siteId)
            order = site.order_instance

            # Delete all products
            products = getAllProductsInSite(site)
            for product in products:
                deleteProductItem(product)

            site.delete()
            invalidateOrder(order)
            refreshOrdSessionData(order, request)
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Location has been removed'))
            return redirect('go_site_config')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_site_config')
コード例 #4
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def do_ord_valid(request, context=None):
    if request.method == 'POST':
        try:
            # Metadata
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None
            if not ordMeta:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Order request failed'))
                return redirect('go_ord_home')
            else:
                context = load_ord_meta_to_context(request, context)

            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])
            valid = validateOrder(order)
            refreshOrdSessionData(order, request)

            request.session['ord_valid_count'] = valid
            return redirect('go_ord_config_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_ord_config_home')
コード例 #5
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def find_ord_by_num(request, context=None):
    if request.method == 'POST':
        try:
            ordNumber = request.POST['order-number']

            # Check order
            order = PtaOrderInstance.objects.get(order_number=ordNumber)
            if order.status not in ('IN', 'IP', 'VA', 'FL'):
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Order cannot be accessed'))
                return redirect('go_ord_home')

            # Get order data
            ordData = generateOrderData(order)

            context = {}
            context['ordData'] = ordData

            return render(request, 'order/index.html', context=context)
        except ObjectDoesNotExist:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Order not found'))
            return redirect('go_ord_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown Error'))
            return redirect('go_ord_home')
    else:
        return redirect('go_ord_home')
コード例 #6
0
def rm_ctg_val(request, context=None):
    if request.method == 'POST':
        try:
            valueId = request.POST['value_id']

            # Verification
            client = UnoClient.objects.get(client_id=request.session['id'])
            value = CtgValue.objects.get(value_id=valueId)
            spec = CtgSpecification.objects.get(
                specification_id=value.specification_id, active=True)

            redir = reverse('go_spec_config') + '?doc_id=' + \
                str(spec.ctg_doc_id).replace('-', '')

            value.delete()

            store_context_in_session(
                request, addSnackDataToContext(context, 'Enumeration removed'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #7
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def do_ord_submit(request, context=None):
    if request.method == 'POST':
        try:
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_ord_summary')

            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])

            # Validation
            if order.status == 'VA':
                order.status = 'FL'
                basket = order.basket
                basket.is_locked = True

                # Send external request here
                # No code is provided due to the nature of this project

                # Archive record
                oldAr = UnoOrder.objects.filter(
                    order_number=order.order_number)
                if not oldAr or len(oldAr) < 1:
                    arOrder = UnoOrder(order_number=order.order_number,
                                       client=order.client,
                                       customer=order.customer,
                                       opportunity=order.opportunity,
                                       status='SM')
                    arOrder.save()

                    # Increase deal count
                    oppo = order.opportunity
                    oppo.deal_count += 1
                    oppo.save()

                basket.save()
                order.save()
                clear_ord_meta(request)

                return go_success(
                    HttpRequest(),
                    {'message': get_app_message('order_submit_message')})
            else:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Cannot submit this order'))
                return redirect('go_ord_config_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_ord_summary')
コード例 #8
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def find_oppo_by_num(request, context=None):
    if request.method == 'POST':
        try:
            oppoNumber = request.POST['opportunity-number']

            opportunity = UnoOpportunity.objects.get(
                opportunity_number=oppoNumber)
            if not opportunity.active or opportunity.deal_count >= opportunity.deal_limit:
                raise AssertionError

            # Get client and customer
            client = UnoClient.objects.get(client_id=opportunity.client_id)
            customer = UnoCustomer.objects.get(
                customer_id=opportunity.customer_id)

            # Fill opportunity details
            oppoData = {}
            opportunity.discount_nrc = getGeneralTranslation(
                opportunity.discount_nrc)
            opportunity.discount_mrc = getGeneralTranslation(
                opportunity.discount_mrc)
            opportunity.opportunity_number = str(
                opportunity.opportunity_number).replace('-', '')
            oppoData['opportunity'] = opportunity
            oppoData['reDeal'] = int(opportunity.deal_limit) - int(
                opportunity.deal_count)
            oppoData['clientName'] = client.entity_name
            oppoData['clientEml'] = client.contact_email
            oppoData['clientPh'] = client.contact_phone
            oppoData['clientCty'] = UnoCountry.get_country_by_code(
                client.country)
            oppoData['custName'] = customer.customer_name
            oppoData['custEml'] = customer.contact_email

            context = {}
            context['oppoData'] = oppoData

            return render(request, 'order/index.html', context=context)
        except ObjectDoesNotExist:
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Opportunity not found'))
            return redirect('go_ord_home')
        except AssertionError:
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Opportunity has expired'))
            return redirect('go_ord_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown Error'))
            return redirect('go_ord_home')
    else:
        return redirect('go_ord_home')
コード例 #9
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def do_enroll(request):
    if request and request.method == 'POST':
        try:
            context = {}

            # Verify client
            client = None
            if request.session:
                client = UnoClient.objects.get(client_id=request.session['id'])

            if not client:
                raise RuntimeError

            # Retrieve form values
            customer_name = request.POST['customer_name']
            contact_email = request.POST['contact_email']
            country = request.POST['country']

            if customer_name and contact_email and country:
                newCustomer = UnoCustomer(client=client,
                                          customer_name=customer_name,
                                          contact_email=contact_email,
                                          country=country)

                newCustomer.save()
                return go_success(
                    HttpRequest(), {
                        'message': get_app_message('enroll_success'),
                        'return_link': reverse('go_client')
                    })
            else:
                store_context_in_session(
                    request, addSnackDataToContext(context,
                                                   'Invalid form data'))
            return redirect('go_login')
        except RuntimeError:
            if hasattr(request, 'session') and request.session:
                request.session.clear()

            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Invalid client session'))
            return redirect('go_login')
        except Exception:
            # traceback.print_exc()
            logError(request)
            return go_error(
                HttpRequest(), {
                    'error': get_app_message('enroll_error'),
                    'message': get_app_message('enroll_error_message')
                })
    else:
        return redirect('go_client')
コード例 #10
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def go_site_config(request, context=None):
    try:
        context = get_context_in_session(request)

        if not context:
            context = {}

        # Get order metadata
        ordMeta = request.session[
            'order_meta'] if 'order_meta' in request.session else None
        if not ordMeta:
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Order request failed'))
            return redirect('go_ord_home')
        else:
            context = load_ord_meta_to_context(request, context)
            context['mapApi'] = getGoogleMapApiSource()

        order = PtaOrderInstance.objects.get(
            order_number=ordMeta['order_number'])
        if isOrderLocked(order):
            store_context_in_session(
                request, addSnackDataToContext(context, 'Order is locked'))
            return redirect('go_ord_config_home')

        # Load existing sites
        siteData = []
        sites = getAllSitesInOrder(order)

        for site in sites:
            data = {}
            doc = site.site
            data['id'] = str(site.pta_site_id)
            data['name'] = site.site_name
            data['valid'] = '1' if site.is_valid else '0'
            data['addr'] = ', '.join([doc.address_1, doc.city, doc.country])
            data['state'] = doc.state
            data['prCount'] = len(getAllProductsInSite(site))
            siteData.append(data)

        context['siteData'] = siteData
        context['siteCount'] = len(siteData)

        return render(request, 'order/order-site.html', context=context)
    except Exception:
        # traceback.print_exc()
        logError(request)
        store_context_in_session(
            request, addSnackDataToContext(context, 'Redirect error'))
        return redirect('go_ord_home')
コード例 #11
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def auth_login(request):
    context = {}

    if request.method == 'POST':
        try:
            username = request.POST['username']
            password = request.POST['password']
            unHash = getSha224Hash(username)
            psHash = getSha224Hash(password)

            if unHash == getAdminCredentials(
            )[0] and psHash == getAdminCredentials()[1]:
                request.session['id'] = getCpAdminId()
                return redirect('go_admin')

            # Get client credentials data
            credObj = UnoCredentials.objects.get(username=username)

            if credObj and credObj.password_hash == getSha384Hash(
                    password + credObj.password_salt):
                client = UnoClient.objects.get(client_id=credObj.client_id)

                if client.active:
                    request.session['id'] = str(credObj.client_id).replace(
                        '-', '')
                    return redirect('go_client')
                else:
                    store_context_in_session(
                        request, addSnackDataToContext(context,
                                                       'Access denied'))
                    return redirect('go_login')
            else:
                request.session.clear()
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Invalid credentials'))
                return redirect('go_login')
        except ObjectDoesNotExist:
            store_context_in_session(
                request, addSnackDataToContext(context, 'User not found'))
            return redirect('go_login')
        except Exception:
            # traceback.print_exc()
            logError(request)
            request.session.clear()
            store_context_in_session(request,
                                     addSnackDataToContext(context, 'ERR01'))
            return redirect('go_login')
    else:
        return redirect('go_login')
コード例 #12
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def create_order(request, context=None):
    if request.method == 'POST':
        try:
            oppoId = request.POST['opportunity-id']
            ordName = request.POST['order-name']
            ordSecret = request.POST['order-secret']

            # Fetch data
            opportunity = UnoOpportunity.objects.get(opportunity_id=oppoId)
            if not opportunity.active or opportunity.deal_count >= opportunity.deal_limit:
                raise AssertionError
            client = UnoClient.objects.get(client_id=opportunity.client_id)
            customer = UnoCustomer.objects.get(
                customer_id=opportunity.customer_id)

            # Create basket and order
            basket = PtaBasket(client=client, customer=customer)

            order = PtaOrderInstance(order_name=ordName,
                                     secret=ordSecret,
                                     client=client,
                                     customer=customer,
                                     opportunity=opportunity,
                                     basket=basket,
                                     status='IN')

            basket.save()
            order.save()

            # Store order in session
            meta = generateOrderMeta(order)
            save_ord_meta_to_session(request, meta)

            return redirect('go_ord_config_home')
        except AssertionError:
            store_context_in_session(
                request,
                addSnackDataToContext(context,
                                      'Opportunity invalid or expired'))
            return redirect('go_ord_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Order creation failed'))
            return redirect('go_ord_home')
    else:
        return redirect('go_ord_home')
コード例 #13
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def go_ord_config_home(request, context=None):
    context = get_context_in_session(request)

    if not context:
        context = {}

    # Fill context with order metadata
    context = load_ord_meta_to_context(request, context)
    if not context:
        store_context_in_session(
            request, addSnackDataToContext(context, 'Order request failed'))
        return redirect('go_ord_home')

    order = PtaOrderInstance.objects.get(
        order_number=context['ordMeta']['order_number'])
    context['numSites'] = len(getAllSitesInOrder(order))
    context['numPrs'] = len(getAllProductsInOrder(order))
    context['isValid'] = True if order.status in ('VA', 'FL') else False

    # Order validation request
    if 'ord_valid_count' in request.session:
        context['validCnt'] = request.session['ord_valid_count']
        del request.session['ord_valid_count']

    return render(request, 'order/order-home.html', context=context)
コード例 #14
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def auth_access_order(request, context=None):
    if request.method == 'POST':
        try:
            ordId = request.POST['order-id']
            ordSec = request.POST['order-secret']

            order = PtaOrderInstance.objects.get(order_instance_id=ordId)

            context = {}
            if ordSec == order.secret:
                meta = generateOrderMeta(order)
                save_ord_meta_to_session(request, meta)

                return redirect('go_ord_config_home')
            else:
                clear_ord_meta(request)
                ordData = generateOrderData(order)
                context['ordData'] = ordData
                context['snack_data'] = 'Invalid secret, access denied'

                return render(request, 'order/index.html', context=context)
        except Exception:
            # traceback.print_exc()
            logError(request)
            clear_ord_meta(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_ord_home')
コード例 #15
0
def add_ctg_val(request, context=None):
    if request.method == 'POST':
        try:
            specificationId = request.POST['specification_id']
            code = request.POST['code']
            translation = request.POST['translation']

            # Verification
            client = UnoClient.objects.get(client_id=request.session['id'])
            specification = CtgSpecification.objects.get(
                specification_id=specificationId, active=True)

            redir = reverse('go_spec_config') + '?doc_id=' + \
                str(specification.ctg_doc_id).replace('-', '')

            # Validation
            if not code or not transaction:
                raise AssertionError
            value = CtgValue.objects.filter(specification=specification,
                                            code=code)
            if value and len(value) > 0:
                raise TabError

            newValue = CtgValue(specification=specification,
                                code=code,
                                translation=translation)

            newValue.save()
            store_context_in_session(
                request, addSnackDataToContext(context, 'Enumeration created'))
            return redirect(redir)
        except AssertionError:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Invalid data'))
            return redirect(redir)
        except TabError:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Code already exists'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #16
0
def add_ctg_pr(request, context=None):
    if request.method == 'POST':
        try:
            prCode = request.POST['product_code']
            prName = request.POST['product_name']

            if not prCode or not prName:
                raise AssertionError

            if not isValidPrCode(prCode) or len(prName) > 128:
                raise AssertionError

            client = UnoClient.objects.get(client_id=request.session['id'])

            # Get namespaced code and check for duplicate
            itemcode = getFullCatalogCode(prCode, client)
            tempPr = CtgProduct.objects.filter(itemcode=itemcode)
            if tempPr and len(tempPr) > 0:
                raise TabError

            newProduct = CtgProduct(client=client,
                                    itemcode=itemcode,
                                    name=prName)

            newProduct.save()
            store_context_in_session(
                request, addSnackDataToContext(context, 'Product created'))
            return redirect('go_cat_home')
        except AssertionError:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Invalid data'))
            return redirect('go_cat_home')
        except TabError:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Code already exists'))
            return redirect('go_cat_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #17
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def can_oppo(request, context=None):
    if request and request.method == 'POST':
        try:
            if not context:
                context = {}

            client = None
            if request.session:
                client = UnoClient.objects.get(client_id=request.session['id'])

            if not client:
                raise RuntimeError

            opportunity = UnoOpportunity.objects.get(
                opportunity_number=request.POST['oppoNb'])

            if not opportunity.active:
                raise Exception

            opportunity.active = False
            opportunity.save()

            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Opportunity annulled'))
            return redirect('go_records')
        except RuntimeError:
            if hasattr(request, 'session') and request.session:
                request.session.clear()

            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Invalid client session'))
            return redirect('go_login')
        except Exception:
            # traceback.print_exc()
            logError(request)
            return go_error(
                HttpRequest(), {
                    'error': get_app_message('oppo_can_error'),
                    'message': get_app_message('oppo_can_message')
                })
    else:
        return redirect('go_records')
コード例 #18
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def do_site_price(request, context=None):
    if request.method == 'POST':
        try:
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_ord_summary')

            siteIds = request.POST['site_array']
            siteList = str(siteIds).split(',') if siteIds else None
            sites = []

            # Check sites
            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])
            if siteList and len(siteList) > 0:
                for sid in siteList:
                    site = PtaSite.objects.get(pta_site_id=sid)
                    if site.order_instance.order_instance_id == order.order_instance_id:
                        sites.append(site)

            if sites and len(sites) > 0:
                for site in sites:
                    # Do pricing
                    priceSite(site)
            else:
                store_context_in_session(
                    request, addSnackDataToContext(context,
                                                   'No site to price'))
                return redirect('go_ord_summary')

            store_context_in_session(
                request, addSnackDataToContext(context, 'Pricing is received'))
            return redirect('go_ord_summary')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_ord_summary')
コード例 #19
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def go_ord_summary(request, context=None):
    try:
        context = get_context_in_session(request)

        if not context:
            context = {}

        # Metadata
        ordMeta = request.session[
            'order_meta'] if 'order_meta' in request.session else None
        if not ordMeta:
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Order request failed'))
            return redirect('go_ord_home')
        else:
            context = load_ord_meta_to_context(request, context)

        order = PtaOrderInstance.objects.get(
            order_number=ordMeta['order_number'])
        if order.status not in ('VA', 'FL'):
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Summary is not available'))
            return redirect('go_ord_config_home')

        # Load product/service tree data
        siteDataList = []
        sites = PtaSite.objects.filter(
            order_instance=order).order_by('creation_time')
        if sites and len(sites) > 0:
            for site in sites:
                populateSiteSummary(siteDataList, site)
        context['siteDataList'] = siteDataList

        return render(request, 'order/order-summary.html', context=context)
    except Exception:
        # traceback.print_exc()
        logError(request)
        store_context_in_session(
            request, addSnackDataToContext(context, 'Unknown error'))
        return redirect('go_ord_config_home')
コード例 #20
0
def chg_fet(request, context=None):
    if request.method == 'POST':
        try:
            featureId = request.POST['feature_id']
            newFetName = request.POST['feature_name']
            newLimit = request.POST['limit']
            newExt = request.POST['is_extended']

            # Verification
            clientId = request.session['id']
            feature = CtgFeature.objects.filter(client_id=clientId,
                                                feature_id=featureId,
                                                active=True)
            if not feature or len(feature) < 1:
                raise AssertionError

            feature = feature[0]
            docId = str(feature.ctg_doc_id).replace('-', '')
            redir = reverse('go_fet_config') + '?doc_id=' + docId

            feature.name = newFetName
            if newLimit and isValidQuantity(newLimit):
                feature.limit = newLimit
            feature.extended = newExt

            feature.save()
            store_context_in_session(
                request, addSnackDataToContext(context, 'Feature updated'))
            return redirect(redir)
        except AssertionError:
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Feature does not exist'))
            return redirect('go_cat_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #21
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def do_ord_cancel(request, context=None):
    if request.method == 'POST':
        try:
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Order request failed'))
                return redirect('go_ord_home')

            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])

            if order.status in ('IN', 'IP', 'VA'):
                order.status = 'VD'
                basket = order.basket
                basket.is_locked = True

                basket.save()
                order.save()
                clear_ord_meta(request)

                return go_success(
                    HttpRequest(),
                    {'message': get_app_message('order_cancel_message')})
            else:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context,
                                          'Invalid cancellation request'))
                return redirect('go_ord_config_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_ord_config_home')
コード例 #22
0
def chg_spec(request, context=None):
    if request.method == 'POST':
        try:
            specificationId = request.POST['specification_id']
            newLabel = request.POST['spec_label']
            newDv = request.POST['default_value']

            # Verification
            client = UnoClient.objects.get(client_id=request.session['id'])
            specification = CtgSpecification.objects.get(
                specification_id=specificationId, active=True)
            dt = specification.data_type

            redir = reverse('go_spec_config') + '?doc_id=' + \
                str(specification.ctg_doc_id).replace('-', '')

            # Validation
            if newLabel and len(newLabel) <= 128:
                specification.label = newLabel
            if newDv:
                if (dt == 'BO' and isValidBoolean(newDv)) or (
                        dt == 'QTY' and isValidQuantity(newDv)):
                    specification.default_value = newDv
                elif dt == 'STR' or dt == 'ENUM':
                    specification.default_value = newDv

            specification.save()
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Specification updated'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #23
0
def rm_ctg_pr(request, context=None):
    if request.method == 'POST':
        try:
            productId = request.POST['product_id']

            # Client session verification
            client = UnoClient.objects.get(client_id=request.session['id'])

            # Product verification
            product = CtgProduct.objects.filter(client_id=client.client_id,
                                                product_id=productId,
                                                active=True)
            if not product or len(product) < 1:
                raise AssertionError

            product = product[0]
            product.active = False

            product.save()
            # Cascade process
            removeProductCascade(product)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Product removed'))
            return redirect('go_cat_home')
        except AssertionError:
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Product does not exist'))
            return redirect('go_cat_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #24
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def del_pr_in_site(request, context=None):
    if request.method == 'POST':
        try:
            context = {}
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_build_pr')

            biId = request.POST['bi_rm_id']
            siteId = request.POST['ord_site_id']

            site = PtaSite.objects.get(pta_site_id=siteId)
            order = site.order_instance
            item = PtaBasketItem.objects.get(basket_item_id=biId)
            redir = reverse('go_build_pr') + '?site_id=' + \
                str(site.pta_site_id).replace('-', '')

            # Delete process
            deleteProductItem(item)
            invalidateSite(site)
            invalidateOrder(order)
            refreshOrdSessionData(order, request)

            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Product has been deleted'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_build_pr')
コード例 #25
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def go_records(request):
    try:
        client = UnoClient.objects.get(client_id=request.session['id'])

        context = get_context_in_session(request)
        if not context:
            context = {}

        context['entity_name'] = client.entity_name

        records = []

        oppoList = UnoOpportunity.objects.filter(client=client)
        if len(oppoList) < 1:
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'No opportunity found'))
            return redirect('go_client')

        for oppo in oppoList:
            customer = UnoCustomer.objects.get(customer_id=oppo.customer_id)
            records.append(
                (str(oppo.opportunity_number).replace('-', ''),
                 oppo.creation_time, customer.customer_name, oppo.active))

        context['records'] = records

        return render(request, 'core/records.html', context=context)
    except Exception:
        # traceback.print_exc()
        logError(request)
        if request and hasattr(request, 'session'):
            request.session.clear()

        store_context_in_session(
            request, addSnackDataToContext(context, 'Unexpected Error'))
        return redirect('go_login')
コード例 #26
0
def chg_pr_name(request, context=None):
    if request.method == 'POST':
        try:
            productId = request.POST['product_id']
            newPrName = request.POST['product_name']

            # Verification
            clientId = request.session['id']
            product = CtgProduct.objects.filter(client_id=clientId,
                                                product_id=productId,
                                                active=True)
            if not product or len(product) < 1:
                raise AssertionError

            product = product[0]
            product.name = newPrName
            docId = str(product.ctg_doc_id).replace('-', '')
            redir = reverse('go_pr_config') + '?doc_id=' + docId

            product.save()
            store_context_in_session(
                request, addSnackDataToContext(context, 'Product updated'))
            return redirect(redir)
        except AssertionError:
            store_context_in_session(
                request,
                addSnackDataToContext(context, 'Product does not exist'))
            return redirect('go_cat_home')
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unexpected error'))
            return redirect('go_cat_home')
    else:
        return redirect('go_cat_home')
コード例 #27
0
def go_cat_home(request, context=None):
    try:
        context = get_context_in_session(request)

        if not context:
            context = {}

        ITEMS_PER_PAGE = 10

        productPage = None
        if request.GET.get('pr_page'):
            productPage = request.GET.get('pr_page')
        else:
            productPage = 1

        client = UnoClient.objects.get(client_id=request.session['id'])
        context['client'] = client
        context['addPrForm'] = AddPrForm()

        # Get all products
        prResult = CtgProduct.objects.filter(client_id=client.client_id,
                                             active=True).order_by(
                                                 '-creation_time', 'itemcode')
        pagedList = Paginator(prResult, ITEMS_PER_PAGE)
        products = pagedList.get_page(productPage)

        for pr in products:
            pr.product_id = str(pr.product_id).replace('-', '')
            pr.itemcode = getDefCatalogCode(pr.itemcode)

        context['products'] = products
        context['prCount'] = len(products)

        return render(request, 'catalog/index.html', context=context)
    except Exception:
        # traceback.print_exc()
        logError(request)
        if request and hasattr(request, 'session'):
            request.session.clear()

        store_context_in_session(
            request, addSnackDataToContext(context, 'Unknown Error'))
        return redirect('go_login')
コード例 #28
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def add_pr_to_basket(request, context=None):
    if request.method == 'POST':
        try:
            context = {}
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_build_pr')

            prData = parseJson(request.POST['ctg_add_data'])
            siteId = request.POST['ord_site_id']

            # Get order details
            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])
            site = PtaSite.objects.get(pta_site_id=siteId)
            redir = reverse('go_build_pr') + '?site_id=' + \
                str(site.pta_site_id).replace('-', '')
            leadSerial = getLeadSerialInOrderSite(order, site)
            tempSerial = leadSerial

            if not prData or not leadSerial:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Invalid order data'))
                return redirect(redir)

            # Add products to basket
            for ctgId, count in prData.items():
                tempSerial = addNewProductsToSite(order, site, ctgId, count,
                                                  tempSerial)
            invalidateSite(site)
            invalidateOrder(order)
            refreshOrdSessionData(order, request)

            if tempSerial > leadSerial:
                diff = tempSerial - leadSerial
                if diff == 1:
                    store_context_in_session(
                        request,
                        addSnackDataToContext(context,
                                              '1 product has been added'))
                else:
                    store_context_in_session(
                        request,
                        addSnackDataToContext(
                            context,
                            str(diff) + ' products have been added'))
            else:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'No product is added'))

            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_build_pr')
コード例 #29
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def save_svc_config(request, context=None):
    if request.method == 'POST':
        try:
            context = {}
            ordMeta = request.session[
                'order_meta'] if 'order_meta' in request.session else None

            if not ordMeta:
                return redirect('go_svc_config')

            svcDataStruct = parseJson(request.POST['svc_json'])
            svcId = svcDataStruct['svcId']
            pspList = svcDataStruct['pspList']
            fetList = svcDataStruct['fetList']

            # Check order
            order = PtaOrderInstance.objects.get(
                order_number=ordMeta['order_number'])
            basket = order.basket
            productItem = PtaBasketItem.objects.get(basket_item_id=svcId)
            site = productItem.pta_site

            redir = reverse('go_svc_config') + '?svc_id=' + \
                str(svcId).replace('-', '')

            if isOrderLocked(order):
                store_context_in_session(
                    request, addSnackDataToContext(context, 'Order is locked'))
                return redirect('go_ord_config_home')

            # Save product level specs
            saveBaseSpec(productItem)
            for psp in pspList:
                createOrUpdateSpec(psp['id'], productItem, psp['value'])

            # Save features
            for fet in fetList:
                if fet['addFlag']:
                    featureItem = createOrGetFeature(fet['id'], productItem)
                    # Save feature level specs
                    saveBaseSpec(featureItem)
                    for fsp in fet['fspList']:
                        createOrUpdateSpec(fsp['id'], featureItem,
                                           fsp['value'])
                else:
                    existFeature = getExistingFeature(productItem, fet['id'])
                    if existFeature:
                        deleteFeatureItem(existFeature)

            clearSitePrice(site)

            # Validation
            valid = True
            errorList = []
            valid = validateProductItem(productItem, errorList)
            saveErrorInMap(request, str(productItem.basket_item_id), errorList)

            if valid:
                store_context_in_session(
                    request,
                    addSnackDataToContext(context, 'Configuration is saved'))
            else:
                invalidateSite(site)
                invalidateOrder(order)
                refreshOrdSessionData(order, request)
                store_context_in_session(
                    request,
                    addSnackDataToContext(context,
                                          'Error(s) detected in service'))
            return redirect(redir)
        except Exception:
            # traceback.print_exc()
            logError(request)
            store_context_in_session(
                request, addSnackDataToContext(context, 'Unknown error'))
            return redirect('go_ord_config_home')
    else:
        return redirect('go_svc_config')
コード例 #30
0
ファイル: views.py プロジェクト: Kairn/se-eon-venture
def go_svc_config(request, context=None):
    try:
        context = get_context_in_session(request)

        if not context:
            context = {}

        # Metadata
        ordMeta = request.session[
            'order_meta'] if 'order_meta' in request.session else None
        if not ordMeta:
            store_context_in_session(
                request, addSnackDataToContext(context,
                                               'Order request failed'))
            return redirect('go_ord_home')
        else:
            context = load_ord_meta_to_context(request, context)

        serviceList = []

        order = PtaOrderInstance.objects.get(
            order_number=ordMeta['order_number'])
        if isOrderLocked(order):
            store_context_in_session(
                request, addSnackDataToContext(context, 'Order is locked'))
            return redirect('go_ord_config_home')

        # Get all sites and products
        sites = PtaSite.objects.filter(
            order_instance=order).order_by('site_name')
        if not sites or len(sites) < 1:
            store_context_in_session(
                request, addSnackDataToContext(context, 'No sites found'))
            return redirect('go_ord_config_home')
        else:
            for site in sites:
                products = PtaBasketItem.objects.filter(
                    pta_site=site, parent_id=None).order_by('serial')
                if products and len(products) > 0:
                    for pr in products:
                        serviceList.append(
                            str(pr.basket_item_id).replace('-', ''))

        if len(serviceList) < 1:
            store_context_in_session(
                request, addSnackDataToContext(context, 'No services found'))
            return redirect('go_ord_config_home')

        serviceId = request.GET.get('svc_id') if request.GET.get(
            'svc_id') else serviceList[0]
        if serviceId not in serviceList:
            store_context_in_session(
                request, addSnackDataToContext(context, 'Invalid service'))
            return redirect('go_ord_config_home')

        preSvcId = None
        nxtSvcId = None
        if serviceList.index(serviceId) > 0:
            preSvcId = serviceList[serviceList.index(serviceId) - 1]
        if serviceList.index(serviceId) < len(serviceList) - 1:
            nxtSvcId = serviceList[serviceList.index(serviceId) + 1]
        context['preId'] = preSvcId
        context['nxtId'] = nxtSvcId

        service = PtaBasketItem.objects.get(basket_item_id=serviceId)
        siteDoc = service.pta_site
        addrDoc = siteDoc.site
        svcData = {}
        svcData['id'] = str(service.basket_item_id)
        svcData['name'] = getBasketItemName(service)
        svcData['serial'] = zeroPrepender(service.serial, 5)
        svcData['valid'] = '1' if service.is_valid else '0'

        context['siteDoc'] = siteDoc
        context['addrDoc'] = addrDoc
        context['svcData'] = svcData

        svcBasketDoc = populateServiceDoc(service)

        # Load catalog definitions
        # Product level
        prSpecList = []
        prCtg = CtgProduct.objects.get(ctg_doc_id=service.ctg_doc_id)
        prSpecs = CtgSpecification.objects.filter(
            parent_ctg_id=service.ctg_doc_id, active=1)
        pspCnt = 0
        for psp in prSpecs:
            val = getLeafValueFromSvcDoc(svcBasketDoc, service.itemcode,
                                         psp.leaf_name)
            if psp.leaf_name == 'SP_BASE':
                prSpecList.insert(0, buildSpecInfo(psp, val))
            else:
                prSpecList.append(buildSpecInfo(psp, val))
                pspCnt += 1

        # Feature level
        prFetList = []
        fetCtg = CtgFeature.objects.filter(product=prCtg,
                                           active=1).order_by('creation_time')
        fspCnt = 0
        for fet in fetCtg:
            fetDoc = {}
            fetDoc['id'] = str(fet.ctg_doc_id)
            fetDoc['itemcode'] = fet.itemcode
            fetDoc['name'] = fet.name

            fetSpList = []
            fetSpecs = CtgSpecification.objects.filter(
                parent_ctg_id=fet.ctg_doc_id, active=1)
            for fsp in fetSpecs:
                val = getLeafValueFromSvcDoc(svcBasketDoc, fet.itemcode,
                                             fsp.leaf_name)
                if fsp.leaf_name == 'SP_BASE':
                    fetSpList.insert(0, buildSpecInfo(fsp, val))
                else:
                    fetSpList.append(buildSpecInfo(fsp, val))
                    fspCnt += 1

            fetDoc['specs'] = fetSpList
            prFetList.append(fetDoc)

        context['prCtgData'] = prSpecList
        context['pspCnt'] = pspCnt
        context['fetCtgData'] = prFetList
        context['fspCnt'] = fspCnt

        # Populate error
        errorList = getOrCreateSvcError(request, str(service.basket_item_id))
        context['errList'] = errorList
        context['errLen'] = len(errorList)

        return render(request, 'order/order-service.html', context=context)
    except Exception:
        # traceback.print_exc()
        logError(request)
        store_context_in_session(
            request, addSnackDataToContext(context, 'Redirect error'))
        return redirect('go_ord_config_home')