Exchange rate revaluation (#13932)
* Added account data on child table
* Added Journal Entry button and functionality
* Add docs
* Refactoring and cleanup of Exchange Rate Revaluation
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
index 9302a24..dd44450 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
@@ -3,6 +3,97 @@
frappe.ui.form.on('Exchange Rate Revaluation', {
refresh: function(frm) {
+ if(frm.doc.docstatus==1) {
+ frm.add_custom_button(__('Make Journal Entry'), function() {
+ return frm.events.make_jv(frm);
+ });
+ }
+ },
+ get_entries: function(frm) {
+ frappe.call({
+ method: "get_accounts_data",
+ doc: cur_frm.doc,
+ callback: function(r){
+ frappe.model.clear_table(frm.doc, "accounts");
+ if(r.message) {
+ r.message.forEach((d) => {
+ cur_frm.add_child("accounts",d);
+ });
+ frm.events.get_total_gain_loss(frm);
+ refresh_field("accounts");
+ }
+ }
+ });
+ },
+
+ get_total_gain_loss: function(frm) {
+ if(!(frm.doc.accounts && frm.doc.accounts.length)) return;
+
+ let total_gain_loss = 0;
+ frm.doc.accounts.forEach((d) => {
+ d.gain_loss = flt(d.new_balance_in_base_currency, precision("new_balance_in_base_currency", d)) - flt(d.balance_in_base_currency, precision("balance_in_base_currency", d));
+ total_gain_loss += flt(d.gain_loss, precision("gain_loss", d));
+ });
+
+ frm.set_value("total_gain_loss", flt(total_gain_loss, precision("total_gain_loss")));
+ frm.refresh_fields();
+ },
+
+ make_jv : function(frm) {
+ frappe.call({
+ method: "make_jv_entry",
+ doc: frm.doc,
+ callback: function(r){
+ if (r.message)
+ var doc = frappe.model.sync(r.message)[0];
+ frappe.set_route("Form", doc.doctype, doc.name);
+ }
+ });
}
});
+
+frappe.ui.form.on("Exchange Rate Revaluation Account", {
+ new_exchange_rate: function(frm, cdt, cdn) {
+ var row = frappe.get_doc(cdt, cdn);
+ row.new_balance_in_base_currency = flt(row.new_exchange_rate * flt(row.balance_in_account_currency),
+ precision("new_balance_in_base_currency", row));
+ row.gain_loss = row.new_balance_in_base_currency - flt(row.balance_in_base_currency);
+ refresh_field("accounts");
+ frm.events.get_total_gain_loss(frm);
+ },
+
+ account: function(frm, cdt, cdn) {
+ get_account_details(frm, cdt, cdn);
+ },
+
+ party: function(frm, cdt, cdn) {
+ get_account_details(frm, cdt, cdn);
+ },
+
+ accounts_remove: function(frm) {
+ frm.events.get_total_gain_loss(frm);
+ }
+});
+
+var get_account_details = function(frm, cdt, cdn) {
+ var row = frappe.get_doc(cdt, cdn);
+ if(!frm.doc.company || !frm.doc.posting_date) {
+ frappe.throw(__("Please select Company and Posting Date to getting entries"));
+ }
+ frappe.call({
+ method: "erpnext.accounts.doctype.exchange_rate_revaluation.exchange_rate_revaluation.get_account_details",
+ args:{
+ account: row.account,
+ company: frm.doc.company,
+ posting_date: frm.doc.posting_date,
+ party_type: row.party_type,
+ party: row.party
+ },
+ callback: function(r){
+ $.extend(row, r.message);
+ refresh_field("accounts");
+ frm.events.get_total_gain_loss(frm);
+ }
+ });
+};
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.json b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.json
index 3d30292..b37c67e 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.json
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.json
@@ -19,6 +19,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "default": "Today",
"fieldname": "posting_date",
"fieldtype": "Date",
"hidden": 0,
@@ -173,7 +174,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "exchange_rate_revaluation_account",
+ "fieldname": "accounts",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -184,7 +185,7 @@
"in_standard_filter": 0,
"label": "Exchange Rate Revaluation Account",
"length": 0,
- "no_copy": 0,
+ "no_copy": 1,
"options": "Exchange Rate Revaluation Account",
"permlevel": 0,
"precision": "",
@@ -302,7 +303,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-04-13 19:19:01.029331",
+ "modified": "2018-05-05 17:50:56.352167",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Exchange Rate Revaluation",
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py
index 46abddc..aa19a9e 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py
@@ -3,8 +3,168 @@
# For license information, please see license.txt
from __future__ import unicode_literals
-import frappe
+import frappe, erpnext
+from frappe import _
+from frappe.utils import flt
from frappe.model.document import Document
+from frappe.model.meta import get_field_precision
+from erpnext.setup.utils import get_exchange_rate
+from erpnext.accounts.doctype.journal_entry.journal_entry import get_balance_on
class ExchangeRateRevaluation(Document):
- pass
+ def validate(self):
+ self.set_total_gain_loss()
+
+ def set_total_gain_loss(self):
+ total_gain_loss = 0
+ for d in self.accounts:
+ d.gain_loss = flt(d.new_balance_in_base_currency, d.precision("new_balance_in_base_currency")) \
+ - flt(d.balance_in_base_currency, d.precision("balance_in_base_currency"))
+ total_gain_loss += flt(d.gain_loss, d.precision("gain_loss"))
+ self.total_gain_loss = flt(total_gain_loss, self.precision("total_gain_loss"))
+
+ def validate_mandatory(self):
+ if not (self.company and self.posting_date):
+ frappe.throw(_("Please select Company and Posting Date to getting entries"))
+
+ def get_accounts_data(self, account=None):
+ accounts = []
+ self.validate_mandatory()
+ company_currency = erpnext.get_company_currency(self.company)
+ precision = get_field_precision(frappe.get_meta("Exchange Rate Revaluation Account")
+ .get_field("new_balance_in_base_currency"), company_currency)
+ for d in self.get_accounts_from_gle():
+
+ current_exchange_rate = d.balance / d.balance_in_account_currency \
+ if d.balance_in_account_currency else 0
+ new_exchange_rate = get_exchange_rate(d.account_currency, company_currency, self.posting_date)
+ new_balance_in_base_currency = flt(d.balance_in_account_currency * new_exchange_rate)
+ gain_loss = flt(new_balance_in_base_currency, precision) - flt(d.balance, precision)
+ if gain_loss:
+ accounts.append({
+ "account": d.account,
+ "party_type": d.party_type,
+ "party": d.party,
+ "account_currency": d.account_currency,
+ "balance_in_base_currency": d.balance,
+ "balance_in_account_currency": d.balance_in_account_currency,
+ "current_exchange_rate": current_exchange_rate,
+ "new_exchange_rate": new_exchange_rate,
+ "new_balance_in_base_currency": new_balance_in_base_currency
+ })
+ return accounts
+
+ def get_accounts_from_gle(self):
+ company_currency = erpnext.get_company_currency(self.company)
+ accounts = frappe.db.sql_list("""
+ select name
+ from tabAccount
+ where is_group = 0
+ and report_type = 'Balance Sheet'
+ and root_type in ('Asset', 'Liability', 'Equity')
+ and account_type != 'Stock'
+ and company=%s
+ and account_currency != %s
+ order by name""",(self.company, company_currency))
+
+ account_details = frappe.db.sql("""
+ select
+ account, party_type, party, account_currency,
+ sum(debit_in_account_currency) - sum(credit_in_account_currency) as balance_in_account_currency,
+ sum(debit) - sum(credit) as balance
+ from `tabGL Entry`
+ where account in (%s)
+ group by account, party_type, party
+ having sum(debit) != sum(credit)
+ order by account
+ """ % ', '.join(['%s']*len(accounts)), tuple(accounts), as_dict=1)
+
+ return account_details
+
+ def make_jv_entry(self):
+ if self.total_gain_loss == 0:
+ return
+
+ unrealized_exchange_gain_loss_account = frappe.db.get_value("Company", self.company,
+ "unrealized_exchange_gain_loss_account")
+ if not unrealized_exchange_gain_loss_account:
+ frappe.throw(_("Please set Unrealized Exchange Gain/Loss Account in Company {0}")
+ .format(self.company))
+
+ journal_entry = frappe.new_doc('Journal Entry')
+ journal_entry.voucher_type = 'Exchange Rate Revaluation'
+ journal_entry.company = self.company
+ journal_entry.posting_date = self.posting_date
+ journal_entry.multi_currency = 1
+
+ journal_entry_accounts = []
+ for d in self.accounts:
+ dr_or_cr = "debit_in_account_currency" \
+ if d.get("balance_in_account_currency") > 0 else "credit_in_account_currency"
+
+ reverse_dr_or_cr = "debit_in_account_currency" \
+ if dr_or_cr=="credit_in_account_currency" else "credit_in_account_currency"
+
+ journal_entry_accounts.append({
+ "account": d.get("account"),
+ "party_type": d.get("party_type"),
+ "party": d.get("party"),
+ "account_currency": d.get("account_currency"),
+ "balance": d.get("balance_in_account_currency"),
+ dr_or_cr: abs(d.get("balance_in_account_currency")),
+ "exchange_rate":d.get("new_exchange_rate"),
+ "reference_type": "Exchange Rate Revaluation",
+ "reference_name": self.name,
+ })
+ journal_entry_accounts.append({
+ "account": d.get("account"),
+ "party_type": d.get("party_type"),
+ "party": d.get("party"),
+ "account_currency": d.get("account_currency"),
+ "balance": d.get("balance_in_account_currency"),
+ reverse_dr_or_cr: abs(d.get("balance_in_account_currency")),
+ "exchange_rate": d.get("current_exchange_rate"),
+ "reference_type": "Exchange Rate Revaluation",
+ "reference_name": self.name
+ })
+
+ journal_entry_accounts.append({
+ "account": unrealized_exchange_gain_loss_account,
+ "balance": get_balance_on(unrealized_exchange_gain_loss_account),
+ "debit_in_account_currency": abs(self.total_gain_loss) if self.total_gain_loss < 0 else 0,
+ "credit_in_account_currency": self.total_gain_loss if self.total_gain_loss > 0 else 0,
+ "exchange_rate": 1,
+ "reference_type": "Exchange Rate Revaluation",
+ "reference_name": self.name,
+ })
+
+ journal_entry.set("accounts", journal_entry_accounts)
+ journal_entry.set_amounts_in_company_currency()
+ journal_entry.set_total_debit_credit()
+ return journal_entry.as_dict()
+
+@frappe.whitelist()
+def get_account_details(account, company, posting_date, party_type=None, party=None):
+ account_currency, account_type = frappe.db.get_value("Account", account,
+ ["account_currency", "account_type"])
+ if account_type in ["Receivable", "Payable"] and not (party_type and party):
+ frappe.throw(_("Party Type and Party is mandatory for {0} account").format(account_type))
+
+ account_details = {}
+ company_currency = erpnext.get_company_currency(company)
+ balance = get_balance_on(account, party_type=party_type, party=party, in_account_currency=False)
+ if balance:
+ balance_in_account_currency = get_balance_on(account, party_type=party_type, party=party)
+ current_exchange_rate = balance / balance_in_account_currency if balance_in_account_currency else 0
+ new_exchange_rate = get_exchange_rate(account_currency, company_currency, posting_date)
+ new_balance_in_base_currency = balance_in_account_currency * new_exchange_rate
+ account_details = {
+ "account_currency": account_currency,
+ "balance_in_base_currency": balance,
+ "balance_in_account_currency": balance_in_account_currency,
+ "current_exchange_rate": current_exchange_rate,
+ "new_exchange_rate": new_exchange_rate,
+ "new_balance_in_base_currency": new_balance_in_base_currency
+ }
+
+ return account_details
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation_account/exchange_rate_revaluation_account.json b/erpnext/accounts/doctype/exchange_rate_revaluation_account/exchange_rate_revaluation_account.json
index 66561a0..e834266 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation_account/exchange_rate_revaluation_account.json
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation_account/exchange_rate_revaluation_account.json
@@ -50,16 +50,142 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "balance_in_base_currency",
+ "fieldname": "party_type",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Party Type",
+ "length": 0,
+ "no_copy": 0,
+ "options": "DocType",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "party",
+ "fieldtype": "Dynamic Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Party",
+ "length": 0,
+ "no_copy": 0,
+ "options": "party_type",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_2",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "account_currency",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Account Currency",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "balance_in_account_currency",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
- "in_list_view": 1,
+ "in_list_view": 0,
"in_standard_filter": 0,
- "label": "Balance In Base Currency",
+ "label": "Balance In Account Currency",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -81,8 +207,8 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "balance_in_alternate_currency",
- "fieldtype": "Currency",
+ "fieldname": "balances",
+ "fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -90,14 +216,14 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Balance In Alternate Currency",
+ "label": "",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
@@ -143,6 +269,67 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "balance_in_base_currency",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Balance In Base Currency",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_9",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "new_exchange_rate",
"fieldtype": "Float",
"hidden": 0,
@@ -205,7 +392,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "difference",
+ "fieldname": "gain_loss",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -214,7 +401,7 @@
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
- "label": "Difference",
+ "label": "Gain/Loss",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -241,7 +428,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2018-04-13 18:30:57.531401",
+ "modified": "2018-05-05 17:03:03.512559",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Exchange Rate Revaluation Account",
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json
index 886b5f1..916c71f 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.json
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json
@@ -96,7 +96,7 @@
"no_copy": 0,
"oldfieldname": "voucher_type",
"oldfieldtype": "Select",
- "options": "Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry",
+ "options": "Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
@@ -1553,7 +1553,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2018-05-02 11:12:55.090374",
+ "modified": "2018-05-05 13:11:33.696498",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 91eea22..f9ffbcd 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -151,7 +151,7 @@
if (d.party_type == 'Customer' and flt(d.credit) > 0) or \
(d.party_type == 'Supplier' and flt(d.debit) > 0):
if d.is_advance=="No":
- msgprint(_("Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.").format(d.idx, d.account))
+ msgprint(_("Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.").format(d.idx, d.account), alert=True)
elif d.reference_type in ("Sales Order", "Purchase Order") and d.is_advance != "Yes":
frappe.throw(_("Row {0}: Payment against Sales/Purchase Order should always be marked as advance").format(d.idx))
diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
index 98a2a29..eddcd5e 100644
--- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
+++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
@@ -44,6 +44,7 @@
"reqd": 1,
"search_index": 1,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0,
"width": "250px"
},
@@ -75,6 +76,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -107,6 +109,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -142,6 +145,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0,
"width": "180px"
},
@@ -171,6 +175,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -201,6 +206,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -231,6 +237,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -262,6 +269,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -294,6 +302,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -325,6 +334,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -354,6 +364,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -384,6 +395,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -413,6 +425,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -444,6 +457,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -477,6 +491,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -505,6 +520,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -536,6 +552,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -569,6 +586,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -598,6 +616,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -618,7 +637,7 @@
"label": "Reference Type",
"length": 0,
"no_copy": 0,
- "options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance",
+ "options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -629,6 +648,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -660,8 +680,42 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
- },
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "depends_on": "eval:doc.reference_type&&!in_list(doc.reference_type, ['Expense Claim', 'Asset', 'Employee Loan', 'Employee Advance'])",
+ "fieldname": "reference_due_date",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Reference Due Date",
+ "length": 0,
+ "no_copy": 0,
+ "options": "",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
@@ -691,6 +745,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -719,6 +774,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -751,6 +807,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -782,6 +839,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
}
],
@@ -795,7 +853,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2017-12-07 19:54:19.851534",
+ "modified": "2018-05-05 17:50:25.961397",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",
diff --git a/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation-submit.png b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation-submit.png
new file mode 100644
index 0000000..98f629f
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation-submit.png
Binary files differ
diff --git a/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation.png b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation.png
new file mode 100644
index 0000000..fbd584b
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation.png
Binary files differ
diff --git a/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/field_set_company.png b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/field_set_company.png
new file mode 100644
index 0000000..94484f6
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/field_set_company.png
Binary files differ
diff --git a/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/journal-entry.png b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/journal-entry.png
new file mode 100644
index 0000000..cf204bb
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/exchange-rate-revaluation/journal-entry.png
Binary files differ
diff --git a/erpnext/docs/user/manual/en/accounts/exchange-rate-revaluation.md b/erpnext/docs/user/manual/en/accounts/exchange-rate-revaluation.md
new file mode 100644
index 0000000..d4887d0
--- /dev/null
+++ b/erpnext/docs/user/manual/en/accounts/exchange-rate-revaluation.md
@@ -0,0 +1,35 @@
+# Exchange Rate Revaluation
+
+In ERPNext, you can make accounting entries in multiple currency. For example, if you have a bank account in foreign currency, you can make transactions in that currency and system will show bank balance in that specific currency only.
+
+## Setup
+
+To get started with multi-currency accounting, you need to assign accounting currency in Account record. You can define Currency from Chart of Accounts while creating Account.
+
+<img class="screenshot" alt="Set Currency from Chart of Accounts" src="{{docs_base_url}}/assets/img/accounts/multi-currency/chart-of-accounts.png">
+
+You can also assign / modify the currency by opening specific Account record for existing Accounts.
+
+<img class="screenshot" alt="Modify Account Currency" src="{{docs_base_url}}/assets/img/accounts/multi-currency/account.png">
+
+### Exchange Rate Revaluation
+
+Exchange Rate Revaluation feature is for dealing the situation when you have a multiple currency accounts in one company's chart of accounts
+
+Steps :
+
+1. Set the 'Unrealized Exchange / Gain Loss Account' field in Company DocType. This aacount is to balance the difference of total credit and total debit.
+
+<img class="screenshot" alt="Field Set for Comapny" src="{{docs_base_url}}/assets/img/accounts/exchange-rate-revaluation/field_set_company.png">
+
+2. Select the Company.
+
+3. Click the Get Entries button. It shows the accounts which having different currency as compare to 'Default Currency' in Company DocType. It will fetch the new exchange rate automatically if not set in Currency Exchange DocType for that currency else it will fetch the 'Exchange Rate' from Currency Exchange DocType
+
+<img class="screenshot" alt="Exchange Rate Revaluation" src="{{docs_base_url}}/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation.png">
+
+4. On Submitting, 'Make Journal Entry' button will appear. This will create a journal entry for the Exchange Rate Revaluation.
+
+<img class="screenshot" alt="Exchange Rate Revaluation Submitting" src="{{docs_base_url}}/assets/img/accounts/exchange-rate-revaluation/exchange-rate-revaluation-submit.png">
+
+<img class="screenshot" alt="Journal Entry" src="{{docs_base_url}}/assets/img/accounts/exchange-rate-revaluation/journal-entry.png">
\ No newline at end of file
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 7c060d8..e164d69 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -197,6 +197,7 @@
["round_off_account", {"root_type": "Expense"}],
["write_off_account", {"root_type": "Expense"}],
["exchange_gain_loss_account", {"root_type": "Expense"}],
+ ["unrealized_exchange_gain_loss_account", {"root_type": "Expense"}],
["accumulated_depreciation_account",
{"root_type": "Asset", "account_type": "Accumulated Depreciation"}],
["depreciation_expense_account", {"root_type": "Expense", "account_type": "Depreciation"}],
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index 1a21887..66b1433 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -42,6 +42,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -73,6 +74,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -105,6 +107,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -135,6 +138,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -165,6 +169,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -193,6 +198,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -223,6 +229,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -254,6 +261,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -284,6 +292,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -314,6 +323,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -345,6 +355,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -374,6 +385,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -405,6 +417,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -434,6 +447,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -465,6 +479,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -496,6 +511,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -526,6 +542,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -556,6 +573,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -585,6 +603,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -615,6 +634,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -646,6 +666,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -678,6 +699,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -710,6 +732,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -740,6 +763,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -770,6 +794,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -800,6 +825,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -833,6 +859,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -864,6 +891,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -897,6 +925,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -928,6 +957,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -959,6 +989,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -990,6 +1021,39 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "unrealized_exchange_gain_loss_account",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Unrealized Exchange Gain/Loss Account",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Account",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1019,6 +1083,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -1053,6 +1118,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1084,6 +1150,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1115,6 +1182,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1146,6 +1214,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1178,6 +1247,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1209,6 +1279,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1238,6 +1309,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1269,6 +1341,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1298,6 +1371,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1331,6 +1405,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1363,6 +1438,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1393,6 +1469,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1424,6 +1501,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1455,6 +1533,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1485,6 +1564,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1514,6 +1594,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1544,6 +1625,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1574,6 +1656,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1604,6 +1687,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1635,6 +1719,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1666,6 +1751,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1696,6 +1782,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1725,6 +1812,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1756,6 +1844,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1787,6 +1876,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1817,6 +1907,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1847,6 +1938,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1876,6 +1968,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1905,6 +1998,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -1937,6 +2031,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -1969,6 +2064,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2001,6 +2097,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2033,6 +2130,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2064,6 +2162,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2095,6 +2194,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -2128,6 +2228,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2158,6 +2259,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2188,6 +2290,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2218,6 +2321,7 @@
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2248,6 +2352,7 @@
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -2278,6 +2383,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
}
],
@@ -2294,7 +2400,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2018-04-18 19:45:22.357643",
+ "modified": "2018-05-05 13:08:07.351655",
"modified_by": "Administrator",
"module": "Setup",
"name": "Company",
@@ -2302,7 +2408,6 @@
"permissions": [
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -2322,7 +2427,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -2342,7 +2446,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -2362,7 +2465,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -2382,7 +2484,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -2402,7 +2503,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -2422,7 +2522,6 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,