Merge branch 'develop' of https://github.com/frappe/erpnext into develop
This commit is contained in:
		
						commit
						a65a3d063c
					
				
							
								
								
									
										21
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README.md
									
									
									
									
									
								
							| @ -13,9 +13,26 @@ | |||||||
| 
 | 
 | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| Includes: Accounting, Inventory, Manufacturing, CRM, Sales, Purchase, Project Management, HRMS. Requires MariaDB. | ERPNext as a monolith includes the following areas for managing businesses: | ||||||
| 
 | 
 | ||||||
| ERPNext is built on the [Frappe](https://github.com/frappe/frappe) Framework, a full-stack web app framework in Python & JavaScript. | 1. [Accounting](https://erpnext.com/docs/user/manual/en/accounts) | ||||||
|  | 1. [Inventory](https://erpnext.com/docs/user/manual/en/stock) | ||||||
|  | 1. [CRM](https://erpnext.com/docs/user/manual/en/CRM) | ||||||
|  | 1. [Sales](https://erpnext.com/docs/user/manual/en/selling) | ||||||
|  | 1. [Purchase](https://erpnext.com/docs/user/manual/en/buying) | ||||||
|  | 1. [HRMS](https://erpnext.com/docs/user/manual/en/human-resources) | ||||||
|  | 1. [Project Management](https://erpnext.com/docs/user/manual/en/projects) | ||||||
|  | 1. [Support](https://erpnext.com/docs/user/manual/en/support) | ||||||
|  | 1. [Asset Management](https://erpnext.com/docs/user/manual/en/asset) | ||||||
|  | 1. [Quality Management](https://erpnext.com/docs/user/manual/en/quality-management) | ||||||
|  | 1. [Manufacturing](https://erpnext.com/docs/user/manual/en/manufacturing) | ||||||
|  | 1. [Website Management](https://erpnext.com/docs/user/manual/en/website) | ||||||
|  | 1. [Customize ERPNext](https://erpnext.com/docs/user/manual/en/customize-erpnext) | ||||||
|  | 1. [And More](https://erpnext.com/docs/user/manual/en/) | ||||||
|  | 
 | ||||||
|  | ERPNext requires MariaDB. | ||||||
|  | 
 | ||||||
|  | ERPNext is built on the [Frappe Framework](https://github.com/frappe/frappe), a full-stack web app framework built with Python & JavaScript. | ||||||
| 
 | 
 | ||||||
| - [User Guide](https://erpnext.com/docs/user) | - [User Guide](https://erpnext.com/docs/user) | ||||||
| - [Discussion Forum](https://discuss.erpnext.com/) | - [Discussion Forum](https://discuss.erpnext.com/) | ||||||
|  | |||||||
| @ -29,7 +29,6 @@ class GLEntry(Document): | |||||||
| 		self.validate_and_set_fiscal_year() | 		self.validate_and_set_fiscal_year() | ||||||
| 		self.pl_must_have_cost_center() | 		self.pl_must_have_cost_center() | ||||||
| 		self.validate_cost_center() | 		self.validate_cost_center() | ||||||
| 		self.validate_dimensions_for_pl_and_bs() |  | ||||||
| 
 | 
 | ||||||
| 		if not self.flags.from_repost: | 		if not self.flags.from_repost: | ||||||
| 			self.check_pl_account() | 			self.check_pl_account() | ||||||
| @ -39,6 +38,7 @@ class GLEntry(Document): | |||||||
| 	def on_update_with_args(self, adv_adj, update_outstanding = 'Yes', from_repost=False): | 	def on_update_with_args(self, adv_adj, update_outstanding = 'Yes', from_repost=False): | ||||||
| 		if not from_repost: | 		if not from_repost: | ||||||
| 			self.validate_account_details(adv_adj) | 			self.validate_account_details(adv_adj) | ||||||
|  | 			self.validate_dimensions_for_pl_and_bs() | ||||||
| 			check_freezing_date(self.posting_date, adv_adj) | 			check_freezing_date(self.posting_date, adv_adj) | ||||||
| 
 | 
 | ||||||
| 		validate_frozen_account(self.account, adv_adj) | 		validate_frozen_account(self.account, adv_adj) | ||||||
|  | |||||||
| @ -190,7 +190,6 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ | |||||||
| 			if(jvd.reference_type==="Employee Advance") { | 			if(jvd.reference_type==="Employee Advance") { | ||||||
| 				return { | 				return { | ||||||
| 					filters: { | 					filters: { | ||||||
| 						'status': ['=', 'Unpaid'], |  | ||||||
| 						'docstatus': 1 | 						'docstatus': 1 | ||||||
| 					} | 					} | ||||||
| 				}; | 				}; | ||||||
|  | |||||||
| @ -968,7 +968,7 @@ def get_exchange_rate(posting_date, account=None, account_currency=None, company | |||||||
| 
 | 
 | ||||||
| 		# The date used to retreive the exchange rate here is the date passed | 		# The date used to retreive the exchange rate here is the date passed | ||||||
| 		# in as an argument to this function. | 		# in as an argument to this function. | ||||||
| 		elif (not exchange_rate or exchange_rate==1) and account_currency and posting_date: | 		elif (not exchange_rate or flt(exchange_rate)==1) and account_currency and posting_date: | ||||||
| 			exchange_rate = get_exchange_rate(account_currency, company_currency, posting_date) | 			exchange_rate = get_exchange_rate(account_currency, company_currency, posting_date) | ||||||
| 	else: | 	else: | ||||||
| 		exchange_rate = 1 | 		exchange_rate = 1 | ||||||
|  | |||||||
| @ -652,12 +652,14 @@ frappe.ui.form.on('Payment Entry', { | |||||||
| 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student") | 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student") | ||||||
| 					) { | 					) { | ||||||
| 						if(total_positive_outstanding > total_negative_outstanding) | 						if(total_positive_outstanding > total_negative_outstanding) | ||||||
|  | 							if (!frm.doc.paid_amount) | ||||||
| 								frm.set_value("paid_amount", | 								frm.set_value("paid_amount", | ||||||
| 									total_positive_outstanding - total_negative_outstanding); | 									total_positive_outstanding - total_negative_outstanding); | ||||||
| 					} else if ( | 					} else if ( | ||||||
| 						total_negative_outstanding && | 						total_negative_outstanding && | ||||||
| 						total_positive_outstanding < total_negative_outstanding | 						total_positive_outstanding < total_negative_outstanding | ||||||
| 					) { | 					) { | ||||||
|  | 						if (!frm.doc.received_amount) | ||||||
| 							frm.set_value("received_amount", | 							frm.set_value("received_amount", | ||||||
| 								total_negative_outstanding - total_positive_outstanding); | 								total_negative_outstanding - total_positive_outstanding); | ||||||
| 					} | 					} | ||||||
|  | |||||||
| @ -285,7 +285,7 @@ class ReceivablePayableReport(object): | |||||||
| 
 | 
 | ||||||
| 	def set_party_details(self, row): | 	def set_party_details(self, row): | ||||||
| 		# customer / supplier name | 		# customer / supplier name | ||||||
| 		party_details = self.get_party_details(row.party) | 		party_details = self.get_party_details(row.party) or {} | ||||||
| 		row.update(party_details) | 		row.update(party_details) | ||||||
| 		if self.filters.get(scrub(self.filters.party_type)): | 		if self.filters.get(scrub(self.filters.party_type)): | ||||||
| 			row.currency = row.account_currency | 			row.currency = row.account_currency | ||||||
|  | |||||||
| @ -110,7 +110,7 @@ class AssetMovement(Document): | |||||||
| 				ORDER BY | 				ORDER BY | ||||||
| 					asm.transaction_date asc | 					asm.transaction_date asc | ||||||
| 				""", (d.asset, self.company, 'Receipt'), as_dict=1) | 				""", (d.asset, self.company, 'Receipt'), as_dict=1) | ||||||
| 			if auto_gen_movement_entry[0].get('name') == self.name: | 			if auto_gen_movement_entry and auto_gen_movement_entry[0].get('name') == self.name: | ||||||
| 				frappe.throw(_('{0} will be cancelled automatically on asset cancellation as it was \ | 				frappe.throw(_('{0} will be cancelled automatically on asset cancellation as it was \ | ||||||
| 					auto generated for Asset {1}').format(self.name, d.asset)) | 					auto generated for Asset {1}').format(self.name, d.asset)) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| { | { | ||||||
|  |  "actions": [], | ||||||
|  "allow_import": 1, |  "allow_import": 1, | ||||||
|  "autoname": "naming_series:", |  "autoname": "naming_series:", | ||||||
|  "creation": "2013-05-21 16:16:39", |  "creation": "2013-05-21 16:16:39", | ||||||
| @ -47,6 +48,7 @@ | |||||||
|   "ignore_pricing_rule", |   "ignore_pricing_rule", | ||||||
|   "sec_warehouse", |   "sec_warehouse", | ||||||
|   "set_warehouse", |   "set_warehouse", | ||||||
|  |   "set_reserve_warehouse", | ||||||
|   "col_break_warehouse", |   "col_break_warehouse", | ||||||
|   "is_subcontracted", |   "is_subcontracted", | ||||||
|   "supplier_warehouse", |   "supplier_warehouse", | ||||||
| @ -1039,12 +1041,20 @@ | |||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "label": "Tax Category", |    "label": "Tax Category", | ||||||
|    "options": "Tax Category" |    "options": "Tax Category" | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |    "depends_on": "supplied_items", | ||||||
|  |    "fieldname": "set_reserve_warehouse", | ||||||
|  |    "fieldtype": "Link", | ||||||
|  |    "label": "Set Reserve Warehouse", | ||||||
|  |    "options": "Warehouse" | ||||||
|   } |   } | ||||||
|  ], |  ], | ||||||
|  "icon": "fa fa-file-text", |  "icon": "fa fa-file-text", | ||||||
|  "idx": 105, |  "idx": 105, | ||||||
|  "is_submittable": 1, |  "is_submittable": 1, | ||||||
|  "modified": "2019-07-11 18:25:49.509343", |  "links": [], | ||||||
|  |  "modified": "2019-12-18 13:13:22.852412", | ||||||
|  "modified_by": "Administrator", |  "modified_by": "Administrator", | ||||||
|  "module": "Buying", |  "module": "Buying", | ||||||
|  "name": "Purchase Order", |  "name": "Purchase Order", | ||||||
|  | |||||||
| @ -138,7 +138,7 @@ def refresh_scorecards(): | |||||||
| 		# Check to see if any new scorecard periods are created | 		# Check to see if any new scorecard periods are created | ||||||
| 		if make_all_scorecards(sc.name) > 0: | 		if make_all_scorecards(sc.name) > 0: | ||||||
| 			# Save the scorecard to update the score and standings | 			# Save the scorecard to update the score and standings | ||||||
| 			sc.save() | 			frappe.get_doc('Supplier Scorecard', sc.name).save() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @frappe.whitelist() | @frappe.whitelist() | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ from datetime import timedelta | |||||||
| import frappe | import frappe | ||||||
| from frappe import _ | from frappe import _ | ||||||
| from frappe.model.document import Document | from frappe.model.document import Document | ||||||
| from frappe.utils import get_url | from frappe.utils import get_url, getdate | ||||||
| from frappe.utils.verified_command import verify_request, get_signed_params | from frappe.utils.verified_command import verify_request, get_signed_params | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -117,7 +117,7 @@ class Appointment(Document): | |||||||
| 		if self._assign: | 		if self._assign: | ||||||
| 			return | 			return | ||||||
| 		available_agents = _get_agents_sorted_by_asc_workload( | 		available_agents = _get_agents_sorted_by_asc_workload( | ||||||
| 			self.scheduled_time.date()) | 			getdate(self.scheduled_time)) | ||||||
| 		for agent in available_agents: | 		for agent in available_agents: | ||||||
| 			if(_check_agent_availability(agent, self.scheduled_time)): | 			if(_check_agent_availability(agent, self.scheduled_time)): | ||||||
| 				agent = agent[0] | 				agent = agent[0] | ||||||
| @ -189,7 +189,7 @@ def _get_agents_sorted_by_asc_workload(date): | |||||||
| 		assigned_to = frappe.parse_json(appointment._assign) | 		assigned_to = frappe.parse_json(appointment._assign) | ||||||
| 		if not assigned_to: | 		if not assigned_to: | ||||||
| 			continue | 			continue | ||||||
| 		if (assigned_to[0] in agent_list) and appointment.scheduled_time.date() == date: | 		if (assigned_to[0] in agent_list) and getdate(appointment.scheduled_time) == date: | ||||||
| 			appointment_counter[assigned_to[0]] += 1 | 			appointment_counter[assigned_to[0]] += 1 | ||||||
| 	sorted_agent_list = appointment_counter.most_common() | 	sorted_agent_list = appointment_counter.most_common() | ||||||
| 	sorted_agent_list.reverse() | 	sorted_agent_list.reverse() | ||||||
|  | |||||||
| @ -232,7 +232,6 @@ | |||||||
|    "reqd": 1 |    "reqd": 1 | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "description": "You can enter any date manually", |  | ||||||
|    "fieldname": "date_of_birth", |    "fieldname": "date_of_birth", | ||||||
|    "fieldtype": "Date", |    "fieldtype": "Date", | ||||||
|    "label": "Date of Birth", |    "label": "Date of Birth", | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ frappe.ui.form.on('Employee Advance', { | |||||||
| 		} | 		} | ||||||
| 		else if ( | 		else if ( | ||||||
| 			frm.doc.docstatus === 1 | 			frm.doc.docstatus === 1 | ||||||
| 			&& flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) | 			&& flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount) | ||||||
| 			&& frappe.model.can_create("Expense Claim") | 			&& frappe.model.can_create("Expense Claim") | ||||||
| 		) { | 		) { | ||||||
| 			frm.add_custom_button( | 			frm.add_custom_button( | ||||||
| @ -45,6 +45,15 @@ frappe.ui.form.on('Employee Advance', { | |||||||
| 				__('Create') | 				__('Create') | ||||||
| 			); | 			); | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		if (frm.doc.docstatus === 1 | ||||||
|  | 			&& (flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount)) | ||||||
|  | 			&& frappe.model.can_create("Journal Entry")) { | ||||||
|  | 
 | ||||||
|  | 			frm.add_custom_button(__("Return"),  function() { | ||||||
|  | 				frm.trigger('make_return_entry'); | ||||||
|  | 			}, __('Create')); | ||||||
|  | 		} | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	make_payment_entry: function(frm) { | 	make_payment_entry: function(frm) { | ||||||
| @ -83,6 +92,24 @@ frappe.ui.form.on('Employee Advance', { | |||||||
| 		}); | 		}); | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
|  | 	make_return_entry: function(frm) { | ||||||
|  | 		frappe.call({ | ||||||
|  | 			method: 'erpnext.hr.doctype.employee_advance.employee_advance.make_return_entry', | ||||||
|  | 			args: { | ||||||
|  | 				'employee_name': frm.doc.employee, | ||||||
|  | 				'company': frm.doc.company, | ||||||
|  | 				'employee_advance_name': frm.doc.name, | ||||||
|  | 				'return_amount': flt(frm.doc.paid_amount - frm.doc.claimed_amount), | ||||||
|  | 				'mode_of_payment': frm.doc.mode_of_payment, | ||||||
|  | 				'advance_account': frm.doc.advance_account | ||||||
|  | 			}, | ||||||
|  | 			callback: function(r) { | ||||||
|  | 				const doclist = frappe.model.sync(r.message); | ||||||
|  | 				frappe.set_route('Form', doclist[0].doctype, doclist[0].name); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
| 	employee: function (frm) { | 	employee: function (frm) { | ||||||
| 		if (frm.doc.employee) { | 		if (frm.doc.employee) { | ||||||
| 			return frappe.call({ | 			return frappe.call({ | ||||||
|  | |||||||
| @ -1,707 +1,193 @@ | |||||||
| { | { | ||||||
|  "allow_copy": 0,  |  "actions": [], | ||||||
|  "allow_events_in_timeline": 0,  |  | ||||||
|  "allow_guest_to_view": 0,  |  | ||||||
|  "allow_import": 1, |  "allow_import": 1, | ||||||
|  "allow_rename": 0,  |  | ||||||
|  "autoname": "naming_series:", |  "autoname": "naming_series:", | ||||||
|  "beta": 0,  |  | ||||||
|  "creation": "2017-10-09 14:26:29.612365", |  "creation": "2017-10-09 14:26:29.612365", | ||||||
|  "custom": 0,  |  | ||||||
|  "docstatus": 0,  |  | ||||||
|  "doctype": "DocType", |  "doctype": "DocType", | ||||||
|  "document_type": "",  |  | ||||||
|  "editable_grid": 1, |  "editable_grid": 1, | ||||||
|  "engine": "InnoDB", |  "engine": "InnoDB", | ||||||
|  |  "field_order": [ | ||||||
|  |   "naming_series", | ||||||
|  |   "employee", | ||||||
|  |   "employee_name", | ||||||
|  |   "column_break_4", | ||||||
|  |   "posting_date", | ||||||
|  |   "department", | ||||||
|  |   "section_break_8", | ||||||
|  |   "purpose", | ||||||
|  |   "column_break_11", | ||||||
|  |   "advance_amount", | ||||||
|  |   "paid_amount", | ||||||
|  |   "due_advance_amount", | ||||||
|  |   "claimed_amount", | ||||||
|  |   "return_amount", | ||||||
|  |   "section_break_7", | ||||||
|  |   "status", | ||||||
|  |   "company", | ||||||
|  |   "amended_from", | ||||||
|  |   "column_break_18", | ||||||
|  |   "advance_account", | ||||||
|  |   "mode_of_payment" | ||||||
|  |  ], | ||||||
|  "fields": [ |  "fields": [ | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "default": "",  |  | ||||||
|    "fieldname": "naming_series", |    "fieldname": "naming_series", | ||||||
|    "fieldtype": "Select", |    "fieldtype": "Select", | ||||||
|    "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": "Series", |    "label": "Series", | ||||||
|    "length": 0,  |    "options": "HR-EAD-.YYYY.-" | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "HR-EAD-.YYYY.-",  |  | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "employee", |    "fieldname": "employee", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 1, |    "in_list_view": 1, | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Employee", |    "label": "Employee", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Employee", |    "options": "Employee", | ||||||
|    "permlevel": 0,  |    "reqd": 1 | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fetch_from": "employee.employee_name", |    "fetch_from": "employee.employee_name", | ||||||
|    "fieldname": "employee_name", |    "fieldname": "employee_name", | ||||||
|    "fieldtype": "Read Only", |    "fieldtype": "Read Only", | ||||||
|    "hidden": 0,  |    "label": "Employee Name" | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Employee Name",  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "",  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "column_break_4", |    "fieldname": "column_break_4", | ||||||
|    "fieldtype": "Column Break",  |    "fieldtype": "Column Break" | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "default": "Today", |    "default": "Today", | ||||||
|    "fieldname": "posting_date", |    "fieldname": "posting_date", | ||||||
|    "fieldtype": "Date", |    "fieldtype": "Date", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 1, |    "in_list_view": 1, | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Posting Date", |    "label": "Posting Date", | ||||||
|    "length": 0,  |    "reqd": 1 | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "",  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fetch_from": "employee.department", |    "fetch_from": "employee.department", | ||||||
|    "fieldname": "department", |    "fieldname": "department", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Department", |    "label": "Department", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Department", |    "options": "Department", | ||||||
|    "permlevel": 0,  |    "read_only": 1 | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "section_break_8", |    "fieldname": "section_break_8", | ||||||
|    "fieldtype": "Section Break",  |    "fieldtype": "Section Break" | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "purpose", |    "fieldname": "purpose", | ||||||
|    "fieldtype": "Small Text", |    "fieldtype": "Small Text", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 1, |    "in_list_view": 1, | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Purpose", |    "label": "Purpose", | ||||||
|    "length": 0,  |    "reqd": 1 | ||||||
|    "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": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "column_break_11", |    "fieldname": "column_break_11", | ||||||
|    "fieldtype": "Column Break",  |    "fieldtype": "Column Break" | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "advance_amount", |    "fieldname": "advance_amount", | ||||||
|    "fieldtype": "Currency", |    "fieldtype": "Currency", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 1, |    "in_list_view": 1, | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Advance Amount", |    "label": "Advance Amount", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Company:company:default_currency", |    "options": "Company:company:default_currency", | ||||||
|    "permlevel": 0,  |    "reqd": 1 | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "paid_amount", |    "fieldname": "paid_amount", | ||||||
|    "fieldtype": "Currency", |    "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": "Paid Amount", |    "label": "Paid Amount", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 1, |    "no_copy": 1, | ||||||
|    "options": "Company:company:default_currency", |    "options": "Company:company:default_currency", | ||||||
|    "permlevel": 0,  |    "read_only": 1 | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "depends_on": "eval:cur_frm.doc.employee", |    "depends_on": "eval:cur_frm.doc.employee", | ||||||
|    "fieldname": "due_advance_amount", |    "fieldname": "due_advance_amount", | ||||||
|    "fieldtype": "Currency", |    "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": "Due Advance Amount", |    "label": "Due Advance Amount", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Company:company:default_currency", |    "options": "Company:company:default_currency", | ||||||
|    "permlevel": 0,  |    "read_only": 1 | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "claimed_amount", |    "fieldname": "claimed_amount", | ||||||
|    "fieldtype": "Currency", |    "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": "Claimed Amount", |    "label": "Claimed Amount", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 1, |    "no_copy": 1, | ||||||
|    "options": "Company:company:default_currency", |    "options": "Company:company:default_currency", | ||||||
|    "permlevel": 0,  |    "read_only": 1 | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "section_break_7", |    "fieldname": "section_break_7", | ||||||
|    "fieldtype": "Section Break",  |    "fieldtype": "Section Break" | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "status", |    "fieldname": "status", | ||||||
|    "fieldtype": "Select", |    "fieldtype": "Select", | ||||||
|    "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": "Status", |    "label": "Status", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 1, |    "no_copy": 1, | ||||||
|    "options": "Draft\nPaid\nUnpaid\nClaimed\nCancelled", |    "options": "Draft\nPaid\nUnpaid\nClaimed\nCancelled", | ||||||
|    "permlevel": 0,  |    "read_only": 1 | ||||||
|    "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,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "company", |    "fieldname": "company", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Company", |    "label": "Company", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Company", |    "options": "Company", | ||||||
|    "permlevel": 0,  |    "reqd": 1 | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "amended_from", |    "fieldname": "amended_from", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Amended From", |    "label": "Amended From", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 1, |    "no_copy": 1, | ||||||
|    "options": "Employee Advance", |    "options": "Employee Advance", | ||||||
|    "permlevel": 0,  |  | ||||||
|    "print_hide": 1, |    "print_hide": 1, | ||||||
|    "print_hide_if_no_value": 0,  |    "read_only": 1 | ||||||
|    "read_only": 1,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "column_break_18", |    "fieldname": "column_break_18", | ||||||
|    "fieldtype": "Column Break",  |    "fieldtype": "Column Break" | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "advance_account", |    "fieldname": "advance_account", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 1, |    "ignore_user_permissions": 1, | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Advance Account", |    "label": "Advance Account", | ||||||
|    "length": 0,  |  | ||||||
|    "no_copy": 0,  |  | ||||||
|    "options": "Account", |    "options": "Account", | ||||||
|    "permlevel": 0,  |    "reqd": 1 | ||||||
|    "precision": "",  |  | ||||||
|    "print_hide": 0,  |  | ||||||
|    "print_hide_if_no_value": 0,  |  | ||||||
|    "read_only": 0,  |  | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 1,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|    "allow_bulk_edit": 0,  |  | ||||||
|    "allow_in_quick_entry": 0,  |  | ||||||
|    "allow_on_submit": 0,  |  | ||||||
|    "bold": 0,  |  | ||||||
|    "collapsible": 0,  |  | ||||||
|    "columns": 0,  |  | ||||||
|    "fieldname": "mode_of_payment", |    "fieldname": "mode_of_payment", | ||||||
|    "fieldtype": "Link", |    "fieldtype": "Link", | ||||||
|    "hidden": 0,  |  | ||||||
|    "ignore_user_permissions": 0,  |  | ||||||
|    "ignore_xss_filter": 0,  |  | ||||||
|    "in_filter": 0,  |  | ||||||
|    "in_global_search": 0,  |  | ||||||
|    "in_list_view": 0,  |  | ||||||
|    "in_standard_filter": 0,  |  | ||||||
|    "label": "Mode of Payment", |    "label": "Mode of Payment", | ||||||
|    "length": 0,  |    "options": "Mode of Payment" | ||||||
|    "no_copy": 0,  |   }, | ||||||
|    "options": "Mode of Payment",  |   { | ||||||
|    "permlevel": 0,  |    "fieldname": "return_amount", | ||||||
|    "precision": "",  |    "fieldtype": "Currency", | ||||||
|    "print_hide": 0,  |    "label": "Returned Amount", | ||||||
|    "print_hide_if_no_value": 0,  |    "options": "Company:company:default_currency", | ||||||
|    "read_only": 0,  |    "read_only": 1 | ||||||
|    "remember_last_selected_value": 0,  |  | ||||||
|    "report_hide": 0,  |  | ||||||
|    "reqd": 0,  |  | ||||||
|    "search_index": 0,  |  | ||||||
|    "set_only_once": 0,  |  | ||||||
|    "translatable": 0,  |  | ||||||
|    "unique": 0 |  | ||||||
|   } |   } | ||||||
|  ], |  ], | ||||||
|  "has_web_view": 0,  |  | ||||||
|  "hide_heading": 0,  |  | ||||||
|  "hide_toolbar": 0,  |  | ||||||
|  "idx": 0,  |  | ||||||
|  "image_view": 0,  |  | ||||||
|  "in_create": 0,  |  | ||||||
|  "is_submittable": 1, |  "is_submittable": 1, | ||||||
|  "issingle": 0,  |  "links": [], | ||||||
|  "istable": 0,  |  "modified": "2019-12-15 19:04:07.044505", | ||||||
|  "max_attachments": 0,  |  | ||||||
|  "modified": "2019-01-30 11:28:15.529649",  |  | ||||||
|  "modified_by": "Administrator", |  "modified_by": "Administrator", | ||||||
|  "module": "HR", |  "module": "HR", | ||||||
|  "name": "Employee Advance", |  "name": "Employee Advance", | ||||||
|  "name_case": "",  |  | ||||||
|  "owner": "Administrator", |  "owner": "Administrator", | ||||||
|  "permissions": [ |  "permissions": [ | ||||||
|   { |   { | ||||||
|    "amend": 0,  |  | ||||||
|    "cancel": 0,  |  | ||||||
|    "create": 1, |    "create": 1, | ||||||
|    "delete": 0,  |  | ||||||
|    "email": 1, |    "email": 1, | ||||||
|    "export": 1, |    "export": 1, | ||||||
|    "if_owner": 0,  |  | ||||||
|    "import": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "print": 1, |    "print": 1, | ||||||
|    "read": 1, |    "read": 1, | ||||||
|    "report": 1, |    "report": 1, | ||||||
|    "role": "Employee", |    "role": "Employee", | ||||||
|    "set_user_permissions": 0,  |  | ||||||
|    "share": 1, |    "share": 1, | ||||||
|    "submit": 0,  |  | ||||||
|    "write": 1 |    "write": 1 | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
| @ -711,27 +197,17 @@ | |||||||
|    "delete": 1, |    "delete": 1, | ||||||
|    "email": 1, |    "email": 1, | ||||||
|    "export": 1, |    "export": 1, | ||||||
|    "if_owner": 0,  |  | ||||||
|    "import": 0,  |  | ||||||
|    "permlevel": 0,  |  | ||||||
|    "print": 1, |    "print": 1, | ||||||
|    "read": 1, |    "read": 1, | ||||||
|    "report": 1, |    "report": 1, | ||||||
|    "role": "Expense Approver", |    "role": "Expense Approver", | ||||||
|    "set_user_permissions": 0,  |  | ||||||
|    "share": 1, |    "share": 1, | ||||||
|    "submit": 1, |    "submit": 1, | ||||||
|    "write": 1 |    "write": 1 | ||||||
|   } |   } | ||||||
|  ], |  ], | ||||||
|  "quick_entry": 0,  |  | ||||||
|  "read_only": 0,  |  | ||||||
|  "read_only_onload": 0,  |  | ||||||
|  "search_fields": "employee,employee_name", |  "search_fields": "employee,employee_name", | ||||||
|  "show_name_in_global_search": 0,  |  | ||||||
|  "sort_field": "modified", |  "sort_field": "modified", | ||||||
|  "sort_order": "DESC", |  "sort_order": "DESC", | ||||||
|  "track_changes": 1,  |  "track_changes": 1 | ||||||
|  "track_seen": 0,  |  | ||||||
|  "track_views": 0 |  | ||||||
| } | } | ||||||
| @ -7,6 +7,7 @@ import frappe, erpnext | |||||||
| from frappe import _ | from frappe import _ | ||||||
| from frappe.model.document import Document | from frappe.model.document import Document | ||||||
| from frappe.utils import flt, nowdate | from frappe.utils import flt, nowdate | ||||||
|  | from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account | ||||||
| 
 | 
 | ||||||
| class EmployeeAdvanceOverPayment(frappe.ValidationError): | class EmployeeAdvanceOverPayment(frappe.ValidationError): | ||||||
| 	pass | 	pass | ||||||
| @ -53,11 +54,25 @@ class EmployeeAdvance(Document): | |||||||
| 				and party = %s | 				and party = %s | ||||||
| 		""", (self.name, self.employee), as_dict=1)[0].paid_amount | 		""", (self.name, self.employee), as_dict=1)[0].paid_amount | ||||||
| 
 | 
 | ||||||
|  | 		return_amount = frappe.db.sql(""" | ||||||
|  | 			select name, ifnull(sum(credit_in_account_currency), 0) as return_amount | ||||||
|  | 			from `tabGL Entry` | ||||||
|  | 			where against_voucher_type = 'Employee Advance' | ||||||
|  | 				and voucher_type != 'Expense Claim' | ||||||
|  | 				and against_voucher = %s | ||||||
|  | 				and party_type = 'Employee' | ||||||
|  | 				and party = %s | ||||||
|  | 		""", (self.name, self.employee), as_dict=1)[0].return_amount | ||||||
|  | 
 | ||||||
| 		if flt(paid_amount) > self.advance_amount: | 		if flt(paid_amount) > self.advance_amount: | ||||||
| 			frappe.throw(_("Row {0}# Paid Amount cannot be greater than requested advance amount"), | 			frappe.throw(_("Row {0}# Paid Amount cannot be greater than requested advance amount"), | ||||||
| 				EmployeeAdvanceOverPayment) | 				EmployeeAdvanceOverPayment) | ||||||
| 
 | 
 | ||||||
|  | 		if flt(return_amount) > self.paid_amount - self.claimed_amount: | ||||||
|  | 			frappe.throw(_("Return amount cannot be greater unclaimed amount")) | ||||||
|  | 
 | ||||||
| 		self.db_set("paid_amount", paid_amount) | 		self.db_set("paid_amount", paid_amount) | ||||||
|  | 		self.db_set("return_amount", return_amount) | ||||||
| 		self.set_status() | 		self.set_status() | ||||||
| 		frappe.db.set_value("Employee Advance", self.name , "status", self.status) | 		frappe.db.set_value("Employee Advance", self.name , "status", self.status) | ||||||
| 
 | 
 | ||||||
| @ -88,8 +103,6 @@ def get_due_advance_amount(employee, posting_date): | |||||||
| 
 | 
 | ||||||
| @frappe.whitelist() | @frappe.whitelist() | ||||||
| def make_bank_entry(dt, dn): | def make_bank_entry(dt, dn): | ||||||
| 	from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account |  | ||||||
| 
 |  | ||||||
| 	doc = frappe.get_doc(dt, dn) | 	doc = frappe.get_doc(dt, dn) | ||||||
| 	payment_account = get_default_bank_cash_account(doc.company, account_type="Cash", | 	payment_account = get_default_bank_cash_account(doc.company, account_type="Cash", | ||||||
| 		mode_of_payment=doc.mode_of_payment) | 		mode_of_payment=doc.mode_of_payment) | ||||||
| @ -118,3 +131,33 @@ def make_bank_entry(dt, dn): | |||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	return je.as_dict() | 	return je.as_dict() | ||||||
|  | 
 | ||||||
|  | @frappe.whitelist() | ||||||
|  | def make_return_entry(employee_name, company, employee_advance_name, return_amount, mode_of_payment, advance_account): | ||||||
|  | 	return_account = get_default_bank_cash_account(company, account_type='Cash', mode_of_payment = mode_of_payment) | ||||||
|  | 	je = frappe.new_doc('Journal Entry') | ||||||
|  | 	je.posting_date = nowdate() | ||||||
|  | 	je.voucher_type = 'Bank Entry' | ||||||
|  | 	je.company = company | ||||||
|  | 	je.remark = 'Return against Employee Advance: ' + employee_advance_name | ||||||
|  | 
 | ||||||
|  | 	je.append('accounts', { | ||||||
|  | 		'account': advance_account, | ||||||
|  | 		'credit_in_account_currency': return_amount, | ||||||
|  | 		'reference_type': 'Employee Advance', | ||||||
|  | 		'reference_name': employee_advance_name, | ||||||
|  | 		'party_type': 'Employee', | ||||||
|  | 		'party': employee_name, | ||||||
|  | 		'is_advance': 'Yes' | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	je.append("accounts", { | ||||||
|  | 		"account": return_account.account, | ||||||
|  | 		"debit_in_account_currency": return_amount, | ||||||
|  | 		"account_currency": return_account.account_currency, | ||||||
|  | 		"account_type": return_account.account_type | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	return je.as_dict() | ||||||
|  | 	 | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -0,0 +1,19 @@ | |||||||
|  | from __future__ import unicode_literals | ||||||
|  | from frappe import _ | ||||||
|  | 
 | ||||||
|  | def get_data(): | ||||||
|  | 	return { | ||||||
|  | 		'fieldname': 'employee_advance', | ||||||
|  |         'non_standard_fieldnames': { | ||||||
|  |             'Payment Entry': 'reference_name', | ||||||
|  |             'Journal Entry': 'reference_name' | ||||||
|  |         }, | ||||||
|  | 		'transactions': [ | ||||||
|  | 			{ | ||||||
|  | 				'items': ['Expense Claim'] | ||||||
|  | 			}, | ||||||
|  | 			{ | ||||||
|  | 				'items': ['Payment Entry', 'Journal Entry'] | ||||||
|  | 			} | ||||||
|  | 		] | ||||||
|  | 	} | ||||||
| @ -7,6 +7,14 @@ frappe.ui.form.on('Employee Onboarding', { | |||||||
| 		frm.add_fetch("employee_onboarding_template", "department", "department"); | 		frm.add_fetch("employee_onboarding_template", "department", "department"); | ||||||
| 		frm.add_fetch("employee_onboarding_template", "designation", "designation"); | 		frm.add_fetch("employee_onboarding_template", "designation", "designation"); | ||||||
| 		frm.add_fetch("employee_onboarding_template", "employee_grade", "employee_grade"); | 		frm.add_fetch("employee_onboarding_template", "employee_grade", "employee_grade"); | ||||||
|  | 
 | ||||||
|  | 		frm.set_query('job_offer', function () { | ||||||
|  | 			return { | ||||||
|  | 				filters: { | ||||||
|  | 					'job_applicant': frm.doc.job_applicant | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		}); | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	refresh: function(frm) { | 	refresh: function(frm) { | ||||||
|  | |||||||
| @ -243,11 +243,11 @@ frappe.ui.form.on("Expense Claim", { | |||||||
| 
 | 
 | ||||||
| 	update_employee_advance_claimed_amount: function(frm) { | 	update_employee_advance_claimed_amount: function(frm) { | ||||||
| 		let amount_to_be_allocated = frm.doc.grand_total; | 		let amount_to_be_allocated = frm.doc.grand_total; | ||||||
| 		$.each(frm.doc.advances || [], function(i, advance){ | 		$.each(frm.doc.advances || [], function(i, advance) { | ||||||
| 			if (amount_to_be_allocated >= advance.unclaimed_amount){ | 			if (amount_to_be_allocated >= advance.unclaimed_amount) { | ||||||
| 				frm.doc.advances[i].allocated_amount = frm.doc.advances[i].unclaimed_amount; | 				frm.doc.advances[i].allocated_amount = frm.doc.advances[i].unclaimed_amount; | ||||||
| 				amount_to_be_allocated -= advance.allocated_amount; | 				amount_to_be_allocated -= advance.allocated_amount; | ||||||
| 			} else{ | 			} else { | ||||||
| 				frm.doc.advances[i].allocated_amount = amount_to_be_allocated; | 				frm.doc.advances[i].allocated_amount = amount_to_be_allocated; | ||||||
| 				amount_to_be_allocated = 0; | 				amount_to_be_allocated = 0; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| { | { | ||||||
|  |  "actions": [], | ||||||
|  "allow_import": 1, |  "allow_import": 1, | ||||||
|  "autoname": "naming_series:", |  "autoname": "naming_series:", | ||||||
|  "creation": "2013-01-10 16:34:14", |  "creation": "2013-01-10 16:34:14", | ||||||
| @ -43,6 +44,7 @@ | |||||||
|   "accounting_dimensions_section", |   "accounting_dimensions_section", | ||||||
|   "project", |   "project", | ||||||
|   "dimension_col_break", |   "dimension_col_break", | ||||||
|  |   "cost_center", | ||||||
|   "more_details", |   "more_details", | ||||||
|   "status", |   "status", | ||||||
|   "amended_from", |   "amended_from", | ||||||
| @ -365,7 +367,8 @@ | |||||||
|  "icon": "fa fa-money", |  "icon": "fa fa-money", | ||||||
|  "idx": 1, |  "idx": 1, | ||||||
|  "is_submittable": 1, |  "is_submittable": 1, | ||||||
|  "modified": "2019-11-09 14:13:08.964547", |  "links": [], | ||||||
|  |  "modified": "2019-12-14 23:52:05.388458", | ||||||
|  "modified_by": "Administrator", |  "modified_by": "Administrator", | ||||||
|  "module": "HR", |  "module": "HR", | ||||||
|  "name": "Expense Claim", |  "name": "Expense Claim", | ||||||
|  | |||||||
| @ -43,9 +43,9 @@ class ExpenseClaim(AccountsController): | |||||||
| 		}[cstr(self.docstatus or 0)] | 		}[cstr(self.docstatus or 0)] | ||||||
| 
 | 
 | ||||||
| 		paid_amount = flt(self.total_amount_reimbursed) + flt(self.total_advance_amount) | 		paid_amount = flt(self.total_amount_reimbursed) + flt(self.total_advance_amount) | ||||||
| 		precision = self.precision("total_sanctioned_amount") | 		precision = self.precision("grand_total") | ||||||
| 		if (self.is_paid or (flt(self.total_sanctioned_amount) > 0 | 		if (self.is_paid or (flt(self.total_sanctioned_amount) > 0 | ||||||
| 			and flt(self.total_sanctioned_amount, precision) ==  flt(paid_amount, precision))) \ | 			and flt(self.grand_total, precision) ==  flt(paid_amount, precision))) \ | ||||||
| 			and self.docstatus == 1 and self.approval_status == 'Approved': | 			and self.docstatus == 1 and self.approval_status == 'Approved': | ||||||
| 				self.status = "Paid" | 				self.status = "Paid" | ||||||
| 		elif flt(self.total_sanctioned_amount) > 0 and self.docstatus == 1 and self.approval_status == 'Approved': | 		elif flt(self.total_sanctioned_amount) > 0 and self.docstatus == 1 and self.approval_status == 'Approved': | ||||||
| @ -322,7 +322,7 @@ def get_expense_claim_account(expense_claim_type, company): | |||||||
| @frappe.whitelist() | @frappe.whitelist() | ||||||
| def get_advances(employee, advance_id=None): | def get_advances(employee, advance_id=None): | ||||||
| 	if not advance_id: | 	if not advance_id: | ||||||
| 		condition = 'docstatus=1 and employee={0} and paid_amount > 0 and paid_amount > claimed_amount'.format(frappe.db.escape(employee)) | 		condition = 'docstatus=1 and employee={0} and paid_amount > 0 and paid_amount > claimed_amount + return_amount'.format(frappe.db.escape(employee)) | ||||||
| 	else: | 	else: | ||||||
| 		condition = 'name={0}'.format(frappe.db.escape(advance_id)) | 		condition = 'name={0}'.format(frappe.db.escape(advance_id)) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,10 +2,10 @@ | |||||||
| // License: GNU General Public License v3. See license.txt
 | // License: GNU General Public License v3. See license.txt
 | ||||||
| 
 | 
 | ||||||
| frappe.ui.form.on("Expense Claim Type", { | frappe.ui.form.on("Expense Claim Type", { | ||||||
| 	refresh: function(frm){ | 	refresh: function(frm) { | ||||||
| 		frm.fields_dict["accounts"].grid.get_field("default_account").get_query = function(frm, cdt, cdn){ | 		frm.fields_dict["accounts"].grid.get_field("default_account").get_query = function(doc, cdt, cdn) { | ||||||
| 			var d = locals[cdt][cdn]; | 			var d = locals[cdt][cdn]; | ||||||
| 			return{ | 			return { | ||||||
| 				filters: { | 				filters: { | ||||||
| 					"is_group": 0, | 					"is_group": 0, | ||||||
| 					"root_type": frm.doc.deferred_expense_account ? "Asset" : "Expense", | 					"root_type": frm.doc.deferred_expense_account ? "Asset" : "Expense", | ||||||
|  | |||||||
| @ -54,9 +54,11 @@ class LeaveApplication(Document): | |||||||
| 		self.create_leave_ledger_entry() | 		self.create_leave_ledger_entry() | ||||||
| 		self.reload() | 		self.reload() | ||||||
| 
 | 
 | ||||||
|  | 	def before_cancel(self): | ||||||
|  | 		self.status = "Cancelled" | ||||||
|  | 
 | ||||||
| 	def on_cancel(self): | 	def on_cancel(self): | ||||||
| 		self.create_leave_ledger_entry(submit=False) | 		self.create_leave_ledger_entry(submit=False) | ||||||
| 		self.status = "Cancelled" |  | ||||||
| 		# notify leave applier about cancellation | 		# notify leave applier about cancellation | ||||||
| 		self.notify_employee() | 		self.notify_employee() | ||||||
| 		self.cancel_attendance() | 		self.cancel_attendance() | ||||||
|  | |||||||
| @ -163,7 +163,7 @@ class PayrollEntry(Document): | |||||||
| 		""" | 		""" | ||||||
| 		cond = self.get_filter_condition() | 		cond = self.get_filter_condition() | ||||||
| 		return frappe.db.sql(""" select eld.loan_account, eld.loan, | 		return frappe.db.sql(""" select eld.loan_account, eld.loan, | ||||||
| 				eld.interest_income_account, eld.principal_amount, eld.interest_amount, eld.total_payment | 				eld.interest_income_account, eld.principal_amount, eld.interest_amount, eld.total_payment,t1.employee | ||||||
| 			from | 			from | ||||||
| 				`tabSalary Slip` t1, `tabSalary Slip Loan` eld | 				`tabSalary Slip` t1, `tabSalary Slip Loan` eld | ||||||
| 			where | 			where | ||||||
| @ -246,6 +246,7 @@ class PayrollEntry(Document): | |||||||
| 				accounts.append({ | 				accounts.append({ | ||||||
| 						"account": acc, | 						"account": acc, | ||||||
| 						"debit_in_account_currency": flt(amount, precision), | 						"debit_in_account_currency": flt(amount, precision), | ||||||
|  | 						"party_type": '', | ||||||
| 						"cost_center": self.cost_center, | 						"cost_center": self.cost_center, | ||||||
| 						"project": self.project | 						"project": self.project | ||||||
| 					}) | 					}) | ||||||
| @ -257,6 +258,7 @@ class PayrollEntry(Document): | |||||||
| 						"account": acc, | 						"account": acc, | ||||||
| 						"credit_in_account_currency": flt(amount, precision), | 						"credit_in_account_currency": flt(amount, precision), | ||||||
| 						"cost_center": self.cost_center, | 						"cost_center": self.cost_center, | ||||||
|  | 						"party_type": '', | ||||||
| 						"project": self.project | 						"project": self.project | ||||||
| 					}) | 					}) | ||||||
| 
 | 
 | ||||||
| @ -264,7 +266,9 @@ class PayrollEntry(Document): | |||||||
| 			for data in loan_details: | 			for data in loan_details: | ||||||
| 				accounts.append({ | 				accounts.append({ | ||||||
| 						"account": data.loan_account, | 						"account": data.loan_account, | ||||||
| 						"credit_in_account_currency": data.principal_amount | 						"credit_in_account_currency": data.principal_amount, | ||||||
|  | 						"party_type": "Employee", | ||||||
|  | 						"party": data.employee | ||||||
| 					}) | 					}) | ||||||
| 
 | 
 | ||||||
| 				if data.interest_amount and not data.interest_income_account: | 				if data.interest_amount and not data.interest_income_account: | ||||||
| @ -275,14 +279,17 @@ class PayrollEntry(Document): | |||||||
| 						"account": data.interest_income_account, | 						"account": data.interest_income_account, | ||||||
| 						"credit_in_account_currency": data.interest_amount, | 						"credit_in_account_currency": data.interest_amount, | ||||||
| 						"cost_center": self.cost_center, | 						"cost_center": self.cost_center, | ||||||
| 						"project": self.project | 						"project": self.project, | ||||||
|  | 						"party_type": "Employee", | ||||||
|  | 						"party": data.employee | ||||||
| 					}) | 					}) | ||||||
| 				payable_amount -= flt(data.total_payment, precision) | 				payable_amount -= flt(data.total_payment, precision) | ||||||
| 
 | 
 | ||||||
| 			# Payable amount | 			# Payable amount | ||||||
| 			accounts.append({ | 			accounts.append({ | ||||||
| 				"account": default_payroll_payable_account, | 				"account": default_payroll_payable_account, | ||||||
| 				"credit_in_account_currency": flt(payable_amount, precision) | 				"credit_in_account_currency": flt(payable_amount, precision), | ||||||
|  | 				"party_type": '', | ||||||
| 			}) | 			}) | ||||||
| 
 | 
 | ||||||
| 			journal_entry.set("accounts", accounts) | 			journal_entry.set("accounts", accounts) | ||||||
| @ -546,7 +553,6 @@ def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progr | |||||||
| 		count += 1 | 		count += 1 | ||||||
| 		if publish_progress: | 		if publish_progress: | ||||||
| 			frappe.publish_progress(count*100/len(salary_slips), title = _("Submitting Salary Slips...")) | 			frappe.publish_progress(count*100/len(salary_slips), title = _("Submitting Salary Slips...")) | ||||||
| 
 |  | ||||||
| 	if submitted_ss: | 	if submitted_ss: | ||||||
| 		payroll_entry.make_accrual_jv_entry() | 		payroll_entry.make_accrual_jv_entry() | ||||||
| 		frappe.msgprint(_("Salary Slip submitted for period from {0} to {1}") | 		frappe.msgprint(_("Salary Slip submitted for period from {0} to {1}") | ||||||
|  | |||||||
| @ -119,6 +119,10 @@ frappe.ui.form.on('Salary Structure', { | |||||||
| 			}, | 			}, | ||||||
| 			callback: function(r) { | 			callback: function(r) { | ||||||
| 				var employees = r.message; | 				var employees = r.message; | ||||||
|  | 				if(!employees) return; | ||||||
|  | 				if (employees.length == 1){ | ||||||
|  | 					frm.events.open_salary_slip(frm, employees[0]); | ||||||
|  | 				} else { | ||||||
| 						var d = new frappe.ui.Dialog({ | 						var d = new frappe.ui.Dialog({ | ||||||
| 						title: __("Preview Salary Slip"), | 						title: __("Preview Salary Slip"), | ||||||
| 						fields: [ | 						fields: [ | ||||||
| @ -138,16 +142,22 @@ frappe.ui.form.on('Salary Structure', { | |||||||
| 					d.get_input("fetch").on("click", function() { | 					d.get_input("fetch").on("click", function() { | ||||||
| 						var values = d.get_values(); | 						var values = d.get_values(); | ||||||
| 						if(!values) return; | 						if(!values) return; | ||||||
| 					var print_format; | 							frm.events.open_salary_slip(frm, values.employee) | ||||||
| 					frm.doc.salary_slip_based_on_timesheet ? |  | ||||||
| 						print_format="Salary Slip based on Timesheet" : |  | ||||||
| 						print_format="Salary Slip Standard"; |  | ||||||
| 
 | 
 | ||||||
|  | 					}); | ||||||
|  | 					d.show(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	open_salary_slip: function(frm, employee){ | ||||||
|  | 		var print_format = frm.doc.salary_slip_based_on_timesheet ? "Salary Slip based on Timesheet" : "Salary Slip Standard"; | ||||||
| 		frappe.call({ | 		frappe.call({ | ||||||
| 			method: "erpnext.hr.doctype.salary_structure.salary_structure.make_salary_slip", | 			method: "erpnext.hr.doctype.salary_structure.salary_structure.make_salary_slip", | ||||||
| 			args: { | 			args: { | ||||||
| 				source_name: frm.doc.name, | 				source_name: frm.doc.name, | ||||||
| 							employee: values.employee, | 				employee: employee, | ||||||
| 				as_print: 1, | 				as_print: 1, | ||||||
| 				print_format: print_format, | 				print_format: print_format, | ||||||
| 				for_preview: 1 | 				for_preview: 1 | ||||||
| @ -155,11 +165,6 @@ frappe.ui.form.on('Salary Structure', { | |||||||
| 			callback: function(r) { | 			callback: function(r) { | ||||||
| 				var new_window = window.open(); | 				var new_window = window.open(); | ||||||
| 				new_window.document.write(r.message); | 				new_window.document.write(r.message); | ||||||
| 							// frappe.msgprint(r.message);
 |  | ||||||
| 						} |  | ||||||
| 					}); |  | ||||||
| 				}); |  | ||||||
| 				d.show(); |  | ||||||
| 			} | 			} | ||||||
| 		}); | 		}); | ||||||
| 	}, | 	}, | ||||||
|  | |||||||
| @ -1775,14 +1775,28 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ | |||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
|  | 	set_reserve_warehouse: function() { | ||||||
|  | 		this.autofill_warehouse("reserve_warehouse"); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
| 	set_warehouse: function() { | 	set_warehouse: function() { | ||||||
|  | 		this.autofill_warehouse("warehouse"); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	autofill_warehouse : function (warehouse_field) { | ||||||
|  | 		// set warehouse in all child table rows
 | ||||||
| 		var me = this; | 		var me = this; | ||||||
| 		if(this.frm.doc.set_warehouse) { | 		let warehouse = (warehouse_field === "warehouse") ? me.frm.doc.set_warehouse : me.frm.doc.set_reserve_warehouse; | ||||||
| 			$.each(this.frm.doc.items || [], function(i, item) { | 		let child_table = (warehouse_field === "warehouse") ? me.frm.doc.items : me.frm.doc.supplied_items; | ||||||
| 				frappe.model.set_value(me.frm.doctype + " Item", item.name, "warehouse", me.frm.doc.set_warehouse); | 		let doctype = (warehouse_field === "warehouse") ? (me.frm.doctype + " Item") : (me.frm.doctype + " Item Supplied"); | ||||||
|  | 
 | ||||||
|  | 		if(warehouse) { | ||||||
|  | 			$.each(child_table || [], function(i, item) { | ||||||
|  | 				frappe.model.set_value(doctype, item.name, warehouse_field, warehouse); | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
|  | 
 | ||||||
| 	coupon_code: function() { | 	coupon_code: function() { | ||||||
| 		var me = this; | 		var me = this; | ||||||
| 		frappe.run_serially([ | 		frappe.run_serially([ | ||||||
|  | |||||||
| @ -501,6 +501,7 @@ erpnext.utils.update_child_items = function(opts) { | |||||||
| 	frm.doc[opts.child_docname].forEach(d => { | 	frm.doc[opts.child_docname].forEach(d => { | ||||||
| 		dialog.fields_dict.trans_items.df.data.push({ | 		dialog.fields_dict.trans_items.df.data.push({ | ||||||
| 			"docname": d.name, | 			"docname": d.name, | ||||||
|  | 			"name": d.name, | ||||||
| 			"item_code": d.item_code, | 			"item_code": d.item_code, | ||||||
| 			"qty": d.qty, | 			"qty": d.qty, | ||||||
| 			"rate": d.rate, | 			"rate": d.rate, | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								erpnext/setup/doctype/company/company_list.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								erpnext/setup/doctype/company/company_list.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | frappe.listview_settings['Company'] = { | ||||||
|  |     onload: () => { | ||||||
|  |         frappe.breadcrumbs.add({ | ||||||
|  |             type: 'Custom', | ||||||
|  |             module: __('Accounts'), | ||||||
|  |             label: __('Accounts'), | ||||||
|  |             route: '#modules/Accounts' | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user