Merge branch 'develop'
This commit is contained in:
commit
a6db546457
@ -5,8 +5,7 @@ from __future__ import unicode_literals
|
|||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
from webnotes.utils import flt, fmt_money, getdate
|
from webnotes.utils import flt, fmt_money, getdate
|
||||||
from webnotes.model.code import get_obj
|
from webnotes import _
|
||||||
from webnotes import msgprint, _
|
|
||||||
|
|
||||||
class DocType:
|
class DocType:
|
||||||
def __init__(self,d,dl):
|
def __init__(self,d,dl):
|
||||||
@ -130,11 +129,12 @@ def update_outstanding_amt(account, against_voucher_type, against_voucher, on_ca
|
|||||||
against_voucher_amount = flt(webnotes.conn.sql("""
|
against_voucher_amount = flt(webnotes.conn.sql("""
|
||||||
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
|
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
|
||||||
from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s
|
from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s
|
||||||
and account = %s""", (against_voucher, account))[0][0])
|
and account = %s and ifnull(against_voucher, '') = ''""",
|
||||||
|
(against_voucher, account))[0][0])
|
||||||
bal = against_voucher_amount + bal
|
bal = against_voucher_amount + bal
|
||||||
if against_voucher_amount < 0:
|
if against_voucher_amount < 0:
|
||||||
bal = -bal
|
bal = -bal
|
||||||
|
|
||||||
# Validation : Outstanding can not be negative
|
# Validation : Outstanding can not be negative
|
||||||
if bal < 0 and not on_cancel:
|
if bal < 0 and not on_cancel:
|
||||||
webnotes.throw(_("Outstanding for Voucher ") + against_voucher + _(" will become ") +
|
webnotes.throw(_("Outstanding for Voucher ") + against_voucher + _(" will become ") +
|
||||||
@ -158,4 +158,4 @@ def validate_frozen_account(account, adv_adj):
|
|||||||
elif frozen_accounts_modifier not in webnotes.user.get_roles():
|
elif frozen_accounts_modifier not in webnotes.user.get_roles():
|
||||||
webnotes.throw(account + _(" is a frozen account. ") +
|
webnotes.throw(account + _(" is a frozen account. ") +
|
||||||
_("To create / edit transactions against this account, you need role") + ": " +
|
_("To create / edit transactions against this account, you need role") + ": " +
|
||||||
frozen_accounts_modifier)
|
frozen_accounts_modifier)
|
||||||
@ -85,7 +85,7 @@ class AccountsReceivableReport(object):
|
|||||||
def get_account_map(self):
|
def get_account_map(self):
|
||||||
if not hasattr(self, "account_map"):
|
if not hasattr(self, "account_map"):
|
||||||
self.account_map = dict(((r.name, r) for r in webnotes.conn.sql("""select
|
self.account_map = dict(((r.name, r) for r in webnotes.conn.sql("""select
|
||||||
account.name, customer.customer_name, customer.territory
|
account.name, customer.name as customer_name, customer.territory
|
||||||
from `tabAccount` account, `tabCustomer` customer
|
from `tabAccount` account, `tabCustomer` customer
|
||||||
where account.master_type="Customer"
|
where account.master_type="Customer"
|
||||||
and customer.name=account.master_name""", as_dict=True)))
|
and customer.name=account.master_name""", as_dict=True)))
|
||||||
|
|||||||
@ -27,6 +27,14 @@ class DocType(TransactionBase):
|
|||||||
else:
|
else:
|
||||||
self.doc.name = make_autoname(self.doc.naming_series + '.#####')
|
self.doc.name = make_autoname(self.doc.naming_series + '.#####')
|
||||||
|
|
||||||
|
def update_address(self):
|
||||||
|
webnotes.conn.sql("""update `tabAddress` set supplier_name=%s, modified=NOW()
|
||||||
|
where supplier=%s""", (self.doc.supplier_name, self.doc.name))
|
||||||
|
|
||||||
|
def update_contact(self):
|
||||||
|
webnotes.conn.sql("""update `tabContact` set supplier_name=%s, modified=NOW()
|
||||||
|
where supplier=%s""", (self.doc.supplier_name, self.doc.name))
|
||||||
|
|
||||||
def update_credit_days_limit(self):
|
def update_credit_days_limit(self):
|
||||||
webnotes.conn.sql("""update tabAccount set credit_days = %s where name = %s""",
|
webnotes.conn.sql("""update tabAccount set credit_days = %s where name = %s""",
|
||||||
(cint(self.doc.credit_days), self.doc.name + " - " + self.get_company_abbr()))
|
(cint(self.doc.credit_days), self.doc.name + " - " + self.get_company_abbr()))
|
||||||
@ -35,6 +43,9 @@ class DocType(TransactionBase):
|
|||||||
if not self.doc.naming_series:
|
if not self.doc.naming_series:
|
||||||
self.doc.naming_series = ''
|
self.doc.naming_series = ''
|
||||||
|
|
||||||
|
self.update_address()
|
||||||
|
self.update_contact()
|
||||||
|
|
||||||
# create account head
|
# create account head
|
||||||
self.create_account_head()
|
self.create_account_head()
|
||||||
|
|
||||||
@ -151,10 +162,19 @@ class DocType(TransactionBase):
|
|||||||
def before_rename(self, olddn, newdn, merge=False):
|
def before_rename(self, olddn, newdn, merge=False):
|
||||||
from accounts.utils import rename_account_for
|
from accounts.utils import rename_account_for
|
||||||
rename_account_for("Supplier", olddn, newdn, merge)
|
rename_account_for("Supplier", olddn, newdn, merge)
|
||||||
|
|
||||||
def after_rename(self, olddn, newdn, merge=False):
|
def after_rename(self, olddn, newdn, merge=False):
|
||||||
|
set_field = ''
|
||||||
if webnotes.defaults.get_global_default('supp_master_name') == 'Supplier Name':
|
if webnotes.defaults.get_global_default('supp_master_name') == 'Supplier Name':
|
||||||
webnotes.conn.set(self.doc, "supplier_name", newdn)
|
webnotes.conn.set(self.doc, "supplier_name", newdn)
|
||||||
|
self.update_contact()
|
||||||
|
set_field = ", supplier_name=%(newdn)s"
|
||||||
|
self.update_supplier_address(newdn, set_field)
|
||||||
|
|
||||||
|
def update_supplier_address(self, newdn, set_field):
|
||||||
|
webnotes.conn.sql("""update `tabAddress` set address_title=%(newdn)s
|
||||||
|
{set_field} where supplier=%(newdn)s"""\
|
||||||
|
.format(set_field=set_field), ({"newdn": newdn}))
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def get_dashboard_info(supplier):
|
def get_dashboard_info(supplier):
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"app_name": "ERPNext",
|
"app_name": "ERPNext",
|
||||||
"app_version": "3.1.2",
|
"app_version": "3.2.0",
|
||||||
"base_template": "app/portal/templates/base.html",
|
"base_template": "app/portal/templates/base.html",
|
||||||
"modules": {
|
"modules": {
|
||||||
"Accounts": {
|
"Accounts": {
|
||||||
@ -74,5 +74,5 @@
|
|||||||
"type": "module"
|
"type": "module"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"requires_framework_version": "==3.1.1"
|
"requires_framework_version": "==3.2.0"
|
||||||
}
|
}
|
||||||
@ -72,9 +72,9 @@ class DocType:
|
|||||||
and (exists (select name from `tabItem` item where item.name=so_item.item_code
|
and (exists (select name from `tabItem` item where item.name=so_item.item_code
|
||||||
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
||||||
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes') %s)
|
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes') %s)
|
||||||
or exists (select name from `tabPacked Item` dnpi
|
or exists (select name from `tabPacked Item` pi
|
||||||
where dnpi.parent = so.name and dnpi.parent_item = so_item.item_code
|
where pi.parent = so.name and pi.parent_item = so_item.item_code
|
||||||
and exists (select name from `tabItem` item where item.name=dnpi.item_code
|
and exists (select name from `tabItem` item where item.name=pi.item_code
|
||||||
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
||||||
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes') %s)))
|
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes') %s)))
|
||||||
""" % ('%s', so_filter, item_filter, item_filter), self.doc.company, as_dict=1)
|
""" % ('%s', so_filter, item_filter, item_filter), self.doc.company, as_dict=1)
|
||||||
@ -83,6 +83,8 @@ class DocType:
|
|||||||
|
|
||||||
def add_so_in_table(self, open_so):
|
def add_so_in_table(self, open_so):
|
||||||
""" Add sales orders in the table"""
|
""" Add sales orders in the table"""
|
||||||
|
self.clear_so_table()
|
||||||
|
|
||||||
so_list = [d.sales_order for d in getlist(self.doclist, 'pp_so_details')]
|
so_list = [d.sales_order for d in getlist(self.doclist, 'pp_so_details')]
|
||||||
for r in open_so:
|
for r in open_so:
|
||||||
if cstr(r['name']) not in so_list:
|
if cstr(r['name']) not in so_list:
|
||||||
@ -116,19 +118,19 @@ class DocType:
|
|||||||
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes'))""" % \
|
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes'))""" % \
|
||||||
(", ".join(["%s"] * len(so_list))), tuple(so_list), as_dict=1)
|
(", ".join(["%s"] * len(so_list))), tuple(so_list), as_dict=1)
|
||||||
|
|
||||||
dnpi_items = webnotes.conn.sql("""select distinct dnpi.parent, dnpi.item_code, dnpi.warehouse as reserved_warhouse,
|
packed_items = webnotes.conn.sql("""select distinct pi.parent, pi.item_code, pi.warehouse as reserved_warhouse,
|
||||||
(((so_item.qty - ifnull(so_item.delivered_qty, 0)) * dnpi.qty) / so_item.qty)
|
(((so_item.qty - ifnull(so_item.delivered_qty, 0)) * pi.qty) / so_item.qty)
|
||||||
as pending_qty
|
as pending_qty
|
||||||
from `tabSales Order Item` so_item, `tabPacked Item` dnpi
|
from `tabSales Order Item` so_item, `tabPacked Item` pi
|
||||||
where so_item.parent = dnpi.parent and so_item.docstatus = 1
|
where so_item.parent = pi.parent and so_item.docstatus = 1
|
||||||
and dnpi.parent_item = so_item.item_code
|
and pi.parent_item = so_item.item_code
|
||||||
and so_item.parent in (%s) and ifnull(so_item.qty, 0) > ifnull(so_item.delivered_qty, 0)
|
and so_item.parent in (%s) and ifnull(so_item.qty, 0) > ifnull(so_item.delivered_qty, 0)
|
||||||
and exists (select * from `tabItem` item where item.name=dnpi.item_code
|
and exists (select * from `tabItem` item where item.name=pi.item_code
|
||||||
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
and (ifnull(item.is_pro_applicable, 'No') = 'Yes'
|
||||||
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes'))""" % \
|
or ifnull(item.is_sub_contracted_item, 'No') = 'Yes'))""" % \
|
||||||
(", ".join(["%s"] * len(so_list))), tuple(so_list), as_dict=1)
|
(", ".join(["%s"] * len(so_list))), tuple(so_list), as_dict=1)
|
||||||
|
|
||||||
return items + dnpi_items
|
return items + packed_items
|
||||||
|
|
||||||
|
|
||||||
def add_items(self, items):
|
def add_items(self, items):
|
||||||
|
|||||||
@ -47,6 +47,14 @@ class DocType(TransactionBase):
|
|||||||
if self.doc.lead_name:
|
if self.doc.lead_name:
|
||||||
webnotes.conn.sql("update `tabLead` set status='Converted' where name = %s", self.doc.lead_name)
|
webnotes.conn.sql("update `tabLead` set status='Converted' where name = %s", self.doc.lead_name)
|
||||||
|
|
||||||
|
def update_address(self):
|
||||||
|
webnotes.conn.sql("""update `tabAddress` set customer_name=%s, modified=NOW()
|
||||||
|
where customer=%s""", (self.doc.customer_name, self.doc.name))
|
||||||
|
|
||||||
|
def update_contact(self):
|
||||||
|
webnotes.conn.sql("""update `tabContact` set customer_name=%s, modified=NOW()
|
||||||
|
where customer=%s""", (self.doc.customer_name, self.doc.name))
|
||||||
|
|
||||||
def create_account_head(self):
|
def create_account_head(self):
|
||||||
if self.doc.company :
|
if self.doc.company :
|
||||||
abbr = self.get_company_abbr()
|
abbr = self.get_company_abbr()
|
||||||
@ -99,6 +107,9 @@ class DocType(TransactionBase):
|
|||||||
self.validate_name_with_customer_group()
|
self.validate_name_with_customer_group()
|
||||||
|
|
||||||
self.update_lead_status()
|
self.update_lead_status()
|
||||||
|
self.update_address()
|
||||||
|
self.update_contact()
|
||||||
|
|
||||||
# create account head
|
# create account head
|
||||||
self.create_account_head()
|
self.create_account_head()
|
||||||
# update credit days and limit in account
|
# update credit days and limit in account
|
||||||
@ -146,10 +157,19 @@ class DocType(TransactionBase):
|
|||||||
def before_rename(self, olddn, newdn, merge=False):
|
def before_rename(self, olddn, newdn, merge=False):
|
||||||
from accounts.utils import rename_account_for
|
from accounts.utils import rename_account_for
|
||||||
rename_account_for("Customer", olddn, newdn, merge)
|
rename_account_for("Customer", olddn, newdn, merge)
|
||||||
|
|
||||||
def after_rename(self, olddn, newdn, merge=False):
|
def after_rename(self, olddn, newdn, merge=False):
|
||||||
|
set_field = ''
|
||||||
if webnotes.defaults.get_global_default('cust_master_name') == 'Customer Name':
|
if webnotes.defaults.get_global_default('cust_master_name') == 'Customer Name':
|
||||||
webnotes.conn.set(self.doc, "customer_name", newdn)
|
webnotes.conn.set(self.doc, "customer_name", newdn)
|
||||||
|
self.update_contact()
|
||||||
|
set_field = ", customer_name=%(newdn)s"
|
||||||
|
self.update_customer_address(newdn, set_field)
|
||||||
|
|
||||||
|
def update_customer_address(self, newdn, set_field):
|
||||||
|
webnotes.conn.sql("""update `tabAddress` set address_title=%(newdn)s
|
||||||
|
{set_field} where customer=%(newdn)s"""\
|
||||||
|
.format(set_field=set_field), ({"newdn": newdn}))
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def get_dashboard_info(customer):
|
def get_dashboard_info(customer):
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-03-25 17:53:21",
|
"creation": "2013-03-25 17:53:21",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-11-28 11:54:42",
|
"modified": "2013-12-06 13:12:25",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -103,6 +103,7 @@
|
|||||||
"label": "Auto Email Id"
|
"label": "Auto Email Id"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"default": "1",
|
||||||
"description": "If checked, an email with an attached HTML format will be added to part of the EMail body as well as attachment. To only send as attachment, uncheck this.",
|
"description": "If checked, an email with an attached HTML format will be added to part of the EMail body as well as attachment. To only send as attachment, uncheck this.",
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "send_print_in_body_and_attachment",
|
"fieldname": "send_print_in_body_and_attachment",
|
||||||
|
|||||||
@ -150,7 +150,7 @@ class DocType(StockController):
|
|||||||
where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No'
|
where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No'
|
||||||
order by posting_date desc, posting_time desc, name desc""",
|
order by posting_date desc, posting_time desc, name desc""",
|
||||||
("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1):
|
("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1):
|
||||||
if self.doc.name in get_serial_nos(sle.serial_no):
|
if self.doc.name.upper() in get_serial_nos(sle.serial_no):
|
||||||
if sle.actual_qty > 0:
|
if sle.actual_qty > 0:
|
||||||
sle_dict.setdefault("incoming", []).append(sle)
|
sle_dict.setdefault("incoming", []).append(sle)
|
||||||
else:
|
else:
|
||||||
@ -268,7 +268,8 @@ def get_item_details(item_code):
|
|||||||
from tabItem where name=%s""", item_code, as_dict=True)[0]
|
from tabItem where name=%s""", item_code, as_dict=True)[0]
|
||||||
|
|
||||||
def get_serial_nos(serial_no):
|
def get_serial_nos(serial_no):
|
||||||
return [s.strip() for s in cstr(serial_no).strip().replace(',', '\n').split('\n') if s.strip()]
|
return [s.strip() for s in cstr(serial_no).strip().upper().replace(',', '\n').split('\n')
|
||||||
|
if s.strip()]
|
||||||
|
|
||||||
def make_serial_no(serial_no, sle):
|
def make_serial_no(serial_no, sle):
|
||||||
sr = webnotes.new_bean("Serial No")
|
sr = webnotes.new_bean("Serial No")
|
||||||
|
|||||||
@ -244,7 +244,7 @@ cur_frm.script_manager.make(erpnext.stock.StockEntry);
|
|||||||
|
|
||||||
cur_frm.cscript.toggle_related_fields = function(doc) {
|
cur_frm.cscript.toggle_related_fields = function(doc) {
|
||||||
disable_from_warehouse = inList(["Material Receipt", "Sales Return"], doc.purpose);
|
disable_from_warehouse = inList(["Material Receipt", "Sales Return"], doc.purpose);
|
||||||
disable_to_warehouse = inList(["Material Issue", "Purchase Return"], doc.purpose)
|
disable_to_warehouse = inList(["Material Issue", "Purchase Return"], doc.purpose);
|
||||||
|
|
||||||
cur_frm.toggle_enable("from_warehouse", !disable_from_warehouse);
|
cur_frm.toggle_enable("from_warehouse", !disable_from_warehouse);
|
||||||
cur_frm.toggle_enable("to_warehouse", !disable_to_warehouse);
|
cur_frm.toggle_enable("to_warehouse", !disable_to_warehouse);
|
||||||
@ -302,7 +302,7 @@ cur_frm.fields_dict['production_order'].get_query = function(doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.purpose = function(doc, cdt, cdn) {
|
cur_frm.cscript.purpose = function(doc, cdt, cdn) {
|
||||||
cur_frm.cscript.toggle_related_fields(doc, cdt, cdn);
|
cur_frm.cscript.toggle_related_fields(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overloaded query for link batch_no
|
// Overloaded query for link batch_no
|
||||||
|
|||||||
@ -2,11 +2,12 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-01-10 16:34:32",
|
"creation": "2013-01-10 16:34:32",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-07-11 17:02:12",
|
"modified": "2013-12-12 12:17:46",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_rename": 1,
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "Master",
|
"document_type": "Master",
|
||||||
"icon": "icon-map-marker",
|
"icon": "icon-map-marker",
|
||||||
|
|||||||
@ -2,11 +2,12 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-01-10 16:34:32",
|
"creation": "2013-01-10 16:34:32",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-10-08 16:48:50",
|
"modified": "2013-12-12 12:18:19",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_rename": 1,
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "Master",
|
"document_type": "Master",
|
||||||
"icon": "icon-user",
|
"icon": "icon-user",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user