Merge pull request #2062 from nabinhait/hotfix

Hotfix
This commit is contained in:
Pratik Vyas 2014-08-15 11:06:44 +05:30
commit c0d31ce648
3 changed files with 34 additions and 45 deletions

View File

@ -18,29 +18,23 @@ class PaymentReconciliation(Document):
def get_jv_entries(self):
self.check_mandatory_to_fetch()
dr_or_cr = "credit" if self.party_type == "Customer" else "debit"
if self.party_type=="Customer":
amount_query = "ifnull(t2.credit, 0) - ifnull(t2.debit, 0)"
else:
amount_query = "ifnull(t2.debit, 0) - ifnull(t2.credit, 0)"
cond = self.check_condition(amount_query)
cond = self.check_condition(dr_or_cr)
bank_account_condition = "t2.against_account like %(bank_cash_account)s" \
if self.bank_cash_account else "1=1"
jv_entries = frappe.db.sql("""
select
t1.name as voucher_no, t1.posting_date, t1.remark, t2.account,
t2.name as voucher_detail_no, {amount_query} as payment_amount, t2.is_advance
t1.name as voucher_no, t1.posting_date, t1.remark, t2.account,
t2.name as voucher_detail_no, {dr_or_cr} as payment_amount, t2.is_advance
from
`tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
where
t1.name = t2.parent and t1.docstatus = 1 and t2.docstatus = 1
and t2.account = %(party_account)s and {amount_query} > 0
and ifnull((select ifnull(sum(ifnull(credit, 0) - ifnull(debit, 0)), 0) from `tabJournal Voucher Detail`
where parent=t1.name and account=t2.account and docstatus=1 group by account), 0) > 0
and ifnull(t2.against_voucher, '')='' and ifnull(t2.against_invoice, '')=''
and ifnull(t2.against_jv, '')='' {cond}
and t2.account = %(party_account)s and {dr_or_cr} > 0
and ifnull(t2.against_voucher, '')='' and ifnull(t2.against_invoice, '')=''
and ifnull(t2.against_jv, '')='' {cond}
and (CASE
WHEN t1.voucher_type in ('Debit Note', 'Credit Note')
THEN 1=1
@ -50,7 +44,6 @@ class PaymentReconciliation(Document):
"dr_or_cr": dr_or_cr,
"cond": cond,
"bank_account_condition": bank_account_condition,
"amount_query": amount_query
}), {
"party_account": self.party_account,
"bank_cash_account": "%%%s%%" % self.bank_cash_account
@ -73,49 +66,42 @@ class PaymentReconciliation(Document):
#Fetch JVs, Sales and Purchase Invoices for 'payment_reconciliation_invoices' to reconcile against
non_reconciled_invoices = []
dr_or_cr = "debit" if self.party_type == "Customer" else "credit"
if self.party_type=="Customer":
amount_query = "ifnull(debit, 0) - ifnull(credit, 0)"
else:
amount_query = "ifnull(credit, 0) - ifnull(debit, 0)"
cond = self.check_condition(amount_query)
cond = self.check_condition(dr_or_cr)
invoice_list = frappe.db.sql("""
select
voucher_no, voucher_type, posting_date,
ifnull(sum({amount_query}), 0) as invoice_amount
voucher_no, voucher_type, posting_date,
ifnull(sum({dr_or_cr}), 0) as invoice_amount
from
`tabGL Entry`
where
account = %s and {amount_query} > 0 {cond}
account = %s and {dr_or_cr} > 0 {cond}
group by voucher_type, voucher_no
""".format(**{
"cond": cond,
"amount_query": amount_query
"dr_or_cr": dr_or_cr
}), (self.party_account), as_dict=True)
for d in invoice_list:
payment_amount = frappe.db.sql("""
select
ifnull(sum(ifnull({amount_query}, 0)), 0)
ifnull(sum(ifnull({0}, 0)), 0)
from
`tabGL Entry`
where
account = %s and {amount_query} < 0
account = %s and {0} > 0
and against_voucher_type = %s and ifnull(against_voucher, '') = %s
""".format(**{
"cond": cond,
"amount_query": amount_query
}), (self.party_account, d.voucher_type, d.voucher_no))
""".format("credit" if self.party_type == "Customer" else "debit"),
(self.party_account, d.voucher_type, d.voucher_no))
payment_amount = -1*payment_amount[0][0] if payment_amount else 0
if d.invoice_amount > payment_amount:
non_reconciled_invoices.append({
'voucher_no': d.voucher_no,
'voucher_type': d.voucher_type,
'posting_date': d.posting_date,
'invoice_amount': flt(d.invoice_amount),
'voucher_no': d.voucher_no,
'voucher_type': d.voucher_type,
'posting_date': d.posting_date,
'invoice_amount': flt(d.invoice_amount),
'outstanding_amount': d.invoice_amount - payment_amount})
self.add_invoice_entries(non_reconciled_invoices)
@ -123,7 +109,7 @@ class PaymentReconciliation(Document):
def add_invoice_entries(self, non_reconciled_invoices):
#Populate 'payment_reconciliation_invoices' with JVs and Invoices to reconcile against
self.set('payment_reconciliation_invoices', [])
for e in non_reconciled_invoices:
ent = self.append('payment_reconciliation_invoices', {})
ent.invoice_type = e.get('voucher_type')
@ -166,14 +152,14 @@ class PaymentReconciliation(Document):
def validate_invoice(self):
if not self.get("payment_reconciliation_invoices"):
frappe.throw(_("No records found in the Invoice table"))
if not self.get("payment_reconciliation_payments"):
frappe.throw(_("No records found in the Payment table"))
unreconciled_invoices = frappe._dict()
for d in self.get("payment_reconciliation_invoices"):
unreconciled_invoices.setdefault(d.invoice_type, {}).setdefault(d.invoice_number, d.outstanding_amount)
invoices_to_reconcile = []
for p in self.get("payment_reconciliation_payments"):
if p.invoice_type and p.invoice_number:
@ -189,13 +175,13 @@ class PaymentReconciliation(Document):
if not invoices_to_reconcile:
frappe.throw(_("Please select Invoice Type and Invoice Number in atleast one row"))
def check_condition(self, amount_query):
def check_condition(self, dr_or_cr):
cond = self.from_date and " and posting_date >= '" + self.from_date + "'" or ""
cond += self.to_date and " and posting_date <= '" + self.to_date + "'" or ""
if self.minimum_amount:
cond += " and {0} >= %s".format(amount_query) % self.minimum_amount
cond += " and {0} >= %s".format(dr_or_cr) % self.minimum_amount
if self.maximum_amount:
cond += " and {0} <= %s".format(amount_query) % self.maximum_amount
cond += " and {0} <= %s".format(dr_or_cr) % self.maximum_amount
return cond
return cond

View File

@ -122,7 +122,7 @@ class ProductionPlanningTool(Document):
if self.fg_item:
item_condition = ' and pi.item_code = "' + self.fg_item + '"'
packed_items = frappe.db.sql("""select distinct pi.parent, pi.item_code, pi.warehouse as reserved_warhouse,
packed_items = frappe.db.sql("""select distinct pi.parent, pi.item_code, pi.warehouse as warehouse,
(((so_item.qty - ifnull(so_item.delivered_qty, 0)) * pi.qty) / so_item.qty)
as pending_qty
from `tabSales Order Item` so_item, `tabPacked Item` pi

View File

@ -327,7 +327,10 @@ class StockEntry(StockController):
frappe.DoesNotExistError)
# validate quantity <= ref item's qty - qty already returned
ref_item_qty = sum([flt(d.qty) for d in ref.doc.get({"item_code": item.item_code})])
if self.purpose == "Purchase Return":
ref_item_qty = sum([flt(d.qty)*flt(d.conversion_factor) for d in ref.doc.get({"item_code": item.item_code})])
elif self.purpose == "Sales Return":
ref_item_qty = sum([flt(d.qty) for d in ref.doc.get({"item_code": item.item_code})])
returnable_qty = ref_item_qty - flt(already_returned_item_qty.get(item.item_code))
if not returnable_qty:
frappe.throw(_("Item {0} has already been returned").format(item.item_code), StockOverReturnError)