Пример #1
0
def datashop():
    from shops import Shop, DomainShop, ContractedProduct, Product
    from invoices import Order
    Shop(db), DomainShop(db), ContractedProduct(db), Product(db), Order(db)
    #store=db((db.shop.user==auth.user_id) & (db.shop.host==request.vars.host)).select()
    stores = db((db.shop.host == request.vars.host)
                & (db.shop.user == auth.user_id)).select(
                    db.shop.ALL,
                    db.domainshops.ALL,
                    db.priceplans.ALL,
                    left=[
                        db.domainshops.on(db.domainshops.shop == db.shop.id),
                        db.priceplans.on(db.priceplans.id == db.shop.priceplan)
                    ])

    contractedproducts = db(
        (db.contractedproducts.user == auth.user_id)
        & (db.contractedproducts.shop == stores[0].shop) &
        (db.contractedproducts.expiration <= datetime.datetime.now())).select(
            db.contractedproducts.ALL,
            db.products.ALL,
            left=[
                db.products.on(db.products.id == db.contractedproducts.product)
            ])
    return dict(stores=stores,
                host=stores[0].shop.host,
                ip=stores[0].shop.ip,
                contractedproducts=contractedproducts)
Пример #2
0
def enabledomain():
    from shops import Shop, DomainShop, PricePlan, ContractedProduct, Product
    Shop(db), DomainShop(db), PricePlan(db), ContractedProduct(db), Product(db)

    shop = db((db.shop.host == request.vars.host)
              & (db.shop.user == auth.user_id)).select().first()

    if shop:
        if shop.priceplan.paymode == 'free':
            #hay que pasar por caja, pero antes comprobar si hay algún pedido en planes distintos a free para esta tienda pendiente de ser aprobado
            pending = db((db.contractedproducts.shop == shop.id)
                         & (db.contractedproducts.user == auth.user_id)
                         & (db.contractedproducts.start == None)
                         & ((db.priceplans.paymode != None)
                            & (db.priceplans.paymode != 'free'))).select(
                                db.contractedproducts.id,
                                join=[
                                    db.products.on(db.products.id == db.
                                                   contractedproducts.product),
                                    db.priceplans.on(
                                        db.priceplans.id == db.products.plan)
                                ]).first()
            logger.debug(
                db((db.contractedproducts.shop == shop.id)
                   & (db.contractedproducts.user == auth.user_id)
                   & (db.contractedproducts.start == None)
                   & ((db.priceplans.paymode != None)
                      & (db.priceplans.paymode != 'free')))._select(
                          db.contractedproducts.id,
                          join=[
                              db.products.on(db.products.id ==
                                             db.contractedproducts.product),
                              db.priceplans.on(
                                  db.priceplans.id == db.products.plan)
                          ]))

            if pending == None:
                if request.vars.host:
                    redirect(
                        URL(request.application,
                            'plans',
                            'index',
                            vars=dict(host=request.vars.host)))
            else:
                session.flash = "Este pedido para cambiar de plan, estaba pendiente de confirmación pago"
                redirect(URL('payment', 'index'))

        else:
            #este dominio está en shop con un priceplan de pago, así que se puede llamar al api de internalgexcommerce para configurar el apache
            logger.debug("de pagoooo")
    else:
        session.flash = "No podemos encontrar la tienda %s" % request.vars.host
        redirect(URL('index'))
Пример #3
0
def index():
    from shops import Shop, DomainShop, PricePlan
    Shop(db), DomainShop(db), PricePlan(db)

    shop = db((db.shop.host == request.vars.host)
              & (db.shop.user == auth.user_id)).select().first()

    if shop:

        return dict(host=shop.host)
    else:
        session.flash = "No podemos encontrar la tienda %s" % request.vars.host
        redirect(URL('index'))
Пример #4
0
def deletedomain():
    from shops import Shop, DomainShop, PricePlan
    Shop(db), DomainShop(db), PricePlan(db)
    shophost = request.vars.host
    shop = db((db.shop.host == request.vars.host)
              & (db.shop.user == auth.user_id)).select().first()
    redirection = False
    ip = shop.ip
    if shop:
        try:
            db((db.domainshops.shop == shop.id)
               & (db.domainshops.host == request.vars.hostname)
               & (db.domainshops.domain == request.vars.domain)).delete()

            session.flash = "Dominio borrado con éxito"
            return "ok"
        except Exception as ex:
            return ex
    else:
        session.flash = "No podemos encontrar la tienda %s" % request.vars.host
        redirect(URL('index'))
Пример #5
0
def modifydomain():
    from shops import Shop, DomainShop, PricePlan
    Shop(db), DomainShop(db), PricePlan(db)
    shophost = request.vars.host
    shop = db((db.shop.host == request.vars.host)
              & (db.shop.user == auth.user_id)).select().first()
    redirection = False
    ip = shop.ip
    if shop:
        try:
            db((db.domainshops.shop == shop.id)
               & (db.domainshops.host == request.vars.o_hostname)
               & (db.domainshops.domain == request.vars.o_domain)).update(
                   domain=request.vars.domain,
                   host=request.vars.hostname,
                   active='modifying')
            db.commit()
            session.flash = "Modificación realizada con éxito"
            return "ok"
        except Exception as ex:
            return ex
    else:
        session.flash = "No podemos encontrar la tienda %s" % request.vars.host
        redirect(URL('index'))
Пример #6
0
import os
import socket
import datetime
import copy
import gluon.contenttype
import gluon.fileutils

from blog import Blog, Draft, Images
from shops import Shop, DomainShop, PricePlan, Product, ContractedProduct, ProfilePlan, PricePlan, CustomerAgreement, Agreement
from invoices import Invoice, Order, Orderlist, Fiscal, CreditAccount, AccountingEntry, Budget, Budgetlist
from regnews import Regnews
from province import Province
from cities import Cities
Images(db), Blog(db, ckeditor), Draft(
    db, ckeditor), Regnews(db), Province(db), Cities(db)
Shop(db), PricePlan(db), DomainShop(db), Product(db)
ProfilePlan(db), PricePlan(db), CustomerAgreement(db), Agreement(db)
Invoice(db), Order(db), Orderlist(db), Budget(db), Budgetlist(db), Fiscal(
    db), ContractedProduct(db), CreditAccount(db), AccountingEntry(db)

try:
    import pygraphviz as pgv
except ImportError:
    pgv = None

# ## critical --- make a copy of the environment

global_env = copy.copy(globals())
global_env['datetime'] = datetime

http_host = request.env.http_host.split(':')[0]
Пример #7
0
def payment():
    from invoices import Order, Orderlist
    from shops import Product, Shop, DomainShop, ContractedProduct
    from adminsettings import Adminsettings
    from auxiliartools import AuxiliarTools
    Adminsettings(db)
    settings = db(db.adminsettings.id > 0).select(db.adminsettings.ALL).first()
    Shop(db), Order(db), Orderlist(db), Product(db), DomainShop(
        db), ContractedProduct(db)
    external = AuxiliarTools(db)

    host = request.vars.host
    plan = request.vars.plan
    cert = request.vars.cert
    if host and plan and cert:  #hay que comprobar que viene por request un plan asignado a una tienda con el dato del cert
        try:
            db((db.orders.status == 'Creando')
               & (db.orders.user == auth.user_id)).delete(
               )  #sólo puede haber un pedido en estado de creación.
            plan = db(db.priceplans.id == request.vars.plan).select().first()
            shop = db((db.shop.host == request.vars.host)
                      & (db.shop.user == auth.user_id)).select().first()
            if shop and plan:  #comprobar que existe y es suyo (siempre por seguridad)
                profileplans = db(db.profileplans.priceplan == plan).select()
                total = float(0)
                for profileplan in profileplans:
                    if profileplan.active:
                        product = db(db.products.id ==
                                     profileplan.product).select().first()

                        if product.name.find("SSL") != -1 and cert == "false":
                            continue
                        total = total + float(product.price)

                orderid = db.orders.insert(
                    user=auth.user_id,
                    total=total,
                    totaltax="%.2f" % float(
                        ((total * float(settings.tax)) / 100)),
                    status="Creando",
                    payment_code=db.paymentcodes.insert(
                        code=external.generatecode()),
                    payment_method=None)
                for profileplan in profileplans:
                    if profileplan.active:
                        product = db(db.products.id ==
                                     profileplan.product).select().first()
                        if product.name.find("SSL") != -1 and cert == "false":
                            continue
                        orderlistid = db.orderlist.insert(
                            product=product.id,
                            g_order=orderid,
                            quantity=1,
                            price=product.price,
                            price_wdto=product.price,
                            tax=settings.tax)

                        #NO SE PUEDE HACER EL INSERT DIRECTAMENTE. HAY QUE VER SI EL SHOP YA TIENE CONTRATADO EL PRODUCTO. SI NO TIENE se hace un INSERT, si no, no hace nada.
                        #En realidad esta comprobación no hace falta porque no se va a dar este caso, pero sí en contracts.postcontracts por ser una generación de contratos manual .
                        #Sólo se va a poder contratar una unidad y la recursividad y duración de la periodicidad harán el resto.

                        contracted = db(
                            (db.contractedproducts.shop == shop.id)
                            & (db.contractedproducts.user == auth.user_id)
                            & (db.contractedproducts.product == product.id)
                        ).select().first()

                        if not contracted:
                            db.contractedproducts.insert(
                                user=auth.user_id,
                                product=product.id,
                                period=product.min_period,
                                autorenove=product.suscription,
                                start=None,
                                renove=None,  #fecha de la renovación.
                                expiration=None,
                                shop=shop.id,
                                orderlist=orderlistid,
                                paymentmethod=None)

                db.commit()
                return "OK"
        except Exception as ex:
            session.flash = "Ocurrió un error al crear el pedido %s" % ex
            redirect(request.env.http_referer)

    else:
        session.flash = "Disculpen la molestias. No podemos encontrar la información requerida"
        redirect(request.application, 'account', 'index')
Пример #8
0
def setdomain():
    from shops import Shop, DomainShop, PricePlan
    from auxiliartools import IS_NOT_IN_DB_OR_OWNERSHOP
    Shop(db), DomainShop(db), PricePlan(db)

    shophost = request.vars.shop
    shop = db((db.shop.host == request.vars.shop)
              & (db.shop.user == auth.user_id)).select(
                  db.shop.ALL,
                  db.priceplans.ALL,
                  join=[
                      db.priceplans.on(db.priceplans.id == db.shop.priceplan)
                  ]).first()

    redirection = False
    ip = shop.shop.ip
    if shop:
        domain = Field(
            'domain',
            'string',
            length=45,
            notnull=True,
            requires=[
                IS_NOT_EMPTY(error_message='¿olvidaste decirnos el dominio?'),
                IS_NOT_IN_DB_OR_OWNERSHOP(
                    db,
                    shop.shop.id,
                    error_message=
                    "Este dominio ya está siendo usado. Contacta con nosotros si crees que es un error por nuestra parte."
                ),
                IS_URL(error_message="ejemplo de formato: gextiendas.es")
            ])
        host = Field('host',
                     'string',
                     length=45,
                     notnull=False,
                     requires=[IS_MATCH('^\w+$', 'Sólo letras y números')])
        form = SQLFORM.factory(domain,
                               host,
                               submit_button='establecer dominio')
        if form.validate():
            try:
                if ((db((db.domainshops.host == form.vars.host)
                        & (db.domainshops.domain == form.vars.domain.replace(
                            "http://", ""))).select().first() == None)
                        and (form.vars.domain.replace("http://", "") not in [
                            "gextiendas.es", "gextiendas.com",
                            "gestionexperta.com", "gestionexperta.es"
                        ])):
                    if shop.priceplans.paymode == 'ifselling' or shop.priceplans.paymode == 'flatrate':
                        db.domainshops.insert(shop=shop.shop.id,
                                              host=form.vars.host,
                                              domain=form.vars.domain.replace(
                                                  "http://", ""),
                                              active="enabling")
                    elif shop.priceplans.paymode == 'free':
                        db.domainshops.insert(shop=shop.shop.id,
                                              host=form.vars.host,
                                              domain=form.vars.domain.replace(
                                                  "http://", ""),
                                              active="disabled")
                    db.commit()
                else:
                    session.flash = "%s.%s ya está siendo utilizado" % (
                        form.vars.host, form.vars.domain.replace(
                            "http://", ""))
                redirection = True
            except Exception as ex:
                logger.debug("Error en account/setdomain %s" % ex)
                db.rollback()
                response.flash = "Ocurrió un error al establecer el nombre de dominio."
        elif form.errors:
            response.flash = "Ocurrió algún error"
        if redirection:
            redirect(URL('index'))
        return dict(form=form, ip=ip)
    else:
        redirect(URL('index'))
Пример #9
0
def newshop():
    # if settings.prelaunch==True and not (auth.has_membership('administradores') or auth.has_membership('superadministradores')):
    # 	redirect(URL(request.application, 'communications','prelaunch'))

    from shops import Shop, DomainShop
    from gluon.contrib.pysimplesoap.client import SoapClient
    import time
    Shop(db), DomainShop(db)
    lenshops = db((db.shop.id > 0) & (db.shop.user == auth.user_id)).count()
    count = db.domainshops.id.count()
    countsdomainshops = int(
        db((db.shop.id > 0) & (db.shop.user == auth.user_id)
           & (db.domainshops.shop == db.shop.id)).select(
               count,
               left=[db.domainshops.on(db.domainshops.shop == db.shop.id)
                     ]).first()['COUNT(domainshops.id)'])
    shopid = None
    if lenshops <= 10 + countsdomainshops:
        form = None
        from queuemail import Queuemail
        Queuemail(db)
        firstname = Field(
            'first_name',
            'string',
            length=128,
            notnull=True,
            requires=IS_NOT_EMPTY(
                error_message=
                'Para dirigirnos a usted y para los clientes en su tienda'))
        lastname = Field(
            'last_name',
            'string',
            length=128,
            notnull=True,
            requires=IS_NOT_EMPTY(
                error_message=
                'Para dirigirnos a usted y para los clientes en su tienda'))
        shopname = Field(
            'name',
            'string',
            length=80,
            notnull=True,
            unique=True,
            requires=[
                IS_NOT_EMPTY(
                    error_message='No olvide decirnos el nombre de su tienda'),
                IS_NOT_IN_DB(db,
                             'shop.name',
                             error_message="Este nombre ya está siendo usado")
            ])
        hostname = Field(
            'host',
            'string',
            length=45,
            notnull=True,
            unique=True,
            requires=[
                IS_MATCH(
                    '^\w+$',
                    'Sólo letras y números, ni espacios ni caracteres especiales'
                ),
                IS_NOT_EMPTY(
                    error_message=
                    'Más adelante podrás poner tu propio dominio, pero ahora es importante este dato'
                ),
                IS_NOT_IN_DB(db,
                             'shop.host',
                             error_message="Este nombre ya está siendo usado")
            ])
        form = SQLFORM.factory(firstname,
                               lastname,
                               shopname,
                               hostname,
                               submit_button=T('Create new store'))
        if form.validate():
            try:
                #almacena los datos
                dbdata = "%s" % str(time.time()).replace('.', '')
                shopid = db.shop.insert(
                    user=auth.user_id,
                    host=form.vars.host,
                    db_name="gex%s" % dbdata,
                    db_user="******" % dbdata,
                    name=form.vars.name,
                    email=auth.user.email,
                    first_name=form.vars.first_name,
                    last_name=form.vars.last_name,
                    country='es',
                    language='es',
                    ip=__get_ip_address('wlan0'),
                )

                client = SoapClient(
                    wsdl=
                    "http://localhost:8000/internalgexcommerce/default/call/soap?WSDL=None"
                )
                if client.addShopSite(auth.user_id, shopid)['result'] == "0":
                    db(db.shop.id == shopid).update(status="enabled")
                    db.commit()
                else:
                    db.rollback()
                    response.flash = "Ocurrió un error al generar la tienda."

                session.shopname = form.vars.host
            except Exception as ex:
                logger.debug(ex)
                db.rollback()
                response.flash = "Ocurrió un error al generar la tienda."

            session.flash = "En unos minutos recibirá un correo con los datos de su nueva instancia de tienda"
            redirect(URL('account', 'index'))
            # if request.vars.priceplan:
            # 	plan=db.priceplans(request.vars.priceplan)
            # 	if plan.paymode=='free':
            # 		redirect(URL('index'))
            # 	else:
            # 		redirect(URL('setdomain', vars=dict(plan=request.vars.priceplan, shop=shopid)))
            # else:
            # 	redirect(URL('plans'))
        elif form.errors:
            response.flash = 'Revise los campos erróneos'
    else:
        session.flash = "Ńo puede crear más tiendas. Contrate alguno de los planes de pago"

    return dict(form=form, domainshops=countsdomainshops)
Пример #10
0
	def __init__(self, db, shopid, error_message="Este dominio ya está siendo usado en otra tienda"):
		self.error_message=error_message
		self.shopid=shopid
		self.db=db
		Shop(self.db), DomainShop(self.db)