fix: attach sr no si standalone credit note

This commit is contained in:
Ankush Menat 2022-03-11 19:06:07 +05:30 committed by Ankush Menat
parent 1c37d2711a
commit 1a256c62c4
5 changed files with 26 additions and 7 deletions

View File

@ -42,7 +42,11 @@ from erpnext.projects.doctype.timesheet.timesheet import get_projectwise_timeshe
from erpnext.setup.doctype.company.company import update_company_current_month_sales
from erpnext.stock.doctype.batch.batch import set_batch_nos
from erpnext.stock.doctype.delivery_note.delivery_note import update_billed_amount_based_on_so
from erpnext.stock.doctype.serial_no.serial_no import get_delivery_note_serial_no, get_serial_nos
from erpnext.stock.doctype.serial_no.serial_no import (
get_delivery_note_serial_no,
get_serial_nos,
update_serial_nos_after_submit,
)
from erpnext.stock.utils import calculate_mapped_packed_items_return
form_grid_templates = {
@ -226,6 +230,9 @@ class SalesInvoice(SellingController):
# because updating reserved qty in bin depends upon updated delivered qty in SO
if self.update_stock == 1:
self.update_stock_ledger()
if self.is_return and self.update_stock:
update_serial_nos_after_submit(self, "items")
# this sequence because outstanding may get -ve
self.make_gl_entries()

View File

@ -2617,11 +2617,9 @@ class TestSalesInvoice(unittest.TestCase):
def test_standalone_serial_no_return(self):
si = create_sales_invoice(item_code="_Test Serialized Item With Series", update_stock=True, is_return=True, qty=-1)
si.submit()
si.reload()
self.assertTrue(si.items[0].serial_no)
return si
def get_sales_invoice_for_e_invoice():
si = make_sales_invoice_for_ewaybill()

View File

@ -13,7 +13,10 @@ from frappe.utils import cint, flt
from erpnext.controllers.accounts_controller import get_taxes_and_charges
from erpnext.controllers.selling_controller import SellingController
from erpnext.stock.doctype.batch.batch import set_batch_nos
from erpnext.stock.doctype.serial_no.serial_no import get_delivery_note_serial_no
from erpnext.stock.doctype.serial_no.serial_no import (
get_delivery_note_serial_no,
update_serial_nos_after_submit,
)
from erpnext.stock.utils import calculate_mapped_packed_items_return
form_grid_templates = {
@ -220,6 +223,9 @@ class DeliveryNote(SellingController):
# Updating stock ledger should always be called after updating prevdoc status,
# because updating reserved qty in bin depends upon updated delivered qty in SO
self.update_stock_ledger()
if self.is_return:
update_serial_nos_after_submit(self, "items")
self.make_gl_entries()
self.repost_future_sle_and_gle()

View File

@ -822,6 +822,11 @@ class TestDeliveryNote(FrappeTestCase):
automatically_fetch_payment_terms(enable=0)
def test_standalone_serial_no_return(self):
dn = create_delivery_note(item_code="_Test Serialized Item With Series", is_return=True, qty=-1)
dn.reload()
self.assertTrue(dn.items[0].serial_no)
def create_return_delivery_note(**args):
args = frappe._dict(args)
from erpnext.controllers.sales_and_purchase_return import make_return_doc

View File

@ -394,7 +394,7 @@ def update_serial_nos(sle, item_det):
if not sle.is_cancelled and not sle.serial_no and cint(sle.actual_qty) > 0 \
and item_det.has_serial_no == 1 and item_det.serial_no_series:
serial_nos = get_auto_serial_nos(item_det.serial_no_series, sle.actual_qty)
frappe.db.set(sle, "serial_no", serial_nos)
sle.db_set("serial_no", serial_nos)
validate_serial_no(sle, item_det)
if sle.serial_no:
auto_make_serial_nos(sle)
@ -516,13 +516,16 @@ def update_serial_nos_after_submit(controller, parentfield):
if controller.doctype == "Stock Entry":
warehouse = d.t_warehouse
qty = d.transfer_qty
elif controller.doctype in ("Sales Invoice", "Delivery Note"):
warehouse = d.warehouse
qty = d.stock_qty
else:
warehouse = d.warehouse
qty = (d.qty if controller.doctype == "Stock Reconciliation"
else d.stock_qty)
for sle in stock_ledger_entries:
if sle.voucher_detail_no==d.name:
if not accepted_serial_nos_updated and qty and abs(sle.actual_qty)==qty \
if not accepted_serial_nos_updated and qty and abs(sle.actual_qty) == abs(qty) \
and sle.warehouse == warehouse and sle.serial_no != d.serial_no:
d.serial_no = sle.serial_no
frappe.db.set_value(d.doctype, d.name, "serial_no", sle.serial_no)