135 lines
4.7 KiB
Python
135 lines
4.7 KiB
Python
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import frappe
|
|
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
|
|
|
doctype_series_map = {
|
|
'Additional Salary': 'HR-ADS-.YY.-.MM.-',
|
|
'Appraisal': 'HR-APR-.YY.-.MM.',
|
|
'Asset': 'ACC-ASS-.YYYY.-',
|
|
'Attendance': 'HR-ATT-.YYYY.-',
|
|
'Auto Repeat': 'SYS-ARP-.YYYY.-',
|
|
'Blanket Order': 'MFG-BLR-.YYYY.-',
|
|
'C-Form': 'ACC-CF-.YYYY.-',
|
|
'Campaign': 'SAL-CAM-.YYYY.-',
|
|
'Clinical Procedure': 'HLC-CPR-.YYYY.-',
|
|
'Course Schedule': 'EDU-CSH-.YYYY.-',
|
|
'Customer': 'CUST-.YYYY.-',
|
|
'Delivery Note': 'MAT-DN-.YYYY.-',
|
|
'Delivery Trip': 'MAT-DT-.YYYY.-',
|
|
'Driver': 'HR-DRI-.YYYY.-',
|
|
'Employee': 'HR-EMP-',
|
|
'Employee Advance': 'HR-EAD-.YYYY.-',
|
|
'Expense Claim': 'HR-EXP-.YYYY.-',
|
|
'Fee Schedule': 'EDU-FSH-.YYYY.-',
|
|
'Fee Structure': 'EDU-FST-.YYYY.-',
|
|
'Fees': 'EDU-FEE-.YYYY.-',
|
|
'Inpatient Record': 'HLC-INP-.YYYY.-',
|
|
'Installation Note': 'MAT-INS-.YYYY.-',
|
|
'Instructor': 'EDU-INS-.YYYY.-',
|
|
'Issue': 'ISS-.YYYY.-',
|
|
'Journal Entry': 'ACC-JV-.YYYY.-',
|
|
'Lab Test': 'HLC-LT-.YYYY.-',
|
|
'Landed Cost Voucher': 'MAT-LCV-.YYYY.-',
|
|
'Lead': 'CRM-LEAD-.YYYY.-',
|
|
'Leave Allocation': 'HR-LAL-.YYYY.-',
|
|
'Leave Application': 'HR-LAP-.YYYY.-',
|
|
'Maintenance Schedule': 'MAT-MSH-.YYYY.-',
|
|
'Maintenance Visit': 'MAT-MVS-.YYYY.-',
|
|
'Material Request': 'MAT-MR-.YYYY.-',
|
|
'Member': 'NPO-MEM-.YYYY.-',
|
|
'Opportunity': 'CRM-OPP-.YYYY.-',
|
|
'Packing Slip': 'MAT-PAC-.YYYY.-',
|
|
'Patient': 'HLC-PAT-.YYYY.-',
|
|
'Patient Encounter': 'HLC-ENC-.YYYY.-',
|
|
'Patient Medical Record': 'HLC-PMR-.YYYY.-',
|
|
'Payment Entry': 'ACC-PAY-.YYYY.-',
|
|
'Payment Request': 'ACC-PRQ-.YYYY.-',
|
|
'Production Plan': 'MFG-PP-.YYYY.-',
|
|
'Project Update': 'PROJ-UPD-.YYYY.-',
|
|
'Purchase Invoice': 'ACC-PINV-.YYYY.-',
|
|
'Purchase Order': 'PUR-ORD-.YYYY.-',
|
|
'Purchase Receipt': 'MAT-PRE-.YYYY.-',
|
|
'Quality Inspection': 'MAT-QA-.YYYY.-',
|
|
'Quotation': 'SAL-QTN-.YYYY.-',
|
|
'Request for Quotation': 'PUR-RFQ-.YYYY.-',
|
|
'Sales Invoice': 'ACC-SINV-.YYYY.-',
|
|
'Sales Order': 'SAL-ORD-.YYYY.-',
|
|
'Sample Collection': 'HLC-SC-.YYYY.-',
|
|
'Shareholder': 'ACC-SH-.YYYY.-',
|
|
'Stock Entry': 'MAT-STE-.YYYY.-',
|
|
'Stock Reconciliation': 'MAT-RECO-.YYYY.-',
|
|
'Student': 'EDU-STU-.YYYY.-',
|
|
'Student Applicant': 'EDU-APP-.YYYY.-',
|
|
'Supplier': 'SUP-.YYYY.-',
|
|
'Supplier Quotation': 'PUR-SQTN-.YYYY.-',
|
|
'Supplier Scorecard Period': 'PU-SSP-.YYYY.-',
|
|
'Timesheet': 'TS-.YYYY.-',
|
|
'Vehicle Log': 'HR-VLOG-.YYYY.-',
|
|
'Warranty Claim': 'SER-WRN-.YYYY.-',
|
|
'Work Order': 'MFG-WO-.YYYY.-'
|
|
}
|
|
|
|
def execute():
|
|
frappe.db.sql("""
|
|
update `tabProperty Setter`
|
|
set name=concat(doc_type, '-', field_name, '-', property)
|
|
where property='fetch_from'
|
|
""")
|
|
series_to_set = get_series()
|
|
for doctype, opts in series_to_set.items():
|
|
set_series(doctype, opts["options"], opts["default"])
|
|
|
|
def set_series(doctype, options, default):
|
|
def _make_property_setter(property_name, value):
|
|
property_setter = frappe.db.exists('Property Setter',
|
|
{'doc_type': doctype, 'field_name': 'naming_series', 'property': property_name})
|
|
if property_setter:
|
|
frappe.db.set_value('Property Setter', property_setter, 'value', value)
|
|
else:
|
|
make_property_setter(doctype, "naming_series", "options", value, "Text")
|
|
|
|
_make_property_setter("options", options)
|
|
if default:
|
|
_make_property_setter("default", default)
|
|
|
|
def get_series():
|
|
series_to_set = {}
|
|
|
|
for doctype in doctype_series_map:
|
|
if not frappe.db.exists('DocType', doctype):
|
|
continue
|
|
if not frappe.db.a_row_exists(doctype):
|
|
continue
|
|
if not frappe.db.has_column(doctype, 'naming_series'):
|
|
continue
|
|
if not frappe.get_meta(doctype).has_field('naming_series'):
|
|
continue
|
|
series_to_preserve = list(filter(None, get_series_to_preserve(doctype)))
|
|
default_series = get_default_series(doctype)
|
|
|
|
if not series_to_preserve:
|
|
continue
|
|
existing_series = (frappe.get_meta(doctype).get_field("naming_series").options or "").split("\n")
|
|
existing_series = list(filter(None, [d.strip() for d in existing_series]))
|
|
|
|
# set naming series property setter
|
|
series_to_preserve = list(set(series_to_preserve + existing_series))
|
|
|
|
if series_to_preserve:
|
|
series_to_set[doctype] = {"options": "\n".join(series_to_preserve), "default": default_series}
|
|
|
|
return series_to_set
|
|
|
|
def get_series_to_preserve(doctype):
|
|
series_to_preserve = frappe.db.sql_list("""select distinct naming_series from `tab{doctype}` where ifnull(naming_series, '') != ''""".format(doctype=doctype))
|
|
series_to_preserve.sort()
|
|
return series_to_preserve
|
|
|
|
def get_default_series(doctype):
|
|
field = frappe.get_meta(doctype).get_field("naming_series")
|
|
default_series = field.get('default', '') if field else ''
|
|
return default_series |