Merge branch 'hotfix'
This commit is contained in:
commit
fcb984b294
@ -33,6 +33,7 @@ before_script:
|
|||||||
- bench reinstall --yes
|
- bench reinstall --yes
|
||||||
- bench build
|
- bench build
|
||||||
- bench scheduler disable
|
- bench scheduler disable
|
||||||
|
- sed -i 's/9000/9001/g' sites/common_site_config.json
|
||||||
- bench start &
|
- bench start &
|
||||||
- sleep 10
|
- sleep 10
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import frappe
|
|||||||
from erpnext.hooks import regional_overrides
|
from erpnext.hooks import regional_overrides
|
||||||
from frappe.utils import getdate
|
from frappe.utils import getdate
|
||||||
|
|
||||||
__version__ = '10.1.28'
|
__version__ = '10.1.29'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
@ -344,8 +344,8 @@ class SalesInvoice(SellingController):
|
|||||||
self.terms = frappe.db.get_value("Terms and Conditions", self.tc_name, "terms")
|
self.terms = frappe.db.get_value("Terms and Conditions", self.tc_name, "terms")
|
||||||
|
|
||||||
# fetch charges
|
# fetch charges
|
||||||
if self.taxes_and_charges and not len(self.get("taxes")):
|
if self.taxes_and_charges:
|
||||||
self.set_taxes()
|
self.set_other_charges()
|
||||||
|
|
||||||
return pos
|
return pos
|
||||||
|
|
||||||
|
@ -113,9 +113,11 @@ def insert_consultation_to_medical_record(doc):
|
|||||||
|
|
||||||
def update_consultation_to_medical_record(consultation):
|
def update_consultation_to_medical_record(consultation):
|
||||||
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s", (consultation.name))
|
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s", (consultation.name))
|
||||||
if(medical_record_id[0][0]):
|
if medical_record_id and medical_record_id[0][0]:
|
||||||
subject = set_subject_field(consultation)
|
subject = set_subject_field(consultation)
|
||||||
frappe.db.set_value("Patient Medical Record", medical_record_id[0][0], "subject", subject)
|
frappe.db.set_value("Patient Medical Record", medical_record_id[0][0], "subject", subject)
|
||||||
|
else:
|
||||||
|
insert_consultation_to_medical_record(consultation)
|
||||||
|
|
||||||
def delete_medical_record(consultation):
|
def delete_medical_record(consultation):
|
||||||
frappe.db.sql("""delete from `tabPatient Medical Record` where reference_name = %s""", (consultation.name))
|
frappe.db.sql("""delete from `tabPatient Medical Record` where reference_name = %s""", (consultation.name))
|
||||||
|
@ -244,7 +244,7 @@ def insert_lab_test_to_medical_record(doc):
|
|||||||
def delete_lab_test_from_medical_record(self):
|
def delete_lab_test_from_medical_record(self):
|
||||||
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(self.name))
|
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(self.name))
|
||||||
|
|
||||||
if(medical_record_id[0][0]):
|
if medical_record_id and medical_record_id[0][0]:
|
||||||
frappe.delete_doc("Patient Medical Record", medical_record_id[0][0])
|
frappe.delete_doc("Patient Medical Record", medical_record_id[0][0])
|
||||||
|
|
||||||
def create_item_line(test_code, sales_invoice):
|
def create_item_line(test_code, sales_invoice):
|
||||||
|
@ -27,7 +27,7 @@ def insert_vital_signs_to_medical_record(doc):
|
|||||||
|
|
||||||
def delete_vital_signs_from_medical_record(doc):
|
def delete_vital_signs_from_medical_record(doc):
|
||||||
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(doc.name))
|
medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(doc.name))
|
||||||
if(medical_record_id[0][0]):
|
if medical_record_id and medical_record_id[0][0]:
|
||||||
frappe.delete_doc("Patient Medical Record", medical_record_id[0][0])
|
frappe.delete_doc("Patient Medical Record", medical_record_id[0][0])
|
||||||
|
|
||||||
def set_subject_field(doc):
|
def set_subject_field(doc):
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"beta": 0,
|
"beta": 0,
|
||||||
@ -11,6 +12,7 @@
|
|||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -21,6 +23,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Employee Settings",
|
"label": "Employee Settings",
|
||||||
@ -38,6 +41,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -50,6 +54,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Retirement Age",
|
"label": "Retirement Age",
|
||||||
@ -68,6 +73,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -80,6 +86,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Employee Records to be created by",
|
"label": "Employee Records to be created by",
|
||||||
@ -98,6 +105,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -108,6 +116,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"length": 0,
|
"length": 0,
|
||||||
@ -125,6 +134,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -136,6 +146,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Stop Birthday Reminders",
|
"label": "Stop Birthday Reminders",
|
||||||
@ -153,6 +164,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -163,6 +175,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Maintain Billing Hours and Working Hours Same on Timesheet",
|
"label": "Maintain Billing Hours and Working Hours Same on Timesheet",
|
||||||
@ -181,6 +194,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -191,6 +205,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Payroll Settings",
|
"label": "Payroll Settings",
|
||||||
@ -208,6 +223,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -219,6 +235,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Include holidays in Total no. of Working Days",
|
"label": "Include holidays in Total no. of Working Days",
|
||||||
@ -236,6 +253,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -248,6 +266,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Email Salary Slip to Employee",
|
"label": "Email Salary Slip to Employee",
|
||||||
@ -266,6 +285,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -276,6 +296,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Max working hours against Timesheet",
|
"label": "Max working hours against Timesheet",
|
||||||
@ -292,21 +313,81 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "leave_settings",
|
||||||
|
"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": "Leave Settings",
|
||||||
|
"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": "show_leaves_of_all_department_members_in_calendar",
|
||||||
|
"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": "Show Leaves Of All Department Members In Calendar",
|
||||||
|
"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_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"icon": "fa fa-cog",
|
"icon": "fa fa-cog",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"in_dialog": 0,
|
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-01-16 14:01:31.183485",
|
"modified": "2018-05-03 15:35:13.015466",
|
||||||
"modified_by": "anastasiadis.st00@gmail.com",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "HR Settings",
|
"name": "HR Settings",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
@ -321,7 +402,6 @@
|
|||||||
"export": 0,
|
"export": 0,
|
||||||
"if_owner": 0,
|
"if_owner": 0,
|
||||||
"import": 0,
|
"import": 0,
|
||||||
"is_custom": 0,
|
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print": 1,
|
"print": 1,
|
||||||
"read": 1,
|
"read": 1,
|
||||||
@ -336,6 +416,7 @@
|
|||||||
"quick_entry": 0,
|
"quick_entry": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"read_only_onload": 0,
|
"read_only_onload": 0,
|
||||||
|
"show_name_in_global_search": 0,
|
||||||
"sort_order": "ASC",
|
"sort_order": "ASC",
|
||||||
"track_changes": 0,
|
"track_changes": 0,
|
||||||
"track_seen": 0
|
"track_seen": 0
|
||||||
|
23
erpnext/hr/doctype/hr_settings/test_hr_settings.js
Normal file
23
erpnext/hr/doctype/hr_settings/test_hr_settings.js
Normal file
@ -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: HR Settings", function (assert) {
|
||||||
|
let done = assert.async();
|
||||||
|
|
||||||
|
// number of asserts
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
frappe.run_serially([
|
||||||
|
// insert a new HR Settings
|
||||||
|
() => frappe.tests.make('HR Settings', [
|
||||||
|
// values to be set
|
||||||
|
{key: 'value'}
|
||||||
|
]),
|
||||||
|
() => {
|
||||||
|
assert.equal(cur_frm.doc.key, 'value');
|
||||||
|
},
|
||||||
|
() => done()
|
||||||
|
]);
|
||||||
|
|
||||||
|
});
|
10
erpnext/hr/doctype/hr_settings/test_hr_settings.py
Normal file
10
erpnext/hr/doctype/hr_settings/test_hr_settings.py
Normal file
@ -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 TestHRSettings(unittest.TestCase):
|
||||||
|
pass
|
@ -436,17 +436,30 @@ def add_department_leaves(events, start, end, employee, company):
|
|||||||
and company=%s""", (department, company))
|
and company=%s""", (department, company))
|
||||||
|
|
||||||
match_conditions = "and employee in (\"%s\")" % '", "'.join(department_employees)
|
match_conditions = "and employee in (\"%s\")" % '", "'.join(department_employees)
|
||||||
add_leaves(events, start, end, match_conditions=match_conditions)
|
add_leaves(events, start, end, filter_conditions=match_conditions)
|
||||||
|
|
||||||
|
def add_leaves(events, start, end, filter_conditions=None):
|
||||||
|
conditions = []
|
||||||
|
|
||||||
|
if filter_conditions:
|
||||||
|
conditions.append(filter_conditions)
|
||||||
|
|
||||||
|
if not cint(frappe.db.get_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar")):
|
||||||
|
from frappe.desk.reportview import build_match_conditions
|
||||||
|
match_conditions = build_match_conditions("Leave Application")
|
||||||
|
|
||||||
|
if match_conditions:
|
||||||
|
conditions.append(match_conditions)
|
||||||
|
|
||||||
def add_leaves(events, start, end, match_conditions=None):
|
|
||||||
query = """select name, from_date, to_date, employee_name, half_day,
|
query = """select name, from_date, to_date, employee_name, half_day,
|
||||||
status, employee, docstatus
|
status, employee, docstatus
|
||||||
from `tabLeave Application` where
|
from `tabLeave Application` where
|
||||||
from_date <= %(end)s and to_date >= %(start)s <= to_date
|
from_date <= %(end)s and to_date >= %(start)s <= to_date
|
||||||
and docstatus < 2
|
and docstatus < 2
|
||||||
and status!="Rejected" """
|
and status!="Rejected" """
|
||||||
if match_conditions:
|
|
||||||
query += match_conditions
|
if conditions:
|
||||||
|
query += ' and '.join(conditions)
|
||||||
|
|
||||||
for d in frappe.db.sql(query, {"start":start, "end": end}, as_dict=True):
|
for d in frappe.db.sql(query, {"start":start, "end": end}, as_dict=True):
|
||||||
e = {
|
e = {
|
||||||
|
@ -499,4 +499,6 @@ erpnext.patches.v10_0.update_hub_connector_domain
|
|||||||
erpnext.patches.v10_0.set_student_party_type
|
erpnext.patches.v10_0.set_student_party_type
|
||||||
erpnext.patches.v10_0.update_project_in_sle
|
erpnext.patches.v10_0.update_project_in_sle
|
||||||
erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
|
erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
|
||||||
erpnext.patches.v10_0.taxes_issue_with_pos
|
erpnext.patches.v10_0.taxes_issue_with_pos
|
||||||
|
erpnext.patches.v10_0.set_qty_in_transactions_based_on_serial_no_input
|
||||||
|
erpnext.patches.v10_0.show_leaves_of_all_department_members_in_calendar
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
# Copyright (c) 2017, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doc("stock", "doctype", "stock_settings")
|
||||||
|
|
||||||
|
ss = frappe.get_doc("Stock Settings")
|
||||||
|
ss.set_qty_in_transactions_based_on_serial_no_input = 1
|
||||||
|
ss.save()
|
@ -0,0 +1,5 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doc("hr", "doctype", "hr_settings")
|
||||||
|
frappe.db.set_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar", 1)
|
@ -401,7 +401,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
item.serial_no = valid_serial_nos.join('\n');
|
item.serial_no = valid_serial_nos.join('\n');
|
||||||
|
|
||||||
refresh_field("serial_no", item.name, item.parentfield);
|
refresh_field("serial_no", item.name, item.parentfield);
|
||||||
if(!doc.is_return) {
|
if(!doc.is_return && cint(user_defaults.set_qty_in_transactions_based_on_serial_no_input)) {
|
||||||
frappe.model.set_value(item.doctype, item.name,
|
frappe.model.set_value(item.doctype, item.name,
|
||||||
"qty", valid_serial_nos.length / item.conversion_factor);
|
"qty", valid_serial_nos.length / item.conversion_factor);
|
||||||
frappe.model.set_value(item.doctype, item.name, "stock_qty", valid_serial_nos.length);
|
frappe.model.set_value(item.doctype, item.name, "stock_qty", valid_serial_nos.length);
|
||||||
|
@ -144,7 +144,17 @@ class Gstr1Report(object):
|
|||||||
""" % (self.doctype, ', '.join(['%s']*len(self.invoices))), tuple(self.invoices), as_dict=1)
|
""" % (self.doctype, ', '.join(['%s']*len(self.invoices))), tuple(self.invoices), as_dict=1)
|
||||||
|
|
||||||
for d in items:
|
for d in items:
|
||||||
self.invoice_items.setdefault(d.parent, {}).setdefault(d.item_code, d.base_net_amount)
|
item_details = {}
|
||||||
|
item_details[d.item_code] = d.base_net_amount
|
||||||
|
|
||||||
|
if d.parent in self.invoice_items:
|
||||||
|
parent_dict = self.invoice_items[d.parent]
|
||||||
|
if d.item_code in parent_dict:
|
||||||
|
item_details[d.item_code] += parent_dict[d.item_code]
|
||||||
|
else:
|
||||||
|
item_details.update(parent_dict)
|
||||||
|
|
||||||
|
self.invoice_items[d.parent] = item_details
|
||||||
|
|
||||||
def get_items_based_on_tax_rate(self):
|
def get_items_based_on_tax_rate(self):
|
||||||
self.tax_details = frappe.db.sql("""
|
self.tax_details = frappe.db.sql("""
|
||||||
|
@ -37,6 +37,7 @@ def set_default_settings(args):
|
|||||||
stock_settings.auto_indent = 1
|
stock_settings.auto_indent = 1
|
||||||
stock_settings.auto_insert_price_list_rate_if_missing = 1
|
stock_settings.auto_insert_price_list_rate_if_missing = 1
|
||||||
stock_settings.automatically_set_serial_nos_based_on_fifo = 1
|
stock_settings.automatically_set_serial_nos_based_on_fifo = 1
|
||||||
|
stock_settings.set_qty_in_transactions_based_on_serial_no_input = 1
|
||||||
stock_settings.save()
|
stock_settings.save()
|
||||||
|
|
||||||
selling_settings = frappe.get_doc("Selling Settings")
|
selling_settings = frappe.get_doc("Selling Settings")
|
||||||
|
@ -604,19 +604,20 @@ class Item(WebsiteGenerator):
|
|||||||
|
|
||||||
def update_template_item(self):
|
def update_template_item(self):
|
||||||
"""Set Show in Website for Template Item if True for its Variant"""
|
"""Set Show in Website for Template Item if True for its Variant"""
|
||||||
if self.variant_of and self.show_in_website:
|
if self.variant_of:
|
||||||
self.show_variant_in_website = 1
|
if self.show_in_website:
|
||||||
self.show_in_website = 0
|
self.show_variant_in_website = 1
|
||||||
|
self.show_in_website = 0
|
||||||
|
|
||||||
if self.show_variant_in_website:
|
if self.show_variant_in_website:
|
||||||
# show template
|
# show template
|
||||||
template_item = frappe.get_doc("Item", self.variant_of)
|
template_item = frappe.get_doc("Item", self.variant_of)
|
||||||
|
|
||||||
if not template_item.show_in_website:
|
if not template_item.show_in_website:
|
||||||
template_item.show_in_website = 1
|
template_item.show_in_website = 1
|
||||||
template_item.flags.dont_update_variants = True
|
template_item.flags.dont_update_variants = True
|
||||||
template_item.flags.ignore_permissions = True
|
template_item.flags.ignore_permissions = True
|
||||||
template_item.save()
|
template_item.save()
|
||||||
|
|
||||||
def update_variants(self):
|
def update_variants(self):
|
||||||
if self.flags.dont_update_variants or \
|
if self.flags.dont_update_variants or \
|
||||||
@ -640,9 +641,9 @@ class Item(WebsiteGenerator):
|
|||||||
|
|
||||||
def validate_stock_exists_for_template_item(self):
|
def validate_stock_exists_for_template_item(self):
|
||||||
if self.stock_ledger_created() and self._doc_before_save:
|
if self.stock_ledger_created() and self._doc_before_save:
|
||||||
if (self._doc_before_save.has_variants != self.has_variants
|
if (cint(self._doc_before_save.has_variants) != cint(self.has_variants)
|
||||||
or self._doc_before_save.variant_of != self.variant_of):
|
or self._doc_before_save.variant_of != self.variant_of):
|
||||||
frappe.throw(_("Cannot change Variant properties after stock transction. You will have to make a new Item to do this.").format(self.name),
|
frappe.throw(_("Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.").format(self.name),
|
||||||
StockExistsForTemplate)
|
StockExistsForTemplate)
|
||||||
|
|
||||||
if self.has_variants or self.variant_of:
|
if self.has_variants or self.variant_of:
|
||||||
|
@ -198,7 +198,7 @@ def validate_serial_no(sle, item_det):
|
|||||||
frappe.throw(_("Serial No {0} quantity {1} cannot be a fraction").format(sle.item_code, sle.actual_qty))
|
frappe.throw(_("Serial No {0} quantity {1} cannot be a fraction").format(sle.item_code, sle.actual_qty))
|
||||||
|
|
||||||
if len(serial_nos) and len(serial_nos) != abs(cint(sle.actual_qty)):
|
if len(serial_nos) and len(serial_nos) != abs(cint(sle.actual_qty)):
|
||||||
frappe.throw(_("{0} Serial Numbers required for Item {1}. You have provided {2}.").format(sle.actual_qty, sle.item_code, len(serial_nos)),
|
frappe.throw(_("{0} Serial Numbers required for Item {1}. You have provided {2}.").format(abs(sle.actual_qty), sle.item_code, len(serial_nos)),
|
||||||
SerialNoQtyError)
|
SerialNoQtyError)
|
||||||
|
|
||||||
if len(serial_nos) != len(set(serial_nos)):
|
if len(serial_nos) != len(set(serial_nos)):
|
||||||
|
@ -463,6 +463,37 @@
|
|||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"default": "1",
|
||||||
|
"fieldname": "set_qty_in_transactions_based_on_serial_no_input",
|
||||||
|
"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": "Set Qty in Transactions based on Serial No Input",
|
||||||
|
"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_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
@ -679,7 +710,7 @@
|
|||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-11-17 01:35:49.562613",
|
"modified": "2018-05-03 12:37:12.905394",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Stock Settings",
|
"name": "Stock Settings",
|
||||||
|
@ -11,8 +11,9 @@ from frappe.utils.html_utils import clean_html
|
|||||||
|
|
||||||
class StockSettings(Document):
|
class StockSettings(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
for key in ["item_naming_by", "item_group", "stock_uom", "allow_negative_stock", "default_warehouse"]:
|
for key in ["item_naming_by", "item_group", "stock_uom",
|
||||||
frappe.db.set_default(key, self.get(key, ""))
|
"allow_negative_stock", "default_warehouse", "set_qty_in_transactions_based_on_serial_no_input"]:
|
||||||
|
frappe.db.set_default(key, self.get(key, ""))
|
||||||
|
|
||||||
from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
|
from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
|
||||||
set_by_naming_series("Item", "item_code",
|
set_by_naming_series("Item", "item_code",
|
||||||
|
12
setup.py
12
setup.py
@ -1,20 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
try: # for pip >= 10
|
|
||||||
from pip._internal.req import parse_requirements
|
|
||||||
except ImportError: # for pip <= 9.0.3
|
|
||||||
from pip.req import parse_requirements
|
|
||||||
import re, ast
|
import re, ast
|
||||||
|
|
||||||
# get version from __version__ variable in erpnext/__init__.py
|
# get version from __version__ variable in erpnext/__init__.py
|
||||||
_version_re = re.compile(r'__version__\s+=\s+(.*)')
|
_version_re = re.compile(r'__version__\s+=\s+(.*)')
|
||||||
|
|
||||||
|
with open('requirements.txt') as f:
|
||||||
|
install_requires = f.read().strip().split('\n')
|
||||||
|
|
||||||
with open('erpnext/__init__.py', 'rb') as f:
|
with open('erpnext/__init__.py', 'rb') as f:
|
||||||
version = str(ast.literal_eval(_version_re.search(
|
version = str(ast.literal_eval(_version_re.search(
|
||||||
f.read().decode('utf-8')).group(1)))
|
f.read().decode('utf-8')).group(1)))
|
||||||
|
|
||||||
requirements = parse_requirements("requirements.txt", session="")
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='erpnext',
|
name='erpnext',
|
||||||
version=version,
|
version=version,
|
||||||
@ -24,6 +21,5 @@ setup(
|
|||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[str(ir.req) for ir in requirements],
|
install_requires=install_requires
|
||||||
dependency_links=[str(ir._link) for ir in requirements if ir._link]
|
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user