Пример #1
0
def viewinvoice():

	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		from invoices import Invoice, Order, Orderlist, Budget, AccountingEntry, CreditAccount
		Invoice(db), Order(db), Orderlist(db), Budget(db), AccountingEntry(db), CreditAccount(db)
		invoice= db(db.invoices.id==request.args(0)).select(db.invoices.ALL, 
															db.auth_user.id,
															db.auth_user.first_name,
															db.auth_user.last_name,  
															db.fiscals.ALL,
															left=[	db.auth_user.on(db.auth_user.id==db.invoices.user),
																	db.fiscals.on(db.fiscals.user==db.auth_user.id)]).first()



		orderlist= db(db.orders.invoice==invoice.invoices.id).select(	db.orders.ALL, 
																		db.orderlist.ALL,
																		db.products.ALL,
																		left=[	db.orderlist.on(db.orderlist.g_order==db.orders.id),
																				db.products.on(db.products.id==db.orderlist.product)])

		order=db(db.orders.invoice==invoice.invoices.id).select(db.orders.ALL).first()

		return dict(invoice=invoice, orderlist=orderlist, order=order)
	else:
		redirect(URL(request.application,'default','user/login'))
Пример #2
0
def viewbudget():
    if auth.has_membership('administradores') or auth.has_membership(
            'superadministradores'):
        from invoices import Budget, Budgetlist
        from shops import Product
        Budget(db), Budgetlist(db), Product(db)
        budget = db(db.budgets.id == request.args(0)).select(
            db.budgets.ALL,
            db.auth_user.id,
            db.auth_user.first_name,
            db.auth_user.last_name,
            db.fiscals.ALL,
            left=[
                db.auth_user.on(db.auth_user.id == db.budgets.user),
                db.fiscals.on(db.fiscals.user == db.auth_user.id)
            ]).first()

        if budget:

            budgetlist = db(
                db.budgetlist.g_budget == budget.budgets.id).select(
                    db.budgetlist.ALL,
                    db.products.ALL,
                    left=[
                        db.products.on(db.products.id == db.budgetlist.product)
                    ])

            return dict(budget=budget, budgetlist=budgetlist)
        else:
            redirect(URL(request.application, 'administrator', 'users'))
    else:
        redirect(URL(request.application, 'default', 'user/login'))
Пример #3
0
def delitem():
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        from invoices import Invoice, Budget, Budgetlist
        from shops import Product
        from adminsettings import Adminsettings
        Adminsettings(db), Invoice(db), Budget(db), Budgetlist(db), Product(db)
        settings = db(db.adminsettings.id > 0).select(
            db.adminsettings.ALL).first()

        budget = db((db.budgets.user == request.vars.customer) &
                    (db.budgets.id == request.vars.budgetid)).select().first()
        try:
            db((db.budgetlist.id == request.vars.id)
               & (db.budgetlist.g_budget == budget.id)).delete()
            db.commit()
        except:
            db.rollback()

        return db((db.budgetlist.g_budget == budget.id)).select(
            db.budgetlist.ALL,
            db.products.name,
            db.products.id,
            join=[db.products.on(db.products.id == db.budgetlist.product)
                  ]).as_list()
    else:
        return dict()
Пример #4
0
def items():
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        from invoices import Invoice, Budget, Budgetlist
        from shops import Product
        from adminsettings import Adminsettings
        Adminsettings(db), Invoice(db), Budget(db), Budgetlist(db), Product(db)
        settings = db(db.adminsettings.id > 0).select(
            db.adminsettings.ALL).first()
        #entrada: data: { 'product': int, 'quantity': int, 'rate': int, 'operation': ['add','del','set'] }
        #salida: (json)sales
        #begin
        #comprobar si tiene un budget abierta y si no crearla
        budget = db((db.budgets.user == request.vars.customer) &
                    (db.budgets.id == request.vars.budgetid)).select().first()

        try:
            if not budget:
                budgetid = db.budgets.insert(status="Creando",
                                             user=request.vars.customer,
                                             tax=settings.tax)
                budget = db.budgets(budgetid)

            return db((db.budgetlist.g_budget == budget.id)).select(
                db.budgetlist.ALL,
                db.products.name,
                db.products.id,
                join=[db.products.on(db.products.id == db.budgetlist.product)
                      ]).as_list()

        except Exception as ex:
            logger.debug(ex)
            db.rollback()
    else:
        return dict()
Пример #5
0
def viewinvoice():
    from invoices import Invoice, Order, Orderlist, Budget, AccountingEntry, CreditAccount
    Invoice(db), Order(db), Orderlist(db), Budget(db), AccountingEntry(
        db), CreditAccount(db)
    invoice = db((db.invoices.invoice_number == request.args(0))
                 & (db.invoices.user == auth.user_id)).select(
                     db.invoices.ALL,
                     db.auth_user.id,
                     db.auth_user.first_name,
                     db.auth_user.last_name,
                     db.fiscals.ALL,
                     left=[
                         db.auth_user.on(db.auth_user.id == db.invoices.user),
                         db.fiscals.on(db.fiscals.user == db.auth_user.id)
                     ]).first()

    orderlist = db(db.orders.invoice == invoice.invoices.id).select(
        db.orders.ALL,
        db.orderlist.ALL,
        db.products.ALL,
        left=[
            db.orderlist.on(db.orderlist.g_order == db.orders.id),
            db.products.on(db.products.id == db.orderlist.product)
        ])

    order = db(db.orders.invoice == invoice.invoices.id).select(
        db.orders.ALL).first()

    return dict(invoice=invoice, orderlist=orderlist, order=order)
Пример #6
0
def newbudget():

    from shops import Product
    from invoices import Fiscal, Budget
    from adminsettings import Adminsettings
    Adminsettings(db), Product(db), Fiscal(db), Budget(db)
    settings = db(db.adminsettings.id > 0).select(db.adminsettings.ALL).first()

    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        if request.args(0):
            products = db(db.products.active == True).select()

            if request.args(1):
                budget = db((db.budgets.user == request.args(0)) & (
                    db.budgets.id == request.args(1))).select().first()
            else:
                budget = db((db.budgets.user == request.args(0)) &
                            (db.budgets.status == "Creando")).select().first()

            if not budget:
                budgetid = db.budgets.insert(status="Creando",
                                             tax=settings.tax,
                                             user=request.args(0))
                budget = db.budgets(budgetid)

            customer = db(db.auth_user.id == request.args(0)).select(
                db.auth_user.id,
                db.auth_user.first_name,
                db.auth_user.last_name,
                db.auth_user.email,
                db.fiscals.ALL,
                left=[db.fiscals.on(db.fiscals.user == db.auth_user.id)
                      ]).first()

            db.commit()

            return dict(products=products,
                        customer=customer,
                        tax=budget.tax,
                        budgetid=budget.id)
        else:
            redirect(URL(request.application, 'administrator', 'users'))
    else:
        redirect(URL(request.application, 'default', 'user/login'))
Пример #7
0
def cancelbudget():
    from invoices import Budget
    Budget(db)
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        try:
            db((db.budgets.user == request.vars.customer)
               & (db.budgets.id == request.vars.budgetid)).delete()

        except Exception as ex:
            logger.debug(
                "OCurrió un error al borrar una orden de pedido desde billing: %s"
                % ex)
            response.flash = "Ocurrió un error: %s" % ex

        redirect(
            URL(request.application,
                'administrator',
                'editcustomer',
                args=request.vars.customer))
        return dict()
Пример #8
0
def confirmbudget():
    from invoices import Budget, Budgetlist
    from adminsettings import Adminsettings
    Adminsettings(db), Budget(db), Budgetlist(db)
    settings = db(db.adminsettings.id > 0).select(db.adminsettings.ALL).first()
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        try:
            budget = db((db.budgets.user == request.vars.customer) & (
                db.budgets.id == request.vars.budgetid)).select().first()

            total = float(0)
            totaltax = float(0)
            budgetlist = db(db.budgetlist.g_budget == budget.id).select()

            if budgetlist:
                for row in budgetlist:
                    total = total + (float(row.quantity) * float(row.price))

                totaltax = (total * float(settings.tax)) / 100

                db(db.budgets.id == budget.id).update(
                    total="%.2f" % total,
                    totaltax="%.2f" % totaltax,
                    status="Creado",
                    confirmed_at=datetime.datetime.now())

                db.commit()
        except Exception as ex:
            db.rollback()
            logger.debug("Ocurrió un error al generar la factura %s" % ex)
            session.flash = "Se produjo un error al generar la factura: %s" % ex
            redirect(URL('budget', 'newbudget', args=budget.id))

        redirect(
            URL(request.application,
                'administrator',
                'editcustomer',
                args=request.vars.customer))
        return dict()
Пример #9
0
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]
remote_addr = request.env.remote_addr
try:
Пример #10
0
def editcustomer():
	if auth.has_membership('administradores') or auth.has_membership('superadministradores'):
		if request.args(0):
			from invoices import Fiscal, Order, Orderlist, Invoice, Budget, AccountingEntry, CreditAccount
			from shops import ContractedProduct, Product, Shop
			from cities import Cities
			from province import Province
			Fiscal(db),	Province(db), Cities(db), ContractedProduct(db), Product(db), Shop(db), Order(db), Orderlist(db), AccountingEntry(db), CreditAccount(db),  Invoice(db), Budget(db)
			
			customer=db(db.auth_user.id==request.args(0)).select(	db.auth_user.id,
																	db.auth_user.first_name,
																	db.auth_user.last_name,
																	db.auth_user.email,
																	db.fiscals.ALL,
																	left=[db.fiscals.on(db.fiscals.user==db.auth_user.id)]).first()
			
			wpoblacion = SQLFORM.widgets.autocomplete(request, db.cities.poblacion, limitby=(0,10), min_length=2)
			wprovincia = SQLFORM.widgets.autocomplete(request, db.province.provincia, limitby=(0,10), min_length=2)


			inc=datetime.timedelta(days=30)
			
			contractedproducts = db((db.contractedproducts.user==request.args(0)) & 
									(	(db.contractedproducts.expiration+inc>=datetime.datetime.now()) | 
										(db.contractedproducts.expiration==None)	)).select(	db.contractedproducts.ALL,
																							db.products.ALL,
																							db.shop.ALL,
																							db.auth_user.ALL,
																							db.fiscals.ALL,
																							left=[	db.products.on(db.products.id==db.contractedproducts.product),
																									db.shop.on(db.shop.id==db.contractedproducts.shop),
																									db.auth_user.on(db.auth_user.id==db.contractedproducts.user),
																									db.fiscals.on(db.fiscals.user==db.auth_user.id)],
																							orderby=~db.contractedproducts.expiration)

			invoices = db( db.invoices.user==request.args(0)).select(db.invoices.ALL,
																	db.orders.id,
																	db.orders.status,
																	left=[  db.orders.on(db.orders.invoice==db.invoices.id)],
																	orderby=~db.invoices.id,
																	groupby=db.orders.id
																	)
			

			budgets = db((db.budgets.user==request.args(0)) & (db.budgets.status!="Creando")).select(db.budgets.ALL, orderby=~db.budgets.id)

			orders= db((db.orders.invoice==None) & (db.orders.user==request.args(0))).select(orderby=~db.orders.id)

			if customer!=None:

				first_name= Field('first_name', 'string', label=XML("<strong>Nombre</strong>"), length=128, notnull=True, default=customer.auth_user.first_name, requires=IS_NOT_EMPTY(error_message="No olvide esta dato"))
				last_name= Field('last_name', 'string', label=XML("<strong>Apellidos</strong>"), length=128, notnull=True, default=customer.auth_user.last_name, requires=IS_NOT_EMPTY(error_message="No olvide esta dato"))
				email=Field('email',  label=XML('<strong>Email</strong>'), length=128,  writable=False, notnull=True, default=customer.auth_user.email, requires=[IS_NOT_EMPTY(), IS_EMAIL(error_message='No puede estar vacío.')])
				tax_identification = Field('tax_identification', 'string', label=XML("<strong>NIF/CIF/NIE</strong> <span class='glyphicon glyphicon-question-sign'></span>"),length=45, notnull=True, default=customer.fiscals.tax_identification, requires=IS_NOT_EMPTY(error_message="No olvide esta dato"))
				fiscalname=Field('fiscalname', 'string', label=XML("<strong>Nombre empresa</strong>") ,length =128, notnull=False, default=customer.fiscals.fiscalname)
				address=Field('address', 'string', label=XML("<strong>Dirección</strong>"), length =196, notnull=True, default=customer.fiscals.address, requires=IS_NOT_EMPTY(error_message="no olvide este dato"))
				city= Field('city', 'string',   label=XML("<strong>Ciudad/Población</strong>"), length=45, notnull=True, default=customer.fiscals.city, requires=IS_NOT_EMPTY(error_message="no olvide este dato"), widget=wpoblacion)
				province = Field('province', 'string',   label=XML("<strong>Provincia</strong>"), length=45, notnull=True, default=customer.fiscals.province, requires=IS_NOT_EMPTY(error_message="no olvide este dato"), widget=wprovincia)
				country=Field('country', 'string', label=XML("<strong>Pais</strong>"), length =45, notnull=True, default=customer.fiscals.country, requires=IS_NOT_EMPTY(error_message="no olvide este dato"))
				postalcode=Field('postal_code', 'string', label=XML("<strong>Código postal</strong>"), length=10, notnull=False, default=customer.fiscals.postal_code)
				phone=Field('phone', 'string', label=XML("<strong>Teléfono</strong>"), length=20, notnull=False, default=customer.fiscals.phone)

				form = SQLFORM.factory(first_name, last_name, email, tax_identification, fiscalname, address, city, province, country, postalcode, phone, submit_button = 'enviar datos', formstyle='bootstrap3_inline')



				if form.validate(keepvalues=True):

					try:
						db(db.auth_user.id==customer.auth_user.id).update(first_name=form.vars.first_name,
																		  last_name=form.vars.last_name)
						db(db.fiscals.id==customer.fiscals.id).update(tax_identification=form.vars.tax_identification, 
															fiscalname=form.vars.fiscalname,
															address=form.vars.address, 
															city=form.vars.city,
															province=form.vars.province,
															country=form.vars.country, 
															postal_code=form.vars.postal_code,
															phone=form.vars.phone)
						db.commit()
					except Exception, ex:
						logger.debug("No se pudo modificar los datos del usuario/fiscal: %s" % ex)
						db.rollback()
						response.flash = 'Hubo un error: %s' % ex				
					response.flash="Datos enviados correctamente"
				elif form.errors:
					response.flash = 'Hay errores'

				
				form.element('input[name=city]')['_class']='form-control'
				form.element('input[name=province]')['_class']='form-control'


				creditaccount=db(db.creditaccounts.user==customer.auth_user.id).select().first()
				accountingentries=None

				if creditaccount:
					accountingentries = db(	(db.accountingentries.creditaccount==creditaccount.id) &
											(db.accountingentries.active==True) ).select(	db.accountingentries.ALL, 
																							db.orders.ALL,
																							db.invoices.ALL,
																							db.products.name,
																							join=[	db.orderlist.on(db.accountingentries.orderlist==db.orderlist.id),
																									db.products.on(db.products.id==db.orderlist.product),
																									db.orders.on(db.orders.id==db.orderlist.g_order),
																									db.invoices.on(db.invoices.id==db.orders.invoice)],
																							orderby=~db.accountingentries.id)




				return dict(form=form, contractedproducts=contractedproducts, invoices=invoices, budgets=budgets, orders=orders, userid=customer.auth_user.id, accountingentries=accountingentries, creditaccount=creditaccount)

			else:
				redirect(URL('administrator','newcustomer'))
		else:
			redirect(URL('administrator','users'))
Пример #11
0
def printbudget():
    import os, uuid, subprocess
    import gluon.contenttype, gluon.globals
    from appy.pod.renderer import Renderer
    from invoices import Budget, Budgetlist
    from shops import Product
    from adminsettings import Adminsettings
    Adminsettings(db), Budget(db), Budgetlist(db), Product(db)
    settings = db(db.adminsettings.id > 0).select(db.adminsettings.ALL).first()
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):

        budget = db(db.budgets.id == request.args(0)).select(
            db.budgets.ALL,
            db.auth_user.id,
            db.auth_user.first_name,
            db.auth_user.last_name,
            db.auth_user.email,
            db.fiscals.ALL,
            left=[
                db.auth_user.on(db.auth_user.id == db.budgets.user),
                db.fiscals.on(db.fiscals.user == db.auth_user.id)
            ]).first()
        if budget:
            budgetnumber = "%s" % budget.budgets.id
            budgetdate = "%s" % budget.budgets.created_at.strftime("%d-%m-%Y")
            customernumber = "%s" % budget.auth_user.email
            customernif = "%s" % ("", budget.fiscals.tax_identification
                                  )[budget.fiscals.tax_identification != None]
            nombre = "%s" % (
                "%s %s" %
                (budget.auth_user.first_name, budget.auth_user.last_name),
                budget.fiscals.fiscalname)[budget.fiscals.fiscalname != ""]
            domicilio = "%s" % (
                "", budget.fiscals.address)[budget.fiscals.address != None]
            domicilio2 = "%s %s %s" % (
                ("", budget.fiscals.postal_code
                 )[budget.fiscals.postal_code != None],
                ("", budget.fiscals.city)[budget.fiscals.city != None],
                ("", budget.fiscals.province)[budget.fiscals.province != None])
            telefono = "%s" % budget.fiscals.country
            fax = "%s" % budget.fiscals.phone

            iva = "%.2f" % budget.budgets.tax
            totaliva = "%.2f" % float(budget.budgets.totaltax)
            total = "%.2f" % float(budget.budgets.total)
            totalbudget = "%.2f" % float(
                float(budget.budgets.total) + float(budget.budgets.totaltax))

            items = []

            for item in db(db.budgetlist.g_budget == budget.budgets.id).select(
                    db.budgetlist.ALL,
                    db.products.ALL,
                    left=[
                        db.products.on(db.products.id == db.budgetlist.product)
                    ]):

                tax_result = "%.2f" % (
                    ((float(item.budgetlist.price) *
                      (float(item.budgetlist.quantity))) *
                     float(item.budgetlist.tax)) / float(100))

                items.append(
                    dict(
                        id="%s" % item.products.id,
                        name="%s" % item.products.name,
                        cant="%s" % item.budgetlist.quantity,
                        price="%.2f" % float(item.budgetlist.price),
                        percent="%.2f" % float(
                            item.budgetlist.tax
                        ),  #se refiere al iva, pero en el .odt puse este nombre de variable por una ida de olla.
                        total="%.2f" % (float(item.budgetlist.quantity) *
                                        float(item.budgetlist.price))))

            try:

                # Report creation
                template_file = os.path.join(request.folder, 'private',
                                             'budget.odt')
                # tmp_uuid = uuid.uuid4()
                output_file_odt = os.path.join(
                    request.folder, 'private', 'tmp',
                    '%s_%s.odt' % ("presupuesto", budget.budgets.id))
                output_file_pdf = os.path.join(
                    request.folder, 'private', 'tmp',
                    '%s_%s.pdf' % ("presupuesto", budget.budgets.id))

                #por si existiese de vez anterior
                for filepath in [output_file_odt, output_file_pdf]:
                    if os.path.exists(filepath):
                        os.remove(filepath)

                renderer = Renderer(template_file, locals(), output_file_odt)

                renderer.run()

                command = "unoconv --format pdf --output %s %s" % (
                    os.path.join(request.folder, 'private',
                                 'tmp'), output_file_odt)
                process = subprocess.Popen(command, shell=True)
                processcode = process.wait()

                response.headers['Content-Length'] = '%s' % os.path.getsize(
                    output_file_pdf)
                response.headers[
                    'Content-Type'] = '%s' % gluon.contenttype.contenttype(
                        '.pdf')
                response.headers[
                    'Content-Disposition'] = 'attachment; filename=%s_%s.pdf' % (
                        "presupuesto", budget.budgets.id)
                stream = open(output_file_pdf, 'rb')
                for filepath in [output_file_odt, output_file_pdf]:
                    if os.path.exists(filepath):
                        os.remove(filepath)
                return stream
                # response.stream(output_file_pdf, chunk_size=4096)

            except Exception as ex:

                for filepath in [output_file_odt, output_file_pdf]:
                    if os.path.exists(filepath):
                        os.remove(filepath)
                logger.debug("Error general al generar PDF: %s " % ex)
                pass
            except IOError, e:  # Explicitly ignore IOError if it occurs.

                for filepath in [output_file_odt, output_file_pdf]:
                    if os.path.exists(filepath):
                        os.remove(filepath)
                logger.debug("Error IOerror al generar PDF: %s" % e)
                pass
        session.flash = 'No se pudo encontrar el presupuesto, inténtelo de nuevo'
        if auth.has_membership('superadministradores') or auth.has_membership(
                'administradores'):
            redirect(
                URL(request.application,
                    'administrator',
                    'viewinvoice',
                    args=request.args(0)))
        else:
            redirect(
                URL(request.application,
                    'account',
                    'billing',
                    args=request.args(0)))
Пример #12
0
def item():
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):

        from shops import Product
        from invoices import Budget, Budgetlist
        from adminsettings import Adminsettings
        Adminsettings(db), Budget(db), Budgetlist(db), Product(db)
        settings = db(db.adminsettings.id > 0).select(
            db.adminsettings.ALL).first()
        #entrada: data: { 'product': int, 'quantity': int, 'rate': int, 'operation': ['add','del','set'] }
        #salida: (json)sales
        #begin
        #comprobar si tiene un budget abierta y si no crearla
        if request.vars.budgetid:
            budget = db((db.budgets.user == request.vars.customer) & (
                db.budgets.id == request.vars.budgetid)).select().first()
        else:
            budget = db((db.budgets.user == request.vars.customer)
                        & (db.budgets.status == "Creando")).select().first()
        if not budget and request.vars.operation == "add":
            budgetid = db.budgets.insert(status="Creando",
                                         user=request.vars.customer,
                                         tax=settings.tax)
            budget = db.budgets(budgetid)

        budgetlist_id = None
        try:
            #add/del product y quantity.
            row = db((db.budgetlist.product == request.vars.product)
                     & (db.budgetlist.g_budget == budget.id)).select().first()

            if row:
                budgetlist_id = row.id

                if request.vars.operation == "add":
                    db(db.budgetlist.id == budgetlist_id).update(
                        quantity=int(row.quantity) +
                        int(request.vars.quantity))

                elif request.vars.operation == "set":

                    db(db.budgetlist.id == budgetlist_id).update(
                        quantity=int(request.vars.quantity))
                db.commit()
            else:
                product = db(
                    db.products.id == request.vars.product).select().first()
                #valor iva, para conservar el valor en caso de variar en el futuro
                #el precio para conservar en caso de variar en el futuro.
                budgetlist_id = db.budgetlist.insert(
                    product=request.vars.product,
                    g_budget=budget.id,
                    quantity=request.vars.quantity,
                    price=product.price,
                    price_wdto=product.price,
                    tax="%.2f" % settings.tax)
                db.commit()

        except Exception as ex:
            logger.debug("ALGO SALIO MAL en item %s" % ex)
            db.rollback()
        #retorna json del pedido

        data = db((db.budgetlist.g_budget == budget.id)).select(
            db.budgetlist.ALL,
            db.products.name,
            join=[db.products.on(db.products.id == db.budgetlist.product)
                  ]).as_list()
        return data
    else:
        return dict()
Пример #13
0
def newinvoice():
    from invoices import Invoice, Order, Orderlist, Budget, Budgetlist
    from shops import Product
    from adminsettings import Adminsettings
    Adminsettings(db), Invoice(db), Order(db), Orderlist(db), Product(
        db), Budget(db), Budgetlist(db)
    settings = db(db.adminsettings.id > 0).select(db.adminsettings.ALL).first()
    if auth.has_membership('superadministradores') or auth.has_membership(
            'administradores'):
        if request.args(0):
            products = db(db.products.active == True).select()
            if request.vars.budget:
                order = db((db.orders.user == request.args(0))
                           & (db.orders.status == "CreandoAdmin")
                           & (db.orders.budget == request.vars.budget)).select(
                           ).first()
                if not order:
                    orderid = db.orders.insert(status="CreandoAdmin",
                                               user=request.args(0),
                                               budget=request.vars.budget,
                                               payment_method='Transferencia',
                                               tax=settings.tax,
                                               manual_operation=True)
                    for row in db(db.budgetlist.g_budget ==
                                  request.vars.budget).select():
                        db.orderlist.insert(product=row.product,
                                            g_order=orderid,
                                            quantity=row.quantity,
                                            price=row.price,
                                            price_wdto=row.price_wdto,
                                            tax=row.tax,
                                            dto=row.dto,
                                            dto_percentage=row.dto_percentage)
                    db.commit()
                else:
                    orderid = order.id
            elif request.vars.order:
                order = db((db.orders.user == request.args(0)) & (
                    db.orders.id == request.vars.order)).select().first()
                if order:
                    orderid = order.id
                else:
                    response.flash = "Error"

            else:
                order = db((db.orders.user == request.args(0))
                           & (db.orders.status == "CreandoAdmin")
                           & (db.orders.budget == None)).select().first()

                if not order:
                    orderid = db.orders.insert(status="CreandoAdmin",
                                               user=request.args(0),
                                               tax=settings.tax,
                                               payment_method='Transferencia',
                                               manual_operation=True)
                    db.commit()
                else:
                    orderid = order.id

            customer = db(db.auth_user.id == request.args(0)).select(
                db.auth_user.id,
                db.auth_user.first_name,
                db.auth_user.last_name,
                db.auth_user.email,
                db.fiscals.ALL,
                left=[db.fiscals.on(db.fiscals.user == db.auth_user.id)
                      ]).first()

            paymentmethod = db.orders(orderid).payment_method

            return dict(products=products,
                        customer=customer,
                        tax=settings.tax,
                        paymentmethod=paymentmethod)
        else:
            redirect(URL(request.application, 'administrator', 'users'))
    else:
        redirect(URL(request.application, 'default', 'user/login'))