[POS] Fixed payment gl entry for sales return
This commit is contained in:
parent
ec6267e82a
commit
efb5bf2cfc
@ -65,8 +65,8 @@ class SalesInvoice(SellingController):
|
|||||||
self.validate_fixed_asset()
|
self.validate_fixed_asset()
|
||||||
self.set_income_account_for_fixed_assets()
|
self.set_income_account_for_fixed_assets()
|
||||||
|
|
||||||
# if cint(self.is_pos):
|
if cint(self.is_pos):
|
||||||
# self.validate_pos()
|
self.validate_pos()
|
||||||
|
|
||||||
if cint(self.update_stock):
|
if cint(self.update_stock):
|
||||||
self.validate_dropship_item()
|
self.validate_dropship_item()
|
||||||
@ -219,6 +219,13 @@ class SalesInvoice(SellingController):
|
|||||||
timesheet.set_status()
|
timesheet.set_status()
|
||||||
timesheet.save()
|
timesheet.save()
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
self.set_paid_amount()
|
||||||
|
|
||||||
|
def set_paid_amount(self):
|
||||||
|
for data in self.payments:
|
||||||
|
data.base_amount = flt(data.amount*self.conversion_rate, self.precision("base_paid_amount"))
|
||||||
|
|
||||||
def validate_time_sheets_are_submitted(self):
|
def validate_time_sheets_are_submitted(self):
|
||||||
for data in self.timesheets:
|
for data in self.timesheets:
|
||||||
if data.time_sheet:
|
if data.time_sheet:
|
||||||
@ -356,11 +363,8 @@ class SalesInvoice(SellingController):
|
|||||||
throw(_("Customer {0} does not belong to project {1}").format(self.customer,self.project))
|
throw(_("Customer {0} does not belong to project {1}").format(self.customer,self.project))
|
||||||
|
|
||||||
def validate_pos(self):
|
def validate_pos(self):
|
||||||
if not self.cash_bank_account and flt(self.paid_amount):
|
|
||||||
frappe.throw(_("Cash or Bank Account is mandatory for making payment entry"))
|
|
||||||
|
|
||||||
if flt(self.paid_amount) + flt(self.write_off_amount) \
|
if flt(self.paid_amount) + flt(self.write_off_amount) \
|
||||||
- flt(self.grand_total) > 1/(10**(self.precision("grand_total") + 1)):
|
- flt(self.grand_total) > 1/(10**(self.precision("grand_total") + 1)) and self.is_return:
|
||||||
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
|
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
|
||||||
|
|
||||||
|
|
||||||
@ -588,35 +592,34 @@ class SalesInvoice(SellingController):
|
|||||||
gl_entries += super(SalesInvoice, self).get_gl_entries()
|
gl_entries += super(SalesInvoice, self).get_gl_entries()
|
||||||
|
|
||||||
def make_pos_gl_entries(self, gl_entries):
|
def make_pos_gl_entries(self, gl_entries):
|
||||||
if cint(self.is_pos) and self.paid_amount:
|
if cint(self.is_pos):
|
||||||
for payment_mode in self.payments:
|
for payment_mode in self.payments:
|
||||||
if payment_mode.base_amount > 0:
|
# POS, make payment entries
|
||||||
# POS, make payment entries
|
gl_entries.append(
|
||||||
gl_entries.append(
|
self.get_gl_dict({
|
||||||
self.get_gl_dict({
|
"account": self.debit_to,
|
||||||
"account": self.debit_to,
|
"party_type": "Customer",
|
||||||
"party_type": "Customer",
|
"party": self.customer,
|
||||||
"party": self.customer,
|
"against": payment_mode.account,
|
||||||
"against": payment_mode.account,
|
"credit": payment_mode.base_amount,
|
||||||
"credit": payment_mode.base_amount,
|
"credit_in_account_currency": payment_mode.base_amount \
|
||||||
"credit_in_account_currency": payment_mode.base_amount \
|
if self.party_account_currency==self.company_currency \
|
||||||
if self.party_account_currency==self.company_currency \
|
else payment_mode.amount,
|
||||||
else payment_mode.amount,
|
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
"against_voucher_type": self.doctype,
|
||||||
"against_voucher_type": self.doctype,
|
}, self.party_account_currency)
|
||||||
}, self.party_account_currency)
|
)
|
||||||
)
|
|
||||||
|
payment_mode_account_currency = get_account_currency(payment_mode.account)
|
||||||
payment_mode_account_currency = get_account_currency(payment_mode.account)
|
gl_entries.append(
|
||||||
gl_entries.append(
|
self.get_gl_dict({
|
||||||
self.get_gl_dict({
|
"account": payment_mode.account,
|
||||||
"account": payment_mode.account,
|
"against": self.customer,
|
||||||
"against": self.customer,
|
"debit": payment_mode.base_amount,
|
||||||
"debit": payment_mode.base_amount,
|
"debit_in_account_currency": payment_mode.base_amount \
|
||||||
"debit_in_account_currency": payment_mode.base_amount \
|
if payment_mode_account_currency==self.company_currency else payment_mode.amount
|
||||||
if payment_mode_account_currency==self.company_currency else payment_mode.amount
|
}, payment_mode_account_currency)
|
||||||
}, payment_mode_account_currency)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
def make_gle_for_change_amount(self, gl_entries):
|
def make_gle_for_change_amount(self, gl_entries):
|
||||||
if cint(self.is_pos) and self.change_amount:
|
if cint(self.is_pos) and self.change_amount:
|
||||||
|
@ -420,8 +420,10 @@ class calculate_taxes_and_totals(object):
|
|||||||
# NOTE:
|
# NOTE:
|
||||||
# write_off_amount is only for POS Invoice
|
# write_off_amount is only for POS Invoice
|
||||||
# total_advance is only for non POS Invoice
|
# total_advance is only for non POS Invoice
|
||||||
if self.doc.is_return:
|
if self.doc.doctype == "Sales Invoice":
|
||||||
return
|
self.calculate_paid_amount()
|
||||||
|
|
||||||
|
if self.doc.is_return: return
|
||||||
|
|
||||||
self.doc.round_floats_in(self.doc, ["grand_total", "total_advance", "write_off_amount"])
|
self.doc.round_floats_in(self.doc, ["grand_total", "total_advance", "write_off_amount"])
|
||||||
self._set_in_company_currency(self.doc, ['write_off_amount'])
|
self._set_in_company_currency(self.doc, ['write_off_amount'])
|
||||||
@ -435,7 +437,6 @@ class calculate_taxes_and_totals(object):
|
|||||||
- flt(self.doc.base_write_off_amount), self.doc.precision("grand_total"))
|
- flt(self.doc.base_write_off_amount), self.doc.precision("grand_total"))
|
||||||
|
|
||||||
if self.doc.doctype == "Sales Invoice":
|
if self.doc.doctype == "Sales Invoice":
|
||||||
self.calculate_paid_amount()
|
|
||||||
self.doc.round_floats_in(self.doc, ["paid_amount"])
|
self.doc.round_floats_in(self.doc, ["paid_amount"])
|
||||||
paid_amount = self.doc.paid_amount \
|
paid_amount = self.doc.paid_amount \
|
||||||
if self.doc.party_account_currency == self.doc.currency else self.doc.base_paid_amount
|
if self.doc.party_account_currency == self.doc.currency else self.doc.base_paid_amount
|
||||||
@ -452,10 +453,9 @@ class calculate_taxes_and_totals(object):
|
|||||||
def calculate_paid_amount(self):
|
def calculate_paid_amount(self):
|
||||||
paid_amount = base_paid_amount = 0.0
|
paid_amount = base_paid_amount = 0.0
|
||||||
for payment in self.doc.get('payments'):
|
for payment in self.doc.get('payments'):
|
||||||
if flt(payment.amount) > 0:
|
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
|
||||||
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
|
paid_amount += payment.amount
|
||||||
paid_amount += payment.amount
|
base_paid_amount += payment.base_amount
|
||||||
base_paid_amount += payment.base_amount
|
|
||||||
|
|
||||||
self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount"))
|
self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount"))
|
||||||
self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount"))
|
self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount"))
|
||||||
|
@ -310,4 +310,5 @@ erpnext.patches.v7_0.set_material_request_type_in_item
|
|||||||
erpnext.patches.v7_0.rename_examination_to_assessment
|
erpnext.patches.v7_0.rename_examination_to_assessment
|
||||||
erpnext.patches.v7_0.set_portal_settings
|
erpnext.patches.v7_0.set_portal_settings
|
||||||
erpnext.patches.v7_0.repost_future_gle_for_purchase_invoice
|
erpnext.patches.v7_0.repost_future_gle_for_purchase_invoice
|
||||||
erpnext.patches.v7_0.fix_duplicate_icons
|
erpnext.patches.v7_0.fix_duplicate_icons
|
||||||
|
erpnext.patches.v7_0.repost_gle_for_pos_sales_return
|
24
erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
Normal file
24
erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from frappe.utils import cint
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doctype("Sales Invoice")
|
||||||
|
|
||||||
|
for si in frappe.get_all("Sales Invoice", fields = ["name"],
|
||||||
|
filters={"docstatus": 1, "is_pos": 1, "is_return": 1}):
|
||||||
|
si_doc = frappe.get_doc("Sales Invoice", si.name)
|
||||||
|
if len(si_doc.payments) > 0:
|
||||||
|
delete_gle_for_voucher(si_doc.name)
|
||||||
|
si_doc.set_paid_amount()
|
||||||
|
si_doc.flags.ignore_validate_update_after_submit = True
|
||||||
|
si_doc.save()
|
||||||
|
si_doc.run_method("make_gl_entries")
|
||||||
|
|
||||||
|
def delete_gle_for_voucher(voucher_no):
|
||||||
|
frappe.db.sql("""delete from `tabGL Entry` where voucher_no = %(voucher_no)s""",
|
||||||
|
{'voucher_no': voucher_no})
|
||||||
|
|
@ -532,6 +532,11 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
// NOTE:
|
// NOTE:
|
||||||
// paid_amount and write_off_amount is only for POS Invoice
|
// paid_amount and write_off_amount is only for POS Invoice
|
||||||
// total_advance is only for non POS Invoice
|
// total_advance is only for non POS Invoice
|
||||||
|
|
||||||
|
if(this.frm.doc.doctype == "Sales Invoice" && this.frm.doc.is_return){
|
||||||
|
this.calculate_paid_amount()
|
||||||
|
}
|
||||||
|
|
||||||
if(this.frm.doc.is_return || this.frm.doc.docstatus > 0) return;
|
if(this.frm.doc.is_return || this.frm.doc.docstatus > 0) return;
|
||||||
|
|
||||||
frappe.model.round_floats_in(this.frm.doc, ["grand_total", "total_advance", "write_off_amount"]);
|
frappe.model.round_floats_in(this.frm.doc, ["grand_total", "total_advance", "write_off_amount"]);
|
||||||
@ -594,11 +599,9 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
var me = this;
|
var me = this;
|
||||||
var paid_amount = base_paid_amount = 0.0;
|
var paid_amount = base_paid_amount = 0.0;
|
||||||
$.each(this.frm.doc['payments'] || [], function(index, data){
|
$.each(this.frm.doc['payments'] || [], function(index, data){
|
||||||
if(data.amount > -1){
|
data.base_amount = flt(data.amount * me.frm.doc.conversion_rate);
|
||||||
data.base_amount = flt(data.amount * me.frm.doc.conversion_rate);
|
paid_amount += data.amount;
|
||||||
paid_amount += data.amount;
|
base_paid_amount += data.base_amount;
|
||||||
base_paid_amount += data.base_amount;
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
this.frm.doc.paid_amount = flt(paid_amount, precision("paid_amount"));
|
this.frm.doc.paid_amount = flt(paid_amount, precision("paid_amount"));
|
||||||
@ -607,7 +610,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
|
|
||||||
calculate_change_amount: function(){
|
calculate_change_amount: function(){
|
||||||
this.frm.doc.change_amount = 0.0;
|
this.frm.doc.change_amount = 0.0;
|
||||||
if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
|
if(this.frm.doc.paid_amount > this.frm.doc.grand_total && !this.frm.doc.is_return){
|
||||||
this.frm.doc.change_amount = flt(this.frm.doc.paid_amount - this.frm.doc.grand_total +
|
this.frm.doc.change_amount = flt(this.frm.doc.paid_amount - this.frm.doc.grand_total +
|
||||||
this.frm.doc.write_off_amount, precision("change_amount"));
|
this.frm.doc.write_off_amount, precision("change_amount"));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user