Merge branch 'master' of github.com:webnotes/erpnext
This commit is contained in:
commit
e11382de6d
@ -351,7 +351,7 @@ class DocType(SellingController):
|
|||||||
|
|
||||||
if ret.get("warehouse"):
|
if ret.get("warehouse"):
|
||||||
ret["actual_qty"] = flt(webnotes.conn.get_value("Bin",
|
ret["actual_qty"] = flt(webnotes.conn.get_value("Bin",
|
||||||
{"item_code": args.get("item_code"), "warehouse": args.get("warehouse")},
|
{"item_code": args.get("item_code"), "warehouse": ret.get("warehouse")},
|
||||||
"actual_qty"))
|
"actual_qty"))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|||||||
@ -197,11 +197,21 @@ wn.module_page["Accounts"] = [
|
|||||||
route: "query-report/Delivered Items To Be Billed",
|
route: "query-report/Delivered Items To Be Billed",
|
||||||
doctype: "Sales Invoice"
|
doctype: "Sales Invoice"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Received Items To Be Billed"),
|
||||||
|
route: "query-report/Received Items To Be Billed",
|
||||||
|
doctype: "Purchase Invoice"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label":wn._("Ordered Items To Be Billed"),
|
"label":wn._("Ordered Items To Be Billed"),
|
||||||
route: "query-report/Ordered Items To Be Billed",
|
route: "query-report/Ordered Items To Be Billed",
|
||||||
doctype: "Sales Invoice"
|
doctype: "Sales Invoice"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Purchase Order Items To Be Billed"),
|
||||||
|
route: "query-report/Purchase Order Items To Be Billed",
|
||||||
|
doctype: "Purchase Invoice"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label":wn._("Bank Clearance Summary"),
|
"label":wn._("Bank Clearance Summary"),
|
||||||
route: "query-report/Bank Clearance Summary",
|
route: "query-report/Bank Clearance Summary",
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import webnotes
|
import webnotes
|
||||||
from webnotes import _
|
from webnotes import _
|
||||||
from webnotes.utils import flt, comma_and
|
from webnotes.utils import flt, comma_and, cstr
|
||||||
import webnotes.defaults
|
import webnotes.defaults
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
@ -31,13 +31,12 @@ def get_template():
|
|||||||
"3. Naming Series Options: %(naming_options)s"
|
"3. Naming Series Options: %(naming_options)s"
|
||||||
"4. Voucher Type Options: %(voucher_type)s"%(extra_note)s
|
"4. Voucher Type Options: %(voucher_type)s"%(extra_note)s
|
||||||
"-------Common Values-----------"
|
"-------Common Values-----------"
|
||||||
"Company:","%(default_company)s"
|
"Company:",
|
||||||
"--------Data----------"
|
"--------Data----------"
|
||||||
%(columns)s
|
%(columns)s
|
||||||
''' % {
|
''' % {
|
||||||
"template_type": template_type,
|
"template_type": template_type,
|
||||||
"user_fmt": webnotes.defaults.get_global_default('date_format'),
|
"user_fmt": webnotes.defaults.get_global_default('date_format'),
|
||||||
"default_company": webnotes.conn.get_default("company"),
|
|
||||||
"naming_options": naming_options.replace("\n", ", "),
|
"naming_options": naming_options.replace("\n", ", "),
|
||||||
"voucher_type": voucher_type.replace("\n", ", "),
|
"voucher_type": voucher_type.replace("\n", ", "),
|
||||||
"extra_note": extra_note,
|
"extra_note": extra_note,
|
||||||
@ -49,14 +48,29 @@ def get_template():
|
|||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def upload():
|
def upload():
|
||||||
from webnotes.utils.datautils import read_csv_content_from_uploaded_file
|
messages = []
|
||||||
rows = read_csv_content_from_uploaded_file()
|
try:
|
||||||
|
from webnotes.utils.datautils import read_csv_content_from_uploaded_file
|
||||||
common_values = get_common_values(rows)
|
rows = read_csv_content_from_uploaded_file()
|
||||||
company_abbr = webnotes.conn.get_value("Company", common_values.company, "abbr")
|
|
||||||
data, start_idx = get_data(rows, company_abbr)
|
|
||||||
|
|
||||||
|
common_values = get_common_values(rows)
|
||||||
|
company_abbr = webnotes.conn.get_value("Company", common_values.company, "abbr")
|
||||||
|
|
||||||
|
if not company_abbr:
|
||||||
|
webnotes.msgprint(_("Company is missing or entered incorrect value"), raise_exception=1)
|
||||||
|
|
||||||
|
data, start_idx = get_data(rows, company_abbr)
|
||||||
|
except Exception, e:
|
||||||
|
err_msg = webnotes.message_log and "<br>".join(webnotes.message_log) or cstr(e)
|
||||||
|
messages.append("""<p style='color: red'>%s</p>""" % (err_msg or "No message"))
|
||||||
|
webnotes.errprint(webnotes.getTraceback())
|
||||||
|
webnotes.message_log = []
|
||||||
|
return messages
|
||||||
|
|
||||||
return import_vouchers(common_values, data, start_idx, rows[0][0])
|
return import_vouchers(common_values, data, start_idx, rows[0][0])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def map_fields(field_list, source, target):
|
def map_fields(field_list, source, target):
|
||||||
for f in field_list:
|
for f in field_list:
|
||||||
@ -70,9 +84,8 @@ def import_vouchers(common_values, data, start_idx, import_type):
|
|||||||
from webnotes.model.bean import Bean
|
from webnotes.model.bean import Bean
|
||||||
from accounts.utils import get_fiscal_year
|
from accounts.utils import get_fiscal_year
|
||||||
from webnotes.utils.dateutils import parse_date
|
from webnotes.utils.dateutils import parse_date
|
||||||
|
|
||||||
messages = []
|
messages = []
|
||||||
|
|
||||||
def get_account_details(account):
|
def get_account_details(account):
|
||||||
acc_details = webnotes.conn.sql("""select is_pl_account,
|
acc_details = webnotes.conn.sql("""select is_pl_account,
|
||||||
master_name from tabAccount where name=%s""", account, as_dict=1)
|
master_name from tabAccount where name=%s""", account, as_dict=1)
|
||||||
@ -113,8 +126,9 @@ def import_vouchers(common_values, data, start_idx, import_type):
|
|||||||
|
|
||||||
if d.ref_number:
|
if d.ref_number:
|
||||||
if not d.ref_date:
|
if not d.ref_date:
|
||||||
raise webnotes.ValidationError, \
|
webnotes.msgprint(_("Ref Date is Mandatory if Ref Number is specified"),
|
||||||
"""Ref Date is Mandatory if Ref Number is specified"""
|
raise_exception=1)
|
||||||
|
|
||||||
d.ref_date = parse_date(d.ref_date)
|
d.ref_date = parse_date(d.ref_date)
|
||||||
|
|
||||||
d.company = common_values.company
|
d.company = common_values.company
|
||||||
@ -176,7 +190,7 @@ def import_vouchers(common_values, data, start_idx, import_type):
|
|||||||
webnotes.conn.commit()
|
webnotes.conn.commit()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
webnotes.conn.rollback()
|
webnotes.conn.rollback()
|
||||||
err_msg = webnotes.message_log and "<br>".join(webnotes.message_log) or unicode(e)
|
err_msg = webnotes.message_log and "<br>".join(webnotes.message_log) or cstr(e)
|
||||||
messages.append("""<p style='color: red'>[row #%s] %s failed: %s</p>"""
|
messages.append("""<p style='color: red'>[row #%s] %s failed: %s</p>"""
|
||||||
% ((start_idx + 1) + i, jv.name or "", err_msg or "No message"))
|
% ((start_idx + 1) + i, jv.name or "", err_msg or "No message"))
|
||||||
messages.append("<p style='color: red'>All transactions rolled back</p>")
|
messages.append("<p style='color: red'>All transactions rolled back</p>")
|
||||||
@ -240,16 +254,20 @@ def get_data(rows, company_abbr):
|
|||||||
raise Exception, """Column No(s). %s %s empty. \
|
raise Exception, """Column No(s). %s %s empty. \
|
||||||
Please remove them and try again.""" % (comma_and(empty_columns),
|
Please remove them and try again.""" % (comma_and(empty_columns),
|
||||||
len(empty_columns)==1 and "is" or "are")
|
len(empty_columns)==1 and "is" or "are")
|
||||||
|
|
||||||
columns = [c.replace(" ", "_").lower() for c in rows[i+1]
|
columns = [c.replace(" ", "_").lower() for c in rows[i+1]
|
||||||
if not c.endswith(" - " + company_abbr)]
|
if not c.endswith(" - " + company_abbr)]
|
||||||
accounts = [c for c in rows[i+1] if c.endswith(" - " + company_abbr)]
|
accounts = [c for c in rows[i+1] if c.endswith(" - " + company_abbr)]
|
||||||
|
|
||||||
|
if not accounts:
|
||||||
|
webnotes.msgprint(_("""No Account found in csv file,
|
||||||
|
May be company abbreviation is not correct"""), raise_exception=1)
|
||||||
|
|
||||||
if accounts and (len(columns) != rows[i+1].index(accounts[0])):
|
if accounts and (len(columns) != rows[i+1].index(accounts[0])):
|
||||||
raise Exception, _("""All account columns should be after \
|
webnotes.msgprint(_("""All account columns should be after \
|
||||||
standard columns and on the right.
|
standard columns and on the right.
|
||||||
If you entered it properly, next probable reason \
|
If you entered it properly, next probable reason \
|
||||||
could be wrong account name.
|
could be wrong account name.
|
||||||
Please rectify it in the file and try again.""")
|
Please rectify it in the file and try again."""), raise_exception=1)
|
||||||
|
|
||||||
return data, start_row_idx
|
return data, start_row_idx
|
||||||
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-05-28 15:57:59",
|
"creation": "2013-05-28 15:57:59",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-05-28 16:02:06",
|
"modified": "2013-05-28 17:34:05",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -11,7 +11,7 @@
|
|||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
"query": "select \n `tabPurchase Receipt`.`name` as \"Purchase Receipt:Link/Purchase Receipt:120\",\n `tabPurchase Receipt`.`posting_date` as \"Date:Date:100\",\n `tabPurchase Receipt`.`supplier` as \"Supplier:Link/Supplier:120\",\n `tabPurchase Receipt Item`.`project_name` as \"Project\",\n\t`tabPurchase Receipt Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Receipt Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Receipt Item`.billed_qty as \"Billed Qty:Float:100\", \n\t(`tabPurchase Receipt Item`.qty - ifnull(`tabPurchase Receipt Item`.billed_qty, 0)) as \"Qty to Bill:Float:100\",\n\t`tabPurchase Receipt Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Receipt Item`.description as \"Description::200\"\nfrom\n\t`tabPurchase Receipt`, `tabPurchase Receipt Item`\nwhere\n\t`tabPurchase Receipt Item`.`parent` = `tabPurchase Receipt`.`name`\n\tand `tabPurchase Receipt`.docstatus = 1\n\tand `tabPurchase Receipt`.status != \"Stopped\"\n\tand ifnull(`tabPurchase Receipt Item`.billed_qty, 0) < ifnull(`tabPurchase Receipt Item`.qty, 0)\norder by `tabPurchase Receipt`.transaction_date asc",
|
"query": "select \n `tabPurchase Receipt`.`name` as \"Purchase Receipt:Link/Purchase Receipt:120\",\n `tabPurchase Receipt`.`posting_date` as \"Date:Date:100\",\n `tabPurchase Receipt`.`supplier` as \"Supplier:Link/Supplier:120\",\n `tabPurchase Receipt Item`.`project_name` as \"Project\",\n\t`tabPurchase Receipt Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Receipt Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Receipt Item`.billed_qty as \"Billed Qty:Float:100\", \n\t(`tabPurchase Receipt Item`.qty - ifnull(`tabPurchase Receipt Item`.billed_qty, 0)) as \"Qty to Bill:Float:100\",\n\t`tabPurchase Receipt Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Receipt Item`.description as \"Description::200\"\nfrom\n\t`tabPurchase Receipt`, `tabPurchase Receipt Item`\nwhere\n\t`tabPurchase Receipt Item`.`parent` = `tabPurchase Receipt`.`name`\n\tand `tabPurchase Receipt`.docstatus = 1\n\tand `tabPurchase Receipt`.status != \"Stopped\"\n\tand ifnull(`tabPurchase Receipt Item`.billed_qty, 0) < ifnull(`tabPurchase Receipt Item`.qty, 0)\norder by `tabPurchase Receipt`.posting_date asc",
|
||||||
"ref_doctype": "Purchase Invoice",
|
"ref_doctype": "Purchase Invoice",
|
||||||
"report_name": "Received Items To Be Billed",
|
"report_name": "Received Items To Be Billed",
|
||||||
"report_type": "Query Report"
|
"report_type": "Query Report"
|
||||||
|
|||||||
@ -132,6 +132,7 @@ class DocType(TransactionBase):
|
|||||||
where name = %s and (ifnull(end_of_life,'')='' or end_of_life > now()
|
where name = %s and (ifnull(end_of_life,'')='' or end_of_life > now()
|
||||||
or end_of_life = '0000-00-00') and (is_sales_item = 'Yes'
|
or end_of_life = '0000-00-00') and (is_sales_item = 'Yes'
|
||||||
or is_service_item = 'Yes')""", args['item_code'], as_dict=1)
|
or is_service_item = 'Yes')""", args['item_code'], as_dict=1)
|
||||||
|
|
||||||
tax = webnotes.conn.sql("""select tax_type, tax_rate from `tabItem Tax`
|
tax = webnotes.conn.sql("""select tax_type, tax_rate from `tabItem Tax`
|
||||||
where parent = %s""", args['item_code'])
|
where parent = %s""", args['item_code'])
|
||||||
t = {}
|
t = {}
|
||||||
@ -167,8 +168,9 @@ class DocType(TransactionBase):
|
|||||||
ret['export_rate'] = flt(base_ref_rate)/flt(obj.doc.conversion_rate)
|
ret['export_rate'] = flt(base_ref_rate)/flt(obj.doc.conversion_rate)
|
||||||
ret['base_ref_rate'] = flt(base_ref_rate)
|
ret['base_ref_rate'] = flt(base_ref_rate)
|
||||||
ret['basic_rate'] = flt(base_ref_rate)
|
ret['basic_rate'] = flt(base_ref_rate)
|
||||||
|
|
||||||
if ret['warehouse'] or ret['reserved_warehouse']:
|
if ret['warehouse'] or ret['reserved_warehouse']:
|
||||||
|
|
||||||
av_qty = self.get_available_qty({'item_code': args['item_code'], 'warehouse': ret['warehouse'] or ret['reserved_warehouse']})
|
av_qty = self.get_available_qty({'item_code': args['item_code'], 'warehouse': ret['warehouse'] or ret['reserved_warehouse']})
|
||||||
ret.update(av_qty)
|
ret.update(av_qty)
|
||||||
|
|
||||||
@ -179,7 +181,7 @@ class DocType(TransactionBase):
|
|||||||
(args['item_code'], obj.doc.customer))
|
(args['item_code'], obj.doc.customer))
|
||||||
if customer_item_code_row and customer_item_code_row[0][0]:
|
if customer_item_code_row and customer_item_code_row[0][0]:
|
||||||
ret['customer_item_code'] = customer_item_code_row[0][0]
|
ret['customer_item_code'] = customer_item_code_row[0][0]
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user