mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-09 08:11:19 +00:00
Merge branch 'version-13-beta' of https://github.com/frappe/erpnext into enconnex_erpnext
This commit is contained in:
@@ -94,7 +94,7 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
||||
if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received) < 100 && flt(this.frm.doc.per_billed) < 100) {
|
||||
this.frm.add_custom_button(__('Update Items'), () => {
|
||||
erpnext.utils.update_child_items({
|
||||
frm: frm,
|
||||
frm: this.frm,
|
||||
child_docname: "items",
|
||||
child_doctype: "Purchase Order Detail",
|
||||
cannot_add_row: false,
|
||||
|
||||
@@ -673,6 +673,9 @@ def update_grand_total_for_rcm(doc, method):
|
||||
if country != 'India':
|
||||
return
|
||||
|
||||
if not doc.total_taxes_and_charges:
|
||||
return
|
||||
|
||||
if doc.reverse_charge == 'Y':
|
||||
gst_accounts = get_gst_accounts(doc.company)
|
||||
gst_account_list = gst_accounts.get('cgst_account') + gst_accounts.get('sgst_account') \
|
||||
@@ -713,7 +716,10 @@ def make_regional_gl_entries(gl_entries, doc):
|
||||
country = frappe.get_cached_value('Company', doc.company, 'country')
|
||||
|
||||
if country != 'India':
|
||||
return
|
||||
return gl_entries
|
||||
|
||||
if not doc.total_taxes_and_charges:
|
||||
return gl_entries
|
||||
|
||||
if doc.reverse_charge == 'Y':
|
||||
gst_accounts = get_gst_accounts(doc.company)
|
||||
|
||||
@@ -7,6 +7,7 @@ import frappe
|
||||
from erpnext.accounts.doctype.cash_flow_mapper.default_cash_flow_mapper import DEFAULT_MAPPERS
|
||||
from .default_success_action import get_default_success_action
|
||||
from frappe import _
|
||||
from frappe.utils import cint
|
||||
from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to
|
||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
|
||||
from erpnext.setup.default_energy_point_rules import get_default_energy_point_rules
|
||||
@@ -29,8 +30,8 @@ def after_install():
|
||||
|
||||
|
||||
def check_setup_wizard_not_completed():
|
||||
if frappe.db.get_default('desktop:home_page') != 'setup-wizard':
|
||||
message = """ERPNext can only be installed on a fresh site where the setup wizard is not completed.
|
||||
if cint(frappe.db.get_single_value('System Settings', 'setup_complete') or 0):
|
||||
message = """ERPNext can only be installed on a fresh site where the setup wizard is not completed.
|
||||
You can reinstall this site (after saving your data) using: bench --site [sitename] reinstall"""
|
||||
frappe.throw(message)
|
||||
|
||||
|
||||
@@ -18,6 +18,28 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
set_perpetual_inventory(0)
|
||||
frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
|
||||
|
||||
def test_reverse_purchase_receipt_sle(self):
|
||||
|
||||
frappe.db.set_value('UOM', '_Test UOM', 'must_be_whole_number', 0)
|
||||
|
||||
pr = make_purchase_receipt(qty=0.5)
|
||||
|
||||
sl_entry = frappe.db.get_all("Stock Ledger Entry", {"voucher_type": "Purchase Receipt",
|
||||
"voucher_no": pr.name}, ['actual_qty'])
|
||||
|
||||
self.assertEqual(len(sl_entry), 1)
|
||||
self.assertEqual(sl_entry[0].actual_qty, 0.5)
|
||||
|
||||
pr.cancel()
|
||||
|
||||
sl_entry_cancelled = frappe.db.get_all("Stock Ledger Entry", {"voucher_type": "Purchase Receipt",
|
||||
"voucher_no": pr.name}, ['actual_qty'], order_by='creation')
|
||||
|
||||
self.assertEqual(len(sl_entry_cancelled), 2)
|
||||
self.assertEqual(sl_entry_cancelled[1].actual_qty, -0.5)
|
||||
|
||||
frappe.db.set_value('UOM', '_Test UOM', 'must_be_whole_number', 1)
|
||||
|
||||
def test_make_purchase_invoice(self):
|
||||
pr = make_purchase_receipt(do_not_save=True)
|
||||
self.assertRaises(frappe.ValidationError, make_purchase_invoice, pr.name)
|
||||
|
||||
@@ -31,7 +31,7 @@ def make_sl_entries(sl_entries, allow_negative_stock=False, via_landed_cost_vouc
|
||||
sle['posting_time'] = now_datetime().strftime('%H:%M:%S.%f')
|
||||
|
||||
if cancel:
|
||||
sle['actual_qty'] = -flt(sle.get('actual_qty'), 0)
|
||||
sle['actual_qty'] = -flt(sle.get('actual_qty'))
|
||||
|
||||
if sle['actual_qty'] < 0 and not sle.get('outgoing_rate'):
|
||||
sle['outgoing_rate'] = get_incoming_outgoing_rate_for_cancel(sle.item_code,
|
||||
|
||||
@@ -11,8 +11,39 @@ def get_level():
|
||||
activation_level = 0
|
||||
sales_data = []
|
||||
min_count = 0
|
||||
doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3,
|
||||
"Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3}
|
||||
doctypes = {
|
||||
"Asset": 5,
|
||||
"BOM": 3,
|
||||
"Customer": 5,
|
||||
"Delivery Note": 5,
|
||||
"Employee": 3,
|
||||
"Instructor": 5,
|
||||
"Instructor": 5,
|
||||
"Issue": 5,
|
||||
"Item": 5,
|
||||
"Journal Entry": 3,
|
||||
"Lead": 3,
|
||||
"Leave Application": 5,
|
||||
"Material Request": 5,
|
||||
"Opportunity": 5,
|
||||
"Payment Entry": 2,
|
||||
"Project": 5,
|
||||
"Purchase Order": 2,
|
||||
"Purchase Invoice": 5,
|
||||
"Purchase Receipt": 5,
|
||||
"Quotation": 3,
|
||||
"Salary Slip": 5,
|
||||
"Salary Structure": 5,
|
||||
"Sales Order": 2,
|
||||
"Sales Invoice": 2,
|
||||
"Stock Entry": 3,
|
||||
"Student": 5,
|
||||
"Supplier": 5,
|
||||
"Task": 5,
|
||||
"User": 5,
|
||||
"Work Order": 5
|
||||
}
|
||||
|
||||
for doctype, min_count in iteritems(doctypes):
|
||||
count = frappe.db.count(doctype)
|
||||
if count > min_count:
|
||||
|
||||
Reference in New Issue
Block a user