def create_db(): response.subtitle = T("Database Creation") response.view='nas/index.html' alias = db((db.databases.deleted==False)).select(db.databases.id,db.databases.alias,orderby=db.databases.alias) cmb_alias = SELECT(*[OPTION(field["alias"],_value=field["alias"]) for field in alias], _id="cmb_alias", _style="margin-top: 0px;") if len(cmb_alias)==0: cmb_alias.insert(0, OPTION("", _value="")) gform = DIV( HR(), P(SPAN(T('1. Create a new database alias. See ')),A("Customer Databases",_href=URL("databases"),_style="color:#0069D6;font-style: italic;"), BR(), SPAN(T('2. The sqlite and Google SQL databases are created automatically.')), BR(), SPAN(T('3. Other types of databases must be created manually before.')), BR(), SPAN(T('4. Please select an alias, and start the creation:')) ,_style="font-style: italic;"), DIV(SPAN(T('Database alias:'),_style="padding-right: 15px;padding-left: 15px;"),cmb_alias, P(SPAN(T('Starting the process?'), _id="msg_result",_style="font-style: italic;"), ui.control.get_mobil_button(label=T("Start"), href="#", onclick="createDatabase();", cformat=None, icon="check", theme="b", style="width: 100px;"), _style="padding-top: 0px;")), HR() ,_style="font-weight: bold;", _align="left") return dict(form=gform)
def create_db(): response.subtitle = T("Database Creation") response.view = 'nas/index.html' alias = db( (db.databases.deleted == False)).select(db.databases.id, db.databases.alias, orderby=db.databases.alias) cmb_alias = SELECT( *[OPTION(field["alias"], _value=field["alias"]) for field in alias], _id="cmb_alias", _style="margin-top: 0px;") if len(cmb_alias) == 0: cmb_alias.insert(0, OPTION("", _value="")) gform = DIV( HR(), P(SPAN(T('1. Create a new database alias. See ')), A("Customer Databases", _href=URL("databases"), _style="color:#0069D6;font-style: italic;"), BR(), SPAN( T('2. The sqlite and Google SQL databases are created automatically.' )), BR(), SPAN( T('3. Other types of databases must be created manually before.') ), BR(), SPAN(T('4. Please select an alias, and start the creation:')), _style="font-style: italic;"), DIV( SPAN(T('Database alias:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_alias, P(SPAN(T('Starting the process?'), _id="msg_result", _style="font-style: italic;"), ui.control.get_mobil_button(label=T("Start"), href="#", onclick="createDatabase();", cformat=None, icon="check", theme="b", style="width: 100px;"), _style="padding-top: 0px;")), HR(), _style="font-weight: bold;", _align="left") return dict(form=gform)
def create_backup(): response.subtitle = T("Create a Backup") response.view='nas/index.html' alias = db((db.databases.deleted==False)).select(db.databases.id,db.databases.alias,orderby=db.databases.alias) cmb_alias = SELECT(*[OPTION(field["alias"],_value=field["alias"]) for field in alias], _id="cmb_alias") if len(cmb_alias)==0: cmb_alias.insert(0, OPTION("", _value="")) cmb_format = SELECT([OPTION(T("backup"), _value="backup"),OPTION(T("XML"), _value="xml")], _id="cmb_format") if len(cmb_format)==0: cmb_format.insert(0, OPTION("", _value="")) cmb_filename = SELECT([OPTION(T("Alias"), _value=""),OPTION(T("Download"), _value="download"), OPTION(T("Custom"), _value="custom")], _id="cmb_filename") if request.env.web2py_runtime_gae: cmb_filename = SELECT([OPTION(T("Download"), _value="download")], _id="cmb_filename") cust_filename = "" else: cust_filename = INPUT(_type="text",_value="",_id="cust_filename") gform = DIV( HR(), P(SPAN(T('Nervatura backup: '), _style="color:brown;"),BR(), SPAN(T('NOM objects: '), _style="color:green;"),SPAN("address, barcode, contact, currency, customer, deffield, employee, event, fieldvalue, groups, item, link, \ log, movement, numberdef, pattern, payment, place, price, product, project, rate, tax, tool, trans"),BR(), SPAN(T('Settings objects: '), _style="color:green;"),SPAN("ui_audit, ui_language, \ ui_menu, ui_menufields, ui_message, ui_report, ui_reportfields, \ ui_reportsources, ui_userconfig"),BR(), SPAN(T('Not included: '), _style="color:red;"),SPAN("ui_printqueue"),BR(),BR(), SPAN(T("Independent from the database type and version of the NAS server."),_style="font-style: italic;")), DIV( DIV(SPAN(T('Database alias:'),_style="padding-right: 15px;padding-left: 15px;"),cmb_alias), DIV(SPAN(T('Filename:') ,_style="padding-right: 15px;padding-left: 15px;"),cmb_filename, SPAN(" "), cust_filename, _style="padding-top: 10px;"), DIV(SPAN(T('Backup format:'),_style="padding-right: 15px;padding-left: 15px;"),cmb_format, _style="padding-top: 10px;"), P( SPAN(T('Starting the process?'), _id="msg_result",_style="font-style: italic;"), ui.control.get_mobil_button(label=T("Start"), href="#", onclick="createDataBackup();", cformat=None, icon="check", theme="b", style="width: 100px;", title=ns.T('Start customer backup creation')), _style="padding-top: 5px;")), HR() ,_style="font-weight: bold;", _align="left") return dict(form=gform)
def restore_backup(): response.subtitle = T("Restore the Customer Data") response.view='nas/index.html' msg_result = T('Starting the process?') if request.post_vars: if request.post_vars.alias==None or request.post_vars.alias=="": msg_result = T("Error: Missing alias parameter!") if request.post_vars.has_key("frm_file"): if request.post_vars.bfile=="": msg_result = T("Error: Missing upload file!") else: msg_result = dbtool.loadBackupData(alias=request.vars.alias, bfile=request.post_vars.bfile) else: if request.post_vars.filename=="": msg_result = T("Error: Missing upload filename!") else: msg_result = dbtool.loadBackupData(alias=request.vars.alias, filename=request.post_vars.filename) request.post_vars = None alias = db((db.databases.deleted==False)).select(db.databases.id,db.databases.alias,orderby=db.databases.alias) cmb_alias = SELECT(*[OPTION(field["alias"],_value=field["alias"]) for field in alias], _name="alias", _id="cmb_alias") if len(cmb_alias)==0: cmb_alias.insert(0, OPTION("", _value="")) dfiles = os.listdir(os.path.join(ns.request.folder, 'static/backup')) files = [] for dfile in dfiles: if str(dfile).endswith(".backup") or str(dfile).endswith(".xml"): files.append(dfile) files.sort() cmb_files = SELECT(*files, _id="cmb_files", _name="filename") if len(cmb_files)==0: cmb_files.insert(0, OPTION("", _value="")) cmd_filename=INPUT(_type="submit",_name="frm_filename", _title= ns.T('Start restore from local backup file'), _value=T("Start restore"),_onclick="msg_result.innerHTML='"+T("Process started. Waiting for the server to respond ...")+"';") cmd_filename["_data-theme"] = "b" cmd_filename["_data-icon"] = "check" cmd_file=INPUT(_type="submit",_name="frm_file", _title= ns.T('Upload file and Start restore'), _value=T("Upload and Start restore"), _onclick="msg_result.innerHTML='"+T("Process started. Waiting for the server to respond ...")+"';") cmd_file["_data-theme"] = "b" cmd_file["_data-icon"] = "check" cmd_file["_data-ajax"] = "false" if request.env.web2py_runtime_gae: gform = DIV( HR(), P(SPAN(T('The sqlite and Google SQL databases are created automatically. Other types of databases must be created manually before.'))), FORM( DIV(SPAN(T('Database alias:'),_style="padding-right: 15px;padding-left: 15px;"),cmb_alias), DIV(SPAN(T('File:') ,_style="padding-right: 15px;padding-left: 15px;"), INPUT(_type='file', _name='bfile', _id='bfile', _requires=IS_NOT_EMPTY()), SPAN("",_style="padding-left: 15px;"), cmd_file, _style="padding-top: 8px;"), _id="frm_upload_files",_name="frm_upload", **{"_data-ajax":"false"}), P(SPAN(msg_result, _id="msg_result",_style="padding-left: 15px;font-style: italic;padding-top: 5px;")), HR() ,_style="font-weight: bold;", _align="left") else: gform = DIV( HR(), P(SPAN(T('The sqlite and Google SQL databases are created automatically. Other types of databases must be created manually before.'))), FORM( DIV(SPAN(T('Database alias:'),_style="padding-right: 15px;padding-left: 15px;"),cmb_alias), DIV(SPAN(T('Filename:') ,_style="padding-right: 15px;padding-left: 15px;"),cmb_files, SPAN("",_style="padding-left: 15px;"), cmd_filename, _style="padding-top: 8px;"), DIV(SPAN(T('File:') ,_style="padding-right: 15px;padding-left: 15px;"), INPUT(_type='file', _name='bfile', _id='bfile', _requires=IS_NOT_EMPTY()), SPAN("",_style="padding-left: 15px;"), cmd_file, _style="padding-top: 8px;"), _id="frm_upload_files",_name="frm_upload", **{"_data-ajax":"false"}), P(SPAN(msg_result, _id="msg_result",_style="padding-left: 15px;font-style: italic;padding-top: 5px;")), HR() ,_style="font-weight: bold;", _align="left") return dict(form=gform)
def create_fieldlist(table): fields_lst = [] # if table=="setting": # table="fieldvalue" fields = ns.db[table].fields for fname in fields: fieldcat=1 if fname in("id","deleted"): continue if ns.db[table][fname].type=="text": ns.db[table][fname].widget=lambda field,value: SQLFORM.widgets.string.widget(field,value) if type(ns.db[table][fname].requires).__name__=="check_boolean": fields_lst.append({"fieldname":fname,"label":ns.db[table][fname].label, "widget":SELECT([OPTION("", _value=""),OPTION(T("YES"), _value="1"),OPTION(T("NO"), _value="0",)], _id=table+"_"+fname, _name=fname), "fieldcat":1}) continue if table in("address","contact"): if fname=="nervatype": ns.db[table].nervatype.requires = IS_IN_SET(('customer', 'employee', 'event', 'place', 'product', 'project', 'tool', 'trans')) fieldcat=0 elif fname=="ref_id": fields_lst.append({"fieldname":"refnumber","label":T('Ref.No.'), "widget":INPUT(_type="text",_value="",_name="refnumber",_id=table+"_refnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"rownumber","label":T('Row No.'), "widget":INPUT(_type="text",_value="0",_name="rownumber",_id=table+"_rownumber",_class="integer"), "fieldcat":0}) continue elif table=="barcode": if fname=="code": fields_lst.append({"fieldname":"code","label":T('Barcode'), "widget":INPUT(_type="text",_value="",_name="code",_id=table+"_code",_class="string"), "fieldcat":0}) continue elif fname=="product_id": fields_lst.append({"fieldname":"partnumber","label":T('Product No.'), "widget":INPUT(_type="text",_value="",_name="partnumber",_id=table+"_partnumber",_class="string"), "fieldcat":1}) continue elif fname=="barcodetype": ns.db.barcode.barcodetype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('barcodetype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif table=="currency": if fname=="curr": fieldcat=0 elif table=="customer": if fname=="custnumber": fieldcat=0 elif fname=="custtype": ns.db.customer.custtype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('custtype')&(ns.db.groups.groupvalue!="own")), ns.db.groups.groupvalue, '%(groupvalue)s') elif table=="deffield": if fname=="fieldname": fieldcat=0 elif fname=="nervatype": ns.db[table].nervatype.requires = IS_IN_SET(('address', 'barcode', 'contact', 'currency', 'customer', 'employee', 'event', 'item', 'link', 'log', 'movement', 'payment', 'price', 'place', 'product', 'project', 'rate', 'tax', 'tool', 'trans', 'setting')) elif fname=="subtype": ns.db[table][fname].widget=lambda field,value: SQLFORM.widgets.string.widget(field,value) elif fname=="fieldtype": ns.db.deffield.fieldtype.requires = IS_IN_DB(ns.db((ns.db.groups.groupname.like('fieldtype')) &(ns.db.groups.groupvalue!="checkbox")&(ns.db.groups.groupvalue!="trans")), ns.db.groups.groupvalue, '%(groupvalue)s') elif table=="employee": if fname=="empnumber": fieldcat=0 elif fname=="usergroup": ns.db.employee.usergroup.requires = IS_IN_DB(ns.db((ns.db.groups.groupname.like('usergroup'))&(ns.db.groups.deleted==0)), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname=="department": ns.db.employee.department.requires = IS_EMPTY_OR(IS_IN_DB(ns.db((ns.db.groups.groupname.like('department')) &(ns.db.groups.deleted==0)), ns.db.groups.groupvalue, '%(groupvalue)s')) elif fname in("password","registration_key","reset_password_key","registration_id"): continue elif table=="event": if fname=="calnumber": fieldcat=0 elif fname=="ref_id": fields_lst.append({"fieldname":"refnumber","label":T('Ref. No.'), "widget":INPUT(_type="text",_value="",_name="refnumber",_id=table+"_refnumber",_class="string"), "fieldcat":1}) continue elif fname=="nervatype": ns.db[table].nervatype.requires = IS_IN_SET(('customer', 'employee', 'place', 'product', 'project', 'tool', 'trans')) elif fname=="eventgroup": ns.db[table][fname].widget=lambda field,value: SQLFORM.widgets.string.widget(field,value) elif table=="groups": if fname in("groupname","groupvalue"): fieldcat=0 elif table=="item": if fname=="trans_id": fields_lst.append({"fieldname":"transnumber","label":T('Doc.No.'), "widget":INPUT(_type="text",_value="",_name="transnumber",_id=table+"_transnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"rownumber","label":T('Row No.'), "widget":INPUT(_type="text",_value="0",_name="rownumber",_id=table+"_rownumber",_class="integer"), "fieldcat":0}) fields_lst.append({"fieldname":"inputmode","label":T('Input mode'), "widget":SELECT([OPTION("", _value=""),OPTION(T("fxprice"), _value="fxprice"), OPTION(T("netamount"), _value="netamount"),OPTION(T("amount"), _value="amount") ], _id="item_inputmode", _name="inputmode"), "fieldcat":1}) fields_lst.append({"fieldname":"inputvalue","label":T('Input value'), "widget":INPUT(_type="text",_value="0",_name="inputvalue",_id=table+"_inputvalue",_class="double"), "fieldcat":1}) continue elif fname=="product_id": fields_lst.append({"fieldname":"partnumber","label":T('Product No.'), "widget":INPUT(_type="text",_value="",_name="partnumber",_id=table+"_partnumber",_class="string"), "fieldcat":1}) continue elif fname=="tax_id": taxcode = ns.db(ns.db.tax.inactive==0).select(ns.db.tax.taxcode) widget=SELECT(*[OPTION(field.taxcode) for field in taxcode], _id="item_taxcode", _name="taxcode") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"taxcode","label":T('Tax'), "widget":widget, "fieldcat":1}) continue elif fname in("fxprice","netamount","vatamount","amount"): continue elif table=="link": nervatype_lst=['address', 'barcode', 'contact', 'currency', 'customer', 'employee', 'event', 'groups', 'item', 'movement', 'payment', 'price', 'place', 'product', 'project', 'rate', 'tax', 'tool', 'trans'] if fname == "nervatype_1": widget=SELECT(*[OPTION(nervatype) for nervatype in nervatype_lst], _id="link_nervatype1", _name="nervatype1") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"nervatype1","label":T('Nervatype 1'), "widget":widget, "fieldcat":0}) continue elif fname == "nervatype_2": widget=SELECT(*[OPTION(nervatype) for nervatype in nervatype_lst], _id="link_nervatype2", _name="nervatype2") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"nervatype2","label":T('Nervatype 2'), "widget":widget, "fieldcat":0}) continue elif fname=="ref_id_1": fields_lst.append({"fieldname":"refnumber1","label":T('Ref. No. 1'), "widget":INPUT(_type="text",_value="",_name="refnumber1",_id=table+"_refnumber1",_class="string"), "fieldcat":0}) continue elif fname=="ref_id_2": fields_lst.append({"fieldname":"refnumber2","label":T('Ref. No. 2'), "widget":INPUT(_type="text",_value="",_name="refnumber2",_id=table+"_refnumber2",_class="string"), "fieldcat":0}) continue elif table=="log": nervatype_lst=['address', 'barcode', 'contact', 'currency', 'customer', 'employee', 'deffield', 'event', 'groups', 'item', 'link', 'movement', 'payment', 'price', 'place', 'product', 'project', 'rate', 'tax', 'tool', 'trans', 'setting'] if fname=="employee_id": fields_lst.append({"fieldname":"empnumber","label":T('Employee No.'), "widget":INPUT(_type="text",_value="",_name="empnumber",_id=table+"_empnumber",_class="string"), "fieldcat":0}) continue elif fname=="crdate": fieldcat=0 elif fname == "nervatype": widget=SELECT(*[OPTION(nervatype) for nervatype in nervatype_lst], _id="log_nervatype", _name="nervatype") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"nervatype","label":T('Nervatype'), "widget":widget, "fieldcat":1}) continue elif fname == "logstate": widget=SELECT(*[OPTION(logstate.groupvalue) for logstate in ns.db(ns.db.groups.groupname.like('logstate')).select(ns.db.groups.groupvalue)], _id="log_logstate", _name="logstate") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"logstate","label":T('State'), "widget":widget, "fieldcat":1}) continue elif fname=="ref_id": fields_lst.append({"fieldname":"refnumber","label":T('Ref.No.'), "widget":INPUT(_type="text",_value="",_name="refnumber",_id=table+"_refnumber",_class="string"), "fieldcat":1}) continue elif table=="movement": if fname=="trans_id": fields_lst.append({"fieldname":"transnumber","label":T('Doc.No.'), "widget":INPUT(_type="text",_value="",_name="transnumber",_id=table+"_transnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"rownumber","label":T('Row No.'), "widget":INPUT(_type="text",_value="0",_name="rownumber",_id=table+"_rownumber",_class="integer"), "fieldcat":0}) continue elif fname=="movetype": ns.db.movement.movetype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('movetype') & ns.db.groups.groupvalue.belongs(('inventory', 'store', 'tool')) ), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname=="product_id": fields_lst.append({"fieldname":"partnumber","label":T('Product No.'), "widget":INPUT(_type="text",_value="",_name="partnumber",_id=table+"_partnumber",_class="string"), "fieldcat":1}) continue elif fname=="tool_id": fields_lst.append({"fieldname":"serial","label":T('Serial'), "widget":INPUT(_type="text",_value="",_name="serial",_id=table+"_serial",_class="string"), "fieldcat":1}) continue elif fname=="place_id": fields_lst.append({"fieldname":"planumber","label":T('Place No.'), "widget":INPUT(_type="text",_value="",_name="planumber",_id=table+"_planumber",_class="string"), "fieldcat":1}) continue elif table=="numberdef": if fname=="numberkey": fieldcat=0 elif table=="pattern": if fname=="description": fieldcat=0 elif fname=="transtype": ns.db.pattern.transtype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('transtype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif table=="payment": if fname=="trans_id": fields_lst.append({"fieldname":"transnumber","label":T('Doc.No.'), "widget":INPUT(_type="text",_value="",_name="transnumber",_id=table+"_transnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"rownumber","label":T('Row No.'), "widget":INPUT(_type="text",_value="0",_name="rownumber",_id=table+"_rownumber",_class="integer"), "fieldcat":0}) continue elif table=="place": if fname=="planumber": fieldcat=0 elif fname=="place_id": fields_lst.append({"fieldname":"ref_planumber","label":T('Ref. No.'), "widget":INPUT(_type="text",_value="",_name="ref_planumber",_id=table+"_ref_planumber",_class="string"), "fieldcat":1}) continue elif fname=="placetype": ns.db.place.placetype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('placetype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname=="storetype": continue elif table=="price": if fname=="product_id": fields_lst.append({"fieldname":"partnumber","label":T('Product No.'), "widget":INPUT(_type="text",_value="",_name="partnumber",_id=table+"_partnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"pricetype","label":T('Type'), "widget":SELECT([OPTION("", _value=""),OPTION(T("price"), _value="price"), OPTION(T("discount"), _value="discount") ], _id=table+"_pricetype", _name="pricetype"), "fieldcat":0}) continue elif fname=="validfrom": fieldcat=0 elif fname=="curr": fieldcat=0 elif fname=="qty": fieldcat=0 elif fname=="pricevalue": ns.db.price.pricevalue.label = T("Value/limit") elif fname=="calcmode": ns.db.price.calcmode.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('calcmode')), ns.db.groups.groupvalue, '%(description)s') elif table=="product": if fname=="partnumber": fieldcat=0 elif fname=="protype": ns.db.product.protype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('protype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname=="tax_id": taxcode = ns.db(ns.db.tax.inactive==0).select(ns.db.tax.taxcode) widget=SELECT(*[OPTION(field.taxcode) for field in taxcode], _id="product_taxcode", _name="taxcode") widget.insert(0, OPTION("")) fields_lst.append({"fieldname":"taxcode","label":T('Tax'), "widget":widget, "fieldcat":1}) continue elif table=="project": if fname=="pronumber": fieldcat=0 elif fname=="customer_id": fields_lst.append({"fieldname":"custnumber","label":T('Customer No.'), "widget":INPUT(_type="text",_value="",_name="custnumber",_id=table+"_custnumber",_class="string"), "fieldcat":1}) continue elif table=="rate": if fname == "ratetype": fieldcat=0 ns.db.rate.ratetype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('ratetype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname in("ratedate","curr"): fieldcat=0 elif fname=="place_id": fields_lst.append({"fieldname":"planumber","label":T('Place No.'), "widget":INPUT(_type="text",_value="",_name="planumber",_id=table+"_planumber",_class="string"), "fieldcat":0}) continue elif fname == "rategroup": ns.db.rate.rategroup.requires = IS_EMPTY_OR(IS_IN_DB(ns.db((ns.db.groups.deleted==0) &ns.db.groups.groupname.like('rategroup')), ns.db.groups.groupvalue, '%(groupvalue)s')) elif table=="tax": if fname=="taxcode": fieldcat=0 elif table=="tool": if fname=="serial": fieldcat=0 elif fname=="product_id": fields_lst.append({"fieldname":"partnumber","label":T('Product No.'), "widget":INPUT(_type="text",_value="",_name="partnumber",_id=table+"_partnumber",_class="string"), "fieldcat":1}) continue elif fname == "toolgroup": ns.db.tool.toolgroup.requires = IS_EMPTY_OR(IS_IN_DB(ns.db((ns.db.groups.deleted==0) &ns.db.groups.groupname.like('toolgroup')), ns.db.groups.groupvalue, '%(groupvalue)s')) elif table=="trans": if fname=="transnumber": fieldcat=0 elif fname == "transtype": ns.db.trans.transtype.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('transtype')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname == "direction": ns.db.trans.direction.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('direction')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname == "paidtype": ns.db.trans.paidtype.requires = IS_EMPTY_OR(IS_IN_DB(ns.db((ns.db.groups.deleted==0) &ns.db.groups.groupname.like('paidtype')), ns.db.groups.groupvalue, '%(groupvalue)s')) elif fname == "department": ns.db.trans.department.requires = IS_EMPTY_OR(IS_IN_DB(ns.db((ns.db.groups.deleted==0) &ns.db.groups.groupname.like('department')), ns.db.groups.groupvalue, '%(groupvalue)s')) elif fname == "transtate": ns.db.trans.transtate.requires = IS_IN_DB(ns.db(ns.db.groups.groupname.like('transtate')), ns.db.groups.groupvalue, '%(groupvalue)s') elif fname=="customer_id": fields_lst.append({"fieldname":"custnumber","label":T('Customer No.'), "widget":INPUT(_type="text",_value="",_name="custnumber",_id=table+"_custnumber",_class="string"), "fieldcat":1}) continue elif fname=="employee_id": fields_lst.append({"fieldname":"empnumber","label":T('Employee No.'), "widget":INPUT(_type="text",_value="",_name="empnumber",_id=table+"_empnumber",_class="string"), "fieldcat":1}) continue elif fname=="project_id": fields_lst.append({"fieldname":"pronumber","label":T('Project No.'), "widget":INPUT(_type="text",_value="",_name="pronumber",_id=table+"_pronumber",_class="string"), "fieldcat":1}) continue elif fname=="place_id": fields_lst.append({"fieldname":"planumber","label":T('Place No.'), "widget":INPUT(_type="text",_value="",_name="planumber",_id=table+"_planumber",_class="string"), "fieldcat":1}) continue elif fname=="cruser_id": continue elif table=="fieldvalue": if fname=="fieldname": fields_lst.append({"fieldname":"fieldname","label":T('Fieldname'), "widget":INPUT(_type="text",_value="",_name="fieldname",_id=table+"_fieldname",_class="string"), "fieldcat":0}) continue elif fname=="ref_id": fields_lst.append({"fieldname":"refnumber","label":T('Ref.No.'), "widget":INPUT(_type="text",_value="",_name="refnumber",_id=table+"_refnumber",_class="string"), "fieldcat":0}) fields_lst.append({"fieldname":"rownumber","label":T('Row No.'), "widget":INPUT(_type="text",_value="1",_name="rownumber",_id=table+"_rownumber",_class="integer"), "fieldcat":0}) continue elif fname=="fieldtype": ns.db.fieldvalue.fieldtype.requires = IS_IN_DB(ns.db((ns.db.groups.groupname.like('fieldtype')) &(ns.db.groups.groupvalue!="checkbox")&(ns.db.groups.groupvalue!="trans")), ns.db.groups.id, '%(groupvalue)s') form = SQLFORM(ns.db[table]) fields_lst.append({"fieldname":fname,"label":form.custom.label[fname], "widget":form.custom.widget[fname],"fieldcat":fieldcat}) if table in("address", "barcode", "contact", "currency", "customer", "employee", "event", "groups", "item", "link", "log", "movement", "price", "place", "product", "project", "rate", "tax", "tool", "trans"): nervatype = ns.db((ns.db.groups.groupname=="nervatype")&(ns.db.groups.groupvalue==table)).select().as_list()[0]["id"] deffields = ns.db((ns.db.deffield.deleted==0)&(ns.db.deffield.visible==1)&(ns.db.deffield.nervatype==nervatype) &(ns.db.deffield.readonly==0)&(ns.db.deffield.fieldtype==ns.db.groups.id)).select( ns.db.deffield.fieldname,ns.db.groups.groupvalue,ns.db.deffield.description,ns.db.deffield.valuelist) for deffield in deffields: if deffield.groups.groupvalue=="bool": fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description, "widget":INPUT(_type="checkbox",_value="on",_name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname,_class="boolean"), "fieldcat":2}) elif deffield.groups.groupvalue=="integer": fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description, "widget":INPUT(_type="text",_value="0",_name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname,_class="integer"), "fieldcat":2}) elif deffield.groups.groupvalue=="float": fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description, "widget":INPUT(_type="text",_value="0",_name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname,_class="double"), "fieldcat":2}) elif deffield.groups.groupvalue=="date": fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description, "widget":INPUT(_type="text",_value="",_name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname,_class="date"), "fieldcat":2}) elif deffield.groups.groupvalue=="valuelist": widget = SELECT(*[OPTION(field) for field in deffield.deffield.valuelist.split("|")], _name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname) widget.insert(0, OPTION("", _value="")) fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description,"widget":widget,"fieldcat":2}) else: fields_lst.append({"fieldname":deffield.deffield.fieldname,"label":deffield.deffield.description, "widget":INPUT(_type="text",_value="",_name=deffield.deffield.fieldname,_id=table+"_"+deffield.deffield.fieldname,_class="string"), "fieldcat":2}) return fields_lst
def restore_backup(): response.subtitle = T("Restore the Customer Data") response.view = 'nas/index.html' msg_result = T('Starting the process?') if request.post_vars: if request.post_vars.alias == None or request.post_vars.alias == "": msg_result = T("Error: Missing alias parameter!") if request.post_vars.has_key("frm_file"): if request.post_vars.bfile == "": msg_result = T("Error: Missing upload file!") else: msg_result = dbtool.loadBackupData( alias=request.vars.alias, bfile=request.post_vars.bfile) else: if request.post_vars.filename == "": msg_result = T("Error: Missing upload filename!") else: msg_result = dbtool.loadBackupData( alias=request.vars.alias, filename=request.post_vars.filename) request.post_vars = None alias = db( (db.databases.deleted == False)).select(db.databases.id, db.databases.alias, orderby=db.databases.alias) cmb_alias = SELECT( *[OPTION(field["alias"], _value=field["alias"]) for field in alias], _name="alias", _id="cmb_alias") if len(cmb_alias) == 0: cmb_alias.insert(0, OPTION("", _value="")) dfiles = os.listdir(os.path.join(ns.request.folder, 'static/backup')) files = [] for dfile in dfiles: if str(dfile).endswith(".backup") or str(dfile).endswith(".xml"): files.append(dfile) files.sort() cmb_files = SELECT(*files, _id="cmb_files", _name="filename") if len(cmb_files) == 0: cmb_files.insert(0, OPTION("", _value="")) cmd_filename = INPUT( _type="submit", _name="frm_filename", _title=ns.T('Start restore from local backup file'), _value=T("Start restore"), _onclick="msg_result.innerHTML='" + T("Process started. Waiting for the server to respond ...") + "';") cmd_filename["_data-theme"] = "b" cmd_filename["_data-icon"] = "check" cmd_file = INPUT( _type="submit", _name="frm_file", _title=ns.T('Upload file and Start restore'), _value=T("Upload and Start restore"), _onclick="msg_result.innerHTML='" + T("Process started. Waiting for the server to respond ...") + "';") cmd_file["_data-theme"] = "b" cmd_file["_data-icon"] = "check" cmd_file["_data-ajax"] = "false" if request.env.web2py_runtime_gae: gform = DIV( HR(), P( SPAN( T('The sqlite and Google SQL databases are created automatically. Other types of databases must be created manually before.' ))), FORM(DIV( SPAN(T('Database alias:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_alias), DIV(SPAN(T('File:'), _style="padding-right: 15px;padding-left: 15px;"), INPUT(_type='file', _name='bfile', _id='bfile', _requires=IS_NOT_EMPTY()), SPAN("", _style="padding-left: 15px;"), cmd_file, _style="padding-top: 8px;"), _id="frm_upload_files", _name="frm_upload", **{"_data-ajax": "false"}), P( SPAN(msg_result, _id="msg_result", _style= "padding-left: 15px;font-style: italic;padding-top: 5px;") ), HR(), _style="font-weight: bold;", _align="left") else: gform = DIV( HR(), P( SPAN( T('The sqlite and Google SQL databases are created automatically. Other types of databases must be created manually before.' ))), FORM(DIV( SPAN(T('Database alias:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_alias), DIV(SPAN(T('Filename:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_files, SPAN("", _style="padding-left: 15px;"), cmd_filename, _style="padding-top: 8px;"), DIV(SPAN(T('File:'), _style="padding-right: 15px;padding-left: 15px;"), INPUT(_type='file', _name='bfile', _id='bfile', _requires=IS_NOT_EMPTY()), SPAN("", _style="padding-left: 15px;"), cmd_file, _style="padding-top: 8px;"), _id="frm_upload_files", _name="frm_upload", **{"_data-ajax": "false"}), P( SPAN(msg_result, _id="msg_result", _style= "padding-left: 15px;font-style: italic;padding-top: 5px;") ), HR(), _style="font-weight: bold;", _align="left") return dict(form=gform)
def create_backup(): response.subtitle = T("Create a Backup") response.view = 'nas/index.html' alias = db( (db.databases.deleted == False)).select(db.databases.id, db.databases.alias, orderby=db.databases.alias) cmb_alias = SELECT( *[OPTION(field["alias"], _value=field["alias"]) for field in alias], _id="cmb_alias") if len(cmb_alias) == 0: cmb_alias.insert(0, OPTION("", _value="")) cmb_format = SELECT( [OPTION(T("backup"), _value="backup"), OPTION(T("XML"), _value="xml")], _id="cmb_format") if len(cmb_format) == 0: cmb_format.insert(0, OPTION("", _value="")) cmb_filename = SELECT([ OPTION(T("Alias"), _value=""), OPTION(T("Download"), _value="download"), OPTION(T("Custom"), _value="custom") ], _id="cmb_filename") if request.env.web2py_runtime_gae: cmb_filename = SELECT([OPTION(T("Download"), _value="download")], _id="cmb_filename") cust_filename = "" else: cust_filename = INPUT(_type="text", _value="", _id="cust_filename") gform = DIV( HR(), P( SPAN(T('Nervatura backup: '), _style="color:brown;"), BR(), SPAN(T('NOM objects: '), _style="color:green;"), SPAN( "address, barcode, contact, currency, customer, deffield, employee, event, fieldvalue, groups, item, link, \ log, movement, numberdef, pattern, payment, place, price, product, project, rate, tax, tool, trans" ), BR(), SPAN(T('Settings objects: '), _style="color:green;"), SPAN("ui_audit, ui_language, \ ui_menu, ui_menufields, ui_message, ui_report, ui_reportfields, \ ui_reportsources, ui_userconfig"), BR(), SPAN(T('Not included: '), _style="color:red;"), SPAN("ui_printqueue"), BR(), BR(), SPAN(T( "Independent from the database type and version of the NAS server." ), _style="font-style: italic;")), DIV( DIV( SPAN(T('Database alias:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_alias), DIV(SPAN(T('Filename:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_filename, SPAN(" "), cust_filename, _style="padding-top: 10px;"), DIV(SPAN(T('Backup format:'), _style="padding-right: 15px;padding-left: 15px;"), cmb_format, _style="padding-top: 10px;"), P(SPAN(T('Starting the process?'), _id="msg_result", _style="font-style: italic;"), ui.control.get_mobil_button( label=T("Start"), href="#", onclick="createDataBackup();", cformat=None, icon="check", theme="b", style="width: 100px;", title=ns.T('Start customer backup creation')), _style="padding-top: 5px;")), HR(), _style="font-weight: bold;", _align="left") return dict(form=gform)