Fix 11948 - Sales Payment Summary (#11950)

* [fix] #11948

* [fix] #11948

* [fix] #11948

* codacy issues
This commit is contained in:
Pawan Mehta 2017-12-14 18:04:31 +05:30 committed by Nabin Hait
parent aaf378e340
commit d6cb617520
2 changed files with 44 additions and 40 deletions

View File

@ -1,6 +1,5 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt // License: GNU General Public License v3. See license.txt
frappe.query_reports["Sales Payment Summary"] = { frappe.query_reports["Sales Payment Summary"] = {
"filters": [ "filters": [
{ {
@ -23,12 +22,6 @@ frappe.query_reports["Sales Payment Summary"] = {
"options": "Company", "options": "Company",
"default": frappe.defaults.get_user_default("Company") "default": frappe.defaults.get_user_default("Company")
}, },
{
"fieldname":"mode_of_payment",
"label": __("Mode of Payment"),
"fieldtype": "Link",
"options": "Mode of Payment"
},
{ {
"fieldname":"owner", "fieldname":"owner",
"label": __("Owner"), "label": __("Owner"),
@ -36,18 +29,6 @@ frappe.query_reports["Sales Payment Summary"] = {
"options": "User", "options": "User",
"defaults": user "defaults": user
}, },
{
"fieldname":"cost_center",
"label": __("Cost Center"),
"fieldtype": "Link",
"options": "Cost Center"
},
{
"fieldname":"warehouse",
"label": __("Warehouse"),
"fieldtype": "Link",
"options": "Warehouse"
},
{ {
"fieldname":"is_pos", "fieldname":"is_pos",
"label": __("POS?"), "label": __("POS?"),

View File

@ -1,9 +1,9 @@
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors # Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt # For license information, please see license.txt
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from frappe.utils import cstr
def execute(filters=None): def execute(filters=None):
columns, data = [], [] columns, data = [], []
@ -15,22 +15,23 @@ def get_columns():
return [ return [
_("Date") + ":Date:80", _("Date") + ":Date:80",
_("Owner") + "::150", _("Owner") + "::150",
_("Payment Mode") + "::120", _("Payment Mode") + "::140",
_("Warehouse") + ":Link/Cost Center:100",
_("Cost Center") + ":Link/Warehouse:100",
_("Sales and Returns") + ":Currency/currency:120", _("Sales and Returns") + ":Currency/currency:120",
_("Taxes") + ":Currency/currency:120", _("Taxes") + ":Currency/currency:120",
_("Payments") + ":Currency/currency:120", _("Payments") + ":Currency/currency:120",
_("Reconciliation") + ":Currency/currency:120" _("Outstanding Amount") + ":Currency/currency:150",
] ]
def get_sales_payment_data(filters, columns): def get_sales_payment_data(filters, columns):
sales_invoice_data = get_sales_invoice_data(filters) sales_invoice_data = get_sales_invoice_data(filters)
data = [] data = []
mode_of_payments = get_mode_of_payments(filters)
for inv in sales_invoice_data: for inv in sales_invoice_data:
row = [inv.posting_date, inv.owner, inv.mode_of_payment,inv.warehouse, mode_of_payment = inv["owner"]+cstr(inv["posting_date"])
inv.cost_center,inv.net_total, inv.total_taxes, inv.paid_amount, row = [inv.posting_date, inv.owner,", ".join(mode_of_payments.get(mode_of_payment, [])),
(inv.net_total + inv.total_taxes - inv.paid_amount)] inv.net_total,
inv.total_taxes, (inv.net_total + inv.total_taxes - inv.outstanding_amount),
inv.outstanding_amount]
data.append(row) data.append(row)
return data return data
@ -41,26 +42,48 @@ def get_conditions(filters):
if filters.get("owner"): conditions += " and a.owner = %(owner)s" if filters.get("owner"): conditions += " and a.owner = %(owner)s"
if filters.get("from_date"): conditions += " and a.posting_date >= %(from_date)s" if filters.get("from_date"): conditions += " and a.posting_date >= %(from_date)s"
if filters.get("to_date"): conditions += " and a.posting_date <= %(to_date)s" if filters.get("to_date"): conditions += " and a.posting_date <= %(to_date)s"
if filters.get("mode_of_payment"): conditions += " and c.mode_of_payment >= %(mode_of_payment)s"
if filters.get("warehouse"): conditions += " and b.warehouse <= %(warehouse)s"
if filters.get("cost_center"): conditions += " and b.cost_center <= %(cost_center)s"
if filters.get("is_pos"): conditions += " and a.is_pos = %(is_pos)s" if filters.get("is_pos"): conditions += " and a.is_pos = %(is_pos)s"
return conditions return conditions
def get_sales_invoice_data(filters): def get_sales_invoice_data(filters):
conditions = get_conditions(filters) conditions = get_conditions(filters)
return frappe.db.sql(""" return frappe.db.sql("""
select select
a.owner, a.posting_date, c.mode_of_payment, b.warehouse, b.cost_center, a.posting_date, a.owner,
sum(a.net_total) as "net_total", sum(a.net_total) as "net_total",
sum(a.total_taxes_and_charges) as "total_taxes", sum(a.total_taxes_and_charges) as "total_taxes",
sum(a.base_paid_amount) as "paid_amount" sum(a.base_paid_amount) as "paid_amount",
from `tabSales Invoice` a, `tabSales Invoice Item` b, `tabSales Invoice Payment` c sum(a.outstanding_amount) as "outstanding_amount"
where from `tabSales Invoice` a
a.name = b.parent where a.docstatus = 1
and a.name = c.parent
and {conditions} and {conditions}
group by group by
a.owner, a.posting_date, c.mode_of_payment, b.warehouse, b.cost_center a.owner, a.posting_date
""".format(conditions=conditions), filters, as_dict=1) """.format(conditions=conditions), filters, as_dict=1)
def get_mode_of_payments(filters):
mode_of_payments = {}
invoice_list = get_invoices(filters)
invoice_list_names = ",".join(['"' + invoice['name'] + '"' for invoice in invoice_list])
if invoice_list:
inv_mop = frappe.db.sql("""select a.owner,a.posting_date,b.mode_of_payment
from `tabSales Invoice` a, `tabSales Invoice Payment` b
where a.name = b.parent
and a.name in ({invoice_list_names})
union
select a.owner,a.posting_date,b.mode_of_payment
from `tabSales Invoice` a, `tabPayment Entry` b,`tabPayment Entry Reference` c
where a.name = c.reference_name
and b.name = c.parent
and a.name in ({invoice_list_names})
""".format(invoice_list_names=invoice_list_names), as_dict=1)
for d in inv_mop:
mode_of_payments.setdefault(d["owner"]+cstr(d["posting_date"]), []).append(d.mode_of_payment)
return mode_of_payments
def get_invoices(filters):
conditions = get_conditions(filters)
return frappe.db.sql("""select a.name
from `tabSales Invoice` a
where a.docstatus = 1 and {conditions}""".format(conditions=conditions),
filters, as_dict=1)