fix: attach sr no si standalone credit note
This commit is contained in:
parent
1c37d2711a
commit
1a256c62c4
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user