From d8f7de9946fb9e6a4e8e86d809cb56bacbcd0b3d Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Thu, 15 Mar 2018 12:48:32 +0530 Subject: [PATCH 01/23] fixed patch for hub --- erpnext/agriculture/doctype/crop_cycle/crop_cycle.py | 1 + erpnext/patches.txt | 1 + erpnext/patches/v10_0/update_hub_connector_domain.py | 8 ++++++++ 3 files changed, 10 insertions(+) create mode 100644 erpnext/patches/v10_0/update_hub_connector_domain.py diff --git a/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py b/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py index 21dfe317b7..ea344ed351 100644 --- a/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py +++ b/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py @@ -50,6 +50,7 @@ class CropCycle(Document): project.expected_start_date = self.start_date project.expected_end_date = frappe.utils.data.add_days(self.start_date, period-1) project.insert() + print(project) self.create_task(crop_tasks, project.as_dict.im_self.name, self.start_date) return project.as_dict.im_self.name diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d06b405821..512e440a93 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -495,3 +495,4 @@ erpnext.patches.v10_0.set_auto_created_serial_no_in_stock_entry erpnext.patches.v10_0.update_territory_and_customer_group erpnext.patches.v10_0.update_warehouse_address_details erpnext.patches.v10_0.update_reserved_qty_for_purchase_order +erpnext.patches.v10_0.update_hub_connector_domain diff --git a/erpnext/patches/v10_0/update_hub_connector_domain.py b/erpnext/patches/v10_0/update_hub_connector_domain.py new file mode 100644 index 0000000000..fc3c29403f --- /dev/null +++ b/erpnext/patches/v10_0/update_hub_connector_domain.py @@ -0,0 +1,8 @@ +import frappe + +def execute(): + frappe.db.sql(""" + UPDATE `tabData Migration Connector` + SET hostname = 'https://hubmarket.org' + WHERE connector_name = 'Hub Connector' + """) \ No newline at end of file From 94b41ea4f6871185a00e46d86d6483e6b8a4fcb9 Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Thu, 15 Mar 2018 12:53:22 +0530 Subject: [PATCH 02/23] removed debugging --- erpnext/agriculture/doctype/crop_cycle/crop_cycle.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py b/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py index ea344ed351..21dfe317b7 100644 --- a/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py +++ b/erpnext/agriculture/doctype/crop_cycle/crop_cycle.py @@ -50,7 +50,6 @@ class CropCycle(Document): project.expected_start_date = self.start_date project.expected_end_date = frappe.utils.data.add_days(self.start_date, period-1) project.insert() - print(project) self.create_task(crop_tasks, project.as_dict.im_self.name, self.start_date) return project.as_dict.im_self.name From 633a39144d218301d3be4649edac0c19af00ae1c Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 12 Mar 2018 11:10:32 +0530 Subject: [PATCH 03/23] addition of student report card generation tool --- .../__init__.py | 0 .../student_report_generation_tool.html | 82 +++ .../student_report_generation_tool.js | 32 ++ .../student_report_generation_tool.json | 485 ++++++++++++++++++ .../student_report_generation_tool.py | 75 +++ .../test_student_report_generation_tool.js | 23 + .../test_student_report_generation_tool.py | 10 + .../course_wise_assessment_report.py | 29 +- 8 files changed, 726 insertions(+), 10 deletions(-) create mode 100644 erpnext/education/doctype/student_report_generation_tool/__init__.py create mode 100644 erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html create mode 100644 erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js create mode 100644 erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json create mode 100644 erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py create mode 100644 erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.js create mode 100644 erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.py diff --git a/erpnext/education/doctype/student_report_generation_tool/__init__.py b/erpnext/education/doctype/student_report_generation_tool/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html new file mode 100644 index 0000000000..e5a7682082 --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html @@ -0,0 +1,82 @@ + + +
+

{{ _("Student Report Card") }}

+
+ {{ _("Student: ") }} {{ frappe.db.get_value("Student", doc.students[0], "title") }}
+ {{ _("Program: ") }} {{ doc.program }}
+ {{ _("Assessment Group: ") }} {{ doc.assessment_group }} +
+ +{% for course in courses %} +
+
+ Course: {{ course }} ({{ frappe.db.get_value("Course", course, "course_name") }}) +
+ + + + + {% for assessment_group in assessment_groups %} + + {% endfor %} + + + + {% for criteria in course_criteria[course] %} + + + {% for assessment_group in assessment_groups %} + {% if (assessment_result.get(course) and assessment_result.get(course).get(assessment_group) and assessment_result.get(course).get(assessment_group).get(criteria)) %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + +
Assessment Criteria {{ assessment_group }}
{{ criteria }} {{ assessment_result.get(course).get(assessment_group).get(criteria).get("grade") }}
+{% endfor %} + +
+

{{ _("Attendance")}}


+
+ Present {{ doc.present_days }} out of {{ doc.max_days }} +
+ +
+

{{ _("Parents Meeting Attendance")}}


+
+ Present {{ doc.parents_attendance }} out of {{ doc.parents_meeting }} +
+
\ No newline at end of file diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js new file mode 100644 index 0000000000..11aae17dfa --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js @@ -0,0 +1,32 @@ +// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Student Report Generation Tool', { + onload: function(frm) { + frm.set_query("academic_term",function(){ + return{ + "filters":{ + "academic_year": frm.doc.academic_year + } + }; + }); + frm.set_query("assessment_group", function() { + return{ + filters: { + "is_group": 1 + } + }; + }); + }, + + refresh: function(frm) { + frm.disable_save(); + frm.page.clear_indicator(); + frm.fields_dict.preview_report_card.$input.addClass("btn-primary"); + }, + + preview_report_card: function(frm) { + let url = "/api/method/erpnext.education.doctype.student_report_generation_tool.student_report_generation_tool.preview_report_card"; + open_url_post(url, frm.doc); + } +}); diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json new file mode 100644 index 0000000000..63f1a897fe --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json @@ -0,0 +1,485 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2018-01-15 15:36:32.830069", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", + "fieldtype": "Link", + "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": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student", + "fieldtype": "Link", + "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": "Student", + "length": 0, + "no_copy": 0, + "options": "Student", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "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, + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "assessment_group", + "fieldtype": "Link", + "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": "Assessment Group", + "length": 0, + "no_copy": 0, + "options": "Assessment Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_5", + "fieldtype": "Section Break", + "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": "Attendance Print Section", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "max_days", + "fieldtype": "Data", + "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": "Institution Open (Days)", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "present_days", + "fieldtype": "Data", + "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": "Student Present (Days)", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_10", + "fieldtype": "Column Break", + "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, + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "parents_meeting", + "fieldtype": "Data", + "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": "Total Parent's Meeting", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "parents_attendance", + "fieldtype": "Data", + "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": "Parent Present", + "length": 0, + "no_copy": 0, + "options": "", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "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, + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "preview_report_card", + "fieldtype": "Button", + "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": "Print Report Card", + "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, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 1, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2018-03-16 01:56:31.095554", + "modified_by": "Administrator", + "module": "Education", + "name": "Student Report Generation Tool", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "set_user_permissions": 0, + "share": 0, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py new file mode 100644 index 0000000000..60f0c8f918 --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +from erpnext.education.api import get_grade +from frappe.utils.pdf import get_pdf +from erpnext.education.report.course_wise_assessment_report.course_wise_assessment_report import get_formatted_result +from erpnext.education.report.course_wise_assessment_report.course_wise_assessment_report import get_child_assessment_groups + + +class StudentReportGenerationTool(Document): + pass + + +@frappe.whitelist() +def preview_report_card(program, assessment_group, academic_year, academic_term=None, student=None, student_group=None, + max_days=None, present_days=None, parents_meeting=None, parents_attendance=None): + doc = frappe._dict() + + # doc.program = program + doc.assessment_group = assessment_group + doc.academic_year = academic_year + doc.max_days = max_days + doc.present_days = present_days + doc.parents_meeting = parents_meeting + doc.parents_attendance = parents_attendance + if academic_term: + doc.academic_term = academic_term + if student_group: + doc.student_group = student_group + if student: + doc.students = [student] + + if not doc.students and not doc.student_group: + frappe.throw("Please select the Student or Student Group") + + values = get_formatted_result(doc, get_course=True, get_all_assessment_groups=True) + student_details = values.get("student_details") + assessment_result = values.get("assessment_result").get(doc.students[0]) + courses = values.get("course_dict") + course_criteria = get_courses_criteria(courses) + assessment_groups = get_child_assessment_groups(doc.assessment_group) + + if program: + doc.program = program + template = "erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html" + base_template_path = "frappe/www/printview.html" + + html = frappe.render_template(template, + { + "doc": doc, + "assessment_result": assessment_result, + "courses": courses, + "assessment_groups": assessment_groups, + "course_criteria": course_criteria + }) + + final_template = frappe.render_template(base_template_path, { + "body": html, + "title": "Report Card" + }) + + frappe.response.filename = "Report Card.pdf" + frappe.response.filecontent = get_pdf(final_template) + frappe.response.type = "download" + +def get_courses_criteria(courses): + course_criteria = frappe._dict() + for course in courses: + course_criteria[course] = [d.assessment_criteria for d in frappe.get_all("Course Assessment Criteria", + fields=["assessment_criteria"], filters={"parent": course})] + return course_criteria diff --git a/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.js b/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.js new file mode 100644 index 0000000000..10be092bb9 --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Student Report Generation Tool", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Student Report Generation Tool + () => frappe.tests.make('Student Report Generation Tool', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.py b/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.py new file mode 100644 index 0000000000..417816642e --- /dev/null +++ b/erpnext/education/doctype/student_report_generation_tool/test_student_report_generation_tool.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestStudentReportGenerationTool(unittest.TestCase): + pass diff --git a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py index a50ad7b91e..5badda6565 100644 --- a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py +++ b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py @@ -60,7 +60,7 @@ def execute(filters=None): return columns, data, None, chart -def get_formatted_result(args, get_assessment_criteria=False, get_course=False): +def get_formatted_result(args, get_assessment_criteria=False, get_course=False, get_all_assessment_groups=False): cond, cond1, cond2, cond3, cond4 = " ", " ", " ", " ", " " args_list = [args.academic_year] @@ -77,15 +77,9 @@ def get_formatted_result(args, get_assessment_criteria=False, get_course=False): args_list.append(args.student_group) create_total_dict = False - group_type = frappe.get_value("Assessment Group", args.assessment_group, "is_group") - if group_type: - from frappe.desk.treeview import get_children - assessment_groups = [d.get("value") for d in get_children("Assessment Group", - args.assessment_group) if d.get("value") and not d.get("expandable")] - cond3 = " and ar.assessment_group in (%s)"%(', '.join(['%s']*len(assessment_groups))) - else: - assessment_groups = [args.assessment_group] - cond3 = " and ar.assessment_group=%s" + + assessment_groups = get_child_assessment_groups(args.assessment_group) + cond3 = " and ar.assessment_group in (%s)"%(', '.join(['%s']*len(assessment_groups))) args_list += assessment_groups if args.students: @@ -156,6 +150,9 @@ def get_formatted_result(args, get_assessment_criteria=False, get_course=False): # create the total of all the assessment groups criteria-wise elif create_total_dict: + if get_all_assessment_groups: + formatted_assessment_result[result.student][result.course][result.assessment_group]\ + [result.assessment_criteria] = assessment_criteria_details if not formatted_assessment_result[result.student][result.course][args.assessment_group]: formatted_assessment_result[result.student][result.course][args.assessment_group] = defaultdict(dict) formatted_assessment_result[result.student][result.course][args.assessment_group]\ @@ -238,3 +235,15 @@ def get_chart_data(grades, criteria_list, kounter): }, "type": 'bar', } + + +def get_child_assessment_groups(assessment_group): + assessment_groups = [] + group_type = frappe.get_value("Assessment Group", assessment_group, "is_group") + if group_type: + from frappe.desk.treeview import get_children + assessment_groups = [d.get("value") for d in get_children("Assessment Group", + assessment_group) if d.get("value") and not d.get("expandable")] + else: + assessment_groups = [args.assessment_group] + return assessment_groups From 4d347b1ca07df2df9770df2a4e4a4528fabc79bb Mon Sep 17 00:00:00 2001 From: Shreya Date: Mon, 19 Mar 2018 11:32:39 +0530 Subject: [PATCH 04/23] travis fix --- erpnext/controllers/selling_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 606cc90866..2a22b32637 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -330,7 +330,7 @@ class SellingController(StockController): self.make_sl_entries(sl_entries) def set_po_nos(self): - if self.doctype in ("Delivery Note", "Sales Invoice"): + if self.doctype in ("Delivery Note", "Sales Invoice") and hasattr(self, "items"): ref_fieldname = "against_sales_order" if self.doctype == "Delivery Note" else "sales_order" sales_orders = list(set([d.get(ref_fieldname) for d in self.items if d.get(ref_fieldname)])) if sales_orders: From 5042dd32da74df5093b31527c89148256b114aec Mon Sep 17 00:00:00 2001 From: Shreya Date: Mon, 19 Mar 2018 17:45:39 +0530 Subject: [PATCH 05/23] undefined args error --- .../course_wise_assessment_report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py index 5badda6565..ce581486ec 100644 --- a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py +++ b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py @@ -245,5 +245,5 @@ def get_child_assessment_groups(assessment_group): assessment_groups = [d.get("value") for d in get_children("Assessment Group", assessment_group) if d.get("value") and not d.get("expandable")] else: - assessment_groups = [args.assessment_group] + assessment_groups = [assessment_group] return assessment_groups From 9602bf4ba3566479fb10e590dad0e4f082122eb8 Mon Sep 17 00:00:00 2001 From: Shreya Date: Mon, 19 Mar 2018 18:17:54 +0530 Subject: [PATCH 06/23] patch fix --- erpnext/patches/v10_0/update_hub_connector_domain.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/patches/v10_0/update_hub_connector_domain.py b/erpnext/patches/v10_0/update_hub_connector_domain.py index fc3c29403f..808ae77129 100644 --- a/erpnext/patches/v10_0/update_hub_connector_domain.py +++ b/erpnext/patches/v10_0/update_hub_connector_domain.py @@ -1,8 +1,9 @@ import frappe def execute(): - frappe.db.sql(""" - UPDATE `tabData Migration Connector` - SET hostname = 'https://hubmarket.org' - WHERE connector_name = 'Hub Connector' - """) \ No newline at end of file + if frappe.db.table_exists("Data Migration Connector"): + frappe.db.sql(""" + UPDATE `tabData Migration Connector` + SET hostname = 'https://hubmarket.org' + WHERE connector_name = 'Hub Connector' + """) \ No newline at end of file From 2777fd4332dc010afee4e9bf9b1fbcff527e6e5f Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 19 Mar 2018 18:29:01 +0530 Subject: [PATCH 07/23] [fix] validate minimum transaction amount in Payment Request for selected payment gateway (#13328) --- erpnext/accounts/doctype/payment_request/payment_request.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 21ddb10b4d..ee20a43d8d 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -78,6 +78,9 @@ class PaymentRequest(Document): controller = get_payment_gateway_controller(self.payment_gateway) controller.validate_transaction_currency(self.currency) + if hasattr(controller, 'validate_minimum_transaction_amount'): + controller.validate_minimum_transaction_amount(self.currency, self.grand_total) + return controller.get_payment_url(**{ "amount": flt(self.grand_total, self.precision("grand_total")), "title": data.company.encode("utf-8"), From ecc4fdd3ef98731cc0bbef54570b5d963e0e8694 Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Mon, 19 Mar 2018 22:20:42 +0530 Subject: [PATCH 08/23] Check Set Sales Target Item exists in User Slides --- erpnext/utilities/user_progress.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py index cdb0e14f30..9f5935e3cb 100644 --- a/erpnext/utilities/user_progress.py +++ b/erpnext/utilities/user_progress.py @@ -12,10 +12,13 @@ def get_slide_settings(): currency = defaults.get("currency") or '' doc = frappe.get_doc("Setup Progress") - item = [d for d in doc.get("actions") if d.action_name == "Set Sales Target"][0] - if not item.action_document: - item.action_document = company - doc.save() + item = [d for d in doc.get("actions") if d.action_name == "Set Sales Target"] + + if len(item): + item = item[0] + if not item.action_document: + item.action_document = company + doc.save() # Initial state of slides return [ From 8a8966ce9b41819eda188195c00090527d5db36c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 20 Mar 2018 11:19:38 +0530 Subject: [PATCH 09/23] minor fix --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 2 +- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 83045eae4e..d6b12f1b47 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -131,7 +131,7 @@ def get_serial_no_for_item(args): "name": args.name, "serial_no": args.serial_no }) - if args.get("parenttype") in ("Sales Invoice", "Delivery Note") and args.stock_qty > 0: + if args.get("parenttype") in ("Sales Invoice", "Delivery Note") and flt(args.stock_qty) > 0: item_details.serial_no = get_serial_no(args) return item_details diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 2bd14472f3..5b52bbba90 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -751,7 +751,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -4683,7 +4683,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2018-03-13 15:19:54.711885", + "modified": "2018-03-16 15:19:54.711885", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From c5b061834b89a2899bc491df0188bb5e8c80ea77 Mon Sep 17 00:00:00 2001 From: Zarrar Date: Tue, 20 Mar 2018 13:06:18 +0530 Subject: [PATCH 10/23] doctype dropdown rectify, validate series is set (#13305) --- erpnext/setup/doctype/naming_series/naming_series.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py index 45345846bc..c90a75f395 100644 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ b/erpnext/setup/doctype/naming_series/naming_series.py @@ -20,7 +20,7 @@ class NamingSeries(Document): + frappe.db.sql_list("""select dt from `tabCustom Field` where fieldname='naming_series'"""))) - doctypes = list(set(get_doctypes_with_read()) | set(doctypes)) + doctypes = list(set(get_doctypes_with_read()).intersection(set(doctypes))) prefixes = "" for d in doctypes: options = "" @@ -47,6 +47,7 @@ class NamingSeries(Document): def update_series(self, arg=None): """update series list""" + self.validate_series_set() self.check_duplicate() series_list = self.set_options.split("\n") @@ -60,6 +61,10 @@ class NamingSeries(Document): return self.get_transactions() + def validate_series_set(self): + if self.select_doc_for_series and not self.set_options: + frappe.throw(_("Please set the series to be used.")) + def set_series_for(self, doctype, ol): options = self.scrub_options_list(ol) From c672530210752fec35f8689d9024baab5f4fbcf8 Mon Sep 17 00:00:00 2001 From: Siddhi Sawant Date: Tue, 20 Mar 2018 14:31:14 +0530 Subject: [PATCH 11/23] [hotfix] Added 'Paid Amount' and 'Change Amount' in POS print formats (#13316) * Added 'Paid Amount' and 'Change Amount' in GST POS Invoice and POS Invoice print formats * Update gst_pos_invoice.json Updated its 'disabled' property. * Update pos_invoice.json Updated its 'disabled' property. * Shows change amount only if it exists * Updated disable property of print formats --- .../print_format/gst_pos_invoice/gst_pos_invoice.json | 4 ++-- erpnext/accounts/print_format/pos_invoice/pos_invoice.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json b/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json index 8d6cf3e2b6..2342f31976 100644 --- a/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json +++ b/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json @@ -7,10 +7,10 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "html": "\n\n

\n\t{{ doc.company }}
\n\t{% if doc.company_address_display %}\n\t\t{% set company_address = doc.company_address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{% if \"GSTIN\" not in company_address %}\n\t\t\t{{ company_address }}\n\t\t\t{{ _(\"GSTIN\") }}:{{ doc.company_gstin }}\n\t\t{% else %}\n\t\t\t{{ company_address.replace(\"GSTIN\", \"
GSTIN\") }}\n\t\t{% endif %}\n\t{% endif %}\n\t
\n\t{{ doc.select_print_heading or _(\"Invoice\") }}
\n

\n

\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
\n\t{% if doc.grand_total > 50000 %}\n\t\t{% set customer_address = doc.address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{{ _(\"Customer\") }}:
\n\t\t{{ doc.customer_name }}
\n\t\t{{ customer_address }}\n\t{% endif %}\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
{{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
{{ item.item_name }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.gst_hsn_code -%}\n\t\t\t\t\t
{{ _(\"HSN/SAC\") }}: {{ item.gst_hsn_code }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.serial_no -%}\n\t\t\t\t\t
{{ _(\"Serial No\") }}: {{ item.serial_no }}\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ item.qty }}
@ {{ item.rate }}
{{ item.get_formatted(\"amount\") }}
\n\n\t\n\t\t\n\t\t\t{% if doc.flags.show_inclusive_tax_in_print %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t {%- if not row.included_in_print_rate or doc.flags.show_inclusive_tax_in_print -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t {%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.rounded_total -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\n
\n\t\t\t\t\t{{ _(\"Total Excl. Tax\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"net_total\", doc) }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Total\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"total\", doc) }}\n\t\t\t\t
\n\t\t\t\t\t{{ row.description }}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t\t
\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Rounded Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"rounded_total\") }}\n\t\t\t
\n

Tax Breakup:

\n
\n\t{{ doc.other_charges_calculation }}\n
\n

{{ doc.terms or \"\" }}

\n

{{ _(\"Thank you, please visit again.\") }}

", + "html": "\n\n

\n\t{{ doc.company }}
\n\t{% if doc.company_address_display %}\n\t\t{% set company_address = doc.company_address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{% if \"GSTIN\" not in company_address %}\n\t\t\t{{ company_address }}\n\t\t\t{{ _(\"GSTIN\") }}:{{ doc.company_gstin }}\n\t\t{% else %}\n\t\t\t{{ company_address.replace(\"GSTIN\", \"
GSTIN\") }}\n\t\t{% endif %}\n\t{% endif %}\n\t
\n\t{{ doc.select_print_heading or _(\"Invoice\") }}
\n

\n

\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
\n\t{% if doc.grand_total > 50000 %}\n\t\t{% set customer_address = doc.address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{{ _(\"Customer\") }}:
\n\t\t{{ doc.customer_name }}
\n\t\t{{ customer_address }}\n\t{% endif %}\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
{{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
{{ item.item_name }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.gst_hsn_code -%}\n\t\t\t\t\t
{{ _(\"HSN/SAC\") }}: {{ item.gst_hsn_code }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.serial_no -%}\n\t\t\t\t\t
{{ _(\"Serial No\") }}: {{ item.serial_no }}\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ item.qty }}
@ {{ item.rate }}
{{ item.get_formatted(\"amount\") }}
\n\n\t\n\t\t\n\t\t\t{% if doc.flags.show_inclusive_tax_in_print %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t {%- if not row.included_in_print_rate or doc.flags.show_inclusive_tax_in_print -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t {%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.rounded_total -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t{%- if doc.change_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t{%- endif -%}\n\t\n
\n\t\t\t\t\t{{ _(\"Total Excl. Tax\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"net_total\", doc) }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Total\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"total\", doc) }}\n\t\t\t\t
\n\t\t\t\t\t{{ row.description }}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t\t
\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Rounded Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"rounded_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"paid_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Change Amount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"change_amount\") }}\n\t\t\t
\n

Tax Breakup:

\n
\n\t{{ doc.other_charges_calculation }}\n
\n

{{ doc.terms or \"\" }}

\n

{{ _(\"Thank you, please visit again.\") }}

", "idx": 0, "line_breaks": 0, - "modified": "2018-01-12 11:19:17.432600", + "modified": "2018-03-20 14:24:08.167930", "modified_by": "Administrator", "module": "Accounts", "name": "GST POS Invoice", diff --git a/erpnext/accounts/print_format/pos_invoice/pos_invoice.json b/erpnext/accounts/print_format/pos_invoice/pos_invoice.json index 1613462a49..0b15423bff 100644 --- a/erpnext/accounts/print_format/pos_invoice/pos_invoice.json +++ b/erpnext/accounts/print_format/pos_invoice/pos_invoice.json @@ -6,10 +6,10 @@ "doc_type": "Sales Invoice", "docstatus": 0, "doctype": "Print Format", - "html": "\n\n

\n\t{{ doc.company }}
\n\t{{ doc.select_print_heading or _(\"Invoice\") }}
\n

\n

\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
\n\t{{ _(\"Customer\") }}: {{ doc.customer_name }}\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
{{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
{{ item.item_name }}{%- endif -%}\n\t\t\t
{{ item.qty }}
@ {{ item.get_formatted(\"rate\") }}
{{ item.get_formatted(\"amount\") }}
\n\n\t\n\t\t\n\t\t\t{% if doc.flags.show_inclusive_tax_in_print %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t {%- if not row.included_in_print_rate or doc.flags.show_inclusive_tax_in_print -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t {%- endif -%}\n\t\t{%- endfor -%}\n\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.rounded_total -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\n
\n\t\t\t\t\t{{ _(\"Total Excl. Tax\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"net_total\", doc) }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Total\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"total\", doc) }}\n\t\t\t\t
\n\t\t\t\t\t{{ row.description }}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t\t
\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Rounded Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"rounded_total\") }}\n\t\t\t
\n
\n

{{ doc.terms or \"\" }}

\n

{{ _(\"Thank you, please visit again.\") }}

", + "html": "\n\n

\n\t{{ doc.company }}
\n\t{{ doc.select_print_heading or _(\"Invoice\") }}
\n

\n

\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
\n\t{{ _(\"Customer\") }}: {{ doc.customer_name }}\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
{{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
{{ item.item_name }}{%- endif -%}\n\t\t\t
{{ item.qty }}
@ {{ item.get_formatted(\"rate\") }}
{{ item.get_formatted(\"amount\") }}
\n\n\t\n\t\t\n\t\t\t{% if doc.flags.show_inclusive_tax_in_print %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t {%- if not row.included_in_print_rate or doc.flags.show_inclusive_tax_in_print -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t {%- endif -%}\n\t\t{%- endfor -%}\n\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.rounded_total -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.change_amount -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t{%- endif -%}\n\t\n
\n\t\t\t\t\t{{ _(\"Total Excl. Tax\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"net_total\", doc) }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Total\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"total\", doc) }}\n\t\t\t\t
\n\t\t\t\t\t{{ row.description }}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t\t
\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Rounded Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"rounded_total\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"paid_amount\") }}\n\t\t\t
\n\t\t\t\t\t{{ _(\"Change Amount\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"change_amount\") }}\n\t\t\t\t
\n
\n

{{ doc.terms or \"\" }}

\n

{{ _(\"Thank you, please visit again.\") }}

", "idx": 1, "line_breaks": 0, - "modified": "2018-01-12 11:18:54.229254", + "modified": "2018-03-20 14:24:12.394354", "modified_by": "Administrator", "module": "Accounts", "name": "POS Invoice", From 2b88ac948e36d3cc6706c21dc04338a91153b7b6 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Wed, 21 Mar 2018 10:04:47 +0530 Subject: [PATCH 12/23] [Fix] Special character issue (#13350) --- erpnext/stock/dashboard/item_dashboard.js | 4 ++-- erpnext/stock/dashboard/item_dashboard_list.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js index 2748436fd8..dff65afca3 100644 --- a/erpnext/stock/dashboard/item_dashboard.js +++ b/erpnext/stock/dashboard/item_dashboard.js @@ -18,12 +18,12 @@ erpnext.stock.ItemDashboard = Class.extend({ // move this.content.on('click', '.btn-move', function() { - erpnext.stock.move_item($(this).attr('data-item'), $(this).attr('data-warehouse'), + erpnext.stock.move_item(unescape($(this).attr('data-item')), $(this).attr('data-warehouse'), null, $(this).attr('data-actual_qty'), null, function() { me.refresh(); }); }); this.content.on('click', '.btn-add', function() { - erpnext.stock.move_item($(this).attr('data-item'), null, $(this).attr('data-warehouse'), + erpnext.stock.move_item(unescape($(this).attr('data-item')), null, $(this).attr('data-warehouse'), $(this).attr('data-actual_qty'), $(this).attr('data-rate'), function() { me.refresh(); }); }); diff --git a/erpnext/stock/dashboard/item_dashboard_list.html b/erpnext/stock/dashboard/item_dashboard_list.html index e0b3431839..5a3fa2ed48 100644 --- a/erpnext/stock/dashboard/item_dashboard_list.html +++ b/erpnext/stock/dashboard/item_dashboard_list.html @@ -45,12 +45,12 @@