Merge branch 'develop' of github.com:frappe/erpnext into develop

This commit is contained in:
Rushabh Mehta 2014-05-26 11:40:46 +05:30
commit 9f399f139b
26 changed files with 2744 additions and 4790 deletions

View File

@ -87,6 +87,7 @@ class StatusUpdater(Document):
frappe.db.set_value(self.doctype, self.name, "status", self.status) frappe.db.set_value(self.doctype, self.name, "status", self.status)
def on_communication(self): def on_communication(self):
if not self.get("communication"): return
self.communication_set = True self.communication_set = True
self.get("communications").sort(key=lambda d: d.creation) self.get("communications").sort(key=lambda d: d.creation)
self.set_status(update=True) self.set_status(update=True)

View File

@ -8,6 +8,7 @@ from collections import Counter
from frappe.core.doctype.user.user import STANDARD_USERS from frappe.core.doctype.user.user import STANDARD_USERS
def execute(): def execute():
frappe.reload_doc("core", "doctype", "system_settings")
system_settings = frappe.get_doc("System Settings") system_settings = frappe.get_doc("System Settings")
# set values from global_defauls # set values from global_defauls

View File

@ -207,7 +207,7 @@ class Company(Document):
[_('Plant and Machinery'),_('Fixed Assets'),'Ledger','Fixed Asset','Balance Sheet','', 'Asset'], [_('Plant and Machinery'),_('Fixed Assets'),'Ledger','Fixed Asset','Balance Sheet','', 'Asset'],
[_('Investments'),_('Application of Funds (Assets)'),'Group','','Balance Sheet','', 'Asset'], [_('Investments'),_('Application of Funds (Assets)'),'Group','','Balance Sheet','', 'Asset'],
[_('Temporary Accounts (Assets)'),_('Application of Funds (Assets)'),'Group','','Balance Sheet','', 'Asset'], [_('Temporary Accounts (Assets)'),_('Application of Funds (Assets)'),'Group','','Balance Sheet','', 'Asset'],
[_('Temporary Account (Assets)'),_('Temporary Accounts (Assets)'),'Ledger','','Balance Sheet','', 'Asset'], [_('Temporary Assets'),_('Temporary Accounts (Assets)'),'Ledger','','Balance Sheet','', 'Asset'],
[_('Expenses'),'','Group','Expense Account','Profit and Loss','', 'Expense'], [_('Expenses'),'','Group','Expense Account','Profit and Loss','', 'Expense'],
[_('Direct Expenses'),_('Expenses'),'Group','Expense Account','Profit and Loss','', 'Expense'], [_('Direct Expenses'),_('Expenses'),'Group','Expense Account','Profit and Loss','', 'Expense'],
[_('Stock Expenses'),_('Direct Expenses'),'Group','Expense Account','Profit and Loss','', 'Expense'], [_('Stock Expenses'),_('Direct Expenses'),'Group','Expense Account','Profit and Loss','', 'Expense'],
@ -253,7 +253,7 @@ class Company(Document):
[_('Unsecured Loans'),_('Loans (Liabilities)'),'Group','','Balance Sheet','', 'Liability'], [_('Unsecured Loans'),_('Loans (Liabilities)'),'Group','','Balance Sheet','', 'Liability'],
[_('Bank Overdraft Account'),_('Loans (Liabilities)'),'Group','','Balance Sheet','', 'Liability'], [_('Bank Overdraft Account'),_('Loans (Liabilities)'),'Group','','Balance Sheet','', 'Liability'],
[_('Temporary Accounts (Liabilities)'),_('Source of Funds (Liabilities)'),'Group','','Balance Sheet','', 'Liability'], [_('Temporary Accounts (Liabilities)'),_('Source of Funds (Liabilities)'),'Group','','Balance Sheet','', 'Liability'],
[_('Temporary Account (Liabilities)'),_('Temporary Accounts (Liabilities)'),'Ledger','','Balance Sheet','', 'Liability'] [_('Temporary Liabilities'),_('Temporary Accounts (Liabilities)'),'Ledger','','Balance Sheet','', 'Liability']
] ]
# load common account heads # load common account heads

View File

@ -51,7 +51,6 @@ def install(country=None):
{'doctype': 'Employment Type', 'employee_type_name': _('Contract')}, {'doctype': 'Employment Type', 'employee_type_name': _('Contract')},
{'doctype': 'Employment Type', 'employee_type_name': _('Commission')}, {'doctype': 'Employment Type', 'employee_type_name': _('Commission')},
{'doctype': 'Employment Type', 'employee_type_name': _('Piecework')}, {'doctype': 'Employment Type', 'employee_type_name': _('Piecework')},
{'doctype': 'Employment Type', 'employee_type_name': _('Trainee')},
{'doctype': 'Employment Type', 'employee_type_name': _('Intern')}, {'doctype': 'Employment Type', 'employee_type_name': _('Intern')},
{'doctype': 'Employment Type', 'employee_type_name': _('Apprentice')}, {'doctype': 'Employment Type', 'employee_type_name': _('Apprentice')},

View File

@ -76,6 +76,7 @@ def setup_account(args=None):
frappe.clear_cache() frappe.clear_cache()
frappe.db.commit() frappe.db.commit()
except: except:
traceback = frappe.get_traceback() traceback = frappe.get_traceback()
for hook in frappe.get_hooks("setup_wizard_exception"): for hook in frappe.get_hooks("setup_wizard_exception"):
@ -83,6 +84,11 @@ def setup_account(args=None):
raise raise
else:
for hook in frappe.get_hooks("setup_wizard_success"):
frappe.get_attr(hook)(args)
def update_user_name(args): def update_user_name(args):
if args.get("email"): if args.get("email"):
args['name'] = args.get("email") args['name'] = args.get("email")
@ -407,6 +413,7 @@ def create_territories():
@frappe.whitelist() @frappe.whitelist()
def load_messages(language): def load_messages(language):
frappe.clear_cache()
lang = get_lang_dict()[language] lang = get_lang_dict()[language]
frappe.local.lang = lang frappe.local.lang = lang
m = get_dict("page", "setup-wizard") m = get_dict("page", "setup-wizard")

View File

@ -277,6 +277,7 @@
"fieldname": "serial_no_series", "fieldname": "serial_no_series",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Serial Number Series", "label": "Serial Number Series",
"no_copy": 1,
"permlevel": 0 "permlevel": 0
}, },
{ {
@ -728,6 +729,7 @@
"fieldname": "page_name", "fieldname": "page_name",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Page Name", "label": "Page Name",
"no_copy": 1,
"permlevel": 0, "permlevel": 0,
"read_only": 1 "read_only": 1
}, },
@ -825,6 +827,7 @@
"fieldtype": "Link", "fieldtype": "Link",
"ignore_restrictions": 1, "ignore_restrictions": 1,
"label": "Parent Website Route", "label": "Parent Website Route",
"no_copy": 1,
"options": "Website Route", "options": "Website Route",
"permlevel": 0 "permlevel": 0
} }
@ -832,7 +835,7 @@
"icon": "icon-tag", "icon": "icon-tag",
"idx": 1, "idx": 1,
"max_attachments": 1, "max_attachments": 1,
"modified": "2014-05-12 07:54:58.118118", "modified": "2014-05-21 15:37:30.124881",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Item", "name": "Item",

View File

@ -119,6 +119,10 @@ class Item(WebsiteGenerator):
if self.has_serial_no == 'Yes' and self.is_stock_item == 'No': if self.has_serial_no == 'Yes' and self.is_stock_item == 'No':
msgprint(_("'Has Serial No' can not be 'Yes' for non-stock item"), raise_exception=1) msgprint(_("'Has Serial No' can not be 'Yes' for non-stock item"), raise_exception=1)
if self.has_serial_no == "No" and self.serial_no_series:
self.serial_no_series = None
def check_for_active_boms(self): def check_for_active_boms(self):
if self.is_purchase_item != "Yes": if self.is_purchase_item != "Yes":
bom_mat = frappe.db.sql("""select distinct t1.parent bom_mat = frappe.db.sql("""select distinct t1.parent

View File

@ -248,7 +248,8 @@ def validate_serial_no(sle, item_det):
SerialNoRequiredError) SerialNoRequiredError)
def update_serial_nos(sle, item_det): def update_serial_nos(sle, item_det):
if sle.is_cancelled == "No" and not sle.serial_no and sle.actual_qty > 0 and item_det.serial_no_series: if sle.is_cancelled == "No" and not sle.serial_no and sle.actual_qty > 0 \
and item_det.has_serial_no == "Yes" and item_det.serial_no_series:
from frappe.model.naming import make_autoname from frappe.model.naming import make_autoname
serial_nos = [] serial_nos = []
for i in xrange(cint(sle.actual_qty)): for i in xrange(cint(sle.actual_qty)):

View File

@ -50,10 +50,8 @@ class StockLedgerEntry(Document):
frappe.throw(_("{0} is required").format(self.meta.get_label(k))) frappe.throw(_("{0} is required").format(self.meta.get_label(k)))
def validate_item(self): def validate_item(self):
item_det = frappe.db.sql("""select name, has_batch_no, docstatus, item_det = frappe.db.sql("""select name, has_batch_no, docstatus, is_stock_item
is_stock_item, has_serial_no, serial_no_series from tabItem where name=%s""", self.item_code, as_dict=True)[0]
from tabItem where name=%s""",
self.item_code, as_dict=True)[0]
if item_det.is_stock_item != 'Yes': if item_det.is_stock_item != 'Yes':
frappe.throw(_("Item {0} must be a stock Item").format(self.item_code)) frappe.throw(_("Item {0} must be a stock Item").format(self.item_code))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff