diff --git a/frappe/__init__.py b/frappe/__init__.py
index edadfe4c74..a0fdf7c6c8 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json
from .exceptions import *
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template
-__version__ = '9.2.22'
+__version__ = '9.2.23'
__title__ = "Frappe Framework"
local = Local()
diff --git a/frappe/public/js/frappe/misc/utils.js b/frappe/public/js/frappe/misc/utils.js
index cfdbd16ee0..0b055ae6f5 100644
--- a/frappe/public/js/frappe/misc/utils.js
+++ b/frappe/public/js/frappe/misc/utils.js
@@ -537,6 +537,8 @@ frappe.utils = {
},
is_image_file: function(filename) {
+ // url can have query params
+ filename = filename.split('?')[0];
return (/\.(gif|jpg|jpeg|tiff|png|svg)$/i).test(filename);
},
@@ -635,4 +637,4 @@ if (!Array.prototype.uniqBy) {
})
}
})
-}
\ No newline at end of file
+}
diff --git a/frappe/templates/print_formats/standard_macros.html b/frappe/templates/print_formats/standard_macros.html
index a720b404f0..2257ac8d49 100644
--- a/frappe/templates/print_formats/standard_macros.html
+++ b/frappe/templates/print_formats/standard_macros.html
@@ -112,7 +112,7 @@ data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}"
{% elif df.fieldtype in ("Attach", "Attach Image") and doc[df.fieldname]
- and (guess_mimetype(doc[df.fieldname])[0] or "").startswith("image/") %}
+ and frappe.utils.is_image(doc[df.fieldname]) %}
{% elif df.fieldtype=="HTML" %}
diff --git a/frappe/utils/data.py b/frappe/utils/data.py
index 168e0430c0..6bf0cb8880 100644
--- a/frappe/utils/data.py
+++ b/frappe/utils/data.py
@@ -371,12 +371,17 @@ def fmt_money(amount, precision=None, currency=None):
# 40,000 -> 40,000.00
# 40,000.00000 -> 40,000.00
# 40,000.23000 -> 40,000.23
+
if decimal_str:
parts = str(amount).split(decimal_str)
decimals = parts[1] if len(parts) > 1 else ''
if precision > 2:
if len(decimals) < 3:
- precision = 2
+ if currency:
+ fraction = frappe.db.get_value("Currency", currency, "fraction_units") or 100
+ precision = len(cstr(fraction)) - 1
+ else:
+ precision = 2
elif len(decimals) < precision:
precision = len(decimals)
@@ -511,6 +516,13 @@ def is_html(text):
break
return out
+def is_image(filepath):
+ from mimetypes import guess_type
+
+ # filepath can be https://example.com/bed.jpg?v=129
+ filepath = filepath.split('?')[0]
+ return (guess_type(filepath)[0] or "").startswith("image/")
+
# from Jinja2 code
_striptags_re = re.compile(r'(|<[^>]*>)')
@@ -781,7 +793,7 @@ def make_filter_tuple(doctype, key, value):
return [doctype, key, value[0], value[1]]
else:
return [doctype, key, "=", value]
-
+
def scrub_urls(html):
html = expand_relative_urls(html)
# encoding should be responsibility of the composer