Beispiel #1
0
def get_context(context):
	"""Build context for print"""
	if not ((frappe.form_dict.doctype and frappe.form_dict.name) or frappe.form_dict.doc):
		return {
			"body": """<h1>Error</h1>
				<p>Parameters doctype and name required</p>
				<pre>%s</pre>""" % repr(frappe.form_dict)
		}

	if frappe.form_dict.doc:
		doc = frappe.form_dict.doc
	else:
		doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)

	meta = frappe.get_meta(doc.doctype)

	print_format = get_print_format_doc(None, meta = meta)

	make_access_log(doctype=frappe.form_dict.doctype, document=frappe.form_dict.name, file_type='PDF', method='Print')

	return {
		"body": get_rendered_template(doc, print_format = print_format,
			meta=meta, trigger_print = frappe.form_dict.trigger_print,
			no_letterhead=frappe.form_dict.no_letterhead),
		"css": get_print_style(frappe.form_dict.style, print_format),
		"comment": frappe.session.user,
		"title": doc.get(meta.title_field) if meta.title_field else doc.name,
		"has_rtl": True if frappe.local.lang in ["ar", "he", "fa"] else False
	}
Beispiel #2
0
def export_data(
    doctype=None,
    parent_doctype=None,
    all_doctypes=True,
    with_data=False,
    select_columns=None,
    file_type="CSV",
    template=False,
    filters=None,
):
    _doctype = doctype
    if isinstance(_doctype, list):
        _doctype = _doctype[0]
    make_access_log(
        doctype=_doctype,
        file_type=file_type,
        columns=select_columns,
        filters=filters,
        method=parent_doctype,
    )
    exporter = DataExporter(
        doctype=doctype,
        parent_doctype=parent_doctype,
        all_doctypes=all_doctypes,
        with_data=with_data,
        select_columns=select_columns,
        file_type=file_type,
        template=template,
        filters=filters,
    )
    exporter.build_response()
Beispiel #3
0
def download_backup(path):
	try:
		frappe.only_for(("System Manager", "Administrator"))
		make_access_log(report_name='Backup')
	except frappe.PermissionError:
		raise Forbidden(_("You need to be logged in and have System Manager Role to be able to access backups."))

	return send_private_file(path)
Beispiel #4
0
def get_context(context):
	"""Build context for print"""
	if not ((frappe.form_dict.doctype and frappe.form_dict.name) or frappe.form_dict.doc):
		return {
			"body": sanitize_html("""<h1>Error</h1>
				<p>Parameters doctype and name required</p>
				<pre>%s</pre>""" % repr(frappe.form_dict))
		}

	if frappe.form_dict.doc:
		doc = frappe.form_dict.doc
	else:
		doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)

	settings = frappe.parse_json(frappe.form_dict.settings)

	letterhead = frappe.form_dict.letterhead or None
	
	#For setting print datetime if it's pick_list	
	if doc.doctype=="Pick List":
		if doc.print_date_time or doc.amended_from:
			doc.pl_text = "REPRINTED"
			
		doc.print_date_time = datetime.datetime.now(timezone('US/Pacific')).strftime("%Y-%m-%d %H:%M:%S")
		doc.track_print_user = frappe.db.get_value("User", frappe.session.user, "full_name")
		
		#Get the doc gain in case it is loaded from frappe.form_dict
		sdoc = frappe.get_doc(doc.doctype, doc.name)
		sdoc.update({
			"print_date_time": doc.print_date_time,
			"track_print_user": doc.track_print_user,
			"pl_text": doc.pl_text,	
		})
		sdoc.save()
	
	meta = frappe.get_meta(doc.doctype)

	print_format = get_print_format_doc(None, meta = meta)

	make_access_log(doctype=frappe.form_dict.doctype, document=frappe.form_dict.name, file_type='PDF', method='Print')

	return {
		"body": get_rendered_template(doc, print_format = print_format,
			meta=meta, trigger_print = frappe.form_dict.trigger_print,
			no_letterhead=frappe.form_dict.no_letterhead, letterhead=letterhead,
			settings=settings),
		"css": get_print_style(frappe.form_dict.style, print_format),
		"comment": frappe.session.user,
		"title": doc.get(meta.title_field) if meta.title_field else doc.name,
		"lang": frappe.local.lang,
		"layout_direction": "rtl" if is_rtl() else "ltr"
	}
Beispiel #5
0
def get_context(context):
    """Build context for print"""
    if not ((frappe.form_dict.doctype and frappe.form_dict.name)
            or frappe.form_dict.doc):
        return {
            "body":
            sanitize_html("""<h1>Error</h1>
				<p>Parameters doctype and name required</p>
				<pre>%s</pre>""" % repr(frappe.form_dict))
        }

    if frappe.form_dict.doc:
        doc = frappe.form_dict.doc
    else:
        doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)

    settings = frappe.parse_json(frappe.form_dict.settings)

    letterhead = frappe.form_dict.letterhead or None

    meta = frappe.get_meta(doc.doctype)

    print_format = get_print_format_doc(None, meta=meta)

    make_access_log(doctype=frappe.form_dict.doctype,
                    document=frappe.form_dict.name,
                    file_type='PDF',
                    method='Print')

    return {
        "body":
        get_rendered_template(doc,
                              print_format=print_format,
                              meta=meta,
                              trigger_print=frappe.form_dict.trigger_print,
                              no_letterhead=frappe.form_dict.no_letterhead,
                              letterhead=letterhead,
                              settings=settings),
        "css":
        get_print_style(frappe.form_dict.style, print_format),
        "comment":
        frappe.session.user,
        "title":
        doc.get(meta.title_field) if meta.title_field else doc.name,
        "lang":
        frappe.local.lang,
        "layout_direction":
        "rtl" if is_rtl() else "ltr"
    }
    def test_make_full_access_log(self):
        self.maxDiff = None

        # test if all fields maintain data: html page and filters are converted?
        make_access_log(doctype=self.test_doctype,
                        document=self.test_document,
                        report_name=self.test_report_name,
                        page=self.test_html_template,
                        file_type=self.test_file_type,
                        method=self.test_method,
                        filters=self.test_filters)

        last_doc = frappe.get_last_doc('Access Log')
        self.assertEqual(last_doc.filters, cstr(self.test_filters))
        self.assertEqual(self.test_doctype, last_doc.export_from)
        self.assertEqual(self.test_document, last_doc.reference_document)
Beispiel #7
0
def download_private_file(path):
	"""Checks permissions and sends back private file"""

	files = frappe.db.get_all('File', {'file_url': path})
	can_access = False
	# this file might be attached to multiple documents
	# if the file is accessible from any one of those documents
	# then it should be downloadable
	for f in files:
		_file = frappe.get_doc("File", f)
		can_access = _file.is_downloadable()
		if can_access:
			make_access_log(doctype='File', document=_file.name, file_type=os.path.splitext(path)[-1][1:])
			break

	if not can_access:
		raise Forbidden(_("You don't have permission to access this file"))

	return send_private_file(path.split("/private", 1)[1])
Beispiel #8
0
def export_query():
	"""export from report builder"""
	title = frappe.form_dict.title
	frappe.form_dict.pop('title', None)

	form_params = get_form_params()
	form_params["limit_page_length"] = None
	form_params["as_list"] = True
	doctype = form_params.doctype
	add_totals_row = None
	file_format_type = form_params["file_format_type"]
	title = title or doctype

	del form_params["doctype"]
	del form_params["file_format_type"]

	if 'add_totals_row' in form_params and form_params['add_totals_row']=='1':
		add_totals_row = 1
		del form_params["add_totals_row"]

	frappe.permissions.can_export(doctype, raise_exception=True)

	if 'selected_items' in form_params:
		si = json.loads(frappe.form_dict.get('selected_items'))
		form_params["filters"] = {"name": ("in", si)}
		del form_params["selected_items"]

	make_access_log(doctype=doctype,
		file_type=file_format_type,
		report_name=form_params.report_name,
		filters=form_params.filters)

	db_query = DatabaseQuery(doctype)
	ret = db_query.execute(**form_params)

	if add_totals_row:
		ret = append_totals_row(ret)

	data = [['Sr'] + get_labels(db_query.fields, doctype)]
	for i, row in enumerate(ret):
		data.append([i+1] + list(row))

	data = handle_duration_fieldtype_values(doctype, data, db_query.fields)

	if file_format_type == "CSV":

		# convert to csv
		import csv
		from frappe.utils.xlsxutils import handle_html

		f = StringIO()
		writer = csv.writer(f)
		for r in data:
			# encode only unicode type strings and not int, floats etc.
			writer.writerow([handle_html(frappe.as_unicode(v)) \
				if isinstance(v, string_types) else v for v in r])

		f.seek(0)
		frappe.response['result'] = cstr(f.read())
		frappe.response['type'] = 'csv'
		frappe.response['doctype'] = title

	elif file_format_type == "Excel":

		from frappe.utils.xlsxutils import make_xlsx
		xlsx_file = make_xlsx(data, doctype)

		frappe.response['filename'] = title + '.xlsx'
		frappe.response['filecontent'] = xlsx_file.getvalue()
		frappe.response['type'] = 'binary'
Beispiel #9
0
def report_to_pdf(html, orientation="Landscape"):
    make_access_log(file_type="PDF", method="PDF", page=html)
    frappe.local.response.filename = "report.pdf"
    frappe.local.response.filecontent = get_pdf(html,
                                                {"orientation": orientation})
    frappe.local.response.type = "pdf"