initial setup for background report

This commit is contained in:
Shrihari Shastry 2018-06-12 11:22:34 +05:30 committed by Shridhar Patil
parent e6adf91029
commit ed3fdc4337
4 changed files with 126 additions and 8 deletions

View file

@ -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",

View file

@ -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"

View file

@ -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:

View file

@ -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