コード例 #1
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def editproduct():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import Product, PricePlan
		from pagination import Pagination
		Product(db), PricePlan(db)

		if request.vars.productid:
			product=db(db.products.id==request.vars.productid).select(db.products.ALL, db.priceplans.planname, left=[db.priceplans.on(db.priceplans.id==db.products.plan)]).first()
			name= Field('name', 'string', length=128, default=product.products.name, notnull=True, unique=True, requires=IS_NOT_EMPTY())
			price=Field('price', 'decimal(10,2)', default=product.products.price, notnull=True, requires=[IS_NOT_EMPTY(error_message='el precio es obligatorio'),IS_DECIMAL_IN_RANGE(minimum=0, maximum=10000, error_message='el precio debe ser entre 0.00 y 10000.00')])
			description=Field('description', 'text', default=product.products.description, notnull=False)
			active=Field('active', 'boolean', default=product.products.active)
			subscription=Field('suscription', 'boolean', default=product.products.suscription)
			min_period=Field('min_period', 'string', length='16', notnull=False, default=product.products.min_period, requires=IS_EMPTY_OR(IS_IN_SET(['hours','days','week','month','year'], error_message="Elija un estado")))
			plan=Field('plan', 'reference priceplans', default=product.products.plan, notnull=False, requires=IS_EMPTY_OR(IS_IN_DB(db, db.priceplans.id,'%(planname)s', error_message="Debe escoger un plan")))
			builtin=Field('builtin', 'boolean', default=product.products.builtin)
			form = SQLFORM.factory(name, price, description, active, subscription, min_period,  plan, builtin, submit_button = 'Guardar', formstyle='bootstrap3_inline')
			if form.validate():
				db(db.products.id==product.products.id).update(**dict(form.vars))
				session.flash = 'Producto editado'
				redirect(URL('administrator','products'))
			elif form.errors:
				response.flash = 'Hay errores'
			else:
				response.flash = 'Por favor completa los campos'

			return dict(form=form)
		else:
			redirect(URL(request.application,'administrator','newproduct'))

	else:
		redirect(URL(request.application,'default','user/login'))
コード例 #2
0
def index():
	from invoices import Fiscal, Order, Orderlist
	from shops import Product, PricePlan
	Fiscal(db), Product(db), PricePlan(db), Order(db), Orderlist(db)
	fiscal=db(db.fiscals.user==auth.user_id).select().first()
	order=None
	orderlist=None
	if fiscal:
		order=db((db.orders.user==auth.user_id) & (db.orders.status=="Creando")).select().first()
		if order:
			orderlist=db(db.orderlist.g_order==order.id).select()
			flatrate=False
			for item in orderlist:
				if item.product.plan:
					if item.product.plan.paymode=="flatrate":
						flatrate=True
		else:
			redirect(URL(c='account',f='index'))

	else:
		redirect(URL('myaccount', 'fiscal', vars=dict(wizard=True)))

	form=FORM(	INPUT(_type='radio', _name='paypal', _id='paypal', _value='paypal', value='yes').xml(),
				INPUT(_type='radio', _name='bank', _id='bank', _value='bank', value='no').xml(),
				INPUT(_name="confirm", _type='submit', _class="btn btn-grove-two btn-xlg"), _action=URL('confirm_order') )

	return dict(form=form, fiscal=fiscal, orderlist=orderlist, order=order, flatrate=flatrate)
コード例 #3
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def editpriceplan():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import PricePlan
		from pagination import Pagination
		PricePlan(db)

		if request.vars.priceplanid:
			priceplan=db(db.priceplans.id==request.vars.priceplanid).select().first()
			name = Field('planname', 'string', label="Nombre del plan", length=128, default=priceplan.planname, notnull=True, unique=True, requires=IS_NOT_EMPTY())
			paymode = Field('paymode', 'string', default=priceplan.paymode, length=16, requires=IS_IN_SET(['free','ifselling','flatrate'], error_message="Elija opción", zero=None))
			explanation = Field('explanation', 'text', default=priceplan.explanation, notnull=False)
			
			form = SQLFORM.factory(name, paymode, explanation, submit_button = 'Guardar', formstyle='bootstrap3_inline')
			if form.validate():
				db(db.priceplans.id==priceplan.id).update(**dict(form.vars))
				session.flash = 'datos guardados'
				redirect(URL('administrator','priceplans'))
			elif form.errors:
				response.flash = 'Hay errores'
			else:
				response.flash = 'Por favor completa los campos'

			return dict(form=form)
		else:
			redirect(URL(request.application,'administrator','newpriceplan'))

	else:
		redirect(URL(request.application,'default','user/login'))
コード例 #4
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def profileplans():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import Product, PricePlan, ProfilePlan
		from pagination import Pagination
		Product(db), PricePlan(db), ProfilePlan(db)
		prod=request.vars.product
		pricep=request.vars.priceplan

		if (prod!=None) and (pricep!=None):
			try:
				db.profileplans.insert(priceplan=pricep, product=prod)
			except Exception as ex:
				db.rollback()
				logger.debug("ocurrió un error al crear un perfil de plan")
				response.flash="ocurrió un error al crear un perfil de plan"
				
		profileplans=db(db.profileplans.id>0).select(	db.profileplans.ALL,
														db.priceplans.planname,
														db.products.name,
														join=[	db.priceplans.on(db.priceplans.id==db.profileplans.priceplan),
																db.products.on(db.products.id==db.profileplans.product)],
														orderby=db.profileplans.priceplan)
		return dict(profileplans=profileplans, 
					records=db(db.profileplans.id>0).count(), 
					priceplans=db(db.priceplans.id>0).select(), 
					products=db(db.products.id>0).select())
	else:
		redirect(URL(request.application,'default','user/login'))
コード例 #5
0
ファイル: shops.py プロジェクト: FreeMEM/gextiendas
	def __init__(self, db):
		self.db=db
		PricePlan(db)
		try:
			self.define_tables()
		except:
			pass
コード例 #6
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def newproduct():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import Product, PricePlan
		from pagination import Pagination
		Product(db), PricePlan(db)
		name= Field('name', 'string', label="Nombre", length=128, notnull=True, unique=True, requires=IS_NOT_EMPTY())
		price=Field('price', 'decimal(10,2)', label="Precio", notnull=True, requires=[IS_NOT_EMPTY(error_message='el precio es obligatorio'),IS_DECIMAL_IN_RANGE(minimum=0, maximum=10000, error_message='el precio debe ser entre 0.00 y 10000.00')])
		description=Field('description', 'text', label="Descripción",notnull=True, requires=IS_NOT_EMPTY(error_message='se necesita una descripción'))
		active=Field('active', 'boolean', default=True)
		subscription=Field('suscription', 'boolean', default=True)
		min_period=Field('min_period', 'string', length='16', notnull=False, default='month', requires=IS_EMPTY_OR(IS_IN_SET(['hours','days','week','month','year'], error_message="Elija un estado")))
		plan=Field('plan', 'reference priceplans', default=None, notnull=False, requires=IS_EMPTY_OR(IS_IN_DB(db, db.priceplans.id,'%(planname)s', error_message="Debe escoger un plan")))
		builtin=Field('builtin', 'boolean', default=False)
		form = SQLFORM.factory(name, price, description, active, subscription, min_period, plan, builtin, submit_button = 'Guardar', formstyle='bootstrap3_inline')

		if form.validate():
			db.products.insert(**dict(form.vars))
			session.flash = 'Producto creado'
			redirect(URL('administrator','products'))
		elif form.errors:
			response.flash = 'Hay errores'
		else:
			response.flash = 'Por favor completa los campos'

		return dict(form=form)
コード例 #7
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def priceplans():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import PricePlan
		from pagination import Pagination
		PricePlan(db)
		
		priceplans=db(db.priceplans.id>0).select()
		records=db(db.priceplans.id>0).count()
		return dict(priceplans=priceplans, records=records)
	else:
		redirect(URL(request.application,'default','user/login'))
コード例 #8
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'))
コード例 #9
0
ファイル: plans.py プロジェクト: FreeMEM/gextiendas
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'))
コード例 #10
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def del_profileplans():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import Product, PricePlan, ProfilePlan
		from pagination import Pagination
		Product(db), PricePlan(db), ProfilePlan(db)
		try:
			if db(db.profileplans.id==request.vars.deleteid).delete():
				return "OK"
			else:
				return "Fail"
		except Exception, ex:
			logger.debug('hubo un error al borrar el profileplans id: %    error: %' % (request.vars.deleteid, ex))
			return "Fail"
コード例 #11
0
ファイル: administrator.py プロジェクト: FreeMEM/gextiendas
def products():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from shops import Product, PricePlan
		from pagination import Pagination
		Product(db), PricePlan(db)

		settings = db(db.adminsettings.id>0).select(db.adminsettings.ALL).first()
		records=db(db.products.id>0).count()
		items_per_page=settings.productitems
		pag=Pagination(records, items_per_page)
		products=db(db.products.id>0).select(db.products.ALL, db.priceplans.planname, left=[db.priceplans.on(db.priceplans.id==db.products.plan)], orderby=db.products.id, limitby=pag.limitby())
		return dict(products=products, pagination=pag, records=records, items_per_page=items_per_page)
	else:
		redirect(URL(request.application,'default','user/login'))
コード例 #12
0
	def basicPricePlans(self):
		from shops import PricePlan
		db=self.db
		PricePlan(db)
		if db(db.priceplans).isempty():
			db.priceplans.insert(planname='Gratuito', paymode='free')
			db.priceplans.insert(planname='Paga si vendes', 
								paymode='ifselling', 
								explanation=XML('<p>El plan <strong> "Paga si vendes" </strong> te permite usar el servicio de tienda con <strong>tus propios dominios habilitados para disfrutar de la multitienda, sin pagar ninguna cuota de suscripción mensual</strong>. Sólo te cobraremos si vendes, a razón de 2€ por venta y un límite de gasto mensual de 40€. Estas cantidades las iremos descontando de tu cuenta de crédito, que a continuación deberás cargar mediante tarjeta, transferencia bancaria o domiciliación bancaria (estos últimos dos métodos sólo para Europa). Si en algún momento deseas cambiar de plan podrás utilizar tu crédito restante.</p><p>Si tu cuenta se queda a cero, podrás seguir usando el servicio hasta el fin de los 30 días del periodo correspondiente. A partir de ese momento, si no dispones de crédito, el servicio volverá al plan "gratuíto" sin perder ningún dato de tu tienda, ni productos, ventas, clientes, ni aspecto, todo seguirá igual, salvo que tendrás que volver a habilitar tu dominio recargando crédito o contratando cualquier plan de tarifa plana.</p><p>De forma opcional, aunque altamente recomendable, deberías tener un certificado digital SSL para asegurar las comunicaciones, las transacciones y dar confianza a tus clientes. Nosotros te lo podemos gestionar y mantener anualmente por 10€, para que no tengas que preocuparte. Si te pasas a algún plan de tarifa plana, te lo reembolsaremos. Si quieres instalarte y gestionar por tu cuenta el certificado, también podrás hacerlo, te daremos las herramientas y la interfaz para hacerlo.</p><p>Los precios aquí detallados <strong>no incluyen IVA</strong></p>')
								)
			db.priceplans.insert(planname='Tarifa plana',
								explanation=XML('<p>El plan <strong> "Tarifa plana" </strong> te permite usar el servicio de tienda online<strong> sin ningún tipo de comisiones de venta.</strong> Sólo te cobraremos una suscripción mensual de 28,90€. Este servicio te permite habilitar tus propios dominios para disfrutar del sistema multitienda. Si en algún momento deseas cambiarte a un plan superior, te descontaremos del nuevo precio el mes que ya estás disfrutando. Podrás deshabilitar el dominio o darte de baja definitivamente del servicio en cuyo caso se borrarán los contenidos y bases de datos de tu tienda, cuando termines de disfrutar el tiempo contratado.</p><p>Si decides cambiar a un plan inferior, como "Paga si vendes", se descontará la parte proporcional de lo disfrutado y se te abonará al precio del nuevo plan. Si decides cambiarte al plan "Gratuíto", podrás disfrutar del antiguo plan hasta que terminen los días contratados. Te cambies al plan que te cambies no perderás datos de tu tienda, ni productos, ventas, clientes, ni aspecto, todo seguirá igual, salvo la posibilidad o no de usar el dominio.</p><p>De forma opcional, vamos a regalarte un certificado digital SSL y su gestión mientras mantengas la suscripción. Es opcional, porque quizá quieras gestionarlo tú mismo y contratar la firma de una Autoridad Certificadora de tu confianza; a tu elección. En cualquier caso te daremos las herramientas y la interfaz para gestionar e instalar los certificados por tí mismo.</p><p>Los precios aquí detallados <strong>no incluyen IVA</strong></p>'))
			db.priceplans.insert(planname='Seguro')
			db.priceplans.insert(planname='Asistido')
			db.priceplans.insert(planname='Posicionado')
			db.priceplans.insert(planname='Difusión')
コード例 #13
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'))
コード例 #14
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'))
コード例 #15
0
def paypalcheckout():
	from paypalcrypto import PaypalCrypto
	import time
	from queuemail import Queuemail
	from invoices import Order, Orderlist
	from shops import ContractedProduct, PricePlan
	from adminsettings import Adminsettings
	from auxiliartools import AuxiliarTools	
	
	Order(db), Orderlist(db), Adminsettings(db), ContractedProduct(db), PricePlan(db)
	settings = db(db.adminsettings.id>0).select(db.adminsettings.ALL).first()
	external=AuxiliarTools(db)

	order=db((db.orders.user==auth.user_id) & (db.orders.status=="Creando")).select().first()
	
	
	try:
		if order!=None:
			
			code=external.generatecode()
			if not order.payment_code:
				order.update_record(payment_code=db.paymentcodes.insert(code=code))
				db.commit()
			order.update_record(payment_method="Paypal")
			#custom="código pedido %s %s %s"%(order.user*100, order.id*100, str(long(time.mktime(order.ordered_at.timetuple())*1e3)))
			
			logger.debug("FLATRATE: %s %s %s" % (request.vars.flatrate, request.vars.flatrate==True, type(request.vars.flatrate)))
			attributes=None
			if request.vars.flatrate=='False':

				attributes= {
					"cert_id":"UPWJKQGJHDE4S",
					"cmd":"_xclick",
					#"cmd":"_cart",
					"amount":"%.2f" % (float(order.total) + float(order.totaltax)),
					"currency_code":"EUR",
					"custom":order.payment_code.code,
					"item_name":"[Gextiendas] Servicios de ecommerce",
					#"business":"K6VY4N9UQQLNQ", #[email protected]
					"business":"*****@*****.**",
					#"business":"*****@*****.**",
					"paymentaction":"sale",
					"notify_url":"%(scheme)s://%(host)s%(urlrequest)s" % {'scheme':request.env.wsgi_url_scheme,'host':request.env.http_host,'urlrequest':URL(request.application,'payment','ipn_handler')},
					"return":"%(scheme)s://%(host)s%(urlrequest)s" % {'scheme':request.env.wsgi_url_scheme,'host':request.env.http_host,'urlrequest':URL(request.application, 'payment','receipt_page')}
				}
			else:
				attributes= {
					"cert_id":"UPWJKQGJHDE4S",
					"cmd":"_xclick-subscriptions",
					#"amount":"%.2f" % (float(order.total) + float(order.totaltax)),
					"a3":"%.2f" % (float(order.total) + float(order.totaltax)),
					"p3":"1",
					"t3":"M",
					"src":"1",
					"sra":"1",
					"1c":"ES",
					"no_shipping":"1",
					"currency_code":"EUR",
					"custom":order.payment_code.code,
					"item_name":"Servicios Gextiendas",
					#"business":"K6VY4N9UQQLNQ", #[email protected]
					"business": business,
					#"business":"*****@*****.**",
					"paymentaction":"sale",
					"notify_url":"%(scheme)s://%(host)s%(urlrequest)s" % {'scheme':request.env.wsgi_url_scheme,'host':request.env.http_host,'urlrequest':URL(request.application,'payment','ipn_handler')},
					"return":"%(scheme)s://%(host)s%(urlrequest)s" % {'scheme':request.env.wsgi_url_scheme,'host':request.env.http_host,'urlrequest':URL(request.application, 'account','index')}
				}

			logger.debug("ATTRIBUTESSS %s" % attributes)
	except Exception as ex:
		db.rollback()
		logger.debug("Paypalcheck error: %s" % ex)
		session.flash="Ocurrió un error, inténtelo de nuevo"
		redirect('payment','index')

	pc=PaypalCrypto(attributes)
	encattrs=pc.paypalencrypt()
	logger.debug("encattrs: %s" % encattrs)

	

	return dict(encattrs=encattrs, order=db(db.orders.id==order.id).select(	db.orders.ALL,
												db.contractedproducts.ALL,
												left=[	db.orderlist.on(db.orderlist.g_order==db.orders.id),
														db.contractedproducts.on(db.contractedproducts.orderlist==db.orderlist.id)]
												).first())
コード例 #16
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]
コード例 #17
0
	def basicProducts(self):
		from shops import Product, PricePlan, ProfilePlan
		db=self.db
		Product(db), PricePlan(db), ProfilePlan(db)
		if db(db.products).isempty():
			db.products.insert(	name="Tarifa plana", 
								price="18.00", 
								plan=3,
								min_period="month",
								description="Vende lo que quieras y paga siempre lo mismo. Con certificado SSL incluído.")
			db.products.insert(	name="Carga crédito mínimo 'Paga si vendes'",
								price="40.00",
								plan=2,
								suscription=False,
								description="Para que si se disparan tus ventas, controles tu gasto con un límite de 40€")									
			db.products.insert(	name="Plan Asistido", 
								price="199.00", 
								plan=4,
								min_period="month",
								description="Con asistencia telefónica y Comunity Management Básico incluído todos los meses")
			db.products.insert(	name="Plan Difusión", 
								price="399.00", 
								plan=6,
								min_period="month",
								description="Community Management Avanzado mes a mes")
			db.products.insert(	name="Certificado SSL",
								min_period="year",
								price="15.00")
			db.products.insert( name="Certificado SSL (Planes por Suscripción)",
								min_period="year",
								price="0.00")
			db.products.insert(	name="Pack iniciación", 
								price="450.00",
								suscription=False,
								description="incluye la modificación de la plantilla para la inserción de logotipos y de imágenes de productos en Slider de presentación, compuesto por tres imágenes completamente montadas para promoción de tres artículos o servicios.")			
			db.products.insert(	name="Asistencia telefónica bono 5h", 
								price="210.00",
								suscription=False,
								description="Por si necesitas algo más, que la asistencia incluída en tu plan")
			db.products.insert(	name="Asistencia telefónica bono 10h", 
								price="380.00",
								suscription=False,
								description="Por si necesitas algo más, que la asistencia incluída en tu plan")
			db.products.insert(	name="Asistencia telefónica bono 15h", 
								price="480.00",
								suscription=False,
								description="Por si necesitas algo más, que la asistencia incluída en tu plan")
			db.products.insert(	name="Pack video corporativo",
								suscription=False,
								price="150.00",
								description="Filmación profesional en vídeo del negocio físico o productos para la creación de un video corporativo de aproximadamente 50 segundos una vez editado, asi como sesión de fotos profesional de artículos (de 10 a 15 tomas)")
			db.products.insert(	name="Community Management Básico", 
								price="200.00",
								description="Creación de identidad digital y un mes de difusión/discusión semanal en Facebook y twitter sobre productos y servicios.")
			db.products.insert(	name="Community Management Avanzado",
								price="300.00",
								description="Creación de identidad digital  y un mes de difusión/discusión semanal en Facebook, Twitter, Google+ y blog de empresa, sobre productos y servicios.")
			db.products.insert(	name="Facebook Social Management",
								price="60.00",
								description="Dos entradas semanales en Facebook")
			db.products.insert(	name="Twitter Social Management",
								price="60.00",
								description="Dos tweets semanales")
			db.products.insert(	name="Blog Social Management",
								price="80.00",
								description="Una entrada semanal en Blog")
			db.products.insert(	name="Google+ Social Management",
								price="60.00",
								description="Dos entradas semanales en tu comunidad Google+")
			db.products.insert(	name="Campaña SEO", 
								price="250.00",
								suscription=False,
								description="Análisis, adecuación de la tienda y puesta en marcha de estrategia.")
			db.products.insert(	name="SEM en Google adwords express", 
								price="130.00",
								active=False,
								suscription=False,
								description="Colocación y monitorización del anuncio y creación del Landing Page")
			db.products.insert(	name="SEM en Google adwords", 
								price="130.00",
								active=False,
								suscription=False,
								description="Colocación y monitorización del anuncio y creación del Landing Page")
			db.products.insert(	name="Ads en Facebook", 
								price="130.00",
								active=False,
								suscription=False,
								description="Colocación y monitorización del anuncio y creación del Landing Page")
			db.products.insert(	name="SEM en Bing", 
								price="130.00",
								active=False,
								suscription=False,
								description="Colocación y monitorización del anuncio y creación del Landing Page")
			db.products.insert(	name="Servicio de introducción de productos en tu catálogo", 
								price="28.00",
								suscription=False,
								description="Añadimos los productos que desees y su información relacionada: SEO, categoría, asociaciones, atributos y valores, marca del producto, ilustración del producto, marca de agua, 3 imágenes por artículo, existencias, administrar proveedor, tags.")

			db.products.insert(	name="Adecuación LOPD", 
								price="140.00",
								suscription=False,
								active=False,
								description="Para que cumplas con la Ley Orgánica de protección de datos, adecuamos tu tienda, desarrollamos el documento de seguridad, los contratos de acceso a datos por parte de terceros (asesorías, seguros, informáticos), te facilitamos toda la documentación relacionada y registramos los ficheros de datos personales en la Agencia de Protección de Datos. Además te damos un año de consultoría legal sobre LOPD totalmente gratis")
			
			db.products.insert(	name="Adecuación LSSICE", 
								price="60.00",
								suscription=False,
								active=False,
								description="Adaptamos su tienda para que cumpla la Ley de Servicios de la Sociedad de la Información y Comercio Electrónico, de obligado cumplimiento.")

			db.profileplans.insert(	product=db(db.products.name=="Carga crédito mínimo 'Paga si vendes'").select().first()['id'],
									priceplan=db(db.priceplans.planname=="Paga si vendes").select().first()['id'])

			db.profileplans.insert(	product=db(db.products.name=="Certificado SSL").select().first()['id'],
									priceplan=db(db.priceplans.planname=="Paga si vendes").select().first()['id'])

			db.profileplans.insert(	product=db(db.products.name=="Tarifa Plana").select().first()['id'],
									priceplan=db(db.priceplans.planname=="Tarifa plana").select().first()['id'])

			db.profileplans.insert(	product=db(db.products.name=="Certificado SSL (Planes por Suscripción)").select().first()['id'],
									priceplan=db(db.priceplans.planname=="Tarifa plana").select().first()['id'])
コード例 #18
0
#*/1 * * * * cd /home/gextiendas/web2py && /usr/bin/python web2py.py -S gextiendas -M -R applications/gextiendas/private/managetools/managedomains_contracts.py >> /tmp/manage_domains_contracts.out 2>&1

#este cron busca dominios para activar/desactivar en tiendas

# client = SoapClient(wsdl="http://localhost:8000/internalgexcommerce/default/call/soap?WSDL=None")

# client = SoapClient(wsdl="http://localhost:8000/internalgexcommerce/default/call/soap?WSDL=None")
# logger.debug(client.addShopSite(auth.user_id))

#buscar contratos cuya fecha de expiración sea NULL o >= CURRENT_DATE() y plan distinto de NULL o free

from gluon import *
from shops import ContractedProduct, Product, PricePlan, Shop
from invoices import Order, Orderlist
contract = ContractedProduct(db)
Product(db), PricePlan(db), Shop(db), Orderlist(db), Order(db)

mcontracts = db(
    ((db.contractedproducts.expiration == None)
     | (db.contractedproducts.expiration >= datetime.datetime.now()))
    & ((db.profileplans.active == True) & (db.priceplans.planname != "free")
       & (db.contractedproducts.active == True))).select(
           db.contractedproducts.ALL,
           db.products.plan,
           db.products.price,
           db.products.suscription,
           db.products.name,
           db.priceplans.planname,
           db.priceplans.id,
           db.profileplans.ALL,
           db.orders.ALL,
コード例 #19
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'))