initial setup for background report
This commit is contained in:
parent
e6adf91029
commit
ed3fdc4337
4 changed files with 126 additions and 8 deletions
|
|
@ -84,7 +84,7 @@
|
|||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
|
|
@ -95,6 +95,71 @@
|
|||
"label": "Status",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "done\nerror\nopen",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "report_start_time",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Report Start Time",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "report_end_time",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Report End Time",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
|
|
@ -151,7 +216,7 @@
|
|||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2018-06-08 10:31:57.428394",
|
||||
"modified": "2018-06-12 00:31:44.112016",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Background Report",
|
||||
|
|
|
|||
|
|
@ -6,5 +6,8 @@ from __future__ import unicode_literals
|
|||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class BackgroundReport(Document):
|
||||
pass
|
||||
|
||||
def before_insert(self):
|
||||
print "shrihari"
|
||||
|
|
@ -5,6 +5,8 @@ from __future__ import unicode_literals
|
|||
|
||||
import frappe
|
||||
import os, json
|
||||
import csv
|
||||
from datetime import datetime
|
||||
|
||||
from frappe import _
|
||||
from frappe.modules import scrub, get_module_path
|
||||
|
|
@ -16,6 +18,7 @@ from frappe.permissions import get_role_permissions
|
|||
from six import string_types, iteritems
|
||||
from frappe.utils.background_jobs import enqueue
|
||||
from frappe.utils.file_manager import save_file
|
||||
import base64
|
||||
|
||||
|
||||
def get_report_doc(report_name):
|
||||
|
|
@ -72,6 +75,7 @@ def generate_report_result(report, filters, user):
|
|||
"data_to_be_printed": data_to_be_printed
|
||||
}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_script(report_name):
|
||||
report = get_report_doc(report_name)
|
||||
|
|
@ -105,11 +109,54 @@ def get_script(report_name):
|
|||
}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def create_csv_file(columns, data, doctype):
|
||||
print columns
|
||||
column_list = [str(d) for d in columns] # create the list of column labels
|
||||
csv_filename = '{0}.csv'.format(datetime.now().strftime("%Y%m%d-%H%M%S"))
|
||||
#
|
||||
with open(csv_filename, 'wb') as out:
|
||||
csv_out = csv.writer(out)
|
||||
csv_out.writerow(column_list)
|
||||
for row in data:
|
||||
csv_out.writerow(row)
|
||||
|
||||
with open(csv_filename, "rb") as f: # encode the content of csv
|
||||
encoded = base64.b64encode(f.read())
|
||||
|
||||
save_file( # call save_file function to upload the file
|
||||
fname=csv_filename,
|
||||
content=encoded,
|
||||
dt='',
|
||||
dn=docname,
|
||||
df=docfield,
|
||||
folder=None,
|
||||
decode=True,
|
||||
is_private=0)
|
||||
|
||||
|
||||
def background_enqueue_run(report, filters=None, user=None):
|
||||
report_instance = frappe.get_doc({"docType": "Background Report"})
|
||||
report_instance.insert(ignore_permissions = True)
|
||||
return generate_report_result(report, filters, user)
|
||||
track_instance = \
|
||||
frappe.get_doc({
|
||||
"doctype": "Background Report",
|
||||
"filters": "filters to be saved",
|
||||
"status":"open",
|
||||
"report_start_time": frappe.utils.now()
|
||||
})
|
||||
track_instance.insert(ignore_permissions=True)
|
||||
frappe.db.commit()
|
||||
results = generate_report_result(report, filters, user)
|
||||
print results
|
||||
if results:
|
||||
create_csv_file(results['columns'], results['result'])
|
||||
track_instance.status = "done"
|
||||
track_instance.view_report = "http://google.com"
|
||||
else:
|
||||
track_instance.status = "error"
|
||||
|
||||
track_instance.report_end_time = frappe.utils.now()
|
||||
track_instance.save()
|
||||
frappe.db.commit()
|
||||
return results
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
|
|
@ -130,7 +177,7 @@ def run(report_name, filters=None, user=None):
|
|||
raise_exception=True)
|
||||
|
||||
if report.background_report:
|
||||
return background_enqueue_run(report, filters, user)
|
||||
return background_enqueue_run(report, filters, report, user)
|
||||
#enqueue('frappe.desk.query_report.background_enqueue_run', queue='background')
|
||||
# frappe.msgprint(_("This is a background job"), raise_exception=True)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -70,13 +70,16 @@ def enqueue(method, queue='default', timeout=300, event=None,
|
|||
|
||||
def enqueue_doc(doctype, name=None, method=None, queue='default', timeout=300,
|
||||
now=False, **kwargs):
|
||||
|
||||
'''Enqueue a method to be run on a document'''
|
||||
enqueue('frappe.utils.background_jobs.run_doc_method', doctype=doctype, name=name,
|
||||
doc_method=method, queue=queue, timeout=timeout, now=now, **kwargs)
|
||||
|
||||
|
||||
def run_doc_method(doctype, name, doc_method, **kwargs):
|
||||
getattr(frappe.get_doc(doctype, name), doc_method)(**kwargs)
|
||||
|
||||
|
||||
def execute_job(site, method, event, job_name, kwargs, user=None, async=True, retry=0):
|
||||
'''Executes job in a worker, performs commit/rollback and logs if there is any error'''
|
||||
from frappe.utils.scheduler import log
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue