db.category.bulk_insert([{'name': 'A'}, {'name': 'B'}]) for category in db(db.category.id > 0).select(): _id = category.id if category.name == 'A': db.color.bulk_insert([{ 'category': _id, 'name': 'red' }, { 'category': _id, 'name': 'blue' }]) elif category.name == 'B': db.color.bulk_insert([{'category': _id, 'name': 'green'}]) db.product.category.widget = suggest_widget(db.category.name, id_field=db.category.id, limitby=(0, 10), min_length=1) from gluon.storage import Storage session.auth = Storage(hmac_key='test') ################################ The core ###################################### # The lazy_options_widget receives js events # called "product_category__selected" and "product_category__unselected" # which will be triggered by the above suggest_widget.] # You can also pass user_signature and hmac_key arguments for authorization in ajax db.product.color.widget = lazy_options_widget( 'product_category__selected', 'product_category__unselected', lambda category_id: (db.color.category == category_id), request.vars.category,
def nueva_entrada(): session.Entradas = True frmlineas = None codigo_alimento = None if len(request.args) > 0: session.current_entrada = request.args[0] else: session.current_entrada = None db.CabeceraEntrada.almacen.writable = False db.CabeceraEntrada.almacen.readable = False db.CabeceraEntrada.Donante.widget = suggest_widget( db.Colaborador.name, id_field=db.Colaborador.id, min_length=1, limitby=(0, 50), keyword='_autocomplete_category_2_%(fieldname)s', user_signature=True, ) registro = None if session.current_entrada: registro = db.CabeceraEntrada(session.current_entrada) form = SQLFORM(db.CabeceraEntrada, record=registro, submit_button='Grabar estos datos', keepvalues=True) if request.vars._autocomplete_Colaborador_name_aux: request.vars.pop('_autocomplete_Colaborador_name_aux') if form.accepts(request.vars, session, onvalidation=ver_cierre): response.flash = 'Nueva entrada grabada' session.current_entrada = form.vars.id redirect(URL('nueva_entrada', args=[form.vars.id])) elif form.errors: response.flash = 'Error en los datos' if session.current_entrada: valor_antiguo_uds = None if 'lid' in request.vars: registro_linea = db.LineaEntrada(request.vars.lid) registro_alimento = db.Alimento(registro_linea.alimento) codigo_alimento = registro_alimento.Codigo session.AlmacenAlimento = registro_alimento.id if request.vars.Unidades: if float(request.vars.Unidades) \ != registro_linea.Unidades: valor_antiguo_uds = registro_linea.Unidades else: registro_linea = None codigo_alimento = XML('""') db.LineaEntrada.cabecera.default = session.current_entrada frmlineas = SQLFORM(db.LineaEntrada, registro_linea, _id='frmlineas', submit_button='Guardar esta línea', keepvalues=False) if 'lid' in request.vars: frmlineas.vars.alimento = registro_alimento.Descripcion if 'alimento' in request.vars: if session.AlmacenAlimento: request.vars.alimento = session.AlmacenAlimento # session.AlmacenAlimento if frmlineas.accepts(request.vars, session): if valor_antiguo_uds and registro_linea.LineaAlmacen: actualiza_lineaalmacen(registro_linea.LineaAlmacen, float(request.vars.Unidades), valor_antiguo_uds) else: cid = nueva_lineaalmacen(request.vars, session.Entradas) registro_linea = db.LineaEntrada(frmlineas.vars.id) registro_linea.LineaAlmacen = cid registro_linea.update_record() redirect(URL(f='nueva_entrada', args=session.current_entrada)) elif frmlineas.errors: response.flash = 'Error en los datos' response.files.append( URL(r=request, c='static/jqGrid/js/i18n', f='grid.locale-es.js')) response.files.append( URL(r=request, c='static/jqGrid/js', f='jquery.jqGrid.min.js')) response.files.append( URL(r=request, c='static/jqGrid/css', f='ui.jqgrid.css')) return dict(form=form, frmlineas=frmlineas, codigo_alimento=codigo_alimento)
def nueva_salida(): session.Entradas = False session.AlmacenStock = None frmlineas = None codigo_alimento = None if len(request.args) > 0: # uso session.current_entrada en lugar de session.current_salida para. # que valga la misma función de get_lineas_entradas en entradas y # salidas session.current_entrada = request.args[0] else: session.current_entrada = None db.CabeceraSalida.almacen.writable = False db.CabeceraSalida.almacen.readable = False db.CabeceraSalida.Beneficiario.widget = suggest_widget( db.Beneficiario.name, id_field=db.Beneficiario.id, min_length=1, limitby=(0, 50), keyword='_autocomplete_category_2_%(fieldname)s', user_signature=True, ) registro = None if session.current_entrada: registro = db.CabeceraSalida(session.current_entrada) form = SQLFORM(db.CabeceraSalida, record=registro, submit_button='Grabar estos datos', keepvalues=True) if form.accepts(request.vars, session, onvalidation=ver_cierre): response.flash = 'Nueva salida grabada' session.current_entrada = form.vars.id redirect(URL('nueva_salida', args=[form.vars.id])) elif form.errors: response.flash = 'Error en los datos' if session.current_entrada: valor_antiguo_uds = 0 if 'lid' in request.vars: registro_linea = db.LineaSalida(request.vars.lid) registro_alimento = db.Alimento(registro_linea.alimento) codigo_alimento = registro_alimento.Codigo session.AlmacenAlimento = registro_alimento.id if request.vars.Unidades: if float(request.vars.Unidades) \ != registro_linea.Unidades: valor_antiguo_uds = registro_linea.Unidades else: registro_linea = None codigo_alimento = XML('""') db.LineaSalida.cabecera.default = session.current_entrada db.LineaSalida.LineaAlmacen.writable = True frmlineas = SQLFORM(db.LineaSalida, registro_linea, submit_button='Guardar esta línea', _id='frmlineas') if 'lid' in request.vars: frmlineas.vars.alimento = registro_alimento.Descripcion if 'alimento' in request.vars: if session.AlmacenAlimento: request.vars.alimento = session.AlmacenAlimento # session.AlmacenAlimento session.valor_antiguo = valor_antiguo_uds if frmlineas.accepts(request.vars, session, onvalidation=check_stock): actualizar_almacen_linea_salida(frmlineas.vars.alimento, float(frmlineas.vars.Unidades), valor_antiguo_uds) redirect(URL(f='nueva_salida', args=session.current_entrada)) elif frmlineas.errors: response.flash = 'Error en los datos' response.files.append( URL(r=request, c='static/jqGrid/js/i18n', f='grid.locale-es.js')) response.files.append( URL(r=request, c='static/jqGrid/js', f='jquery.jqGrid.min.js')) response.files.append( URL(r=request, c='static/jqGrid/css', f='ui.jqgrid.css')) return dict(form=form, frmlineas=frmlineas, codigo_alimento=codigo_alimento)
'name': 'AAC' }, { 'name': 'ABC' }, { 'name': 'BBB' }, { 'name': 'CCC' }]) from gluon.storage import Storage session.auth = Storage(hmac_key='test') ################################ The core ###################################### # Inject the suggest widget db.product.category_1.widget = suggest_widget(db.category.name, limitby=(0, 10), min_length=1) # Inject the another suggest widget # In this case, you have to specify the keyword argument to avoid conflict. # You can also pass the id_field argument as in web2py's autocomplete widget. # You can also pass user_signature and hmac_key arguments for authorization in ajax db.product.category_2.widget = suggest_widget( db.category.name, id_field=db.category.id, limitby=(0, 10), min_length=1, user_signature=True, keyword='_autocomplete_category_2_%(fieldname)s') ################################################################################
db.define_table('product', Field('category', db.category, comment='<- type "A" or "B"'), Field('color', db.color, requires=IS_EMPTY_OR(IS_IN_DB(db(db.color.id>0), 'color.id', 'color.name', zero='---')), comment='<- select category first'), ) db.category.bulk_insert([{'name':'A'}, {'name':'B'}]) for category in db(db.category.id>0).select(): _id = category.id if category.name == 'A': db.color.bulk_insert([{'category': _id, 'name':'red'}, {'category': _id, 'name':'blue'}]) elif category.name == 'B': db.color.bulk_insert([{'category': _id, 'name':'green'}]) db.product.category.widget = suggest_widget(db.category.name, id_field=db.category.id, limitby=(0,10), min_length=1) from gluon.storage import Storage session.auth = Storage(hmac_key='test') ################################ The core ###################################### # The lazy_options_widget receives js events # called "product_category__selected" and "product_category__unselected" # which will be triggered by the above suggest_widget.] # You can also pass user_signature and hmac_key arguments for authorization in ajax db.product.color.widget = lazy_options_widget( 'product_category__selected', 'product_category__unselected', lambda category_id: (db.color.category==category_id), request.vars.category, orderby=db.color.id, user_signature=True,
db = DAL('sqlite:memory:') db.define_table('category', Field('name')) db.define_table('product', Field('category_1'), Field('category_2', db.category), ) db.category.bulk_insert([{'name':'AAA'}, {'name':'AAC'}, {'name':'ABC'}, {'name':'BBB'}, {'name':'CCC'}]) from gluon.storage import Storage session.auth = Storage(hmac_key='test') ################################ The core ###################################### # Inject the suggest widget db.product.category_1.widget = suggest_widget(db.category.name, limitby=(0, 10), min_length=1) # Inject the another suggest widget # In this case, you have to specify the keyword argument to avoid conflict. # You can also pass the id_field argument as in web2py's autocomplete widget. # You can also pass user_signature and hmac_key arguments for authorization in ajax db.product.category_2.widget = suggest_widget( db.category.name, id_field=db.category.id, limitby=(0, 10), min_length=1, user_signature=True, keyword='_autocomplete_category_2_%(fieldname)s', ) ################################################################################ def index(): form = SQLFORM(db.product)
def nueva_salida(): session.Entradas = False session.AlmacenStock = None frmlineas = None codigo_alimento = None if len(request.args) > 0: # uso session.current_entrada en lugar de session.current_salida para. # que valga la misma función de get_lineas_entradas en entradas y # salidas session.current_entrada = request.args[0] else: session.current_entrada = None db.CabeceraSalida.almacen.writable = False db.CabeceraSalida.almacen.readable = False db.CabeceraSalida.Beneficiario.widget = suggest_widget( db.Beneficiario.name, id_field=db.Beneficiario.id, min_length=1, limitby=(0, 50), keyword='_autocomplete_category_2_%(fieldname)s', user_signature=True, ) registro = None if session.current_entrada: registro = db.CabeceraSalida(session.current_entrada) form = SQLFORM(db.CabeceraSalida, record=registro, submit_button='Grabar estos datos', keepvalues=True) if form.accepts(request.vars, session, onvalidation=ver_cierre): response.flash = 'Nueva salida grabada' session.current_entrada = form.vars.id redirect(URL('nueva_salida', args=[form.vars.id])) elif form.errors: response.flash = 'Error en los datos' if session.current_entrada: valor_antiguo_uds = 0 if 'lid' in request.vars: registro_linea = db.LineaSalida(request.vars.lid) registro_alimento = db.Alimento(registro_linea.alimento) codigo_alimento = registro_alimento.Codigo session.AlmacenAlimento = registro_alimento.id if request.vars.Unidades: if float(request.vars.Unidades) \ != registro_linea.Unidades: valor_antiguo_uds = registro_linea.Unidades else: registro_linea = None codigo_alimento = XML('""') db.LineaSalida.cabecera.default = session.current_entrada db.LineaSalida.LineaAlmacen.writable = True frmlineas = SQLFORM(db.LineaSalida, registro_linea, submit_button='Guardar esta línea', _id='frmlineas') if 'lid' in request.vars: frmlineas.vars.alimento = registro_alimento.Descripcion if 'alimento' in request.vars: if session.AlmacenAlimento: request.vars.alimento = session.AlmacenAlimento # session.AlmacenAlimento session.valor_antiguo = valor_antiguo_uds if frmlineas.accepts(request.vars, session, onvalidation=check_stock): actualizar_almacen_linea_salida(frmlineas.vars.alimento, float(frmlineas.vars.Unidades), valor_antiguo_uds) redirect(URL(f='nueva_salida', args=session.current_entrada)) elif frmlineas.errors: response.flash = 'Error en los datos' response.files.append(URL(r=request, c='static/jqGrid/js/i18n', f='grid.locale-es.js')) response.files.append(URL(r=request, c='static/jqGrid/js', f='jquery.jqGrid.min.js')) response.files.append(URL(r=request, c='static/jqGrid/css', f='ui.jqgrid.css')) return dict(form=form, frmlineas=frmlineas, codigo_alimento=codigo_alimento)
def nueva_entrada(): session.Entradas = True frmlineas = None codigo_alimento = None if len(request.args) > 0: session.current_entrada = request.args[0] else: session.current_entrada = None db.CabeceraEntrada.almacen.writable = False db.CabeceraEntrada.almacen.readable = False db.CabeceraEntrada.Donante.widget = suggest_widget( db.Colaborador.name, id_field=db.Colaborador.id, min_length=1, limitby=(0, 50), keyword='_autocomplete_category_2_%(fieldname)s', user_signature=True, ) registro = None if session.current_entrada: registro = db.CabeceraEntrada(session.current_entrada) form = SQLFORM(db.CabeceraEntrada, record=registro, submit_button='Grabar estos datos', keepvalues=True) if request.vars._autocomplete_Colaborador_name_aux: request.vars.pop('_autocomplete_Colaborador_name_aux') if form.accepts(request.vars, session, onvalidation=ver_cierre): response.flash = 'Nueva entrada grabada' session.current_entrada = form.vars.id redirect(URL('nueva_entrada', args=[form.vars.id])) elif form.errors: response.flash = 'Error en los datos' if session.current_entrada: valor_antiguo_uds = None if 'lid' in request.vars: registro_linea = db.LineaEntrada(request.vars.lid) registro_alimento = db.Alimento(registro_linea.alimento) codigo_alimento = registro_alimento.Codigo session.AlmacenAlimento = registro_alimento.id if request.vars.Unidades: if float(request.vars.Unidades) \ != registro_linea.Unidades: valor_antiguo_uds = registro_linea.Unidades else: registro_linea = None codigo_alimento = XML('""') db.LineaEntrada.cabecera.default = session.current_entrada frmlineas = SQLFORM(db.LineaEntrada, registro_linea, _id='frmlineas', submit_button='Guardar esta línea', keepvalues=False) if 'lid' in request.vars: frmlineas.vars.alimento = registro_alimento.Descripcion if 'alimento' in request.vars: if session.AlmacenAlimento: request.vars.alimento = session.AlmacenAlimento # session.AlmacenAlimento if frmlineas.accepts(request.vars, session): if valor_antiguo_uds and registro_linea.LineaAlmacen: actualiza_lineaalmacen(registro_linea.LineaAlmacen, float(request.vars.Unidades), valor_antiguo_uds) else: cid = nueva_lineaalmacen(request.vars, session.Entradas) registro_linea = db.LineaEntrada(frmlineas.vars.id) registro_linea.LineaAlmacen = cid registro_linea.update_record() redirect(URL(f='nueva_entrada', args=session.current_entrada)) elif frmlineas.errors: response.flash = 'Error en los datos' response.files.append(URL(r=request, c='static/jqGrid/js/i18n', f='grid.locale-es.js')) response.files.append(URL(r=request, c='static/jqGrid/js', f='jquery.jqGrid.min.js')) response.files.append(URL(r=request, c='static/jqGrid/css', f='ui.jqgrid.css')) return dict(form=form, frmlineas=frmlineas, codigo_alimento=codigo_alimento)