Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into payroll_accounting_dimension
This commit is contained in:
commit
b8442816ca
@ -257,9 +257,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "1",
|
"default": "1",
|
||||||
|
"description": "If enabled, ledger entries will be posted for change amount in POS transactions",
|
||||||
"fieldname": "post_change_gl_entries",
|
"fieldname": "post_change_gl_entries",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Post Ledger Entries for Given Change"
|
"label": "Change Ledger Entries for Change Amount"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "icon-cog",
|
"icon": "icon-cog",
|
||||||
@ -267,7 +268,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-05-25 12:34:05.858669",
|
"modified": "2021-06-16 13:14:45.739107",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Accounts Settings",
|
"name": "Accounts Settings",
|
||||||
|
@ -121,8 +121,7 @@ class GLEntry(Document):
|
|||||||
|
|
||||||
def check_pl_account(self):
|
def check_pl_account(self):
|
||||||
if self.is_opening=='Yes' and \
|
if self.is_opening=='Yes' and \
|
||||||
frappe.db.get_value("Account", self.account, "report_type")=="Profit and Loss" and \
|
frappe.db.get_value("Account", self.account, "report_type")=="Profit and Loss":
|
||||||
self.voucher_type not in ['Purchase Invoice', 'Sales Invoice']:
|
|
||||||
frappe.throw(_("{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry")
|
frappe.throw(_("{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry")
|
||||||
.format(self.voucher_type, self.voucher_no, self.account))
|
.format(self.voucher_type, self.voucher_no, self.account))
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ class PaymentTermsTemplate(Document):
|
|||||||
def check_duplicate_terms(self):
|
def check_duplicate_terms(self):
|
||||||
terms = []
|
terms = []
|
||||||
for term in self.terms:
|
for term in self.terms:
|
||||||
term_info = (term.credit_days, term.credit_months, term.due_date_based_on)
|
term_info = (term.payment_term, term.credit_days, term.credit_months, term.due_date_based_on)
|
||||||
if term_info in terms:
|
if term_info in terms:
|
||||||
frappe.msgprint(
|
frappe.msgprint(
|
||||||
_('The Payment Term at row {0} is possibly a duplicate.').format(term.idx),
|
_('The Payment Term at row {0} is possibly a duplicate.').format(term.idx),
|
||||||
|
@ -36,16 +36,12 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
{
|
{
|
||||||
"fieldname":"account",
|
"fieldname":"account",
|
||||||
"label": __("Account"),
|
"label": __("Account"),
|
||||||
"fieldtype": "Link",
|
"fieldtype": "MultiSelectList",
|
||||||
"options": "Account",
|
"options": "Account",
|
||||||
"get_query": function() {
|
get_data: function(txt) {
|
||||||
var company = frappe.query_report.get_filter_value('company');
|
return frappe.db.get_link_options('Account', txt, {
|
||||||
return {
|
company: frappe.query_report.get_filter_value("company")
|
||||||
"doctype": "Account",
|
});
|
||||||
"filters": {
|
|
||||||
"company": company,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -135,7 +131,9 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
"label": __("Cost Center"),
|
"label": __("Cost Center"),
|
||||||
"fieldtype": "MultiSelectList",
|
"fieldtype": "MultiSelectList",
|
||||||
get_data: function(txt) {
|
get_data: function(txt) {
|
||||||
return frappe.db.get_link_options('Cost Center', txt);
|
return frappe.db.get_link_options('Cost Center', txt, {
|
||||||
|
company: frappe.query_report.get_filter_value("company")
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -143,7 +141,9 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
"label": __("Project"),
|
"label": __("Project"),
|
||||||
"fieldtype": "MultiSelectList",
|
"fieldtype": "MultiSelectList",
|
||||||
get_data: function(txt) {
|
get_data: function(txt) {
|
||||||
return frappe.db.get_link_options('Project', txt);
|
return frappe.db.get_link_options('Project', txt, {
|
||||||
|
company: frappe.query_report.get_filter_value("company")
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -49,8 +49,12 @@ def validate_filters(filters, account_details):
|
|||||||
if not filters.get("from_date") and not filters.get("to_date"):
|
if not filters.get("from_date") and not filters.get("to_date"):
|
||||||
frappe.throw(_("{0} and {1} are mandatory").format(frappe.bold(_("From Date")), frappe.bold(_("To Date"))))
|
frappe.throw(_("{0} and {1} are mandatory").format(frappe.bold(_("From Date")), frappe.bold(_("To Date"))))
|
||||||
|
|
||||||
if filters.get("account") and not account_details.get(filters.account):
|
for account in filters.account:
|
||||||
frappe.throw(_("Account {0} does not exists").format(filters.account))
|
if not account_details.get(account):
|
||||||
|
frappe.throw(_("Account {0} does not exists").format(account))
|
||||||
|
|
||||||
|
if filters.get('account'):
|
||||||
|
filters.account = frappe.parse_json(filters.get('account'))
|
||||||
|
|
||||||
if (filters.get("account") and filters.get("group_by") == _('Group by Account')
|
if (filters.get("account") and filters.get("group_by") == _('Group by Account')
|
||||||
and account_details[filters.account].is_group == 0):
|
and account_details[filters.account].is_group == 0):
|
||||||
@ -87,7 +91,19 @@ def set_account_currency(filters):
|
|||||||
account_currency = None
|
account_currency = None
|
||||||
|
|
||||||
if filters.get("account"):
|
if filters.get("account"):
|
||||||
account_currency = get_account_currency(filters.account)
|
if len(filters.get("account")) == 1:
|
||||||
|
account_currency = get_account_currency(filters.account[0])
|
||||||
|
else:
|
||||||
|
currency = get_account_currency(filters.account[0])
|
||||||
|
is_same_account_currency = True
|
||||||
|
for account in filters.get("account"):
|
||||||
|
if get_account_currency(account) != currency:
|
||||||
|
is_same_account_currency = False
|
||||||
|
break
|
||||||
|
|
||||||
|
if is_same_account_currency:
|
||||||
|
account_currency = currency
|
||||||
|
|
||||||
elif filters.get("party"):
|
elif filters.get("party"):
|
||||||
gle_currency = frappe.db.get_value(
|
gle_currency = frappe.db.get_value(
|
||||||
"GL Entry", {
|
"GL Entry", {
|
||||||
@ -205,10 +221,10 @@ def get_gl_entries(filters, accounting_dimensions):
|
|||||||
|
|
||||||
def get_conditions(filters):
|
def get_conditions(filters):
|
||||||
conditions = []
|
conditions = []
|
||||||
|
|
||||||
if filters.get("account") and not filters.get("include_dimensions"):
|
if filters.get("account") and not filters.get("include_dimensions"):
|
||||||
lft, rgt = frappe.db.get_value("Account", filters["account"], ["lft", "rgt"])
|
filters.account = get_accounts_with_children(filters.account)
|
||||||
conditions.append("""account in (select name from tabAccount
|
conditions.append("account in %(account)s")
|
||||||
where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt))
|
|
||||||
|
|
||||||
if filters.get("cost_center"):
|
if filters.get("cost_center"):
|
||||||
filters.cost_center = get_cost_centers_with_children(filters.cost_center)
|
filters.cost_center = get_cost_centers_with_children(filters.cost_center)
|
||||||
@ -266,6 +282,20 @@ def get_conditions(filters):
|
|||||||
|
|
||||||
return "and {}".format(" and ".join(conditions)) if conditions else ""
|
return "and {}".format(" and ".join(conditions)) if conditions else ""
|
||||||
|
|
||||||
|
def get_accounts_with_children(accounts):
|
||||||
|
if not isinstance(accounts, list):
|
||||||
|
accounts = [d.strip() for d in accounts.strip().split(',') if d]
|
||||||
|
|
||||||
|
all_accounts = []
|
||||||
|
for d in accounts:
|
||||||
|
if frappe.db.exists("Account", d):
|
||||||
|
lft, rgt = frappe.db.get_value("Account", d, ["lft", "rgt"])
|
||||||
|
children = frappe.get_all("Account", filters={"lft": [">=", lft], "rgt": ["<=", rgt]})
|
||||||
|
all_accounts += [c.name for c in children]
|
||||||
|
else:
|
||||||
|
frappe.throw(_("Account: {0} does not exist").format(d))
|
||||||
|
|
||||||
|
return list(set(all_accounts))
|
||||||
|
|
||||||
def get_data_with_opening_closing(filters, account_details, accounting_dimensions, gl_entries):
|
def get_data_with_opening_closing(filters, account_details, accounting_dimensions, gl_entries):
|
||||||
data = []
|
data = []
|
||||||
|
@ -806,6 +806,9 @@
|
|||||||
display: none;
|
display: none;
|
||||||
float: right;
|
float: right;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .cash-shortcuts {
|
> .cash-shortcuts {
|
||||||
@ -829,6 +832,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
> .loyalty-card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ from erpnext.accounts.doctype.pos_profile.pos_profile import get_item_groups
|
|||||||
from erpnext.accounts.doctype.pos_invoice.pos_invoice import get_stock_availability
|
from erpnext.accounts.doctype.pos_invoice.pos_invoice import get_stock_availability
|
||||||
|
|
||||||
def search_by_term(search_term, warehouse, price_list):
|
def search_by_term(search_term, warehouse, price_list):
|
||||||
result = search_for_serial_or_batch_or_barcode_number(search_term)
|
result = search_for_serial_or_batch_or_barcode_number(search_term) or {}
|
||||||
|
|
||||||
item_code = result.get("item_code") or search_term
|
item_code = result.get("item_code") or search_term
|
||||||
serial_no = result.get("serial_no") or ""
|
serial_no = result.get("serial_no") or ""
|
||||||
@ -25,7 +25,7 @@ def search_by_term(search_term, warehouse, price_list):
|
|||||||
price_list_rate, currency = frappe.db.get_value('Item Price', {
|
price_list_rate, currency = frappe.db.get_value('Item Price', {
|
||||||
'price_list': price_list,
|
'price_list': price_list,
|
||||||
'item_code': item_code
|
'item_code': item_code
|
||||||
}, ["price_list_rate", "currency"])
|
}, ["price_list_rate", "currency"]) or [None, None]
|
||||||
|
|
||||||
item_info.update({
|
item_info.update({
|
||||||
'serial_no': serial_no,
|
'serial_no': serial_no,
|
||||||
@ -46,7 +46,7 @@ def get_items(start, page_length, price_list, item_group, pos_profile, search_te
|
|||||||
result = []
|
result = []
|
||||||
|
|
||||||
if search_term:
|
if search_term:
|
||||||
result = search_by_term(search_term, warehouse, price_list)
|
result = search_by_term(search_term, warehouse, price_list) or []
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ erpnext.PointOfSale.Payment = class {
|
|||||||
const amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : '';
|
const amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : '';
|
||||||
this.$payment_modes.append(
|
this.$payment_modes.append(
|
||||||
`<div class="payment-mode-wrapper">
|
`<div class="payment-mode-wrapper">
|
||||||
<div class="mode-of-payment" data-mode="loyalty-amount" data-payment-type="loyalty-amount">
|
<div class="mode-of-payment loyalty-card" data-mode="loyalty-amount" data-payment-type="loyalty-amount">
|
||||||
Redeem Loyalty Points
|
Redeem Loyalty Points
|
||||||
<div class="loyalty-amount-amount pay-amount">${amount}</div>
|
<div class="loyalty-amount-amount pay-amount">${amount}</div>
|
||||||
<div class="loyalty-amount-name">${loyalty_program}</div>
|
<div class="loyalty-amount-name">${loyalty_program}</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user