Merge branch 'develop' of https://github.com/frappe/erpnext into print-templates-fix
This commit is contained in:
commit
45a0ea9628
@ -144,8 +144,8 @@
|
|||||||
],
|
],
|
||||||
"icon": "icon-money",
|
"icon": "icon-money",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"in_create": 1,
|
"in_create": 0,
|
||||||
"modified": "2014-05-27 03:49:08.910126",
|
"modified": "2014-08-26 12:16:11.163750",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Cost Center",
|
"name": "Cost Center",
|
||||||
|
@ -203,7 +203,7 @@ class JournalVoucher(AccountsController):
|
|||||||
if account_type in ['Bank', 'Cash']:
|
if account_type in ['Bank', 'Cash']:
|
||||||
company_currency = get_company_currency(self.company)
|
company_currency = get_company_currency(self.company)
|
||||||
amt = flt(d.debit) and d.debit or d.credit
|
amt = flt(d.debit) and d.debit or d.credit
|
||||||
self.total_amount = company_currency + ' ' + cstr(amt)
|
self.total_amount = fmt_money(amt, currency=company_currency)
|
||||||
from frappe.utils import money_in_words
|
from frappe.utils import money_in_words
|
||||||
self.total_amount_in_words = money_in_words(amt, company_currency)
|
self.total_amount_in_words = money_in_words(amt, company_currency)
|
||||||
|
|
||||||
|
@ -227,6 +227,17 @@
|
|||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "project_name",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"in_filter": 1,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"label": "Project Name",
|
||||||
|
"options": "Project",
|
||||||
|
"permlevel": 0,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"default": ":Company",
|
"default": ":Company",
|
||||||
"fieldname": "cost_center",
|
"fieldname": "cost_center",
|
||||||
@ -249,17 +260,6 @@
|
|||||||
"label": "Reference",
|
"label": "Reference",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "project_name",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_filter": 1,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"label": "Project Name",
|
|
||||||
"options": "Project",
|
|
||||||
"permlevel": 0,
|
|
||||||
"print_hide": 1,
|
|
||||||
"read_only": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "brand",
|
"fieldname": "brand",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
@ -317,23 +317,6 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"width": "150px"
|
"width": "150px"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"allow_on_submit": 1,
|
|
||||||
"fieldname": "page_break",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"in_list_view": 0,
|
|
||||||
"label": "Page Break",
|
|
||||||
"no_copy": 1,
|
|
||||||
"permlevel": 0,
|
|
||||||
"print_hide": 1,
|
|
||||||
"read_only": 0,
|
|
||||||
"report_hide": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "col_break6",
|
|
||||||
"fieldtype": "Column Break",
|
|
||||||
"permlevel": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "purchase_order",
|
"fieldname": "purchase_order",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
@ -349,6 +332,11 @@
|
|||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "col_break6",
|
||||||
|
"fieldtype": "Column Break",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "po_detail",
|
"fieldname": "po_detail",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
@ -379,6 +367,18 @@
|
|||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_on_submit": 1,
|
||||||
|
"fieldname": "page_break",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"in_list_view": 0,
|
||||||
|
"label": "Page Break",
|
||||||
|
"no_copy": 1,
|
||||||
|
"permlevel": 0,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
|
"report_hide": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "pr_detail",
|
"fieldname": "pr_detail",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
@ -421,7 +421,7 @@
|
|||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2014-07-24 05:50:20.570629",
|
"modified": "2014-08-26 12:34:42.790959",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice Item",
|
"name": "Purchase Invoice Item",
|
||||||
|
19
erpnext/accounts/print_format/credit_note/credit_note.json
Normal file
19
erpnext/accounts/print_format/credit_note/credit_note.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"creation": "2014-08-28 11:11:39.796473",
|
||||||
|
"disabled": 0,
|
||||||
|
"doc_type": "Journal Voucher",
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Print Format",
|
||||||
|
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"<strong>\" + doc.total_amount + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n\n",
|
||||||
|
"idx": 2,
|
||||||
|
"modified": "2014-08-29 13:20:15.789533",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Accounts",
|
||||||
|
"name": "Credit Note",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"parent": "Journal Voucher",
|
||||||
|
"parentfield": "__print_formats",
|
||||||
|
"parenttype": "DocType",
|
||||||
|
"print_format_type": "Server",
|
||||||
|
"standard": "Yes"
|
||||||
|
}
|
@ -385,6 +385,6 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
cur_frm.add_fetch('project_name', 'cost_center', 'cost_center');
|
||||||
var tname = cur_frm.cscript.tname;
|
var tname = cur_frm.cscript.tname;
|
||||||
var fname = cur_frm.cscript.fname;
|
var fname = cur_frm.cscript.fname;
|
||||||
|
@ -289,7 +289,8 @@ class BuyingController(StockController):
|
|||||||
self.append(raw_material_table, d)
|
self.append(raw_material_table, d)
|
||||||
|
|
||||||
def get_items_from_default_bom(self, item_code):
|
def get_items_from_default_bom(self, item_code):
|
||||||
bom_items = frappe.db.sql("""select t2.item_code, t2.qty_consumed_per_unit,
|
bom_items = frappe.db.sql("""select t2.item_code,
|
||||||
|
ifnull(t2.qty, 0) / ifnull(t1.quantity, 1) as qty_consumed_per_unit,
|
||||||
t2.rate, t2.stock_uom, t2.name, t2.description
|
t2.rate, t2.stock_uom, t2.name, t2.description
|
||||||
from `tabBOM` t1, `tabBOM Item` t2
|
from `tabBOM` t1, `tabBOM Item` t2
|
||||||
where t2.parent = t1.name and t1.item = %s and t1.is_default = 1
|
where t2.parent = t1.name and t1.item = %s and t1.is_default = 1
|
||||||
|
@ -11,8 +11,12 @@ erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onload: function() {
|
onload: function() {
|
||||||
this.setup_leave_approver_select();
|
|
||||||
if(this.frm.doc.__islocal) this.frm.set_value("employee_name", "");
|
if(this.frm.doc.__islocal) this.frm.set_value("employee_name", "");
|
||||||
|
this.frm.set_query("leave_approver", "employee_leave_approvers", function() {
|
||||||
|
return {
|
||||||
|
filters: [["UserRole", "role", "=", "Leave Approver"]]
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
@ -25,21 +29,6 @@ erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setup_leave_approver_select: function() {
|
|
||||||
var me = this;
|
|
||||||
return this.frm.call({
|
|
||||||
method: "erpnext.hr.utils.get_leave_approver_list",
|
|
||||||
callback: function(r) {
|
|
||||||
var df = frappe.meta.get_docfield("Employee Leave Approver", "leave_approver",
|
|
||||||
me.frm.doc.name);
|
|
||||||
df.options = $.map(r.message, function(user) {
|
|
||||||
return {value: user, label: frappe.user_info(user).fullname};
|
|
||||||
});
|
|
||||||
me.frm.fields_dict.employee_leave_approvers.refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
date_of_birth: function() {
|
date_of_birth: function() {
|
||||||
return cur_frm.call({
|
return cur_frm.call({
|
||||||
method: "get_retirement_date",
|
method: "get_retirement_date",
|
||||||
|
@ -172,6 +172,7 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "employment_type",
|
"fieldname": "employment_type",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"in_filter": 1,
|
"in_filter": 1,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Employment Type",
|
"label": "Employment Type",
|
||||||
@ -185,6 +186,7 @@
|
|||||||
"description": "Applicable Holiday List",
|
"description": "Applicable Holiday List",
|
||||||
"fieldname": "holiday_list",
|
"fieldname": "holiday_list",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"label": "Holiday List",
|
"label": "Holiday List",
|
||||||
"oldfieldname": "holiday_list",
|
"oldfieldname": "holiday_list",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
@ -672,7 +674,7 @@
|
|||||||
],
|
],
|
||||||
"icon": "icon-user",
|
"icon": "icon-user",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"modified": "2014-05-27 07:34:49.337586",
|
"modified": "2014-08-27 05:55:00.514660",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Employee",
|
"name": "Employee",
|
||||||
@ -704,6 +706,7 @@
|
|||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "HR User",
|
"role": "HR User",
|
||||||
"submit": 0,
|
"submit": 0,
|
||||||
|
"user_permission_doctypes": "[\"Branch\",\"Company\",\"Department\",\"Designation\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -719,12 +722,6 @@
|
|||||||
"set_user_permissions": 1,
|
"set_user_permissions": 1,
|
||||||
"submit": 0,
|
"submit": 0,
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply_user_permissions": 1,
|
|
||||||
"permlevel": 0,
|
|
||||||
"read": 1,
|
|
||||||
"role": "Leave Approver"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"search_fields": "employee_name",
|
"search_fields": "employee_name",
|
||||||
|
@ -50,21 +50,11 @@ class Employee(Document):
|
|||||||
self.update_user_permissions()
|
self.update_user_permissions()
|
||||||
|
|
||||||
self.update_dob_event()
|
self.update_dob_event()
|
||||||
self.update_leave_approver_user_permissions()
|
|
||||||
|
|
||||||
def update_user_permissions(self):
|
def update_user_permissions(self):
|
||||||
frappe.permissions.add_user_permission("Employee", self.name, self.user_id)
|
frappe.permissions.add_user_permission("Employee", self.name, self.user_id)
|
||||||
frappe.permissions.set_user_permission_if_allowed("Company", self.company, self.user_id)
|
frappe.permissions.set_user_permission_if_allowed("Company", self.company, self.user_id)
|
||||||
|
|
||||||
def update_leave_approver_user_permissions(self):
|
|
||||||
"""add employee user permission for leave approver"""
|
|
||||||
employee_leave_approvers = [d.leave_approver for d in self.get("employee_leave_approvers")]
|
|
||||||
if self.reports_to and self.reports_to not in employee_leave_approvers:
|
|
||||||
employee_leave_approvers.append(frappe.db.get_value("Employee", self.reports_to, "user_id"))
|
|
||||||
|
|
||||||
for user in employee_leave_approvers:
|
|
||||||
frappe.permissions.add_user_permission("Employee", self.name, user)
|
|
||||||
|
|
||||||
def update_user(self):
|
def update_user(self):
|
||||||
# add employee role if missing
|
# add employee role if missing
|
||||||
user = frappe.get_doc("User", self.user_id)
|
user = frappe.get_doc("User", self.user_id)
|
||||||
|
@ -8,10 +8,11 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"fieldname": "leave_approver",
|
"fieldname": "leave_approver",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Leave Approver",
|
"label": "Leave Approver",
|
||||||
"options": "[Select]",
|
"options": "User",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
@ -20,7 +21,7 @@
|
|||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2014-05-15 19:32:14.134420",
|
"modified": "2014-08-27 06:21:36.887205",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Employee Leave Approver",
|
"name": "Employee Leave Approver",
|
||||||
|
@ -57,14 +57,12 @@ cur_frm.cscript.onload = function(doc,cdt,cdn) {
|
|||||||
return{
|
return{
|
||||||
query: "erpnext.controllers.queries.employee_query"
|
query: "erpnext.controllers.queries.employee_query"
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
var exp_approver = doc.exp_approver;
|
|
||||||
return cur_frm.call({
|
cur_frm.set_query("exp_approver", function() {
|
||||||
method: "erpnext.hr.utils.get_expense_approver_list",
|
return {
|
||||||
callback: function(r) {
|
filters: [["UserRole", "role", "=", "Expense Approver"]]
|
||||||
cur_frm.set_df_property("exp_approver", "options", r.message);
|
};
|
||||||
if(exp_approver) cur_frm.set_value("exp_approver", exp_approver);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,11 +20,13 @@
|
|||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"description": "A user with \"Expense Approver\" role",
|
||||||
"fieldname": "exp_approver",
|
"fieldname": "exp_approver",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Link",
|
||||||
"label": "Approver",
|
"label": "Approver",
|
||||||
"oldfieldname": "exp_approver",
|
"oldfieldname": "exp_approver",
|
||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
|
"options": "User",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"width": "160px"
|
"width": "160px"
|
||||||
},
|
},
|
||||||
@ -188,7 +190,7 @@
|
|||||||
"icon": "icon-money",
|
"icon": "icon-money",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"modified": "2014-06-23 07:55:48.580747",
|
"modified": "2014-08-27 07:08:48.454580",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Expense Claim",
|
"name": "Expense Claim",
|
||||||
@ -204,6 +206,7 @@
|
|||||||
"read": 1,
|
"read": 1,
|
||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "Employee",
|
"role": "Employee",
|
||||||
|
"user_permission_doctypes": "[\"Company\",\"Employee\",\"Expense Claim\",\"Fiscal Year\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -219,6 +222,7 @@
|
|||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "Expense Approver",
|
"role": "Expense Approver",
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
|
"user_permission_doctypes": "[\"Expense Claim\",\"User\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -234,6 +238,7 @@
|
|||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "HR User",
|
"role": "HR User",
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
|
"user_permission_doctypes": "[\"Company\",\"Expense Claim\",\"Fiscal Year\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
10
erpnext/hr/doctype/expense_claim/test_expense_claim.py
Normal file
10
erpnext/hr/doctype/expense_claim/test_expense_claim.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
|
||||||
|
# See license.txt
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
test_records = frappe.get_test_records('Expense Claim')
|
||||||
|
|
||||||
|
class TestExpenseClaim(unittest.TestCase):
|
||||||
|
pass
|
1
erpnext/hr/doctype/expense_claim/test_records.json
Normal file
1
erpnext/hr/doctype/expense_claim/test_records.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
[]
|
@ -11,21 +11,14 @@ cur_frm.cscript.onload = function(doc, dt, dn) {
|
|||||||
cur_frm.cscript.calculate_total_days(doc, dt, dn);
|
cur_frm.cscript.calculate_total_days(doc, dt, dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
var leave_approver = doc.leave_approver;
|
cur_frm.set_query("leave_approver", function() {
|
||||||
return cur_frm.call({
|
return {
|
||||||
method: "erpnext.hr.utils.get_leave_approver_list",
|
filters: [["UserRole", "role", "=", "Leave Approver"]]
|
||||||
callback: function(r) {
|
};
|
||||||
cur_frm.set_df_property("leave_approver", "options", $.map(r.message,
|
});
|
||||||
function(user) {
|
|
||||||
return {value: user, label: frappe.user_info(user).fullname};
|
|
||||||
}));
|
|
||||||
|
|
||||||
if(leave_approver) cur_frm.set_value("leave_approver", leave_approver);
|
|
||||||
|
|
||||||
cur_frm.cscript.get_leave_balance(cur_frm.doc);
|
cur_frm.cscript.get_leave_balance(cur_frm.doc);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc, dt, dn) {
|
cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||||
if(doc.__islocal) {
|
if(doc.__islocal) {
|
||||||
|
@ -19,14 +19,15 @@
|
|||||||
{
|
{
|
||||||
"description": "Leave can be approved by users with Role, \"Leave Approver\"",
|
"description": "Leave can be approved by users with Role, \"Leave Approver\"",
|
||||||
"fieldname": "leave_approver",
|
"fieldname": "leave_approver",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Link",
|
||||||
"label": "Leave Approver",
|
"label": "Leave Approver",
|
||||||
"options": "[Select]",
|
"options": "User",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "leave_type",
|
"fieldname": "leave_type",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"in_filter": 1,
|
"in_filter": 1,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Leave Type",
|
"label": "Leave Type",
|
||||||
@ -159,6 +160,7 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "letter_head",
|
"fieldname": "letter_head",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"label": "Letter Head",
|
"label": "Letter Head",
|
||||||
"options": "Letter Head",
|
"options": "Letter Head",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -181,7 +183,7 @@
|
|||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"max_attachments": 3,
|
"max_attachments": 3,
|
||||||
"modified": "2014-06-06 05:06:44.594229",
|
"modified": "2014-08-28 03:32:38.865202",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Leave Application",
|
"name": "Leave Application",
|
||||||
@ -197,13 +199,17 @@
|
|||||||
"read": 1,
|
"read": 1,
|
||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "Employee",
|
"role": "Employee",
|
||||||
|
"user_permission_doctypes": "[\"Company\",\"Employee\",\"Fiscal Year\",\"Leave Application\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"amend": 1,
|
"amend": 1,
|
||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
"email": 1,
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"import": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print": 1,
|
"print": 1,
|
||||||
"read": 1,
|
"read": 1,
|
||||||
@ -230,6 +236,7 @@
|
|||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 1,
|
"delete": 1,
|
||||||
"email": 1,
|
"email": 1,
|
||||||
|
"export": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print": 1,
|
"print": 1,
|
||||||
"read": 1,
|
"read": 1,
|
||||||
@ -237,6 +244,7 @@
|
|||||||
"role": "HR User",
|
"role": "HR User",
|
||||||
"set_user_permissions": 1,
|
"set_user_permissions": 1,
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
|
"user_permission_doctypes": "[\"Company\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -252,6 +260,7 @@
|
|||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "Leave Approver",
|
"role": "Leave Approver",
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
|
"user_permission_doctypes": "[\"Company\",\"User\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -155,8 +155,7 @@ class LeaveApplication(Document):
|
|||||||
|
|
||||||
def validate_leave_approver(self):
|
def validate_leave_approver(self):
|
||||||
employee = frappe.get_doc("Employee", self.employee)
|
employee = frappe.get_doc("Employee", self.employee)
|
||||||
leave_approvers = [l.leave_approver for l in
|
leave_approvers = [l.leave_approver for l in employee.get("employee_leave_approvers")]
|
||||||
employee.get("employee_leave_approvers")]
|
|
||||||
|
|
||||||
if len(leave_approvers) and self.leave_approver not in leave_approvers:
|
if len(leave_approvers) and self.leave_approver not in leave_approvers:
|
||||||
frappe.throw(_("Leave approver must be one of {0}").format(comma_or(leave_approvers)), InvalidLeaveApproverError)
|
frappe.throw(_("Leave approver must be one of {0}").format(comma_or(leave_approvers)), InvalidLeaveApproverError)
|
||||||
|
@ -91,6 +91,7 @@ class TestLeaveApplication(unittest.TestCase):
|
|||||||
|
|
||||||
from frappe.utils.user import add_role
|
from frappe.utils.user import add_role
|
||||||
add_role("test1@example.com", "HR User")
|
add_role("test1@example.com", "HR User")
|
||||||
|
add_role("test1@example.com", "Leave Approver")
|
||||||
clear_user_permissions_for_doctype("Employee")
|
clear_user_permissions_for_doctype("Employee")
|
||||||
|
|
||||||
frappe.db.set_value("Department", "_Test Department",
|
frappe.db.set_value("Department", "_Test Department",
|
||||||
@ -157,6 +158,7 @@ class TestLeaveApplication(unittest.TestCase):
|
|||||||
|
|
||||||
from frappe.utils.user import add_role
|
from frappe.utils.user import add_role
|
||||||
add_role("test@example.com", "Employee")
|
add_role("test@example.com", "Employee")
|
||||||
|
add_role("test1@example.com", "HR User")
|
||||||
add_role("test1@example.com", "Leave Approver")
|
add_role("test1@example.com", "Leave Approver")
|
||||||
add_role("test2@example.com", "Leave Approver")
|
add_role("test2@example.com", "Leave Approver")
|
||||||
|
|
||||||
|
1
erpnext/hr/doctype/leave_application/test_records.json
Normal file
1
erpnext/hr/doctype/leave_application/test_records.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
[]
|
@ -74,6 +74,7 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "letter_head",
|
"fieldname": "letter_head",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
"label": "Letter Head",
|
"label": "Letter Head",
|
||||||
"options": "Letter Head",
|
"options": "Letter Head",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -335,7 +336,7 @@
|
|||||||
"icon": "icon-file-text",
|
"icon": "icon-file-text",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"modified": "2014-07-21 07:58:08.033784",
|
"modified": "2014-08-27 06:38:10.006224",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Slip",
|
"name": "Salary Slip",
|
||||||
@ -353,6 +354,7 @@
|
|||||||
"report": 1,
|
"report": 1,
|
||||||
"role": "HR User",
|
"role": "HR User",
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
|
"user_permission_doctypes": "[\"Branch\",\"Company\",\"Department\",\"Designation\",\"Fiscal Year\",\"Salary Slip\"]",
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -5,24 +5,6 @@ from __future__ import unicode_literals
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_leave_approver_list():
|
|
||||||
roles = [r[0] for r in frappe.db.sql("""select distinct parent from `tabUserRole`
|
|
||||||
where role='Leave Approver'""")]
|
|
||||||
if not roles:
|
|
||||||
frappe.msgprint(_("No Leave Approvers. Please assign 'Leave Approver' Role to atleast one user"))
|
|
||||||
|
|
||||||
return roles
|
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_expense_approver_list():
|
|
||||||
roles = [r[0] for r in frappe.db.sql("""select distinct parent from `tabUserRole`
|
|
||||||
where role='Expense Approver'""")]
|
|
||||||
if not roles:
|
|
||||||
frappe.msgprint(_("No Expense Approvers. Please assign 'Expense Approver' Role to atleast one user"))
|
|
||||||
return roles
|
|
||||||
|
|
||||||
def set_employee_name(doc):
|
def set_employee_name(doc):
|
||||||
if doc.employee and not doc.employee_name:
|
if doc.employee and not doc.employee_name:
|
||||||
doc.employee_name = frappe.db.get_value("Employee", doc.employee, "employee_name")
|
doc.employee_name = frappe.db.get_value("Employee", doc.employee, "employee_name")
|
||||||
|
@ -288,8 +288,8 @@ class BOM(Document):
|
|||||||
for d in self.get('bom_materials'):
|
for d in self.get('bom_materials'):
|
||||||
if d.bom_no:
|
if d.bom_no:
|
||||||
d.rate = self.get_bom_unitcost(d.bom_no)
|
d.rate = self.get_bom_unitcost(d.bom_no)
|
||||||
d.amount = flt(d.rate) * flt(d.qty)
|
d.amount = flt(d.rate, self.precision("rate", d)) * flt(d.qty, self.precision("qty", d))
|
||||||
d.qty_consumed_per_unit = flt(d.qty) / flt(self.quantity)
|
d.qty_consumed_per_unit = flt(d.qty, self.precision("qty", d)) / flt(self.quantity, self.precision("quantity"))
|
||||||
total_rm_cost += d.amount
|
total_rm_cost += d.amount
|
||||||
|
|
||||||
self.raw_material_cost = total_rm_cost
|
self.raw_material_cost = total_rm_cost
|
||||||
@ -322,17 +322,19 @@ class BOM(Document):
|
|||||||
|
|
||||||
def get_child_exploded_items(self, bom_no, qty):
|
def get_child_exploded_items(self, bom_no, qty):
|
||||||
""" Add all items from Flat BOM of child BOM"""
|
""" Add all items from Flat BOM of child BOM"""
|
||||||
|
# Did not use qty_consumed_per_unit in the query, as it leads to rounding loss
|
||||||
child_fb_items = frappe.db.sql("""select item_code, description, stock_uom, qty, rate,
|
child_fb_items = frappe.db.sql("""select bom_item.item_code, bom_item.description,
|
||||||
qty_consumed_per_unit from `tabBOM Explosion Item`
|
bom_item.stock_uom, bom_item.qty, bom_item.rate,
|
||||||
where parent = %s and docstatus = 1""", bom_no, as_dict = 1)
|
ifnull(bom_item.qty, 0 ) / ifnull(bom.quantity, 1) as qty_consumed_per_unit
|
||||||
|
from `tabBOM Explosion Item` bom_item, tabBOM bom
|
||||||
|
where bom_item.parent = bom.name and bom.name = %s and bom.docstatus = 1""", bom_no, as_dict = 1)
|
||||||
|
|
||||||
for d in child_fb_items:
|
for d in child_fb_items:
|
||||||
self.add_to_cur_exploded_items(frappe._dict({
|
self.add_to_cur_exploded_items(frappe._dict({
|
||||||
'item_code' : d['item_code'],
|
'item_code' : d['item_code'],
|
||||||
'description' : d['description'],
|
'description' : d['description'],
|
||||||
'stock_uom' : d['stock_uom'],
|
'stock_uom' : d['stock_uom'],
|
||||||
'qty' : flt(d['qty_consumed_per_unit'])*qty,
|
'qty' : d['qty_consumed_per_unit']*qty,
|
||||||
'rate' : flt(d['rate']),
|
'rate' : flt(d['rate']),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@ -362,19 +364,21 @@ class BOM(Document):
|
|||||||
def get_bom_items_as_dict(bom, qty=1, fetch_exploded=1):
|
def get_bom_items_as_dict(bom, qty=1, fetch_exploded=1):
|
||||||
item_dict = {}
|
item_dict = {}
|
||||||
|
|
||||||
|
# Did not use qty_consumed_per_unit in the query, as it leads to rounding loss
|
||||||
query = """select
|
query = """select
|
||||||
bom_item.item_code,
|
bom_item.item_code,
|
||||||
item.item_name,
|
item.item_name,
|
||||||
ifnull(sum(bom_item.qty_consumed_per_unit),0) * %(qty)s as qty,
|
sum(ifnull(bom_item.qty, 0)/ifnull(bom.quantity, 1)) * %(qty)s as qty,
|
||||||
item.description,
|
item.description,
|
||||||
item.stock_uom,
|
item.stock_uom,
|
||||||
item.default_warehouse,
|
item.default_warehouse,
|
||||||
item.expense_account as expense_account,
|
item.expense_account as expense_account,
|
||||||
item.buying_cost_center as cost_center
|
item.buying_cost_center as cost_center
|
||||||
from
|
from
|
||||||
`tab%(table)s` bom_item, `tabItem` item
|
`tab%(table)s` bom_item, `tabBOM` bom, `tabItem` item
|
||||||
where
|
where
|
||||||
bom_item.docstatus < 2
|
bom_item.parent = bom.name
|
||||||
|
and bom_item.docstatus < 2
|
||||||
and bom_item.parent = "%(bom)s"
|
and bom_item.parent = "%(bom)s"
|
||||||
and item.name = bom_item.item_code
|
and item.name = bom_item.item_code
|
||||||
%(conditions)s
|
%(conditions)s
|
||||||
|
@ -250,23 +250,24 @@ class ProductionPlanningTool(Document):
|
|||||||
bom_wise_item_details = {}
|
bom_wise_item_details = {}
|
||||||
if self.use_multi_level_bom:
|
if self.use_multi_level_bom:
|
||||||
# get all raw materials with sub assembly childs
|
# get all raw materials with sub assembly childs
|
||||||
|
# Did not use qty_consumed_per_unit in the query, as it leads to rounding loss
|
||||||
for d in frappe.db.sql("""select fb.item_code,
|
for d in frappe.db.sql("""select fb.item_code,
|
||||||
ifnull(sum(fb.qty_consumed_per_unit), 0) as qty,
|
ifnull(sum(ifnull(fb.qty, 0)/ifnull(bom.quantity, 1)), 0) as qty,
|
||||||
fb.description, fb.stock_uom, it.min_order_qty
|
fb.description, fb.stock_uom, it.min_order_qty
|
||||||
from `tabBOM Explosion Item` fb,`tabItem` it
|
from `tabBOM Explosion Item` fb, `tabBOM` bom, `tabItem` it
|
||||||
where it.name = fb.item_code and ifnull(it.is_pro_applicable, 'No') = 'No'
|
where bom.name = fb.parent and it.name = fb.item_code and ifnull(it.is_pro_applicable, 'No') = 'No'
|
||||||
and ifnull(it.is_sub_contracted_item, 'No') = 'No'
|
and ifnull(it.is_sub_contracted_item, 'No') = 'No'
|
||||||
and fb.docstatus<2 and fb.parent=%s
|
and fb.docstatus<2 and bom.name=%s
|
||||||
group by item_code, stock_uom""", bom, as_dict=1):
|
group by item_code, stock_uom""", bom, as_dict=1):
|
||||||
bom_wise_item_details.setdefault(d.item_code, d)
|
bom_wise_item_details.setdefault(d.item_code, d)
|
||||||
else:
|
else:
|
||||||
# Get all raw materials considering SA items as raw materials,
|
# Get all raw materials considering SA items as raw materials,
|
||||||
# so no childs of SA items
|
# so no childs of SA items
|
||||||
for d in frappe.db.sql("""select bom_item.item_code,
|
for d in frappe.db.sql("""select bom_item.item_code,
|
||||||
ifnull(sum(bom_item.qty_consumed_per_unit), 0) as qty,
|
ifnull(sum(ifnull(bom_item.qty, 0)/ifnull(bom.quantity, 1)), 0) as qty,
|
||||||
bom_item.description, bom_item.stock_uom, item.min_order_qty
|
bom_item.description, bom_item.stock_uom, item.min_order_qty
|
||||||
from `tabBOM Item` bom_item, tabItem item
|
from `tabBOM Item` bom_item, `tabBOM` bom, tabItem item
|
||||||
where bom_item.parent = %s and bom_item.docstatus < 2
|
where bom.name = bom_item.parent and bom.name = %s and bom_item.docstatus < 2
|
||||||
and bom_item.item_code = item.name
|
and bom_item.item_code = item.name
|
||||||
group by item_code""", bom, as_dict=1):
|
group by item_code""", bom, as_dict=1):
|
||||||
bom_wise_item_details.setdefault(d.item_code, d)
|
bom_wise_item_details.setdefault(d.item_code, d)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"allow_attach": 1,
|
||||||
"allow_import": 1,
|
"allow_import": 1,
|
||||||
"allow_rename": 1,
|
"allow_rename": 1,
|
||||||
"autoname": "field:project_name",
|
"autoname": "field:project_name",
|
||||||
@ -207,6 +208,13 @@
|
|||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"search_index": 0
|
"search_index": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "cost_center",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Default Cost Center",
|
||||||
|
"options": "Cost Center",
|
||||||
|
"permlevel": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "column_break0",
|
"fieldname": "column_break0",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
@ -265,7 +273,7 @@
|
|||||||
"icon": "icon-puzzle-piece",
|
"icon": "icon-puzzle-piece",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"max_attachments": 4,
|
"max_attachments": 4,
|
||||||
"modified": "2014-08-04 03:22:11.416219",
|
"modified": "2014-08-26 14:59:27.052172",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Projects",
|
"module": "Projects",
|
||||||
"name": "Project",
|
"name": "Project",
|
||||||
|
@ -67,3 +67,7 @@ class Project(Document):
|
|||||||
|
|
||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
delete_events(self.doctype, self.name)
|
delete_events(self.doctype, self.name)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_cost_center_name(project_name):
|
||||||
|
return frappe.db.get_value("Project", project_name, "cost_center")
|
@ -151,9 +151,11 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
|||||||
transaction_date: me.frm.doc.transaction_date,
|
transaction_date: me.frm.doc.transaction_date,
|
||||||
ignore_pricing_rule: me.frm.doc.ignore_pricing_rule,
|
ignore_pricing_rule: me.frm.doc.ignore_pricing_rule,
|
||||||
doctype: item.doctype,
|
doctype: item.doctype,
|
||||||
name: item.name
|
name: item.name,
|
||||||
|
project_name: item.project_name || me.frm.doc.project_name
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
if(!r.exc) {
|
if(!r.exc) {
|
||||||
me.frm.script_manager.trigger("price_list_rate", cdt, cdn);
|
me.frm.script_manager.trigger("price_list_rate", cdt, cdn);
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
frappe.listview_settings['Quotation'] = {
|
frappe.listview_settings['Quotation'] = {
|
||||||
add_fields: ["customer_name", "quotation_to", "grand_total", "status",
|
add_fields: ["customer_name", "quotation_to", "grand_total", "status",
|
||||||
"company", "currency", "order_type", "lead", "customer"],
|
"company", "currency", "order_type", "lead", "customer"]
|
||||||
filters: [["status", "=", "Submitted"]]
|
|
||||||
};
|
};
|
||||||
|
@ -585,3 +585,18 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
frappe.ui.form.on(cur_frm.doctype,"project_name", function(frm) {
|
||||||
|
frappe.call({
|
||||||
|
method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
|
||||||
|
args: { project_name: frm.doc.project_name },
|
||||||
|
callback: function(r, rt) {
|
||||||
|
if(!r.exc) {
|
||||||
|
$.each(frm.doc[cur_frm.cscript.fname] || [], function(i, row) {
|
||||||
|
frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
|
||||||
|
msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
@ -7,7 +7,7 @@ import frappe, json
|
|||||||
from frappe.utils import cstr, flt, getdate
|
from frappe.utils import cstr, flt, getdate
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils.file_manager import save_file
|
from frappe.utils.file_manager import save_file
|
||||||
from frappe.translate import set_default_language, get_dict, get_lang_dict
|
from frappe.translate import set_default_language, get_dict, get_lang_dict, send_translations
|
||||||
from frappe.country_info import get_country_info
|
from frappe.country_info import get_country_info
|
||||||
from frappe.utils.nestedset import get_root_of
|
from frappe.utils.nestedset import get_root_of
|
||||||
from default_website import website_maker
|
from default_website import website_maker
|
||||||
@ -423,7 +423,7 @@ def load_messages(language):
|
|||||||
frappe.local.lang = lang
|
frappe.local.lang = lang
|
||||||
m = get_dict("page", "setup-wizard")
|
m = get_dict("page", "setup-wizard")
|
||||||
m.update(get_dict("boot"))
|
m.update(get_dict("boot"))
|
||||||
frappe.local.response["__messages"] = m
|
send_translations(m)
|
||||||
return lang
|
return lang
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,16 +300,6 @@
|
|||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"width": "100px"
|
"width": "100px"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"default": ":Company",
|
|
||||||
"depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)",
|
|
||||||
"fieldname": "cost_center",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Cost Center",
|
|
||||||
"options": "Cost Center",
|
|
||||||
"permlevel": 0,
|
|
||||||
"print_hide": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "project_name",
|
"fieldname": "project_name",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
@ -320,6 +310,16 @@
|
|||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 0
|
"read_only": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"default": ":Company",
|
||||||
|
"depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)",
|
||||||
|
"fieldname": "cost_center",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Cost Center",
|
||||||
|
"options": "Cost Center",
|
||||||
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "qa_no",
|
"fieldname": "qa_no",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
@ -557,7 +557,7 @@
|
|||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2014-08-11 12:48:13.509109",
|
"modified": "2014-08-26 12:38:04.065982",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Purchase Receipt Item",
|
"name": "Purchase Receipt Item",
|
||||||
|
@ -29,6 +29,7 @@ def get_item_details(args):
|
|||||||
"is_subcontracted": "Yes" / "No",
|
"is_subcontracted": "Yes" / "No",
|
||||||
"transaction_type": "selling",
|
"transaction_type": "selling",
|
||||||
"ignore_pricing_rule": 0/1
|
"ignore_pricing_rule": 0/1
|
||||||
|
"project_name": "",
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
args = process_args(args)
|
args = process_args(args)
|
||||||
@ -149,7 +150,8 @@ def get_basic_details(args, item_doc):
|
|||||||
or args.expense_account
|
or args.expense_account
|
||||||
or frappe.db.get_value("Item Group", item.item_group, "default_expense_account")
|
or frappe.db.get_value("Item Group", item.item_group, "default_expense_account")
|
||||||
or frappe.db.get_value("Company", args.company, "default_expense_account")),
|
or frappe.db.get_value("Company", args.company, "default_expense_account")),
|
||||||
"cost_center": ((item.selling_cost_center if args.transaction_type == "selling" else item.buying_cost_center)
|
"cost_center": (frappe.db.get_value("Project", args.project_name, "cost_center")
|
||||||
|
or (item.selling_cost_center if args.transaction_type == "selling" else item.buying_cost_center)
|
||||||
or frappe.db.get_value("Item Group", item.item_group, "default_cost_center")
|
or frappe.db.get_value("Item Group", item.item_group, "default_cost_center")
|
||||||
or frappe.db.get_value("Company", args.company, "cost_center")),
|
or frappe.db.get_value("Company", args.company, "cost_center")),
|
||||||
"batch_no": None,
|
"batch_no": None,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"autoname": "MS.#####",
|
"autoname": "MS.#####",
|
||||||
"creation": "2013-01-10 16:34:30.000000",
|
"creation": "2013-01-10 16:34:30",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -213,12 +213,21 @@
|
|||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0
|
"search_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "amended_from",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Amended From",
|
||||||
|
"no_copy": 1,
|
||||||
|
"options": "Maintenance Schedule",
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "icon-calendar",
|
"icon": "icon-calendar",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"modified": "2014-01-20 17:48:56.000000",
|
"modified": "2014-08-28 11:39:17.152817",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Maintenance Schedule",
|
"name": "Maintenance Schedule",
|
||||||
@ -239,5 +248,5 @@
|
|||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"search_fields": "status,customer,customer_name, sales_order_no"
|
"search_fields": "status,customer,customer_name"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user