refactor: refactor contextual print setting implementation

This commit is contained in:
prssanna 2020-10-29 14:19:00 +05:30
parent 52eebb4585
commit 7841dd9461
7 changed files with 34 additions and 86 deletions

View file

@ -88,7 +88,6 @@ def get_bootinfo():
bootinfo.frequently_visited_links = frequently_visited_links()
bootinfo.link_preview_doctypes = get_link_preview_doctypes()
bootinfo.additional_filters_config = get_additional_filters_from_hooks()
bootinfo.additional_print_settings = get_additional_print_settings_from_hooks()
return bootinfo
@ -309,10 +308,3 @@ def get_additional_filters_from_hooks():
return filter_config
def get_additional_print_settings_from_hooks():
settings = frappe._dict()
hooks = frappe.get_hooks('additional_print_settings')
for hook in hooks:
settings.update(frappe.get_attr(hook)())
return settings

View file

@ -17,7 +17,7 @@ class Note(Document):
# expire this notification in a week (default)
self.expire_notification_on = frappe.utils.add_days(self.creation, 7)
def before_print(self):
def before_print(self, settings=None):
self.print_heading = self.name
self.sub_heading = ""

View file

@ -61,11 +61,6 @@ frappe.ui.form.PrintView = class {
() => this.printit(), 'printer'
);
// this.page.add_button(
// __('Form'),
// () => frappe.set_route('Form', this.frm.doctype, this.frm.docname),
// );
this.page.add_button(
__('Full Page'),
() => this.render_page('/printview?'),
@ -85,9 +80,7 @@ frappe.ui.form.PrintView = class {
}
setup_sidebar() {
this.sidebar = $(`<div class="print-preview-sidebar">`).appendTo(
this.page.sidebar
);
this.sidebar = this.page.sidebar.addClass('print-preview-sidebar');
this.print_sel = this.add_sidebar_item(
{
@ -153,7 +146,6 @@ frappe.ui.form.PrintView = class {
field.set_input(df.default);
}
return field;
}
@ -212,14 +204,12 @@ frappe.ui.form.PrintView = class {
setup_additional_settings() {
this.additional_settings = {};
this.sidebar_dynamic_section.empty();
if (frappe.boot.additional_print_settings) {
frappe
.xcall('frappe.printing.page.print.print.get_settings_to_show', {
doctype: this.frm.doc.doctype,
docname: this.frm.doc.name
})
.then((settings) => this.add_settings_to_sidebar(settings));
}
frappe
.xcall('frappe.printing.page.print.print.get_print_settings_to_show', {
doctype: this.frm.doc.doctype,
docname: this.frm.doc.name
})
.then((settings) => this.add_settings_to_sidebar(settings));
}
add_settings_to_sidebar(settings) {
@ -231,31 +221,8 @@ frappe.ui.form.PrintView = class {
this.additional_settings[field.df.fieldname] = val;
this.preview();
},
}, true)
}, true);
}
// for (let key of Object.keys(settings)) {
// const setting = settings[key];
// this.additional_settings[key] = {
// set_template: setting.set_template,
// value: setting.value,
// child_field: setting.child_field,
// };
// let field = this.add_sidebar_item(
// {
// fieldname: key,
// label: setting.label,
// fieldtype: setting.fieldtype,
// change: () => {
// const val = field.get_value();
// this.additional_settings[field.df.fieldname].value = val;
// this.preview();
// },
// },
// setting.value,
// true
// );
// }
}
edit_print_format() {

View file

@ -1,9 +1,8 @@
import frappe
@frappe.whitelist()
def get_settings_to_show(doctype, docname):
def get_print_settings_to_show(doctype, docname):
doc = frappe.get_doc(doctype, docname)
# settings_config = frappe.parse_json(settings_config)
print_settings = frappe.get_single('Print Settings')
if hasattr(doc, 'get_print_settings'):
@ -17,15 +16,4 @@ def get_settings_to_show(doctype, docname):
df.default = print_settings.get(fieldname)
print_settings_fields.append(df)
# for key in settings_config:
# config = frappe._dict(settings_config[key])
# if frappe.get_attr(config.condition)(doc):
# df = print_settings.meta.get_field(key)
# settings[key] = {
# 'fieldtype': df.fieldtype,
# 'label': df.label,
# 'default': print_settings.get(key),
# # 'child_field': config.child_field,
# # 'set_template': config.set_template
# }
return print_settings_fields

View file

@ -33,7 +33,9 @@
}
}
.print-preview-sidebar {
.layout-side-section.print-preview-sidebar {
padding-right: var(--padding-md);
.clearfix {
display: none;
}
@ -45,8 +47,8 @@
}
.icon {
width: 14px;
top: 6px;
width: 13px;
top: 7px;
right: 5px;
}
}

View file

@ -40,10 +40,8 @@
<tr>
<th style="width: 40px" class="table-sr">{{ _("Sr") }}</th>
{% for tdf in visible_columns %}
{% if (data and not data[0].flags.compact_item_print) or tdf.fieldname in doc.get(df.fieldname)[0].flags.compact_item_fields %}
<th style="width: {{ get_width(tdf) }};" class="{{ get_align_class(tdf) }}" {{ fieldmeta(df) }}>
{{ _(tdf.label) }}</th>
{% endif %}
<th style="width: {{ get_width(tdf) }};" class="{{ get_align_class(tdf) }}" {{ fieldmeta(df) }}>
{{ _(tdf.label) }}</th>
{% endfor %}
</tr>
</thead>
@ -52,10 +50,13 @@
<tr>
<td class="table-sr">{{ d.idx }}</td>
{% for tdf in visible_columns %}
{% if not doc.get(df.fieldname)[0].flags.compact_item_print or tdf.fieldname in doc.get(df.fieldname)[0].flags.compact_item_fields %}
<td class="{{ get_align_class(tdf) }}" {{ fieldmeta(df) }}>
<div class="value">{{ print_value(tdf, d, doc, visible_columns) }}</div></td>
{% endif %}
{% if doc.child_print_templates %}
{%- set child_templates = doc.child_print_templates.get(df.fieldname) -%}
<div class="value">{{ print_value(tdf, d, doc, visible_columns, child_templates) }}</div></td>
{% else %}
<div class="value">{{ print_value(tdf, d, doc, visible_columns) }}</div></td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
@ -117,10 +118,9 @@ data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}"
{{ "" }}
{%- endmacro -%}
{%- macro print_value(df, doc, parent_doc=None, visible_columns=None) -%}
{% if doc.print_templates and
doc.print_templates.get(df.fieldname) %}
{% include doc.print_templates[df.fieldname] %}
{%- macro print_value(df, doc, parent_doc=None, visible_columns=None, child_templates=None) -%}
{% if child_templates and child_templates[df.fieldname] %}
{% include child_templates[df.fieldname] %}
{% elif df.fieldtype=="Check" %}
<i class="{{ 'fa fa-check' if doc[df.fieldname] }}"></i>
{% elif df.fieldtype=="Image" %}

View file

@ -92,10 +92,7 @@ def get_rendered_template(doc, name=None, print_format=None, meta=None,
settings=None):
print_settings = frappe.get_single("Print Settings").as_dict()
# print_settings.update(settings.value or {})
# if settings:
# print_settings = handle_contextual_settings(doc, print_settings, settings)
print_settings.update(settings or {})
if isinstance(no_letterhead, string_types):
no_letterhead = cint(no_letterhead)
@ -116,7 +113,7 @@ def get_rendered_template(doc, name=None, print_format=None, meta=None,
if doc.docstatus==2 and not cint(print_settings.allow_print_for_cancelled):
frappe.throw(_("Not allowed to print cancelled documents"), frappe.PermissionError)
doc.run_method("before_print")
doc.run_method("before_print", print_settings)
if not hasattr(doc, "print_heading"): doc.print_heading = None
if not hasattr(doc, "sub_heading"): doc.sub_heading = None
@ -323,6 +320,7 @@ def make_layout(doc, meta, format_data=None):
original = meta.get_field(df.fieldname)
if original:
newdf = original.as_dict()
newdf.hide_in_print_layout = original.get('hide_in_print_layout')
newdf.update(df)
df = newdf
@ -392,10 +390,6 @@ def is_visible(df, doc):
if df.fieldtype in ("Section Break", "Column Break", "Button"):
return False
if hasattr(doc, "hide_in_print_layout"):
if df.fieldname in doc.hide_in_print_layout:
return False
if (df.permlevel or 0) > 0 and not doc.has_permlevel_access_to(df.fieldname, df):
return False
@ -469,7 +463,12 @@ def get_visible_columns(data, table_meta, df):
"""Returns list of visible columns based on print_hide and if all columns have value."""
columns = []
doc = data[0] or frappe.new_doc(df.options)
hide_in_print_layout = df.get('hide_in_print_layout') or []
def add_column(col_df):
if col_df.fieldname in hide_in_print_layout:
return False
return is_visible(col_df, doc) \
and column_has_value(data, col_df.get("fieldname"), col_df)