Example #1
0
def checkout_payment(request):
    """
    Redirect Payment App from Sale Order (My Account)
    """

    context_instance = RequestContext(request)
    payment = request.POST.get('payment', '')
    order = request.POST.get('order', '')

    conn = connOOOP()
    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment=payment)

    order = conn.SaleOrder.filter(name=order,
                                  state='draft',
                                  payment_state='draft')

    if (len(payment_type) > 0) and (len(order) > 0):
        request.session['sale_order'] = order[0].name
        return HttpResponseRedirect(
            "%s/payment/%s/" %
            (context_instance['LOCALE_URI'], payment_type[0].app_payment))
    else:
        error = _('This payment is not available. Use navigation menus')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
Example #2
0
def partner_addressremove(request, adddress_id):
    """
    Remove partner address
    """

    context_instance = RequestContext(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=context_instance)
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=context_instance)
    addresses = conn.ResPartnerAddress.filter(partner_id=partner_id,
                                              id=adddress_id)
    try:
        if len(addresses) > 0:
            address = conn.ResPartnerAddress.get(addresses[0].id)
            address.delete()
    except:
        pass  # TODO: Display error message to user

    return HttpResponseRedirect("%s/partner/partner" %
                                (context_instance['LOCALE_URI']))
Example #3
0
def checkout_remove(request, code):
    """
    Checkout. Order cart
    """

    context_instance = RequestContext(request)

    products = ProductProduct.objects.filter(code=code)
    if len(products) > 0:
        partner_id = checkPartnerID(request)
        if not partner_id:
            error = _(
                'Are you a customer? Please, contact us. We will create a new role.'
            )
            return render_to_response("partner/error.html",
                                      locals(),
                                      context_instance=RequestContext(request))
        full_name = checkFullName(request)
        conn = connOOOP()
        if not conn:
            error = _(
                'Error when connecting with our ERP. Try again or cantact us.')
            return render_to_response("partner/error.html",
                                      locals(),
                                      context_instance=RequestContext(request))
        order = check_order(conn, partner_id, OERP_SALE)
        order_lines = conn.SaleOrderLine.filter(order_id=order.id,
                                                product_id=products[0].id)
        if len(order_lines) > 0:
            order_line = conn.SaleOrderLine.get(order_lines[0].id)
            order_line.delete()

    return HttpResponseRedirect("%s/sale/checkout/" %
                                (context_instance['LOCALE_URI']))
def checkout_remove(request, code):
    """
    Checkout. Order cart
    """
    
    context_instance=RequestContext(request)

    products = ProductProduct.objects.filter(code=code)
    if len(products) > 0:
        partner_id = checkPartnerID(request)
        if not partner_id:
            error = _('Are you a customer? Please, contact us. We will create a new role.')
            return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
        full_name = checkFullName(request)
        conn = connOOOP()
        if not conn:
            error = _('Error when connecting with our ERP. Try again or cantact us.')
            return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
        order = check_order(conn, partner_id, OERP_SALE)
        order_lines = conn.SaleOrderLine.filter(order_id=order.id, product_id=products[0].id)
        if len(order_lines) > 0:
            order_line = conn.SaleOrderLine.get(order_lines[0].id)
            order_line.delete()

    return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))
def order(request, order):
    """
    Order. Order Detail Partner
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id, name=order, shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _('It is not allowed to view this section or not found. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    value = values[0]
    title = _(u'Order %s') % (value.name)
    metadescription = _(u'Details order %s') % (value.name)
    currency = value.pricelist_id.currency_id.symbol
        
    return render_to_response("sale/order.html", {
                'title': title,
                'metadescription': metadescription,
                'value': value,
                'currency': currency,
                'show_vat': ORDER_SHOW_VAT,
            }, context_instance=RequestContext(request))
Example #6
0
def index(request):
    """
    Bank Transfer
    OpenERP Payment Type App is: banktransfer
    """

    title = _('Payment Bank Transfer')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(
        app_payment='banktransfer')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        payment_order = conn_webservice('sale.order', 'sale_order_payment',
                                        [order.name, 'check'])

        values = {
            'order': request.session['sale_order'],
            'payment_type': payment_type[0]
        }
        del request.session['sale_order']

        #send email sale order
        mailresult = SaleOrderEmail(order.id)
        if mailresult:
            values['error'] = mailresult

        logging.info('Order %s: check payment finish' % order.name)
        return render_to_response("banktransfer/banktransfer.html",
                                  values,
                                  context_instance=RequestContext(request))
    else:
        error = _(
            'Error payment this order or is null. Contact Us or use navigation menu'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
Example #7
0
def payment(request, order):
    """
    Payment. Payment Order
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id,
                                   name=order,
                                   shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _(
            'It is not allowed to view this section or not found. Use navigation menu.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    value = values[0]

    if value.state != 'draft' or value.payment_state != 'draft':
        error = _('Your order is in progress or this order was payed')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    sale_shop = conn.SaleShop.filter(id=OERP_SALE)[0]
    payments = sale_shop.zoook_payment_types

    title = _(u'Payment Order %s') % (value.name)
    metadescription = _(u'Payment Order %s') % (value.name)
    currency = value.pricelist_id.currency_id.symbol

    return render_to_response("sale/payment.html", {
        'title': title,
        'metadescription': metadescription,
        'value': value,
        'payments': payments,
        'currency': currency,
    },
                              context_instance=RequestContext(request))
Example #8
0
def index(request):
    """
    Sermepa (Servired)
    OpenERP Payment Type App is: sermepa
    Sale Order Reference:
        - Only numbers, not SO0001
        - Minimium 4, Maximun 12
    """

    title = _(u'Payment Credit Card Servired')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='sermepa')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])
        
    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        site = Site.objects.get_current()
        site_configuration = siteConfiguration(SITE_ID)

        sermepa_dict = {
            "Ds_Merchant_Titular": SERMEPA_MERCHANT_NAME,
            "Ds_Merchant_MerchantData": '',
            "Ds_Merchant_MerchantName": SERMEPA_MERCHANT_NAME,
            "Ds_Merchant_ProductDescription": site_configuration.site_title,
            "Ds_Merchant_Amount": int(order.amount_total* 100),
            "Ds_Merchant_TransactionType": SERMEPA_TRANS_TYPE,
            "Ds_Merchant_Terminal": SERMEPA_TERMINAL,
            "Ds_Merchant_MerchantCode": SERMEPA_MERCHANT_CODE,
            "Ds_Merchant_Order": order.name,
            "Ds_Merchant_Currency": SERMEPA_CURRENCY,
            "Ds_Merchant_MerchantURL": SERMEPA_MERCHANT_URL,
            "Ds_Merchant_UrlOK": "http://%s%s" % (site.domain, '/payment/sermepa/confirm'),
            "Ds_Merchant_UrlKO": "http://%s%s" % (site.domain, '/payment/sermepa/error'),
        }

        form = SermepaPaymentForm(initial=sermepa_dict)
        debug = DEBUG
        logging.info('Order %s: sermepa form and redirect' % order.name)
        return HttpResponse(render_to_response('sermepa/form.html', locals(), context_instance=RequestContext(request)))

    else:
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
def payorder(request):
    """
    Payment Order without login
    Only Pay Order when:
      - State Draft 
      - Payment State Draft
      - Shop ID
    """

    name = request.GET.get('name', '')
    total = request.GET.get('total', '')
    
    title = _(u'Payment Order by reference')
    metadescription = _(u'Payment Order by reference')

    message = False
    value = False
    payments = False
    currency = DEFAULT_CURRENCY

    if request.method == 'POST':
        form = PayorderForm(request.POST)
        if form.is_valid():
            conn = connOOOP()
            if not conn:
                error = _('Error when connecting with our ERP. Try again or cantact us.')
                return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

            name = form.cleaned_data['name']
            total = float(form.cleaned_data['total'])

            values = conn.SaleOrder.filter(name=name, amount_total=total, state='draft', payment_state ='draft', shop_id__in=OERP_SALES)

            if len(values)>0:
                value = values[0]
                title = _(u'Order %s') % (value.name)
                metadescription = _(u'Details order %s') % (value.name)
                sale_shop = conn.SaleShop.filter(id=OERP_SALE)[0]
                payments = sale_shop.zoook_payment_types
                currency = value.pricelist_id.currency_id.symbol
            else:
                message = _('Try again. There are not some reference pending to pay or total do not match.')
        else:
            message = _('Try again. Insert reference and total Order.')

    return render_to_response("sale/payorder.html", {
            'title': title,
            'metadescription': metadescription,
            'name': name,
            'total': total,
            'message': message,
            'value': value,
            'payments': payments,
            'currency': currency,
        }, context_instance=RequestContext(request))
Example #10
0
def partner(request):
    """Partner page"""

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
        
    site_configuration = siteConfiguration(SITE_ID)

    partner = conn.ResPartner.get(partner_id)
    vat = format_vat(partner.vat)
    partnet_title = False
    if partner.title:
        partnet_title = partner.title.name

    if request.method == 'POST':
        data = get_contact_data(request.POST.copy())
        for contact_id in data.keys():
            if contact_id == 'newaddress':
                address = conn.ResPartnerAddress.new()
                address.partner_id = partner
            else:
                address = conn.ResPartnerAddress.get(contact_id)
            address.street = data[contact_id]['street']
            address.zip = data[contact_id]['zip']
            address.city = data[contact_id]['city']
            address.phone = data[contact_id]['phone']
            address.type = data[contact_id]['type']
            address_id = address.save()
        message = [_('Successfully saved profile.')]

    addresses = conn.ResPartnerAddress.filter(partner_id=partner_id, type__in=['delivery', 'invoice', 'default', False], order='id')
    del_have = False
    inv_have = False
    i = 0
    while i<len(addresses) and (not del_have or not inv_have):
        if (not del_have or not inv_have) and addresses[i].type in ['default', False]:
            del_have = True
            inv_have = True
        if not del_have and addresses[i].type == 'delivery':
            del_have = True
        if not inv_have and addresses[i].type == 'invoice':
            inv_have = True
        i+=1

    title = _(u'User Profile')
    metadescription = _(u'User profile of %(site)s') % {'site':site_configuration.site_title}

    return render_to_response("partner/partner.html", locals(), context_instance=RequestContext(request))
Example #11
0
def pasat4b_getorder(request):
    """
    Order Format TXT Pasat 4b
    TODO: Multi Currency
    Get TXT page about order information:
        "M978{{importe}}\n"
        "1\n"
        "1\n"
        "{{order}}\n"
        "1\n"
        "{{importe}}\n"
        "\n"
    """

    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("pasat4b/order_error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    order_code = request.GET.get('order') or ''
    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='pasat4b')
    orders = conn.SaleOrder.filter(name=order_code)

    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]

        if (order.state == 'draft'):
            amount_total = '%.*f' % (PASAT4B_DECIMAL, order.amount_total)
            amount_total = str(amount_total).replace(
                '.', '')  # Replace 123,45 to 12345
            value = "M978%s\n1\n1\n%s\n1\n%s\n\n" % (amount_total, order.name,
                                                     amount_total)

            logging.info(_('Order %s prossesing Pasat 4b') % order_code)
            logging.info(_('Pasat Values %s') % value.replace('\n', '|'))

            return render_to_response('pasat4b/order.html', {
                'value': value,
            })
        else:
            logging.info(_('Error Order %s Pasat 4b') % order_code)
            return render_to_response("pasat4b/order_error.html",
                                      locals(),
                                      context_instance=RequestContext(request))
    else:
        logging.info(_('Error Order %s Pasat 4b. Not exist') % order_code)
        return render_to_response("pasat4b/order_error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
Example #12
0
def orders(request):
    """
    Orders. All Orders Partner Available
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    values = {}
    total = len(
        conn.SaleOrder.filter(partner_id=partner_id, shop_id__in=OERP_SALES))
    offset, page_previous, page_next = paginationOOOP(request, total,
                                                      PAGINATOR_ORDER_TOTAL)

    values = conn.SaleOrder.filter(partner_id=partner_id,
                                   shop_id__in=OERP_SALES,
                                   offset=offset,
                                   limit=PAGINATOR_ORDER_TOTAL,
                                   order='date_order DESC, name DESC')

    orders = []
    for order in values:
        num_lines = len(conn.SaleOrderLine.filter(order_id=order.id))
        if num_lines > 0:
            orders.append(order)

    title = _(u'All Orders')
    metadescription = _(u'List all orders of %s') % full_name

    return render_to_response("sale/orders.html", {
        'title': title,
        'metadescription': metadescription,
        'values': orders,
        'page_previous': page_previous,
        'page_next': page_next,
    },
                              context_instance=RequestContext(request))
Example #13
0
def index(request):
    """
    4b (Pasat Internet 4b)
    OpenERP Payment Type App is: pasat4b
    Sale Order Reference:
        - Minimium 4, Maximun 12
    """

    title = _(u'Payment Credit Card Pasat 4b')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='pasat4b')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        pasat4b_dict = {
            "Ds_Merchant_Order": order.name,
            "Ds_Merchant_MerchantCode": PASAT4B_MERCHANT_CODE,
        }

        form = pasat4bPaymentForm(initial=pasat4b_dict)
        debug = DEBUG
        logging.info('Order %s: Pasat 4b form and redirect' % order.name)
        return HttpResponse(
            render_to_response('pasat4b/form.html',
                               locals(),
                               context_instance=RequestContext(request)))

    else:
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
Example #14
0
def pasat4b_confirm(request):
    """
    Confirmation Pasat 4b view
    """

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    conn = connOOOP()
    order = request.session['sale_order']

    payment_pasat4b = pasat4bResponse.objects.filter(pszPurchorderNum=order)
    payment = False

    if len(payment_pasat4b) > 0:
        if (payment_pasat4b[0].result == 0):  #0 -> transaccin autorizada
            payment = True

    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if payment and len(orders) > 0:
        order = orders[0]
        payment_order = conn_webservice('sale.order', 'sale_order_payment',
                                        [order.name, 'pasat4b'])

        title = _(u'Confirmation Payment Credit Card Pasat 4b')
        values = {'order': request.session['sale_order'], 'title': title}

        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info(_('Order %s: Pasat 4b payment finish') % order.name)

        return HttpResponse(
            render_to_response('pasat4b/confirm.html',
                               values,
                               context_instance=RequestContext(request)))
    else:
        error = _(
            'Error return 4b (Pasat Internet 4b) Payment. Contact us to check payment'
        )
        return HttpResponse(
            render_to_response('pasat4b/error.html', {'error': error},
                               context_instance=RequestContext(request)))
def cancel(request, order):
    """
    Order. Cancel Order
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id, name=order, shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _('It is not allowed to view this section or not found. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    value = values[0]

    if value.state != 'draft':
        error = _('Your order is in progress and it is not possible to cancel. Contact with us')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    #cancel order
    try:
        cancel = conn_webservice('sale.order','action_cancel', [[value.id]])
    except:
        error = _('An error is getting when cancel this order. Try again or contact us')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    #drop session if exists
    if 'sale_order' in request.session:
        if request.session['sale_order'] == value.name:
            del request.session['sale_order']

    value = conn.SaleOrder.get(value.id) #reload sale order values
    title = _(u'Order %s cancelled') % (value.name)
    metadescription = _(u'Order %s cancelled') % (value.name)

    return render_to_response("sale/order.html", {
                'title': title,
                'metadescription': metadescription,
                'value': value,
            }, context_instance=RequestContext(request))
Example #16
0
def index(request):
    """
    Paypal
    OpenERP Payment Type App is: paypal
    """

    title = _(u'Payment Paypal')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='paypal')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])
        
    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        site = Site.objects.get_current()
        site_configuration = siteConfiguration(SITE_ID)

        paypal_dict = {
            "business": PAYPAL_RECEIVER_EMAIL,
            "amount": order.amount_total,
            "item_name": site_configuration.site_title,
            "invoice": order.name,
            "currency_code": PAYPAL_CURRENCY,
            "notify_url": "http://%s%s" % (site.domain, '/payment/paypal/ipn'),
            "return_url": "http://%s%s" % (site.domain, '/saas/invoice/confirm'),
            "cancel_return": "http://%s%s" % (site.domain, '/payment/paypal/error'),
        }

        form = PayPalPaymentsForm(initial=paypal_dict)
        logging.info('Order %s: paypal form and redirect' % (order.name))
        return render_to_response("paypal/form.html", {'form':form, 'debug':DEBUG}, context_instance=RequestContext(request))

    else:
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
Example #17
0
def order(request, order):
    """
    Order. Order Detail Partner
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id,
                                   name=order,
                                   shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _(
            'It is not allowed to view this section or not found. Use navigation menu.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    value = values[0]
    title = _(u'Order %s') % (value.name)
    metadescription = _(u'Details order %s') % (value.name)
    currency = value.pricelist_id.currency_id.symbol

    return render_to_response("sale/order.html", {
        'title': title,
        'metadescription': metadescription,
        'value': value,
        'currency': currency,
        'show_vat': ORDER_SHOW_VAT,
    },
                              context_instance=RequestContext(request))
Example #18
0
def sermepa_confirm(request):
    """
    Confirmation Sermepa view
    """

    title = _(u'Confirmation Credit Card Servired')

    conn = connOOOP()
    order = request.session['sale_order']

    #TODO: check real IPN and test this code
    payment_sermepa = SermepaResponse.objects.filter(Ds_Order=order)
    payment = False

    if len(payment_sermepa) > 0:
        if (payment_sermepa[0].Ds_Signature):
            payment = True

    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if payment and len(orders) > 0:
        order = orders[0]
        payment_order = conn_webservice('sale.order', 'sale_order_payment',
                                        [order.name, 'sermepa'])

        values = {'order': request.session['sale_order']}
        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info(_('Order %s: servired payment finish') % order.name)

        return HttpResponse(
            render_to_response('sermepa/confirm.html',
                               values,
                               context_instance=RequestContext(request)))
    else:
        error = _('Error return Servired Payment. Contact us to check payment')
        return HttpResponse(
            render_to_response('sermepa/error.html', {'error': error},
                               context_instance=RequestContext(request)))
Example #19
0
def pasat4b_getorder(request):
    """
    Order Format TXT Pasat 4b
    TODO: Multi Currency
    Get TXT page about order information:
        "M978{{importe}}\n"
        "1\n"
        "1\n"
        "{{order}}\n"
        "1\n"
        "{{importe}}\n"
        "\n"
    """

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("pasat4b/order_error.html", locals(), context_instance=RequestContext(request))

    order_code = request.GET.get('order') or ''
    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='pasat4b')
    orders = conn.SaleOrder.filter(name=order_code)

    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        
        if (order.state == 'draft'):
            amount_total = '%.*f' % (PASAT4B_DECIMAL, order.amount_total)
            amount_total = str(amount_total).replace('.', '') # Replace 123,45 to 12345
            value = "M978%s\n1\n1\n%s\n1\n%s\n\n" % (amount_total, order.name, amount_total)

            logging.info(_('Order %s prossesing Pasat 4b') % order_code)
            logging.info(_('Pasat Values %s') % value.replace('\n', '|'))

            return render_to_response('pasat4b/order.html', {'value': value, })
        else:
            logging.info(_('Error Order %s Pasat 4b') % order_code)
            return render_to_response("pasat4b/order_error.html", locals(), context_instance=RequestContext(request))
    else:
        logging.info(_('Error Order %s Pasat 4b. Not exist') % order_code)
        return render_to_response("pasat4b/order_error.html", locals(), context_instance=RequestContext(request))
def checkout_payment(request):
    """
    Redirect Payment App from Sale Order (My Account)
    """

    context_instance=RequestContext(request)
    payment = request.POST.get('payment', '')
    order = request.POST.get('order', '')

    conn = connOOOP()
    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment=payment)

    order = conn.SaleOrder.filter(name=order,state='draft',payment_state='draft')

    if (len(payment_type) > 0) and (len(order) > 0):
        request.session['sale_order'] = order[0].name
        return HttpResponseRedirect("%s/payment/%s/" % (context_instance['LOCALE_URI'], payment_type[0].app_payment))
    else:
        error = _('This payment is not available. Use navigation menus')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
Example #21
0
def index(request):
    """
    Cashondelivery
    OpenERP Payment Type App is: cashondelivery
    """

    title = _(u'Payment Cash On Delivery')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='cashondelivery')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])
        
    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        payment_order = conn_webservice('sale.order', 'sale_order_payment', [order.name, 'cashondelivery'])

        values = {'order':request.session['sale_order'],'payment_type':payment_type[0]}
        del request.session['sale_order']
        
        #send email sale order
        mailresult = SaleOrderEmail(order.id)
        if mailresult:
            values['error'] = mailresult
        
        logging.info('Order %s: cashondelivery payment finish' % order.name)
        return render_to_response("cashondelivery/cashondelivery.html", values, context_instance=RequestContext(request))
    else:
        error = _('Error payment this order or is null. Contact Us or use navigation menu')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
Example #22
0
def SaleOrderEmail(order):
    """
    Send email Order
    order Int (ID)
    Return True/False
    """

    conn = connOOOP()
    shop = conn.SaleShop.get(OERP_SALE)

    context = {}
    context['active_id'] = shop.email_sale_order.id
    values = [
        [], #ids
        order, #rel_model_ref
        context, #context
    ]
    body_template = conn_webservice('poweremail.preview','on_change_ref', values)

    customer_email = body_template['value']['to']
    bcc=None
    if body_template['value']['bcc'] and body_template['value']['bcc'] != 'False':
        bcc = [body_template['value']['bcc']]
    
    if customer_email != 'False':
        subject = body_template['value']['subject']
        if body_template['value']['body_html']:
            body = body_template['value']['body_html']
        else:
            body = body_template['value']['body_text']
        email = EmailMessage(subject, body, EMAIL_FROM, to=[customer_email], bcc=bcc, headers = {'Reply-To': EMAIL_REPPLY})
        if body_template['value']['body_html']:
            email.content_subtype = "html"

        try:
            email.send()
            return None
        except Exception, e:
            logging.warn('SaleOrderEmail: Order ID %s - Error sending email: %s' % (order, str(e)))
            error = _("Your order is in process but we don't send email. Check in your order customer section.")
            return error
Example #23
0
def invoice(request, invoice):
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    values = conn.AccountInvoice.filter(partner_id=partner_id, number=invoice, company_id=OERP_COMPANY)
    if len(values) == 0:
        error = _('It is not allowed to view this section or not found. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    value = values[0]
    title = _(u'Invoice %s') % (value.number)
    metadescription = _(u'Details invoice %s') % (value.number)

    return render_to_response("account/invoice.html", {'title': title, 'metadescription': metadescription, 'value': value}, context_instance=RequestContext(request))
Example #24
0
def invoices(request):
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    
    values = {}
    total = len(conn.AccountInvoice.filter(partner_id=partner_id, state__ne='draft', type='out_invoice', company_id=OERP_COMPANY))
    offset, page_previous, page_next = paginationOOOP(request, total, PAGINATOR_INVOICE_TOTAL)

    values = conn.AccountInvoice.filter(partner_id=partner_id, state__ne='draft', type='out_invoice', company_id=OERP_COMPANY, offset=offset, limit=PAGINATOR_INVOICE_TOTAL, order='name DESC')

    title = _(u'All Invoices')
    metadescription = _(u'List all invoices of %s') % full_name

    return render_to_response("account/invoices.html", {'title':title, 'metadescription':metadescription, 'values':values, 'page_previous':page_previous, 'page_next':page_next}, context_instance=RequestContext(request))
Example #25
0
def index(request):
    """
    4b (Pasat Internet 4b)
    OpenERP Payment Type App is: pasat4b
    Sale Order Reference:
        - Minimium 4, Maximun 12
    """

    title = _(u'Payment Credit Card Pasat 4b')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='pasat4b')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])
        
    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        pasat4b_dict = {
            "Ds_Merchant_Order": order.name,
            "Ds_Merchant_MerchantCode": PASAT4B_MERCHANT_CODE,
        }

        form = pasat4bPaymentForm(initial=pasat4b_dict)
        debug = DEBUG
        logging.info('Order %s: Pasat 4b form and redirect' % order.name)
        return HttpResponse(render_to_response('pasat4b/form.html', locals(), context_instance=RequestContext(request)))

    else:
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
def payment(request, order):
    """
    Payment. Payment Order
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id, name=order, shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _('It is not allowed to view this section or not found. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    value = values[0]

    if value.state != 'draft' or value.payment_state != 'draft':
        error = _('Your order is in progress or this order was payed')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    sale_shop = conn.SaleShop.filter(id=OERP_SALE)[0]
    payments = sale_shop.zoook_payment_types
    
    title = _(u'Payment Order %s') % (value.name)
    metadescription = _(u'Payment Order %s') % (value.name)
    currency = value.pricelist_id.currency_id.symbol

    return render_to_response("sale/payment.html", {
                'title': title, 
                'metadescription': metadescription, 
                'value': value, 
                'payments': payments, 
                'currency': currency,
            }, context_instance=RequestContext(request))
Example #27
0
def pasat4b_confirm(request):
    """
    Confirmation Pasat 4b view
    """

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    order = request.session['sale_order']

    payment_pasat4b = pasat4bResponse.objects.filter(pszPurchorderNum=order)
    payment = False

    if len(payment_pasat4b) > 0:
        if (payment_pasat4b[0].result == 0): #0 -> transaccin autorizada
            payment = True

    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if payment and len(orders) > 0:
        order = orders[0]
        payment_order = conn_webservice('sale.order', 'sale_order_payment', [order.name, 'pasat4b'])

        title = _(u'Confirmation Payment Credit Card Pasat 4b')
        values = {'order':request.session['sale_order'], 'title':title}

        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info(_('Order %s: Pasat 4b payment finish') % order.name)

        return HttpResponse(render_to_response('pasat4b/confirm.html', values, context_instance=RequestContext(request)))
    else:
        error = _('Error return 4b (Pasat Internet 4b) Payment. Contact us to check payment')
        return HttpResponse(render_to_response('pasat4b/error.html', {'error':error}, context_instance=RequestContext(request)))
def partner(request):
    """Partner page"""

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
        
    site_configuration = siteConfiguration(SITE_ID)

    partner = conn.ResPartner.get(partner_id)
    vat = format_vat(partner.vat)
    partnet_title = False
    if partner.title:
        partnet_title = partner.title.name

    if request.method == 'POST':
        data = get_contact_data(request.POST.copy())
        for contact_id in data.keys():
            address = conn.ResPartnerAddress.get(contact_id)
            address.street = data[contact_id]['street']
            address.zip = data[contact_id]['zip']
            address.city = data[contact_id]['city']
            address.phone = data[contact_id]['phone']
            address.save()
        message = [_('Successfully saved profile.')]

    address_invoice = conn.ResPartnerAddress.filter(type='invoice',partner_id=partner_id)
    address_delivery = conn.ResPartnerAddress.filter(type='delivery',partner_id=partner_id)
    
    title = _(u'User Profile')
    metadescription = _(u'User profile of %(site)s') % {'site':site_configuration.site_title}
    
    return render_to_response("partner/partner.html", locals(), context_instance=RequestContext(request))
Example #29
0
def partner_addressremove(request, adddress_id):
    """
    Remove partner address
    """

    context_instance=RequestContext(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=context_instance)
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=context_instance)
    addresses = conn.ResPartnerAddress.filter(partner_id=partner_id, id=adddress_id)
    try:
        if len(addresses) > 0:
            address = conn.ResPartnerAddress.get(addresses[0].id)
            address.delete()
    except:
        pass  # TODO: Display error message to user

    return HttpResponseRedirect("%s/partner/partner" % (context_instance['LOCALE_URI']))
def orders(request):
    """
    Orders. All Orders Partner Available
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    values = {}
    total = len(conn.SaleOrder.filter(partner_id=partner_id, shop_id__in=OERP_SALES))
    offset, page_previous, page_next = paginationOOOP(request, total, PAGINATOR_ORDER_TOTAL)

    values = conn.SaleOrder.filter(partner_id=partner_id, shop_id__in=OERP_SALES, offset=offset, limit=PAGINATOR_ORDER_TOTAL, order='date_order DESC, name DESC')

    orders = []
    for order in values:
        num_lines = len(conn.SaleOrderLine.filter(order_id=order.id))
        if num_lines > 0:
            orders.append(order)

    title = _(u'All Orders')
    metadescription = _(u'List all orders of %s') % full_name

    return render_to_response("sale/orders.html", {
                'title':title,
                'metadescription':metadescription,
                'values':orders,
                'page_previous':page_previous,
                'page_next':page_next,
            }, context_instance=RequestContext(request))
Example #31
0
def sermepa_confirm(request):
    """
    Confirmation Sermepa view
    """

    title = _(u'Confirmation Credit Card Servired')

    conn = connOOOP()
    order = request.session['sale_order']

    #TODO: check real IPN and test this code
    payment_sermepa = SermepaResponse.objects.filter(Ds_Order=order)
    payment = False

    if len(payment_sermepa)>0:
        if (payment_sermepa[0].Ds_Signature):
            payment = True

    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if payment and len(orders) > 0:
        order = orders[0]
        payment_order = conn_webservice('sale.order', 'sale_order_payment', [order.name, 'sermepa'])

        values = {'order':request.session['sale_order']}
        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info(_('Order %s: servired payment finish') % order.name)

        return HttpResponse(render_to_response('sermepa/confirm.html', values, context_instance=RequestContext(request)))
    else:
        error = _('Error return Servired Payment. Contact us to check payment')
        return HttpResponse(render_to_response('sermepa/error.html', {'error':error}, context_instance=RequestContext(request)))
Example #32
0
def paypal_confirm(request):
    """
    Confirmation Paypal view
    """

    title = _(u'Confirm Payment Paypal')

    conn = connOOOP()
    order = request.session['sale_order']

    #TODO: check real IPN and test this code
    payment_paypal = PayPalIPN.objects.filter(invoice=order)
    payment = False

    if len(payment_paypal)>0:
        if (payment_paypal[0].verify_sign):
            payment = True

    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if payment and len(orders) > 0:
        order = orders[0]
        payment_order = conn_webservice('sale.order', 'sale_order_payment', [order.name, 'paypal'])

        values = {'order':request.session['sale_order']}
        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info('Order %s: paypal payment finish' % (order.name))

        return HttpResponse(render_to_response('paypal/confirm.html', values, context_instance=RequestContext(request)))
    else:
        error = _('Error return Paypal Payment. Contact us to check payment')
        return HttpResponse(render_to_response('paypal/error.html', {'error':error}, context_instance=RequestContext(request)))
Example #33
0
def index(request):
    """
    Sermepa (Servired)
    OpenERP Payment Type App is: sermepa
    Sale Order Reference:
        - Only numbers, not SO0001
        - Minimium 4, Maximun 12
    """

    title = _(u'Payment Credit Card Servired')

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='sermepa')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])

    if (len(payment_type) > 0) and len(orders) > 0:
        #change payment_type = done
        order = orders[0]
        order.payment_state = 'done'
        order.save()

        site = Site.objects.get_current()
        site_configuration = siteConfiguration(SITE_ID)

        sermepa_dict = {
            "Ds_Merchant_Titular":
            SERMEPA_MERCHANT_NAME,
            "Ds_Merchant_MerchantData":
            '',
            "Ds_Merchant_MerchantName":
            SERMEPA_MERCHANT_NAME,
            "Ds_Merchant_ProductDescription":
            site_configuration.site_title,
            "Ds_Merchant_Amount":
            int(order.amount_total * 100),
            "Ds_Merchant_TransactionType":
            SERMEPA_TRANS_TYPE,
            "Ds_Merchant_Terminal":
            SERMEPA_TERMINAL,
            "Ds_Merchant_MerchantCode":
            SERMEPA_MERCHANT_CODE,
            "Ds_Merchant_Order":
            order.name,
            "Ds_Merchant_Currency":
            SERMEPA_CURRENCY,
            "Ds_Merchant_MerchantURL":
            SERMEPA_MERCHANT_URL,
            "Ds_Merchant_UrlOK":
            "http://%s%s" % (site.domain, '/payment/sermepa/confirm'),
            "Ds_Merchant_UrlKO":
            "http://%s%s" % (site.domain, '/payment/sermepa/error'),
        }

        form = SermepaPaymentForm(initial=sermepa_dict)
        debug = DEBUG
        logging.info('Order %s: sermepa form and redirect' % order.name)
        return HttpResponse(
            render_to_response('sermepa/form.html',
                               locals(),
                               context_instance=RequestContext(request)))

    else:
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
Example #34
0
def wishlist(request):
    """
    Wishlist
    Favourites products customer
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    prod_wishlist = False
    partner = conn.ResPartner.get(partner_id)
    product_obj = partner.product_wishlist_ids

    path = request.path_info.split('/')
    if 'remove' in path:
        kwargs = {
            'slug_'+get_language(): path[-1], #slug is unique
        }
        tplproduct = ProductTemplate.objects.filter(**kwargs)
        if tplproduct.count() > 0:
            try:
                for prod in product_obj:
                    if prod.id == tplproduct[0].id: #exist this product wishlist
                        prod_wishlist = conn_webservice('res.partner','write', [[partner_id], {'product_wishlist_ids':[(3, tplproduct[0].id)]}])
            except:
                prod_wishlist = True
                
    if 'add' in path:
        kwargs = {
            'slug_'+get_language(): path[-1], #slug is unique
        }
        tplproduct = ProductTemplate.objects.filter(**kwargs)
        if tplproduct.count() > 0:
            check_add = False
            if product_obj:
                for prod in product_obj:
                    if prod.id == tplproduct[0].id: #exist this product wishlist
                        check_add = True
            if not check_add:
                prod_wishlist = conn_webservice('res.partner','write', [[partner_id], {'product_wishlist_ids':[(4, tplproduct[0].id)]}])

    title = _(u'Whislist')
    metadescription = _(u'Whislist of %s') % full_name
    
    if prod_wishlist:
        partner = conn.ResPartner.get(partner_id) #refresh product_wishlist_ids if add or remove
        product_obj = partner.product_wishlist_ids
    
    products = []
    if product_obj:
        for prod in product_obj:
            prods = ProductProduct.objects.filter(product_tmpl=prod.id).order_by('price')
            tplproduct = ProductTemplate.objects.get(id=prod.id)
            i = 0
            prod_images = []
            while i<len(prods) and len(prod_images)==0: 
                prod_images = ProductImages.objects.filter(product=prods[i].id,base_image=True)
                i+=1
            base_image = False
            if prod_images.count() > 0:
                base_image = prod_images[0]
            products.append({'product': tplproduct, 'name': tplproduct.name, 'products': prods, 'base_image': base_image})

    return render_to_response("catalog/wishlist.html", {
                    'title': title, 'metadescription': metadescription, 
                    'products': products,
                    'currency': DEFAULT_CURRENCY,
                    'currency_position': CURRENCY_LABEL_POSITION,
                    'update_price': UPDATE_PRICE
                }, context_instance=RequestContext(request))
Example #35
0
def partner(request):
    """Partner page"""

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    site_configuration = siteConfiguration(SITE_ID)

    partner = conn.ResPartner.get(partner_id)
    vat = format_vat(partner.vat)
    partnet_title = False
    if partner.title:
        partnet_title = partner.title.name

    if request.method == 'POST':
        data = get_contact_data(request.POST.copy())
        for contact_id in data.keys():
            if contact_id == 'newaddress':
                address = conn.ResPartnerAddress.new()
                address.partner_id = partner
            else:
                address = conn.ResPartnerAddress.get(contact_id)
            address.street = data[contact_id]['street']
            address.zip = data[contact_id]['zip']
            address.city = data[contact_id]['city']
            address.phone = data[contact_id]['phone']
            address.type = data[contact_id]['type']
            address_id = address.save()
        message = [_('Successfully saved profile.')]

    addresses = conn.ResPartnerAddress.filter(
        partner_id=partner_id,
        type__in=['delivery', 'invoice', 'default', False],
        order='id')
    del_have = False
    inv_have = False
    i = 0
    while i < len(addresses) and (not del_have or not inv_have):
        if (not del_have
                or not inv_have) and addresses[i].type in ['default', False]:
            del_have = True
            inv_have = True
        if not del_have and addresses[i].type == 'delivery':
            del_have = True
        if not inv_have and addresses[i].type == 'invoice':
            inv_have = True
        i += 1

    title = _(u'User Profile')
    metadescription = _(u'User profile of %(site)s') % {
        'site': site_configuration.site_title
    }

    return render_to_response("partner/partner.html",
                              locals(),
                              context_instance=RequestContext(request))
Example #36
0
def register(request):
    """Registration page. If exists session, redirect profile"""

    context_instance = RequestContext(request)

    if request.user.is_authenticated():  #redirect profile
        return HttpResponseRedirect("%s/partner/profile/" %
                                    context_instance['LOCALE_URI'])

    site_configuration = siteConfiguration(SITE_ID)

    title = _(u'Create an Account')
    metadescription = _(u'Create an Account of %(site)s') % {
        'site': site_configuration.site_title
    }
    partner_vat_required = PARTNER_VAT_REQUIRED
    country_default = COUNTRY_DEFAULT
    title_default = ''

    if request.method == "POST":
        message = []
        users = ''
        emails = ''
        error = []
        country = False

        form = UserCreationForm(request.POST)
        data = request.POST.copy()

        username = data['username']
        email = data['email']
        password = data['password1']
        name = data['name']
        vat_code = data['vat_code']
        country_default = vat_code
        title = data['title']
        title_default = title
        vat = data['vat']
        street = data['street']
        zip = data['zip']
        city = data['city']
        phone = data['phone']
        #mobile = data['mobile']
        same_address = 'delivery-same-address' in data
        if not same_address:
            delivery_street = data['delivery_street']
            delivery_zip = data['delivery_zip']
            delivery_city = data['delivery_city']
            delivery_phone = data['delivery_phone']
            #delivery_mobile = data['delivery_mobile']

        countries = ResCountry.objects.filter(code=vat_code)
        if len(countries) > 0:
            country = countries[0].id

        if (data['password1'] == data['password2']) and country:
            if form.is_valid():
                if len(username) < USER_LENGHT:
                    msg = _(
                        'Username is short. Minimum %(size)s characters') % {
                            'size': USER_LENGHT
                        }
                    message.append(msg)
                if len(password) < KEY_LENGHT:
                    msg = _(
                        'Password is short. Minimum %(size)s characters') % {
                            'size': KEY_LENGHT
                        }
                    message.append(msg)

                if is_valid_email(email):
                    # check if user not exist
                    users = User.objects.filter(username__exact=username)
                    emails = User.objects.filter(email__exact=email)
                else:
                    msg = _('Sorry. The email is not valid. Try again.')
                    message.append(msg)

                if RECAPTCHA_PUB_KEY != '':
                    check_captcha = captcha.submit(
                        request.POST['recaptcha_challenge_field'],
                        request.POST['recaptcha_response_field'],
                        RECAPTCHA_PRIVATE_KEY, request.META['REMOTE_ADDR'])
                    if check_captcha.is_valid is False:  # captcha not valid
                        msg = _('Error with captcha number. Copy same number.')
                        message.append(msg)

                if users:
                    msg = _(
                        'Sorry. This user already exists. Use another username.'
                    )
                    message.append(msg)
                if emails:
                    msg = _(
                        'Sorry. This email already exists. Use another email or remember password.'
                    )
                    message.append(msg)

                #check if this vat exists ERP
                if not message:
                    conn = connOOOP()
                    if not conn:
                        error = _(
                            'Error when connecting with our ERP. Try again or cantact us.'
                        )
                        return render_to_response(
                            "partner/error.html",
                            locals(),
                            context_instance=RequestContext(request))

                    if partner_vat_required or vat:
                        partner = conn.ResPartner.filter(vat__ilike=vat_code +
                                                         vat)
                        if len(partner) > 0:
                            msg = _(
                                'Sorry. This VAT already exists our ERP. Contact Us for create a new user.'
                            )
                            message.append(msg)

                #check if this vat valid
                if not message and (partner_vat_required or vat):
                    checkvat = vat_code + vat
                    checkvat = checkvat.upper()
                    check_vat = conn_webservice('res.partner', 'dj_check_vat',
                                                [checkvat, OERP_SALE])

                    if not check_vat:
                        msg = _('Vat not valid. Check if vat is correct')
                        message.append(msg)

                #create new partner and user
                if len(message) == 0:
                    # create partner
                    partner = conn.ResPartner.new()
                    partner.name = name
                    if vat:
                        partner.vat = checkvat
                    partner.dj_username = username
                    partner.dj_email = email
                    if title:
                        res_partner_title = conn.ResPartnerTitle.get(
                            int(title))
                        partner.title = res_partner_title
                        if res_partner_title.default_pricelist_id:
                            partner.property_product_pricelist = res_partner_title.default_pricelist_id
                    partner_id = partner.save()

                    # Create contact invoice address partner
                    address = conn.ResPartnerAddress.new()
                    address.name = name
                    address.partner_id = conn.ResPartner.get(partner_id)
                    address.street = street
                    address.zip = zip
                    address.city = city
                    address.phone = phone
                    #address.mobile = mobile
                    address.country_id = conn.ResCountry.get(country)
                    address.email = email
                    if not same_address:
                        address.type = 'invoice'
                    else:
                        address.type = 'default'
                    address_id = address.save()

                    if not same_address:
                        # Create contact delivery address partner
                        address = conn.ResPartnerAddress.new()
                        address.name = name
                        address.partner_id = conn.ResPartner.get(partner_id)
                        address.street = delivery_street
                        address.zip = delivery_zip
                        address.city = delivery_city
                        address.phone = delivery_phone
                        #address.mobile = delivery_mobile
                        address.country_id = conn.ResCountry.get(country)
                        address.email = email
                        address.type = 'delivery'
                        address_id = address.save()

                    # create user
                    # split name: first_name + last name
                    if len(name.split(' ')) > 1:
                        name = name.split(' ')
                        first_name = name[0]
                        del name[0]
                        last_name = ' '.join(name)
                    else:
                        first_name = name
                        last_name = ''
                    user = User.objects.create_user(username, email, password)
                    user.first_name = first_name
                    user.last_name = last_name
                    user.is_staff = False
                    user.save()

                    # create authProfile
                    authProfile = AuthProfile(user=user, partner_id=partner_id)
                    authProfile.save()

                    try:
                        # send email
                        subject = _('New user is added - %(name)s') % {
                            'name': site_configuration.site_title
                        }
                        body = _(
                            "This email is generated automatically from %(site)s\n\nUsername: %(username)s\nPassword: %(password)s\n\n%(live_url)s\n\nPlease, don't answer this email"
                        ) % {
                            'site': site_configuration.site_title,
                            'username': username,
                            'password': password,
                            'live_url': get_live_url(request)
                        }
                        emailobj = EmailMessage(subject, body, to=[email])
                        emailobj.send()
                    finally:
                        # authentification / login user
                        user = authenticate(username=username,
                                            password=password)
                        auth_login(request, user)
                        if 'redirect' in request.POST:
                            redirect = base64.b64decode(
                                request.POST['redirect'])
                            return HttpResponseRedirect(redirect)

                        return HttpResponseRedirect(
                            "%s/partner/profile/" %
                            context_instance['LOCALE_URI'])
            else:
                for field in form:
                    for error in field.errors:
                        message.append(error)
        else:
            msg = _("Sorry. Passwords do not match. Try again.")
            message.append(msg)

    form = UserCreationForm()
    if RECAPTCHA_PUB_KEY != '':
        html_captcha = captcha.displayhtml(RECAPTCHA_PUB_KEY)
    if request.POST.get('redirect'):
        redirect = request.POST.get('redirect')
    if request.GET.get('next'):
        if request.GET.get('qty'):
            redirect = base64.b64encode(
                request.GET.get('next') + '&qty=' + request.GET.get('qty'))
        else:
            redirect = base64.b64encode(request.GET.get('next'))

    countries = ResCountry.objects.all()
    titles = ResPartnerTitle.objects.all()

    return render_to_response("partner/register.html",
                              locals(),
                              context_instance=RequestContext(request))
Example #37
0
def confirm(request):
    """
    Debit
    OpenERP Payment Type App is: debit
    """

    title = _(u'Payment Debit Bank')
    context_instance=RequestContext(request)

    if not 'sale_order' in request.session:
        error = _('Order number is not available. Use navigation menu.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment='debit')
    orders = conn.SaleOrder.filter(name=request.session['sale_order'])
    
    bank_number = request.POST.get('number', '')

    if not bank_number:
        return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))

    if (len(payment_type) > 0) and len(orders) > 0:
        order = orders[0]
        partner_banks = conn.ResPartnerBank.filter(acc_number=bank_number,partner_id=order.partner_id.id)

        #add bank number res_partner_bank
        if not len(partner_banks)>0:
            country_id = order.partner_invoice_id.country_id.id
            bank_code = bank_number[:4]
            banks = conn.ResBank.filter(country=country_id,code=bank_code)

            # not bank available
            if not len(banks)>0:
                banks = conn.ResBank.all() #get first bank available. TODO: get on_change/country

            try:
                res_partner_bank = conn.ResPartnerBank.new()
                res_partner_bank.acc_number = str(bank_number)
                res_partner_bank.partner_id = order.partner_id
                res_partner_bank.bank = banks[0]
                res_partner_bank.state = 'bank'
                res_partner_bank.default_bank = 0
                res_partner_bank.country_id = ''
                res_partner_bank.state_id = ''
                res_partner_bank.save()
            except:
                logging.info('[%s] %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), 'Bank Partner error: %s' % (bank_number)))

        #change payment_type = done
        order.payment_state = 'done'
        order.save()

        payment_order = conn_webservice('sale.order', 'sale_order_payment', [order.name, 'debit'])

        values = {'order':request.session['sale_order'],'payment_type':payment_type[0]}
        del request.session['sale_order']

        #send email sale order
        SaleOrderEmail(order.id)

        logging.info('[%s] %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), 'Order %s: debit payment finish' % (order.name) ))
        return render_to_response("debit/confirm.html", values, context_instance=RequestContext(request))
    else:
        error = _('Error payment this order or is null. Contact Us or use navigation menu')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
def checkout_confirm(request):
    """
    Checkout. Confirm
    """

    context_instance=RequestContext(request)

    if 'sale_order' in request.session:
        return HttpResponseRedirect("%s/sale/order/%s" % (context_instance['LOCALE_URI'],request.session['sale_order']))

    if request.method == 'POST':
        partner_id = checkPartnerID(request)
        if not partner_id:
            error = _('Are you a customer? Please, contact us. We will create a new role.')
            return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

        full_name = checkFullName(request)

        conn = connOOOP()
        if not conn:
            error = _('Error when connecting with our ERP. Try again or cantact us.')
            return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
            
        partner = conn.ResPartner.get(partner_id)
        order = check_order(conn, partner_id, OERP_SALE)

        if order.state != 'draft':
            return HttpResponseRedirect("%s/sale/" % (context_instance['LOCALE_URI']))

        delivery = request.POST['delivery'] or False
        payment = request.POST['payment'] or False
        address_invoice = request.POST['address_invoice'] or False
        address_delivery = request.POST['address_delivery'] or False

        #delivery
        if delivery:
            delivery = delivery.split('|')
            carrier = conn.DeliveryCarrier.filter(code=delivery[0])
            price_unit = float(re.sub(',','.',delivery[1]))
            if len(carrier) == 0:
                return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))
            carrier = carrier[0]

            if partner.property_product_pricelist:
                pricelist = partner.property_product_pricelist.id
            else:
                shop = conn.SaleShop.get(OERP_SALE)
                pricelist = shop.pricelist_id.id

            if price_unit != 0.0:
                # Add delivery product in the order
                # if not free of charge
                values = [
                    [order.id], #ids
                    pricelist, #pricelist
                    carrier.product_id.id, #product
                    1, #qty
                    False, #uom
                    0, #qty_uos
                    False, #uos
                    '', #name
                    partner.id, #partner_id
                ]
                product_id_change = conn_webservice('sale.order.line','product_id_change', values)
                order_line = conn.SaleOrderLine.new()
                order_line.order_id = order
                order_line.name = carrier.product_id.name
                order_line.product_id = carrier.product_id
                order_line.product_uom_qty = 1
                order_line.product_uom = carrier.product_id.product_tmpl_id.uom_id
                order_line.delay = product_id_change['value']['delay']
                order_line.th_weight = product_id_change['value']['th_weight']
                order_line.type = product_id_change['value']['type']
                order_line.price_unit = price_unit
                order_line.tax_id = [conn.AccountTax.get(t_id) for t_id in product_id_change['value']['tax_id']]
                order_line.product_packaging = ''
                order_line.save()

            #delivery
            order.carrier_id = carrier

        #payment type
        payment_type = conn.ZoookSaleShopPaymentType.filter(app_payment=payment)
        if len(payment_type) > 0:
            if payment_type[0].commission: #add new order line
                payment = conn_webservice('zoook.sale.shop.payment.type','set_payment_commission', [order.id, payment])
            order.payment_type = payment_type[0].payment_type_id
            order.picking_policy = payment_type[0].picking_policy
            order.order_policy = payment_type[0].order_policy
            order.invoice_quantity = payment_type[0].invoice_quantity
        else:
            return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))

        #Replace invoice address and delivery address
        if address_invoice:
            #add new invoice address
            if address_invoice == 'add_invoice':
                address = conn.ResPartnerAddress.new()
                address.name = request.POST['invoice_name']
                address.partner_id = conn.ResPartner.get(partner_id)
                address.type = 'invoice'
                address.street = request.POST['invoice_street']
                address.zip = request.POST['invoice_zip']
                address.city = request.POST['invoice_city']
                countries = ResCountry.objects.filter(code=request.POST['invoice_country_code'])
                if len(countries)>0:
                    country = countries[0].id
                    address.country_id = conn.ResCountry.get(country)
                if request.user.email:
                    address.email = request.user.email
                address.phone = request.POST['invoice_phone']
                address_invoice = address.save()

            address_invoice = conn.ResPartnerAddress.get(int(address_invoice))
            if address_invoice:
                order.partner_invoice_id = address_invoice
        else:
            return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))

        if address_delivery:
            #add new delivery address
            if address_delivery == 'add_delivery':
                address = conn.ResPartnerAddress.new()
                address.name = request.POST['delivery_name']
                address.partner_id = conn.ResPartner.get(partner_id)
                address.type = 'delivery'
                address.street = request.POST['delivery_street']
                address.zip = request.POST['delivery_zip']
                address.city = request.POST['delivery_city']
                countries = ResCountry.objects.filter(code=request.POST['delivery_country_code'])
                if len(countries)>0:
                    country = countries[0].id
                    address.country_id = conn.ResCountry.get(country)
                if request.user.email:
                    address.email = request.user.email
                address.phone = request.POST['delivery_phone']
                address_delivery = address.save()

            address_delivery = conn.ResPartnerAddress.get(int(address_delivery))
            if address_delivery:
                order.partner_shipping_id = address_delivery
        else:
            return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))

        #cupon code / promotion
        code_promotion = request.POST['promotion']
        if code_promotion:
            order.coupon_code = code_promotion

        #payment state
        order.payment_state = 'checking'
        order.save()

        #apply cupon code / promotion
        if code_promotion:
            promotion = conn_webservice('promos.rules','apply_promotions', [order.id])
            logging.info('[%s] %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), 'Apply promotion %s Order %s' % (code_promotion, order.name) ))

        logging.info('[%s] %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), 'Payment %s Order %s' % (payment_type[0].app_payment, order.name) ))

        request.session['sale_order'] = order.name

        return HttpResponseRedirect("%s/payment/%s/" % (context_instance['LOCALE_URI'], payment_type[0].app_payment))
    else:
        return HttpResponseRedirect("%s/sale/checkout/" % (context_instance['LOCALE_URI']))
Example #39
0
def cancel(request, order):
    """
    Order. Cancel Order
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    values = conn.SaleOrder.filter(partner_id=partner_id,
                                   name=order,
                                   shop_id__in=OERP_SALES)
    if len(values) == 0:
        error = _(
            'It is not allowed to view this section or not found. Use navigation menu.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    value = values[0]

    if value.state != 'draft':
        error = _(
            'Your order is in progress and it is not possible to cancel. Contact with us'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    #cancel order
    try:
        cancel = conn_webservice('sale.order', 'action_cancel', [[value.id]])
    except:
        error = _(
            'An error is getting when cancel this order. Try again or contact us'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    #drop session if exists
    if 'sale_order' in request.session:
        if request.session['sale_order'] == value.name:
            del request.session['sale_order']

    value = conn.SaleOrder.get(value.id)  #reload sale order values
    title = _(u'Order %s cancelled') % (value.name)
    metadescription = _(u'Order %s cancelled') % (value.name)

    return render_to_response("sale/order.html", {
        'title': title,
        'metadescription': metadescription,
        'value': value,
    },
                              context_instance=RequestContext(request))
def checkout(request):
    """
    Checkout. Order Cart
    """

    context_instance=RequestContext(request)

    if 'sale_order' in request.session:
        return HttpResponseRedirect("%s/sale/order/%s" % (context_instance['LOCALE_URI'],request.session['sale_order']))

    site_configuration = siteConfiguration(SITE_ID)

    message = False
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _('Are you a customer? Please, contact us. We will create a new role.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _('Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

    order = check_order(conn, partner_id, OERP_SALE)
    
    if order == 'error':
        return HttpResponseRedirect("%s/partner/partner/" % (context_instance['LOCALE_URI']))

    if request.method == 'POST' or request.GET.get('code'):
        if request.POST.get('code'):
            code = request.POST['code']
            qty = int(request.POST['qty'])
        else:
            code = request.GET['code']
            qty = int(request.GET['qty'])
        #check product is available to add to cart
        product = check_product(conn, code)
        if product:
            #check if this product exist
            product_line = conn.SaleOrderLine.filter(order_id=order.id, product_id=product.id)
            product = conn.ProductProduct.get(product.id)
            partner = conn.ResPartner.get(partner_id)

            if len(product_line) > 0: #product line exist -> update
                order_line = conn.SaleOrderLine.get(product_line[0].id)
                order_line.product_uom_qty = qty+product_line[0].product_uom_qty
                order_line.save()
            else: #product line not exist -> create
                if partner.property_product_pricelist:
                    pricelist = partner.property_product_pricelist.id
                else:
                    shop = conn.SaleShop.get(OERP_SALE)
                    pricelist = shop.pricelist_id.id
                values = [
                    [order.id], #ids
                    partner.property_product_pricelist.id, #pricelist
                    product.id, #product
                    qty, #qty
                    False, #uom
                    0, #qty_uos
                    False, #uos
                    '', #name
                    partner_id, #partner_id
                ]
                try:
                    product_id_change = conn_webservice('sale.order.line','product_id_change', values)
                except Exception, e:
                    logging.error("Error creating/modifying the order.\nValues: %s\nException: %s" % (str(values),str(e)))
                    values = {
                            'title': _('Checkout Error'),
                            'error':_("Error creating/modifying the order. Try again, or contact with us."),
                        }
                    return render_to_response("sale/checkout.html", values, context_instance=RequestContext(request))

                sale_order_add_product = True
                not_enought_stock = None
                if product_id_change['warning'] and SALE_ORDER_PRODUCT_CHECK:
                    if SALE_ORDER_PRODUCE_PRODUCT_CHECK or product.supply_method != 'produce':
                        not_enought_stock = _('Not enough stock !')
                        sale_order_add_product = False

                if sale_order_add_product:
                    product_value = product_id_change['value']
                    order_line = conn.SaleOrderLine.new()
                    order_line.order_id = order
                    order_line.name = product_id_change['value']['name']
                    if 'notes' in product_value:
                        order_line.notes = product_id_change['value']['notes']
                    order_line.product_id = product
                    order_line.product_uom_qty = qty
                    order_line.product_uom = product.product_tmpl_id.uom_id
                    order_line.delay = product_id_change['value']['delay']
                    order_line.th_weight = product_id_change['value']['th_weight']
                    order_line.type = product_id_change['value']['type']
                    order_line.price_unit = product_id_change['value']['price_unit']
                    order_line.purchase_price = product_id_change['value']['purchase_price']
                    order_line.tax_id = [conn.AccountTax.get(t_id) for t_id in product_id_change['value']['tax_id']]
                    order_line.product_packaging = ''
                    order_line.save()
                else:
                    message = product_id_change['warning']

                if message and 'title' in message:
                    if not_enought_stock != None:
                        message = not_enought_stock
                    else:
                        message = message['title']

            #recalcule order (refresh amount)
            order = check_order(conn, partner_id, OERP_SALE)
Example #41
0
def checkout_confirm(request):
    """
    Checkout. Confirm
    """

    context_instance = RequestContext(request)

    if 'sale_order' in request.session:
        return HttpResponseRedirect(
            "%s/sale/order/%s" %
            (context_instance['LOCALE_URI'], request.session['sale_order']))

    if request.method == 'POST':
        partner_id = checkPartnerID(request)
        if not partner_id:
            error = _(
                'Are you a customer? Please, contact us. We will create a new role.'
            )
            return render_to_response("partner/error.html",
                                      locals(),
                                      context_instance=RequestContext(request))

        full_name = checkFullName(request)

        conn = connOOOP()
        if not conn:
            error = _(
                'Error when connecting with our ERP. Try again or cantact us.')
            return render_to_response("partner/error.html",
                                      locals(),
                                      context_instance=RequestContext(request))

        partner = conn.ResPartner.get(partner_id)
        order = check_order(conn, partner_id, OERP_SALE)

        if order.state != 'draft':
            return HttpResponseRedirect("%s/sale/" %
                                        (context_instance['LOCALE_URI']))

        delivery = request.POST['delivery'] or False
        payment = request.POST['payment'] or False
        address_invoice = request.POST['address_invoice'] or False
        address_delivery = request.POST['address_delivery'] or False

        #delivery
        if delivery:
            delivery = delivery.split('|')
            carrier = conn.DeliveryCarrier.filter(code=delivery[0])
            price_unit = float(re.sub(',', '.', delivery[1]))
            if len(carrier) == 0:
                return HttpResponseRedirect("%s/sale/checkout/" %
                                            (context_instance['LOCALE_URI']))
            carrier = carrier[0]

            if partner.property_product_pricelist:
                pricelist = partner.property_product_pricelist.id
            else:
                shop = conn.SaleShop.get(OERP_SALE)
                pricelist = shop.pricelist_id.id

            if price_unit != 0.0:
                # Add delivery product in the order
                # if not free of charge
                values = [
                    [order.id],  #ids
                    pricelist,  #pricelist
                    carrier.product_id.id,  #product
                    1,  #qty
                    False,  #uom
                    0,  #qty_uos
                    False,  #uos
                    '',  #name
                    partner.id,  #partner_id
                ]
                product_id_change = conn_webservice('sale.order.line',
                                                    'product_id_change',
                                                    values)
                order_line = conn.SaleOrderLine.new()
                order_line.order_id = order
                order_line.name = carrier.product_id.name
                order_line.product_id = carrier.product_id
                order_line.product_uom_qty = 1
                order_line.product_uom = carrier.product_id.product_tmpl_id.uom_id
                order_line.delay = product_value['delay']
                order_line.th_weight = product_value['th_weight']
                order_line.type = product_value['type']
                order_line.price_unit = price_unit
                order_line.tax_id = [
                    conn.AccountTax.get(t_id)
                    for t_id in product_value['tax_id']
                ]
                order_line.product_packaging = ''
                order_line.save()

            #delivery
            order.carrier_id = carrier

        #payment type
        payment_type = conn.ZoookSaleShopPaymentType.filter(
            app_payment=payment)
        if len(payment_type) > 0:
            if payment_type[0].commission:  #add new order line
                payment = conn_webservice('zoook.sale.shop.payment.type',
                                          'set_payment_commission',
                                          [order.id, payment])
            order.payment_type = payment_type[0].payment_type_id
            order.picking_policy = payment_type[0].picking_policy
            order.order_policy = payment_type[0].order_policy
            order.invoice_quantity = payment_type[0].invoice_quantity
        else:
            return HttpResponseRedirect("%s/sale/checkout/" %
                                        (context_instance['LOCALE_URI']))

        #Replace invoice address and delivery address
        if address_invoice:
            #add new invoice address
            if address_invoice == 'add_invoice':
                address = conn.ResPartnerAddress.new()
                address.name = request.POST['invoice_name']
                address.partner_id = conn.ResPartner.get(partner_id)
                address.type = 'invoice'
                address.street = request.POST['invoice_street']
                address.zip = request.POST['invoice_zip']
                address.city = request.POST['invoice_city']
                countries = ResCountry.objects.filter(
                    code=request.POST['invoice_country_code'])
                if len(countries) > 0:
                    country = countries[0].id
                    address.country_id = conn.ResCountry.get(country)
                if request.user.email:
                    address.email = request.user.email
                address.phone = request.POST['invoice_phone']
                address_invoice = address.save()

            address_invoice = conn.ResPartnerAddress.get(int(address_invoice))
            if address_invoice:
                order.partner_invoice_id = address_invoice
        else:
            return HttpResponseRedirect("%s/sale/checkout/" %
                                        (context_instance['LOCALE_URI']))

        if address_delivery:
            #add new delivery address
            if address_delivery == 'add_delivery':
                address = conn.ResPartnerAddress.new()
                address.name = request.POST['delivery_name']
                address.partner_id = conn.ResPartner.get(partner_id)
                address.type = 'delivery'
                address.street = request.POST['delivery_street']
                address.zip = request.POST['delivery_zip']
                address.city = request.POST['delivery_city']
                countries = ResCountry.objects.filter(
                    code=request.POST['delivery_country_code'])
                if len(countries) > 0:
                    country = countries[0].id
                    address.country_id = conn.ResCountry.get(country)
                if request.user.email:
                    address.email = request.user.email
                address.phone = request.POST['delivery_phone']
                address_delivery = address.save()

            address_delivery = conn.ResPartnerAddress.get(
                int(address_delivery))
            if address_delivery:
                order.partner_shipping_id = address_delivery
        else:
            return HttpResponseRedirect("%s/sale/checkout/" %
                                        (context_instance['LOCALE_URI']))

        #cupon code / promotion
        code_promotion = request.POST['promotion']
        if code_promotion:
            order.coupon_code = code_promotion

        #payment state
        order.payment_state = 'checking'
        order.save()

        #apply cupon code / promotion
        if code_promotion:
            promotion = conn_webservice('promos.rules', 'apply_promotions',
                                        [order.id])
            logging.info('[%s] %s' % (time.strftime('%Y-%m-%d %H:%M:%S'),
                                      'Apply promotion %s Order %s' %
                                      (code_promotion, order.name)))

        logging.info(
            '[%s] %s' %
            (time.strftime('%Y-%m-%d %H:%M:%S'), 'Payment %s Order %s' %
             (payment_type[0].app_payment, order.name)))

        request.session['sale_order'] = order.name

        return HttpResponseRedirect(
            "%s/payment/%s/" %
            (context_instance['LOCALE_URI'], payment_type[0].app_payment))
    else:
        return HttpResponseRedirect("%s/sale/checkout/" %
                                    (context_instance['LOCALE_URI']))
Example #42
0
def checkout(request):
    """
    Checkout. Order Cart
    """

    context_instance = RequestContext(request)

    if 'sale_order' in request.session:
        return HttpResponseRedirect(
            "%s/sale/order/%s" %
            (context_instance['LOCALE_URI'], request.session['sale_order']))

    site_configuration = siteConfiguration(SITE_ID)

    message = False
    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    order = check_order(conn, partner_id, OERP_SALE)

    if order == 'error':
        return HttpResponseRedirect("%s/partner/partner/" %
                                    (context_instance['LOCALE_URI']))

    if request.method == 'POST' or request.GET.get('code'):
        if request.POST.get('code'):
            code = request.POST['code']
            qty = int(request.POST['qty'])
        else:
            code = request.GET['code']
            qty = int(request.GET['qty'])
        #check product is available to add to cart
        product = check_product(conn, code)
        if product:
            #check if this product exist
            product_line = conn.SaleOrderLine.filter(order_id=order.id,
                                                     product_id=product.id)
            product = conn.ProductProduct.get(product.id)
            partner = conn.ResPartner.get(partner_id)

            if len(product_line) > 0:  #product line exist -> update
                order_line = conn.SaleOrderLine.get(product_line[0].id)
                order_line.product_uom_qty = qty + product_line[
                    0].product_uom_qty
                order_line.save()
            else:  #product line not exist -> create
                if partner.property_product_pricelist:
                    pricelist = partner.property_product_pricelist.id
                else:
                    shop = conn.SaleShop.get(OERP_SALE)
                    pricelist = shop.pricelist_id.id
                values = [
                    [order.id],  #ids
                    pricelist,  #pricelist
                    product.id,  #product
                    qty,  #qty
                    False,  #uom
                    0,  #qty_uos
                    False,  #uos
                    '',  #name
                    partner_id,  #partner_id
                ]
                try:
                    product_id_change = conn_webservice(
                        'sale.order.line', 'product_id_change', values)
                except Exception, e:
                    logging.error(
                        "Error creating/modifying the order.\nValues: %s\nException: %s"
                        % (str(values), str(e)))
                    values = {
                        'title':
                        _('Checkout Error'),
                        'error':
                        _("Error creating/modifying the order. Try again, or contact with us."
                          ),
                    }
                    return render_to_response(
                        "sale/checkout.html",
                        values,
                        context_instance=RequestContext(request))

                sale_order_add_product = True
                not_enought_stock = None
                if product_id_change['warning'] and SALE_ORDER_PRODUCT_CHECK:
                    if SALE_ORDER_PRODUCE_PRODUCT_CHECK or product.supply_method != 'produce':
                        not_enought_stock = _('Not enough stock !')
                        sale_order_add_product = False

                if sale_order_add_product:
                    product_value = product_id_change['value']
                    order_line = conn.SaleOrderLine.new()
                    order_line.order_id = order
                    order_line.name = product_value['name']
                    if 'notes' in product_value:
                        order_line.notes = product_value['notes']
                    order_line.product_id = product
                    order_line.product_uom_qty = qty
                    order_line.product_uom = product.product_tmpl_id.uom_id
                    order_line.delay = product_value['delay']
                    order_line.th_weight = product_value['th_weight']
                    order_line.type = product_value['type']
                    order_line.price_unit = product_value['price_unit']
                    if 'discount' in product_value:
                        order_line.discount = product_value['discount']
                    order_line.purchase_price = product_value['purchase_price']
                    order_line.tax_id = [
                        conn.AccountTax.get(t_id)
                        for t_id in product_value['tax_id']
                    ]
                    order_line.product_packaging = ''
                    order_line.save()
                else:
                    message = product_id_change['warning']

                if message and 'title' in message:
                    if not_enought_stock != None:
                        message = not_enought_stock
                    else:
                        message = message['title']

            #recalcule order (refresh amount)
            order = check_order(conn, partner_id, OERP_SALE)
Example #43
0
def payorder(request):
    """
    Payment Order without login
    Only Pay Order when:
      - State Draft 
      - Payment State Draft
      - Shop ID
    """

    name = request.GET.get('name', '')
    total = request.GET.get('total', '')

    title = _(u'Payment Order by reference')
    metadescription = _(u'Payment Order by reference')

    message = False
    value = False
    payments = False
    currency = DEFAULT_CURRENCY

    if request.method == 'POST':
        form = PayorderForm(request.POST)
        if form.is_valid():
            conn = connOOOP()
            if not conn:
                error = _(
                    'Error when connecting with our ERP. Try again or cantact us.'
                )
                return render_to_response(
                    "partner/error.html",
                    locals(),
                    context_instance=RequestContext(request))

            name = form.cleaned_data['name']
            total = float(form.cleaned_data['total'])

            values = conn.SaleOrder.filter(name=name,
                                           amount_total=total,
                                           state='draft',
                                           payment_state='draft',
                                           shop_id__in=OERP_SALES)

            if len(values) > 0:
                value = values[0]
                title = _(u'Order %s') % (value.name)
                metadescription = _(u'Details order %s') % (value.name)
                sale_shop = conn.SaleShop.filter(id=OERP_SALE)[0]
                payments = sale_shop.zoook_payment_types
                currency = value.pricelist_id.currency_id.symbol
            else:
                message = _(
                    'Try again. There are not some reference pending to pay or total do not match.'
                )
        else:
            message = _('Try again. Insert reference and total Order.')

    return render_to_response("sale/payorder.html", {
        'title': title,
        'metadescription': metadescription,
        'name': name,
        'total': total,
        'message': message,
        'value': value,
        'payments': payments,
        'currency': currency,
    },
                              context_instance=RequestContext(request))
Example #44
0
def register(request):
    """Registration page. If exists session, redirect profile"""

    context_instance=RequestContext(request)

    if request.user.is_authenticated(): #redirect profile
        return HttpResponseRedirect("%s/partner/profile/" % context_instance['LOCALE_URI'])

    site_configuration = siteConfiguration(SITE_ID)

    title = _(u'Create an Account')
    metadescription = _(u'Create an Account of %(site)s') % {'site':site_configuration.site_title}
    partner_vat_required = PARTNER_VAT_REQUIRED
    country_default = COUNTRY_DEFAULT
    title_default = ''

    if request.method == "POST":
        message = []
        users = ''
        emails = ''
        error = []
        country = False

        form = UserCreationForm(request.POST)
        data = request.POST.copy()

        username = data['username']
        email = data['email']
        password = data['password1']
        name = data['name']
        vat_code = data['vat_code']
        country_default = vat_code
        title = data['title']
        title_default = title
        vat = data['vat']
        street = data['street']
        zip = data['zip']
        city = data['city']
        phone = data['phone']
        #mobile = data['mobile']
        same_address = 'delivery-same-address' in data
        if not same_address:
            delivery_street = data['delivery_street']
            delivery_zip = data['delivery_zip']
            delivery_city = data['delivery_city']
            delivery_phone = data['delivery_phone']
            #delivery_mobile = data['delivery_mobile']

        countries = ResCountry.objects.filter(code=vat_code)
        if len(countries)>0:
            country = countries[0].id
            
        if (data['password1'] == data['password2']) and country:
            if form.is_valid():
                if len(username) < USER_LENGHT:
                    msg = _('Username is short. Minimum %(size)s characters') % {'size': USER_LENGHT}
                    message.append(msg)
                if len(password) < KEY_LENGHT:
                    msg = _('Password is short. Minimum %(size)s characters') % {'size': KEY_LENGHT}
                    message.append(msg)

                if is_valid_email(email):
                    # check if user not exist
                    users = User.objects.filter(username__exact=username)
                    emails = User.objects.filter(email__exact=email)
                else:
                    msg = _('Sorry. The email is not valid. Try again.')
                    message.append(msg)

                if RECAPTCHA_PUB_KEY != '':
                    check_captcha = captcha.submit(request.POST['recaptcha_challenge_field'], request.POST['recaptcha_response_field'], RECAPTCHA_PRIVATE_KEY, request.META['REMOTE_ADDR'])
                    if check_captcha.is_valid is False: # captcha not valid
                        msg = _('Error with captcha number. Copy same number.')
                        message.append(msg)

                if users:
                    msg = _('Sorry. This user already exists. Use another username.')
                    message.append(msg)
                if emails:
                    msg = _('Sorry. This email already exists. Use another email or remember password.')
                    message.append(msg)

                #check if this vat exists ERP
                if not message:
                    conn = connOOOP()
                    if not conn:
                        error = _('Error when connecting with our ERP. Try again or cantact us.')
                        return render_to_response("partner/error.html", locals(), context_instance=RequestContext(request))

                    if partner_vat_required or vat:
                        partner = conn.ResPartner.filter(vat__ilike = vat_code+vat)
                        if len(partner) > 0:
                            msg = _('Sorry. This VAT already exists our ERP. Contact Us for create a new user.')
                            message.append(msg)

                #check if this vat valid
                if not message and (partner_vat_required or vat):
                    checkvat = vat_code + vat
                    checkvat = checkvat.upper()
                    check_vat = conn_webservice('res.partner', 'dj_check_vat', [checkvat, OERP_SALE])

                    if not check_vat:
                        msg = _('Vat not valid. Check if vat is correct')
                        message.append(msg)
                
                #create new partner and user
                if len(message) == 0:
                    # create partner
                    partner = conn.ResPartner.new()
                    partner.name = name
                    if vat:
                        partner.vat = checkvat
                    partner.dj_username = username
                    partner.dj_email = email
                    if title:
                        res_partner_title = conn.ResPartnerTitle.get(int(title))
                        partner.title = res_partner_title
                        if res_partner_title.default_pricelist_id:
                            partner.property_product_pricelist = res_partner_title.default_pricelist_id
                    partner_id = partner.save()

                    # Create contact invoice address partner
                    address = conn.ResPartnerAddress.new()
                    address.name = name
                    address.partner_id = conn.ResPartner.get(partner_id)
                    address.street = street
                    address.zip = zip
                    address.city = city
                    address.phone = phone
                    #address.mobile = mobile
                    address.country_id = conn.ResCountry.get(country)
                    address.email = email
                    if not same_address:
                        address.type = 'invoice'
                    else:
                        address.type = 'default'
                    address_id = address.save()

                    if not same_address:
                        # Create contact delivery address partner
                        address = conn.ResPartnerAddress.new()
                        address.name = name
                        address.partner_id = conn.ResPartner.get(partner_id)
                        address.street = delivery_street
                        address.zip = delivery_zip
                        address.city = delivery_city
                        address.phone = delivery_phone
                        #address.mobile = delivery_mobile
                        address.country_id = conn.ResCountry.get(country)
                        address.email = email
                        address.type = 'delivery'
                        address_id = address.save()

                    # create user
                    # split name: first_name + last name
                    if len(name.split(' ')) > 1:
                        name = name.split(' ')
                        first_name = name[0]
                        del name[0]
                        last_name = ' '.join(name)
                    else:
                        first_name = name
                        last_name = ''
                    user = User.objects.create_user(username, email, password)
                    user.first_name = first_name
                    user.last_name = last_name
                    user.is_staff = False
                    user.save()

                    # create authProfile
                    authProfile = AuthProfile(user=user,partner_id=partner_id)
                    authProfile.save()

                    try:
                        # send email
                        subject = _('New user is added - %(name)s') % {'name':site_configuration.site_title}
                        body = _("This email is generated automatically from %(site)s\n\nUsername: %(username)s\nPassword: %(password)s\n\n%(live_url)s\n\nPlease, don't answer this email") % {'site':site_configuration.site_title,'username':username,'password':password,'live_url':get_live_url(request)}
                        emailobj = EmailMessage(subject, body, to=[email])
                        emailobj.send()
                    finally:
                        # authentification / login user
                        user = authenticate(username=username, password=password)
                        auth_login(request, user)
                        if 'redirect' in request.POST:
                            redirect = base64.b64decode(request.POST['redirect'])
                            return HttpResponseRedirect(redirect)

                        return HttpResponseRedirect("%s/partner/profile/" % context_instance['LOCALE_URI'])
            else:
                for field in form:
                    for error in field.errors:
                        message.append(error)
        else:
            msg = _("Sorry. Passwords do not match. Try again.")
            message.append(msg)

    form = UserCreationForm()
    if RECAPTCHA_PUB_KEY != '':
        html_captcha = captcha.displayhtml(RECAPTCHA_PUB_KEY)
    if request.POST.get('redirect'):
        redirect = request.POST.get('redirect')
    if request.GET.get('next'):
        if request.GET.get('qty'):
            redirect = base64.b64encode(request.GET.get('next') + '&qty=' + request.GET.get('qty'))
        else:
            redirect = base64.b64encode(request.GET.get('next'))

    countries = ResCountry.objects.all()
    titles = ResPartnerTitle.objects.all()
    
    return render_to_response("partner/register.html", locals(), context_instance=RequestContext(request))
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_zoook.settings'

import django_zoook.logconfig

from django_zoook.settings import *
from django.utils.translation import ugettext as _
from django.template import defaultfilters
from django_zoook.catalog.models import ResManufacturer
from django_zoook.tools.zoook import connOOOP

logging.info(_('Sync. Manufacturers. Running'))

"""
manufacturers
"""
conn = connOOOP()
if not conn:
    logging.error(_('Error connecting to ERP'))

for result in conn.ResPartner.filter(manufacturer=True):
    values = {
        'id': result.id,
        'name': result.name,
        'slug': defaultfilters.slugify(result.name),
    }

    manufacturer = ResManufacturer(**values)
    try:
        manufacturer.save()            
        logging.info(_('Sync. Manufacturers save ID %s') % result.id)
    except:
Example #46
0
def wishlist(request):
    """
    Wishlist
    Favourites products customer
    """

    partner_id = checkPartnerID(request)
    if not partner_id:
        error = _(
            'Are you a customer? Please, contact us. We will create a new role.'
        )
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    full_name = checkFullName(request)
    conn = connOOOP()
    if not conn:
        error = _(
            'Error when connecting with our ERP. Try again or cantact us.')
        return render_to_response("partner/error.html",
                                  locals(),
                                  context_instance=RequestContext(request))

    prod_wishlist = False
    partner = conn.ResPartner.get(partner_id)
    product_obj = partner.product_wishlist_ids

    path = request.path_info.split('/')
    if 'remove' in path:
        kwargs = {
            'slug_' + get_language(): path[-1],  #slug is unique
        }
        tplproduct = ProductTemplate.objects.filter(**kwargs)
        if tplproduct.count() > 0:
            try:
                for prod in product_obj:
                    if prod.id == tplproduct[
                            0].id:  #exist this product wishlist
                        prod_wishlist = conn_webservice(
                            'res.partner', 'write', [[partner_id], {
                                'product_wishlist_ids': [(3, tplproduct[0].id)]
                            }])
            except:
                prod_wishlist = True

    if 'add' in path:
        kwargs = {
            'slug_' + get_language(): path[-1],  #slug is unique
        }
        tplproduct = ProductTemplate.objects.filter(**kwargs)
        if tplproduct.count() > 0:
            check_add = False
            if product_obj:
                for prod in product_obj:
                    if prod.id == tplproduct[
                            0].id:  #exist this product wishlist
                        check_add = True
            if not check_add:
                prod_wishlist = conn_webservice(
                    'res.partner', 'write', [[partner_id], {
                        'product_wishlist_ids': [(4, tplproduct[0].id)]
                    }])

    title = _(u'Whislist')
    metadescription = _(u'Whislist of %s') % full_name

    if prod_wishlist:
        partner = conn.ResPartner.get(
            partner_id)  #refresh product_wishlist_ids if add or remove
        product_obj = partner.product_wishlist_ids

    products = []
    if product_obj:
        for prod in product_obj:
            prods = ProductProduct.objects.filter(
                product_tmpl=prod.id).order_by('price')
            tplproduct = ProductTemplate.objects.get(id=prod.id)
            i = 0
            prod_images = []
            while i < len(prods) and len(prod_images) == 0:
                prod_images = ProductImages.objects.filter(product=prods[i].id,
                                                           base_image=True)
                i += 1
            base_image = False
            if prod_images.count() > 0:
                base_image = prod_images[0]
            products.append({
                'product': tplproduct,
                'name': tplproduct.name,
                'products': prods,
                'base_image': base_image
            })

    return render_to_response("catalog/wishlist.html", {
        'title': title,
        'metadescription': metadescription,
        'products': products,
        'currency': DEFAULT_CURRENCY,
        'currency_position': CURRENCY_LABEL_POSITION,
        'update_price': UPDATE_PRICE
    },
                              context_instance=RequestContext(request))
Example #47
0
logging.info(_('Sync. Attachment. Running'))

usage = "usage: %prog [options]"
parser = optparse.OptionParser(usage)
parser.add_option("-r", "--resource", dest="resources",
                default=False,
                help="Get product list.")
options, args = parser.parse_args()

"""Get Attachment to import at Django"""
resources = []
if options.resources:
    resources = options.resources.split(',')

conn = connOOOP()
if not conn:
    logging.error(_('Error connecting to ERP'))

results = conn_webservice('sale.shop', 'dj_export_attachments', [[OERP_SALE], resources])
logging.info('Total: %s' % len(results))

if len(results) == 0:
    logging.info(_('Sync. Not resources news or modified'))

for res in results:
    result = conn.IrAttachment.get(res)

    values = {
        'id': result.id,
        'name': result.name,