[Release Note] ERPNext and Frappe Version 13.3.0

ERPNext Version 13.3.0 Release Notes

Features & Enhancements

  • Purchase receipt creation from purchase invoice (#25126)

  • New Document Transaction Deletion (#25354)

  • Employee Referral (#24997)

  • Add Create Expense Claim button in Delivery Trip (#25526)

  • Reduced rate of asset depreciation as per IT Act (#25648)

  • Improve DATEV export (#25238)

  • Add pick batch button (#25413)

  • Enable custom field search on POS (#25421)

  • New check field in subscriptions for (not) submitting invoices (#25394)

  • Show POS reserved stock in stock projected qty report (#25593)

  • e-way bill validity field (#25555)

  • Significant reduction in time taken to save sales documents (#25475)

Fixes

  • Bank statement import via google sheet (#25677)

  • Invoices not getting fetched during payment reconciliation (#25598)

  • Error on applying TDS without party (#25632)

  • Allow to cancel loan with cancelled repayment entry (#25507)

  • Can’t open general ledger from consolidated financial report (#25542)

  • Add ‘Partially Received’ to Status drop-down list in Material Request (#24857)

  • Updated item filters for material request (#25531)

  • Added validation in stock entry to check duplicate serial nos (#25611)

  • Update shopify api version (#25600)

  • Dialog variable assignment after definition in POS (#25680)

  • Added tax_types list (#25587)

  • Include search fields in Project Link field query (#25505)

  • Item stock levels displaying inconsistently (#25506)

  • Change today to now to get data for reposting (#25703)

  • Parameter for get_filtered_list_for_consolidated_report in consolidated balance sheet (#25700)

  • Minor fixes in loan (#25546)

  • Fieldname when updating docfield property (#25516)

  • Use get_serial_nos for splitting (#25590)

  • Show item’s full name on hover over item in POS (#25554)

  • Stock ledger entry created against draft stock entry (#25540)

  • Incorrect expense account set in pos invoice (#25543)

  • Stock balance and batch-wise balance history report showing different closing stock (#25575)

  • Make strings translatable (#25521)

  • Serial no changed after saving stock reconciliation (#25541)

  • Ignore fraction difference while making round off gl entry (#25438)

  • Sync shopify customer addresses (#25481)

  • Total stock summary report not working (#25551)

  • Rename field has not updated value of deposit and withdrawal fields (#25545)

  • Unexpected keyword argument ‘merge_logs’ (#25489)

  • Validation message of quality inspection in purchase receipt (#25667)

  • Added is_stock_item filter (#25530)

  • Fetch total stock at company in PO (#25532)

  • Updated filters for process statement of accounts (#25384)

  • Incorrect expense account set in pos invoice (#25571)

  • Client script breaking while settings tax labels (#25653)

  • Empty payment term column in accounts receivable report (#25556)

  • Designation insufficient permission on lead doctype. (#25331)

  • Force https for shopify webhook registration (#25630)

  • Patch regional fields for old companies (#25673)

  • Woocommerce order sync issue (#25692)

  • Allow to receive same serial numbers multiple times (#25471)

  • Update Allocated amount after Paid Amount is changed in PE (#25515)

  • Updating Standard Notification’s channel field (#25564)

  • Report summary showing inflated values when values are accumulated in Group Company (#25577)

  • UI fixes related to overflowing payment section (#25652)

  • List invoices in Payment Reconciliation Payment (#25524)

  • Ageing errors in PSOA (#25490)

  • Prevent spurious defaults for items when making prec from dnote (#25559)

  • Stock reconciliation getting time out error during submission (#25557)

  • Timesheet filter date exclusive issue (#25626)

  • Update cost center in the item table fetched from POS Profile (#25609)

  • Updated modified time in purchase invoice to pull new fields (#25678)

  • Stock and Accounts Settings form refactor (#25534)

  • Payment amount showing in foreign currency (#25292)


Frappe Version 13.3.0 Release Notes

Features & Enhancements

  • Deletion Steps in Data Deletion Tool (#13124)

  • Format Option for list-apps in bench CLI (#13125)

  • Add password fieldtype option for Web Form (#13093)

  • Add simple repr for DocTypes (#13151)

  • Switch theme with left/right keys (#13077)

  • sourceURL for injected javascript (#13022)

Fixes

  • Decode uri before importing file via weblink (#13026)

  • Respond to /api requests as JSON by default (#13053)

  • Disabled checkbox should be disabled (#13021)

  • Moving Site folder across different FileSystems failed (#13038)

  • Freeze screen till the background request is complete (#13078)

  • Added conditional rendering for content field in split section w… (#13075)

  • Show delete button on portal if user has permission to delete document (#13149)

  • Dont disable dialog scroll on focusing a Link/Autocomplete field (#13119)

  • Typo in RecorderDetail.vue (#13086)

  • Error for bench drop-site. Added missing import. (#13064)

  • Report column context (#13090)

  • Different service name for push and pull request events (#13094)

  • Moving Site folder across different FileSystems failed (#13033)

  • Consistent checkboxes on all browsers (#13042)

  • Changed shorcut widgets color picker to dropdown (#13073)

  • Error while exporting reports with duration field (#13118)

  • Add margin to download backup card (#13079)

  • Move mention list generation logic to server-side (#13074)

  • Make strings translatable (#13046)

  • Don’t evaluate dynamic properties to check if conflicts exist (#13186)

  • Add __ function in vue global for translation in recorder (#13089)

  • Make strings translatable (#13076)

  • Show config in bench CLI (#13128)

  • Add breadcrumbs for list view (#13091)

  • Do not skip data in save while using shortcut (#13182)

  • Use docfields from options if no docfields are returned from meta (#13188)

  • Disable reloading files in __pycache__ directory (#13109)

  • RTL stylesheet route to load RTL style on demand. (#13007)

  • Do not show messsage when exception is handled (#13111)

  • Replace parseFloat by Number (#13082)

  • Add margin to download backup card (#13050)

  • Translate report column labels (#13083)

  • Grid row color picker field not working (#13040)

  • Improve oauthlib implementation (#13045)

  • Replace filter_by like with full text filter (#13126)

  • Focus jumps to first field (#13067)

16 Likes

FYI - Was able to update but getting the following deprecation warnings:

/home/frappe/frappe-bench/apps/frappe/frappe/translate.py:635: DeprecationWarning: invalid escape sequence \s
  translated_string = re.sub('{\s?([0-9]+)\s?}', "{\g<1>}", t)
/home/frappe/frappe-bench/apps/frappe/frappe/translate.py:635: DeprecationWarning: invalid escape sequence \g
  translated_string = re.sub('{\s?([0-9]+)\s?}', "{\g<1>}", t)
/home/frappe/frappe-bench/apps/frappe/frappe/build.py:79: DeprecationWarning: invalid escape sequence \^
  " refs/tags/,,' -e 's/\^{}//'"
/home/frappe/frappe-bench/apps/frappe/frappe/build.py:429: DeprecationWarning: invalid escape sequence \s
  content = re.sub("\s+", " ", content)
/home/frappe/frappe-bench/apps/frappe/frappe/model/naming.py:257: DeprecationWarning: invalid escape sequence \d
  regex = "^{value}{separator}\d+$".format(value=re.escape(value), separator=separator)
/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/data_import/importer.py:644: DeprecationWarning: invalid escape sequence \d
  is_valid_duration = re.match("^(?:(\d+d)?((^|\s)\d+h)?((^|\s)\d+m)?((^|\s)\d+s)?)$", value)

/home/frappe/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py:101: DeprecationWarning: invalid escape sequence \|
  regex = re.compile(cstr(key).replace("|", "\|").replace("*", "[\w]*"))
/home/frappe/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py:101: DeprecationWarning: invalid escape sequence \w
  regex = re.compile(cstr(key).replace("|", "\|").replace("*", "[\w]*"))
/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/file/file.py:915: DeprecationWarning: invalid escape sequence \s
  content = re.sub('<img[^>]*src\s*=\s*["\'](?=data:)(.*?)["\']', _save_file, content)
/home/frappe/frappe-bench/apps/frappe/frappe/utils/file_manager.py:421: DeprecationWarning: invalid escape sequence \s
  content = re.sub('<img[^>]*src\s*=\s*["\'](?=data:)(.*?)["\']', _save_file, content)
Updating DocTypes for frappe        : [=                                       ] 3%/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py:679: DeprecationWarning: invalid escape sequence \W
  if not re.match("^(?![\W])[^\d_\s][\w ]+$", name, **flags):
/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py:967: DeprecationWarning: invalid escape sequence \w
  re.match("""[\w\.:_]+\s*={1}\s*[\w\.@'"]+""", depends_on):
Updating customizations for Contact
/home/frappe/frappe-bench/apps/frappe/frappe/utils/formatters.py:81: DeprecationWarning: invalid escape sequence \<
  if not re.search("(\<br|\<div|\<p)", value):

Just to document - many deprecation warning messages related to inspect.getargspec():

/home/frappe/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
  if inspect.getargspec(module.get_context).args:
/home/frappe/frappe-bench/apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py:155: DeprecationWarning: invalid escape sequence \w
  if self.condition and ("=" in self.condition) and re.match("""[\w\.:_]+\s*={1}\s*[\w\.@'"]+""", self.condition):
/home/frappe/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
  if inspect.getargspec(module.get_context).args:
/home/frappe/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
  if inspect.getargspec(module.get_context).args:
/home/frappe/frappe-bench/apps/frappe/frappe/www/app.py:37: DeprecationWarning: invalid escape sequence \<
  boot_json = re.sub("\<script[^<]*\</script\>", "", boot_json)
/home/frappe/frappe-bench/apps/frappe/frappe/www/app.py:40: DeprecationWarning: invalid escape sequence \>
  boot_json = re.sub("</script\>", "", boot_json)
/home/frappe/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()

getargspec causes deprecation. See this is at /apps/frappe/frappe__init__.py at line 1176 at the function -

def get_newargs(fn, kwargs):
    if hasattr(fn, 'fnargs'):
            fnargs = fn.fnargs
    else:
            try:
                    fnargs, varargs, varkw, defaults = inspect.getargspec(fn)
            except ValueError:
                    fnargs = inspect.getfullargspec(fn).args
                    varargs = inspect.getfullargspec(fn).varargs
                    varkw = inspect.getfullargspec(fn).varkw
                    defaults = inspect.getfullargspec(fn).defaults

    newargs = {}
    for a in kwargs:
            if (a in fnargs) or varkw:
                    newargs[a] = kwargs.get(a)

    newargs.pop("ignore_permissions", None)
    newargs.pop("flags", None)

    return newargs

Should replace inspect.getargspec with getfullargspec? at try. Is there a reason why inspect.getfullargspec is used in the exception but not in the try block?

@surajshetty Please check.

Same problem:

Installed Apps

ERPNext: v13.3.0 (version-13)

Frappe Framework: v13.3.0 (version-13)

$ snyk protect
Successfully applied Snyk patches

Done in 6.54s.
Done in 7.40s.
Patching sites…
/home/erpkrn/frappe-bench/apps/frappe/frappe/translate.py:635: DeprecationWarning: invalid escape sequence \s
translated_string = re.sub(‘{\s?([0-9]+)\s?}’, “{\g<1>}”, t)
/home/erpkrn/frappe-bench/apps/frappe/frappe/translate.py:635: DeprecationWarning: invalid escape sequence \g
translated_string = re.sub(‘{\s?([0-9]+)\s?}’, “{\g<1>}”, t)
/home/erpkrn/frappe-bench/apps/frappe/frappe/build.py:79: DeprecationWarning: invalid escape sequence ^
" refs/tags/,’ -e ‘s/^{}//’"
/home/erpkrn/frappe-bench/apps/frappe/frappe/build.py:429: DeprecationWarning: invalid escape sequence \s
content = re.sub(“\s+”, " “, content)
/home/erpkrn/frappe-bench/apps/frappe/frappe/model/naming.py:257: DeprecationWarning: invalid escape sequence \d
regex = “^{value}{separator}\d+$”.format(value=re.escape(value), separator=separator)
/home/erpkrn/frappe-bench/apps/frappe/frappe/core/doctype/data_import/importer.py:644: DeprecationWarning: invalid escape sequence \d
is_valid_duration = re.match(”^(?:(\d+d)?((^|\s)\d+h)?((^|\s)\d+m)?((^|\s)\d+s)?)$“, value)
Migrating site1.local
/home/erpkrn/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py:101: DeprecationWarning: invalid escape sequence |
regex = re.compile(cstr(key).replace(”|“, “|”).replace(”", "[\w]“))
/home/erpkrn/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py:101: DeprecationWarning: invalid escape sequence \w
regex = re.compile(cstr(key).replace(”|“, “|”).replace(”", "[\w]“))
/home/erpkrn/frappe-bench/apps/frappe/frappe/core/doctype/file/file.py:915: DeprecationWarning: invalid escape sequence \s
content = re.sub(‘<img[^>]src\s=\s*"'(.?)["']‘, _save_file, content)
/home/erpkrn/frappe-bench/apps/frappe/frappe/utils/file_manager.py:421: DeprecationWarning: invalid escape sequence \s
content = re.sub(’<img[^>]src\s=\s
"'(.?)[“']', save_file, content)
Updating DocTypes for frappe : [================================= ] 84%/home/erpkrn/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py:679: DeprecationWarning: invalid escape sequence \W
if not re.match("^(?![\W])[^\d
\s][\w ]+$”, name, flags):
/home/erpkrn/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py:967: DeprecationWarning: invalid escape sequence \w
re.match(“”"[\w.:_]+\s
={1}\s
[\w.@'“]+”“”, depends_on):
Updating DocTypes for frappe : [========================================] 100%
Updating DocTypes for erpnext : [========================================] 100%
Updating Dashboard for frappe
Updating Dashboard for erpnext
Updating customizations for Address
Updating customizations for Contact
/home/erpkrn/frappe-bench/apps/frappe/frappe/www/printview.py:412: DeprecationWarning: invalid escape sequence (
for at_import in list(set(re.findall(“(@import url([^)]+)[;]?)”, css))):
Building search index for site1.local
/home/erpkrn/frappe-bench/apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py:155: DeprecationWarning: invalid escape sequence \w
if self.condition and (“=” in self.condition) and re.match(“”"[\w.:_]+\s
={1}\s*[\w.@’”]+“”“, self.condition):
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/www/app.py:37: DeprecationWarning: invalid escape sequence <
boot_json = re.sub(”<script[^<]*</script>“, “”, boot_json)
/home/erpkrn/frappe-bench/apps/frappe/frappe/www/app.py:40: DeprecationWarning: invalid escape sequence >
boot_json = re.sub(”</script>", “”, boot_json)
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
/home/erpkrn/frappe-bench/apps/frappe/frappe/website/context.py:55: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
if inspect.getargspec(module.get_context).args:
$ bench build

1 Like

Any update, how we should update.

bench update works - just get some warnings. I do not believe they affect functionality.

@nabinhait It is like there is a bug on amending sales invoice with the following error in version 13.3.0:“Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total” when you want to re submit
When you import sales invoice same error does not allow the importation.
Note: This occurs in an instance migrated from version 12.
Help Pls

They affect being able to see genuine logged errors and newcomers panic at the sight of “so many errors!!!”

How do we need to solve this warning?

I did bench update --reset

I also did (bench update --reset), but after that I did ‘bench update’ and found same issue.

this is only a depreciation warning of a method won’t effect anything

@Joseph_Marie_Alba1 @MartinHBramwell @revant_one (sincerely sorry for tagging) any input

It affects being able to see genuine logged errors and newcomers panic at the sight of “so many errors!!!”

I much appreciate the great effort everyone is showing in our community.
I did the Bench update successfully, although an error "stating that node version =>14 required popped up during installation.

Since upgrade to 13.3.0 two issues emerged:
1- wkhtmltopdf HostNotFoundError when printing PDF.
2- After gladly testing the new RTL feature, i cant change the language back (of the administrator) from Arabic to English, an error message “invalid value can be unlimited or an integer value” screen capture attached. Even couldn’t create a new user the same error persist.