Merge branch 'develop' into fix/pick-list/picked-qty
This commit is contained in:
commit
e295d0c091
@ -186,8 +186,10 @@
|
|||||||
{
|
{
|
||||||
"fetch_from": "bank_account.bank",
|
"fetch_from": "bank_account.bank",
|
||||||
"fieldname": "bank",
|
"fieldname": "bank",
|
||||||
"fieldtype": "Read Only",
|
"fieldtype": "Link",
|
||||||
"label": "Bank"
|
"label": "Bank",
|
||||||
|
"options": "Bank",
|
||||||
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fetch_from": "bank_account.bank_account_no",
|
"fetch_from": "bank_account.bank_account_no",
|
||||||
@ -366,10 +368,11 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-09-18 12:24:14.178853",
|
"modified": "2022-09-30 16:19:43.680025",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Payment Request",
|
"name": "Payment Request",
|
||||||
|
"naming_rule": "By \"Naming Series\" field",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
@ -401,5 +404,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC"
|
"sort_order": "DESC",
|
||||||
|
"states": []
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import frappe
|
|||||||
from frappe.model.dynamic_links import get_dynamic_link_map
|
from frappe.model.dynamic_links import get_dynamic_link_map
|
||||||
from frappe.model.naming import make_autoname
|
from frappe.model.naming import make_autoname
|
||||||
from frappe.tests.utils import change_settings
|
from frappe.tests.utils import change_settings
|
||||||
from frappe.utils import add_days, flt, getdate, nowdate
|
from frappe.utils import add_days, flt, getdate, nowdate, today
|
||||||
|
|
||||||
import erpnext
|
import erpnext
|
||||||
from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account
|
from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account
|
||||||
@ -3196,6 +3196,37 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
"Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice", unlink_enabled
|
"Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice", unlink_enabled
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_batch_expiry_for_sales_invoice_return(self):
|
||||||
|
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||||
|
from erpnext.stock.doctype.item.test_item import make_item
|
||||||
|
|
||||||
|
item = make_item(
|
||||||
|
"_Test Batch Item For Return Check",
|
||||||
|
{
|
||||||
|
"is_purchase_item": 1,
|
||||||
|
"is_stock_item": 1,
|
||||||
|
"has_batch_no": 1,
|
||||||
|
"create_new_batch": 1,
|
||||||
|
"batch_number_series": "TBIRC.#####",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
pr = make_purchase_receipt(qty=1, item_code=item.name)
|
||||||
|
|
||||||
|
batch_no = pr.items[0].batch_no
|
||||||
|
si = create_sales_invoice(qty=1, item_code=item.name, update_stock=1, batch_no=batch_no)
|
||||||
|
|
||||||
|
si.load_from_db()
|
||||||
|
batch_no = si.items[0].batch_no
|
||||||
|
self.assertTrue(batch_no)
|
||||||
|
|
||||||
|
frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(today(), -1))
|
||||||
|
|
||||||
|
return_si = make_return_doc(si.doctype, si.name)
|
||||||
|
return_si.save().submit()
|
||||||
|
|
||||||
|
self.assertTrue(return_si.docstatus == 1)
|
||||||
|
|
||||||
|
|
||||||
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()
|
||||||
@ -3289,6 +3320,7 @@ def create_sales_invoice(**args):
|
|||||||
"serial_no": args.serial_no,
|
"serial_no": args.serial_no,
|
||||||
"conversion_factor": 1,
|
"conversion_factor": 1,
|
||||||
"incoming_rate": args.incoming_rate or 0,
|
"incoming_rate": args.incoming_rate or 0,
|
||||||
|
"batch_no": args.batch_no or None,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import json
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
from frappe.utils import cstr, flt, nowdate, nowtime
|
from frappe.utils import add_days, cstr, flt, nowdate, nowtime, today
|
||||||
|
|
||||||
from erpnext.accounts.doctype.account.test_account import get_inventory_account
|
from erpnext.accounts.doctype.account.test_account import get_inventory_account
|
||||||
from erpnext.accounts.utils import get_balance_on
|
from erpnext.accounts.utils import get_balance_on
|
||||||
@ -1091,6 +1091,36 @@ class TestDeliveryNote(FrappeTestCase):
|
|||||||
frappe.db.exists("GL Entry", {"voucher_no": dn.name, "voucher_type": dn.doctype})
|
frappe.db.exists("GL Entry", {"voucher_no": dn.name, "voucher_type": dn.doctype})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_batch_expiry_for_delivery_note(self):
|
||||||
|
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||||
|
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
|
||||||
|
|
||||||
|
item = make_item(
|
||||||
|
"_Test Batch Item For Return Check",
|
||||||
|
{
|
||||||
|
"is_purchase_item": 1,
|
||||||
|
"is_stock_item": 1,
|
||||||
|
"has_batch_no": 1,
|
||||||
|
"create_new_batch": 1,
|
||||||
|
"batch_number_series": "TBIRC.#####",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
pi = make_purchase_receipt(qty=1, item_code=item.name)
|
||||||
|
|
||||||
|
dn = create_delivery_note(qty=1, item_code=item.name, batch_no=pi.items[0].batch_no)
|
||||||
|
|
||||||
|
dn.load_from_db()
|
||||||
|
batch_no = dn.items[0].batch_no
|
||||||
|
self.assertTrue(batch_no)
|
||||||
|
|
||||||
|
frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(today(), -1))
|
||||||
|
|
||||||
|
return_dn = make_return_doc(dn.doctype, dn.name)
|
||||||
|
return_dn.save().submit()
|
||||||
|
|
||||||
|
self.assertTrue(return_dn.docstatus == 1)
|
||||||
|
|
||||||
|
|
||||||
def create_delivery_note(**args):
|
def create_delivery_note(**args):
|
||||||
dn = frappe.new_doc("Delivery Note")
|
dn = frappe.new_doc("Delivery Note")
|
||||||
@ -1117,6 +1147,7 @@ def create_delivery_note(**args):
|
|||||||
"expense_account": args.expense_account or "Cost of Goods Sold - _TC",
|
"expense_account": args.expense_account or "Cost of Goods Sold - _TC",
|
||||||
"cost_center": args.cost_center or "_Test Cost Center - _TC",
|
"cost_center": args.cost_center or "_Test Cost Center - _TC",
|
||||||
"serial_no": args.serial_no,
|
"serial_no": args.serial_no,
|
||||||
|
"batch_no": args.batch_no or None,
|
||||||
"target_warehouse": args.target_warehouse,
|
"target_warehouse": args.target_warehouse,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -153,7 +153,9 @@ class StockLedgerEntry(Document):
|
|||||||
|
|
||||||
def validate_batch(self):
|
def validate_batch(self):
|
||||||
if self.batch_no and self.voucher_type != "Stock Entry":
|
if self.batch_no and self.voucher_type != "Stock Entry":
|
||||||
if self.voucher_type in ["Purchase Receipt", "Purchase Invoice"] and self.actual_qty < 0:
|
if (self.voucher_type in ["Purchase Receipt", "Purchase Invoice"] and self.actual_qty < 0) or (
|
||||||
|
self.voucher_type in ["Delivery Note", "Sales Invoice"] and self.actual_qty > 0
|
||||||
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
|
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user