[Release Notes] ERPNext and Frappe Version 13.1.0

ERPNext Version 13.1.0 Release Notes

Features

  • Recursive pricing rule (#24922)
  • Discount configuration on early payments (#24586)
  • Bulk e-invoice generation (#24969)
  • Employee Self Service (#24408)
  • Share doc with employee approvers if they don’t have access (#25190)
  • Price margin in buying (#24685)
  • Allow changing Work Stations in Work Order & Job Card (#24897)
  • Add document type field for e-invoicing (Italy) (#25256)
  • Add checkbox for disabling leave notification in HR Settings (#24877)
  • Enhancements in Material Request Plan Item in Production Plan (#25025)

Fixes and Enhancements

  • Mode of payments disappear on loading draft pos invoice (#24917)
  • Sales order not saving due type mismatch in promo scheme (#24748) (#25222)
  • Zero amount completed delivery notes being shown in Sales Invoice get items (#25317)
  • Incorrect status creating PR from PO after creating PI (#25109)
  • Precision and formatted document for stock level in item dashboard. (#24921)
  • Precision issues while allocating advance amount (#25086)
  • Round off final tax amount instead of current tax amount (#25188)
  • Redesign fixes (#24896)
  • TDS check getting checked after reload (#24972)
  • Github Action not failing when tests fail (#24867)
  • Calculate 80g certificate amount on validate for memberships (#24925)
  • Purchase from registered composition dealer (#25040)
  • Reduce number of queries for checking if future SL entry exists (#24881)
  • Remove unwanted parameter in calculate_rate_and_amount (#24883)
  • Membership renewal validation (#24963)
  • Not able to save material request (#25112)
  • POS print receipt (#25330)
  • Supplier was not able to Submit RFQ due to insufficient permission (#24622)
  • Unequal debit and credit issue on RCM Invoice (#24836)
  • Picked Qty conversion from Stock Qty to Qty while creating DN from Pick List (#25105)
  • Salary Structure object has no attribute set_totals (#25113)
  • Incorrect Nil Exempt and Non GST amount in GSTR3B report (#24916)
  • Add method for regional round off account back (#24893)
  • Employee profile pic upload access for erpnext user (#25022)
  • Make filters for payroll entry (#25386)
  • Fix dynamically changing grid properties (#25310)
  • Consider paid repayment entries in subsequent loan repayments (#25271)
  • Allow duplicate additional salaries (#24842)
  • Object referencing the same address issue (#25159)
  • Validating party currency with doc currency (#24318)
  • Non Profit fixes (#25060)
  • Additional Salary component amount not getting set (#25356)
  • Allow user to update exchange rate in Multi-currency LCV (#24912)
  • Allow creating stock entry based on work order for customer provided items (#24885)
  • Create property setters for shorter naming series on setup (#25128)
  • Add GST category field in Delivery Note (#25053)
  • Ignore Permission for Leave Ledger Entry (#25172)
  • Pending shortfall update on processing loan security shortfall (#24971)
  • Added flag for dont_fetch_price_list_rate in transaction (#25041)
  • Exchange Rate not getting set in Salary Slip (#25004)
  • Repost not completed backdated transactions (#24980)
  • frappe.whitelist for doc methods (#25230)
  • Opportunity-quotation mapping order status (#25001)
  • GST on freight charge in e-invoicing (#25000)
  • Role to override maintain same rate check in transactions (#25193)
  • Added blank option for status in report related to issue (#25082)
  • Cashier query in POS Opening/Closing Entry (#25399)
  • Lead Source’s module (#24583)
  • Hide alt tag if item is not shown in website (#24937)
  • Ignore Customer Group Perm on All Products page (#25397)
  • Give first preference to loan security on repayment (#25212)
  • Add shortfall ratio in Loan Security Shortfall (#25138)
  • Condition for SLA status banner (#25261)
  • Component amount calculation based on formula with abbr not working (#25117)
  • Remove gst name validation for purchase Invoice (#25235)
  • Do not fetch stopped MR in production plan (#25063)
  • Backport missing commits to develop branch (#25305)
  • UOM length unit in global setup list is empty (#24855)
  • Round total quantity in job card (#25240)
  • Default total_estimated_cost to zero (#24939)
  • Serial no refresh issue (#25127)
  • Correct calculation for discount amount when margin is set (#25179)
  • Get correct holiday list when calculating dates; test fixes (#24901)
  • POS print receipt (#24924)
  • Condition for setting agreement status (#25255)
  • Loan Repayment entry cancellation on salary slip cancel (#24879)
  • Add company validation for e-invoicing (#25349)
  • Query values incorrectly escaped while back updating Quality Inspection (#25118)
  • Update Bin via Update Item on Purchase/Sales Order (#23509)
  • Declare data before assigning (#25287)
  • Do not set standard link in Sales Invoice as custom (#25096)
  • Hide serial and batch selector in Stock Entry (#25107)
  • Taxable value including Freight and Forwarding charges in GSTR-1 Report (#25290)
  • Remove nonexistent method from pick list (#25279)
  • Allow zero valuation in stock reconciliation (#24888)
  • Place of supply of e-invoicing (#25148)
  • Delivery note print error (#25080)
  • Fix Payment references from disappearing on adding Cost Center in Payment Entry (#24831)
  • Company field in Warehouse (#25196)
  • Available employee for selection (#25378)
  • Cannot set qty to less than zero (#25258)
  • Don’t delete mode of payment account details while deleting comp… (#25217)
  • Exclude current doc while validation. (#24914)
  • POS Opening Entry with empty balance detail rows (#24876)
  • Unable to submit stock entry (#25033)
  • BOM cost test case (#25242)
  • Filter for employees in salary slip (#25361)
  • Added correct path in hooks (#24862)
  • Patch regional fields for old companies (#24988)
  • consolidated sales invoice posting date (#25119)
  • Don’t set “Company:company:default_currency” as default for currency link fields (#25095)
  • Healthcare lab module rename fields (#25276)
  • Error message compensatory leave request (#25206)
  • Adding company link to e invoice settings patch condition (#25301)
  • Membership and Donation API fixes (#24900)
  • Set correct ack no. on irn generation (#25251)
  • Report Issue Summary fix for zero issues (#24934)
  • Validation msg for TransDocNo e-invoicing (#25121)
  • Correct state code for ‘Other Territory’ (#24993)
  • Commit individual SLE rename for large datasets (develop) (#25084)
  • Remove shipping address GSTIN validation for e-invoice (#25153)
  • Period list for exponential smoothing forecasting report (#24982)
  • Customer creation from shopping cart (#25136)
  • Simplified logic for additional salary (#24824)
  • Item wise tax rate for consolidated POS invoice (#25029)
  • Column width in Recruitment analytics report (#25003)
  • Filter Bank Account drop-down list in Bank Reconciliation Tool (#24873)
  • Payroll issues (#24540)
  • PO not created against all selected suppliers (drop shipping) (#24863)
  • Can’t multiply sequence by non-int of type ‘float’ (#25092)
  • Make Discharge Schedule Date as Datetime (#24940)
  • Serial no trim issue (#24949)

Frappe Version 13.1.0 Release Notes

Features & Enhancements

  • Automated mail notifications will be shown in timeline (#12693)
  • Introduced Client Script for List views (#12590)
  • Introduced language switcher for guest users on website navbar (#12813)
  • Option to give submit permission while sharing a document (#12799)
  • Added option to set autoname in Customize Form (#12413)
  • Virtual DocType (#12121)

Fixes

16 Likes

The translation issue is still not fixed. We are still using this work around to get it solved
https://github.com/frappe/frappe/issues/12368#issuecomment-778357186

1 Like

@mujeerhashmi Can you share the traceback for this issue?

Any hints about this ?

Traceback (most recent call last):
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/www/app.py", line 22, in get_context
    boot = frappe.sessions.get()
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/sessions.py", line 132, in get
    bootinfo = get_bootinfo()
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/boot.py", line 58, in get_bootinfo
    load_translations(bootinfo)
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/boot.py", line 214, in load_translations
    messages = frappe.get_lang_dict("boot")
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/__init__.py", line 114, in get_lang_dict
    return get_dict(fortype, name)
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/translate.py", line 115, in get_dict
    messages.extend(get_server_messages(app))
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/translate.py", line 478, in get_server_messages
    messages.extend(get_messages_from_file(os.path.join(basepath, f)))
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/translate.py", line 527, in get_messages_from_file
    for line, message, context in extract_messages_from_code(file_contents)]
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/translate.py", line 542, in extract_messages_from_code
    code = frappe.as_unicode(render_include(code))
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/model/utils/__init__.py", line 70, in render_include
    with io.open(frappe.get_app_path(app, app_path), 'r', encoding = 'utf-8') as f:
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/__init__.py", line 954, in get_app_path
    return get_pymodule_path(app_name, *joins)
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/__init__.py", line 969, in get_pymodule_path
    return os.path.join(os.path.dirname(get_module(scrub(modulename)).__file__ or ''), *joins)
  File "/home/mujeerhashmi/erpnext/frappe-bench/apps/frappe/frappe/__init__.py", line 931, in get_module
    return importlib.import_module(modulename)
  File "/home/mujeerhashmi/erpnext/frappe-bench/env/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 991, in _gcd_import
  File "<frozen importlib._bootstrap>", line 930, in _sanity_check
ValueError: Empty module name

Executing erpnext.patches.v13_0.healthcare_lab_module_rename_doctypes in site1.local (_4bc010a720c49300)
Traceback (most recent call last):
File “/usr/lib/python3.6/runpy.py”, line 193, in _run_module_as_main
main”, mod_spec)
File “/usr/lib/python3.6/runpy.py”, line 85, in _run_code
exec(code, run_globals)
File “/home/v13/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 101, in
main()
File “/home/v13/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 18, in main
click.Group(commands=commands)(prog_name=‘bench’)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 764, in call
return self.main(*args, **kwargs)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 717, in main
rv = self.invoke(ctx)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/core.py”, line 555, in invoke
return callback(*args, **kwargs)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/click/decorators.py”, line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File “/home/v13/frappe-bench/apps/frappe/frappe/commands/init.py”, line 27, in _func
ret = f(frappe._dict(ctx.obj), *args, **kwargs)
File “/home/v13/frappe-bench/apps/frappe/frappe/commands/site.py”, line 300, in migrate
skip_search_index=skip_search_index
File “/home/v13/frappe-bench/apps/frappe/frappe/migrate.py”, line 67, in migrate
frappe.modules.patch_handler.run_all(skip_failing)
File “/home/v13/frappe-bench/apps/frappe/frappe/modules/patch_handler.py”, line 41, in run_all
run_patch(patch)
File “/home/v13/frappe-bench/apps/frappe/frappe/modules/patch_handler.py”, line 30, in run_patch
if not run_single(patchmodule = patch):
File “/home/v13/frappe-bench/apps/frappe/frappe/modules/patch_handler.py”, line 71, in run_single
return execute_patch(patchmodule, method, methodargs)
File “/home/v13/frappe-bench/apps/frappe/frappe/modules/patch_handler.py”, line 91, in execute_patch
frappe.get_attr(patchmodule.split()[0] + “.execute”)()
File “/home/v13/frappe-bench/apps/erpnext/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py”, line 41, in execute
frappe.db.sql(“”“UPDATE tabNormal Test Result SET lab_test_name = test_name”“”)
File “/home/v13/frappe-bench/apps/frappe/frappe/database/database.py”, line 152, in sql
self._cursor.execute(query)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/cursors.py”, line 170, in execute
result = self._query(query)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/cursors.py”, line 328, in _query
conn.query(q)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/connections.py”, line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/connections.py”, line 732, in _read_query_result
result.read()
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/connections.py”, line 1075, in read
first_packet = self.connection._read_packet()
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/connections.py”, line 684, in _read_packet
packet.check_error()
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/protocol.py”, line 220, in check_error
err.raise_mysql_exception(self._data)
File “/home/v13/frappe-bench/env/lib/python3.6/site-packages/pymysql/err.py”, line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1054, “Unknown column ‘test_name’ in ‘field list’”)

1 Like

@Majid_Ejaz We will release a fix very soon, for now you can comment out this patch and go ahead.

2 Likes

Again stock valuation problem after updated to 13.1

If you sync stock and account balance via Journal Entry on 15th April, and then if you try to make a back-dated stock transaction again on 10th April, the validation will come again.

Is it the same in your case?

Seems it is not related to this release.

Hi Nabin
yes the first case is very common and glad to know that you are aware of it… i trust this will be fixed soon

from sales invoice

Thank you Frappe team, you did a great job again.

Great job guys.

Here’s an observation for your attention:

The standard doctypes are missing in the Patient History Settings doc in Healthcare domain.

As a result, the Patient History report displays on the personal details of the patient. Details about Patient Appointments, Medical Records, Lab Test, Patient Encounters, Vital Signes, etc are missing.

For your kind attention.

1 Like

Getting this when I open the website given by ERPNext. Not there previously.

1 Like

I get this error after the update

module 'public' has no attribute '__file__'

Hi Nabin. Sorry to tag you here but can you please help understand why there is need to have this validation for stock & Accounts Ledger Sync and Forcing users to post a manual JV for the difference, whereas the Repost Item Valuation functionality is already doing the same thing!!!??

I did heavy testing for Version 13.0.0 wherein the Repost Item Valuation was correctly reposting all accounting differences. Although it gets stuck in queue/in progress most of the times but whenever we restart the Repost from backend it correctly updated all the accounting & stock ledger entries.

Based upon my testing i feel that if we bypass this validation for accounts/stock ledger sync thereby avoiding the manual JV and let Repost doctype work as per the defined logic then our accounts and stock ledger will be sync automatically. The only thing we have to make sure is that our repost don’t get stuck in queue/In-progress.

Please correct me if I am missing something…

1 Like

If it’s is a new site, looks like the domain was not correctly set. Setting the domain to Healthcare should have inserted the default doctypes in Patient History Settings. Could you please try setting this in Domain Settings once again?

Or just to fix this, you can run this on bench console-

from erpnext.healthcare.setup import setup_patient_history_settings

setup_patient_history_settings()

frappe.db.commit()
1 Like

@akurungadam thanks.
The site is on Frappe Cloud, so we do not have shell access. We’ll try setting the domain again as advised.

1 Like

Search to go to documnet like Domain Settings

Then you can go to

https://yourcloudinstance/app/domain-settings/Domain%20Settings

Check Healthcare domain and save and refresh browser