Merge pull request #15101 from rohitwaghchaure/ascii_issue_in_balance_sheet
[Fix] 'ascii' codec can't encode error in balance sheet report
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 3621989..47f5c73 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
from erpnext.hooks import regional_overrides
from frappe.utils import getdate
-__version__ = '10.1.45'
+__version__ = '10.1.46'
def get_default_company(user=None):
'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json
index fd77ff5..cc0b932 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.json
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json
@@ -323,7 +323,37 @@
"set_only_once": 0,
"translatable": 0,
"unique": 0
- },
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "display_items_in_stock",
+ "fieldtype": "Check",
+ "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": "Display Items In Stock",
+ "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,
@@ -1610,4 +1640,4 @@
"title_field": "pos_profile_name",
"track_changes": 0,
"track_seen": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index 14f7891..7a1a182 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -21,8 +21,6 @@
if(!this.frm.doc.supplier && this.frm.doc.credit_to) {
this.frm.set_df_property("credit_to", "print_hide", 0);
}
- } else {
- this.frm.set_value("disable_rounded_total", cint(frappe.sys_defaults.disable_rounded_total));
}
},
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index ef70110..2b3e824 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -170,11 +170,12 @@
# ageing data
if self.filters.ageing_based_on == "Due Date":
- entry_date = due_date
+ entry_date = due_date
elif self.filters.ageing_based_on == "Supplier Invoice Date":
- entry_date = bill_date
+ entry_date = bill_date
else:
- entry_date = gle.posting_date
+ entry_date = gle.posting_date
+
row += get_ageing_data(cint(self.filters.range1), cint(self.filters.range2),
cint(self.filters.range3), self.age_as_on, entry_date, outstanding_amount)
@@ -186,7 +187,8 @@
if self.filters.ageing_based_on == "Supplier Invoice Date" \
and getdate(bill_date) > getdate(self.filters.report_date):
- row[-1]=row[-2]=row[-3]=row[-4]=0
+
+ row[-1]=row[-2]=row[-3]=row[-4]=0
if self.filters.get(scrub(args.get("party_type"))):
row.append(gle.account_currency)
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index 7df877f..54c0add 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -223,13 +223,13 @@
item_tax_amount = flt((tax_amount * d.base_net_amount) / item_net_amount) \
if item_net_amount else 0
if item_tax_amount:
- tax_amount = flt(item_tax_amount, tax_amount_precision)
- tax_amount = (tax_amount * -1
- if (doctype == 'Purchase Invoice' and name in deducted_tax) else tax_amount)
+ tax_value = flt(item_tax_amount, tax_amount_precision)
+ tax_value = (tax_value * -1
+ if (doctype == 'Purchase Invoice' and name in deducted_tax) else tax_value)
itemised_tax.setdefault(d.name, {})[description] = frappe._dict({
"tax_rate": tax_rate,
- "tax_amount": tax_amount
+ "tax_amount": tax_value
})
except ValueError:
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json
index 3c0d44e..61c4dcb 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.json
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.json
@@ -2672,6 +2672,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounded_total",
+ "fieldtype": "Currency",
+ "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": "Rounded Total",
+ "length": 0,
+ "no_copy": 0,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "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": "in_words",
"fieldtype": "Data",
"hidden": 0,
@@ -2705,6 +2736,36 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "disable_rounded_total",
+ "fieldtype": "Check",
+ "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": "Disable Rounded Total",
+ "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": "advance_paid",
"fieldtype": "Currency",
"hidden": 0,
@@ -3671,7 +3732,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-07-30 08:35:10.345286",
+ "modified": "2018-08-01 15:18:33.155409",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order",
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
index 6576bcf..330e2b3 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
@@ -2151,6 +2151,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounded_total",
+ "fieldtype": "Currency",
+ "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": "Rounded Total",
+ "length": 0,
+ "no_copy": 0,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "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": "in_words",
"fieldtype": "Data",
"hidden": 0,
@@ -2182,6 +2213,36 @@
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "disable_rounded_total",
+ "fieldtype": "Check",
+ "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": "Disable Rounded Total",
+ "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": 1,
"collapsible_depends_on": "terms",
"columns": 0,
@@ -2779,7 +2840,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2018-07-30 08:36:34.701682",
+ "modified": "2018-08-01 15:18:23.265621",
"modified_by": "Administrator",
"module": "Buying",
"name": "Supplier Quotation",
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 70a0773..7913a76 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -115,9 +115,16 @@
def set_total_in_words(self):
from frappe.utils import money_in_words
if self.meta.get_field("base_in_words"):
- self.base_in_words = money_in_words(self.base_grand_total, self.company_currency)
+ amount = (self.base_rounded_total
+ if not self.get("disable_rounded_total") else self.base_grand_total)
+
+ self.base_in_words = money_in_words(amount, self.company_currency)
+
if self.meta.get_field("in_words"):
- self.in_words = money_in_words(self.grand_total, self.currency)
+ amount = (self.rounded_total
+ if not self.get("disable_rounded_total") else self.grand_total)
+
+ self.in_words = money_in_words(amount, self.currency)
# update valuation rate
def update_valuation_rate(self, parentfield):
diff --git a/erpnext/education/doctype/student_group/student_group.py b/erpnext/education/doctype/student_group/student_group.py
index d508589..465a72d 100644
--- a/erpnext/education/doctype/student_group/student_group.py
+++ b/erpnext/education/doctype/student_group/student_group.py
@@ -33,7 +33,7 @@
program_enrollment = get_program_enrollment(self.academic_year, self.academic_term, self.program, self.batch, self.course)
students = [d.student for d in program_enrollment] if program_enrollment else []
for d in self.students:
- if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
+ if not frappe.db.get_value("Student", d.student, "enabled") and d.active and not self.disabled:
frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name)))
if (self.group_based_on == "Batch") and cint(frappe.defaults.get_defaults().validate_batch)\
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py
index 5f0f691..23acd28 100644
--- a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py
+++ b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py
@@ -5,7 +5,7 @@
project = frappe.db.get_value('Project', filters={'project_name': issue.milestone})
return {
'title': issue.title,
- 'body': frappe.utils.to_html(issue.body or ''),
+ 'body': frappe.utils.md_to_html(issue.body or ''),
'state': issue.state.title(),
'project': project or ''
}
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
index d178b0b..d76fb29 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
@@ -34,7 +34,7 @@
# remove template refernce from item and disable item
if(self.item):
try:
- frappe.delete_doc("Item",self.item)
+ frappe.delete_doc("Item",self.item, force=True)
except Exception:
frappe.throw(_("""Not permitted. Please disable the Test Template"""))
diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
index d535bec..ad2a933 100755
--- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
+++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
@@ -347,15 +347,16 @@
"""
from frappe.desk.calendar import get_event_conditions
conditions = get_event_conditions("Patient Appointment", filters)
- data = frappe.db.sql("""select `tabPatient Appointment`.name, patient, practitioner, status,
- duration, timestamp(appointment_date, appointment_time) as 'start', type.color as 'color'
- from `tabPatient Appointment`
- left join `tabAppointment Type` as type on `tabPatient Appointment`.appointment_type=type.name
- where (appointment_date between %(start)s and %(end)s )
- and `tabPatient Appointment`.docstatus < 2 {conditions}""".format(conditions=conditions),
+
+ data = frappe.db.sql("""select name, patient, physician, status,
+ duration, timestamp(appointment_date, appointment_time) as
+ 'appointment_date' from `tabPatient Appointment` where
+ (appointment_date between %(start)s and %(end)s)
+ and docstatus < 2 {conditions}""".format(conditions=conditions),
{"start": start, "end": end}, as_dict=True, update={"allDay": 0})
+
for item in data:
- item.end = item.start + datetime.timedelta(minutes = item.duration)
+ item.appointment_datetime = item.appointment_date + datetime.timedelta(minutes = item.duration)
return data
@frappe.whitelist()
diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py
index f187286..4aa3bbf 100644
--- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py
+++ b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py
@@ -9,7 +9,6 @@
from email_reply_parser import EmailReplyParser
from erpnext.hr.doctype.employee.employee import is_holiday
from frappe.utils import global_date_format
-from markdown2 import markdown
class DailyWorkSummary(Document):
@@ -88,7 +87,7 @@
if d.sender in did_not_reply:
did_not_reply.remove(d.sender)
if d.text_content:
- d.content = markdown(
+ d.content = frappe.utils.md_to_html(
EmailReplyParser.parse_reply(d.text_content)
)
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
index 801a0ef..e5dfe6f 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.py
@@ -26,7 +26,7 @@
self.validate_sanctioned_amount()
self.calculate_total_amount()
set_employee_name(self)
- self.set_expense_account()
+ self.set_expense_account(validate=True)
self.set_payable_account()
self.set_cost_center()
self.set_status()
@@ -226,9 +226,9 @@
if flt(d.sanctioned_amount) > flt(d.claim_amount):
frappe.throw(_("Sanctioned Amount cannot be greater than Claim Amount in Row {0}.").format(d.idx))
- def set_expense_account(self):
+ def set_expense_account(self, validate=False):
for expense in self.expenses:
- if not expense.default_account:
+ if not expense.default_account or not validate:
expense.default_account = get_expense_claim_account(expense.expense_type, self.company)["account"]
def update_reimbursed_amount(doc):
diff --git a/erpnext/hr/page/team_updates/team_updates.py b/erpnext/hr/page/team_updates/team_updates.py
index 5b90f6f..a6cf935 100644
--- a/erpnext/hr/page/team_updates/team_updates.py
+++ b/erpnext/hr/page/team_updates/team_updates.py
@@ -2,7 +2,6 @@
import frappe
from email_reply_parser import EmailReplyParser
-from markdown2 import markdown
@frappe.whitelist()
def get_data(start=0):
@@ -16,6 +15,6 @@
d.sender_name = frappe.db.get_value("Employee", {"user_id": d.sender},
"employee_name") or d.sender
if d.text_content:
- d.content = markdown(EmailReplyParser.parse_reply(d.text_content))
+ d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content))
return data
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index cf0cede..2383804 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -124,7 +124,7 @@
"modified": now()
})
- task.validate()
+ task.run_method("validate")
task.db_update()
else:
task.save(ignore_permissions = True)
diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js
index 076b39c..2822ae8 100644
--- a/erpnext/public/js/controllers/buying.js
+++ b/erpnext/public/js/controllers/buying.js
@@ -26,6 +26,10 @@
};
});
+ if (this.frm.doc.__islocal) {
+ this.frm.set_value("disable_rounded_total", cint(frappe.sys_defaults.disable_rounded_total));
+ }
+
/* eslint-disable */
// no idea where me is coming from
if(this.frm.get_field('shipping_address')) {
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py
index c25bcd3..ed28204 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -14,8 +14,13 @@
serial_no = ""
batch_no = ""
barcode = ""
-
+ warehouse = ""
+ display_items_in_stock = 0
item_code = search_value
+
+ if pos_profile:
+ warehouse, display_items_in_stock = frappe.db.get_value('POS Profile', pos_profile, ['warehouse', 'display_items_in_stock'])
+
if not frappe.db.exists('Item Group', item_group):
item_group = get_root_of('Item Group')
@@ -42,28 +47,60 @@
lft, rgt = frappe.db.get_value('Item Group', item_group, ['lft', 'rgt'])
# locate function is used to sort by closest match from the beginning of the value
- res = frappe.db.sql("""select i.name as item_code, i.item_name, i.image as item_image,
- i.is_stock_item, item_det.price_list_rate, item_det.currency
- from `tabItem` i LEFT JOIN
- (select item_code, price_list_rate, currency from
- `tabItem Price` where price_list=%(price_list)s) item_det
- ON
- (item_det.item_code=i.name or item_det.item_code=i.variant_of)
- where
- i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1 and ifnull(i.is_fixed_asset, 0) = 0
- and i.item_group in (select name from `tabItem Group` where lft >= {lft} and rgt <= {rgt})
- and ifnull(i.end_of_life, curdate()) >= curdate()
- and {condition}
- limit {start}, {page_length}""".format(start=start,
- page_length=page_length, lft=lft, rgt=rgt, condition=condition),
- {
- 'item_code': item_code,
- 'price_list': price_list
- } , as_dict=1)
- res = {
+
+ if display_items_in_stock == 0:
+ res = frappe.db.sql("""select i.name as item_code, i.item_name, i.image as item_image,
+ i.is_stock_item, item_det.price_list_rate, item_det.currency
+ from `tabItem` i LEFT JOIN
+ (select item_code, price_list_rate, currency from
+ `tabItem Price` where price_list=%(price_list)s) item_det
+ ON
+ (item_det.item_code=i.name or item_det.item_code=i.variant_of)
+ where
+ i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1
+ and i.item_group in (select name from `tabItem Group` where lft >= {lft} and rgt <= {rgt})
+ and {condition} limit {start}, {page_length}""".format(start=start,page_length=page_length,lft=lft, rgt=rgt, condition=condition),
+ {
+ 'item_code': item_code,
+ 'price_list': price_list
+ } , as_dict=1)
+
+ res = {
'items': res
- }
+ }
+
+ elif display_items_in_stock == 1:
+ query = """select i.name as item_code, i.item_name, i.image as item_image,
+ i.is_stock_item, item_det.price_list_rate, item_det.currency
+ from `tabItem` i LEFT JOIN
+ (select item_code, price_list_rate, currency from
+ `tabItem Price` where price_list=%(price_list)s) item_det
+ ON
+ (item_det.item_code=i.name or item_det.item_code=i.variant_of) INNER JOIN"""
+
+ if warehouse is not None:
+ query = query + """ (select item_code,actual_qty from `tabBin` where warehouse=%(warehouse)s and actual_qty > 0 group by item_code) item_se"""
+ else:
+ query = query + """ (select item_code,sum(actual_qty) as actual_qty from `tabBin` group by item_code) item_se"""
+
+ res = frappe.db.sql(query + """
+ ON
+ ((item_se.item_code=i.name or item_det.item_code=i.variant_of) and item_se.actual_qty>0)
+ where
+ i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1
+ and i.item_group in (select name from `tabItem Group` where lft >= {lft} and rgt <= {rgt})
+ and {condition} limit {start}, {page_length}""".format
+ (start=start,page_length=page_length,lft=lft, rgt=rgt, condition=condition),
+ {
+ 'item_code': item_code,
+ 'price_list': price_list,
+ 'warehouse': warehouse
+ } , as_dict=1)
+
+ res = {
+ 'items': res
+ }
if serial_no:
res.update({
@@ -114,4 +151,4 @@
return frappe.db.sql(""" select distinct name from `tabItem Group`
where {condition} and (name like %(txt)s) limit {start}, {page_len}"""
.format(condition = cond, start=start, page_len= page_len),
- {'txt': '%%%s%%' % txt})
\ No newline at end of file
+ {'txt': '%%%s%%' % txt})
diff --git a/erpnext/setup/setup_wizard/operations/sample_data.py b/erpnext/setup/setup_wizard/operations/sample_data.py
index f5cc446..3f78734 100644
--- a/erpnext/setup/setup_wizard/operations/sample_data.py
+++ b/erpnext/setup/setup_wizard/operations/sample_data.py
@@ -8,7 +8,6 @@
import frappe.utils
import random, os, json
from frappe import _
-from markdown2 import markdown
def make_sample_data(domains, make_dependent = False):
"""Create a few opportunities, quotes, material requests, issues, todos, projects
@@ -152,7 +151,7 @@
for t in tasks:
with open (os.path.join(os.path.dirname(__file__), "tasks", t['file'])) as f:
- t['description'] = markdown(f.read())
+ t['description'] = frappe.utils.md_to_html(f.read())
del t['file']
project.append('tasks', t)
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 153a4c1..0b5eb53 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -90,11 +90,11 @@
# Replicate linked Communications
# todo get all communications in timeline before this, and modify them to append them to new doc
comm_to_split_from = frappe.get_doc("Communication", communication_id)
- communications = frappe.get_all("Communication", filters={"reference_name": 'ISS-00001', "reference_doctype": "Issue", "creation": ('>=', comm_to_split_from.creation)})
+ communications = frappe.get_all("Communication", filters={"reference_name": comm_to_split_from.reference_name, "reference_doctype": "Issue", "creation": ('>=', comm_to_split_from.creation)})
for communication in communications:
doc = frappe.get_doc("Communication", communication.name)
doc.reference_name = replicated_issue.name
- doc.save()
+ doc.save(ignore_permissions=True)
return replicated_issue.name
def get_list_context(context=None):