mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 08:54:45 +00:00
fix: attach sr no si standalone credit note
(cherry picked from commit 1a256c62c4)
This commit is contained in:
committed by
Ankush Menat
parent
625034a016
commit
2a00380e5b
@@ -44,7 +44,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.setup.doctype.company.company import update_company_current_month_sales
|
||||||
from erpnext.stock.doctype.batch.batch import set_batch_nos
|
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.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
|
from erpnext.stock.utils import calculate_mapped_packed_items_return
|
||||||
|
|
||||||
form_grid_templates = {
|
form_grid_templates = {
|
||||||
@@ -228,6 +232,9 @@ class SalesInvoice(SellingController):
|
|||||||
# because updating reserved qty in bin depends upon updated delivered qty in SO
|
# because updating reserved qty in bin depends upon updated delivered qty in SO
|
||||||
if self.update_stock == 1:
|
if self.update_stock == 1:
|
||||||
self.update_stock_ledger()
|
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
|
# this sequence because outstanding may get -ve
|
||||||
self.make_gl_entries()
|
self.make_gl_entries()
|
||||||
|
|||||||
@@ -2542,11 +2542,9 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
|
|
||||||
def test_standalone_serial_no_return(self):
|
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 = 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)
|
self.assertTrue(si.items[0].serial_no)
|
||||||
|
|
||||||
return si
|
|
||||||
|
|
||||||
|
|
||||||
def get_sales_invoice_for_e_invoice():
|
def get_sales_invoice_for_e_invoice():
|
||||||
si = make_sales_invoice_for_ewaybill()
|
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.accounts_controller import get_taxes_and_charges
|
||||||
from erpnext.controllers.selling_controller import SellingController
|
from erpnext.controllers.selling_controller import SellingController
|
||||||
from erpnext.stock.doctype.batch.batch import set_batch_nos
|
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
|
from erpnext.stock.utils import calculate_mapped_packed_items_return
|
||||||
|
|
||||||
form_grid_templates = {
|
form_grid_templates = {
|
||||||
@@ -220,6 +223,9 @@ class DeliveryNote(SellingController):
|
|||||||
# Updating stock ledger should always be called after updating prevdoc status,
|
# Updating stock ledger should always be called after updating prevdoc status,
|
||||||
# because updating reserved qty in bin depends upon updated delivered qty in SO
|
# because updating reserved qty in bin depends upon updated delivered qty in SO
|
||||||
self.update_stock_ledger()
|
self.update_stock_ledger()
|
||||||
|
if self.is_return:
|
||||||
|
update_serial_nos_after_submit(self, "items")
|
||||||
|
|
||||||
self.make_gl_entries()
|
self.make_gl_entries()
|
||||||
self.repost_future_sle_and_gle()
|
self.repost_future_sle_and_gle()
|
||||||
|
|
||||||
|
|||||||
@@ -822,6 +822,11 @@ class TestDeliveryNote(ERPNextTestCase):
|
|||||||
|
|
||||||
automatically_fetch_payment_terms(enable=0)
|
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):
|
def create_return_delivery_note(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||||
|
|||||||
@@ -413,7 +413,7 @@ def update_serial_nos(sle, item_det):
|
|||||||
if not sle.is_cancelled and not sle.serial_no and cint(sle.actual_qty) > 0 \
|
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:
|
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)
|
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)
|
validate_serial_no(sle, item_det)
|
||||||
if sle.serial_no:
|
if sle.serial_no:
|
||||||
auto_make_serial_nos(sle)
|
auto_make_serial_nos(sle)
|
||||||
@@ -535,13 +535,16 @@ def update_serial_nos_after_submit(controller, parentfield):
|
|||||||
if controller.doctype == "Stock Entry":
|
if controller.doctype == "Stock Entry":
|
||||||
warehouse = d.t_warehouse
|
warehouse = d.t_warehouse
|
||||||
qty = d.transfer_qty
|
qty = d.transfer_qty
|
||||||
|
elif controller.doctype in ("Sales Invoice", "Delivery Note"):
|
||||||
|
warehouse = d.warehouse
|
||||||
|
qty = d.stock_qty
|
||||||
else:
|
else:
|
||||||
warehouse = d.warehouse
|
warehouse = d.warehouse
|
||||||
qty = (d.qty if controller.doctype == "Stock Reconciliation"
|
qty = (d.qty if controller.doctype == "Stock Reconciliation"
|
||||||
else d.stock_qty)
|
else d.stock_qty)
|
||||||
for sle in stock_ledger_entries:
|
for sle in stock_ledger_entries:
|
||||||
if sle.voucher_detail_no==d.name:
|
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:
|
and sle.warehouse == warehouse and sle.serial_no != d.serial_no:
|
||||||
d.serial_no = sle.serial_no
|
d.serial_no = sle.serial_no
|
||||||
frappe.db.set_value(d.doctype, d.name, "serial_no", sle.serial_no)
|
frappe.db.set_value(d.doctype, d.name, "serial_no", sle.serial_no)
|
||||||
|
|||||||
Reference in New Issue
Block a user