Merge pull request #3442 from nabinhait/develop
fixes in stock entry and report
This commit is contained in:
commit
c7d4eaee79
@ -458,11 +458,11 @@ def get_default_bank_cash_account(company, voucher_type, mode_of_payment=None):
|
|||||||
if voucher_type=="Bank Entry":
|
if voucher_type=="Bank Entry":
|
||||||
account = frappe.db.get_value("Company", company, "default_bank_account")
|
account = frappe.db.get_value("Company", company, "default_bank_account")
|
||||||
if not account:
|
if not account:
|
||||||
account = frappe.db.get_value("Account", {"company": company, "account_type": "Bank"})
|
account = frappe.db.get_value("Account", {"company": company, "account_type": "Bank", "is_group": 0})
|
||||||
elif voucher_type=="Cash Entry":
|
elif voucher_type=="Cash Entry":
|
||||||
account = frappe.db.get_value("Company", company, "default_cash_account")
|
account = frappe.db.get_value("Company", company, "default_cash_account")
|
||||||
if not account:
|
if not account:
|
||||||
account = frappe.db.get_value("Account", {"company": company, "account_type": "Cash"})
|
account = frappe.db.get_value("Account", {"company": company, "account_type": "Cash", "is_group": 0})
|
||||||
|
|
||||||
if account:
|
if account:
|
||||||
return {
|
return {
|
||||||
@ -538,15 +538,13 @@ def get_opening_accounts(company):
|
|||||||
|
|
||||||
|
|
||||||
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
|
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
|
||||||
if not filters.get("party"):
|
|
||||||
return []
|
|
||||||
return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark
|
return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark
|
||||||
from `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
|
from `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
|
||||||
where jv_detail.parent = jv.name and jv_detail.account = %s and jv_detail.party = %s
|
where jv_detail.parent = jv.name and jv_detail.account = %s and ifnull(jv_detail.party, '') = %s
|
||||||
and (ifnull(jv_detail.against_invoice, '') = '' and ifnull(jv_detail.against_voucher, '') = ''
|
and (ifnull(jv_detail.against_invoice, '') = '' and ifnull(jv_detail.against_voucher, '') = ''
|
||||||
and ifnull(jv_detail.against_jv, '') = '' )
|
and ifnull(jv_detail.against_jv, '') = '' )
|
||||||
and jv.docstatus = 1 and jv.{0} like %s order by jv.name desc limit %s, %s""".format(searchfield),
|
and jv.docstatus = 1 and jv.{0} like %s order by jv.name desc limit %s, %s""".format(searchfield),
|
||||||
(filters["account"], filters["party"], "%{0}%".format(txt), start, page_len))
|
(filters["account"], cstr(filters["party"]), "%{0}%".format(txt), start, page_len))
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_outstanding(args):
|
def get_outstanding(args):
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
|
|
||||||
frappe.query_reports["Payment Period Based On Invoice Date"] = {
|
frappe.query_reports["Payment Period Based On Invoice Date"] = {
|
||||||
"filters": [
|
"filters": [
|
||||||
|
{
|
||||||
|
fieldname:"company",
|
||||||
|
label: __("Company"),
|
||||||
|
fieldtype: "Link",
|
||||||
|
options: "Company",
|
||||||
|
reqd: 1,
|
||||||
|
default: frappe.defaults.get_user_default("company")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
fieldname: "from_date",
|
fieldname: "from_date",
|
||||||
label: __("From Date"),
|
label: __("From Date"),
|
||||||
@ -23,27 +31,28 @@ frappe.query_reports["Payment Period Based On Invoice Date"] = {
|
|||||||
default: "Incoming"
|
default: "Incoming"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldname:"account",
|
"fieldname":"party_type",
|
||||||
label: __("Account"),
|
"label": __("Party Type"),
|
||||||
fieldtype: "Link",
|
"fieldtype": "Link",
|
||||||
options: "Account",
|
"options": "DocType",
|
||||||
get_query: function() {
|
"get_query": function() {
|
||||||
return {
|
return {
|
||||||
query: "erpnext.controllers.queries.get_account_list",
|
filters: {"name": ["in", ["Customer", "Supplier"]]}
|
||||||
filters: {
|
|
||||||
"report_type": "Balance Sheet",
|
|
||||||
company: frappe.query_report.filters_by_name.company.get_value()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldname:"company",
|
"fieldname":"party",
|
||||||
label: __("Company"),
|
"label": __("Party"),
|
||||||
fieldtype: "Link",
|
"fieldtype": "Dynamic Link",
|
||||||
options: "Company",
|
"get_options": function() {
|
||||||
reqd: 1,
|
var party_type = frappe.query_report.filters_by_name.party_type.get_value();
|
||||||
default: frappe.defaults.get_user_default("company")
|
var party = frappe.query_report.filters_by_name.party.get_value();
|
||||||
|
if(party && !party_type) {
|
||||||
|
frappe.throw(__("Please select Party Type first"));
|
||||||
|
}
|
||||||
|
return party_type;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -20,16 +20,16 @@ def execute(filters=None):
|
|||||||
for d in entries:
|
for d in entries:
|
||||||
if d.against_voucher:
|
if d.against_voucher:
|
||||||
against_date = d.against_voucher and invoice_posting_date_map[d.against_voucher] or ""
|
against_date = d.against_voucher and invoice_posting_date_map[d.against_voucher] or ""
|
||||||
outstanding_amount = flt(d.debit) or -1 * flt(d.credit)
|
payment_amount = flt(d.debit) or -1 * flt(d.credit)
|
||||||
else:
|
else:
|
||||||
against_date = d.against_invoice and invoice_posting_date_map[d.against_invoice] or ""
|
against_date = d.against_invoice and invoice_posting_date_map[d.against_invoice] or ""
|
||||||
outstanding_amount = flt(d.credit) or -1 * flt(d.debit)
|
payment_amount = flt(d.credit) or -1 * flt(d.debit)
|
||||||
|
|
||||||
row = [d.name, d.account, d.posting_date, d.against_voucher or d.against_invoice,
|
row = [d.name, d.party_type, d.party, d.posting_date, d.against_voucher or d.against_invoice,
|
||||||
against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
|
against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
|
||||||
|
|
||||||
if d.against_voucher or d.against_invoice:
|
if d.against_voucher or d.against_invoice:
|
||||||
row += get_ageing_data(30, 60, 90, d.posting_date, against_date, outstanding_amount)
|
row += get_ageing_data(30, 60, 90, d.posting_date, against_date, payment_amount)
|
||||||
else:
|
else:
|
||||||
row += ["", "", "", "", ""]
|
row += ["", "", "", "", ""]
|
||||||
|
|
||||||
@ -38,7 +38,8 @@ def execute(filters=None):
|
|||||||
return columns, data
|
return columns, data
|
||||||
|
|
||||||
def get_columns():
|
def get_columns():
|
||||||
return [_("Journal Entry") + ":Link/Journal Entry:140", _("Account") + ":Link/Account:140",
|
return [_("Journal Entry") + ":Link/Journal Entry:140",
|
||||||
|
_("Party Type") + ":Link/DocType:100", _("Party") + ":Dynamic Link/party_type:140",
|
||||||
_("Posting Date") + ":Date:100", _("Against Invoice") + ":Link/Purchase Invoice:130",
|
_("Posting Date") + ":Date:100", _("Against Invoice") + ":Link/Purchase Invoice:130",
|
||||||
_("Against Invoice Posting Date") + ":Date:130", _("Debit") + ":Currency:120", _("Credit") + ":Currency:120",
|
_("Against Invoice Posting Date") + ":Date:130", _("Debit") + ":Currency:120", _("Credit") + ":Currency:120",
|
||||||
_("Reference No") + "::100", _("Reference Date") + ":Date:100", _("Remarks") + "::150", _("Age") +":Int:40",
|
_("Reference No") + "::100", _("Reference Date") + ":Date:100", _("Remarks") + "::150", _("Age") +":Int:40",
|
||||||
@ -46,41 +47,38 @@ def get_columns():
|
|||||||
]
|
]
|
||||||
|
|
||||||
def get_conditions(filters):
|
def get_conditions(filters):
|
||||||
conditions = ""
|
conditions = []
|
||||||
party = None
|
|
||||||
|
|
||||||
if filters.get("account"):
|
if not filters.get("party_type"):
|
||||||
party = filters["account"]
|
if filters.get("payment_type") == "Outgoing":
|
||||||
else:
|
filters["party_type"] = "Supplier"
|
||||||
conditions += " and company = '%s'" % frappe.db.escape(filters["company"])
|
else:
|
||||||
|
filters["party_type"] = "Customer"
|
||||||
|
|
||||||
|
if filters.get("party_type"):
|
||||||
|
conditions.append("jvd.party_type=%(party_type)s")
|
||||||
|
|
||||||
account_type = "Receivable" if filters.get("payment_type") == "Incoming" else "Payable"
|
if filters.get("party"):
|
||||||
|
conditions.append("jvd.party=%(party)s")
|
||||||
|
|
||||||
conditions += """ and account in
|
if filters.get("company"):
|
||||||
(select name from tabAccount
|
conditions.append("jv.company=%(company)s")
|
||||||
where account_type = '{0}'
|
|
||||||
and company='{1}')""".format(account_type, frappe.db.escape(filters["company"]))
|
|
||||||
|
|
||||||
if party:
|
|
||||||
conditions += " and jvd.party = '%s'" % frappe.db.escape(party)
|
|
||||||
else:
|
|
||||||
conditions += " and ifnull(jvd.party, '') != ''"
|
|
||||||
|
|
||||||
if filters.get("from_date"):
|
if filters.get("from_date"):
|
||||||
conditions += " and jv.posting_date >= '%s'" % filters["from_date"]
|
conditions.append("jv.posting_date >= %(from_date)s")
|
||||||
if filters.get("to_date"):
|
if filters.get("to_date"):
|
||||||
conditions += " and jv.posting_date <= '%s'" % filters["to_date"]
|
conditions.append("jv.posting_date <= %(to_date)s")
|
||||||
|
|
||||||
return conditions
|
return "and {}".format(" and ".join(conditions)) if conditions else ""
|
||||||
|
|
||||||
def get_entries(filters):
|
def get_entries(filters):
|
||||||
conditions = get_conditions(filters)
|
conditions = get_conditions(filters)
|
||||||
entries = frappe.db.sql("""select jv.name, jvd.account, jv.posting_date,
|
entries = frappe.db.sql("""select jv.name, jvd.party_type, jvd.party, jv.posting_date,
|
||||||
jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit,
|
jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit,
|
||||||
jv.cheque_no, jv.cheque_date, jv.remark
|
jv.cheque_no, jv.cheque_date, jv.remark
|
||||||
from `tabJournal Entry Account` jvd, `tabJournal Entry` jv
|
from `tabJournal Entry Account` jvd, `tabJournal Entry` jv
|
||||||
where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
|
where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
|
||||||
conditions, as_dict=1, debug=1)
|
conditions, filters, as_dict=1)
|
||||||
|
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
import urllib
|
||||||
from frappe.utils.nestedset import NestedSet
|
from frappe.utils.nestedset import NestedSet
|
||||||
from frappe.website.website_generator import WebsiteGenerator
|
from frappe.website.website_generator import WebsiteGenerator
|
||||||
from frappe.website.render import clear_cache
|
from frappe.website.render import clear_cache
|
||||||
@ -91,7 +91,7 @@ def get_item_for_list_in_html(context):
|
|||||||
# add missing absolute link in files
|
# add missing absolute link in files
|
||||||
# user may forget it during upload
|
# user may forget it during upload
|
||||||
if (context.get("website_image") or "").startswith("files/"):
|
if (context.get("website_image") or "").startswith("files/"):
|
||||||
context["website_image"] = "/" + context["website_image"]
|
context["website_image"] = "/" + urllib.quote(context["website_image"])
|
||||||
return frappe.get_template("templates/includes/product_in_grid.html").render(context)
|
return frappe.get_template("templates/includes/product_in_grid.html").render(context)
|
||||||
|
|
||||||
def get_group_item_count(item_group):
|
def get_group_item_count(item_group):
|
||||||
|
@ -49,7 +49,7 @@ class NamingSeries(Document):
|
|||||||
self.set_series_for(self.select_doc_for_series, series_list)
|
self.set_series_for(self.select_doc_for_series, series_list)
|
||||||
|
|
||||||
# create series
|
# create series
|
||||||
map(self.insert_series, [d.split('.')[0] for d in series_list])
|
map(self.insert_series, [d.split('.')[0] for d in series_list if d.strip()])
|
||||||
|
|
||||||
msgprint(_("Series Updated"))
|
msgprint(_("Series Updated"))
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ class StockEntry(StockController):
|
|||||||
|
|
||||||
for f in ("uom", "stock_uom", "description", "item_name", "expense_account",
|
for f in ("uom", "stock_uom", "description", "item_name", "expense_account",
|
||||||
"cost_center", "conversion_factor"):
|
"cost_center", "conversion_factor"):
|
||||||
if f not in ["expense_account", "cost_center"] or not item.get(f):
|
if f in ["stock_uom", "conversion_factor"] or not item.get(f):
|
||||||
item.set(f, item_details.get(f))
|
item.set(f, item_details.get(f))
|
||||||
|
|
||||||
if self.difference_account:
|
if self.difference_account:
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"modified": "2015-04-07 08:18:14.440193",
|
"modified": "2015-06-10 15:52:49.492144",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Ordered Items To Be Delivered",
|
"name": "Ordered Items To Be Delivered",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\"\nfrom\n `tabSales Order`, `tabSales Order Item`, `tabBin`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Stopped\"\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\n and `tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse\norder by `tabSales Order`.transaction_date asc",
|
"query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order`, `tabSales Order Item`, `tabBin`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Stopped\"\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\n and `tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse\norder by `tabSales Order`.transaction_date asc",
|
||||||
"ref_doctype": "Delivery Note",
|
"ref_doctype": "Delivery Note",
|
||||||
"report_name": "Ordered Items To Be Delivered",
|
"report_name": "Ordered Items To Be Delivered",
|
||||||
"report_type": "Query Report"
|
"report_type": "Query Report"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user