Merge branch 'develop' into feature_10861
This commit is contained in:
commit
57952f6946
@ -52,6 +52,7 @@
|
||||
"frappe": true,
|
||||
"erpnext": true,
|
||||
"schools": true,
|
||||
"education": true,
|
||||
|
||||
"$": true,
|
||||
"jQuery": true,
|
||||
|
@ -29,7 +29,7 @@ install:
|
||||
- cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/
|
||||
|
||||
before_script:
|
||||
- wget http://chromedriver.storage.googleapis.com/2.27/chromedriver_linux64.zip
|
||||
- wget http://chromedriver.storage.googleapis.com/2.32/chromedriver_linux64.zip
|
||||
- unzip chromedriver_linux64.zip
|
||||
- sudo apt-get install libnss3
|
||||
- sudo apt-get --only-upgrade install google-chrome-stable
|
||||
@ -64,4 +64,10 @@ jobs:
|
||||
- bench execute erpnext.setup.utils.enable_all_roles_and_domains
|
||||
- bench run-ui-tests --app erpnext
|
||||
env: Client Side Test
|
||||
- # stage
|
||||
script:
|
||||
- wget http://build.erpnext.com/20171108_190013_955977f8_database.sql.gz
|
||||
- bench --force restore ~/frappe-bench/20171108_190013_955977f8_database.sql.gz --mariadb-root-password travis
|
||||
- bench migrate
|
||||
env: Patch Testing
|
||||
|
||||
|
@ -4,7 +4,7 @@ import inspect
|
||||
import frappe
|
||||
from erpnext.hooks import regional_overrides
|
||||
|
||||
__version__ = '9.2.13'
|
||||
__version__ = '9.2.16'
|
||||
|
||||
def get_default_company(user=None):
|
||||
'''Get default company for user'''
|
||||
|
@ -47,6 +47,12 @@ frappe.ui.form.on('Account', {
|
||||
// show / hide convert buttons
|
||||
frm.trigger('add_toolbar_buttons');
|
||||
}
|
||||
|
||||
if(!frm.doc.__islocal) {
|
||||
frm.add_custom_button(__('Update Account Number'), function () {
|
||||
frm.trigger("update_account_number");
|
||||
});
|
||||
}
|
||||
},
|
||||
account_type: function (frm) {
|
||||
if (frm.doc.is_group == 0) {
|
||||
@ -90,6 +96,46 @@ frappe.ui.form.on('Account', {
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
update_account_number: function(frm) {
|
||||
var d = new frappe.ui.Dialog({
|
||||
title: __('Update Account Number'),
|
||||
fields: [
|
||||
{
|
||||
"label": "Account Number",
|
||||
"fieldname": "account_number",
|
||||
"fieldtype": "Data",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
primary_action: function() {
|
||||
var data = d.get_values();
|
||||
if(data.account_number === frm.doc.account_number) {
|
||||
d.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
frappe.call({
|
||||
method: "erpnext.accounts.doctype.account.account.update_account_number",
|
||||
args: {
|
||||
account_number: data.account_number,
|
||||
name: frm.doc.name
|
||||
},
|
||||
callback: function(r) {
|
||||
if(!r.exc) {
|
||||
if(r.message) {
|
||||
frappe.set_route("Form", "Account", r.message);
|
||||
} else {
|
||||
frm.set_value("account_number", data.account_number);
|
||||
}
|
||||
d.hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
primary_action_label: __('Update')
|
||||
});
|
||||
d.show();
|
||||
}
|
||||
});
|
@ -102,6 +102,36 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "account_number",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Account Number",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -545,7 +575,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-08-11 15:28:35.855809",
|
||||
"modified": "2017-08-22 17:39:10.711343",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Account",
|
||||
@ -655,7 +685,7 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"search_fields": "",
|
||||
"search_fields": "account_number",
|
||||
"show_name_in_global_search": 1,
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1,
|
||||
|
@ -3,14 +3,14 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.utils import cint, fmt_money
|
||||
from frappe.utils import cint, cstr
|
||||
from frappe import throw, _
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils.nestedset import NestedSet
|
||||
|
||||
class RootNotEditable(frappe.ValidationError): pass
|
||||
class BalanceMismatchError(frappe.ValidationError): pass
|
||||
|
||||
class Account(Document):
|
||||
class Account(NestedSet):
|
||||
nsm_parent_field = 'parent_account'
|
||||
|
||||
def onload(self):
|
||||
@ -20,18 +20,14 @@ class Account(Document):
|
||||
self.set_onload("can_freeze_account", True)
|
||||
|
||||
def autoname(self):
|
||||
# first validate if company exists
|
||||
company = frappe.db.get_value("Company", self.company, ["abbr", "name"], as_dict=True)
|
||||
if not company:
|
||||
frappe.throw(_('Company {0} does not exist').format(self.company))
|
||||
|
||||
self.name = self.account_name.strip() + ' - ' + company.abbr
|
||||
self.name = get_account_autoname(self.account_number, self.account_name, self.company)
|
||||
|
||||
def validate(self):
|
||||
if frappe.local.flags.allow_unverified_charts:
|
||||
return
|
||||
self.validate_parent()
|
||||
self.validate_root_details()
|
||||
validate_account_number(self.name, self.account_number, self.company)
|
||||
self.validate_group_or_ledger()
|
||||
self.set_root_and_report_type()
|
||||
self.validate_mandatory()
|
||||
@ -56,12 +52,15 @@ class Account(Document):
|
||||
|
||||
def set_root_and_report_type(self):
|
||||
if self.parent_account:
|
||||
par = frappe.db.get_value("Account", self.parent_account, ["report_type", "root_type"], as_dict=1)
|
||||
par = frappe.db.get_value("Account", self.parent_account,
|
||||
["report_type", "root_type", "account_type"], as_dict=1)
|
||||
|
||||
if par.report_type:
|
||||
self.report_type = par.report_type
|
||||
if par.root_type:
|
||||
self.root_type = par.root_type
|
||||
if par.account_type and not self.account_type:
|
||||
self.account_type = par.account_type
|
||||
|
||||
if self.is_group:
|
||||
db_value = frappe.db.get_value("Account", self.name, ["report_type", "root_type"], as_dict=1)
|
||||
@ -161,31 +160,18 @@ class Account(Document):
|
||||
if not self.report_type:
|
||||
throw(_("Report Type is mandatory"))
|
||||
|
||||
|
||||
def update_nsm_model(self):
|
||||
"""update lft, rgt indices for nested set model"""
|
||||
import frappe
|
||||
import frappe.utils.nestedset
|
||||
frappe.utils.nestedset.update_nsm(self)
|
||||
|
||||
def on_update(self):
|
||||
self.update_nsm_model()
|
||||
|
||||
def validate_trash(self):
|
||||
"""checks gl entries and if child exists"""
|
||||
def on_trash(self):
|
||||
# checks gl entries and if child exists
|
||||
if self.check_gle_exists():
|
||||
throw(_("Account with existing transaction can not be deleted"))
|
||||
if self.check_if_child_exists():
|
||||
throw(_("Child account exists for this account. You can not delete this account."))
|
||||
|
||||
def on_trash(self):
|
||||
self.validate_trash()
|
||||
self.update_nsm_model()
|
||||
super(Account, self).on_trash()
|
||||
|
||||
def before_rename(self, old, new, merge=False):
|
||||
# Add company abbr if not provided
|
||||
from erpnext.setup.doctype.company.company import get_name_with_abbr
|
||||
new_account = get_name_with_abbr(new, self.company)
|
||||
new_account = get_name_with_number(new_account, self.account_number)
|
||||
|
||||
# Validate properties before merging
|
||||
if merge:
|
||||
@ -208,7 +194,25 @@ class Account(Document):
|
||||
super(Account, self).after_rename(old, new, merge)
|
||||
|
||||
if not merge:
|
||||
frappe.db.set_value("Account", new, "account_name", " - ".join(new.split(" - ")[:-1]))
|
||||
new_acc = frappe.db.get_value("Account", new, ["account_name", "account_number"], as_dict=1)
|
||||
|
||||
# exclude company abbr
|
||||
new_parts = new.split(" - ")[:-1]
|
||||
# update account number and remove from parts
|
||||
if new_parts[0][0].isdigit():
|
||||
# if account number is separate by space, split using space
|
||||
if len(new_parts) == 1:
|
||||
new_parts = new.split(" ")
|
||||
if new_acc.account_number != new_parts[0]:
|
||||
self.account_number = new_parts[0]
|
||||
self.db_set("account_number", new_parts[0])
|
||||
new_parts = new_parts[1:]
|
||||
|
||||
# update account name
|
||||
account_name = " - ".join(new_parts)
|
||||
if new_acc.account_name != account_name:
|
||||
self.account_name = account_name
|
||||
self.db_set("account_name", account_name)
|
||||
|
||||
def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
|
||||
return frappe.db.sql("""select name from tabAccount
|
||||
@ -229,3 +233,46 @@ def get_account_currency(account):
|
||||
return account_currency
|
||||
|
||||
return frappe.local_cache("account_currency", account, generator)
|
||||
|
||||
def get_account_autoname(account_number, account_name, company):
|
||||
# first validate if company exists
|
||||
company = frappe.db.get_value("Company", company, ["abbr", "name"], as_dict=True)
|
||||
if not company:
|
||||
frappe.throw(_('Company {0} does not exist').format(company))
|
||||
|
||||
parts = [account_name.strip(), company.abbr]
|
||||
if cstr(account_number).strip():
|
||||
parts.insert(0, cstr(account_number).strip())
|
||||
return ' - '.join(parts)
|
||||
|
||||
def validate_account_number(name, account_number, company):
|
||||
if account_number:
|
||||
account_with_same_number = frappe.db.get_value("Account",
|
||||
{"account_number": account_number, "company": company, "name": ["!=", name]})
|
||||
if account_with_same_number:
|
||||
frappe.throw(_("Account Number {0} already used in account {1}")
|
||||
.format(account_number, account_with_same_number))
|
||||
|
||||
@frappe.whitelist()
|
||||
def update_account_number(name, account_number):
|
||||
account = frappe.db.get_value("Account", name, ["account_name", "company"], as_dict=True)
|
||||
|
||||
validate_account_number(name, account_number, account.company)
|
||||
|
||||
frappe.db.set_value("Account", name, "account_number", account_number)
|
||||
|
||||
account_name = account.account_name
|
||||
if account_name[0].isdigit():
|
||||
separator = " - " if " - " in account_name else " "
|
||||
account_name = account_name.split(separator, 1)[1]
|
||||
frappe.db.set_value("Account", name, "account_name", account_name)
|
||||
|
||||
new_name = get_account_autoname(account_number, account_name, account.company)
|
||||
if name != new_name:
|
||||
frappe.rename_doc("Account", name, new_name)
|
||||
return new_name
|
||||
|
||||
def get_name_with_number(new_account, account_number):
|
||||
if account_number and not new_account[0].isdigit():
|
||||
new_account = account_number + " - " + new_account
|
||||
return new_account
|
@ -24,6 +24,8 @@ frappe.treeview_settings["Account"] = {
|
||||
fields: [
|
||||
{fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
|
||||
description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
|
||||
{fieldtype:'Data', fieldname:'account_number', label:__('Account Number'),
|
||||
description: __("Number of new Account, it will be included in the account name as a prefix")},
|
||||
{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
|
||||
description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
|
||||
{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
|
||||
|
@ -16,12 +16,12 @@ def create_charts(company, chart_template=None, existing_company=None):
|
||||
if root_account:
|
||||
root_type = child.get("root_type")
|
||||
|
||||
if account_name not in ["account_type", "root_type", "is_group", "tax_rate"]:
|
||||
if account_name not in ["account_number", "account_type",
|
||||
"root_type", "is_group", "tax_rate"]:
|
||||
|
||||
account_name_in_db = unidecode(account_name.strip().lower())
|
||||
if account_name_in_db in accounts:
|
||||
count = accounts.count(account_name_in_db)
|
||||
account_name = account_name + " " + cstr(count)
|
||||
account_number = cstr(child.get("account_number")).strip()
|
||||
account_name, account_name_in_db = add_suffix_if_duplicate(account_name,
|
||||
account_number, accounts)
|
||||
|
||||
is_group = identify_is_group(child)
|
||||
report_type = "Balance Sheet" if root_type in ["Asset", "Liability", "Equity"] \
|
||||
@ -35,6 +35,7 @@ def create_charts(company, chart_template=None, existing_company=None):
|
||||
"is_group": is_group,
|
||||
"root_type": root_type,
|
||||
"report_type": report_type,
|
||||
"account_number": account_number,
|
||||
"account_type": child.get("account_type"),
|
||||
"account_currency": frappe.db.get_value("Company", company, "default_currency"),
|
||||
"tax_rate": child.get("tax_rate")
|
||||
@ -53,10 +54,23 @@ def create_charts(company, chart_template=None, existing_company=None):
|
||||
|
||||
_import_accounts(chart, None, None, root_account=True)
|
||||
|
||||
def add_suffix_if_duplicate(account_name, account_number, accounts):
|
||||
if account_number:
|
||||
account_name_in_db = unidecode(" - ".join([account_number,
|
||||
account_name.strip().lower()]))
|
||||
else:
|
||||
account_name_in_db = unidecode(account_name.strip().lower())
|
||||
|
||||
if account_name_in_db in accounts:
|
||||
count = accounts.count(account_name_in_db)
|
||||
account_name = account_name + " " + cstr(count)
|
||||
|
||||
return account_name, account_name_in_db
|
||||
|
||||
def identify_is_group(child):
|
||||
if child.get("is_group"):
|
||||
is_group = child.get("is_group")
|
||||
elif len(set(child.keys()) - set(["account_type", "root_type", "is_group", "tax_rate"])):
|
||||
elif len(set(child.keys()) - set(["account_type", "root_type", "is_group", "tax_rate", "account_number"])):
|
||||
is_group = 1
|
||||
else:
|
||||
is_group = 0
|
||||
@ -71,6 +85,10 @@ def get_chart(chart_template, existing_company=None):
|
||||
elif chart_template == "Standard":
|
||||
from erpnext.accounts.doctype.account.chart_of_accounts.verified import standard_chart_of_accounts
|
||||
return standard_chart_of_accounts.get()
|
||||
elif chart_template == "Standard with Numbers":
|
||||
from erpnext.accounts.doctype.account.chart_of_accounts.verified \
|
||||
import standard_chart_of_accounts_with_account_number
|
||||
return standard_chart_of_accounts_with_account_number.get()
|
||||
else:
|
||||
folders = ("verified",)
|
||||
if frappe.local.flags.allow_unverified_charts:
|
||||
@ -86,7 +104,7 @@ def get_chart(chart_template, existing_company=None):
|
||||
return json.loads(chart).get("tree")
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_charts_for_country(country):
|
||||
def get_charts_for_country(country, with_standard=False):
|
||||
charts = []
|
||||
|
||||
def _get_chart_name(content):
|
||||
@ -111,8 +129,8 @@ def get_charts_for_country(country):
|
||||
with open(os.path.join(path, fname), "r") as f:
|
||||
_get_chart_name(f.read())
|
||||
|
||||
if len(charts) != 1:
|
||||
charts.append("Standard")
|
||||
if len(charts) != 1 or with_standard:
|
||||
charts += ["Standard", "Standard with Numbers"]
|
||||
|
||||
return charts
|
||||
|
||||
@ -121,7 +139,7 @@ def get_account_tree_from_existing_company(existing_company):
|
||||
all_accounts = frappe.get_all('Account',
|
||||
filters={'company': existing_company},
|
||||
fields = ["name", "account_name", "parent_account", "account_type",
|
||||
"is_group", "root_type", "tax_rate"],
|
||||
"is_group", "root_type", "tax_rate", "account_number"],
|
||||
order_by="lft, rgt")
|
||||
|
||||
account_tree = {}
|
||||
@ -139,17 +157,16 @@ def build_account_tree(tree, parent, all_accounts):
|
||||
# if no children, but a group account
|
||||
if not children and parent.is_group:
|
||||
tree["is_group"] = 1
|
||||
tree["account_number"] = parent.account_number
|
||||
|
||||
# build a subtree for each child
|
||||
for child in children:
|
||||
if child.account_type == "Stock" and not child.is_group:
|
||||
tree["is_group"] = 1
|
||||
continue
|
||||
|
||||
# start new subtree
|
||||
tree[child.account_name] = {}
|
||||
|
||||
# assign account_type and root_type
|
||||
if child.account_type:
|
||||
tree[child.account_name]["account_number"] = child.account_number
|
||||
if child.account_type:
|
||||
tree[child.account_name]["account_type"] = child.account_type
|
||||
if child.tax_rate:
|
||||
|
@ -1,209 +0,0 @@
|
||||
{
|
||||
"country_code": "ar",
|
||||
"name": "Argentina - Plan de Cuentas",
|
||||
"tree": {
|
||||
"Cuentas Patrimoniales": {
|
||||
"ACTIVO": {
|
||||
"Bienes Inmateriales": {
|
||||
"Bienes Inmateriales / (-) Amortizaci\u00f3n Acumulada": {},
|
||||
"Bienes Inmateriales / Concesiones y Franquicias": {},
|
||||
"Bienes Inmateriales / Marcas de F\u00e1brica": {},
|
||||
"Bienes Inmateriales / Patentes de Invenci\u00f3n": {}
|
||||
},
|
||||
"Bienes de Cambio": {
|
||||
"(-) Previsi\u00f3n para Desvalorizaci\u00f3n de Bienes de Cambio": {},
|
||||
"Bienes de Cambio - Mercader\u00edas": {
|
||||
"Bienes de Cambio - Mercader\u00edas / Categoria de productos 01": {}
|
||||
},
|
||||
"Bienes de Cambio - Mercader\u00edas en Tr\u00e1nsito": {},
|
||||
"Materiales Varios ": {},
|
||||
"Materias primas": {},
|
||||
"Productos Elaborados": {},
|
||||
"Productos en Curso de Elaboraci\u00f3n": {}
|
||||
},
|
||||
"Bienes de Uso": {
|
||||
"Bienes de Uso / (-) Depreciaci\u00f3n Acumulada": {},
|
||||
"Bienes de Uso / Equipos": {},
|
||||
"Bienes de Uso / Inmuebles": {},
|
||||
"Bienes de Uso / Maquinaria": {},
|
||||
"Bienes de Uso / Rodados": {}
|
||||
},
|
||||
"Caja y Bancos": {
|
||||
"Caja y Bancos - Caja": {
|
||||
"Caja y bancos - Caja / efectivo ARS": {}
|
||||
},
|
||||
"Caja y Bancos - Cuentas Corrientes": {
|
||||
"Caja y Bancos.../ BCO. CTA CTE ARS": {}
|
||||
},
|
||||
"Caja y Bancos - Fondos fijos": {
|
||||
"Caja y ...- Fondos fijos / caja chica 01 ARS": {}
|
||||
},
|
||||
"Caja y Bancos - Moneda Extranjera": {
|
||||
"Caja y bancos - Caja / efectivo USD": {}
|
||||
},
|
||||
"Caja y bancos - Recaudaciones a Depositar ": {},
|
||||
"Caja y bancos - Valores a Depositar ": {}
|
||||
},
|
||||
"Inversiones": {
|
||||
"Inversiones / (-) Previsi\u00f3n para Devalorizaci\u00f3n de Acciones": {},
|
||||
"Inversiones / Acciones Permanentes": {},
|
||||
"Inversiones / Acciones Transitorias": {},
|
||||
"Inversiones / T\u00edtulos P\u00fablicos": {}
|
||||
}
|
||||
},
|
||||
"Cr\u00e9ditos por Ventas": {
|
||||
"Cr\u00e9ditos por Ventas / (-) Previsi\u00f3n para Ds. Incobrables": {},
|
||||
"Cr\u00e9ditos por Ventas / Deudores Morosos": {},
|
||||
"Cr\u00e9ditos por Ventas / Deudores Varios": {},
|
||||
"Cr\u00e9ditos por Ventas / Deudores en Gesti\u00f3n Judicial": {},
|
||||
"Cr\u00e9ditos por Ventas / Deudores por Ventas": {}
|
||||
},
|
||||
"Otros Cr\u00e9ditos": {
|
||||
"Otros Cr\u00e9ditos / (-) Intereses (+) a Devengar": {},
|
||||
"Otros Cr\u00e9ditos / (-) Previsi\u00f3n para Descuentos": {},
|
||||
"Otros Cr\u00e9ditos / Accionistas": {},
|
||||
"Otros Cr\u00e9ditos / Alquileres Pagados por Adelantado": {},
|
||||
"Otros Cr\u00e9ditos / Anticipo al Personal": {},
|
||||
"Otros Cr\u00e9ditos / Anticipo de Impuestos": {},
|
||||
"Otros Cr\u00e9ditos / Anticipos a Proveedores": {},
|
||||
"Otros Cr\u00e9ditos / Intereses Pagados por Adelantado": {},
|
||||
"Otros Cr\u00e9ditos / Pr\u00e9stamos otorgados": {}
|
||||
},
|
||||
"PASIVO": {
|
||||
"Deudas Bancarias y Financieras": {
|
||||
"Deudas Bancarias y Financieras / Adelantos en Cuenta Corriente": {},
|
||||
"Deudas Bancarias y Financieras / Debentures Emitidos": {},
|
||||
"Deudas Bancarias y Financieras / Intereses a Pagar": {},
|
||||
"Deudas Bancarias y Financieras / Obligaciones a Pagar": {},
|
||||
"Deudas Bancarias y Financieras / Prestamos": {}
|
||||
},
|
||||
"Deudas Comerciales": {
|
||||
"Deudas Comerciales / (-) Intereses a Devengar por Compras al Cr\u00e9dito": {},
|
||||
"Deudas Comerciales / Anticipos de Clientes": {},
|
||||
"Deudas Comerciales / Proveedores": {}
|
||||
},
|
||||
"Deudas Fiscales": {
|
||||
"Deudas Fiscales / IVA a Pagar": {},
|
||||
"Deudas Fiscales / Impuesto a la Ganancia M\u00ednima Presunta a Pagar": {},
|
||||
"Deudas Fiscales / Impuesto a las Ganancias a Pagar": {},
|
||||
"Deudas Fiscales / Impuesto a los D\u00e9bitos y Cr\u00e9ditos Bancarios a Pagar": {},
|
||||
"Deudas Fiscales / Impuesto sobre los Bienes Personales a Pagar": {},
|
||||
"Deudas Fiscales / Monotributo a Pagar": {}
|
||||
},
|
||||
"Deudas Sociales": {
|
||||
"Deudas Sociales / Cargas Sociales a Pagar": {},
|
||||
"Deudas Sociales / Provisi\u00f3n para Sueldo Anual Complementario": {},
|
||||
"Deudas Sociales / Retenciones a Depositar": {},
|
||||
"Deudas Sociales / Sueldos a Pagar": {}
|
||||
},
|
||||
"Otras Deudas": {
|
||||
"Otras Deudas / Acreedores Varios": {},
|
||||
"Otras Deudas / Cobros por Adelantado": {},
|
||||
"Otras Deudas / Dividendos a Pagar": {},
|
||||
"Otras Deudas / Honorarios Directores y S\u00edndicos a Pagar": {}
|
||||
},
|
||||
"Previsiones": {
|
||||
"Previsiones / Previsi\u00f3n Indemnizaci\u00f3n por Despidos": {},
|
||||
"Previsiones / Previsi\u00f3n para Garant\u00edas por Service": {},
|
||||
"Previsiones / Previsi\u00f3n para juicios Pendientes": {}
|
||||
}
|
||||
},
|
||||
"PATRIMONIO NETO": {
|
||||
"Ajustes al Patrimonio": {
|
||||
"Ajustes al Patrimonio / Revaluo T\u00e9cnico de Bienes de Uso": {}
|
||||
},
|
||||
"Aportes No Capitalizados": {
|
||||
"Aportes No Capitalizados / Aportes Irrevocables Futura Suscripci\u00f3n de Acciones": {},
|
||||
"Aportes No Capitalizados / Primas de Emsi\u00f3n": {}
|
||||
},
|
||||
"Capital Social": {
|
||||
"Capital social / (-) Descuento de Emisi\u00f3n de Acciones": {},
|
||||
"Capital social / Acciones en Circulaci\u00f3n": {},
|
||||
"Capital social / Capital Suscripto": {},
|
||||
"Capital social / Dividendos a Distribuir en Acciones": {}
|
||||
},
|
||||
"Ganancias Reservadas": {
|
||||
"Reserva Estatutaria": {},
|
||||
"Reserva Facultativa": {},
|
||||
"Reserva Legal": {},
|
||||
"Reserva para Renovaci\u00f3n de Bienes de Uso": {}
|
||||
},
|
||||
"Resultados No Asignados": {
|
||||
"Ganancias y P\u00e9rdidas del Ejercicio": {},
|
||||
"Resultado del Ejercicio": {},
|
||||
"Resultados Acumulados": {},
|
||||
"Resultados Acumulados del Ejercicio Anterior": {}
|
||||
}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"Cuentas de Movimiento": {
|
||||
"Compras": {
|
||||
"Compras - Categoria de productos 01": {}
|
||||
},
|
||||
"Costos de Producci\u00f3n": {},
|
||||
"Gastos de Administraci\u00f3n": {},
|
||||
"Gastos de Comercializaci\u00f3n": {},
|
||||
"root_type": ""
|
||||
},
|
||||
"Cuentas de Orden": {
|
||||
"CUENTAS DE ORDEN ACREEDORAS": {
|
||||
"Acreedor por Documentos Descontados": {},
|
||||
"Acreedor por Garant\u00edas Otorgadas": {},
|
||||
"Comitente por Mercaderias Recibidas en Consignaci\u00f3n": {}
|
||||
},
|
||||
"CUENTAS DE ORDEN DEUDORAS": {
|
||||
"Dep\u00f3sito de Valores Recibos en Garant\u00eda": {},
|
||||
"Documentos Descontados": {},
|
||||
"Documentos Endosados": {},
|
||||
"Garantias Otorgadas": {},
|
||||
"Mercaderias Recibidas en Consignaci\u00f3n": {}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"Cuentas de Resultado": {
|
||||
"RESULTADOS NEGATIVOS": {
|
||||
"Resultados Negativos Extraordinarios": {
|
||||
"Donaciones Cedidas, Otorgadas": {},
|
||||
"Gastos en Siniestros": {},
|
||||
"P\u00e9rdida Venta Bienes de Uso": {}
|
||||
},
|
||||
"Resultados Negativos Ordinarios": {
|
||||
"Costo de Mercader\u00edas Vendidas": {
|
||||
"Costo de Mercader\u00edas Vendidas - Categoria de productos 01": {}
|
||||
},
|
||||
"Gastos Bancarios": {},
|
||||
"Gastos de Publicidad y Propaganda": {},
|
||||
"Gastos en Amortizaci\u00f3n": {},
|
||||
"Gastos en Cargas Sociales": {},
|
||||
"Gastos en Depreciaci\u00f3n de Bienes de Uso": {},
|
||||
"Gastos en Impuestos": {},
|
||||
"Gastos en Servicios P\u00fablicos": {},
|
||||
"Gastos en Sueldos y Jormales": {}
|
||||
}
|
||||
},
|
||||
"RESULTADOS POSITIVOS": {
|
||||
"Resultados Positivos Extraordinarios": {
|
||||
"Donaciones obtenidas, ganandas, percibidas": {},
|
||||
"Ganancia Venta Inversiones Permanentes": {},
|
||||
"Ganancia Venta de Bienes de Uso": {},
|
||||
"Recupero de Deudores Incobrables": {},
|
||||
"Recupero de Rezagos": {}
|
||||
},
|
||||
"Resultados Positivos Ordinarios": {
|
||||
"Alquileres gananados, obtenidos, percibidos": {},
|
||||
"Comisiones gananados, obtenidos, percibidos": {},
|
||||
"Descuentos gananados, obtenidos, percibidos": {},
|
||||
"Ganancia Venta de Acciones": {},
|
||||
"Honorarios gananados, obtenidos, percibidos": {},
|
||||
"Intereses gananados, obtenidos, percibidos": {},
|
||||
"Renta de T\u00edtulos P\u00fablicos": {},
|
||||
"Resultados Positivos Ordinarios": {
|
||||
"Ventas - Categoria de productos 01": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"root_type": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -1,172 +0,0 @@
|
||||
{
|
||||
"country_code": "ca",
|
||||
"name": "Canada - Chart of Accounts for english-speaking provinces",
|
||||
"tree": {
|
||||
"ASSETS": {
|
||||
"CURRENT ASSETS": {
|
||||
"ACCOUNTS RECEIVABLES": {
|
||||
"ALLOWANCE FOR DOUBTFUL ACCOUNTS": {},
|
||||
"Customers Account": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"CASH": {},
|
||||
"CERTIFICATES OF DEPOSITS": {},
|
||||
"INVESTMENTS HELD FOR TRADING": {},
|
||||
"PREPAID EXPENSES": {},
|
||||
"STOCKS": {
|
||||
"Stock Delivered But Not Billed": {},
|
||||
"Stock In Hand": {}
|
||||
},
|
||||
"TAXES RECEIVABLES": {
|
||||
"GST receivable": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"HST receivable": {
|
||||
"HST receivable - 13%": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"HST receivable - 14%": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"HST receivable - 15%": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"PST/QST receivable": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"TREASURY OR TREASURY EQUIVALENTS": {}
|
||||
},
|
||||
"NON-CURRENT ASSETS": {
|
||||
"INTANGIBLE ASSETS": {
|
||||
"PATENTS, TRADEMARKS AND COPYRIGHTS": {}
|
||||
},
|
||||
"INVESTMENTS AVAILABLE FOR SALE": {},
|
||||
"TANGIBLE ASSETS": {
|
||||
"ACCUMULATED DEPRECIATIONS": {}
|
||||
}
|
||||
},
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"EQUITY": {
|
||||
"CONTRIBUTED SURPLUS": {},
|
||||
"DIVIDENDS": {},
|
||||
"PREMIUMS": {},
|
||||
"RETAINED EARNINGS": {},
|
||||
"SHARE CAPITAL": {},
|
||||
"TRANSLATION ADJUSTMENTS": {},
|
||||
"root_type": "Equity"
|
||||
},
|
||||
"EXPENSES": {
|
||||
"NON-OPERATING EXPENSES": {
|
||||
"INTERESTS EXPENSES": {},
|
||||
"OTHER NON-OPERATING EXPENSES": {}
|
||||
},
|
||||
"OPERATING EXPENSES": {
|
||||
"COST OF GOODS SOLD": {
|
||||
"Inside Purchases": {},
|
||||
"International Purchases": {},
|
||||
"Purchases in harmonized provinces": {},
|
||||
"Purchases in non-harmonized provinces": {}
|
||||
},
|
||||
"GENERAL EXPENSES": {},
|
||||
"LABOUR EXPENSES": {
|
||||
"Annuities": {},
|
||||
"Employment Insurance": {},
|
||||
"Federal Income Tax": {},
|
||||
"Health Services Fund": {},
|
||||
"Holidays": {},
|
||||
"Labour Health and Safety": {},
|
||||
"Labour Standards": {},
|
||||
"Parental Insurance": {},
|
||||
"Provincial Income Tax": {},
|
||||
"Salaries, wages and commissions": {}
|
||||
},
|
||||
"OTHER OPERATING EXPENSES": {},
|
||||
"RESEARCH AND DEVELOPMENT EXPENSES": {},
|
||||
"SALES EXPENSES": {}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"INCOMES": {
|
||||
"NON-OPERATING INCOMES": {
|
||||
"INTERESTS": {},
|
||||
"OTHER NON-OPERATING INCOMES": {}
|
||||
},
|
||||
"OPERATING INCOMES": {
|
||||
"Harmonized Provinces Sales": {},
|
||||
"Inside Sales": {},
|
||||
"International Sales": {},
|
||||
"Non-Harmonized Provinces Sales": {},
|
||||
"OTHER OPERATING INCOMES": {}
|
||||
},
|
||||
"root_type": "Income"
|
||||
},
|
||||
"LIABILITIES": {
|
||||
"CURRENT LIABILITIES": {
|
||||
"ACCOUNTS PAYABLES": {
|
||||
"Suppliers Account": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
},
|
||||
"CURRENT FINANCIAL DEBTS": {},
|
||||
"LABOUR TAXES TO PAY": {
|
||||
"CANADIAN REVENU AGENCY": {
|
||||
"EMPLOYMENT INSURANCE TO PAY": {
|
||||
"EI - Employees Contribution": {},
|
||||
"EI - Employer Contribution": {}
|
||||
},
|
||||
"Federal Income Tax": {}
|
||||
},
|
||||
"PROVINCIAL REVENU AGENCY": {
|
||||
"ANNUITIES TO PAY": {
|
||||
"Annuities - Employees Contribution": {},
|
||||
"Annuities - Employer Contribution": {}
|
||||
},
|
||||
"Health Services Fund to pay": {},
|
||||
"Labour Health and Safety to pay": {},
|
||||
"Labour Standards to pay": {},
|
||||
"PARENTAL INSURANCE PLAN TO PAY": {
|
||||
"PAP - Employee Contribution": {},
|
||||
"PAP - Employer Contribution": {}
|
||||
},
|
||||
"Provincial Income Tax": {}
|
||||
}
|
||||
},
|
||||
"LIABILITIES ASSETS HELD FOR TRANSFER": {
|
||||
"Stock Received But Not Billed": {}
|
||||
},
|
||||
"OTHER ACCOUNTS PAYABLES": {},
|
||||
"STOCK LIABILITIES": {},
|
||||
"TAXES PAYABLES": {
|
||||
"GST to pay": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"HST to pay": {
|
||||
"HST to pay - 13%": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"HST to pay - 14%": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"HST to pay - 15%": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
},
|
||||
"PST/QST to pay": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NON-CURRENT LIABILITIES": {
|
||||
"DEFERRED TAXES": {},
|
||||
"NON-CURRENT FINANCIAL DEBTS": {},
|
||||
"OTHER NON-CURRENT LIABILITIES": {},
|
||||
"PROVISIONS FOR PENSIONS AND OTHER POST-EMPLOYMENT ADVANTAGES": {}
|
||||
},
|
||||
"root_type": "Liability"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,355 +0,0 @@
|
||||
{
|
||||
"country_code": "hu",
|
||||
"name": "Hungary - Magyar f\u0151k\u00f6nyvi kivonat",
|
||||
"tree": {
|
||||
"Eredm\u00e9ny sz\u00e1ml\u00e1k": {
|
||||
"AZ \u00c9RT\u00c9KES\u00cdT\u00c9S \u00c1RBEV\u00c9TELE, BEV\u00c9TELEK": {
|
||||
"BELF\u00d6LDI \u00c9RK\u00c9KES\u00cdT\u00c9S \u00c1RBEV\u00c9TELE": {
|
||||
"Belf\u00f6ldi \u00e9rt\u00e9kes\u00edt\u00e9s \u00e1rbev\u00e9tele": {}
|
||||
},
|
||||
"BELF\u00d6LDI \u00c9RT\u00c9KES\u00cdT\u00c9S \u00c1RBEV\u00c9TELE": {
|
||||
"Belf\u00f6ldi \u00e9rt\u00e9kes\u00edt\u00e9s \u00e1rbev\u00e9tele": {}
|
||||
},
|
||||
"EGY\u00c9B BEV\u00c9TELEK": {
|
||||
"Az \u00fczleti \u00e9vhez kapcs. egy\u00e9b bev\u00e9telek": {},
|
||||
"Biztos\u00edt\u00f3 \u00e1ltal visszaig. k\u00e1rt\u00e9r\u00edt\u00e9s \u00f6.": {},
|
||||
"C\u00e9ltartal\u00e9k felhaszn\u00e1l\u00e1sa": {},
|
||||
"K\u00fcl\u00f6nf\u00e9le egy\u00e9b bev\u00e9telek": {},
|
||||
"Ut\u00f3lag kapott p\u00fc. rendezett engedm\u00e9ny": {},
|
||||
"Visszafiz. k\u00f6t. n\u00e9lk\u00fcl kapott t\u00e1mogat\u00e1s": {},
|
||||
"\u00c9rt,\u00e1truh\u00e1zott k\u00f6vetel\u00e9sek elism.m\u00e9rt\u00e9ke": {},
|
||||
"\u00c9rt.immat. javak, t\u00e1rgyi eszk.bev\u00e9tele": {},
|
||||
"\u00c9rt\u00e9kveszt\u00e9sek vissza\u00edr\u00e1sa, tervenf.\u00e9cs.": {}
|
||||
},
|
||||
"EXPORT \u00c9RT\u00c9KES\u00cdT\u00c9S \u00c1RBEV\u00c9TELE": {
|
||||
"Export \u00e9rt\u00e9kes\u00edt\u00e9s \u00e1rbev. EU tagorsz\u00e1gba": {},
|
||||
"Export \u00e9rt\u00e9kes\u00edt\u00e9s \u00e1rbev.nem EU tagorsz.": {}
|
||||
},
|
||||
"P\u00c9NZ\u00dcGYI M\u00dcVELETEK BEV\u00c9TELEI": {
|
||||
"Befekt. p\u00fci.eszk. kamatai, \u00e1rf.nyeres.": {},
|
||||
"Egy\u00e9b kapott kamatok,kamatjell.bev\u00e9telek": {},
|
||||
"Egy\u00e9b p\u00e9nz\u00fcgyi m\u00fbveletek bev\u00e9telei": {},
|
||||
"Egy\u00e9b \u00e1rfolyamnyeres\u00e9gek, opci\u00f3s bev.": {},
|
||||
"Forg\u00f3eszk. \u00e9rt\u00e9kpap\u00edr \u00e1rfolyamnyeres\u00e9ge": {},
|
||||
"Kapott (j\u00e1r\u00f3) osztal\u00e9k, r\u00e9szesed\u00e9s": {},
|
||||
"R\u00e9szesed\u00e9sek \u00e9rt. \u00e1rfolyamnyeres\u00e9ge": {},
|
||||
"V\u00e1s. k\u00f6vetel\u00e9sekkel kapcs. bev\u00e9telek": {},
|
||||
"\u00c1tv\u00e1lt\u00e1si, \u00e1t\u00e9rt\u00e9kel\u00e9skori \u00e1rf.nyeres\u00e9g": {}
|
||||
},
|
||||
"RENDKIV\u00dcLI BEV\u00c9TELEK": {
|
||||
"Rendk\u00edv\u00fcli bev\u00e9telek": {}
|
||||
}
|
||||
},
|
||||
"AZ \u00c9RT\u00c9KES\u00cdT\u00c9S \u00d6NK\u00d6LTS. \u00c9S R\u00c1FORD\u00cdT\u00c1SOK": {
|
||||
"ANYAGJELLEG\u00db R\u00c1FORD\u00cdT\u00c1SOK": {
|
||||
"Anyagk\u00f6lts\u00e9g": {},
|
||||
"Egy\u00e9b szolg\u00e1ltat\u00e1sok \u00e9rt\u00e9ke": {},
|
||||
"Eladott (k\u00f6zvet\u00edtett) szolg. \u00e9rt\u00e9ke": {},
|
||||
"Eladott \u00e1ruk beszerz\u00e9si \u00e9rt\u00e9ke": {},
|
||||
"Ig\u00e9nybevett szolg\u00e1ltat\u00e1sok \u00e9rt\u00e9ke": {}
|
||||
},
|
||||
"EGY\u00c9B R\u00c1FORD\u00cdT\u00c1SOK": {
|
||||
"Ad\u00f3k, illet\u00e9kek, hozz\u00e1j\u00e1rul\u00e1sok": {},
|
||||
"Az \u00fczleti \u00e9vhez kapcs. r\u00e1ford\u00edt\u00e1sok": {},
|
||||
"C\u00e9ltartal\u00e9k k\u00e9pz\u00e9se": {},
|
||||
"Elsz\u00e1molt \u00e9rt\u00e9kveszt\u00e9s, tervenf. \u00e9rt\u00e9kcs": {},
|
||||
"K\u00fcl\u00f6nf\u00e9le egy\u00e9b r\u00e1ford\u00edt\u00e1sok": {},
|
||||
"Ut\u00f3lag adott p\u00fc. rendezett engedm\u00e9ny": {},
|
||||
"\u00c9rt.\u00e1truh\u00e1zott k\u00f6vetel\u00e9sek k\u00f6nyvsz. \u00e9rt.": {},
|
||||
"\u00c9rt\u00e9kes\u00edtett eszk.imm.javak nytsz \u00e9rt\u00e9ke": {}
|
||||
},
|
||||
"NYERES\u00c9GET TERHEL\u00d6 AD\u00d3K": {
|
||||
"Egyszer\u00fcs\u00edtett v\u00e1llalkoz\u00f3i ad\u00f3": {},
|
||||
"T\u00e1rsas v\u00e1llalkoz\u00e1s k\u00fcl\u00f6nad\u00f3ja": {},
|
||||
"T\u00e1rsas\u00e1gi ad\u00f3": {}
|
||||
},
|
||||
"P\u00c9NZ\u00dcGYI M\u00dcVELETEK R\u00c1FORD\u00cdT\u00c1SAI": {
|
||||
"Befektetett p\u00fci. eszk. \u00e1rf.vesztes\u00e9ge": {},
|
||||
"Egy\u00e9b p\u00e9nz\u00fcgyi r\u00e1ford\u00edt\u00e1sok": {},
|
||||
"Egy\u00e9b \u00e1rfolyamvesztes\u00e9gek, opci\u00f3s d\u00edjak": {},
|
||||
"Fizetend\u00f5 kamatok, kamatjell. r\u00e1ford.": {},
|
||||
"Forg\u00f3eszk. \u00e9rt\u00e9kpap\u00edr \u00e1rf.vesztes\u00e9ge": {},
|
||||
"R\u00e9szesed\u00e9sek,\u00e9.pap\u00edrok,bankb. \u00e9rt\u00e9kveszt": {},
|
||||
"V\u00e1s\u00e1rolt k\u00f6v. kapcs. r\u00e1ford\u00edt\u00e1sok": {},
|
||||
"\u00c1tv\u00e1lt\u00e1si, \u00e9rt\u00e9kel\u00e9si \u00e1rfolyamvesztes\u00e9g": {}
|
||||
},
|
||||
"RENDKIV\u00dcLI R\u00c1FORD\u00cdT\u00c1SOK": {
|
||||
"Egy\u00e9b vagyoncs\u00f6kk. rendk\u00edv\u00fcli r\u00e1ford\u00edt\u00e1s": {},
|
||||
"Saj\u00e1t \u00fczletr\u00e9sz nyilv\u00e1ntart\u00e1si \u00e9rt\u00e9ke": {},
|
||||
"Tartoz\u00e1s\u00e1tv. szerz. szerinti \u00f6sszege": {},
|
||||
"T\u00e1rsas\u00e1gban bevitt eszk. nytsz. \u00e9rt\u00e9ke": {}
|
||||
},
|
||||
"SZEM\u00c9LYI JELLEG\u00fb R\u00c1FORD\u00cdT\u00c1SOK": {
|
||||
"B\u00e9rj\u00e1rul\u00e9kok": {},
|
||||
"B\u00e9rk\u00f6lts\u00e9g": {},
|
||||
"Szem\u00e9lyi jelleg\u00fc egy\u00e9b kifizet\u00e9sek": {}
|
||||
},
|
||||
"\u00c9RT\u00c9KCS\u00d6KKEN\u00c9SI LE\u00cdR\u00c1S": {}
|
||||
},
|
||||
"K\u00d6LTS\u00c9GNEMEK": {
|
||||
"AKT\u00cdV\u00c1LT SAJ\u00c1T TELJES\u00cdTM\u00c9NYEK \u00c9RT\u00c9KE": {
|
||||
"Saj\u00e1t el\u00f5\u00e1ll\u00edt\u00e1si eszk\u00f6z\u00f6k aktiv\u00e1lt \u00e9rt.": {},
|
||||
"Saj\u00e1t term. k\u00e9szletek \u00e1llom\u00e1nyv\u00e1ltoz\u00e1sa": {}
|
||||
},
|
||||
"ANYAGK\u00d6LTS\u00c9G": {
|
||||
"Anyagk\u00f6lts\u00e9g megt\u00e9r\u00fcl\u00e9s": {},
|
||||
"Egy \u00e9ven bel\u00fcl elhaszn. anyagi eszk\u00f6z\u00f6k": {},
|
||||
"Egy\u00e9b anyagk\u00f6lts\u00e9g": {},
|
||||
"V\u00e1s\u00e1rolt anyagok k\u00f6lts\u00e9gei": {}
|
||||
},
|
||||
"B\u00c9RJ\u00c1RUL\u00c9KOK": {
|
||||
"Egyszer\u00fbs\u00edtett fogl. k\u00f6zteher": {},
|
||||
"Egyszer\u00fbs\u00edtett k\u00f6ztehervisel\u00e9si hj\u00e1r": {},
|
||||
"Eg\u00e9szs\u00e9g\u00fcgyi hozz\u00e1j\u00e1rul\u00e1s": {},
|
||||
"K\u00f6zteherjegy": {},
|
||||
"Munkaad\u00f3i j\u00e1rul\u00e9k": {},
|
||||
"Rehabilit\u00e1ci\u00f3s hozz\u00e1j\u00e1rul\u00e1s": {},
|
||||
"Szakk\u00e9pz\u00e9si hozz\u00e1j\u00e1rul\u00e1s": {},
|
||||
"T\u00e1rsadalombiztos\u00edt\u00e1si j\u00e1rul\u00e9k": {}
|
||||
},
|
||||
"B\u00c9RK\u00d6LTS\u00c9G": {
|
||||
"Egyszer\u00fbs\u00edtett fogl. b\u00e9rk\u00f6lts\u00e9ge": {},
|
||||
"Megb\u00edz\u00e1si d\u00edjak b\u00e9rk\u00f6lts\u00e9g terh\u00e9re": {},
|
||||
"Munkav\u00e1llal\u00f3k munkab\u00e9r k\u00f6lts\u00e9ge": {},
|
||||
"Tagok szem\u00e9lyes k\u00f6zr. ellen\u00e9rt\u00e9ke": {}
|
||||
},
|
||||
"EGY\u00c9B SZOLG\u00c1LTAT\u00c1SOK K\u00d6LTS\u00c9GEI": {
|
||||
"Biztos\u00edt\u00e1si d\u00edjak": {},
|
||||
"Hat\u00f3s\u00e1gi igazgat\u00e1si d\u00edjak (illet\u00e9kek)": {},
|
||||
"P\u00e9nz\u00fcgyi szolg-i d\u00edjak, bankk\u00f6lts\u00e9gek": {}
|
||||
},
|
||||
"IG\u00c9NYBE VETT SZOLG\u00c1LTAT\u00c1SOK K\u00d6LTS\u00c9GEI": {
|
||||
"B\u00e9rleti d\u00edjak": {},
|
||||
"Egy\u00e9b ig\u00e9nybevett szolg\u00e1ltat\u00e1sok ktg-ei": {},
|
||||
"Hirdet\u00e9s, rekl\u00e1m-propaganda k\u00f6lts\u00e9g": {},
|
||||
"Jav\u00edt\u00e1si, karbantart\u00e1si k\u00f6lts\u00e9gek": {},
|
||||
"Oktat\u00e1si, tov\u00e1bbk\u00e9pz\u00e9si k\u00f6lts\u00e9gek": {},
|
||||
"Postai, t\u00e1vk\u00f6zl\u00e9si k\u00f6lts\u00e9gek": {},
|
||||
"Szakk\u00f6nyv, foly\u00f3irat, napilap beszerz\u00e9s": {},
|
||||
"Sz\u00e1ll\u00edt\u00e1si, rakod\u00e1si k\u00f6lts\u00e9g": {},
|
||||
"Utaz\u00e1si- \u00e9s kik\u00fcldet\u00e9si k\u00f6lts\u00e9gek": {}
|
||||
},
|
||||
"K\u00d6LTS\u00c9GNEM \u00c1TVEZET\u00c9SI SZ\u00c1MLA": {
|
||||
"Anyagk\u00f6lts\u00e9g \u00e1tvezet\u00e9si szla": {},
|
||||
"B\u00e9rj\u00e1rul\u00e9kok \u00e1tvezet\u00e9si szla": {},
|
||||
"B\u00e9rk\u00f6lts\u00e9g \u00e1tvezet\u00e9si szla": {},
|
||||
"Egy\u00e9b szolg\u00e1ltat\u00e1sok \u00e1tvezet\u00e9si szla": {},
|
||||
"Ig\u00e9nybevett szolg. \u00e1tvezet\u00e9si szla": {},
|
||||
"Szem\u00e9lyi jell. kif. \u00e1tvezet\u00e9si szla": {},
|
||||
"\u00c9rt\u00e9kcs\u00f6kken\u00e9si le\u00edr\u00e1s \u00e1tvez. szla": {}
|
||||
},
|
||||
"SZEM\u00c9LYI JELLEG\u00fb EGY\u00c9B KIFIZET\u00c9SEK": {
|
||||
"Egy\u00e9b szem\u00e9lyi jelleg\u00fb kifizet\u00e9sek": {},
|
||||
"Foglalkoztat\u00f3t terhel\u00f5 t\u00e1pp\u00e9nz hj\u00e1rul\u00e1s": {},
|
||||
"J\u00f3l\u00e9ti \u00e9s kultur\u00e1lis k\u00f6lts\u00e9gek": {},
|
||||
"Kifizet\u00f5t terhel\u00f5 szem\u00e9lyi j\u00f6vedelemad\u00f3": {},
|
||||
"Mag\u00e1nnyugd\u00edjp\u00e9nzt\u00e1ri tagd\u00edjak, hozz\u00e1j\u00e1r.": {},
|
||||
"Szem\u00e9lyi jelleg\u00fb kifizet\u00e9sek": {},
|
||||
"Term\u00e9szetbeni juttat\u00e1sok": {}
|
||||
},
|
||||
"\u00c9RT\u00c9KCS\u00d6KKEN\u00c9SI LE\u00cdR\u00c1S": {
|
||||
"Terv szerinti egy\u00f6sszeg\u00fb (kis\u00e9rt\u00e9k\u00fbek)": {},
|
||||
"Terv szerinti \u00e9rt\u00e9kcs\u00f6kken\u00e9s line\u00e1ris": {}
|
||||
}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"M\u00e9rleg sz\u00e1ml\u00e1k": {
|
||||
"BEFEKTETETT ESZK\u00d6Z\u00d6K": {
|
||||
"BEFEKTETETT P\u00fc.I ESZK\u00d6Z\u00d6K R\u00c9SZESED\u00c9SEK": {
|
||||
"Egy\u00e9b tart\u00f3s r\u00e9szesed\u00e9s": {},
|
||||
"R\u00e9szesed\u00e9sek \u00e9rt\u00e9khelyesb\u00edt\u00e9se": {},
|
||||
"R\u00e9szesed\u00e9sek \u00e9rt\u00e9kveszt\u00e9se, vissza\u00edr\u00e1sa": {},
|
||||
"Tart\u00f3s r\u00e9szesed\u00e9s kapcs. v\u00e1llalkoz\u00e1sban": {}
|
||||
},
|
||||
"BERUH\u00c1Z\u00c1SOK, FEL\u00faJ\u00cdT\u00c1SOK": {
|
||||
"Befejezetlen beruh\u00e1z\u00e1sok": {},
|
||||
"Beruh\u00e1z\u00e1sok terven fel\u00fcli \u00e9rt\u00e9kcs\u00f6kk.": {},
|
||||
"Fel\u00faj\u00edt\u00e1sok": {}
|
||||
},
|
||||
"EGY\u00c9B BERENDEZ\u00c9SEK, FELSZ., J\u00c1RM\u00dcVEK": {
|
||||
"Egy\u00e9b g\u00e9pek,felsz,j\u00e1rm. \u00e9rt\u00e9khelyesb\u00edt\u00e9s": {},
|
||||
"Egy\u00e9b j\u00e1rm\u00fbvek": {},
|
||||
"Irodai, igazgat\u00e1si berendez\u00e9sek": {},
|
||||
"\u00dczemi berendez\u00e9sek, g\u00e9pek,felszerel\u00e9sek": {},
|
||||
"\u00dczemk\u00f6r\u00f6n kiv\u00fcli berendez\u00e9sek, felsz.": {}
|
||||
},
|
||||
"HITELVISZONYT MEGTESTES\u00cdT\u00d6 \u00c9RT\u00c9KPAP\u00cdROK": {
|
||||
"Egy\u00e9b v\u00e1llalkoz\u00e1sok \u00e9rt\u00e9kpap\u00edrjai": {},
|
||||
"Kapcsolt v\u00e1llalkoz\u00e1sok \u00e9rt\u00e9kpap\u00edrjai": {},
|
||||
"Tart\u00f3s diszkont \u00e9rt\u00e9kpap\u00edrok": {},
|
||||
"\u00c1llamk\u00f6tv\u00e9nyek": {},
|
||||
"\u00c9rt\u00e9kpap\u00edrok \u00e9rt\u00e9kveszt\u00e9se, vissza\u00edr\u00e1sa": {}
|
||||
},
|
||||
"IMMATERI\u00c1LIS JAVAK": {
|
||||
"Alap\u00edt\u00e1s-\u00e1tszervez\u00e9s akt\u00edv\u00e1lt \u00e9rt\u00e9ke": {},
|
||||
"Immateri\u00e1lis javak \u00e9rt\u00e9khelyesb\u00edt\u00e9se": {},
|
||||
"K\u00eds\u00e9rleti fejleszt\u00e9s akt\u00edv\u00e1lt \u00e9rt\u00e9ke": {},
|
||||
"Szellemi term\u00e9kek": {},
|
||||
"Vagyoni \u00e9rt\u00e9k\u00fb jogok": {},
|
||||
"\u00dczleti vagy c\u00e9g\u00e9rt\u00e9k": {}
|
||||
},
|
||||
"INGATLANOK, KAPCS. VAGYONI \u00c9RT. JOGOK": {
|
||||
"Egy\u00e9b \u00e9p\u00edtm\u00e9nyek": {},
|
||||
"F\u00f6ldter\u00fclet": {},
|
||||
"Ingatlanhoz kapcs. vagyoni \u00e9rt. jogok": {},
|
||||
"Ingatlanok \u00e9rt\u00e9khelyesb\u00edt\u00e9se": {},
|
||||
"Telek, telkes\u00edt\u00e9s": {},
|
||||
"\u00c9p\u00fcletek,\u00e9p\u00fcletr\u00e9szek,tulajdoni h\u00e1nyadok": {},
|
||||
"\u00dczemk\u00f6r\u00f6n kiv\u00fcli ingatlanok, \u00e9p\u00fcletek": {}
|
||||
},
|
||||
"M\u00dcSZAKI BERENDEZ\u00c9SEK, G\u00c9PEK, J\u00c1RM\u00dcVEK": {
|
||||
"M\u00fcszaki g\u00e9pek,felsz,j\u00e1rm. \u00e9rt\u00e9khelyesb.": {},
|
||||
"Termel\u00e9sben r\u00e9sztvev\u00f5 j\u00e1rm\u00fbvek": {},
|
||||
"Termel\u00f5 g\u00e9pek, berendez\u00e9sek, gy\u00e1rt\u00f3eszk.": {}
|
||||
},
|
||||
"TART\u00d3SAN ADOTT K\u00d6LCS\u00d6N\u00d6K": {
|
||||
"Egy\u00e9b tart\u00f3s bankbet\u00e9tek": {},
|
||||
"Egy\u00e9b tart\u00f3san adott k\u00f6lcs\u00f6n\u00f6k": {},
|
||||
"P\u00e9nz\u00fcgyi l\u00edzing miatti tart\u00f3s k\u00f6vetel\u00e9s": {},
|
||||
"Tart\u00f3s bankbet\u00e9tek egy\u00e9b r\u00e9sz. v\u00e1ll.-ban": {},
|
||||
"Tart\u00f3s bankbet\u00e9tek kapcs. v\u00e1ll.-ban": {},
|
||||
"Tart\u00f3san adott k\u00f6lcs\u00f6n egy\u00e9b r\u00e9sz.v\u00e1ll.": {},
|
||||
"Tart\u00f3san adott k\u00f6lcs\u00f6n\u00f6k kapcs. v\u00e1ll.": {},
|
||||
"Tart\u00f3san adott k\u00f6lcs\u00f6n\u00f6k \u00e9rt\u00e9kveszt\u00e9se": {}
|
||||
},
|
||||
"TENY\u00c9SZ\u00c1LLATOK": {
|
||||
"Teny\u00e9sz\u00e1llatok": {}
|
||||
}
|
||||
},
|
||||
"FORR\u00c1SOK (PASSZ\u00cdV\u00c1K)": {
|
||||
"C\u00c9LTARTAL\u00c9KOK": {
|
||||
"C\u00e9ltartal\u00e9k v\u00e1rhat\u00f3 k\u00f6telezetts\u00e9gre": {}
|
||||
},
|
||||
"EGY\u00c9B R\u00d6VID LEJ\u00c1RAT\u00fa K\u00d6TELEZETTS\u00c9GEK": {
|
||||
"El\u00f5zetesen felsz\u00e1m\u00edtott \u00e1lt.forgalmi ad\u00f3": {},
|
||||
"Fizetend\u00f5 \u00e1ltal\u00e1nos forgalmi ad\u00f3": {},
|
||||
"K\u00f6lts\u00e9gvet\u00e9si befizet\u00e9si k\u00f6t.teljes\u00edt\u00e9se": {},
|
||||
"K\u00f6lts\u00e9gvet\u00e9si befizet\u00e9si k\u00f6telezetts\u00e9gek": {},
|
||||
"Szem\u00e9lyi j\u00f6vedelemad\u00f3 elsz\u00e1mol\u00e1sa": {},
|
||||
"T\u00e1rsas\u00e1gi ad\u00f3 \u00e9s osztal\u00e9kad\u00f3 elsz\u00e1mol\u00e1s": {},
|
||||
"V\u00e1m- \u00e9s P\u00e9nz\u00fcgy\u00f5rs\u00e9g elsz\u00e1mol\u00e1si sz\u00e1mla": {},
|
||||
"\u00c1fa p\u00e9nz\u00fcgyi elsz\u00e1mol\u00e1si sz\u00e1mla": {},
|
||||
"\u00d6nkorm\u00e1nyzati ad\u00f3k elsz\u00e1mol\u00e1si sz\u00e1mla": {}
|
||||
},
|
||||
"HOSSZ\u00da LEJ\u00c1RAT\u00da K\u00d6TELEZETTS\u00c9GEK": {
|
||||
"Beruh\u00e1z\u00e1si \u00e9s fejleszt\u00e9si hitelek": {},
|
||||
"Egy\u00e9b hossz\u00fa lej. k\u00f6telezetts\u00e9gek": {},
|
||||
"Egy\u00e9b hossz\u00fa lej\u00e1rat\u00fa hitelek": {},
|
||||
"Hossz\u00fa lej\u00e1ratra kapott k\u00f6lcs\u00f6n\u00f6k": {},
|
||||
"P\u00e9nz\u00fcgyi l\u00edzinggel kapcsolatos k\u00f6telez.": {},
|
||||
"Tartoz\u00e1sok k\u00f6tv\u00e9nykibocs\u00e1t\u00e1sb\u00f3l": {},
|
||||
"Tart\u00f3s k\u00f6t. egy\u00e9b r\u00e9sz. v\u00e1ll. szemben": {},
|
||||
"Tart\u00f3s k\u00f6t. kapcs. v\u00e1llalkoz\u00e1ssal sz.": {},
|
||||
"\u00c1tv\u00e1ltoztathat\u00f3 k\u00f6tv\u00e9nyek": {}
|
||||
},
|
||||
"H\u00c1TRASOROLT K\u00d6TELEZETTS\u00c9GEK": {
|
||||
"H\u00e1trasorolt k\u00f6telezetts\u00e9g": {}
|
||||
},
|
||||
"PASSZ\u00cdV ID\u00d6BELI ELHAT\u00c1ROL\u00c1S": {
|
||||
"Bev\u00e9telek passz\u00edv id\u00f5beli elhat\u00e1rol\u00e1sa": {},
|
||||
"Halasztott bev\u00e9telek": {},
|
||||
"K\u00f6lts\u00e9gek,r\u00e1ford. passz\u00edv id\u00f5beli elhat.": {}
|
||||
},
|
||||
"R\u00d6VID LEJ\u00c1RAT\u00fa K\u00d6TELEZETTS\u00c9GEK": {
|
||||
"R\u00f6vid lej\u00e1rat\u00fa hitelek": {},
|
||||
"R\u00f6vid lej\u00e1rat\u00fa k\u00f6lcs\u00f6n\u00f6k": {},
|
||||
"Sz\u00e1ll\u00edt\u00f3k": {
|
||||
"Belf\u00f6ldi sz\u00e1ll\u00edt\u00f3k": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"K\u00fclf\u00f6ldi sz\u00e1ll\u00edt\u00f3k": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
},
|
||||
"Vev\u00f5kt\u00f5l kapott el\u00f5legek": {}
|
||||
},
|
||||
"SAJ\u00c1T T\u00d6KE": {
|
||||
"Eredm\u00e9nytartal\u00e9k": {},
|
||||
"Jegyzett t\u00f5ke": {},
|
||||
"Lek\u00f6t\u00f6tt tartal\u00e9k": {},
|
||||
"M\u00e9rleg szerinti eredm\u00e9ny": {},
|
||||
"T\u00f5ketartal\u00e9k": {},
|
||||
"\u00c9rt\u00e9kel\u00e9si tartal\u00e9k": {}
|
||||
},
|
||||
"\u00c9VI M\u00c9RLEG SZ\u00c1ML\u00c1K": {
|
||||
"Nyit\u00f3m\u00e9rleg sz\u00e1mla": {}
|
||||
}
|
||||
},
|
||||
"K\u00c9SZLETEK": {
|
||||
"ANYAGOK": {
|
||||
"Seg\u00e9danyagok": {}
|
||||
},
|
||||
"BEFEJEZETLEN TERMEL\u00c9S \u00c9S F\u00c9LK\u00c9SZTERM\u00c9KEK": {
|
||||
"Befejezetlen termel\u00e9s": {}
|
||||
},
|
||||
"BET\u00c9TD\u00cdJAS G\u00d6NGY\u00d6LEGEK": {
|
||||
"Bet\u00e9td\u00edjas g\u00f6ngy\u00f6legek": {}
|
||||
},
|
||||
"K\u00c9SZTERM\u00c9KEK": {
|
||||
"K\u00e9szterm\u00e9kek": {}
|
||||
},
|
||||
"K\u00d6ZVET\u00cdTETT SZOLG\u00c1LTAT\u00c1SOK": {
|
||||
"K\u00f6zvet\u00edtett szolg\u00e1ltat\u00e1sok": {}
|
||||
},
|
||||
"\u00c1RUK": {
|
||||
"\u00c1ruk beszerz\u00e9si \u00e1ron": {}
|
||||
}
|
||||
},
|
||||
"K\u00d6VETEL\u00c9SEK,P\u00c9NZ\u00dcGYI ESZK,AKT\u00cdV ID\u00d6B.ELH": {
|
||||
"ADOTT EL\u00d6LEGEK": {
|
||||
"Adott el\u00f5legek": {}
|
||||
},
|
||||
"AKT\u00cdV ID\u00d6BELI ELHAT\u00c1ROL\u00c1S": {
|
||||
"Akt\u00edv id\u00f5beli elhat\u00e1rol\u00e1sa": {}
|
||||
},
|
||||
"EGY\u00c9B K\u00d6VETEL\u00c9SEK": {
|
||||
"K\u00fcl\u00f6nf\u00e9le egy\u00e9b k\u00f6vetel\u00e9sek": {},
|
||||
"Munkav\u00e1llal\u00f3kkal szembeni k\u00f6vetel\u00e9s": {}
|
||||
},
|
||||
"K\u00d6VETEL\u00c9SEK \u00c1RUSZ\u00c1LL.- SZOLG\u00c1LTAT\u00c1SB\u00d3L": {
|
||||
"Belf\u00f6ldi k\u00f6vetel\u00e9sek": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"K\u00fclf\u00f6ldi k\u00f6vetel\u00e9sek": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
},
|
||||
"P\u00c9NZESZK\u00d6Z\u00d6K": {
|
||||
"Deviza bet\u00e9tsz\u00e1mla": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Elk\u00fcl\u00f6n\u00edtett bet\u00e9tsz\u00e1ml\u00e1k": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Elsz\u00e1mol\u00e1si bet\u00e9tsz\u00e1mla": {
|
||||
"Banksz\u00e1mla": {
|
||||
"account_type": "Bank"
|
||||
}
|
||||
},
|
||||
"P\u00e9nzhelyettes\u00edt\u00f5 eszk. (utalv\u00e1ny, jegy)": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"P\u00e9nzt\u00e1rak": {
|
||||
"P\u00e9nzt\u00e1r": {
|
||||
"account_type": "Cash"
|
||||
}
|
||||
},
|
||||
"Valuta p\u00e9nzt\u00e1r": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"\u00c1tvezet\u00e9si sz\u00e1mla": {
|
||||
"account_type": "Bank"
|
||||
}
|
||||
},
|
||||
"\u00c9RT\u00c9KPAP\u00cdROK": {
|
||||
"Egy\u00e9b r\u00e9szesed\u00e9s": {},
|
||||
"Forgat\u00e1si c\u00e9l\u00fa hitelv. m. \u00e9rt\u00e9kpap\u00edrok": {},
|
||||
"R\u00e9szesed\u00e9s kapcsolt v\u00e1llalkoz\u00e1sban": {},
|
||||
"Saj\u00e1t r\u00e9szv\u00e9nyek, saj\u00e1t \u00fczletr\u00e9szek": {}
|
||||
}
|
||||
},
|
||||
"root_type": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -1,716 +0,0 @@
|
||||
{
|
||||
"country_code": "nl",
|
||||
"name": "Nederlands - Grootboekschema",
|
||||
"tree": {
|
||||
"FABRIKAGEREKENINGEN": {
|
||||
"root_type": ""
|
||||
},
|
||||
"FINANCIELE REKENINGEN, KORTLOPENDE VORDERINGEN EN SCHULDEN": {
|
||||
"KORTLOPENDE SCHULDEN": {
|
||||
"Accountantskosten": {},
|
||||
"Af te dragen Btw-verlegd": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Afdracht loonheffing": {},
|
||||
"Btw af te dragen hoog": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw af te dragen laag": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw af te dragen overig": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw oude jaren": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw te vorderen hoog": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw te vorderen laag": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw te vorderen overig": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Btw-afdracht": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Crediteuren": {
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Dividend": {},
|
||||
"Dividendbelasting": {},
|
||||
"Energiekosten": {},
|
||||
"Investeringsaftrek": {},
|
||||
"Loonheffing": {},
|
||||
"Overige te betalen posten": {},
|
||||
"Pensioenpremies": {},
|
||||
"Premie WIR": {},
|
||||
"Rekening-courant inkoopvereniging": {},
|
||||
"Rente": {},
|
||||
"Sociale lasten": {},
|
||||
"Tanti\u00e8mes": {},
|
||||
"Te vorderen Btw-verlegd": {
|
||||
"account_type": "Tax"
|
||||
},
|
||||
"Telefoon/telefax": {},
|
||||
"Termijnen onderh. werk": {},
|
||||
"Vakantiedagen": {},
|
||||
"Vakantiegeld": {},
|
||||
"Vakantiezegels": {},
|
||||
"Vennootschapsbelasting": {},
|
||||
"Vooruit ontvangen bedr.": {}
|
||||
},
|
||||
"LIQUIDE MIDDELEN": {
|
||||
"ABN-AMRO bank": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"BIZNER bank": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Bankbetaalkaarten": {},
|
||||
"Effecten": {},
|
||||
"Girobetaalkaarten": {},
|
||||
"Kas": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kas valuta": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kleine kas": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kruisposten": {},
|
||||
"Postbank": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"RABO bank": {
|
||||
"account_type": "Cash"
|
||||
}
|
||||
},
|
||||
"VORDERINGEN": {
|
||||
"Debiteuren": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Dubieuze debiteuren": {},
|
||||
"Overige vorderingen": {},
|
||||
"Rekening-courant directie": {},
|
||||
"Te ontvangen ziekengeld": {},
|
||||
"Voorschotten personeel": {},
|
||||
"Vooruitbetaalde kosten": {},
|
||||
"Voorziening dubieuze debiteuren": {}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"INDIRECTE KOSTEN": {
|
||||
"root_type": ""
|
||||
},
|
||||
"KOSTENREKENINGEN": {
|
||||
"AFSCHRIJVINGEN": {
|
||||
"Aanhangwagens": {},
|
||||
"Aankoopkosten": {},
|
||||
"Aanloopkosten": {},
|
||||
"Auteursrechten": {},
|
||||
"Bedrijfsgebouwen": {},
|
||||
"Bedrijfsinventaris": {},
|
||||
"Drankvergunningen": {},
|
||||
"Fabrieksinventaris": {},
|
||||
"Gebouwen": {},
|
||||
"Gereedschappen": {},
|
||||
"Goodwill": {},
|
||||
"Grondverbetering": {},
|
||||
"Heftrucks": {},
|
||||
"Kantine-inventaris": {},
|
||||
"Kantoorinventaris": {},
|
||||
"Kantoormachines": {},
|
||||
"Licenties": {},
|
||||
"Machines": {},
|
||||
"Magazijninventaris": {},
|
||||
"Octrooien": {},
|
||||
"Ontwikkelingskosten": {},
|
||||
"Pachtersinvestering": {},
|
||||
"Parkeerplaats": {},
|
||||
"Personenauto's": {},
|
||||
"Rijwielen en bromfietsen": {},
|
||||
"Tonnagevergunningen": {},
|
||||
"Verbouwingen": {},
|
||||
"Vergunningen": {},
|
||||
"Voorraadverschillen": {},
|
||||
"Vrachtauto's": {},
|
||||
"Winkels": {},
|
||||
"Woon-winkelhuis": {}
|
||||
},
|
||||
"ALGEMENE KOSTEN": {
|
||||
"Accountantskosten": {},
|
||||
"Advieskosten": {},
|
||||
"Assuranties": {},
|
||||
"Bankkosten": {},
|
||||
"Juridische kosten": {},
|
||||
"Overige algemene kosten": {},
|
||||
"Toev. Ass. eigen risico": {}
|
||||
},
|
||||
"BEDRIJFSKOSTEN": {
|
||||
"Assuranties": {},
|
||||
"Energie (krachtstroom)": {},
|
||||
"Gereedschappen": {},
|
||||
"Hulpmaterialen": {},
|
||||
"Huur inventaris": {},
|
||||
"Huur machines": {},
|
||||
"Leasing invent.operational": {},
|
||||
"Leasing mach. operational": {},
|
||||
"Onderhoud inventaris": {},
|
||||
"Onderhoud machines": {},
|
||||
"Ophalen/vervoer afval": {},
|
||||
"Overige bedrijfskosten": {}
|
||||
},
|
||||
"FINANCIERINGSKOSTEN": {
|
||||
"Overige rentebaten": {},
|
||||
"Overige rentelasten": {},
|
||||
"Rente bankkrediet": {},
|
||||
"Rente huurkoopcontracten": {},
|
||||
"Rente hypotheek": {},
|
||||
"Rente leasecontracten": {},
|
||||
"Rente lening o/g": {},
|
||||
"Rente lening u/g": {}
|
||||
},
|
||||
"HUISVESTINGSKOSTEN": {
|
||||
"Assurantie onroerend goed": {},
|
||||
"Belastingen onr. Goed": {},
|
||||
"Energiekosten": {},
|
||||
"Groot onderhoud onr. Goed": {},
|
||||
"Huur": {},
|
||||
"Huurwaarde woongedeelte": {},
|
||||
"Onderhoud onroerend goed": {},
|
||||
"Ontvangen huren": {},
|
||||
"Overige huisvestingskosten": {},
|
||||
"Pacht": {},
|
||||
"Schoonmaakkosten": {},
|
||||
"Toevoeging egalisatieres. Groot onderhoud": {}
|
||||
},
|
||||
"KANTOORKOSTEN": {
|
||||
"Administratiekosten": {},
|
||||
"Contributies/abonnementen": {},
|
||||
"Huur kantoorapparatuur": {},
|
||||
"Internetaansluiting": {},
|
||||
"Kantoorbenodigdh./drukw.": {},
|
||||
"Onderhoud kantoorinvent.": {},
|
||||
"Overige kantoorkosten": {},
|
||||
"Porti": {},
|
||||
"Telefoon/telefax": {}
|
||||
},
|
||||
"OVERIGE BATEN EN LASTEN": {
|
||||
"Betaalde schadevergoed.": {},
|
||||
"Boekverlies vaste activa": {},
|
||||
"Boekwinst van vaste activa": {},
|
||||
"K.O. regeling OB": {},
|
||||
"Kasverschillen": {},
|
||||
"Kosten loonbelasting": {},
|
||||
"Kosten omzetbelasting": {},
|
||||
"Nadelige koersverschillen": {},
|
||||
"Naheffing bedrijfsver.": {},
|
||||
"Ontvangen schadevergoed.": {},
|
||||
"Overige baten": {},
|
||||
"Overige lasten": {},
|
||||
"Voordelige koersverschil.": {}
|
||||
},
|
||||
"PERSONEELSKOSTEN": {
|
||||
"Autokostenvergoeding": {},
|
||||
"Bedrijfskleding": {},
|
||||
"Belastingvrije uitkeringen": {},
|
||||
"Bijzondere beloningen": {},
|
||||
"Congressen, seminars en symposia": {},
|
||||
"Gereedschapsgeld": {},
|
||||
"Geschenken personeel": {},
|
||||
"Gratificaties": {},
|
||||
"Inhouding pensioenpremies": {},
|
||||
"Inhouding sociale lasten": {},
|
||||
"Kantinekosten": {},
|
||||
"Lonen en salarissen": {},
|
||||
"Loonwerk": {},
|
||||
"Managementvergoedingen": {},
|
||||
"Opleidingskosten": {},
|
||||
"Oprenting stamrechtverpl.": {},
|
||||
"Overhevelingstoeslag": {},
|
||||
"Overige kostenverg.": {},
|
||||
"Overige personeelskosten": {},
|
||||
"Overige uitkeringen": {},
|
||||
"Pensioenpremies": {},
|
||||
"Provisie": {},
|
||||
"Reiskosten": {},
|
||||
"Rijwielvergoeding": {},
|
||||
"Sociale lasten": {},
|
||||
"Tanti\u00e8mes": {},
|
||||
"Thuiswerkers": {},
|
||||
"Toev. Backservice pens.verpl.": {},
|
||||
"Toevoeging pensioenverpl.": {},
|
||||
"Uitkering ziekengeld": {},
|
||||
"Uitzendkrachten": {},
|
||||
"Vakantiebonnen": {},
|
||||
"Vakantiegeld": {},
|
||||
"Vergoeding studiekosten": {},
|
||||
"Wervingskosten personeel": {}
|
||||
},
|
||||
"VERKOOPKOSTEN": {
|
||||
"Advertenties": {},
|
||||
"Afschrijving dubieuze deb.": {},
|
||||
"Beurskosten": {},
|
||||
"Etalagekosten": {},
|
||||
"Exportkosten": {},
|
||||
"Kascorrecties": {},
|
||||
"Overige verkoopkosten": {},
|
||||
"Provisie": {},
|
||||
"Reclame": {},
|
||||
"Reis en verblijfkosten": {},
|
||||
"Relatiegeschenken": {},
|
||||
"Representatiekosten": {},
|
||||
"Uitgaande vrachten": {},
|
||||
"Veilingkosten": {},
|
||||
"Verpakkingsmateriaal": {},
|
||||
"Websitekosten": {}
|
||||
},
|
||||
"VERVOERSKOSTEN": {
|
||||
"Assuranties auto's": {},
|
||||
"Brandstoffen": {},
|
||||
"Leasing auto's": {},
|
||||
"Onderhoud personenauto's": {},
|
||||
"Onderhoud vrachtauto's": {},
|
||||
"Overige vervoerskosten": {},
|
||||
"Priv\u00e9-gebruik auto's": {},
|
||||
"Wegenbelasting": {}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"OVERIGE RESULTATEN": {
|
||||
"Memoriaal": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Opbrengsten deelnemingen": {},
|
||||
"Reorganisatiekosten": {},
|
||||
"Verlies verkoop deelnem.": {},
|
||||
"Voorz. Verlies deelnem.": {},
|
||||
"Vpb bijzonder resultaat": {},
|
||||
"Vpb normaal resultaat": {},
|
||||
"Winst": {},
|
||||
"Winst bij verkoop deelnem.": {},
|
||||
"root_type": ""
|
||||
},
|
||||
"TUSSENREKENINGEN": {
|
||||
"Betaalwijze cadeaubonnen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Betaalwijze chipknip": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Betaalwijze contant": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Betaalwijze pin": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen Nederland hoog": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen Nederland laag": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen Nederland onbelast": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen Nederland overig": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen Nederland verlegd": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen binnen EU hoog": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen binnen EU laag": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen binnen EU overig": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen buiten EU hoog": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen buiten EU laag": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Inkopen buiten EU overig": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kassa 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kassa 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Netto lonen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tegenrekening Inkopen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrek. autom. betalingen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrek. autom. loonbetalingen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrek. cadeaubonbetalingen": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrekening balans": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrekening chipknip": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrekening correcties": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Tussenrekening pin": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Vraagposten": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"VASTE ACTIVA, EIGEN VERMOGEN, LANGLOPEND VREEMD VERMOGEN EN VOORZIENINGEN": {
|
||||
"EIGEN VERMOGEN": {
|
||||
"Aandelenkapitaal": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Assuranties": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Buitengewone lasten": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Giften": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Huishoudgeld": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Inkomstenbelasting": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Kapitaal": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Overige persoonlijke verplichtingen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Overige priv\u00e9-uitgaven": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Overige reserves": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Premie lijfrenteverzekeringen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Premie volksverzekeringen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Priv\u00e9-gebruik": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Priv\u00e9-opnamen/stortingen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Vermogensbelasting": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"WAO en ziekengeldverzekeringen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Wettelijke reserves": {
|
||||
"account_type": "Equity"
|
||||
}
|
||||
},
|
||||
"FINANCIELE VASTE ACTIVA EN LANGLOPENDE VORDERINGEN": {
|
||||
"FINANCIELE VASTE ACTIVA": {
|
||||
"Aandeel inkoopcombinatie": {},
|
||||
"Meerderheidsdeelnemingen": {},
|
||||
"Minderheidsdeelnemingen": {}
|
||||
},
|
||||
"LANGLOPENDE VORDERINGEN": {
|
||||
"Financieringskosten": {},
|
||||
"Financieringskosten huurkoop": {},
|
||||
"Hypotheken u/g 1": {},
|
||||
"Hypotheken u/g 2": {},
|
||||
"Hypotheken u/g 3": {},
|
||||
"Leningen u/g 1": {},
|
||||
"Leningen u/g 2": {},
|
||||
"Leningen u/g 3": {},
|
||||
"Leningen u/g 4": {},
|
||||
"Leningen u/g 5": {},
|
||||
"Vorderingen op deelnemingen": {},
|
||||
"Waarborgsommen": {}
|
||||
}
|
||||
},
|
||||
"IMMATERIELE ACTIVA": {
|
||||
"Aanschafwaarde Aanloopkosten": {},
|
||||
"Aanschafwaarde Auteursrechten": {},
|
||||
"Aanschafwaarde Drankvergunningen": {},
|
||||
"Aanschafwaarde Goodwill": {},
|
||||
"Aanschafwaarde Octrooien": {},
|
||||
"Aanschafwaarde Ontwikkelingskosten": {},
|
||||
"Aanschafwaarde Tonnagevergunningen": {},
|
||||
"Aanschafwaarde Vergunningen": {},
|
||||
"Afschrijving Aanloopkosten": {},
|
||||
"Afschrijving Auteursrechten": {},
|
||||
"Afschrijving Drankvergunningen": {},
|
||||
"Afschrijving Goodwill": {},
|
||||
"Afschrijving Licenties": {},
|
||||
"Afschrijving Octrooien": {},
|
||||
"Afschrijving Ontwikkelingskosten": {},
|
||||
"Afschrijving Tonnagevergunningen": {},
|
||||
"Afschrijving Vergunningen": {}
|
||||
},
|
||||
"LANGLOPENDE SCHULDEN EN AFLOSSINGEN": {
|
||||
"AFLOSSINGEN": {
|
||||
"Huurkoopverplichtingen": {},
|
||||
"Hypotheek o/g 1": {},
|
||||
"Hypotheek o/g 2": {},
|
||||
"Hypotheek o/g 3": {},
|
||||
"Hypotheek o/g 4": {},
|
||||
"Hypotheek o/g 5": {},
|
||||
"Lease-verplichtingen": {}
|
||||
},
|
||||
"LANGLOPENDE SCHULDEN": {
|
||||
"Huurkoopverplichtingen": {},
|
||||
"Hypotheken o/g 1": {},
|
||||
"Hypotheken o/g 2": {},
|
||||
"Hypotheken o/g 3": {},
|
||||
"Hypotheken o/g 4": {},
|
||||
"Hypotheken o/g 5": {},
|
||||
"Lease-verplichtingen": {},
|
||||
"Leningen o/g 1": {},
|
||||
"Leningen o/g 2": {},
|
||||
"Leningen o/g 3": {},
|
||||
"Leningen o/g 4": {},
|
||||
"Leningen o/g 5": {},
|
||||
"Rekening-courant directie": {}
|
||||
}
|
||||
},
|
||||
"MACHINES EN INVENTARIS": {
|
||||
"INVENTARIS": {
|
||||
"Aanschafwaarde Bedrijfsinventaris": {},
|
||||
"Aanschafwaarde Fabrieksinventaris": {},
|
||||
"Aanschafwaarde Gereedschappen": {},
|
||||
"Aanschafwaarde Kantine-inventaris": {},
|
||||
"Aanschafwaarde Kantoorinventaris": {},
|
||||
"Aanschafwaarde Kantoormachines": {},
|
||||
"Aanschafwaarde Magazijninventaris": {},
|
||||
"Afschrijving Bedrijfsinventaris": {},
|
||||
"Afschrijving Fabrieksinventaris": {},
|
||||
"Afschrijving Gereedschappen": {},
|
||||
"Afschrijving Kantine-inventaris": {},
|
||||
"Afschrijving Kantoorinventaris": {},
|
||||
"Afschrijving Kantoormachines": {},
|
||||
"Afschrijving Magazijninventaris": {}
|
||||
},
|
||||
"MACHINES": {
|
||||
"Aanschafwaarde Machines 1": {},
|
||||
"Aanschafwaarde Machines 2": {},
|
||||
"Aanschafwaarde Machines 3": {},
|
||||
"Aanschafwaarde Machines 4": {},
|
||||
"Aanschafwaarde Machines 5": {},
|
||||
"Afschrijving Machines 1": {},
|
||||
"Afschrijving Machines 2": {},
|
||||
"Afschrijving Machines 3": {},
|
||||
"Afschrijving Machines 4": {},
|
||||
"Afschrijving Machines 5": {}
|
||||
}
|
||||
},
|
||||
"ONROERENDE GOEDEREN": {
|
||||
"Aanschafwaarde Aanloopkosten": {},
|
||||
"Aanschafwaarde Bedrijfsgebouwen": {},
|
||||
"Aanschafwaarde Gebouwen": {},
|
||||
"Aanschafwaarde Grondverbetering": {},
|
||||
"Aanschafwaarde Landerijen": {},
|
||||
"Aanschafwaarde Ondergrond gebouwen": {},
|
||||
"Aanschafwaarde Pachtersinvesteringen": {},
|
||||
"Aanschafwaarde Parkeerplaats": {},
|
||||
"Aanschafwaarde Verbouwingen": {},
|
||||
"Aanschafwaarde Winkels": {},
|
||||
"Aanschafwaarde Woon-winkelhuis": {},
|
||||
"Afschrijving Aanloopkosten": {},
|
||||
"Afschrijving Bedrijfsgebouwen": {},
|
||||
"Afschrijving Gebouwen": {},
|
||||
"Afschrijving Grondverbetering": {},
|
||||
"Afschrijving Pachtersinvesteringen": {},
|
||||
"Afschrijving Parkeerplaats": {},
|
||||
"Afschrijving Verbouwingen": {},
|
||||
"Afschrijving Winkels": {},
|
||||
"Afschrijving Woon-winkelhuis": {}
|
||||
},
|
||||
"VERVOERMIDDELEN": {
|
||||
"Aanschafwaarde Aanhangwagens": {},
|
||||
"Aanschafwaarde Heftrucks": {},
|
||||
"Aanschafwaarde Personenauto's": {},
|
||||
"Aanschafwaarde Rijwielen en bromfietsen": {},
|
||||
"Aanschafwaarde Vrachtauto's": {},
|
||||
"Afschrijving Aanhangwagens": {},
|
||||
"Afschrijving Heftrucks": {},
|
||||
"Afschrijving Personenauto's": {},
|
||||
"Afschrijving Rijwielen en bromfietsen": {},
|
||||
"Afschrijving Vrachtauto's": {}
|
||||
},
|
||||
"VOORZIENINGEN": {
|
||||
"Assurantie eigen risico": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Backservice pensioenverpl.": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Egalisatierekening WIR": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Egalisatieres. grootonderh.": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Garantieverplichtingen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Latente belastingverpl.": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Pens.voorz. eigen beheer": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Pensioenverplichtingen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Stamrechtverplichtingen": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Vervangingsreserve": {
|
||||
"account_type": "Equity"
|
||||
},
|
||||
"Voorziening deelnemingen": {
|
||||
"account_type": "Equity"
|
||||
}
|
||||
},
|
||||
"root_type": ""
|
||||
},
|
||||
"VERKOOPRESULTATEN": {
|
||||
"Diensten fabric. 0% niet-EU": {},
|
||||
"Diensten fabricage 0% EU": {},
|
||||
"Diensten fabricage hoog": {},
|
||||
"Diensten fabricage laag": {},
|
||||
"Diensten fabricage overig": {},
|
||||
"Diensten handel 0% EU": {},
|
||||
"Diensten handel 0% niet-EU": {},
|
||||
"Diensten handel hoog tarief": {},
|
||||
"Diensten handel laag tarief": {},
|
||||
"Verkopen Fabric. 0% niet-EU": {},
|
||||
"Verkopen Handel 0% niet-EU": {},
|
||||
"Verkopen fabric. 0 % EU": {},
|
||||
"Verkopen fabricage hoog": {},
|
||||
"Verkopen fabricage laag": {},
|
||||
"Verkopen fabricage overig": {},
|
||||
"Verkopen handel 0% EU": {},
|
||||
"Verkopen handel hoog": {},
|
||||
"Verkopen handel laag": {},
|
||||
"Verkopen handel overig": {},
|
||||
"Verleende Kredietbep. fabricage": {},
|
||||
"Verleende Kredietbep. handel": {},
|
||||
"root_type": ""
|
||||
},
|
||||
"VOORRAAD GEREED PRODUCT EN ONDERHANDEN WERK": {
|
||||
"Betalingskort. crediteuren": {},
|
||||
"Garantiekosten": {},
|
||||
"Hulpmaterialen": {},
|
||||
"Inkomende vrachten": {},
|
||||
"Inkoop import buiten EU hoog": {},
|
||||
"Inkoop import buiten EU laag": {},
|
||||
"Inkoop import buiten EU overig": {},
|
||||
"Inkoopbonussen": {},
|
||||
"Inkoopkosten": {},
|
||||
"Inkoopprovisie": {},
|
||||
"Inkopen BTW verlegd": {},
|
||||
"Inkopen EU hoog tarief": {},
|
||||
"Inkopen EU laag tarief": {},
|
||||
"Inkopen EU overig": {},
|
||||
"Inkopen hoog": {},
|
||||
"Inkopen laag": {},
|
||||
"Inkopen nul": {},
|
||||
"Inkopen overig": {},
|
||||
"Invoerkosten": {},
|
||||
"Kosten inkoopvereniging": {},
|
||||
"Kostprijs omzet grondstoffen": {},
|
||||
"Kostprijs omzet handelsgoederen": {},
|
||||
"Onttrekking uitgev.garantie": {},
|
||||
"Priv\u00e9-gebruik goederen": {},
|
||||
"Tegenrekening inkoop": {},
|
||||
"Toev. Voorz. incour. grondst.": {},
|
||||
"Toevoeging garantieverpl.": {},
|
||||
"Toevoeging voorz. incour. handelsgoed.": {},
|
||||
"Uitbesteed werk": {},
|
||||
"Voorz. Incourourant grondst.": {},
|
||||
"Voorz.incour. handelsgoed.": {},
|
||||
"root_type": ""
|
||||
},
|
||||
"VOORRAAD GRONDSTOFFEN, HULPMATERIALEN EN HANDELSGOEDEREN": {
|
||||
"Emballage": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Gereed product 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Gereed product 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Goederen 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Goederen 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Goederen in consignatie": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Goederen onderweg": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Grondstoffen 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Grondstoffen 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Halffabrikaten 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Halffabrikaten 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Hulpstoffen 1": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Hulpstoffen 2": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kantoorbenodigdheden": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Onderhanden werk": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Verpakkingsmateriaal": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Zegels": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"root_type": ""
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"country_code": "fr",
|
||||
"name": "France - Plan Comptable G\u00e9n\u00e9ral",
|
||||
"name": "France - Plan Comptable General",
|
||||
"tree": {
|
||||
"1-Comptes de Capitaux": {
|
||||
"10-Capital et R\u00e9serves": {
|
||||
|
@ -2,7 +2,394 @@
|
||||
"country_code": "gt",
|
||||
"name": "Guatemala - Cuentas",
|
||||
"tree": {
|
||||
"02 - Pasivos": {
|
||||
"Activos": {
|
||||
"Activo Corriente": {
|
||||
"Activos Biol\u00f3gicos": {
|
||||
"Activos Biol\u00f3gicos a Valor Razonable": {
|
||||
"Animales": {
|
||||
"account_number": "1.5.2.1",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Plantas": {
|
||||
"account_number": "1.5.2.2",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.5.2",
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"Activos Biol\u00f3gicos al Costo": {
|
||||
"account_number": "1.5.1",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.5",
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"Activos Corrientes Adicionales": {
|
||||
"Activos Diferidos o Restringidos": {
|
||||
"Cr\u00e9dito Fiscal (IVA Por Cobrar)": {
|
||||
"account_number": "1.1.2.1",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.1.2",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Inversiones Corrientes no Clasificados como Equivalentes de Caja y Bancos": {
|
||||
"account_number": "1.1.1"
|
||||
},
|
||||
"account_number": "1.1",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Activos Devengables y Otros Activos": {
|
||||
"Activos Adicionales y Otros": {
|
||||
"account_number": "1.6.6",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Cobrables Relacionados con Impuestos": {
|
||||
"account_number": "1.6.2",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Contratos de Construccion": {
|
||||
"account_number": "1.6.4",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Costos de Montaje": {
|
||||
"account_number": "1.6.5",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Pagos Anticipados y Otros Activos Circulantes": {
|
||||
"Seguro Pagado Anticipadamente": {
|
||||
"account_number": "1.6.1.0",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"account_number": "1.6.1",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Proveedores de Servicio": {
|
||||
"account_number": "1.6.3",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.6",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Activos Financieros": {
|
||||
"Activos Financieros Clasificados por Designaci\u00f3n": {
|
||||
"account_number": "1.4.6",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Activos Financieros Derivados": {
|
||||
"account_number": "1.4.3",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Inversion o Participaci\u00f3n Accionaria en Empresas Afiliadas": {
|
||||
"account_number": "1.4.1",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Inversiones Burs\u00e1tiles e Instrumentos Financieros": {
|
||||
"account_number": "1.4.2",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Otros Activos Financieros": {
|
||||
"account_number": "1.4.4",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Provisi\u00f3n por Riesgo de Cr\u00e9dito (agregado) (Contra-activo)": {
|
||||
"account_number": "1.4.5",
|
||||
"account_type": "Round Off",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.4",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Activos Intangibles": {
|
||||
"account_number": "1.3",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Caja y Equivalentes": {
|
||||
"Caja": {
|
||||
"account_number": "1.9.1",
|
||||
"account_type": "Cash",
|
||||
"is_group": 1
|
||||
},
|
||||
"Equivalentes de Efectivo (Bancos)": {
|
||||
"Bancos Internacionales": {
|
||||
"HSBC": {
|
||||
"account_number": "1.9.2.2.1",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_number": "1.9.2.2",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Bancos Nacionales": {
|
||||
"Banco Agromercantil de Guatemala": {
|
||||
"account_number": "1.9.2.1.2",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco G&T Continental": {
|
||||
"account_number": "1.9.2.1.5",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco Industrial": {
|
||||
"account_number": "1.9.2.1.1",
|
||||
"account_type": "Bank",
|
||||
"is_group": 1
|
||||
},
|
||||
"Banco Internacional": {
|
||||
"account_number": "1.9.2.1.6",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco Prom\u00e9rica": {
|
||||
"account_number": "1.9.2.1.3",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco de Am\u00e9rica Central": {
|
||||
"account_number": "1.9.2.1.4",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco de Desarrollo Rural": {
|
||||
"account_number": "1.9.2.1.7",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Banco de los Trabajadores": {
|
||||
"account_number": "1.9.2.1.8",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Vivibanco": {
|
||||
"account_number": "1.9.2.1.9",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_number": "1.9.2.1",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Cadena de Bloques (Blockchain)": {
|
||||
"Billetera Bitcoin 1234567890abcdefg": {
|
||||
"account_number": "1.9.2.3.1",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_number": "1.9.2.3",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_number": "1.9.2",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Inversiones a Corto Plazo": {
|
||||
"account_number": "1.9.3",
|
||||
"account_type": "Bank",
|
||||
"is_group": 1
|
||||
},
|
||||
"Otros Equivalentes de Caja y Bancos": {
|
||||
"account_number": "1.9.4",
|
||||
"account_type": "Cash",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.9",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Cobrables": {
|
||||
"Activos bajo Contrato": {
|
||||
"account_number": "1.8.2",
|
||||
"account_type": "Receivable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Ajustes": {
|
||||
"account_number": "1.8.4",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"Otras Cuentas por Cobrar": {
|
||||
"Cuentas Por Cobrar Compa\u00f1\u00edas Afiliadas": {
|
||||
"Compa\u00f1\u00eda subsidiaria (EJEMPLO)": {
|
||||
"account_number": "1.8.3.2.1",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_number": "1.8.3.2",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Cuentas por Cobrar a Empleados": {
|
||||
"Prestamo EJEMPLO": {
|
||||
"account_number": "1.8.3.3.1",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_number": "1.8.3.3",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Cuentas por Cobrar a Otras Entidades no Afiliadas": {
|
||||
"Compa\u00f1\u00eda No Afiliada (EJEMPLO)": {
|
||||
"account_number": "1.8.3.1.1",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_number": "1.8.3.1",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_number": "1.8.3",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Ventas al Cr\u00e9dito": {
|
||||
"account_number": "1.8.1",
|
||||
"account_type": "Receivable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.8",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"Impuestos por Cobrar": {
|
||||
"Retenciones de IVA recibidas": {}
|
||||
},
|
||||
"Inventario": {
|
||||
"Art\u00edculos de Inventario Adicionales": {
|
||||
"account_number": "1.7.8",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Combustibles": {
|
||||
"account_number": "1.7.5",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Inventarios Pignorados Como Garant\u00eda de Pasivo": {
|
||||
"account_number": "1.7.10",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Inventarios a Valor Razonable Menos Costos de Venta": {
|
||||
"account_number": "1.7.11",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Materia Prima": {
|
||||
"account_number": "1.7.1",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Mercader\u00eda (Mercanc\u00edas)": {
|
||||
"account_number": "1.7.2",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Otros Inventarios": {
|
||||
"Merma o Ajuste de Inventario": {
|
||||
"account_number": "1.7.9.1",
|
||||
"account_type": "Stock Adjustment",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.7.9",
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"Producto Terminado": {
|
||||
"account_number": "1.7.7",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Repuestos": {
|
||||
"Respuestos en Transito": {
|
||||
"account_number": "1.7.4.0",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.7.4",
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"Suministros de Producci\u00f3n y Consumibles": {
|
||||
"account_number": "1.7.3",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"Trabajo en Progeso": {
|
||||
"account_number": "1.7.6",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.7",
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"Inversion en Propiedades": {
|
||||
"Inversion Inmobiliaria Bajo Construccion": {
|
||||
"account_number": "1.2.1",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"Inversion Inmobiliaria Construida": {
|
||||
"account_number": "1.2.2",
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1.2",
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"account_number": "1.0"
|
||||
},
|
||||
"No Corriente": {
|
||||
"Activos Fijos": {
|
||||
"account_type": "Fixed Asset"
|
||||
},
|
||||
"Cargos Diferidos": {}
|
||||
},
|
||||
"account_number": "1",
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"Costos": {
|
||||
"Costo de Ventas": {
|
||||
"account_type": "Cost of Goods Sold"
|
||||
},
|
||||
"Costos Incluidos en la Valuaci\u00f3n": {
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
},
|
||||
"Merma o Ajuste de Inventario": {
|
||||
"account_type": "Stock Adjustment"
|
||||
},
|
||||
"account_number": "5",
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"Gastos": {
|
||||
"Alquileres": {},
|
||||
"Depreciaciones": {
|
||||
"account_type": "Depreciation"
|
||||
},
|
||||
"Gastos Diversos": {},
|
||||
"Gastos de Personal": {},
|
||||
"Honorarios Profesionales": {},
|
||||
"Mantenimiento": {},
|
||||
"Seguros": {},
|
||||
"Servicios B\u00e1sicos": {},
|
||||
"account_number": "6",
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"Ingresos": {
|
||||
"Productos": {},
|
||||
"Servicios": {},
|
||||
"account_number": "4",
|
||||
"root_type": "Income"
|
||||
},
|
||||
"Otros Gastos y Productos Financieros": {
|
||||
"Otros Gastos": {
|
||||
"Otros Gastos y Productos Financieros 2": {
|
||||
"Intereses 1": {},
|
||||
"Otros Gastos Financieros 1": {}
|
||||
}
|
||||
},
|
||||
"Otros Ingresos": {
|
||||
"Otros Gastos y Productos Financieros 1": {
|
||||
"Intereses": {},
|
||||
"Otros Gastos Financieros": {}
|
||||
}
|
||||
},
|
||||
"account_number": "7",
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"Pasivos": {
|
||||
"Pasivo Corriente": {
|
||||
"Acreedores 1": {
|
||||
"account_type": "Payable"
|
||||
@ -22,329 +409,14 @@
|
||||
"Acreedores": {},
|
||||
"Provisi\u00f3n para Indemnizaciones": {}
|
||||
},
|
||||
"account_number": "2",
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"03 - Patrimonio": {
|
||||
"Patrimonio": {
|
||||
"Capital": {},
|
||||
"Resultados del Ejercicio": {},
|
||||
"Utilidades Retenidas": {},
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"04 - Ingresos": {
|
||||
"Productos": {},
|
||||
"Servicios": {},
|
||||
"root_type": "Income"
|
||||
},
|
||||
"05 - Costos": {
|
||||
"Costo de Ventas": {
|
||||
"account_type": "Cost of Goods Sold"
|
||||
},
|
||||
"Costos Incluidos en la Valuaci\u00f3n": {
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
},
|
||||
"Merma o Ajuste de Inventario": {
|
||||
"account_type": "Stock Adjustment"
|
||||
},
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"06 - Gastos": {
|
||||
"Alquileres": {},
|
||||
"Depreciaciones": {
|
||||
"account_type": "Depreciation"
|
||||
},
|
||||
"Gastos Diversos": {},
|
||||
"Gastos de Personal": {},
|
||||
"Honorarios Profesionales": {},
|
||||
"Mantenimiento": {},
|
||||
"Seguros": {},
|
||||
"Servicios B\u00e1sicos": {},
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"07 - Otros Gastos y Productos Financieros": {
|
||||
"Otros Gastos": {
|
||||
"Otros Gastos y Productos Financieros 2": {
|
||||
"Intereses 1": {},
|
||||
"Otros Gastos Financieros 1": {}
|
||||
}
|
||||
},
|
||||
"Otros Ingresos": {
|
||||
"Otros Gastos y Productos Financieros 1": {
|
||||
"Intereses": {},
|
||||
"Otros Gastos Financieros": {}
|
||||
}
|
||||
},
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"1 - Activos": {
|
||||
"1. Activo Corriente": {
|
||||
"1.10 Activos Corrientes Adicionales": {
|
||||
"1.10.1 Inversiones Corrientes no Clasificados como Equivalentes de Caja y Bancos": {},
|
||||
"1.10.2 Activos Diferidos o Restringidos": {
|
||||
"1.10.2.1 Cr\u00e9dito Fiscal (IVA Por Cobrar)": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.2 Inversion en Propiedades": {
|
||||
"1.2.1 Inversion Inmobiliaria Bajo Construccion": {
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.2.2 Inversion Inmobiliaria Construida": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.3 Activos Intangibles": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4 Activos Financieros": {
|
||||
"1.4.1 Inversion o Participaci\u00f3n Accionaria en Empresas Afiliadas": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4.2 Inversiones Burs\u00e1tiles e Instrumentos Financieros": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4.3 Activos Financieros Derivados": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4.4 Otros Activos Financieros": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4.5 Provisi\u00f3n por Riesgo de Cr\u00e9dito (agregado) (Contra-activo)": {
|
||||
"account_type": "Round Off",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.4.6 Activos Financieros Clasificados por Designaci\u00f3n": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.5 Activos Biol\u00f3gicos": {
|
||||
"1.5.1 Activos Biol\u00f3gicos al Costo": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.5.2 Activos Biol\u00f3gicos a Valor Razonable": {
|
||||
"1.5.2.1 Animales": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.5.2.2 Plantas": {
|
||||
"1.5.2.2.1 Division productiva 1er nivel EJEMPLO": {
|
||||
"1.5.2.2.1.1 Division Productiva 2do nivel EJEMPLO": {
|
||||
"1.5.2.2.1.1.1 Division Productiva 3er Nivel EJEMPLO": {
|
||||
"1.5.2.2.1.1.1.1 Divisi\u00f3n Productiva 4\u00ba Nivel EJEMPLO": {},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"1.6 Activos Devengables y Otros Activos": {
|
||||
"1.6.1 Pagos Anticipados y Otros Activos Circulantes": {
|
||||
"1.6.1.0 Seguro Pagado Anticipadamente": {
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.6.2 Cobrables Relacionados con Impuestos": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.6.3 Proveedores de Servicio": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.6.4 Contratos de Construccion": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.6.5 Costos de Montaje": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.6.6 Activos Adicionales y Otros": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Chargeable"
|
||||
},
|
||||
"1.7 Inventario": {
|
||||
"1.7.1 Materia Prima": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.10 Inventarios Pignorados Como Garant\u00eda de Pasivo": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.11 Inventarios a Valor Razonable Menos Costos de Venta": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.2 Mercader\u00eda (Mercanc\u00edas)": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.3 Suministros de Producci\u00f3n y Consumibles": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.4 Repuestos": {
|
||||
"1.7.4.0 Respuestos en Transito": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"1.7.5 Combustibles": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.6 Trabajo en Progeso": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.7 Producto Terminado": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.8 Art\u00edculos de Inventario Adicionales": {
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.7.9 Otros Inventarios": {
|
||||
"1.7.9.1 Merma o Ajuste de Inventario": {
|
||||
"account_type": "Stock Adjustment",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"1.8 Cobrables": {
|
||||
"1.8.1 Ventas al Cr\u00e9dito": {
|
||||
"account_type": "Receivable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.8.2 Activos bajo Contrato": {
|
||||
"account_type": "Receivable",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.8.3 Otras Cuentas por Cobrar": {
|
||||
"1.8.3.1 Cuentas por Cobrar a Otras Entidades no Afiliadas": {
|
||||
"1.8.3.1.1 Compa\u00f1\u00eda No Afiliada (EJEMPLO)": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"1.8.3.2 Cuentas Por Cobrar Compa\u00f1\u00edas Afiliadas": {
|
||||
"1.8.3.2.1 Compa\u00f1\u00eda subsidiaria (EJEMPLO)": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"1.8.3.3 Cuentas por Cobrar a Empleados": {
|
||||
"1.8.3.3.1 Prestamo EJEMPLO": {
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"1.8.4 Ajustes": {
|
||||
"account_type": "Chargeable",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"1.9 Caja y Equivalentes": {
|
||||
"1.9.1 Caja": {
|
||||
"account_type": "Cash",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.9.2 Equivalentes de Efectivo (Bancos)": {
|
||||
"1.9.2.1 Bancos Nacionales": {
|
||||
"1.9.2.1.1 Banco Industrial": {
|
||||
"account_type": "Bank",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.9.2.1.2 Banco Agromercantil de Guatemala": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.3 Banco Prom\u00e9rica": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.4 Banco de Am\u00e9rica Central": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.5 Banco G&T Continental": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.6 Banco Internacional": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.7 Banco de Desarrollo Rural": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.8 Banco de los Trabajadores": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.1.9 Vivibanco": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.2 Bancos Internacionales": {
|
||||
"1.9.2.2.1 HSBC": {
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.2.3 Cadena de Bloques (Blockchain)": {
|
||||
"1.9.2.3.1 Billetera Bitcoin 1234567890abcdefg": {
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1.9.3 Inversiones a Corto Plazo": {
|
||||
"account_type": "Bank",
|
||||
"is_group": 1
|
||||
},
|
||||
"1.9.4 Otros Equivalentes de Caja y Bancos": {
|
||||
"account_type": "Cash",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"Impuestos por Cobrar": {
|
||||
"Retenciones de IVA recibidas": {}
|
||||
}
|
||||
},
|
||||
"No Corriente": {
|
||||
"Activos Fijos": {
|
||||
"account_type": "Fixed Asset"
|
||||
},
|
||||
"Cargos Diferidos": {}
|
||||
},
|
||||
"account_number": "3",
|
||||
"root_type": "Asset"
|
||||
}
|
||||
}
|
||||
|
@ -527,7 +527,7 @@
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"5. SZ\u00c1MLAOSZT\u00c1LY K\u00d6LTS\u00c9GNEMEK": {
|
||||
"51 - 53 ANYAGJELLEG\u00db R\u00c1FORD\u00cdT\u00c1SOK ": {
|
||||
"51 - 53. ANYAGJELLEG\u00db R\u00c1FORD\u00cdT\u00c1SOK ": {
|
||||
"51. ANYAGK\u00d6LTS\u00c9G": {
|
||||
"511. V\u00e1s\u00e1rolt anyagok k\u00f6lts\u00e9gei ": {
|
||||
"5111. Alapanyag k\u00f6lts\u00e9gek": {},
|
||||
@ -619,22 +619,7 @@
|
||||
"582. Saj\u00e1t el\u0151\u00e1ll\u00edt\u00e1s\u00fa eszk\u00f6z\u00f6k aktiv\u00e1lt \u00e9rt\u00e9ke": {},
|
||||
"589. Aktiv\u00e1lt saj\u00e1t teljes\u00edtm\u00e9nyek \u00e1tvezet\u00e9si sz\u00e1mla": {}
|
||||
},
|
||||
"59. K\u00d6LTS\u00c9GNEM ELLENSZ\u00c1MLA (els\u0151dleges k\u00f6lts\u00e9ghely-k\u00f6lts\u00e9gvisel\u0151 elsz\u00e1mol\u00f3s eset\u00e9n) ": {
|
||||
"is_group": 1
|
||||
},
|
||||
"59. K\u00d6LTS\u00c9GNEM \u00c1TVEZET\u00c9SI SZ\u00c1MLA (els\u0151dleges k\u00f6lts\u00e9gnem-elsz\u00e1mol\u00e1s eset\u00e9n)": {
|
||||
"is_group": 1
|
||||
},
|
||||
"59. K\u00d6LTS\u00c9GNEM \u00c1TVEZET\u00c9SI SZ\u00c1MLA (els\u0151dleges k\u00f6lts\u00e9gnem-elsz\u00e1mol\u00e1s eset\u00e9n, kiz\u00e1r\u00f3lag \u00f6sszk\u00f6lts\u00e9g elj\u00e1r\u00e1ssal)": {
|
||||
"59/51. Anyagk\u00f6lts\u00e9g \u00e1tvezet\u00e9si sz\u00e1mla": {},
|
||||
"59/52. Ig\u00e9nybe vett szolg\u00e1ltat\u00e1sok k\u00f6lts\u00e9gei \u00e1tvezet\u00e9si sz\u00e1mla ": {},
|
||||
"59/53. Egy\u00e9b szolg\u00e1ltat\u00e1sok k\u00f6lts\u00e9gei \u00e1tvezet\u00e9si sz\u00e1mla ": {},
|
||||
"59/54. B\u00e9rk\u00f6lts\u00e9g \u00e1tvezet\u00e9si sz\u00e1mla": {},
|
||||
"59/55. Szem\u00e9lyi jelleg\u0171 egy\u00e9b kifizet\u00e9sek \u00e1tvezet\u00e9si sz\u00e1mla ": {},
|
||||
"59/56. B\u00e9rj\u00e1rul\u00e9kok \u00e1tvezet\u00e9si sz\u00e1mla": {},
|
||||
"59/57. \u00c9rt\u00e9kcs\u00f6kken\u00e9si le\u00edr\u00e1s \u00e1tvezet\u00e9si sz\u00e1mla ": {}
|
||||
},
|
||||
"59. K\u00d6LTS\u00c9GNEM \u00c1TVEZET\u00c9SI SZ\u00c1MLA (kiz\u00e1r\u00f3lag k\u00f6lts\u00e9gnem-elsz\u00e1mol\u00e1s \u00e9s forgalmi k\u00f6lts\u00e9g elj\u00e1r\u00e1ssal)": {
|
||||
"59. K\u00d6LTS\u00c9GNEM \u00c1TVEZET\u00c9SI SZ\u00c1MLA": {
|
||||
"is_group": 1
|
||||
},
|
||||
"root_type": "Expense"
|
||||
|
@ -2,358 +2,686 @@
|
||||
"country_code": "id",
|
||||
"name": "Indonesia - Chart of Accounts",
|
||||
"tree": {
|
||||
"1000.0000 Aktiva": {
|
||||
"1100.0000 Aktiva Lancar": {
|
||||
"1110.0000 Kas": {
|
||||
"1111.000 Kas Rupiah": {
|
||||
"1111.0010 Kas Kecil": {
|
||||
"account_type": "Cash"
|
||||
"Aktiva": {
|
||||
"Aktiva Lancar": {
|
||||
"Akun sementara": {
|
||||
"Pembukaan sementara": {
|
||||
"account_number": "1171.000",
|
||||
"account_type": "Temporary"
|
||||
},
|
||||
"1111.0020 Kas Besar": {
|
||||
"account_type": "Cash"
|
||||
"account_number": "1170.000"
|
||||
},
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"1112.000 Kas Mata Uang Lain": {
|
||||
"1112.0010 Kas USD": {
|
||||
"account_type": "Cash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1120.000 Bank ": {
|
||||
"1121.000 Bank Rupiah": {
|
||||
"Bank ": {
|
||||
"Bank Other Currency": {
|
||||
"account_number": "1122.000",
|
||||
"is_group": 1
|
||||
},
|
||||
"1122.000 Bank Other Currency": {
|
||||
"Bank Rupiah": {
|
||||
"account_number": "1121.000",
|
||||
"is_group": 1
|
||||
},
|
||||
"account_number": "1120.000",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"1130.000 Piutang": {
|
||||
"1131.000 Piutang Dagang": {
|
||||
"1131.0010 Piutang Dagang": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
"Biaya di Bayar di Muka": {
|
||||
"Biaya di Bayar di Muka": {
|
||||
"Biaya di Bayar di Muka": {
|
||||
"Biaya d Bayar di Muka": {
|
||||
"account_number": "1151.00111"
|
||||
},
|
||||
"1132.000 Piutang Lain lain": {
|
||||
"1132.001 Piutang Lain-lain 1": {
|
||||
"account_type": "Receivable"
|
||||
}
|
||||
}
|
||||
"account_number": "1151.001"
|
||||
},
|
||||
"1140.000 Persediaan Barang": {
|
||||
"1141.000 Persediaan Barang": {
|
||||
"account_number": "1151.000"
|
||||
},
|
||||
"account_number": "1150.000"
|
||||
},
|
||||
"Kas": {
|
||||
"Kas Mata Uang Lain": {
|
||||
"Kas USD": {
|
||||
"account_number": "1112.0010",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_number": "1112.000"
|
||||
},
|
||||
"Kas Rupiah": {
|
||||
"Kas Besar": {
|
||||
"account_number": "1111.0020",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"Kas Kecil": {
|
||||
"account_number": "1111.0010",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_number": "1111.000",
|
||||
"account_type": "Cash"
|
||||
},
|
||||
"account_number": "1110.0000"
|
||||
},
|
||||
"Pendapatan Yang Akan di Terima": {
|
||||
"Pendapatan Yang di Terima": {
|
||||
"Pendapatan Yang Akan di Terima": {
|
||||
"account_number": "1161.001"
|
||||
},
|
||||
"account_number": "1161.000"
|
||||
},
|
||||
"account_number": "1160.000"
|
||||
},
|
||||
"Persediaan Barang": {
|
||||
"Persediaan Barang": {
|
||||
"account_number": "1141.000",
|
||||
"account_type": "Stock",
|
||||
"is_group": 1
|
||||
},
|
||||
"1142.000 Uang Muka Pembelian": {
|
||||
"1142.001 Uang Muka Pembelian": {
|
||||
"Uang Muka Pembelian": {
|
||||
"Uang Muka Pembelian": {
|
||||
"account_number": "1142.001",
|
||||
"account_type": "Bank"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1150.000 Biaya di Bayar di Muka": {
|
||||
"1151.000 Biaya di Bayar di Muka": {
|
||||
"1151.001 Biaya di Bayar di Muka": {
|
||||
"1151.00111 Biaya d Bayar di Muka": {}
|
||||
}
|
||||
}
|
||||
"account_number": "1142.000"
|
||||
},
|
||||
"1160.000 Pendapatan Yang Akan di Terima": {
|
||||
"1161.000 Pendapatan Yang di Terima": {
|
||||
"1161.001 Pendapatan Yang Akan di Terima": {}
|
||||
}
|
||||
"account_number": "1140.000"
|
||||
},
|
||||
"1170.000 Akun sementara": {
|
||||
"1171.000 Pembukaan sementara": {
|
||||
"account_type": "Temporary"
|
||||
}
|
||||
}
|
||||
"Piutang": {
|
||||
"Piutang Dagang": {
|
||||
"Piutang Dagang": {
|
||||
"account_number": "1131.0010",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"1200.000 Aktiva Tetap": {
|
||||
"1210.000 Aktiva": {
|
||||
"1211.000 Aktiva": {
|
||||
"1211.001 Aktiva": {
|
||||
"account_number": "1131.000"
|
||||
},
|
||||
"Piutang Lain lain": {
|
||||
"Piutang Lain-lain 1": {
|
||||
"account_number": "1132.001",
|
||||
"account_type": "Receivable"
|
||||
},
|
||||
"account_number": "1132.000"
|
||||
},
|
||||
"account_number": "1130.000"
|
||||
},
|
||||
"account_number": "1100.0000"
|
||||
},
|
||||
"Aktiva Tetap": {
|
||||
"Aktiva": {
|
||||
"Aktiva": {
|
||||
"Aktiva": {
|
||||
"account_number": "1211.001",
|
||||
"account_type": "Fixed Asset"
|
||||
}
|
||||
},
|
||||
"1212.000 Akumulasi Penyusutan Aktiva": {
|
||||
"1212.001 Akumulasi Penyusutan Aktiva": {
|
||||
"account_number": "1211.000"
|
||||
},
|
||||
"Akumulasi Penyusutan Aktiva": {
|
||||
"Akumulasi Penyusutan Aktiva": {
|
||||
"account_number": "1212.001",
|
||||
"account_type": "Accumulated Depreciation"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1230.000 Investasi": {
|
||||
"1231.000 Investasi": {
|
||||
"1231.001 Investai Saham": {
|
||||
"1231.0011 Investasi Saham": {}
|
||||
"account_number": "1212.000"
|
||||
},
|
||||
"1231.002 Investasi Perumahan": {
|
||||
"1231.0021 Investasi Perumahan": {}
|
||||
"account_number": "1210.000"
|
||||
},
|
||||
"1231.003 Deposito": {
|
||||
"Investasi": {
|
||||
"Investasi": {
|
||||
"Deposito": {
|
||||
"account_number": "1231.003",
|
||||
"is_group": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Investai Saham": {
|
||||
"Investasi Saham": {
|
||||
"account_number": "1231.0011"
|
||||
},
|
||||
"account_number": "1231.001"
|
||||
},
|
||||
"Investasi Perumahan": {
|
||||
"Investasi Perumahan": {
|
||||
"account_number": "1231.0021"
|
||||
},
|
||||
"account_number": "1231.002"
|
||||
},
|
||||
"account_number": "1231.000"
|
||||
},
|
||||
"account_number": "1230.000"
|
||||
},
|
||||
"account_number": "1200.000"
|
||||
},
|
||||
"account_number": "1000.0000",
|
||||
"root_type": "Asset"
|
||||
},
|
||||
"2000.000 Passiva": {
|
||||
"2100.000 Pasiva Lancar": {
|
||||
"2110.000 Hutang Dagang": {
|
||||
"2111.000 Hutang Dagang Rupiah": {
|
||||
"2111.001 Hutang Dagang Dalam Negeri": {
|
||||
"account_type": "Payable"
|
||||
"Beban": {
|
||||
"Beban Lain lain": {
|
||||
"Beban Lain lain": {
|
||||
"Beban Adm Bank": {
|
||||
"account_number": "5510.001"
|
||||
},
|
||||
"2111.002 Hutang Dagang Luar Negeri": {
|
||||
"account_type": "Payable"
|
||||
"Beban Bunga Kredit Rekening Koran Bank": {
|
||||
"account_number": "5510.004"
|
||||
},
|
||||
"2111.003 Hutang Dagang Biaya Kirim Dalam Negeri": {
|
||||
"account_type": "Payable"
|
||||
"Beban Bunga Pinjaman Pada Pihak Ke 3": {
|
||||
"account_number": "5510.005"
|
||||
},
|
||||
"2111.004 HUtang Dagang Biaya Kirim Luar Negeri": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
"Beban Notaris Dan ADM Kredit Bank": {
|
||||
"account_number": "5510.003"
|
||||
},
|
||||
"2112.000 Hutang Dagang Other Currency": {
|
||||
"2112.001 Hutang Dagang Luar Negeri (USD)": {
|
||||
"account_type": "Payable"
|
||||
"Beban Pajak Bumi & Bangunan": {
|
||||
"account_number": "5510.006"
|
||||
},
|
||||
"2112.002 Hutang Dagang Luar Negeri (SGD)": {
|
||||
"account_type": "Payable"
|
||||
"Beban Pajak PPN": {
|
||||
"account_number": "5510.008"
|
||||
},
|
||||
"2112.003 Hutang Dagang Biaya Kirim Luar Negeri (USD)": {
|
||||
"account_type": "Payable"
|
||||
"Beban Pajak Penghasilan ": {
|
||||
"account_number": "5510.007"
|
||||
},
|
||||
"2112.004 Hutang Dagang Biaya Kirim Luar Negeri (SGD)": {
|
||||
"account_type": "Payable"
|
||||
"Beban Provisi Pinjaman Bank": {
|
||||
"account_number": "5510.002"
|
||||
},
|
||||
"2112.005 Hutang Dagang Biaya Kirim Dalam Negeri": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
"Selisih Kurs": {
|
||||
"account_number": "5510.010",
|
||||
"account_type": "Round Off"
|
||||
},
|
||||
"2115.000 Stock Diterima Tapi Tidak Ditagih": {
|
||||
"account_type": "Stock Received But Not Billed"
|
||||
}
|
||||
"Selisih Pembayaran Customer": {
|
||||
"account_number": "5510.009",
|
||||
"account_type": "Round Off"
|
||||
},
|
||||
"2120.000 Pendapatan di Terima di Muka": {
|
||||
"2121.000 Pendapatan di Terima di Muka": {
|
||||
"2121.001 Dp Penjualan": {
|
||||
"account_type": "Bank"
|
||||
}
|
||||
}
|
||||
"account_number": "5510.000"
|
||||
},
|
||||
"2130.000 Biaya Yang Akan di Bayar": {
|
||||
"2131.000 Biaya Yang Akan di Bayar": {
|
||||
"2131.001 Biaya Yang Akan di Bayar": {}
|
||||
"account_number": "5500.000"
|
||||
},
|
||||
"2132.000 Biaya Yang Akan di Bayar - Freight": {
|
||||
"2132.001 Biaya Yang Akan di Bayar - Freight": {
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
}
|
||||
}
|
||||
"Beban Langsung": {
|
||||
"Beban Penjualan": {
|
||||
"Biaya Asuransi Kendaraan Operasional": {
|
||||
"account_number": "5110.009"
|
||||
},
|
||||
"2140.000 Hutang Pajak": {
|
||||
"2141.000 Hutang Pajak": {
|
||||
"account_type": "Payable"
|
||||
}
|
||||
}
|
||||
"Biaya BBM": {
|
||||
"account_number": "5110.001"
|
||||
},
|
||||
"2200.000 Passiva Tetap": {
|
||||
"2210.000 Hutang Pada Pihak ke 3": {
|
||||
"2211.000 Pinjaman Pihak ke 3 Rutin": {
|
||||
"2211.001 Hutang": {}
|
||||
"Biaya Barang Rusak": {
|
||||
"account_number": "5110.007"
|
||||
},
|
||||
"2212.000 Pinjaman Pihak ke 3 Tidak Rutin": {
|
||||
"2212.001 Hutang": {}
|
||||
"Biaya Bonus, Hadiah, dan Sampel": {
|
||||
"account_number": "5110.013"
|
||||
},
|
||||
"2213.000 Hutang Bunga Pinjaman Pihak Ke 3 Tidak Rutin": {
|
||||
"2213.001 Hutang Bunga": {}
|
||||
}
|
||||
"Biaya Entertainment dan Pergaulan": {
|
||||
"account_number": "5110.014"
|
||||
},
|
||||
"2220.000 Hutang Pada Bank": {
|
||||
"2221.000 Hutang Bank": {
|
||||
"2221.001 Hutang": {}
|
||||
}
|
||||
"Biaya Kebutuhan Penjualan": {
|
||||
"account_number": "5110.011"
|
||||
},
|
||||
"2230.000 Hutang Leasing Kendaraan": {
|
||||
"2231.000 Hutang Leasing Kendaraan": {
|
||||
"2231.001 Hutang Leasing Kendaraan": {}
|
||||
}
|
||||
"Biaya Kuli": {
|
||||
"account_number": "5110.005"
|
||||
},
|
||||
"2240.000 Hutang Lain Lain": {
|
||||
"2241.000 Hutang Lain Lain": {
|
||||
"2241.001 Hutang": {}
|
||||
}
|
||||
}
|
||||
"Biaya Leasing Kendaraan Operasional": {
|
||||
"account_number": "5110.010"
|
||||
},
|
||||
"root_type": "Liability"
|
||||
"Biaya Parkir": {
|
||||
"account_number": "5110.003"
|
||||
},
|
||||
"3000.000 Modal": {
|
||||
"3100.000 Modal": {
|
||||
"3110.000 Modal di Setor": {},
|
||||
"3120.000 Prive P.Saham": {},
|
||||
"3130.000 Saldo pembukaan Equity": {}
|
||||
"Biaya Penjualan Lain Lain": {
|
||||
"account_number": "5110.019"
|
||||
},
|
||||
"3200.000 Laba": {
|
||||
"3210.000 Laba di Tahan": {},
|
||||
"3220.000 Laba Tahun Berjalan": {},
|
||||
"3230.000 Laba Periode Berjalan": {}
|
||||
"Biaya Perbaikan Kendaraan Operasional": {
|
||||
"account_number": "5110.008"
|
||||
},
|
||||
"root_type": "Equity"
|
||||
"Biaya Perjalanan Dinas": {
|
||||
"account_number": "5110.006"
|
||||
},
|
||||
"4000.000 Penjualan": {
|
||||
"4100.000 Penjualan Barang Dagangan": {
|
||||
"4110.000 Penjualan": {},
|
||||
"4120.000 Retur Penjualan": {},
|
||||
"4130.000 Potongan Penjualan": {}
|
||||
"Biaya Piutang Tak Tertagih": {
|
||||
"account_number": "5110.017"
|
||||
},
|
||||
"4200.000 Harga Pokok Pembelian": {
|
||||
"4210.000 HPP Pembelian": {
|
||||
"account_type": "Cost of Goods Sold"
|
||||
}
|
||||
"Biaya Sample": {
|
||||
"account_number": "5110.012"
|
||||
},
|
||||
"4300.000 Pendapatan Service/Jasa": {
|
||||
"4310.000 Pendapatan Service": {}
|
||||
"Biaya Sewa Gudang": {
|
||||
"account_number": "5110.015"
|
||||
},
|
||||
"4400.000 Pendapatan Lain lain": {
|
||||
"4410.000 Pendapatan Bunga Bank": {},
|
||||
"4420.000 Pendapatan Bunga Dari Pihak Ke 3": {},
|
||||
"4430.000 Pendapatan Keuntungan Penjualan Aktiva": {},
|
||||
"4440.000 Pendapatan Komisi": {},
|
||||
"4450.000 Pendapatan Sewa Gudang": {},
|
||||
"4460.000 Pendapatan Sewa Lain lain": {},
|
||||
"4470.000 Pendapatan Penjualan Barang BS": {},
|
||||
"4480.000 Pendapatan Lain lain": {}
|
||||
"Biaya Sewa Peralatan Gudang": {
|
||||
"account_number": "5110.016"
|
||||
},
|
||||
"root_type": "Income"
|
||||
"Biaya Susut Barang": {
|
||||
"account_number": "5110.021"
|
||||
},
|
||||
"5000.000 Beban": {
|
||||
"5100.000 Beban Langsung": {
|
||||
"5110.000 Beban Penjualan": {
|
||||
"5110.001 Biaya BBM": {},
|
||||
"5110.002 Biaya Tol": {},
|
||||
"5110.003 Biaya Parkir": {},
|
||||
"5110.004 Biaya Upah Angkat/Turun Barang": {},
|
||||
"5110.005 Biaya Kuli": {},
|
||||
"5110.006 Biaya Perjalanan Dinas": {},
|
||||
"5110.007 Biaya Barang Rusak": {},
|
||||
"5110.008 Biaya Perbaikan Kendaraan Operasional": {},
|
||||
"5110.009 Biaya Asuransi Kendaraan Operasional": {},
|
||||
"5110.010 Biaya Leasing Kendaraan Operasional": {},
|
||||
"5110.011 Biaya Kebutuhan Penjualan": {},
|
||||
"5110.012 Biaya Sample": {},
|
||||
"5110.013 Biaya Bonus, Hadiah, dan Sampel": {},
|
||||
"5110.014 Biaya Entertainment dan Pergaulan": {},
|
||||
"5110.015 Biaya Sewa Gudang": {},
|
||||
"5110.016 Biaya Sewa Peralatan Gudang": {},
|
||||
"5110.017 Biaya Piutang Tak Tertagih": {},
|
||||
"5110.018 Potongan Supplier": {},
|
||||
"5110.019 Biaya Penjualan Lain Lain": {},
|
||||
"5110.020 Penyesuaian Stock": {
|
||||
"Biaya Tol": {
|
||||
"account_number": "5110.002"
|
||||
},
|
||||
"Biaya Upah Angkat/Turun Barang": {
|
||||
"account_number": "5110.004"
|
||||
},
|
||||
"Penyesuaian Stock": {
|
||||
"account_number": "5110.020",
|
||||
"account_type": "Stock Adjustment"
|
||||
},
|
||||
"5110.021 Biaya Susut Barang": {}
|
||||
"Potongan Supplier": {
|
||||
"account_number": "5110.018"
|
||||
},
|
||||
"5120.000 Biaya Gaji & Kesejahteraan Pegawai": {
|
||||
"5120.001 Biaya Gaji Staff & Karyawan Tetap": {},
|
||||
"5120.002 Biaya Gaji Karyawan Harian": {},
|
||||
"5120.003 Biaya Pengobatan": {},
|
||||
"5120.004 Biaya Asuransi Kesehatan Pegawai": {},
|
||||
"5120.005 Biaya THR, Bonus, dan Komisi": {},
|
||||
"5120.006 Biaya Konsumsi": {},
|
||||
"5120.007 Biaya Gaji & Kesejahteraan Lainnya": {}
|
||||
"account_number": "5110.000"
|
||||
},
|
||||
"5130.000 Biaya Kantor & Gudang": {
|
||||
"5130.001 Biaya PLN Gudang & Kantor": {},
|
||||
"5130.002 Biaya PAM Gudang & Kantor": {},
|
||||
"5130.003 Biaya TLP Gudang & Kantor": {},
|
||||
"5130.004 Biaya Fotocopy, Photo, Print Out": {},
|
||||
"5130.005 Biaya Alat Tulis Kantor": {},
|
||||
"5130.006 Biaya Stamp Duty & Pos": {},
|
||||
"5130.007 Biaya Servis Peralatan Gudang": {},
|
||||
"5130.008 Biaya Pemeliharaan Bgn Gudang": {},
|
||||
"5130.009 Biaya Humas & Pergaulan": {},
|
||||
"5130.010 Biaya Perlengkapan Gudang": {},
|
||||
"5130.011 Iuran Bulanan": {},
|
||||
"5130.012 Biaya Serba Serbi": {},
|
||||
"5130.013 Biaya Sewa Kantor": {},
|
||||
"5130.014 Biaya Asuransi Bangunan": {},
|
||||
"5130.015 Biaya Sumbangan": {},
|
||||
"5130.016 Biaya Perizinan Usaha dan Bangunan": {},
|
||||
"5130.017 Biaya Perizinan Kendaraan Operasional": {},
|
||||
"5130.018 Biaya KTR & GDG Lain Lain": {}
|
||||
}
|
||||
"Biaya Gaji & Kesejahteraan Pegawai": {
|
||||
"Biaya Asuransi Kesehatan Pegawai": {
|
||||
"account_number": "5120.004"
|
||||
},
|
||||
"5200.000 Beban Tidak Langsung": {
|
||||
"5210.000 Biaya Gaji & Kesejahteraan Pegawai Indirect": {
|
||||
"5210.001 Biaya Gaji Staff": {},
|
||||
"5210.002 Biaya THR dan Bonus Staff": {},
|
||||
"5210.003 Biaya Pengobatan & Kesehatan": {},
|
||||
"5210.004 Biaya Konsumsi": {},
|
||||
"5210.005 Biaya Gaji Lain Lain": {}
|
||||
"Biaya Gaji & Kesejahteraan Lainnya": {
|
||||
"account_number": "5120.007"
|
||||
},
|
||||
"5220.000 Biaya Operational Indirect": {
|
||||
"5220.001 Biaya BBM": {},
|
||||
"5220.002 Biaya Tol & Parkir": {},
|
||||
"5220.003 Biaya TLP & HP": {},
|
||||
"5220.004 Biaya Perjalanan Dinas": {},
|
||||
"5220.005 Biaya Perbaikan Kendaraan Dinas": {},
|
||||
"5220.006 Biaya Asuransi Kendaraan Dinas": {},
|
||||
"5220.007 Biaya Leasing Kendaraan Dinas": {},
|
||||
"5220.008 Biaya Entertainment dan Pergaulan": {},
|
||||
"5220.009 Biaya Hadiah dan Bonus": {}
|
||||
"Biaya Gaji Karyawan Harian": {
|
||||
"account_number": "5120.002"
|
||||
},
|
||||
"5230.000 Biaya Kantor Indirect": {
|
||||
"5230.001 Biaya PLN Kantor": {},
|
||||
"5230.002 Biaya PAM Kantor": {},
|
||||
"5230.003 Biaya TLP Kantor": {},
|
||||
"5230.004 Biaya Sewa Kantor": {},
|
||||
"5230.005 Biaya Asuransi Bangunan": {},
|
||||
"5230.006 Biaya Alat Tulis Kantor": {},
|
||||
"5230.007 Biaya Fotocopy, Photo, Print Out": {},
|
||||
"5230.008 Biaya Kirim Dokumen": {},
|
||||
"5230.009 Biaya Perlengkapan & Peralatan Kantor": {},
|
||||
"5230.010 Service Peralatan Kantor": {},
|
||||
"5230.011 Biaya Pemeliharaan Bangunan Kantor": {},
|
||||
"5230.012 Biaya Iuran Bulanan": {},
|
||||
"5230.013 Biaya Sumbangan": {},
|
||||
"5230.014 Biaya Perizinan Bangunan": {},
|
||||
"5230.015 Biaya Perizinan Kendaraan Dinas": {},
|
||||
"5230.016 Biaya KTR Lain Lain": {},
|
||||
"5230.017 Biaya Stamp Duty & Pos": {}
|
||||
}
|
||||
"Biaya Gaji Staff & Karyawan Tetap": {
|
||||
"account_number": "5120.001"
|
||||
},
|
||||
"5300.000 Biaya Penyusutan": {
|
||||
"5310.000 Biaya Penyusutan": {
|
||||
"5310.001 By Peny Aktiva ": {
|
||||
"Biaya Konsumsi": {
|
||||
"account_number": "5120.006"
|
||||
},
|
||||
"Biaya Pengobatan": {
|
||||
"account_number": "5120.003"
|
||||
},
|
||||
"Biaya THR, Bonus, dan Komisi": {
|
||||
"account_number": "5120.005"
|
||||
},
|
||||
"account_number": "5120.000"
|
||||
},
|
||||
"Biaya Kantor & Gudang": {
|
||||
"Biaya Alat Tulis Kantor": {
|
||||
"account_number": "5130.005"
|
||||
},
|
||||
"Biaya Asuransi Bangunan": {
|
||||
"account_number": "5130.014"
|
||||
},
|
||||
"Biaya Fotocopy, Photo, Print Out": {
|
||||
"account_number": "5130.004"
|
||||
},
|
||||
"Biaya Humas & Pergaulan": {
|
||||
"account_number": "5130.009"
|
||||
},
|
||||
"Biaya KTR & GDG Lain Lain": {
|
||||
"account_number": "5130.018"
|
||||
},
|
||||
"Biaya PAM Gudang & Kantor": {
|
||||
"account_number": "5130.002"
|
||||
},
|
||||
"Biaya PLN Gudang & Kantor": {
|
||||
"account_number": "5130.001"
|
||||
},
|
||||
"Biaya Pemeliharaan Bgn Gudang": {
|
||||
"account_number": "5130.008"
|
||||
},
|
||||
"Biaya Perizinan Kendaraan Operasional": {
|
||||
"account_number": "5130.017"
|
||||
},
|
||||
"Biaya Perizinan Usaha dan Bangunan": {
|
||||
"account_number": "5130.016"
|
||||
},
|
||||
"Biaya Perlengkapan Gudang": {
|
||||
"account_number": "5130.010"
|
||||
},
|
||||
"Biaya Serba Serbi": {
|
||||
"account_number": "5130.012"
|
||||
},
|
||||
"Biaya Servis Peralatan Gudang": {
|
||||
"account_number": "5130.007"
|
||||
},
|
||||
"Biaya Sewa Kantor": {
|
||||
"account_number": "5130.013"
|
||||
},
|
||||
"Biaya Stamp Duty & Pos": {
|
||||
"account_number": "5130.006"
|
||||
},
|
||||
"Biaya Sumbangan": {
|
||||
"account_number": "5130.015"
|
||||
},
|
||||
"Biaya TLP Gudang & Kantor": {
|
||||
"account_number": "5130.003"
|
||||
},
|
||||
"Iuran Bulanan": {
|
||||
"account_number": "5130.011"
|
||||
},
|
||||
"account_number": "5130.000"
|
||||
},
|
||||
"account_number": "5100.000"
|
||||
},
|
||||
"Beban Tidak Langsung": {
|
||||
"Biaya Gaji & Kesejahteraan Pegawai Indirect": {
|
||||
"Biaya Gaji Lain Lain": {
|
||||
"account_number": "5210.005"
|
||||
},
|
||||
"Biaya Gaji Staff": {
|
||||
"account_number": "5210.001"
|
||||
},
|
||||
"Biaya Konsumsi": {
|
||||
"account_number": "5210.004"
|
||||
},
|
||||
"Biaya Pengobatan & Kesehatan": {
|
||||
"account_number": "5210.003"
|
||||
},
|
||||
"Biaya THR dan Bonus Staff": {
|
||||
"account_number": "5210.002"
|
||||
},
|
||||
"account_number": "5210.000"
|
||||
},
|
||||
"Biaya Kantor Indirect": {
|
||||
"Biaya Alat Tulis Kantor": {
|
||||
"account_number": "5230.006"
|
||||
},
|
||||
"Biaya Asuransi Bangunan": {
|
||||
"account_number": "5230.005"
|
||||
},
|
||||
"Biaya Fotocopy, Photo, Print Out": {
|
||||
"account_number": "5230.007"
|
||||
},
|
||||
"Biaya Iuran Bulanan": {
|
||||
"account_number": "5230.012"
|
||||
},
|
||||
"Biaya KTR Lain Lain": {
|
||||
"account_number": "5230.016"
|
||||
},
|
||||
"Biaya Kirim Dokumen": {
|
||||
"account_number": "5230.008"
|
||||
},
|
||||
"Biaya PAM Kantor": {
|
||||
"account_number": "5230.002"
|
||||
},
|
||||
"Biaya PLN Kantor": {
|
||||
"account_number": "5230.001"
|
||||
},
|
||||
"Biaya Pemeliharaan Bangunan Kantor": {
|
||||
"account_number": "5230.011"
|
||||
},
|
||||
"Biaya Perizinan Bangunan": {
|
||||
"account_number": "5230.014"
|
||||
},
|
||||
"Biaya Perizinan Kendaraan Dinas": {
|
||||
"account_number": "5230.015"
|
||||
},
|
||||
"Biaya Perlengkapan & Peralatan Kantor": {
|
||||
"account_number": "5230.009"
|
||||
},
|
||||
"Biaya Sewa Kantor": {
|
||||
"account_number": "5230.004"
|
||||
},
|
||||
"Biaya Stamp Duty & Pos": {
|
||||
"account_number": "5230.017"
|
||||
},
|
||||
"Biaya Sumbangan": {
|
||||
"account_number": "5230.013"
|
||||
},
|
||||
"Biaya TLP Kantor": {
|
||||
"account_number": "5230.003"
|
||||
},
|
||||
"Service Peralatan Kantor": {
|
||||
"account_number": "5230.010"
|
||||
},
|
||||
"account_number": "5230.000"
|
||||
},
|
||||
"Biaya Operational Indirect": {
|
||||
"Biaya Asuransi Kendaraan Dinas": {
|
||||
"account_number": "5220.006"
|
||||
},
|
||||
"Biaya BBM": {
|
||||
"account_number": "5220.001"
|
||||
},
|
||||
"Biaya Entertainment dan Pergaulan": {
|
||||
"account_number": "5220.008"
|
||||
},
|
||||
"Biaya Hadiah dan Bonus": {
|
||||
"account_number": "5220.009"
|
||||
},
|
||||
"Biaya Leasing Kendaraan Dinas": {
|
||||
"account_number": "5220.007"
|
||||
},
|
||||
"Biaya Perbaikan Kendaraan Dinas": {
|
||||
"account_number": "5220.005"
|
||||
},
|
||||
"Biaya Perjalanan Dinas": {
|
||||
"account_number": "5220.004"
|
||||
},
|
||||
"Biaya TLP & HP": {
|
||||
"account_number": "5220.003"
|
||||
},
|
||||
"Biaya Tol & Parkir": {
|
||||
"account_number": "5220.002"
|
||||
},
|
||||
"account_number": "5220.000"
|
||||
},
|
||||
"account_number": "5200.000"
|
||||
},
|
||||
"Biaya Amortisasi": {
|
||||
"Biaya Amortisasi": {
|
||||
"account_number": "5410.000"
|
||||
},
|
||||
"account_number": "5400.000"
|
||||
},
|
||||
"Biaya Penyusutan": {
|
||||
"Biaya Penyusutan": {
|
||||
"By Peny Aktiva ": {
|
||||
"account_number": "5310.001",
|
||||
"account_type": "Depreciation"
|
||||
}
|
||||
}
|
||||
},
|
||||
"5400.000 Biaya Amortisasi": {
|
||||
"5410.000 Biaya Amortisasi": {}
|
||||
"account_number": "5310.000"
|
||||
},
|
||||
"5500.000 Beban Lain lain": {
|
||||
"5510.000 Beban Lain lain": {
|
||||
"5510.001 Beban Adm Bank": {},
|
||||
"5510.002 Beban Provisi Pinjaman Bank": {},
|
||||
"5510.003 Beban Notaris Dan ADM Kredit Bank": {},
|
||||
"5510.004 Beban Bunga Kredit Rekening Koran Bank": {},
|
||||
"5510.005 Beban Bunga Pinjaman Pada Pihak Ke 3": {},
|
||||
"5510.006 Beban Pajak Bumi & Bangunan": {},
|
||||
"5510.007 Beban Pajak Penghasilan ": {},
|
||||
"5510.008 Beban Pajak PPN": {},
|
||||
"5510.009 Selisih Pembayaran Customer": {
|
||||
"account_type": "Round Off"
|
||||
},
|
||||
"5510.010 Selisih Kurs": {
|
||||
"account_type": "Round Off"
|
||||
}
|
||||
}
|
||||
"account_number": "5300.000"
|
||||
},
|
||||
"account_number": "5000.000",
|
||||
"root_type": "Expense"
|
||||
},
|
||||
"Modal": {
|
||||
"Laba": {
|
||||
"Laba Periode Berjalan": {
|
||||
"account_number": "3230.000"
|
||||
},
|
||||
"Laba Tahun Berjalan": {
|
||||
"account_number": "3220.000"
|
||||
},
|
||||
"Laba di Tahan": {
|
||||
"account_number": "3210.000"
|
||||
},
|
||||
"account_number": "3200.000"
|
||||
},
|
||||
"Modal": {
|
||||
"Modal di Setor": {
|
||||
"account_number": "3110.000"
|
||||
},
|
||||
"Prive P.Saham": {
|
||||
"account_number": "3120.000"
|
||||
},
|
||||
"Saldo pembukaan Equity": {
|
||||
"account_number": "3130.000"
|
||||
},
|
||||
"account_number": "3100.000"
|
||||
},
|
||||
"account_number": "3000.000",
|
||||
"root_type": "Equity"
|
||||
},
|
||||
"Passiva": {
|
||||
"Pasiva Lancar": {
|
||||
"Biaya Yang Akan di Bayar": {
|
||||
"Biaya Yang Akan di Bayar": {
|
||||
"Biaya Yang Akan di Bayar": {
|
||||
"account_number": "2131.001"
|
||||
},
|
||||
"account_number": "2131.000"
|
||||
},
|
||||
"Biaya Yang Akan di Bayar - Freight": {
|
||||
"Biaya Yang Akan di Bayar - Freight": {
|
||||
"account_number": "2132.001",
|
||||
"account_type": "Expenses Included In Valuation"
|
||||
},
|
||||
"account_number": "2132.000"
|
||||
},
|
||||
"account_number": "2130.000"
|
||||
},
|
||||
"Hutang Dagang": {
|
||||
"Hutang Dagang Other Currency": {
|
||||
"Hutang Dagang Biaya Kirim Dalam Negeri": {
|
||||
"account_number": "2112.005",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Biaya Kirim Luar Negeri (SGD)": {
|
||||
"account_number": "2112.004",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Biaya Kirim Luar Negeri (USD)": {
|
||||
"account_number": "2112.003",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Luar Negeri (SGD)": {
|
||||
"account_number": "2112.002",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Luar Negeri (USD)": {
|
||||
"account_number": "2112.001",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"account_number": "2112.000"
|
||||
},
|
||||
"Hutang Dagang Rupiah": {
|
||||
"HUtang Dagang Biaya Kirim Luar Negeri": {
|
||||
"account_number": "2111.004",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Biaya Kirim Dalam Negeri": {
|
||||
"account_number": "2111.003",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Dalam Negeri": {
|
||||
"account_number": "2111.001",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"Hutang Dagang Luar Negeri": {
|
||||
"account_number": "2111.002",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"account_number": "2111.000"
|
||||
},
|
||||
"Stock Diterima Tapi Tidak Ditagih": {
|
||||
"account_number": "2115.000",
|
||||
"account_type": "Stock Received But Not Billed"
|
||||
},
|
||||
"account_number": "2110.000"
|
||||
},
|
||||
"Hutang Pajak": {
|
||||
"Hutang Pajak": {
|
||||
"account_number": "2141.000",
|
||||
"account_type": "Payable"
|
||||
},
|
||||
"account_number": "2140.000"
|
||||
},
|
||||
"Pendapatan di Terima di Muka": {
|
||||
"Pendapatan di Terima di Muka": {
|
||||
"Dp Penjualan": {
|
||||
"account_number": "2121.001",
|
||||
"account_type": "Bank"
|
||||
},
|
||||
"account_number": "2121.000"
|
||||
},
|
||||
"account_number": "2120.000"
|
||||
},
|
||||
"account_number": "2100.000"
|
||||
},
|
||||
"Passiva Tetap": {
|
||||
"Hutang Lain Lain": {
|
||||
"Hutang Lain Lain": {
|
||||
"Hutang": {
|
||||
"account_number": "2241.001"
|
||||
},
|
||||
"account_number": "2241.000"
|
||||
},
|
||||
"account_number": "2240.000"
|
||||
},
|
||||
"Hutang Leasing Kendaraan": {
|
||||
"Hutang Leasing Kendaraan": {
|
||||
"Hutang Leasing Kendaraan": {
|
||||
"account_number": "2231.001"
|
||||
},
|
||||
"account_number": "2231.000"
|
||||
},
|
||||
"account_number": "2230.000"
|
||||
},
|
||||
"Hutang Pada Bank": {
|
||||
"Hutang Bank": {
|
||||
"Hutang": {
|
||||
"account_number": "2221.001"
|
||||
},
|
||||
"account_number": "2221.000"
|
||||
},
|
||||
"account_number": "2220.000"
|
||||
},
|
||||
"Hutang Pada Pihak ke 3": {
|
||||
"Hutang Bunga Pinjaman Pihak Ke 3 Tidak Rutin": {
|
||||
"Hutang Bunga": {
|
||||
"account_number": "2213.001"
|
||||
},
|
||||
"account_number": "2213.000"
|
||||
},
|
||||
"Pinjaman Pihak ke 3 Rutin": {
|
||||
"Hutang": {
|
||||
"account_number": "2211.001"
|
||||
},
|
||||
"account_number": "2211.000"
|
||||
},
|
||||
"Pinjaman Pihak ke 3 Tidak Rutin": {
|
||||
"Hutang": {
|
||||
"account_number": "2212.001"
|
||||
},
|
||||
"account_number": "2212.000"
|
||||
},
|
||||
"account_number": "2210.000"
|
||||
},
|
||||
"account_number": "2200.000"
|
||||
},
|
||||
"account_number": "2000.000",
|
||||
"root_type": "Liability"
|
||||
},
|
||||
"Penjualan": {
|
||||
"Harga Pokok Pembelian": {
|
||||
"HPP Pembelian": {
|
||||
"account_number": "4210.000",
|
||||
"account_type": "Cost of Goods Sold"
|
||||
},
|
||||
"account_number": "4200.000"
|
||||
},
|
||||
"Pendapatan Lain lain": {
|
||||
"Pendapatan Bunga Bank": {
|
||||
"account_number": "4410.000"
|
||||
},
|
||||
"Pendapatan Bunga Dari Pihak Ke 3": {
|
||||
"account_number": "4420.000"
|
||||
},
|
||||
"Pendapatan Keuntungan Penjualan Aktiva": {
|
||||
"account_number": "4430.000"
|
||||
},
|
||||
"Pendapatan Komisi": {
|
||||
"account_number": "4440.000"
|
||||
},
|
||||
"Pendapatan Lain lain": {
|
||||
"account_number": "4480.000"
|
||||
},
|
||||
"Pendapatan Penjualan Barang BS": {
|
||||
"account_number": "4470.000"
|
||||
},
|
||||
"Pendapatan Sewa Gudang": {
|
||||
"account_number": "4450.000"
|
||||
},
|
||||
"Pendapatan Sewa Lain lain": {
|
||||
"account_number": "4460.000"
|
||||
},
|
||||
"account_number": "4400.000"
|
||||
},
|
||||
"Pendapatan Service/Jasa": {
|
||||
"Pendapatan Service": {
|
||||
"account_number": "4310.000"
|
||||
},
|
||||
"account_number": "4300.000"
|
||||
},
|
||||
"Penjualan Barang Dagangan": {
|
||||
"Penjualan": {
|
||||
"account_number": "4110.000"
|
||||
},
|
||||
"Potongan Penjualan": {
|
||||
"account_number": "4130.000"
|
||||
},
|
||||
"Retur Penjualan": {
|
||||
"account_number": "4120.000"
|
||||
},
|
||||
"account_number": "4100.000"
|
||||
},
|
||||
"account_number": "4000.000",
|
||||
"root_type": "Income"
|
||||
}
|
||||
}
|
||||
}
|
@ -26,9 +26,10 @@
|
||||
"Earnest Money": {}
|
||||
},
|
||||
"Stock Assets": {
|
||||
"Stock in Hand": {
|
||||
"Stock In Hand": {
|
||||
"account_type": "Stock"
|
||||
},
|
||||
"account_type": "Stock"
|
||||
}
|
||||
},
|
||||
"Tax Assets": {
|
||||
"is_group": 1
|
||||
|
@ -0,0 +1,275 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from frappe import _
|
||||
|
||||
def get():
|
||||
return {
|
||||
_("Application of Funds (Assets)"): {
|
||||
_("Current Assets"): {
|
||||
_("Accounts Receivable"): {
|
||||
_("Debtors"): {
|
||||
"account_type": "Receivable",
|
||||
"account_number": "1310"
|
||||
},
|
||||
"account_number": "1300"
|
||||
},
|
||||
_("Bank Accounts"): {
|
||||
"account_type": "Bank",
|
||||
"is_group": 1,
|
||||
"account_number": "1200"
|
||||
},
|
||||
_("Cash In Hand"): {
|
||||
_("Cash"): {
|
||||
"account_type": "Cash",
|
||||
"account_number": "1110"
|
||||
},
|
||||
"account_type": "Cash",
|
||||
"account_number": "1100"
|
||||
},
|
||||
_("Loans and Advances (Assets)"): {
|
||||
"is_group": 1,
|
||||
"account_number": "1600"
|
||||
},
|
||||
_("Securities and Deposits"): {
|
||||
_("Earnest Money"): {
|
||||
"account_number": "1651"
|
||||
},
|
||||
"account_number": "1650"
|
||||
},
|
||||
_("Stock Assets"): {
|
||||
_("Stock In Hand"): {
|
||||
"account_type": "Stock",
|
||||
"account_number": "1410"
|
||||
},
|
||||
"account_type": "Stock",
|
||||
"account_number": "1400"
|
||||
},
|
||||
_("Tax Assets"): {
|
||||
"is_group": 1,
|
||||
"account_number": "1500"
|
||||
},
|
||||
"account_number": "1100-1600"
|
||||
},
|
||||
_("Fixed Assets"): {
|
||||
_("Capital Equipments"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1710"
|
||||
},
|
||||
_("Electronic Equipments"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1720"
|
||||
},
|
||||
_("Furnitures and Fixtures"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1730"
|
||||
},
|
||||
_("Office Equipments"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1740"
|
||||
},
|
||||
_("Plants and Machineries"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1750"
|
||||
},
|
||||
_("Buildings"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1760"
|
||||
},
|
||||
_("Softwares"): {
|
||||
"account_type": "Fixed Asset",
|
||||
"account_number": "1770"
|
||||
},
|
||||
_("Accumulated Depreciation"): {
|
||||
"account_type": "Accumulated Depreciation",
|
||||
"account_number": "1780"
|
||||
},
|
||||
"account_number": "1700"
|
||||
},
|
||||
_("Investments"): {
|
||||
"is_group": 1,
|
||||
"account_number": "1800"
|
||||
},
|
||||
_("Temporary Accounts"): {
|
||||
_("Temporary Opening"): {
|
||||
"account_type": "Temporary",
|
||||
"account_number": "1910"
|
||||
},
|
||||
"account_number": "1900"
|
||||
},
|
||||
"root_type": "Asset",
|
||||
"account_number": "1000"
|
||||
},
|
||||
_("Expenses"): {
|
||||
_("Direct Expenses"): {
|
||||
_("Stock Expenses"): {
|
||||
_("Cost of Goods Sold"): {
|
||||
"account_type": "Cost of Goods Sold",
|
||||
"account_number": "5111"
|
||||
},
|
||||
_("Expenses Included In Valuation"): {
|
||||
"account_type": "Expenses Included In Valuation",
|
||||
"account_number": "5118"
|
||||
},
|
||||
_("Stock Adjustment"): {
|
||||
"account_type": "Stock Adjustment",
|
||||
"account_number": "5119"
|
||||
},
|
||||
"account_number": "5110"
|
||||
},
|
||||
"account_number": "5100"
|
||||
},
|
||||
_("Indirect Expenses"): {
|
||||
_("Administrative Expenses"): {
|
||||
"account_number": "5201"
|
||||
},
|
||||
_("Commission on Sales"): {
|
||||
"account_number": "5202"
|
||||
},
|
||||
_("Depreciation"): {
|
||||
"account_type": "Depreciation",
|
||||
"account_number": "5203"
|
||||
},
|
||||
_("Entertainment Expenses"): {
|
||||
"account_number": "5204"
|
||||
},
|
||||
_("Freight and Forwarding Charges"): {
|
||||
"account_type": "Chargeable",
|
||||
"account_number": "5205"
|
||||
},
|
||||
_("Legal Expenses"): {
|
||||
"account_number": "5206"
|
||||
},
|
||||
_("Marketing Expenses"): {
|
||||
"account_type": "Chargeable",
|
||||
"account_number": "5207"
|
||||
},
|
||||
_("Office Maintenance Expenses"): {
|
||||
"account_number": "5208"
|
||||
},
|
||||
_("Office Rent"): {
|
||||
"account_number": "5209"
|
||||
},
|
||||
_("Postal Expenses"): {
|
||||
"account_number": "5210"
|
||||
},
|
||||
_("Print and Stationery"): {
|
||||
"account_number": "5211"
|
||||
},
|
||||
_("Round Off"): {
|
||||
"account_type": "Round Off",
|
||||
"account_number": "5212"
|
||||
},
|
||||
_("Salary"): {
|
||||
"account_number": "5213"
|
||||
},
|
||||
_("Sales Expenses"): {
|
||||
"account_number": "5214"
|
||||
},
|
||||
_("Telephone Expenses"): {
|
||||
"account_number": "5215"
|
||||
},
|
||||
_("Travel Expenses"): {
|
||||
"account_number": "5216"
|
||||
},
|
||||
_("Utility Expenses"): {
|
||||
"account_number": "5217"
|
||||
},
|
||||
_("Write Off"): {
|
||||
"account_number": "5218"
|
||||
},
|
||||
_("Exchange Gain/Loss"): {
|
||||
"account_number": "5219"
|
||||
},
|
||||
_("Gain/Loss on Asset Disposal"): {
|
||||
"account_number": "5220"
|
||||
},
|
||||
_("Miscellaneous Expenses"): {
|
||||
"account_type": "Chargeable",
|
||||
"account_number": "5221"
|
||||
},
|
||||
"account_number": "5200"
|
||||
},
|
||||
"root_type": "Expense",
|
||||
"account_number": "5000"
|
||||
},
|
||||
_("Income"): {
|
||||
_("Direct Income"): {
|
||||
_("Sales"): {
|
||||
"account_number": "4110"
|
||||
},
|
||||
_("Service"): {
|
||||
"account_number": "4120"
|
||||
},
|
||||
"account_number": "4100"
|
||||
},
|
||||
_("Indirect Income"): {
|
||||
"is_group": 1,
|
||||
"account_number": "4200"
|
||||
},
|
||||
"root_type": "Income",
|
||||
"account_number": "4000"
|
||||
},
|
||||
_("Source of Funds (Liabilities)"): {
|
||||
_("Current Liabilities"): {
|
||||
_("Accounts Payable"): {
|
||||
_("Creditors"): {
|
||||
"account_type": "Payable",
|
||||
"account_number": "2110"
|
||||
},
|
||||
_("Payroll Payable"): {
|
||||
"account_number": "2120"
|
||||
},
|
||||
"account_number": "2100"
|
||||
},
|
||||
_("Stock Liabilities"): {
|
||||
_("Stock Received But Not Billed"): {
|
||||
"account_type": "Stock Received But Not Billed",
|
||||
"account_number": "2210"
|
||||
},
|
||||
"account_number": "2200"
|
||||
},
|
||||
_("Duties and Taxes"): {
|
||||
"account_type": "Tax",
|
||||
"is_group": 1,
|
||||
"account_number": "2300"
|
||||
},
|
||||
_("Loans (Liabilities)"): {
|
||||
_("Secured Loans"): {
|
||||
"account_number": "2410"
|
||||
},
|
||||
_("Unsecured Loans"): {
|
||||
"account_number": "2420"
|
||||
},
|
||||
_("Bank Overdraft Account"): {
|
||||
"account_number": "2430"
|
||||
},
|
||||
"account_number": "2400"
|
||||
},
|
||||
"account_number": "2100-2400"
|
||||
},
|
||||
"root_type": "Liability",
|
||||
"account_number": "2000"
|
||||
},
|
||||
_("Equity"): {
|
||||
_("Capital Stock"): {
|
||||
"account_type": "Equity",
|
||||
"account_number": "3100"
|
||||
},
|
||||
_("Dividends Paid"): {
|
||||
"account_type": "Equity",
|
||||
"account_number": "3200"
|
||||
},
|
||||
_("Opening Balance Equity"): {
|
||||
"account_type": "Equity",
|
||||
"account_number": "3300"
|
||||
},
|
||||
_("Retained Earnings"): {
|
||||
"account_type": "Equity",
|
||||
"account_number": "3400"
|
||||
},
|
||||
"root_type": "Equity",
|
||||
"account_number": "3000"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -2,9 +2,40 @@
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import unittest
|
||||
import frappe
|
||||
from erpnext.stock import get_warehouse_account, get_company_default_inventory_account
|
||||
|
||||
class TestAccount(unittest.TestCase):
|
||||
def test_rename_account(self):
|
||||
if not frappe.db.exists("Account", "1210 - Debtors - _TC"):
|
||||
acc = frappe.new_doc("Account")
|
||||
acc.account_name = "Debtors"
|
||||
acc.parent_account = "Accounts Receivable - _TC"
|
||||
acc.account_number = "1210"
|
||||
acc.company = "_Test Company"
|
||||
acc.insert()
|
||||
|
||||
account_number, account_name = frappe.db.get_value("Account", "1210 - Debtors - _TC",
|
||||
["account_number", "account_name"])
|
||||
self.assertEqual(account_number, "1210")
|
||||
self.assertEqual(account_name, "Debtors")
|
||||
|
||||
frappe.rename_doc("Account", "1210 - Debtors - _TC", "1211 - Debtors 1 - _TC")
|
||||
|
||||
new_acc = frappe.db.get_value("Account", "1211 - Debtors 1 - _TC",
|
||||
["account_name", "account_number"], as_dict=1)
|
||||
self.assertEqual(new_acc.account_name, "Debtors 1")
|
||||
self.assertEqual(new_acc.account_number, "1211")
|
||||
|
||||
frappe.rename_doc("Account", "1211 - Debtors 1 - _TC", "Debtors 2")
|
||||
|
||||
new_acc = frappe.db.get_value("Account", "1211 - Debtors 2 - _TC",
|
||||
["account_name", "account_number"], as_dict=1)
|
||||
self.assertEqual(new_acc.account_name, "Debtors 2")
|
||||
self.assertEqual(new_acc.account_number, "1211")
|
||||
|
||||
frappe.delete_doc("Account", "1211 - Debtors 2 - _TC")
|
||||
|
||||
def _make_test_records(verbose):
|
||||
from frappe.test_runner import make_test_objects
|
||||
|
@ -0,0 +1,69 @@
|
||||
QUnit.module('accounts');
|
||||
|
||||
QUnit.test("test account with number", function(assert) {
|
||||
assert.expect(7);
|
||||
let done = assert.async();
|
||||
frappe.run_serially([
|
||||
() => frappe.set_route('Tree', 'Account'),
|
||||
() => frappe.click_link('Income'),
|
||||
() => frappe.click_button('Add Child'),
|
||||
() => frappe.timeout(.5),
|
||||
() => {
|
||||
cur_dialog.fields_dict.account_name.$input.val("Test Income");
|
||||
cur_dialog.fields_dict.account_number.$input.val("4010");
|
||||
},
|
||||
() => frappe.click_button('Create New'),
|
||||
() => frappe.timeout(1),
|
||||
() => {
|
||||
assert.ok($('a:contains("4010 - Test Income"):visible').length!=0, "Account created with number");
|
||||
},
|
||||
() => frappe.click_link('4010 - Test Income'),
|
||||
() => frappe.click_button('Edit'),
|
||||
() => frappe.timeout(.5),
|
||||
() => frappe.click_button('Update Account Number'),
|
||||
() => frappe.timeout(.5),
|
||||
() => {
|
||||
cur_dialog.fields_dict.account_number.$input.val("4020");
|
||||
},
|
||||
() => frappe.timeout(1),
|
||||
() => cur_dialog.primary_action(),
|
||||
() => frappe.timeout(1),
|
||||
() => cur_frm.refresh_fields(),
|
||||
() => frappe.timeout(.5),
|
||||
() => {
|
||||
var abbr = frappe.get_abbr(frappe.defaults.get_default("Company"));
|
||||
var new_account = "4020 - Test Income - " + abbr;
|
||||
assert.ok(cur_frm.doc.name==new_account, "Account renamed");
|
||||
assert.ok(cur_frm.doc.account_name=="Test Income", "account name remained same");
|
||||
assert.ok(cur_frm.doc.account_number=="4020", "Account number updated to 4020");
|
||||
},
|
||||
() => frappe.timeout(1),
|
||||
() => frappe.click_button('Menu'),
|
||||
() => frappe.click_link('Rename'),
|
||||
() => frappe.timeout(.5),
|
||||
() => {
|
||||
cur_dialog.fields_dict.new_name.$input.val("4030 - Test Income");
|
||||
},
|
||||
() => frappe.timeout(.5),
|
||||
() => frappe.click_button("Rename"),
|
||||
() => frappe.timeout(1),
|
||||
() => {
|
||||
assert.ok(cur_frm.doc.account_name=="Test Income", "account name remained same");
|
||||
assert.ok(cur_frm.doc.account_number=="4030", "Account number updated to 4030");
|
||||
},
|
||||
() => frappe.timeout(.5),
|
||||
() => frappe.click_button('Chart of Accounts'),
|
||||
() => frappe.timeout(.5),
|
||||
() => frappe.click_button('Menu'),
|
||||
() => frappe.click_link('Refresh'),
|
||||
() => frappe.click_button('Expand All'),
|
||||
() => frappe.click_link('4030 - Test Income'),
|
||||
() => frappe.click_button('Delete'),
|
||||
() => frappe.click_button('Yes'),
|
||||
() => frappe.timeout(.5),
|
||||
() => {
|
||||
assert.ok($('a:contains("4030 - Test Account"):visible').length==0, "Account deleted");
|
||||
},
|
||||
() => done()
|
||||
]);
|
||||
});
|
@ -74,6 +74,36 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "due_date",
|
||||
"fieldtype": "Date",
|
||||
"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": "Due Date",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -718,7 +748,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-08-03 12:40:09.611951",
|
||||
"modified": "2017-08-10 18:06:44.904081",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "GL Entry",
|
||||
|
@ -185,8 +185,39 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
|
||||
})
|
||||
},
|
||||
|
||||
due_date_options_cache: {},
|
||||
|
||||
reference_name: function(doc, cdt, cdn) {
|
||||
var d = frappe.get_doc(cdt, cdn);
|
||||
var me = this;
|
||||
|
||||
const get_invoice_due_dates = invoice_name => {
|
||||
const options = this.due_date_options_cache[invoice_name];
|
||||
const input = $(cur_frm.fields_dict["accounts"].wrapper).find("select[data-fieldname=reference_due_date]");
|
||||
|
||||
if (options) {
|
||||
input.empty();
|
||||
input.add_options(options);
|
||||
frappe.model.set_value(cdt, cdn, "reference_due_date", options[0]);
|
||||
}
|
||||
else {
|
||||
frappe.call({
|
||||
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_invoice_due_dates",
|
||||
args: {name: invoice_name},
|
||||
callback: function(r) {
|
||||
const options = [];
|
||||
$.each(r.message, function(key, value) {
|
||||
options.push(value.due_date);
|
||||
});
|
||||
input.empty();
|
||||
input.add_options(options);
|
||||
frappe.model.set_value(cdt, cdn, "reference_due_date", options[0]);
|
||||
me.due_date_options_cache[d.reference_name] = options;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(d.reference_name) {
|
||||
if (d.reference_type==="Purchase Invoice" && !flt(d.debit)) {
|
||||
this.get_outstanding('Purchase Invoice', d.reference_name, doc.company, d);
|
||||
@ -197,6 +228,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
|
||||
if (d.reference_type==="Journal Entry" && !flt(d.credit) && !flt(d.debit)) {
|
||||
this.get_outstanding('Journal Entry', d.reference_name, doc.company, d);
|
||||
}
|
||||
if( in_list(["Sales Invoice", "Purchase Invoice"]), d.reference_type) {
|
||||
get_invoice_due_dates(d.reference_name);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -436,7 +436,8 @@ class JournalEntry(AccountsController):
|
||||
"against_voucher": d.reference_name,
|
||||
"remarks": self.remark,
|
||||
"cost_center": d.cost_center,
|
||||
"project": d.project
|
||||
"project": d.project,
|
||||
"due_date": d.reference_due_date
|
||||
})
|
||||
)
|
||||
|
||||
@ -898,3 +899,14 @@ def get_average_exchange_rate(account):
|
||||
exchange_rate = bank_balance_in_company_currency / bank_balance_in_account_currency
|
||||
|
||||
return exchange_rate
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_invoice_due_dates(name):
|
||||
result = frappe.get_list(
|
||||
doctype='GL Entry', group_by='name, due_date',
|
||||
filters={'voucher_no': name, "ifnull(due_date, '')": ('!=', '')},
|
||||
fields=['due_date'], distinct=True
|
||||
)
|
||||
|
||||
return result
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "hash",
|
||||
@ -13,6 +14,7 @@
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
@ -46,6 +48,7 @@
|
||||
"width": "250px"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -75,6 +78,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -106,6 +110,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -141,6 +146,7 @@
|
||||
"width": "180px"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -168,6 +174,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -197,6 +204,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -226,6 +234,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -256,6 +265,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -287,6 +297,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -317,6 +328,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -345,6 +357,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -374,6 +387,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -402,6 +416,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
@ -432,6 +447,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
@ -464,6 +480,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -491,6 +508,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
@ -521,6 +539,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
@ -553,6 +572,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -581,6 +601,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -611,6 +632,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -641,6 +663,39 @@
|
||||
"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'])",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -671,6 +726,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -698,6 +754,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -729,6 +786,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -759,17 +817,17 @@
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-03-02 05:02:10.102039",
|
||||
"modified": "2017-08-30 08:44:54.295493",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Journal Entry Account",
|
||||
|
@ -253,6 +253,8 @@ frappe.ui.form.on('Payment Entry', {
|
||||
},
|
||||
callback: function(r, rt) {
|
||||
if(r.message) {
|
||||
frappe.run_serially([
|
||||
() => {
|
||||
if(frm.doc.payment_type == "Receive") {
|
||||
frm.set_value("paid_from", r.message.party_account);
|
||||
frm.set_value("paid_from_account_currency", r.message.party_account_currency);
|
||||
@ -262,11 +264,13 @@ frappe.ui.form.on('Payment Entry', {
|
||||
frm.set_value("paid_to_account_currency", r.message.party_account_currency);
|
||||
frm.set_value("paid_to_account_balance", r.message.account_balance);
|
||||
}
|
||||
frm.set_value("party_balance", r.message.party_balance);
|
||||
frm.events.get_outstanding_documents(frm);
|
||||
frm.events.hide_unhide_fields(frm);
|
||||
frm.events.set_dynamic_labels(frm);
|
||||
frm.set_party_account_based_on_party = false;
|
||||
},
|
||||
() => frm.set_value("party_balance", r.message.party_balance),
|
||||
() => frm.events.get_outstanding_documents(frm),
|
||||
() => frm.events.hide_unhide_fields(frm),
|
||||
() => frm.events.set_dynamic_labels(frm),
|
||||
() => { frm.set_party_account_based_on_party = false; }
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -8,14 +8,16 @@ from frappe import _, scrub, ValidationError
|
||||
from frappe.utils import flt, comma_or, nowdate
|
||||
from erpnext.accounts.utils import get_outstanding_invoices, get_account_currency, get_balance_on
|
||||
from erpnext.accounts.party import get_party_account
|
||||
from erpnext.accounts.doctype.journal_entry.journal_entry \
|
||||
import get_average_exchange_rate, get_default_bank_cash_account
|
||||
from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
from erpnext.accounts.general_ledger import make_gl_entries
|
||||
from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount
|
||||
from erpnext.controllers.accounts_controller import AccountsController
|
||||
|
||||
class InvalidPaymentEntry(ValidationError): pass
|
||||
|
||||
class InvalidPaymentEntry(ValidationError):
|
||||
pass
|
||||
|
||||
|
||||
class PaymentEntry(AccountsController):
|
||||
def setup_party_account_field(self):
|
||||
@ -69,10 +71,9 @@ class PaymentEntry(AccountsController):
|
||||
def validate_duplicate_entry(self):
|
||||
reference_names = []
|
||||
for d in self.get("references"):
|
||||
if (d.reference_doctype, d.reference_name) in reference_names:
|
||||
if (d.reference_doctype, d.reference_name, d.due_date) in reference_names:
|
||||
frappe.throw(_("Row #{0}: Duplicate entry in References {1} {2}").format(d.idx, d.reference_doctype, d.reference_name))
|
||||
reference_names.append((d.reference_doctype, d.reference_name))
|
||||
|
||||
reference_names.append((d.reference_doctype, d.reference_name, d.due_date))
|
||||
|
||||
def validate_allocated_amount(self):
|
||||
for d in self.get("references"):
|
||||
@ -80,7 +81,6 @@ class PaymentEntry(AccountsController):
|
||||
if flt(d.allocated_amount) > flt(d.outstanding_amount):
|
||||
frappe.throw(_("Row #{0}: Allocated Amount cannot be greater than outstanding amount.").format(d.idx))
|
||||
|
||||
|
||||
def delink_advance_entry_references(self):
|
||||
for reference in self.references:
|
||||
if reference.reference_doctype in ("Sales Invoice", "Purchase Invoice"):
|
||||
@ -128,7 +128,6 @@ class PaymentEntry(AccountsController):
|
||||
|
||||
self.set_missing_ref_details()
|
||||
|
||||
|
||||
def set_missing_ref_details(self):
|
||||
for d in self.get("references"):
|
||||
if d.allocated_amount:
|
||||
@ -413,7 +412,8 @@ class PaymentEntry(AccountsController):
|
||||
gle = party_gl_dict.copy()
|
||||
gle.update({
|
||||
"against_voucher_type": d.reference_doctype,
|
||||
"against_voucher": d.reference_name
|
||||
"against_voucher": d.reference_name,
|
||||
"due_date": d.due_date
|
||||
})
|
||||
|
||||
allocated_amount_in_company_currency = flt(flt(d.allocated_amount) * flt(d.exchange_rate),
|
||||
@ -505,12 +505,10 @@ def get_outstanding_reference_documents(args):
|
||||
company_currency = frappe.db.get_value("Company", args.get("company"), "default_currency")
|
||||
|
||||
# Get negative outstanding sales /purchase invoices
|
||||
total_field = "base_grand_total" if party_account_currency == company_currency else "grand_total"
|
||||
|
||||
negative_outstanding_invoices = []
|
||||
if (args.get("party_type") != "Student"):
|
||||
if args.get("party_type") not in ["Student", "Employee"]:
|
||||
negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"),
|
||||
args.get("party"), args.get("party_account"), total_field)
|
||||
args.get("party"), args.get("party_account"), party_account_currency, company_currency)
|
||||
|
||||
# Get positive outstanding sales /purchase invoices/ Fees
|
||||
outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"),
|
||||
@ -580,13 +578,20 @@ def get_orders_to_be_billed(posting_date, party_type, party, party_account_curre
|
||||
|
||||
return order_list
|
||||
|
||||
def get_negative_outstanding_invoices(party_type, party, party_account, total_field):
|
||||
if party_type != "Employee":
|
||||
def get_negative_outstanding_invoices(party_type, party, party_account, party_account_currency, company_currency):
|
||||
voucher_type = "Sales Invoice" if party_type == "Customer" else "Purchase Invoice"
|
||||
if party_account_currency == company_currency:
|
||||
grand_total_field = "base_grand_total"
|
||||
rounded_total_field = "base_rounded_total"
|
||||
else:
|
||||
grand_total_field = "grand_total"
|
||||
rounded_total_field = "rounded_total"
|
||||
|
||||
return frappe.db.sql("""
|
||||
select
|
||||
"{voucher_type}" as voucher_type, name as voucher_no,
|
||||
{total_field} as invoice_amount, outstanding_amount, posting_date,
|
||||
if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) as invoice_amount,
|
||||
outstanding_amount, posting_date,
|
||||
due_date, conversion_rate as exchange_rate
|
||||
from
|
||||
`tab{voucher_type}`
|
||||
@ -595,13 +600,12 @@ def get_negative_outstanding_invoices(party_type, party, party_account, total_fi
|
||||
order by
|
||||
posting_date, name
|
||||
""".format(**{
|
||||
"total_field": total_field,
|
||||
"rounded_total_field": rounded_total_field,
|
||||
"grand_total_field": grand_total_field,
|
||||
"voucher_type": voucher_type,
|
||||
"party_type": scrub(party_type),
|
||||
"party_account": "debit_to" if party_type == "Customer" else "credit_to"
|
||||
}), (party, party_account), as_dict=True)
|
||||
else:
|
||||
return []
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_party_details(company, party_type, party, date):
|
||||
@ -721,7 +725,10 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
|
||||
if party_amount:
|
||||
grand_total = outstanding_amount = party_amount
|
||||
elif dt in ("Sales Invoice", "Purchase Invoice"):
|
||||
grand_total = doc.base_grand_total if party_account_currency == doc.company_currency else doc.grand_total
|
||||
if party_account_currency == doc.company_currency:
|
||||
grand_total = doc.base_rounded_total or doc.base_grand_total
|
||||
else:
|
||||
grand_total = doc.rounded_total or doc.grand_total
|
||||
outstanding_amount = doc.outstanding_amount
|
||||
elif dt in ("Expense Claim"):
|
||||
grand_total = doc.total_sanctioned_amount
|
||||
@ -730,8 +737,10 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
|
||||
grand_total = doc.grand_total
|
||||
outstanding_amount = doc.outstanding_amount
|
||||
else:
|
||||
total_field = "base_grand_total" if party_account_currency == doc.company_currency else "grand_total"
|
||||
grand_total = flt(doc.get(total_field))
|
||||
if party_account_currency == doc.company_currency:
|
||||
grand_total = flt(doc.get("base_rounded_total") or doc.base_grand_total)
|
||||
else:
|
||||
grand_total = flt(doc.get("rounded_total") or doc.grand_total)
|
||||
outstanding_amount = grand_total - flt(doc.advance_paid)
|
||||
|
||||
# bank or cash
|
||||
@ -766,16 +775,26 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
|
||||
pe.received_amount = received_amount
|
||||
pe.allocate_payment_amount = 1
|
||||
pe.letter_head = doc.get("letter_head")
|
||||
args = {
|
||||
'party_account': party_account, 'company': pe.company, 'party_type': pe.party_type,
|
||||
'party': pe.party, 'posting_date': pe.posting_date
|
||||
}
|
||||
references = get_outstanding_reference_documents(args=args)
|
||||
|
||||
for reference in references:
|
||||
if reference.voucher_no == dn:
|
||||
allocated_amount = min(paid_amount, reference.outstanding_amount)
|
||||
pe.append("references", {
|
||||
"reference_doctype": dt,
|
||||
"reference_name": dn,
|
||||
"bill_no": doc.get("bill_no"),
|
||||
"due_date": doc.get("due_date"),
|
||||
"total_amount": grand_total,
|
||||
"outstanding_amount": outstanding_amount,
|
||||
"allocated_amount": outstanding_amount
|
||||
'reference_doctype': reference.voucher_type,
|
||||
'reference_name': reference.voucher_no,
|
||||
'due_date': reference.due_date,
|
||||
'total_amount': reference.invoice_amount,
|
||||
'outstanding_amount': reference.outstanding_amount,
|
||||
'allocated_amount': allocated_amount,
|
||||
"bill_no": reference.get("bill_no")
|
||||
})
|
||||
if paid_amount:
|
||||
paid_amount -= allocated_amount
|
||||
|
||||
pe.setup_party_account_field()
|
||||
pe.set_missing_values()
|
||||
@ -783,3 +802,24 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
|
||||
pe.set_exchange_rate()
|
||||
pe.set_amounts()
|
||||
return pe
|
||||
|
||||
|
||||
def get_paid_amount(dt, dn, party_type, party, account, due_date):
|
||||
if party_type=="Customer":
|
||||
dr_or_cr = "credit_in_account_currency - debit_in_account_currency"
|
||||
else:
|
||||
dr_or_cr = "debit_in_account_currency - credit_in_account_currency"
|
||||
|
||||
paid_amount = frappe.db.sql("""
|
||||
select ifnull(sum({dr_or_cr}), 0) as paid_amount
|
||||
from `tabGL Entry`
|
||||
where against_voucher_type = %s
|
||||
and against_voucher = %s
|
||||
and party_type = %s
|
||||
and party = %s
|
||||
and account = %s
|
||||
and due_date = %s
|
||||
and {dr_or_cr} > 0
|
||||
""".format(dr_or_cr=dr_or_cr), (dt, dn, party_type, party, account, due_date))
|
||||
|
||||
return paid_amount[0][0] if paid_amount else 0
|
@ -14,6 +14,7 @@ from erpnext.hr.doctype.expense_claim.test_expense_claim import make_expense_cla
|
||||
|
||||
test_dependencies = ["Item"]
|
||||
|
||||
|
||||
class TestPaymentEntry(unittest.TestCase):
|
||||
def test_payment_entry_against_order(self):
|
||||
so = make_sales_order()
|
||||
@ -65,6 +66,18 @@ class TestPaymentEntry(unittest.TestCase):
|
||||
outstanding_amount = flt(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
|
||||
self.assertEqual(outstanding_amount, 100)
|
||||
|
||||
def test_payment_entry_against_si_multi_due_dates(self):
|
||||
si = create_sales_invoice(do_not_save=1)
|
||||
si.payment_terms_template = '_Test Payment Term Template'
|
||||
si.insert()
|
||||
si.submit()
|
||||
|
||||
pe = get_payment_entry(si.doctype, si.name)
|
||||
pe.reference_no = "1"
|
||||
pe.reference_date = "2016-01-01"
|
||||
pe.insert()
|
||||
pe.submit()
|
||||
|
||||
def test_payment_entry_against_pi(self):
|
||||
pi = make_purchase_invoice(supplier="_Test Supplier USD", debit_to="_Test Payable USD - _TC",
|
||||
currency="USD", conversion_rate=50)
|
||||
|
197
erpnext/accounts/doctype/payment_schedule/payment_schedule.json
Normal file
197
erpnext/accounts/doctype/payment_schedule/payment_schedule.json
Normal file
@ -0,0 +1,197 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "",
|
||||
"beta": 0,
|
||||
"creation": "2017-08-10 15:38:00.080575",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "payment_term",
|
||||
"fieldtype": "Link",
|
||||
"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": "Payment Term",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Term",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"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": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "payment_term.description",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "due_date",
|
||||
"fieldtype": "Date",
|
||||
"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": "Due Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "invoice_portion",
|
||||
"fieldtype": "Percent",
|
||||
"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": "Invoice Portion",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "payment_term.invoice_portion",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "payment_amount",
|
||||
"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": "Payment Amount",
|
||||
"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": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-11-23 12:39:02.013040",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Schedule",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class PaymentSchedule(Document):
|
||||
pass
|
2
erpnext/accounts/doctype/payment_term/payment_term.js
Normal file
2
erpnext/accounts/doctype/payment_term/payment_term.js
Normal file
@ -0,0 +1,2 @@
|
||||
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
344
erpnext/accounts/doctype/payment_term/payment_term.json
Normal file
344
erpnext/accounts/doctype/payment_term/payment_term.json
Normal file
@ -0,0 +1,344 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:payment_term_name",
|
||||
"beta": 0,
|
||||
"creation": "2017-08-10 15:24:54.876365",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_term_name",
|
||||
"fieldtype": "Data",
|
||||
"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": "Payment Term Name",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "invoice_portion",
|
||||
"fieldtype": "Float",
|
||||
"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": "Invoice Portion",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_3",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "due_date_based_on",
|
||||
"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": "Due Date Based On",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Day(s) after invoice date\nDay(s) after the end of the invoice month\nMonth(s) after the end of the invoice month",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:in_list(['Day(s) after invoice date', 'Day(s) after the end of the invoice month'], doc.due_date_based_on)",
|
||||
"fieldname": "credit_days",
|
||||
"fieldtype": "Int",
|
||||
"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": "Credit Days",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.due_date_based_on=='Month(s) after the end of the invoice month'",
|
||||
"fieldname": "credit_months",
|
||||
"fieldtype": "Int",
|
||||
"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": "Credit Months",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section 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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"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": "Description",
|
||||
"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,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-08-10 16:26:03.581501",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Term",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
10
erpnext/accounts/doctype/payment_term/payment_term.py
Normal file
10
erpnext/accounts/doctype/payment_term/payment_term.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class PaymentTerm(Document):
|
||||
pass
|
23
erpnext/accounts/doctype/payment_term/test_payment_term.js
Normal file
23
erpnext/accounts/doctype/payment_term/test_payment_term.js
Normal file
@ -0,0 +1,23 @@
|
||||
/* eslint-disable */
|
||||
// rename this file from _test_[name] to test_[name] to activate
|
||||
// and remove above this line
|
||||
|
||||
QUnit.test("test: Payment Term", function (assert) {
|
||||
let done = assert.async();
|
||||
|
||||
// number of asserts
|
||||
assert.expect(1);
|
||||
|
||||
frappe.run_serially([
|
||||
// insert a new Payment Term
|
||||
() => frappe.tests.make('Payment Term', [
|
||||
// values to be set
|
||||
{key: 'value'}
|
||||
]),
|
||||
() => {
|
||||
assert.equal(cur_frm.doc.key, 'value');
|
||||
},
|
||||
() => done()
|
||||
]);
|
||||
|
||||
});
|
@ -0,0 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
import unittest
|
||||
|
||||
|
||||
class TestPaymentTerm(unittest.TestCase):
|
||||
pass
|
34
erpnext/accounts/doctype/payment_term/test_records.json
Normal file
34
erpnext/accounts/doctype/payment_term/test_records.json
Normal file
@ -0,0 +1,34 @@
|
||||
[
|
||||
{
|
||||
"doctype":"Payment Term",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"payment_term_name":"_Test N30",
|
||||
"description":"_Test Net 30 Days",
|
||||
"invoice_portion":50,
|
||||
"credit_days":30
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Term",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"payment_term_name":"_Test COD",
|
||||
"description":"_Test Cash on Delivery",
|
||||
"invoice_portion":50,
|
||||
"credit_days":0
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Term",
|
||||
"due_date_based_on":"Month(s) after the end of the invoice month",
|
||||
"payment_term_name":"_Test EONM",
|
||||
"description":"_Test End of Next Month",
|
||||
"invoice_portion":100,
|
||||
"credit_months":1
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Term",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"payment_term_name":"_Test N30 1",
|
||||
"description":"_Test Net 30 Days",
|
||||
"invoice_portion":100,
|
||||
"credit_days":30
|
||||
}
|
||||
]
|
@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Payment Terms Template', {
|
||||
setup: function(frm) {
|
||||
frm.add_fetch("payment_term", "description", "description");
|
||||
frm.add_fetch("payment_term", "invoice_portion", "invoice_portion");
|
||||
frm.add_fetch("payment_term", "due_date_based_on", "due_date_based_on");
|
||||
frm.add_fetch("payment_term", "credit_days", "credit_days");
|
||||
frm.add_fetch("payment_term", "credit_months", "credit_months");
|
||||
}
|
||||
});
|
@ -0,0 +1,164 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:template_name",
|
||||
"beta": 0,
|
||||
"creation": "2017-08-10 15:34:28.058054",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "template_name",
|
||||
"fieldtype": "Data",
|
||||
"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": "Template Name",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "terms",
|
||||
"fieldtype": "Table",
|
||||
"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": "Payment Terms",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Terms Template Detail",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-08-10 15:46:33.877884",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Terms Template",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import flt, cint
|
||||
from frappe import _
|
||||
|
||||
|
||||
class PaymentTermsTemplate(Document):
|
||||
def validate(self):
|
||||
self.validate_invoice_portion()
|
||||
self.validate_credit_days()
|
||||
self.check_duplicate_terms()
|
||||
|
||||
def validate_invoice_portion(self):
|
||||
total_portion = 0
|
||||
for term in self.terms:
|
||||
total_portion += flt(term.get('invoice_portion', 0))
|
||||
|
||||
if flt(total_portion, 2) != 100.00:
|
||||
frappe.msgprint(_('Combined invoice portion must equal 100%'), raise_exception=1, indicator='red')
|
||||
|
||||
def validate_credit_days(self):
|
||||
for term in self.terms:
|
||||
if cint(term.credit_days) < 0:
|
||||
frappe.msgprint(_('Credit Days cannot be a negative number'), raise_exception=1, indicator='red')
|
||||
|
||||
def check_duplicate_terms(self):
|
||||
terms = []
|
||||
for term in self.terms:
|
||||
term_info = (term.credit_days, term.due_date_based_on)
|
||||
if term_info in terms:
|
||||
frappe.msgprint(
|
||||
_('The Payment Term at row {0} is possibly a duplicate.').format(term.idx),
|
||||
raise_exception=1, indicator='red'
|
||||
)
|
||||
else:
|
||||
terms.append(term_info)
|
@ -0,0 +1,23 @@
|
||||
/* eslint-disable */
|
||||
// rename this file from _test_[name] to test_[name] to activate
|
||||
// and remove above this line
|
||||
|
||||
QUnit.test("test: Payment Terms Template", function (assert) {
|
||||
let done = assert.async();
|
||||
|
||||
// number of asserts
|
||||
assert.expect(1);
|
||||
|
||||
frappe.run_serially([
|
||||
// insert a new Payment Terms Template
|
||||
() => frappe.tests.make('Payment Terms Template', [
|
||||
// values to be set
|
||||
{key: 'value'}
|
||||
]),
|
||||
() => {
|
||||
assert.equal(cur_frm.doc.key, 'value');
|
||||
},
|
||||
() => done()
|
||||
]);
|
||||
|
||||
});
|
@ -0,0 +1,72 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
import unittest
|
||||
|
||||
import frappe
|
||||
|
||||
|
||||
class TestPaymentTermsTemplate(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
frappe.delete_doc('Payment Terms Template', '_Test Payment Terms Template For Test', force=1)
|
||||
|
||||
def test_create_template(self):
|
||||
template = frappe.get_doc({
|
||||
'doctype': 'Payment Terms Template',
|
||||
'template_name': '_Test Payment Terms Template For Test',
|
||||
'terms': [{
|
||||
'doctype': 'Payment Terms Template Detail',
|
||||
'invoice_portion': 50.00,
|
||||
'credit_days_based_on': 'Day(s) after invoice date',
|
||||
'credit_days': 30
|
||||
}]
|
||||
})
|
||||
|
||||
self.assertRaises(frappe.ValidationError, template.insert)
|
||||
|
||||
template.append('terms', {
|
||||
'doctype': 'Payment Terms Template Detail',
|
||||
'invoice_portion': 50.00,
|
||||
'credit_days_based_on': 'Day(s) after invoice date',
|
||||
'credit_days': 0
|
||||
})
|
||||
|
||||
template.insert()
|
||||
|
||||
def test_credit_days(self):
|
||||
template = frappe.get_doc({
|
||||
'doctype': 'Payment Terms Template',
|
||||
'template_name': '_Test Payment Terms Template For Test',
|
||||
'terms': [{
|
||||
'doctype': 'Payment Terms Template Detail',
|
||||
'invoice_portion': 100.00,
|
||||
'credit_days_based_on': 'Day(s) after invoice date',
|
||||
'credit_days': -30
|
||||
}]
|
||||
})
|
||||
|
||||
self.assertRaises(frappe.ValidationError, template.insert)
|
||||
|
||||
def test_duplicate_terms(self):
|
||||
template = frappe.get_doc({
|
||||
'doctype': 'Payment Terms Template',
|
||||
'template_name': '_Test Payment Terms Template For Test',
|
||||
'terms': [
|
||||
{
|
||||
'doctype': 'Payment Terms Template Detail',
|
||||
'invoice_portion': 50.00,
|
||||
'credit_days_based_on': 'Day(s) after invoice date',
|
||||
'credit_days': 30
|
||||
},
|
||||
{
|
||||
'doctype': 'Payment Terms Template Detail',
|
||||
'invoice_portion': 50.00,
|
||||
'credit_days_based_on': 'Day(s) after invoice date',
|
||||
'credit_days': 30
|
||||
}
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
self.assertRaises(frappe.ValidationError, template.insert)
|
@ -0,0 +1,60 @@
|
||||
[
|
||||
{
|
||||
"doctype":"Payment Terms Template",
|
||||
"terms":[
|
||||
{
|
||||
"doctype":"Payment Terms Template Detail",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"idx":1,
|
||||
"description":"Cash on Delivery",
|
||||
"invoice_portion":50,
|
||||
"credit_days":0,
|
||||
"credit_months":0,
|
||||
"payment_term":"_Test COD"
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Terms Template Detail",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"idx":2,
|
||||
"description":"Net 30 Days ",
|
||||
"invoice_portion":50,
|
||||
"credit_days":30,
|
||||
"credit_months":0,
|
||||
"payment_term":"_Test N30"
|
||||
}
|
||||
],
|
||||
"template_name":"_Test Payment Term Template"
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Terms Template",
|
||||
"terms":[
|
||||
{
|
||||
"doctype":"Payment Terms Template Detail",
|
||||
"due_date_based_on":"Month(s) after the end of the invoice month",
|
||||
"idx":1,
|
||||
"description":"_Test End of Next Months",
|
||||
"invoice_portion":100,
|
||||
"credit_days":0,
|
||||
"credit_months":1,
|
||||
"payment_term":"_Test EONM"
|
||||
}
|
||||
],
|
||||
"template_name":"_Test Payment Term Template 1"
|
||||
},
|
||||
{
|
||||
"doctype":"Payment Terms Template",
|
||||
"terms":[
|
||||
{
|
||||
"doctype":"Payment Terms Template Detail",
|
||||
"due_date_based_on":"Day(s) after invoice date",
|
||||
"idx":1,
|
||||
"description":"_Test Net Within 30 days",
|
||||
"invoice_portion":100,
|
||||
"credit_days":30,
|
||||
"credit_months":0,
|
||||
"payment_term":"_Test N30 1"
|
||||
}
|
||||
],
|
||||
"template_name":"_Test Payment Term Template 3"
|
||||
}
|
||||
]
|
@ -0,0 +1,232 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "PTTD.#####",
|
||||
"beta": 0,
|
||||
"creation": "2017-08-10 15:34:09.409562",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "payment_term",
|
||||
"fieldtype": "Link",
|
||||
"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": "Payment Term",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Term",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"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": "Description",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"default": "0",
|
||||
"fieldname": "invoice_portion",
|
||||
"fieldtype": "Percent",
|
||||
"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": "Invoice Portion",
|
||||
"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": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"fieldname": "due_date_based_on",
|
||||
"fieldtype": "Select",
|
||||
"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": "Due Date Based On",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Day(s) after invoice date\nDay(s) after the end of the invoice month\nMonth(s) after the end of the invoice month",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 2,
|
||||
"default": "0",
|
||||
"depends_on": "eval:in_list(['Day(s) after invoice date', 'Day(s) after the end of the invoice month'], doc.due_date_based_on)",
|
||||
"fieldname": "credit_days",
|
||||
"fieldtype": "Int",
|
||||
"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": "Credit Days",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "eval:doc.due_date_based_on=='Month(s) after the end of the invoice month'",
|
||||
"fieldname": "credit_months",
|
||||
"fieldtype": "Int",
|
||||
"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": "Credit Months",
|
||||
"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,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-09-26 05:21:51.738319",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Terms Template Detail",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class PaymentTermsTemplateDetail(Document):
|
||||
pass
|
@ -24,11 +24,11 @@ frappe.ui.form.on("POS Profile", "onload", function(frm) {
|
||||
|
||||
frappe.ui.form.on('POS Profile', {
|
||||
setup: function(frm) {
|
||||
frm.set_query("online_print_format", function() {
|
||||
frm.set_query("print_format_for_online", function() {
|
||||
return {
|
||||
filters: [
|
||||
['Print Format', 'doc_type', '=', 'Sales Invoice'],
|
||||
['Print Format', 'print_format_type', '!=', 'Js'],
|
||||
['Print Format', 'print_format_type', '=', 'Server'],
|
||||
]
|
||||
};
|
||||
});
|
||||
|
@ -286,6 +286,36 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "allow_print_before_pay",
|
||||
"fieldtype": "Check",
|
||||
"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": "Allow Print Before Pay",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
|
@ -12,8 +12,5 @@ class POSSettings(Document):
|
||||
|
||||
def set_link_for_pos(self):
|
||||
link = 'pos' if self.use_pos_in_offline_mode else 'point-of-sale'
|
||||
desktop_icon = frappe.db.get_value('Desktop Icon',
|
||||
{'standard': 1, 'module_name': 'POS'}, 'name')
|
||||
|
||||
if desktop_icon:
|
||||
frappe.db.set_value('Desktop Icon', desktop_icon, 'link', link)
|
||||
frappe.db.sql(""" update `tabDesktop Icon` set link = '{0}'
|
||||
where module_name like '%pos%'""".format(link))
|
@ -252,9 +252,11 @@ class TestPricingRule(unittest.TestCase):
|
||||
self.assertEquals(so.items[0].rate, 100)
|
||||
|
||||
def test_pricing_rule_with_margin_and_discount(self):
|
||||
frappe.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
|
||||
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10)
|
||||
si = create_sales_invoice(do_not_save=True)
|
||||
si.items[0].price_list_rate = 1000
|
||||
si.payment_schedule = []
|
||||
si.insert(ignore_permissions=True)
|
||||
|
||||
item = si.items[0]
|
||||
@ -263,6 +265,7 @@ class TestPricingRule(unittest.TestCase):
|
||||
|
||||
# With discount
|
||||
item.discount_percentage = 10
|
||||
si.payment_schedule = []
|
||||
si.save()
|
||||
item = si.items[0]
|
||||
self.assertEquals(item.rate, 990)
|
||||
|
@ -17,12 +17,13 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
|
||||
if(!this.frm.doc.supplier && this.frm.doc.credit_to) {
|
||||
this.frm.set_df_property("credit_to", "print_hide", 0);
|
||||
}
|
||||
} else {
|
||||
this.frm.set_value("disable_rounded_total", frappe.sys_defaults.disable_rounded_total);
|
||||
}
|
||||
|
||||
// formatter for material request item
|
||||
this.frm.set_indicator_formatter('item_code',
|
||||
function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
|
||||
|
||||
},
|
||||
|
||||
refresh: function(doc) {
|
||||
@ -377,5 +378,5 @@ frappe.ui.form.on("Purchase Invoice", {
|
||||
erpnext.buying.get_default_bom(frm);
|
||||
}
|
||||
frm.toggle_reqd("supplier_warehouse", frm.doc.is_subcontracted==="Yes");
|
||||
},
|
||||
}
|
||||
})
|
@ -1485,6 +1485,95 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_49",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "shipping_rule",
|
||||
"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": "Shipping Rule",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_51",
|
||||
"fieldtype": "Section 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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -2104,6 +2193,38 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:!doc.disable_rounded_total",
|
||||
"fieldname": "base_rounded_total",
|
||||
"fieldtype": "Currency",
|
||||
"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": "Rounded Total (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -2229,6 +2350,38 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:!doc.disable_rounded_total",
|
||||
"fieldname": "rounded_total",
|
||||
"fieldtype": "Currency",
|
||||
"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": "Rounded Total",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -2324,6 +2477,37 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "grand_total",
|
||||
"fieldname": "disable_rounded_total",
|
||||
"fieldtype": "Check",
|
||||
"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": "Disable Rounded Total",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -2789,6 +2973,99 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
"collapsible_depends_on": "eval:(!doc.is_return)",
|
||||
"columns": 0,
|
||||
"fieldname": "payment_schedule_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Payment Terms",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_terms_template",
|
||||
"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": "Payment Terms Template",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Terms Template",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_schedule",
|
||||
"fieldtype": "Table",
|
||||
"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": "Payment Schedule",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "Payment Schedule",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -3576,7 +3853,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2017-11-15 01:04:15.308603",
|
||||
"modified": "2017-11-23 01:04:15.308603",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Purchase Invoice",
|
||||
|
@ -77,8 +77,10 @@ class PurchaseInvoice(BuyingController):
|
||||
if not self.cash_bank_account and flt(self.paid_amount):
|
||||
frappe.throw(_("Cash or Bank Account is mandatory for making payment entry"))
|
||||
|
||||
if flt(self.paid_amount) + flt(self.write_off_amount) \
|
||||
- flt(self.grand_total) > 1/(10**(self.precision("base_grand_total") + 1)):
|
||||
if (flt(self.paid_amount) + flt(self.write_off_amount)
|
||||
- flt(self.get("rounded_total") or self.grand_total)
|
||||
> 1/(10**(self.precision("base_grand_total") + 1))):
|
||||
|
||||
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
|
||||
|
||||
def create_remarks(self):
|
||||
@ -93,7 +95,7 @@ class PurchaseInvoice(BuyingController):
|
||||
if not self.credit_to:
|
||||
self.credit_to = get_party_account("Supplier", self.supplier, self.company)
|
||||
if not self.due_date:
|
||||
self.due_date = get_due_date(self.posting_date, "Supplier", self.supplier, self.company)
|
||||
self.due_date = get_due_date(self.posting_date, "Supplier", self.supplier)
|
||||
|
||||
super(PurchaseInvoice, self).set_missing_values(for_validate)
|
||||
|
||||
@ -359,9 +361,30 @@ class PurchaseInvoice(BuyingController):
|
||||
return gl_entries
|
||||
|
||||
def make_supplier_gl_entry(self, gl_entries):
|
||||
if self.grand_total:
|
||||
grand_total = self.rounded_total or self.grand_total
|
||||
if self.get("payment_schedule"):
|
||||
for d in self.get("payment_schedule"):
|
||||
payment_amount_in_company_currency = flt(d.payment_amount * self.conversion_rate,
|
||||
d.precision("payment_amount"))
|
||||
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": self.credit_to,
|
||||
"party_type": "Supplier",
|
||||
"party": self.supplier,
|
||||
"due_date": d.due_date,
|
||||
"against": self.against_expense_account,
|
||||
"credit": payment_amount_in_company_currency,
|
||||
"credit_in_account_currency": payment_amount_in_company_currency \
|
||||
if self.party_account_currency==self.company_currency else d.payment_amount,
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype
|
||||
}, self.party_account_currency)
|
||||
)
|
||||
|
||||
elif grand_total:
|
||||
# Didnot use base_grand_total to book rounding loss gle
|
||||
grand_total_in_company_currency = flt(self.grand_total * self.conversion_rate,
|
||||
grand_total_in_company_currency = flt(grand_total * self.conversion_rate,
|
||||
self.precision("grand_total"))
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
@ -371,7 +394,7 @@ class PurchaseInvoice(BuyingController):
|
||||
"against": self.against_expense_account,
|
||||
"credit": grand_total_in_company_currency,
|
||||
"credit_in_account_currency": grand_total_in_company_currency \
|
||||
if self.party_account_currency==self.company_currency else self.grand_total,
|
||||
if self.party_account_currency==self.company_currency else grand_total,
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype,
|
||||
}, self.party_account_currency)
|
||||
|
@ -20,7 +20,8 @@ QUnit.test("test purchase invoice", function(assert) {
|
||||
{contact_person: 'Contact 3-Test Supplier'},
|
||||
{taxes_and_charges: 'TEST In State GST'},
|
||||
{tc_name: 'Test Term 1'},
|
||||
{terms: 'This is Test'}
|
||||
{terms: 'This is Test'},
|
||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
||||
]);
|
||||
},
|
||||
() => cur_frm.save(),
|
||||
@ -34,6 +35,9 @@ QUnit.test("test purchase invoice", function(assert) {
|
||||
// grand_total Calculated
|
||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
||||
|
||||
assert.ok(cur_frm.doc.payment_terms_template, "Payment Terms Template is correct");
|
||||
assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty");
|
||||
|
||||
},
|
||||
() => frappe.tests.click_button('Submit'),
|
||||
() => frappe.tests.click_button('Yes'),
|
||||
|
@ -6,15 +6,16 @@ from __future__ import unicode_literals
|
||||
import unittest
|
||||
import frappe, erpnext
|
||||
import frappe.model
|
||||
from frappe.utils import cint, flt, today, nowdate
|
||||
from frappe.utils import cint, flt, today, nowdate, getdate, add_days
|
||||
import frappe.defaults
|
||||
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory, \
|
||||
test_records as pr_test_records
|
||||
from erpnext.controllers.accounts_controller import get_payment_terms
|
||||
from erpnext.exceptions import InvalidCurrency
|
||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction
|
||||
from erpnext.accounts.doctype.account.test_account import get_inventory_account
|
||||
|
||||
test_dependencies = ["Item", "Cost Center"]
|
||||
test_dependencies = ["Item", "Cost Center", "Payment Term", "Payment Terms Template"]
|
||||
test_ignore = ["Serial No"]
|
||||
|
||||
class TestPurchaseInvoice(unittest.TestCase):
|
||||
@ -35,7 +36,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
dl = wrapper
|
||||
|
||||
expected_gl_entries = {
|
||||
"_Test Payable - _TC": [0, 1512.30],
|
||||
"_Test Payable - _TC": [0, 1512.0],
|
||||
"_Test Account Cost for Goods Sold - _TC": [1250, 0],
|
||||
"_Test Account Shipping Charges - _TC": [100, 0],
|
||||
"_Test Account Excise Duty - _TC": [140, 0],
|
||||
@ -44,6 +45,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
"_Test Account CST - _TC": [29.88, 0],
|
||||
"_Test Account VAT - _TC": [156.25, 0],
|
||||
"_Test Account Discount - _TC": [0, 168.03],
|
||||
"Round Off - _TC": [0, 0.3]
|
||||
}
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit from `tabGL Entry`
|
||||
where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl.name, as_dict=1)
|
||||
@ -61,6 +63,12 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
|
||||
set_perpetual_inventory(0, pi.company)
|
||||
|
||||
def test_terms_added_after_save(self):
|
||||
pi = frappe.copy_doc(test_records[1])
|
||||
pi.insert()
|
||||
self.assertTrue(pi.payment_schedule)
|
||||
self.assertEqual(pi.payment_schedule[0].due_date, pi.due_date)
|
||||
|
||||
def test_payment_entry_unlink_against_purchase_invoice(self):
|
||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||
unlink_payment_on_cancel_of_invoice(0)
|
||||
@ -233,6 +241,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
jv.submit()
|
||||
|
||||
pi = frappe.copy_doc(test_records[0])
|
||||
pi.disable_rounded_total = 1
|
||||
pi.append("advances", {
|
||||
"reference_type": "Journal Entry",
|
||||
"reference_name": jv.name,
|
||||
@ -242,6 +251,14 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
"remarks": jv.remark
|
||||
})
|
||||
pi.insert()
|
||||
|
||||
self.assertEqual(pi.outstanding_amount, 1212.30)
|
||||
|
||||
pi.disable_rounded_total = 0
|
||||
pi.get("payment_schedule")[0].payment_amount = 1512.0
|
||||
pi.save()
|
||||
self.assertEqual(pi.outstanding_amount, 1212.0)
|
||||
|
||||
pi.submit()
|
||||
pi.load_from_db()
|
||||
|
||||
@ -249,13 +266,61 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
where reference_type='Purchase Invoice'
|
||||
and reference_name=%s and debit_in_account_currency=300""", pi.name))
|
||||
|
||||
self.assertEqual(pi.outstanding_amount, 1212.30)
|
||||
|
||||
pi.cancel()
|
||||
|
||||
self.assertFalse(frappe.db.sql("""select name from `tabJournal Entry Account`
|
||||
where reference_type='Purchase Invoice' and reference_name=%s""", pi.name))
|
||||
|
||||
def test_invoice_with_advance_and_multi_payment_terms(self):
|
||||
from erpnext.accounts.doctype.journal_entry.test_journal_entry \
|
||||
import test_records as jv_test_records
|
||||
|
||||
jv = frappe.copy_doc(jv_test_records[1])
|
||||
jv.insert()
|
||||
jv.submit()
|
||||
|
||||
pi = frappe.copy_doc(test_records[0])
|
||||
pi.disable_rounded_total = 1
|
||||
pi.append("advances", {
|
||||
"reference_type": "Journal Entry",
|
||||
"reference_name": jv.name,
|
||||
"reference_row": jv.get("accounts")[0].name,
|
||||
"advance_amount": 400,
|
||||
"allocated_amount": 300,
|
||||
"remarks": jv.remark
|
||||
})
|
||||
pi.insert()
|
||||
|
||||
pi.update({
|
||||
"payment_schedule": get_payment_terms("_Test Payment Term Template",
|
||||
pi.posting_date, pi.grand_total)
|
||||
})
|
||||
|
||||
pi.save()
|
||||
pi.submit()
|
||||
self.assertEqual(pi.payment_schedule[0].payment_amount, 756.15)
|
||||
self.assertEqual(pi.payment_schedule[0].due_date, pi.posting_date)
|
||||
self.assertEqual(pi.payment_schedule[1].payment_amount, 756.15)
|
||||
self.assertEqual(pi.payment_schedule[1].due_date, add_days(pi.posting_date, 30))
|
||||
|
||||
pi.load_from_db()
|
||||
|
||||
self.assertTrue(
|
||||
frappe.db.sql(
|
||||
"select name from `tabJournal Entry Account` where reference_type='Purchase Invoice' and "
|
||||
"reference_name=%s and debit_in_account_currency=300", pi.name)
|
||||
)
|
||||
|
||||
self.assertEqual(pi.outstanding_amount, 1212.30)
|
||||
|
||||
pi.cancel()
|
||||
|
||||
self.assertFalse(
|
||||
frappe.db.sql(
|
||||
"select name from `tabJournal Entry Account` where reference_type='Purchase Invoice' and "
|
||||
"reference_name=%s", pi.name)
|
||||
)
|
||||
|
||||
def test_total_purchase_cost_for_project(self):
|
||||
existing_purchase_cost = frappe.db.sql("""select sum(base_net_amount)
|
||||
from `tabPurchase Invoice Item` where project = '_Test Project' and docstatus=1""")
|
||||
@ -491,7 +556,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
pi.load_from_db()
|
||||
|
||||
#check outstanding after advance allocation
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.grand_total - pi.total_advance))
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.rounded_total - pi.total_advance))
|
||||
|
||||
#added to avoid Document has been modified exception
|
||||
jv = frappe.get_doc("Journal Entry", jv.name)
|
||||
@ -499,7 +564,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
|
||||
pi.load_from_db()
|
||||
#check outstanding after advance cancellation
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.grand_total + pi.total_advance))
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.rounded_total + pi.total_advance))
|
||||
|
||||
def test_outstanding_amount_after_advance_payment_entry_cancelation(self):
|
||||
pe = frappe.get_doc({
|
||||
@ -538,7 +603,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
pi.load_from_db()
|
||||
|
||||
#check outstanding after advance allocation
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.grand_total - pi.total_advance))
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.rounded_total - pi.total_advance))
|
||||
|
||||
#added to avoid Document has been modified exception
|
||||
pe = frappe.get_doc("Payment Entry", pe.name)
|
||||
@ -546,7 +611,90 @@ class TestPurchaseInvoice(unittest.TestCase):
|
||||
|
||||
pi.load_from_db()
|
||||
#check outstanding after advance cancellation
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.grand_total + pi.total_advance))
|
||||
self.assertEqual(flt(pi.outstanding_amount), flt(pi.rounded_total + pi.total_advance))
|
||||
|
||||
def test_purchase_invoice_with_shipping_rule(self):
|
||||
from erpnext.accounts.doctype.shipping_rule.test_shipping_rule \
|
||||
import create_shipping_rule
|
||||
|
||||
shipping_rule = create_shipping_rule(shipping_rule_type = "Buying", shipping_rule_name = "Shipping Rule - Purchase Invoice Test")
|
||||
|
||||
pi = frappe.copy_doc(test_records[0])
|
||||
|
||||
pi.shipping_rule = shipping_rule.name
|
||||
pi.insert()
|
||||
|
||||
shipping_amount = 0.0
|
||||
for condition in shipping_rule.get("conditions"):
|
||||
if not condition.to_value or (flt(condition.from_value) <= pi.net_total <= flt(condition.to_value)):
|
||||
shipping_amount = condition.shipping_amount
|
||||
|
||||
shipping_charge = {
|
||||
"doctype": "Purchase Taxes and Charges",
|
||||
"category": "Valuation and Total",
|
||||
"charge_type": "Actual",
|
||||
"account_head": shipping_rule.account,
|
||||
"cost_center": shipping_rule.cost_center,
|
||||
"tax_amount": shipping_amount,
|
||||
"description": shipping_rule.name,
|
||||
"add_deduct_tax": "Add"
|
||||
}
|
||||
pi.append("taxes", shipping_charge)
|
||||
pi.save()
|
||||
|
||||
self.assertEquals(pi.net_total, 1250)
|
||||
|
||||
self.assertEquals(pi.total_taxes_and_charges, 462.3)
|
||||
self.assertEquals(pi.grand_total, 1712.3)
|
||||
|
||||
def test_gl_entry_based_on_payment_schedule(self):
|
||||
pi = make_purchase_invoice(do_not_save=True, supplier="_Test Supplier P")
|
||||
pi.append("payment_schedule", {
|
||||
"due_date": add_days(nowdate(), 15),
|
||||
"payment_amount": 100,
|
||||
"invoice_portion": 40.00
|
||||
})
|
||||
pi.append("payment_schedule", {
|
||||
"due_date": add_days(nowdate(), 25),
|
||||
"payment_amount": 150,
|
||||
"invoice_portion": 60.00
|
||||
})
|
||||
|
||||
pi.save()
|
||||
pi.submit()
|
||||
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit, due_date
|
||||
from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
|
||||
order by account asc, debit asc""", pi.name, as_dict=1)
|
||||
self.assertTrue(gl_entries)
|
||||
|
||||
expected_gl_entries = sorted([
|
||||
[pi.credit_to, 0.0, 100.0, add_days(nowdate(), 15)],
|
||||
[pi.credit_to, 0.0, 150.0, add_days(nowdate(), 25)],
|
||||
["_Test Account Cost for Goods Sold - _TC", 250.0, 0.0, None]
|
||||
])
|
||||
|
||||
for i, gle in enumerate(sorted(gl_entries, key=lambda gle: gle.account)):
|
||||
self.assertEquals(expected_gl_entries[i][0], gle.account)
|
||||
self.assertEquals(expected_gl_entries[i][1], gle.debit)
|
||||
self.assertEquals(expected_gl_entries[i][2], gle.credit)
|
||||
self.assertEquals(getdate(expected_gl_entries[i][3]), getdate(gle.due_date))
|
||||
|
||||
def test_make_pi_without_terms(self):
|
||||
pi = make_purchase_invoice(do_not_save=1)
|
||||
|
||||
self.assertFalse(pi.get('payment_schedule'))
|
||||
|
||||
pi.insert()
|
||||
|
||||
self.assertTrue(pi.get('payment_schedule'))
|
||||
|
||||
def test_duplicate_due_date_in_terms(self):
|
||||
pi = make_purchase_invoice(do_not_save=1)
|
||||
pi.append('payment_schedule', dict(due_date='2017-01-01', invoice_portion=50.00, payment_amount=50))
|
||||
pi.append('payment_schedule', dict(due_date='2017-01-01', invoice_portion=50.00, payment_amount=50))
|
||||
|
||||
self.assertRaises(frappe.ValidationError, pi.insert)
|
||||
|
||||
def unlink_payment_on_cancel_of_invoice(enable=1):
|
||||
accounts_settings = frappe.get_doc("Accounts Settings")
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "hash",
|
||||
@ -10,8 +11,10 @@
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -23,7 +26,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Consider Tax or Charge for",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -34,6 +39,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -41,6 +47,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -52,7 +59,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Add or Deduct",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -63,6 +72,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -70,6 +80,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -80,7 +91,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -91,6 +104,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -98,6 +112,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -109,7 +124,9 @@
|
||||
"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 Row #",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -119,6 +136,7 @@
|
||||
"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,
|
||||
@ -126,6 +144,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -137,7 +156,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Is this Tax included in Basic Rate?",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -146,6 +167,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 1,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -153,6 +175,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -163,13 +186,16 @@
|
||||
"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,
|
||||
"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,
|
||||
@ -177,6 +203,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -187,7 +214,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Account Head",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -198,6 +227,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -205,6 +235,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -216,7 +247,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Cost Center",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -227,6 +260,7 @@
|
||||
"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,
|
||||
@ -234,17 +268,20 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"fieldtype": "Small Text",
|
||||
"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": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -255,6 +292,7 @@
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "300px",
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -263,6 +301,7 @@
|
||||
"width": "300px"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -273,7 +312,9 @@
|
||||
"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,
|
||||
@ -281,6 +322,7 @@
|
||||
"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,
|
||||
@ -288,6 +330,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -298,7 +341,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Rate",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -308,6 +353,7 @@
|
||||
"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,
|
||||
@ -315,6 +361,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -325,7 +372,9 @@
|
||||
"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,
|
||||
@ -333,6 +382,7 @@
|
||||
"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,
|
||||
@ -340,6 +390,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -350,7 +401,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -361,6 +414,7 @@
|
||||
"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,
|
||||
@ -368,6 +422,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -378,7 +433,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Tax Amount After Discount Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -388,6 +445,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -395,6 +453,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -405,7 +464,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Total",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -416,6 +477,7 @@
|
||||
"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,
|
||||
@ -423,6 +485,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -433,7 +496,9 @@
|
||||
"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,
|
||||
@ -441,6 +506,7 @@
|
||||
"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,
|
||||
@ -448,6 +514,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -458,7 +525,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -468,6 +537,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -475,6 +545,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -485,7 +556,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Total (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -495,6 +568,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -502,6 +576,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -512,7 +587,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Tax Amount After Discount Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -522,6 +599,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -529,6 +607,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -539,7 +618,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Item Wise Tax Detail ",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -549,6 +630,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -556,6 +638,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -565,8 +648,10 @@
|
||||
"hidden": 1,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Parenttype",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -576,6 +661,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -583,17 +669,17 @@
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 1,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-08-26 03:20:22.118330",
|
||||
"modified": "2017-11-15 19:26:57.074345",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Purchase Taxes and Charges",
|
||||
@ -602,5 +688,7 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
@ -607,3 +607,4 @@ var calculate_total_billing_amount = function(frm) {
|
||||
|
||||
refresh_field('total_billing_amount')
|
||||
}
|
||||
|
||||
|
@ -2748,6 +2748,101 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
"collapsible_depends_on": "eval:(!doc.is_pos && !doc.is_return)",
|
||||
"columns": 0,
|
||||
"fieldname": "payment_schedule_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Payment Terms",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:(!doc.is_pos && !doc.is_return)",
|
||||
"fieldname": "payment_terms_template",
|
||||
"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": "Payment Terms Template",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Terms Template",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:(!doc.is_pos && !doc.is_return)",
|
||||
"fieldname": "payment_schedule",
|
||||
"fieldtype": "Table",
|
||||
"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": "Payment Schedule",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "Payment Schedule",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -3002,6 +3097,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "is_pos",
|
||||
"fieldname": "base_change_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -3062,6 +3158,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "is_pos",
|
||||
"fieldname": "change_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -3093,6 +3190,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "is_pos",
|
||||
"fieldname": "account_for_change_amount",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -4434,7 +4532,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2017-11-15 01:02:36.885752",
|
||||
"modified": "2017-11-23 12:36:53.731902",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Invoice",
|
||||
|
@ -242,12 +242,12 @@ class SalesInvoice(SellingController):
|
||||
if not self.debit_to:
|
||||
self.debit_to = get_party_account("Customer", self.customer, self.company)
|
||||
if not self.due_date and self.customer:
|
||||
self.due_date = get_due_date(self.posting_date, "Customer", self.customer, self.company)
|
||||
self.due_date = get_due_date(self.posting_date, "Customer", self.customer)
|
||||
|
||||
super(SalesInvoice, self).set_missing_values(for_validate)
|
||||
|
||||
if pos:
|
||||
return {"print_format": pos.get("print_format") }
|
||||
return {"print_format": pos.get("print_format_for_online") }
|
||||
|
||||
def update_time_sheet(self, sales_invoice):
|
||||
for d in self.timesheets:
|
||||
@ -632,9 +632,30 @@ class SalesInvoice(SellingController):
|
||||
return gl_entries
|
||||
|
||||
def make_customer_gl_entry(self, gl_entries):
|
||||
if self.grand_total:
|
||||
grand_total = self.rounded_total or self.grand_total
|
||||
if self.get("payment_schedule"):
|
||||
for d in self.get("payment_schedule"):
|
||||
payment_amount_in_company_currency = flt(d.payment_amount * self.conversion_rate,
|
||||
d.precision("payment_amount"))
|
||||
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": self.debit_to,
|
||||
"party_type": "Customer",
|
||||
"party": self.customer,
|
||||
"due_date": d.due_date,
|
||||
"against": self.against_income_account,
|
||||
"debit": payment_amount_in_company_currency,
|
||||
"debit_in_account_currency": payment_amount_in_company_currency \
|
||||
if self.party_account_currency==self.company_currency else d.payment_amount,
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype
|
||||
}, self.party_account_currency)
|
||||
)
|
||||
|
||||
elif grand_total:
|
||||
# Didnot use base_grand_total to book rounding loss gle
|
||||
grand_total_in_company_currency = flt(self.grand_total * self.conversion_rate,
|
||||
grand_total_in_company_currency = flt(grand_total * self.conversion_rate,
|
||||
self.precision("grand_total"))
|
||||
|
||||
gl_entries.append(
|
||||
@ -645,7 +666,7 @@ class SalesInvoice(SellingController):
|
||||
"against": self.against_income_account,
|
||||
"debit": grand_total_in_company_currency,
|
||||
"debit_in_account_currency": grand_total_in_company_currency \
|
||||
if self.party_account_currency==self.company_currency else self.grand_total,
|
||||
if self.party_account_currency==self.company_currency else grand_total,
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype
|
||||
}, self.party_account_currency)
|
||||
|
@ -1,7 +1,7 @@
|
||||
QUnit.module('Sales Invoice');
|
||||
|
||||
QUnit.test("test sales Invoice", function(assert) {
|
||||
assert.expect(4);
|
||||
assert.expect(6);
|
||||
let done = assert.async();
|
||||
frappe.run_serially([
|
||||
() => {
|
||||
@ -19,7 +19,8 @@ QUnit.test("test sales Invoice", function(assert) {
|
||||
{contact_person: 'Contact 1-Test Customer 1'},
|
||||
{taxes_and_charges: 'TEST In State GST'},
|
||||
{tc_name: 'Test Term 1'},
|
||||
{terms: 'This is Test'}
|
||||
{terms: 'This is Test'},
|
||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
||||
]);
|
||||
},
|
||||
() => cur_frm.save(),
|
||||
@ -31,7 +32,10 @@ QUnit.test("test sales Invoice", function(assert) {
|
||||
// get tax account head details
|
||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
||||
// grand_total Calculated
|
||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
||||
assert.ok(cur_frm.doc.grand_total==590, "Grand Total correct");
|
||||
|
||||
assert.ok(cur_frm.doc.payment_terms_template, "Payment Terms Template is correct");
|
||||
assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty");
|
||||
|
||||
},
|
||||
() => frappe.tests.click_button('Submit'),
|
||||
@ -40,4 +44,3 @@ QUnit.test("test sales Invoice", function(assert) {
|
||||
() => done()
|
||||
]);
|
||||
});
|
||||
|
||||
|
@ -3,8 +3,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
|
||||
import unittest, copy, time
|
||||
from frappe.utils import nowdate, add_days, flt, cint
|
||||
from frappe.utils import nowdate, add_days, flt, getdate, cint
|
||||
from frappe.model.dynamic_links import get_dynamic_link_map
|
||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, get_qty_after_transaction
|
||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import unlink_payment_on_cancel_of_invoice
|
||||
@ -58,6 +59,13 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
|
||||
self.assertRaises(frappe.CannotChangeConstantError, si.save)
|
||||
|
||||
def test_add_terms_after_save(self):
|
||||
si = frappe.copy_doc(test_records[2])
|
||||
si.insert()
|
||||
|
||||
self.assertTrue(si.payment_schedule)
|
||||
self.assertEqual(getdate(si.payment_schedule[0].due_date), getdate(si.due_date))
|
||||
|
||||
def test_sales_invoice_calculation_base_currency(self):
|
||||
si = frappe.copy_doc(test_records[2])
|
||||
si.insert()
|
||||
@ -199,6 +207,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
# additional discount
|
||||
si.discount_amount = 100
|
||||
si.apply_discount_on = 'Net Total'
|
||||
si.payment_schedule = []
|
||||
|
||||
si.save()
|
||||
|
||||
@ -211,6 +220,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
# additional discount on grand total
|
||||
si.discount_amount = 100
|
||||
si.apply_discount_on = 'Grand Total'
|
||||
si.payment_schedule = []
|
||||
|
||||
si.save()
|
||||
|
||||
@ -546,7 +556,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
|
||||
def test_outstanding(self):
|
||||
w = self.make()
|
||||
self.assertEquals(w.outstanding_amount, w.base_grand_total)
|
||||
self.assertEquals(w.outstanding_amount, w.base_rounded_total)
|
||||
|
||||
def test_payment(self):
|
||||
w = self.make()
|
||||
@ -560,7 +570,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
jv.insert()
|
||||
jv.submit()
|
||||
|
||||
self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 161.8)
|
||||
self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 162.0)
|
||||
|
||||
link_data = get_dynamic_link_map().get('Sales Invoice', [])
|
||||
link_doctypes = [d.parent for d in link_data]
|
||||
@ -569,7 +579,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
self.assertTrue(link_doctypes.index('GL Entry') > link_doctypes.index('Journal Entry Account'))
|
||||
|
||||
jv.cancel()
|
||||
self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 561.8)
|
||||
self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 562.0)
|
||||
|
||||
def test_sales_invoice_gl_entry_without_perpetual_inventory(self):
|
||||
si = frappe.copy_doc(test_records[1])
|
||||
@ -848,7 +858,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
self.assertTrue(frappe.db.sql("""select name from `tabJournal Entry Account`
|
||||
where reference_name=%s and credit_in_account_currency=300""", si.name))
|
||||
|
||||
self.assertEqual(si.outstanding_amount, 261.8)
|
||||
self.assertEqual(si.outstanding_amount, 262.0)
|
||||
|
||||
si.cancel()
|
||||
|
||||
@ -932,20 +942,6 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
|
||||
self.assertEquals(si.get("items")[0].serial_no, dn.get("items")[0].serial_no)
|
||||
|
||||
def test_invoice_due_date_against_customers_credit_days(self):
|
||||
# set customer's credit days
|
||||
frappe.db.set_value("Customer", "_Test Customer", "credit_days_based_on", "Fixed Days")
|
||||
frappe.db.set_value("Customer", "_Test Customer", "credit_days", 10)
|
||||
|
||||
si = create_sales_invoice()
|
||||
self.assertEqual(si.due_date, add_days(nowdate(), 10))
|
||||
|
||||
# set customer's credit days is last day of the next month
|
||||
frappe.db.set_value("Customer", "_Test Customer", "credit_days_based_on", "Last Day of the Next Month")
|
||||
|
||||
si1 = create_sales_invoice(posting_date="2015-07-05")
|
||||
self.assertEqual(si1.due_date, "2015-08-31")
|
||||
|
||||
def test_return_sales_invoice(self):
|
||||
set_perpetual_inventory()
|
||||
make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)
|
||||
@ -1152,7 +1148,8 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
si.load_from_db()
|
||||
|
||||
#check outstanding after advance allocation
|
||||
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total - si.total_advance, si.precision("outstanding_amount")))
|
||||
self.assertEqual(flt(si.outstanding_amount),
|
||||
flt(si.rounded_total - si.total_advance, si.precision("outstanding_amount")))
|
||||
|
||||
#added to avoid Document has been modified exception
|
||||
jv = frappe.get_doc("Journal Entry", jv.name)
|
||||
@ -1160,7 +1157,8 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
|
||||
si.load_from_db()
|
||||
#check outstanding after advance cancellation
|
||||
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total + si.total_advance, si.precision("outstanding_amount")))
|
||||
self.assertEqual(flt(si.outstanding_amount),
|
||||
flt(si.rounded_total + si.total_advance, si.precision("outstanding_amount")))
|
||||
|
||||
def test_outstanding_amount_after_advance_payment_entry_cancelation(self):
|
||||
pe = frappe.get_doc({
|
||||
@ -1199,7 +1197,8 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
si.load_from_db()
|
||||
|
||||
#check outstanding after advance allocation
|
||||
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total - si.total_advance, si.precision("outstanding_amount")))
|
||||
self.assertEqual(flt(si.outstanding_amount),
|
||||
flt(si.rounded_total - si.total_advance, si.precision("outstanding_amount")))
|
||||
|
||||
#added to avoid Document has been modified exception
|
||||
pe = frappe.get_doc("Payment Entry", pe.name)
|
||||
@ -1207,7 +1206,8 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
|
||||
si.load_from_db()
|
||||
#check outstanding after advance cancellation
|
||||
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total + si.total_advance, si.precision("outstanding_amount")))
|
||||
self.assertEqual(flt(si.outstanding_amount),
|
||||
flt(si.rounded_total + si.total_advance, si.precision("outstanding_amount")))
|
||||
|
||||
def test_multiple_uom_in_selling(self):
|
||||
frappe.db.sql("""delete from `tabItem Price`
|
||||
@ -1322,6 +1322,40 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
si.insert()
|
||||
return si
|
||||
|
||||
def test_gl_entry_based_on_payment_schedule(self):
|
||||
si = create_sales_invoice(do_not_save=True, customer="_Test Customer P")
|
||||
si.append("payment_schedule", {
|
||||
"due_date": add_days(nowdate(), 15),
|
||||
"payment_amount": 20,
|
||||
"invoice_portion": 20.00
|
||||
})
|
||||
si.append("payment_schedule", {
|
||||
"due_date": add_days(nowdate(), 45),
|
||||
"payment_amount": 80,
|
||||
"invoice_portion": 80.00
|
||||
})
|
||||
|
||||
si.save()
|
||||
si.submit()
|
||||
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit, due_date
|
||||
from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
|
||||
order by account asc, debit asc""", si.name, as_dict=1)
|
||||
self.assertTrue(gl_entries)
|
||||
|
||||
expected_gl_entries = sorted([
|
||||
[si.debit_to, 20.0, 0.0, add_days(nowdate(), 15)],
|
||||
[si.debit_to, 80.0, 0.0, add_days(nowdate(), 45)],
|
||||
["Sales - _TC", 0.0, 100.0, None]
|
||||
])
|
||||
|
||||
for i, gle in enumerate(sorted(gl_entries, key=lambda gle: gle.account)):
|
||||
self.assertEquals(expected_gl_entries[i][0], gle.account)
|
||||
self.assertEquals(expected_gl_entries[i][1], gle.debit)
|
||||
self.assertEquals(expected_gl_entries[i][2], gle.credit)
|
||||
self.assertEquals(getdate(expected_gl_entries[i][3]), getdate(gle.due_date))
|
||||
|
||||
|
||||
def test_company_monthly_sales(self):
|
||||
existing_current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales")
|
||||
|
||||
@ -1367,6 +1401,53 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
self.assertEquals(expected_values[gle.account][1], gle.debit)
|
||||
self.assertEquals(expected_values[gle.account][2], gle.credit)
|
||||
|
||||
def test_sales_invoice_with_shipping_rule(self):
|
||||
from erpnext.accounts.doctype.shipping_rule.test_shipping_rule \
|
||||
import create_shipping_rule
|
||||
|
||||
shipping_rule = create_shipping_rule(shipping_rule_type = "Selling", shipping_rule_name = "Shipping Rule - Sales Invoice Test")
|
||||
|
||||
si = frappe.copy_doc(test_records[2])
|
||||
|
||||
si.shipping_rule = shipping_rule.name
|
||||
si.insert()
|
||||
|
||||
shipping_amount = 0.0
|
||||
for condition in shipping_rule.get("conditions"):
|
||||
if not condition.to_value or (flt(condition.from_value) <= si.net_total <= flt(condition.to_value)):
|
||||
shipping_amount = condition.shipping_amount
|
||||
|
||||
shipping_charge = {
|
||||
"doctype": "Sales Taxes and Charges",
|
||||
"category": "Valuation and Total",
|
||||
"charge_type": "Actual",
|
||||
"account_head": shipping_rule.account,
|
||||
"cost_center": shipping_rule.cost_center,
|
||||
"tax_amount": shipping_amount,
|
||||
"description": shipping_rule.name
|
||||
}
|
||||
si.append("taxes", shipping_charge)
|
||||
si.save()
|
||||
|
||||
self.assertEquals(si.net_total, 1250)
|
||||
|
||||
self.assertEquals(si.total_taxes_and_charges, 577.05)
|
||||
self.assertEquals(si.grand_total, 1827.05)
|
||||
|
||||
def test_create_invoice_without_terms(self):
|
||||
si = create_sales_invoice(do_not_save=1)
|
||||
self.assertFalse(si.get('payment_schedule'))
|
||||
|
||||
si.insert()
|
||||
self.assertTrue(si.get('payment_schedule'))
|
||||
|
||||
def test_duplicate_due_date_in_terms(self):
|
||||
si = create_sales_invoice(do_not_save=1)
|
||||
si.append('payment_schedule', dict(due_date='2017-01-01', invoice_portion=50.00, payment_amount=50))
|
||||
si.append('payment_schedule', dict(due_date='2017-01-01', invoice_portion=50.00, payment_amount=50))
|
||||
|
||||
self.assertRaises(frappe.ValidationError, si.insert)
|
||||
|
||||
def create_sales_invoice(**args):
|
||||
si = frappe.new_doc("Sales Invoice")
|
||||
args = frappe._dict(args)
|
||||
@ -1400,6 +1481,11 @@ def create_sales_invoice(**args):
|
||||
si.insert()
|
||||
if not args.do_not_submit:
|
||||
si.submit()
|
||||
else:
|
||||
si.payment_schedule = []
|
||||
else:
|
||||
si.payment_schedule = []
|
||||
|
||||
return si
|
||||
|
||||
test_dependencies = ["Journal Entry", "Contact", "Address"]
|
||||
|
@ -19,7 +19,8 @@ QUnit.test("test sales Invoice with payment", function(assert) {
|
||||
{contact_person: 'Contact 1-Test Customer 1'},
|
||||
{taxes_and_charges: 'TEST In State GST'},
|
||||
{tc_name: 'Test Term 1'},
|
||||
{terms: 'This is Test'}
|
||||
{terms: 'This is Test'},
|
||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
||||
]);
|
||||
},
|
||||
() => cur_frm.save(),
|
||||
@ -43,6 +44,7 @@ QUnit.test("test sales Invoice with payment", function(assert) {
|
||||
() => { cur_frm.set_value('paid_to','Cash - '+frappe.get_abbr(frappe.defaults.get_default('Company')));},
|
||||
() => {cur_frm.set_value('reference_no','TEST1234');},
|
||||
() => {cur_frm.set_value('reference_date',frappe.datetime.add_days(frappe.datetime.nowdate(), 0));},
|
||||
() => cur_frm.set_value("payment_schedule", []),
|
||||
() => cur_frm.save(),
|
||||
() => {
|
||||
// get payment details
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "INVTD.######",
|
||||
@ -12,6 +13,7 @@
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -22,7 +24,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -33,6 +37,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -40,6 +45,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -51,7 +57,9 @@
|
||||
"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 Row #",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -61,6 +69,7 @@
|
||||
"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,
|
||||
@ -68,6 +77,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -78,7 +88,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Account Head",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -89,6 +101,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 1,
|
||||
@ -96,6 +109,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -107,7 +121,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Cost Center",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -118,6 +134,7 @@
|
||||
"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,
|
||||
@ -125,6 +142,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -135,13 +153,16 @@
|
||||
"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,
|
||||
"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,
|
||||
@ -150,17 +171,20 @@
|
||||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"fieldtype": "Small Text",
|
||||
"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": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -171,6 +195,7 @@
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "300px",
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -179,6 +204,7 @@
|
||||
"width": "300px"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -190,7 +216,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Is this Tax included in Basic Rate?",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -199,6 +227,7 @@
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "150px",
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 1,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -207,6 +236,7 @@
|
||||
"width": "150px"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -217,7 +247,9 @@
|
||||
"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,
|
||||
@ -225,6 +257,7 @@
|
||||
"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,
|
||||
@ -232,6 +265,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -242,7 +276,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Rate",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -252,6 +288,7 @@
|
||||
"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,
|
||||
@ -259,6 +296,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -269,7 +307,9 @@
|
||||
"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,
|
||||
@ -277,6 +317,7 @@
|
||||
"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,
|
||||
@ -284,6 +325,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -294,7 +336,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -304,6 +348,7 @@
|
||||
"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,
|
||||
@ -311,6 +356,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -321,7 +367,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Total",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -331,6 +379,7 @@
|
||||
"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,
|
||||
@ -338,6 +387,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -348,7 +398,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Tax Amount After Discount Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -358,6 +410,7 @@
|
||||
"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,
|
||||
@ -365,6 +418,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -375,7 +429,9 @@
|
||||
"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,
|
||||
@ -383,6 +439,7 @@
|
||||
"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,
|
||||
@ -390,6 +447,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -400,7 +458,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -411,6 +471,7 @@
|
||||
"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,
|
||||
@ -418,6 +479,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -428,7 +490,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Total (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -439,6 +503,7 @@
|
||||
"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,
|
||||
@ -446,6 +511,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -457,7 +523,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Tax Amount After Discount Amount (Company Currency)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -466,6 +534,7 @@
|
||||
"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,
|
||||
@ -473,6 +542,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -483,7 +553,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Item Wise Tax Detail",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -493,6 +565,7 @@
|
||||
"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,
|
||||
@ -500,6 +573,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -510,7 +584,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Parenttype",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -520,6 +596,7 @@
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 1,
|
||||
@ -527,17 +604,17 @@
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 1,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-08-26 03:08:03.235381",
|
||||
"modified": "2017-11-15 19:24:39.351600",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Taxes and Charges",
|
||||
@ -546,6 +623,8 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 0,
|
||||
"track_seen": 0
|
||||
}
|
@ -1,3 +1,15 @@
|
||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
frappe.ui.form.on('Shipping Rule', {
|
||||
refresh: function(frm) {
|
||||
frm.trigger('toggle_reqd');
|
||||
},
|
||||
calculate_based_on: function(frm) {
|
||||
frm.trigger('toggle_reqd');
|
||||
},
|
||||
toggle_reqd: function(frm) {
|
||||
frm.toggle_reqd("shipping_amount", frm.doc.calculate_based_on === 'Fixed');
|
||||
frm.toggle_reqd("conditions", frm.doc.calculate_based_on !== 'Fixed');
|
||||
}
|
||||
});
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:label",
|
||||
@ -12,6 +13,7 @@
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -23,7 +25,8 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Shipping Rule Label",
|
||||
"length": 0,
|
||||
@ -40,6 +43,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -50,6 +54,7 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Disabled",
|
||||
@ -68,134 +73,53 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Net Total",
|
||||
"fieldname": "calculate_based_on",
|
||||
"fieldname": "column_break_4",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "shipping_rule_type",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 1,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Calculate Based On",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Net Total\nNet Weight",
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:!doc.disabled",
|
||||
"fieldname": "rule_conditions_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Shipping Rule Conditions",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "conditions",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Shipping Rule Conditions",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule Condition",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:!doc.disabled",
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Valid for Countries",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "worldwide_shipping",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Worldwide Shipping",
|
||||
"label": "Shipping Rule Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Selling\nBuying",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
@ -209,36 +133,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:!doc.worldwide_shipping",
|
||||
"fieldname": "countries",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Valid for Countries",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule Country",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -250,8 +145,10 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Accounting",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -266,6 +163,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -276,6 +174,7 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Company",
|
||||
@ -294,6 +193,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -304,6 +204,7 @@
|
||||
"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,
|
||||
@ -320,6 +221,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -330,6 +232,7 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Shipping Account",
|
||||
@ -348,6 +251,7 @@
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -358,6 +262,7 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Cost Center",
|
||||
@ -374,20 +279,264 @@
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "shipping_amount_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Fixed",
|
||||
"fieldname": "calculate_based_on",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Calculate Based On",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Fixed\nNet Total",
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_8",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.calculate_based_on==='Fixed'",
|
||||
"fieldname": "shipping_amount",
|
||||
"fieldtype": "Currency",
|
||||
"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": "Shipping Amount",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"collapsible_depends_on": "",
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.calculate_based_on!=='Fixed'",
|
||||
"fieldname": "rule_conditions_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Shipping Rule Conditions",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "conditions",
|
||||
"fieldtype": "Table",
|
||||
"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": "Shipping Rule Conditions",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule Condition",
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Restrict to Countries",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fieldname": "countries",
|
||||
"fieldtype": "Table",
|
||||
"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": "Valid for Countries",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule Country",
|
||||
"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,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-truck",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-11-07 05:18:06.472734",
|
||||
"modified": "2017-11-17 13:10:34.302259",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Shipping Rule",
|
||||
@ -403,7 +552,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -424,7 +572,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -445,7 +592,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -466,7 +612,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -481,6 +626,8 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 0,
|
||||
"track_seen": 0
|
||||
}
|
@ -15,18 +15,10 @@ class ManyBlankToValuesError(frappe.ValidationError): pass
|
||||
|
||||
class ShippingRule(Document):
|
||||
def validate(self):
|
||||
self.validate_value("calculate_based_on", "in", ["Net Total", "Net Weight"])
|
||||
self.conditions = self.get("conditions")
|
||||
self.validate_from_to_values()
|
||||
self.sort_shipping_rule_conditions()
|
||||
self.validate_overlapping_shipping_rule_conditions()
|
||||
|
||||
if self.worldwide_shipping:
|
||||
self.countries = []
|
||||
|
||||
elif not len([d.country for d in self.countries if d.country]):
|
||||
frappe.throw(_("Please specify a country for this Shipping Rule or check Worldwide Shipping"))
|
||||
|
||||
def validate_from_to_values(self):
|
||||
zero_to_values = []
|
||||
|
||||
@ -47,6 +39,76 @@ class ShippingRule(Document):
|
||||
throw(_('There can only be one Shipping Rule Condition with 0 or blank value for "To Value"'),
|
||||
ManyBlankToValuesError)
|
||||
|
||||
def apply(self, doc):
|
||||
'''Apply shipping rule on given doc. Called from accounts controller'''
|
||||
|
||||
shipping_amount = 0.0
|
||||
by_value = False
|
||||
|
||||
self.validate_countries(doc)
|
||||
|
||||
if self.calculate_based_on == 'Net Total':
|
||||
value = doc.base_net_total
|
||||
by_value = True
|
||||
|
||||
elif self.calculate_based_on == 'Fixed':
|
||||
shipping_amount = self.shipping_amount
|
||||
|
||||
# shipping amount by value, apply conditions
|
||||
if by_value:
|
||||
shipping_amount = self.get_shipping_amount_from_rules(value)
|
||||
|
||||
# convert to order currency
|
||||
if doc.currency != doc.company_currency:
|
||||
shipping_amount = flt(shipping_amount / doc.conversion_rate, 2)
|
||||
|
||||
self.add_shipping_rule_to_tax_table(doc, shipping_amount)
|
||||
|
||||
def get_shipping_amount_from_rules(self, value):
|
||||
for condition in self.get("conditions"):
|
||||
if not condition.to_value or (flt(condition.from_value) <= value <= flt(condition.to_value)):
|
||||
return condition.shipping_amount
|
||||
|
||||
return 0.0
|
||||
|
||||
def validate_countries(self, doc):
|
||||
# validate applicable countries
|
||||
if self.countries:
|
||||
shipping_country = doc.get_shipping_address().get('country')
|
||||
if not shipping_country:
|
||||
frappe.throw(_('Shipping Address does not have country, which is required for this Shipping Rule'))
|
||||
if shipping_country not in [d.country for d in self.countries]:
|
||||
frappe.throw(_('Shipping rule not applicable for country {0}'.format(shipping_country)))
|
||||
|
||||
def add_shipping_rule_to_tax_table(self, doc, shipping_amount):
|
||||
shipping_charge = {
|
||||
"charge_type": "Actual",
|
||||
"account_head": self.account,
|
||||
"cost_center": self.cost_center
|
||||
}
|
||||
if self.shipping_rule_type == "Selling":
|
||||
# check if not applied on purchase
|
||||
if not doc.meta.get_field('taxes').options == 'Sales Taxes and Charges':
|
||||
frappe.throw(_('Shipping rule only applicable for Selling'))
|
||||
shipping_charge["doctype"] = "Sales Taxes and Charges"
|
||||
else:
|
||||
# check if not applied on sales
|
||||
if not doc.meta.get_field('taxes').options == 'Purchase Taxes and Charges':
|
||||
frappe.throw(_('Shipping rule only applicable for Buying'))
|
||||
|
||||
shipping_charge["doctype"] = "Purchase Taxes and Charges"
|
||||
shipping_charge["category"] = "Valuation and Total"
|
||||
shipping_charge["add_deduct_tax"] = "Add"
|
||||
|
||||
existing_shipping_charge = doc.get("taxes", filters=shipping_charge)
|
||||
if existing_shipping_charge:
|
||||
# take the last record found
|
||||
existing_shipping_charge[-1].tax_amount = shipping_amount
|
||||
else:
|
||||
shipping_charge["tax_amount"] = shipping_amount
|
||||
shipping_charge["description"] = self.label
|
||||
doc.append("taxes", shipping_charge)
|
||||
|
||||
def sort_shipping_rule_conditions(self):
|
||||
"""Sort Shipping Rule Conditions based on increasing From Value"""
|
||||
self.shipping_rules_conditions = sorted(self.conditions, key=lambda d: flt(d.from_value))
|
||||
|
@ -7,6 +7,7 @@
|
||||
"doctype": "Shipping Rule",
|
||||
"label": "_Test Shipping Rule",
|
||||
"name": "_Test Shipping Rule",
|
||||
"shipping_rule_type": "Selling",
|
||||
"conditions": [
|
||||
{
|
||||
"doctype": "Shipping Rule Condition",
|
||||
@ -26,9 +27,12 @@
|
||||
"doctype": "Shipping Rule Condition",
|
||||
"from_value": 201,
|
||||
"parentfield": "conditions",
|
||||
"shipping_amount": 0.0
|
||||
"shipping_amount": 200.0
|
||||
}
|
||||
],
|
||||
"countries": [
|
||||
{"country": "India"}
|
||||
],
|
||||
"worldwide_shipping": 1
|
||||
},
|
||||
{
|
||||
@ -73,6 +77,7 @@
|
||||
"doctype": "Shipping Rule",
|
||||
"label": "_Test Shipping Rule - Rest of the World",
|
||||
"name": "_Test Shipping Rule - Rest of the World",
|
||||
"shipping_rule_type": "Buying",
|
||||
"conditions": [
|
||||
{
|
||||
"doctype": "Shipping Rule Condition",
|
||||
@ -95,6 +100,9 @@
|
||||
"shipping_amount": 1500.0
|
||||
}
|
||||
],
|
||||
"worldwide_shipping": 1
|
||||
"worldwide_shipping": 1,
|
||||
"countries": [
|
||||
{"country": "Germany"}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -7,6 +7,8 @@ QUnit.test("test Shipping Rule", function(assert) {
|
||||
() => {
|
||||
return frappe.tests.make("Shipping Rule", [
|
||||
{label: "Next Day Shipping"},
|
||||
{shipping_rule_type: "Selling"},
|
||||
{calculate_based_on: 'Net Total'},
|
||||
{conditions:[
|
||||
[
|
||||
{from_value:1},
|
||||
|
@ -36,3 +36,38 @@ class TestShippingRule(unittest.TestCase):
|
||||
shipping_rule.get("conditions")[1].from_value = range_b[0]
|
||||
shipping_rule.get("conditions")[1].to_value = range_b[1]
|
||||
self.assertRaises(OverlappingConditionError, shipping_rule.insert)
|
||||
|
||||
def create_shipping_rule(shipping_rule_type, shipping_rule_name):
|
||||
sr = frappe.new_doc("Shipping Rule")
|
||||
sr.account = "_Test Account Shipping Charges - _TC"
|
||||
sr.calculate_based_on = "Net Total"
|
||||
sr.company = "_Test Company"
|
||||
sr.cost_center = "_Test Cost Center - _TC"
|
||||
sr.label = shipping_rule_name
|
||||
sr.name = shipping_rule_name
|
||||
sr.shipping_rule_type = shipping_rule_type
|
||||
|
||||
sr.append("conditions", {
|
||||
"doctype": "Shipping Rule Condition",
|
||||
"from_value": 0,
|
||||
"parentfield": "conditions",
|
||||
"shipping_amount": 50.0,
|
||||
"to_value": 100
|
||||
})
|
||||
sr.append("conditions", {
|
||||
"doctype": "Shipping Rule Condition",
|
||||
"from_value": 101,
|
||||
"parentfield": "conditions",
|
||||
"shipping_amount": 100.0,
|
||||
"to_value": 200
|
||||
})
|
||||
sr.append("conditions", {
|
||||
"doctype": "Shipping Rule Condition",
|
||||
"from_value": 201,
|
||||
"parentfield": "conditions",
|
||||
"shipping_amount": 200.0,
|
||||
"to_value": 2000
|
||||
})
|
||||
sr.insert(ignore_permissions=True)
|
||||
sr.submit()
|
||||
return sr
|
||||
|
@ -0,0 +1,37 @@
|
||||
QUnit.module('Shipping Rule');
|
||||
|
||||
QUnit.test("test Shipping Rule", function(assert) {
|
||||
assert.expect(1);
|
||||
let done = assert.async();
|
||||
frappe.run_serially([
|
||||
() => {
|
||||
return frappe.tests.make("Shipping Rule", [
|
||||
{label: "Two Day Shipping"},
|
||||
{shipping_rule_type: "Buying"},
|
||||
{fixed_shipping_amount: 0},
|
||||
{conditions:[
|
||||
[
|
||||
{from_value:1},
|
||||
{to_value:200},
|
||||
{shipping_amount:100}
|
||||
],
|
||||
[
|
||||
{from_value:201},
|
||||
{to_value:3000},
|
||||
{shipping_amount:200}
|
||||
],
|
||||
]},
|
||||
{countries:[
|
||||
[
|
||||
{country:'India'}
|
||||
]
|
||||
]},
|
||||
{account:'Accounts Payable - '+frappe.get_abbr(frappe.defaults.get_default("Company"))},
|
||||
{cost_center:'Main - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
||||
]);
|
||||
},
|
||||
() => {assert.ok(cur_frm.doc.name=='Two Day Shipping');},
|
||||
() => done()
|
||||
]);
|
||||
});
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe, erpnext
|
||||
from frappe.utils import flt, cstr, cint
|
||||
from frappe.utils import flt, cstr, cint, getdate
|
||||
from frappe import _
|
||||
from frappe.model.meta import get_field_precision
|
||||
from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
|
||||
@ -75,7 +75,8 @@ def check_if_in_list(gle, gl_map):
|
||||
and cstr(e.get('against_voucher'))==cstr(gle.get('against_voucher')) \
|
||||
and cstr(e.get('against_voucher_type')) == cstr(gle.get('against_voucher_type')) \
|
||||
and cstr(e.get('cost_center')) == cstr(gle.get('cost_center')) \
|
||||
and cstr(e.get('project')) == cstr(gle.get('project')):
|
||||
and cstr(e.get('project')) == cstr(gle.get('project')) \
|
||||
and getdate(e.get('due_date')) == getdate(gle.get('due_date')):
|
||||
return e
|
||||
|
||||
def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
|
||||
|
@ -1505,11 +1505,15 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
me.make_menu_list()
|
||||
}, "fa fa-plus")
|
||||
|
||||
if (this.frm.doc.docstatus == 1) {
|
||||
if (this.frm.doc.docstatus == 1 || this.pos_profile_data["allow_print_before_pay"]) {
|
||||
this.page.set_secondary_action(__("Print"), function () {
|
||||
me.create_invoice();
|
||||
var html = frappe.render(me.print_template_data, me.frm.doc)
|
||||
me.print_document(html)
|
||||
})
|
||||
}
|
||||
|
||||
if (this.frm.doc.docstatus == 1) {
|
||||
this.page.add_menu_item(__("Email"), function () {
|
||||
me.email_prompt()
|
||||
})
|
||||
|
@ -9,7 +9,7 @@ from frappe import _, msgprint, scrub
|
||||
from frappe.defaults import get_user_permissions
|
||||
from frappe.model.utils import get_fetch_values
|
||||
from frappe.utils import (add_days, getdate, formatdate, get_first_day, date_diff,
|
||||
add_years, get_timestamp, nowdate, flt)
|
||||
add_years, get_timestamp, nowdate, flt, add_months, get_last_day)
|
||||
from frappe.contacts.doctype.address.address import (get_address_display,
|
||||
get_default_address, get_company_address)
|
||||
from frappe.contacts.doctype.contact.contact import get_contact_details, get_default_contact
|
||||
@ -51,6 +51,7 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
|
||||
set_other_values(out, party, party_type)
|
||||
set_price_list(out, party, party_type, price_list)
|
||||
out["taxes_and_charges"] = set_taxes(party.name, party_type, posting_date, company, out.customer_group, out.supplier_type)
|
||||
out["payment_terms_template"] = get_pyt_term_template(party.name, party_type)
|
||||
|
||||
if not out.get("currency"):
|
||||
out["currency"] = currency
|
||||
@ -163,7 +164,7 @@ def set_account_and_due_date(party, account, party_type, company, posting_date,
|
||||
out = {
|
||||
party_type.lower(): party,
|
||||
account_fieldname : account,
|
||||
"due_date": get_due_date(posting_date, party_type, party, company)
|
||||
"due_date": get_due_date(posting_date, party_type, party)
|
||||
}
|
||||
return out
|
||||
|
||||
@ -262,51 +263,54 @@ def validate_party_accounts(doc):
|
||||
|
||||
if doc.get("default_currency") and party_account_currency and company_default_currency:
|
||||
if doc.default_currency != party_account_currency and doc.default_currency != company_default_currency:
|
||||
frappe.throw(_("Billing currency must be equal to either default comapany's currency or party account currency"))
|
||||
frappe.throw(_("Billing currency must be equal to either default company's currency or party account currency"))
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_due_date(posting_date, party_type, party, company):
|
||||
"""Set Due Date = Posting Date + Credit Days"""
|
||||
def get_due_date(posting_date, party_type, party):
|
||||
"""Get due date from `Payment Terms Template`"""
|
||||
due_date = None
|
||||
if posting_date and party:
|
||||
due_date = posting_date
|
||||
credit_days_based_on, credit_days = get_credit_days(party_type, party, company)
|
||||
if credit_days_based_on == "Fixed Days" and credit_days:
|
||||
due_date = add_days(posting_date, credit_days)
|
||||
elif credit_days_based_on == "Last Day of the Next Month":
|
||||
due_date = (get_first_day(posting_date, 0, 2) + datetime.timedelta(-1)).strftime("%Y-%m-%d")
|
||||
template_name = get_pyt_term_template(party, party_type)
|
||||
if template_name:
|
||||
due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d")
|
||||
else:
|
||||
if party_type == "Supplier":
|
||||
supplier_type = frappe.db.get_value(party_type, party, fieldname="supplier_type")
|
||||
template_name = frappe.db.get_value("Supplier Type", supplier_type, fieldname="payment_terms")
|
||||
if template_name:
|
||||
due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d")
|
||||
|
||||
return due_date
|
||||
|
||||
def get_credit_days(party_type, party, company):
|
||||
credit_days = 0
|
||||
if party_type and party:
|
||||
if party_type == "Customer":
|
||||
credit_days_based_on, credit_days, customer_group = \
|
||||
frappe.db.get_value(party_type, party, ["credit_days_based_on", "credit_days", "customer_group"])
|
||||
|
||||
def get_due_date_from_template(template_name, posting_date):
|
||||
"""
|
||||
Inspects all `Payment Term`s from the a `Payment Terms Template` and returns the due
|
||||
date after considering all the `Payment Term`s requirements.
|
||||
:param template_name: Name of the `Payment Terms Template`
|
||||
:return: String representing the calculated due date
|
||||
"""
|
||||
due_date = getdate(posting_date)
|
||||
template = frappe.get_doc('Payment Terms Template', template_name)
|
||||
|
||||
for term in template.terms:
|
||||
if term.due_date_based_on == 'Day(s) after invoice date':
|
||||
due_date = max(due_date, add_days(due_date, term.credit_days))
|
||||
elif term.due_date_based_on == 'Day(s) after the end of the invoice month':
|
||||
due_date = max(due_date, add_days(get_last_day(due_date), term.credit_days))
|
||||
else:
|
||||
credit_days_based_on, credit_days, supplier_type = \
|
||||
frappe.db.get_value(party_type, party, ["credit_days_based_on", "credit_days", "supplier_type"])
|
||||
due_date = max(due_date, add_months(get_last_day(due_date), term.credit_months))
|
||||
|
||||
if not credit_days_based_on:
|
||||
if party_type == "Customer" and customer_group:
|
||||
credit_days_based_on, credit_days = \
|
||||
frappe.db.get_value("Customer Group", customer_group, ["credit_days_based_on", "credit_days"])
|
||||
elif party_type == "Supplier" and supplier_type:
|
||||
credit_days_based_on, credit_days = \
|
||||
frappe.db.get_value("Supplier Type", supplier_type, ["credit_days_based_on", "credit_days"])
|
||||
return due_date
|
||||
|
||||
if not credit_days_based_on:
|
||||
credit_days_based_on, credit_days = \
|
||||
frappe.db.get_value("Company", company, ["credit_days_based_on", "credit_days"])
|
||||
|
||||
return credit_days_based_on, credit_days
|
||||
|
||||
def validate_due_date(posting_date, due_date, party_type, party, company):
|
||||
def validate_due_date(posting_date, due_date, party_type, party):
|
||||
if getdate(due_date) < getdate(posting_date):
|
||||
frappe.throw(_("Due Date cannot be before Posting Date"))
|
||||
else:
|
||||
default_due_date = get_due_date(posting_date, party_type, party, company)
|
||||
default_due_date = get_due_date(posting_date, party_type, party)
|
||||
if not default_due_date:
|
||||
return
|
||||
|
||||
@ -316,7 +320,8 @@ def validate_due_date(posting_date, due_date, party_type, party, company):
|
||||
msgprint(_("Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s)")
|
||||
.format(date_diff(due_date, default_due_date)))
|
||||
else:
|
||||
frappe.throw(_("Due / Reference Date cannot be after {0}").format(formatdate(default_due_date)))
|
||||
frappe.throw(_("Due / Reference Date cannot be after {0}")
|
||||
.format(formatdate(default_due_date)))
|
||||
|
||||
@frappe.whitelist()
|
||||
def set_taxes(party, party_type, posting_date, company, customer_group=None, supplier_type=None,
|
||||
@ -353,6 +358,16 @@ def set_taxes(party, party_type, posting_date, company, customer_group=None, sup
|
||||
|
||||
return get_tax_template(posting_date, args)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_pyt_term_template(party_name, party_type):
|
||||
template = None
|
||||
if party_type in ('Customer', 'Supplier'):
|
||||
template = frappe.db.get_value(party_type, party_name, fieldname='payment_terms')
|
||||
|
||||
return template
|
||||
|
||||
|
||||
def validate_party_frozen_disabled(party_type, party_name):
|
||||
if party_type and party_name:
|
||||
if party_type in ("Customer", "Supplier"):
|
||||
|
@ -36,8 +36,14 @@
|
||||
<br>{%= data[i][__("Voucher No")] %}</td>
|
||||
<td>
|
||||
{% if(!(filters.customer || filters.supplier)) { %}
|
||||
{%= data[i][__("Customer Name")] || data[i][__("Customer")] || data[i][__("Supplier Name")] || data[i][__("Supplier")] %}<br>{%= __("Remarks") %}:
|
||||
{%= data[i][__("Customer")] || data[i][__("Supplier")] %}
|
||||
{% if(data[i][__("Customer Name")] && data[i][__("Customer Name")] != data[i][__("Customer")]) { %}
|
||||
<br> {%= data[i][__("Customer Name")] %}
|
||||
{% } else if(data[i][__("Supplier Name")] != data[i][__("Supplier")]) { %}
|
||||
<br> {%= data[i][__("Supplier Name")] %}
|
||||
{% } %}
|
||||
{% } %}
|
||||
<br>{%= __("Remarks") %}:
|
||||
{%= data[i][__("Remarks")] %}
|
||||
</td>
|
||||
<td style="text-align: right">
|
||||
@ -66,8 +72,13 @@
|
||||
<td>
|
||||
{% if(!(filters.customer || filters.supplier)) { %}
|
||||
{%= data[i][__("Customer")] || data[i][__("Supplier")] %}
|
||||
<br>{%= __("Remarks") %}:
|
||||
{% if(data[i][__("Customer Name")] && data[i][__("Customer Name")] != data[i][__("Customer")]) { %}
|
||||
<br> {%= data[i][__("Customer Name")] %}
|
||||
{% } else if(data[i][__("Supplier Name")] != data[i][__("Supplier")]) { %}
|
||||
<br> {%= data[i][__("Supplier Name")] %}
|
||||
{% } %}
|
||||
{% } %}
|
||||
<br>{%= __("Remarks") %}:
|
||||
{%= data[i][__("Remarks")] %}
|
||||
</td>
|
||||
{% } else { %}
|
||||
|
@ -113,7 +113,7 @@ class ReceivablePayableReport(object):
|
||||
row += [self.get_party_name(gle.party_type, gle.party)]
|
||||
|
||||
# get due date
|
||||
due_date = voucher_details.get(gle.voucher_no, {}).get("due_date", "")
|
||||
due_date = gle.due_date or voucher_details.get(gle.voucher_no, {}).get("due_date", "")
|
||||
|
||||
row += [gle.voucher_type, gle.voucher_no, due_date]
|
||||
|
||||
@ -162,8 +162,7 @@ class ReceivablePayableReport(object):
|
||||
|
||||
def get_entries_till(self, report_date, party_type):
|
||||
# returns a generator
|
||||
return (e for e in self.get_gl_entries(party_type)
|
||||
if getdate(e.posting_date) <= report_date)
|
||||
return (e for e in self.get_gl_entries(party_type) if getdate(e.posting_date) <= report_date)
|
||||
|
||||
def is_receivable_or_payable(self, gle, dr_or_cr, future_vouchers):
|
||||
return (
|
||||
@ -189,7 +188,8 @@ class ReceivablePayableReport(object):
|
||||
reverse_dr_or_cr = "credit" if dr_or_cr=="debit" else "debit"
|
||||
|
||||
for e in self.get_gl_entries_for(gle.party, gle.party_type, gle.voucher_type, gle.voucher_no):
|
||||
if getdate(e.posting_date) <= report_date and e.name!=gle.name:
|
||||
if getdate(e.posting_date) <= report_date and e.name!=gle.name \
|
||||
and (not gle.due_date or getdate(e.due_date) == getdate(gle.due_date)):
|
||||
amount = flt(e.get(reverse_dr_or_cr)) - flt(e.get(dr_or_cr))
|
||||
if e.voucher_no not in return_entries:
|
||||
payment_amount += amount
|
||||
@ -251,11 +251,11 @@ class ReceivablePayableReport(object):
|
||||
select_fields = "sum(debit) as debit, sum(credit) as credit"
|
||||
|
||||
self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party,
|
||||
voucher_type, voucher_no, against_voucher_type, against_voucher,
|
||||
voucher_type, voucher_no, against_voucher_type, against_voucher, due_date,
|
||||
account_currency, remarks, {0}
|
||||
from `tabGL Entry`
|
||||
where docstatus < 2 and party_type=%s and (party is not null and party != '') {1}
|
||||
group by voucher_type, voucher_no, against_voucher_type, against_voucher, party
|
||||
group by voucher_type, voucher_no, against_voucher_type, against_voucher, party, due_date
|
||||
order by posting_date, party"""
|
||||
.format(select_fields, conditions), values, as_dict=True)
|
||||
|
||||
|
@ -189,7 +189,9 @@ def get_tax_accounts(item_list, columns, company_currency,
|
||||
|
||||
for parent, description, item_wise_tax_detail, charge_type, tax_amount in tax_details:
|
||||
if description not in tax_columns and tax_amount:
|
||||
tax_columns.append(description)
|
||||
# as description is text editor earlier and markup can break the column convention in reports
|
||||
from frappe.utils.xlsxutils import handle_html
|
||||
tax_columns.append(handle_html(description))
|
||||
|
||||
if item_wise_tax_detail:
|
||||
try:
|
||||
|
@ -34,6 +34,24 @@ frappe.query_reports["Sales Register"] = {
|
||||
"label": __("Mode of Payment"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Mode of Payment"
|
||||
},
|
||||
{
|
||||
"fieldname":"owner",
|
||||
"label": __("Owner"),
|
||||
"fieldtype": "Link",
|
||||
"options": "User"
|
||||
},
|
||||
{
|
||||
"fieldname":"cost_center",
|
||||
"label": __("Cost Center"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Cost Center"
|
||||
},
|
||||
{
|
||||
"fieldname":"warehouse",
|
||||
"label": __("Warehouse"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Warehouse"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ def _execute(filters, additional_table_columns=None, additional_query_columns=No
|
||||
invoice_income_map = get_invoice_income_map(invoice_list)
|
||||
invoice_income_map, invoice_tax_map = get_invoice_tax_map(invoice_list,
|
||||
invoice_income_map, income_accounts)
|
||||
|
||||
#Cost Center & Warehouse Map
|
||||
invoice_cc_wh_map = get_invoice_cc_wh_map(invoice_list)
|
||||
invoice_so_dn_map = get_invoice_so_dn_map(invoice_list)
|
||||
customers = list(set([inv.customer for inv in invoice_list]))
|
||||
customer_map = get_customer_details(customers)
|
||||
@ -34,6 +35,8 @@ def _execute(filters, additional_table_columns=None, additional_query_columns=No
|
||||
# invoice details
|
||||
sales_order = list(set(invoice_so_dn_map.get(inv.name, {}).get("sales_order", [])))
|
||||
delivery_note = list(set(invoice_so_dn_map.get(inv.name, {}).get("delivery_note", [])))
|
||||
cost_center = list(set(invoice_cc_wh_map.get(inv.name, {}).get("cost_center", [])))
|
||||
warehouse = list(set(invoice_cc_wh_map.get(inv.name, {}).get("warehouse", [])))
|
||||
|
||||
customer_details = customer_map.get(inv.customer, {})
|
||||
row = [
|
||||
@ -48,8 +51,9 @@ def _execute(filters, additional_table_columns=None, additional_query_columns=No
|
||||
customer_details.get("customer_group"),
|
||||
customer_details.get("territory"),
|
||||
inv.debit_to, ", ".join(mode_of_payments.get(inv.name, [])),
|
||||
inv.project, inv.remarks,
|
||||
", ".join(sales_order), ", ".join(delivery_note), company_currency
|
||||
inv.project, inv.owner, inv.remarks,
|
||||
", ".join(sales_order), ", ".join(delivery_note),", ".join(cost_center),
|
||||
", ".join(warehouse), company_currency
|
||||
]
|
||||
# map income values
|
||||
base_net_total = 0
|
||||
@ -89,8 +93,9 @@ def get_columns(invoice_list, additional_table_columns):
|
||||
columns +=[
|
||||
_("Customer Group") + ":Link/Customer Group:120", _("Territory") + ":Link/Territory:80",
|
||||
_("Receivable Account") + ":Link/Account:120", _("Mode of Payment") + "::120",
|
||||
_("Project") +":Link/Project:80", _("Remarks") + "::150",
|
||||
_("Project") +":Link/Project:80", _("Owner") + "::150", _("Remarks") + "::150",
|
||||
_("Sales Order") + ":Link/Sales Order:100", _("Delivery Note") + ":Link/Delivery Note:100",
|
||||
_("Cost Center") + ":Link/Cost Center:100", _("Warehouse") + ":Link/Warehouse:100",
|
||||
{
|
||||
"fieldname": "currency",
|
||||
"label": _("Currency"),
|
||||
@ -133,11 +138,23 @@ def get_conditions(filters):
|
||||
if filters.get("from_date"): conditions += " and posting_date >= %(from_date)s"
|
||||
if filters.get("to_date"): conditions += " and posting_date <= %(to_date)s"
|
||||
|
||||
if filters.get("owner"): conditions += " and owner = %(owner)s"
|
||||
|
||||
if filters.get("mode_of_payment"):
|
||||
conditions += """ and exists(select name from `tabSales Invoice Payment`
|
||||
where parent=`tabSales Invoice`.name
|
||||
and ifnull(`tabSales Invoice Payment`.mode_of_payment, '') = %(mode_of_payment)s)"""
|
||||
|
||||
if filters.get("cost_center"):
|
||||
conditions += """ and exists(select name from `tabSales Invoice Item`
|
||||
where parent=`tabSales Invoice`.name
|
||||
and ifnull(`tabSales Invoice Item`.cost_center, '') = %(cost_center)s)"""
|
||||
|
||||
if filters.get("warehouse"):
|
||||
conditions += """ and exists(select name from `tabSales Invoice Item`
|
||||
where parent=`tabSales Invoice`.name
|
||||
and ifnull(`tabSales Invoice Item`.warehouse, '') = %(warehouse)s)"""
|
||||
|
||||
return conditions
|
||||
|
||||
def get_invoices(filters, additional_query_columns):
|
||||
@ -145,7 +162,7 @@ def get_invoices(filters, additional_query_columns):
|
||||
additional_query_columns = ', ' + ', '.join(additional_query_columns)
|
||||
|
||||
conditions = get_conditions(filters)
|
||||
return frappe.db.sql("""select name, posting_date, debit_to, project, customer, customer_name, remarks,
|
||||
return frappe.db.sql("""select name, posting_date, debit_to, project, customer, customer_name, owner, remarks,
|
||||
base_net_total, base_grand_total, base_rounded_total, outstanding_amount {0}
|
||||
from `tabSales Invoice`
|
||||
where docstatus = 1 %s order by posting_date desc, name desc""".format(additional_query_columns or '') %
|
||||
@ -206,6 +223,24 @@ def get_invoice_so_dn_map(invoice_list):
|
||||
|
||||
return invoice_so_dn_map
|
||||
|
||||
def get_invoice_cc_wh_map(invoice_list):
|
||||
si_items = frappe.db.sql("""select parent, cost_center, warehouse
|
||||
from `tabSales Invoice Item` where parent in (%s)
|
||||
and (ifnull(cost_center, '') != '' or ifnull(warehouse, '') != '')""" %
|
||||
', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
|
||||
|
||||
invoice_cc_wh_map = {}
|
||||
for d in si_items:
|
||||
if d.cost_center:
|
||||
invoice_cc_wh_map.setdefault(d.parent, frappe._dict()).setdefault(
|
||||
"cost_center", []).append(d.cost_center)
|
||||
|
||||
if d.warehouse:
|
||||
invoice_cc_wh_map.setdefault(d.parent, frappe._dict()).setdefault(
|
||||
"warehouse", []).append(d.warehouse)
|
||||
|
||||
return invoice_cc_wh_map
|
||||
|
||||
def get_customer_details(customers):
|
||||
customer_map = {}
|
||||
for cust in frappe.db.sql("""select name, territory, customer_group from `tabCustomer`
|
||||
|
@ -257,6 +257,8 @@ def add_ac(args=None):
|
||||
if cint(ac.get("is_root")):
|
||||
ac.parent_account = None
|
||||
ac.flags.ignore_mandatory = True
|
||||
else:
|
||||
ac.root_type = None
|
||||
|
||||
ac.insert()
|
||||
|
||||
@ -569,6 +571,7 @@ def get_stock_rbnb_difference(posting_date, company):
|
||||
# Amount should be credited
|
||||
return flt(stock_rbnb) + flt(sys_bal)
|
||||
|
||||
|
||||
def get_outstanding_invoices(party_type, party, account, condition=None):
|
||||
outstanding_invoices = []
|
||||
precision = frappe.get_precision("Sales Invoice", "outstanding_amount")
|
||||
@ -583,20 +586,18 @@ def get_outstanding_invoices(party_type, party, account, condition=None):
|
||||
invoice = 'Sales Invoice' if party_type == 'Customer' else 'Purchase Invoice'
|
||||
invoice_list = frappe.db.sql("""
|
||||
select
|
||||
voucher_no, voucher_type, posting_date, ifnull(sum({dr_or_cr}), 0) as invoice_amount,
|
||||
(
|
||||
case when (voucher_type = 'Sales Invoice' or voucher_type = 'Purchase Invoice')
|
||||
then (select due_date from `tab{invoice}` where name = voucher_no)
|
||||
else posting_date end
|
||||
) as due_date,
|
||||
voucher_no, voucher_type, posting_date, ifnull(sum({dr_or_cr}), 0) as invoice_amount, due_date,
|
||||
(
|
||||
select ifnull(sum({payment_dr_or_cr}), 0)
|
||||
from `tabGL Entry` payment_gl_entry
|
||||
where payment_gl_entry.against_voucher_type = invoice_gl_entry.voucher_type
|
||||
and payment_gl_entry.against_voucher = invoice_gl_entry.against_voucher
|
||||
and if(invoice_gl_entry.voucher_type='Journal Entry',
|
||||
payment_gl_entry.against_voucher = invoice_gl_entry.voucher_no,
|
||||
payment_gl_entry.against_voucher = invoice_gl_entry.against_voucher)
|
||||
and payment_gl_entry.party_type = invoice_gl_entry.party_type
|
||||
and payment_gl_entry.party = invoice_gl_entry.party
|
||||
and payment_gl_entry.account = invoice_gl_entry.account
|
||||
and payment_gl_entry.due_date = invoice_gl_entry.due_date
|
||||
and {payment_dr_or_cr} > 0
|
||||
) as payment_amount
|
||||
from
|
||||
@ -608,9 +609,9 @@ def get_outstanding_invoices(party_type, party, account, condition=None):
|
||||
and ((voucher_type = 'Journal Entry'
|
||||
and (against_voucher = '' or against_voucher is null))
|
||||
or (voucher_type not in ('Journal Entry', 'Payment Entry')))
|
||||
group by voucher_type, voucher_no
|
||||
group by voucher_type, voucher_no, due_date
|
||||
having (invoice_amount - payment_amount) > 0.005
|
||||
order by posting_date, name""".format(
|
||||
order by posting_date, name, due_date""".format(
|
||||
dr_or_cr=dr_or_cr,
|
||||
invoice=invoice,
|
||||
payment_dr_or_cr=payment_dr_or_cr,
|
||||
@ -622,17 +623,24 @@ def get_outstanding_invoices(party_type, party, account, condition=None):
|
||||
}, as_dict=True)
|
||||
|
||||
for d in invoice_list:
|
||||
outstanding_invoices.append(frappe._dict({
|
||||
due_date = d.due_date or (
|
||||
frappe.db.get_value(
|
||||
d.voucher_type, d.voucher_no,
|
||||
"posting_date" if party_type == "Employee" else "due_date"
|
||||
)
|
||||
)
|
||||
|
||||
outstanding_invoices.append(
|
||||
frappe._dict({
|
||||
'voucher_no': d.voucher_no,
|
||||
'voucher_type': d.voucher_type,
|
||||
'due_date': d.due_date,
|
||||
'posting_date': d.posting_date,
|
||||
'invoice_amount': flt(d.invoice_amount),
|
||||
'payment_amount': flt(d.payment_amount),
|
||||
'outstanding_amount': flt(d.invoice_amount - d.payment_amount, precision),
|
||||
'due_date': frappe.db.get_value(d.voucher_type, d.voucher_no,
|
||||
"posting_date" if party_type=="Employee" else "due_date"),
|
||||
}))
|
||||
'due_date': due_date
|
||||
})
|
||||
)
|
||||
|
||||
outstanding_invoices = sorted(outstanding_invoices, key=lambda k: k['due_date'] or getdate(nowdate()))
|
||||
|
||||
|
@ -1515,6 +1515,95 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_50",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "shipping_rule",
|
||||
"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": "Shipping Rule",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_52",
|
||||
"fieldtype": "Section 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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -2351,6 +2440,98 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_schedule_section",
|
||||
"fieldtype": "Section 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,
|
||||
"label": "Payment Terms",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_terms_template",
|
||||
"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": "Payment Terms Template",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Payment Terms Template",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "payment_schedule",
|
||||
"fieldtype": "Table",
|
||||
"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": "Payment Schedule",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "Payment Schedule",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -3083,7 +3264,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-11-15 01:03:44.591992",
|
||||
"modified": "2017-11-23 01:03:44.591992",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Purchase Order",
|
||||
|
@ -29,7 +29,7 @@ class PurchaseOrder(BuyingController):
|
||||
'target_field': 'ordered_qty',
|
||||
'target_parent_dt': 'Material Request',
|
||||
'target_parent_field': 'per_ordered',
|
||||
'target_ref_field': 'qty',
|
||||
'target_ref_field': 'stock_qty',
|
||||
'source_field': 'stock_qty',
|
||||
'percent_join_field': 'material_request',
|
||||
'overflow_type': 'order'
|
||||
|
@ -8,6 +8,7 @@ import frappe.defaults
|
||||
from frappe.utils import flt, add_days, nowdate
|
||||
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt, make_purchase_invoice
|
||||
|
||||
|
||||
class TestPurchaseOrder(unittest.TestCase):
|
||||
def test_make_purchase_receipt(self):
|
||||
po = create_purchase_order(do_not_submit=True)
|
||||
@ -83,6 +84,33 @@ class TestPurchaseOrder(unittest.TestCase):
|
||||
self.assertEquals(pi.doctype, "Purchase Invoice")
|
||||
self.assertEquals(len(pi.get("items", [])), 1)
|
||||
|
||||
def test_make_purchase_invoice_with_terms(self):
|
||||
po = create_purchase_order(do_not_save=True)
|
||||
|
||||
self.assertRaises(frappe.ValidationError, make_purchase_invoice, po.name)
|
||||
|
||||
po.update(
|
||||
{"payment_terms_template": "_Test Payment Term Template"}
|
||||
)
|
||||
|
||||
po.save()
|
||||
po.submit()
|
||||
|
||||
self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0)
|
||||
self.assertEqual(po.payment_schedule[0].due_date, po.transaction_date)
|
||||
self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0)
|
||||
self.assertEqual(po.payment_schedule[1].due_date, add_days(po.transaction_date, 30))
|
||||
pi = make_purchase_invoice(po.name)
|
||||
pi.save()
|
||||
|
||||
self.assertEquals(pi.doctype, "Purchase Invoice")
|
||||
self.assertEquals(len(pi.get("items", [])), 1)
|
||||
|
||||
self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0)
|
||||
self.assertEqual(pi.payment_schedule[0].due_date, po.transaction_date)
|
||||
self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0)
|
||||
self.assertEqual(pi.payment_schedule[1].due_date, add_days(po.transaction_date, 30))
|
||||
|
||||
def test_subcontracting(self):
|
||||
po = create_purchase_order(item_code="_Test FG Item", is_subcontracted="Yes")
|
||||
self.assertEquals(len(po.get("supplied_items")), 2)
|
||||
@ -125,6 +153,35 @@ class TestPurchaseOrder(unittest.TestCase):
|
||||
"group_same_items": 1
|
||||
}).insert(ignore_permissions=True)
|
||||
|
||||
def test_make_po_without_terms(self):
|
||||
po = create_purchase_order(do_not_save=1)
|
||||
|
||||
self.assertFalse(po.get('payment_schedule'))
|
||||
|
||||
po.insert()
|
||||
|
||||
self.assertTrue(po.get('payment_schedule'))
|
||||
|
||||
def test_terms_does_not_copy(self):
|
||||
po = create_purchase_order()
|
||||
|
||||
self.assertTrue(po.get('payment_schedule'))
|
||||
|
||||
pi = make_purchase_invoice(po.name)
|
||||
|
||||
self.assertFalse(pi.get('payment_schedule'))
|
||||
|
||||
def test_terms_copied(self):
|
||||
po = create_purchase_order(do_not_save=1)
|
||||
po.payment_terms_template = '_Test Payment Term Template'
|
||||
po.insert()
|
||||
po.submit()
|
||||
self.assertTrue(po.get('payment_schedule'))
|
||||
|
||||
pi = make_purchase_invoice(po.name)
|
||||
pi.insert()
|
||||
self.assertTrue(pi.get('payment_schedule'))
|
||||
|
||||
|
||||
def get_same_items():
|
||||
return [
|
||||
|
@ -0,0 +1,43 @@
|
||||
QUnit.module('Buying');
|
||||
|
||||
QUnit.test("test: purchase order with shipping rule", function(assert) {
|
||||
assert.expect(3);
|
||||
let done = assert.async();
|
||||
|
||||
frappe.run_serially([
|
||||
() => {
|
||||
return frappe.tests.make('Purchase Order', [
|
||||
{supplier: 'Test Supplier'},
|
||||
{is_subcontracted: 'No'},
|
||||
{buying_price_list: 'Test-Buying-USD'},
|
||||
{currency: 'USD'},
|
||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
||||
{items: [
|
||||
[
|
||||
{"item_code": 'Test Product 4'},
|
||||
{"qty": 5},
|
||||
{"uom": 'Unit'},
|
||||
{"rate": 500 },
|
||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
||||
]
|
||||
]},
|
||||
|
||||
{shipping_rule:'Two Day Shipping'}
|
||||
]);
|
||||
},
|
||||
|
||||
() => {
|
||||
// Check grand total
|
||||
assert.ok(cur_frm.doc.total_taxes_and_charges == 200, "Taxes and charges correct");
|
||||
assert.ok(cur_frm.doc.grand_total == 2700, "Grand total correct");
|
||||
},
|
||||
|
||||
() => frappe.timeout(0.3),
|
||||
() => frappe.tests.click_button('Submit'),
|
||||
() => frappe.tests.click_button('Yes'),
|
||||
() => frappe.timeout(0.3),
|
||||
() => done()
|
||||
]);
|
||||
});
|
@ -264,9 +264,6 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
|
||||
setters: {
|
||||
company: me.frm.doc.company
|
||||
},
|
||||
get_query_filters: {
|
||||
enquiry_type: "Sales"
|
||||
}
|
||||
})
|
||||
}, __("Get items from"));
|
||||
// Get items from open Material Requests based on supplier
|
||||
|
@ -597,8 +597,9 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "credit_days_based_on",
|
||||
"fieldtype": "Select",
|
||||
"depends_on": "",
|
||||
"fieldname": "payment_terms",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
@ -606,10 +607,10 @@
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Credit Days Based On",
|
||||
"label": "Default Payment Terms Template",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\nFixed Days\nLast Day of the Next Month",
|
||||
"options": "Payment Terms Template",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
@ -622,36 +623,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.credit_days_based_on == 'Fixed Days'",
|
||||
"fieldname": "credit_days",
|
||||
"fieldtype": "Int",
|
||||
"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": "Credit Days",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
@ -970,8 +941,8 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-07-06 16:40:46.935608",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2017-08-31 16:10:44.049915",
|
||||
"modified_by": "tundebabzy@gmail.com",
|
||||
"module": "Buying",
|
||||
"name": "Supplier",
|
||||
"name_case": "Title Case",
|
||||
|
@ -1,4 +1,16 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Supplier",
|
||||
"supplier_name": "_Test Supplier With Template 1",
|
||||
"supplier_type": "_Test Supplier Type",
|
||||
"payment_terms": "_Test Payment Term Template 3"
|
||||
},
|
||||
{
|
||||
"doctype": "Supplier",
|
||||
"supplier_name": "_Test Supplier P",
|
||||
"supplier_type": "_Test Supplier Type",
|
||||
"credit_days_based_on": "Fixed Days"
|
||||
},
|
||||
{
|
||||
"doctype": "Supplier",
|
||||
"supplier_name": "_Test Supplier with Country",
|
||||
|
@ -5,56 +5,62 @@ from __future__ import unicode_literals
|
||||
|
||||
import frappe, unittest
|
||||
from erpnext.accounts.party import get_due_date
|
||||
from erpnext.exceptions import PartyFrozen, PartyDisabled
|
||||
from erpnext.exceptions import PartyDisabled
|
||||
from frappe.test_runner import make_test_records
|
||||
|
||||
test_dependencies = ['Payment Term', 'Payment Terms Template']
|
||||
test_records = frappe.get_test_records('Supplier')
|
||||
|
||||
|
||||
class TestSupplier(unittest.TestCase):
|
||||
def test_supplier_due_date_against_supplier_credit_limit(self):
|
||||
# Set Credit Limit based on Fixed days
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "credit_days_based_on", "Fixed Days")
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "credit_days", 10)
|
||||
def test_supplier_default_payment_terms(self):
|
||||
# Payment Term based on Days after invoice date
|
||||
frappe.db.set_value(
|
||||
"Supplier", "_Test Supplier With Template 1", "payment_terms", "_Test Payment Term Template 3")
|
||||
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
self.assertEqual(due_date, "2016-02-01")
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2016-02-21")
|
||||
|
||||
# Set Credit Limit based on Last day next month
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "credit_days", 0)
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "credit_days_based_on",
|
||||
"Last Day of the Next Month")
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2017-02-21")
|
||||
|
||||
# Leap year
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
# Payment Term based on last day of month
|
||||
frappe.db.set_value(
|
||||
"Supplier", "_Test Supplier With Template 1", "payment_terms", "_Test Payment Term Template 1")
|
||||
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2016-02-29")
|
||||
# Non Leap year
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2017-02-28")
|
||||
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "credit_days_based_on", "")
|
||||
frappe.db.set_value("Supplier", "_Test Supplier With Template 1", "payment_terms", "")
|
||||
|
||||
# Set credit limit for the supplier type instead of supplier and evaluate the due date
|
||||
# based on Fixed days
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "credit_days_based_on",
|
||||
"Fixed Days")
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "credit_days", 10)
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "payment_terms", "_Test Payment Term Template 3")
|
||||
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
self.assertEqual(due_date, "2016-02-01")
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2016-02-21")
|
||||
|
||||
# Set credit limit for the supplier type instead of supplier and evaluate the due date
|
||||
# based on Last day of next month
|
||||
frappe.db.set_value("Supplier", "_Test Supplier Type", "credit_days", 0)
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "credit_days_based_on",
|
||||
"Last Day of the Next Month")
|
||||
# Payment terms for Supplier Type instead of supplier and evaluate the due date
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "payment_terms", "_Test Payment Term Template 1")
|
||||
|
||||
# Leap year
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2016-02-29")
|
||||
# Non Leap year
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier", "_Test Company")
|
||||
# # Non Leap year
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier With Template 1")
|
||||
self.assertEqual(due_date, "2017-02-28")
|
||||
|
||||
# Supplier with no default Payment Terms Template
|
||||
frappe.db.set_value("Supplier Type", "_Test Supplier Type", "payment_terms", "")
|
||||
frappe.db.set_value("Supplier", "_Test Supplier", "payment_terms", "")
|
||||
|
||||
due_date = get_due_date("2016-01-22", "Supplier", "_Test Supplier")
|
||||
self.assertEqual(due_date, "2016-01-22")
|
||||
# # Non Leap year
|
||||
due_date = get_due_date("2017-01-22", "Supplier", "_Test Supplier")
|
||||
self.assertEqual(due_date, "2017-01-22")
|
||||
|
||||
def test_supplier_disabled(self):
|
||||
make_test_records("Item")
|
||||
@ -71,7 +77,6 @@ class TestSupplier(unittest.TestCase):
|
||||
|
||||
po.save()
|
||||
|
||||
|
||||
def test_supplier_country(self):
|
||||
# Test that country field exists in Supplier DocType
|
||||
supplier = frappe.get_doc('Supplier', '_Test Supplier with Country')
|
||||
|
@ -1089,6 +1089,95 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_36",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "shipping_rule",
|
||||
"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": "Shipping Rule",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Shipping Rule",
|
||||
"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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_38",
|
||||
"fieldtype": "Section 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,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
|
@ -194,12 +194,12 @@ def get_data():
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"module_name": "Student Attendance",
|
||||
"color": "#3aacba",
|
||||
"module_name": "Student Attendance Tool",
|
||||
"color": "#C0392B",
|
||||
"icon": "octicon octicon-checklist",
|
||||
"label": _("Student Attendance"),
|
||||
"link": "List/Student Attendance",
|
||||
"_doctype": "Student Attendance",
|
||||
"label": _("Student Attendance Tool"),
|
||||
"link": "List/Student Attendance Tool",
|
||||
"_doctype": "Student Attendance Tool",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
@ -257,11 +257,11 @@ def get_data():
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"module_name": "Schools",
|
||||
"color": "#DE2B37",
|
||||
"module_name": "Education",
|
||||
"color": "#428B46",
|
||||
"icon": "octicon octicon-mortar-board",
|
||||
"type": "module",
|
||||
"label": _("Schools")
|
||||
"label": _("Education")
|
||||
},
|
||||
{
|
||||
"module_name": "Healthcare",
|
||||
|
@ -217,7 +217,7 @@ def get_data():
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "School Settings"
|
||||
"name": "Education Settings"
|
||||
}
|
||||
]
|
||||
},
|
@ -268,6 +268,12 @@ def get_data():
|
||||
"name": "Itemwise Recommended Reorder Level",
|
||||
"doctype": "Item"
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"is_query_report": True,
|
||||
"name": "Item Variant Details",
|
||||
"doctype": "Item"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -4,7 +4,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe, erpnext
|
||||
from frappe import _, throw
|
||||
from frappe.utils import today, flt, cint, fmt_money, formatdate, getdate
|
||||
from frappe.utils import today, flt, cint, fmt_money, formatdate, getdate, add_days, add_months, get_last_day
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
from erpnext.accounts.utils import get_fiscal_years, validate_fiscal_year, get_account_currency
|
||||
from erpnext.utilities.transaction_base import TransactionBase
|
||||
@ -26,11 +26,19 @@ class AccountsController(TransactionBase):
|
||||
return self.__company_currency
|
||||
|
||||
def onload(self):
|
||||
self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
|
||||
self.get("__onload").make_payment_via_journal_entry \
|
||||
= frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
|
||||
|
||||
if self.is_new():
|
||||
relevant_docs = ("Quotation", "Purchase Order", "Sales Order",
|
||||
"Purchase Invoice", "Sales Invoice")
|
||||
if self.doctype in relevant_docs:
|
||||
self.set_payment_schedule()
|
||||
|
||||
def validate(self):
|
||||
if self.get("_action") and self._action != "update_after_submit":
|
||||
self.set_missing_values(for_validate=True)
|
||||
|
||||
self.validate_date_with_fiscal_year()
|
||||
|
||||
if self.meta.get_field("currency"):
|
||||
@ -42,9 +50,7 @@ class AccountsController(TransactionBase):
|
||||
validate_return(self)
|
||||
self.set_total_in_words()
|
||||
|
||||
if self.doctype in ("Sales Invoice", "Purchase Invoice") and not self.is_return:
|
||||
self.validate_due_date()
|
||||
self.validate_advance_entries()
|
||||
self.validate_all_documents_schedule()
|
||||
|
||||
if self.meta.get_field("taxes_and_charges"):
|
||||
self.validate_enabled_taxes_and_charges()
|
||||
@ -55,6 +61,26 @@ class AccountsController(TransactionBase):
|
||||
if self.doctype == 'Purchase Invoice':
|
||||
self.validate_paid_amount()
|
||||
|
||||
def validate_invoice_documents_schedule(self):
|
||||
self.validate_payment_schedule_dates()
|
||||
self.set_due_date()
|
||||
self.validate_invoice_portion()
|
||||
self.set_payment_schedule()
|
||||
self.validate_payment_schedule_amount()
|
||||
self.validate_due_date()
|
||||
self.validate_advance_entries()
|
||||
|
||||
def validate_non_invoice_documents_schedule(self):
|
||||
self.validate_invoice_portion()
|
||||
self.set_payment_schedule()
|
||||
self.validate_payment_schedule_amount()
|
||||
|
||||
def validate_all_documents_schedule(self):
|
||||
if self.doctype in ("Sales Invoice", "Purchase Invoice") and not self.is_return:
|
||||
self.validate_invoice_documents_schedule()
|
||||
elif self.doctype in ("Quotation", "Purchase Order", "Sales Order"):
|
||||
self.validate_non_invoice_documents_schedule()
|
||||
|
||||
def before_print(self):
|
||||
if self.doctype in ['Purchase Order', 'Sales Order']:
|
||||
if self.get("group_same_items"):
|
||||
@ -66,9 +92,9 @@ class AccountsController(TransactionBase):
|
||||
if cint(is_paid) == 1:
|
||||
if flt(self.paid_amount) == 0 and flt(self.outstanding_amount) > 0:
|
||||
if self.cash_bank_account:
|
||||
self.paid_amount = flt(flt(self.grand_total) - flt(self.write_off_amount),
|
||||
self.precision("paid_amount"))
|
||||
self.base_paid_amount = flt(self.paid_amount * self.conversion_rate, self.precision("base_paid_amount"))
|
||||
self.paid_amount = flt(flt(self.outstanding_amount), self.precision("paid_amount"))
|
||||
self.base_paid_amount = flt(self.paid_amount * self.conversion_rate,
|
||||
self.precision("base_paid_amount"))
|
||||
else:
|
||||
# show message that the amount is not paid
|
||||
self.paid_amount = 0
|
||||
@ -109,9 +135,9 @@ class AccountsController(TransactionBase):
|
||||
if not self.due_date:
|
||||
frappe.throw(_("Due Date is mandatory"))
|
||||
|
||||
validate_due_date(self.posting_date, self.due_date, "Customer", self.customer, self.company)
|
||||
validate_due_date(self.posting_date, self.due_date, "Customer", self.customer)
|
||||
elif self.doctype == "Purchase Invoice":
|
||||
validate_due_date(self.posting_date, self.due_date, "Supplier", self.supplier, self.company)
|
||||
validate_due_date(self.posting_date, self.due_date, "Supplier", self.supplier)
|
||||
|
||||
def set_price_list_currency(self, buying_or_selling):
|
||||
if self.meta.get_field("posting_date"):
|
||||
@ -299,6 +325,27 @@ class AccountsController(TransactionBase):
|
||||
"allocated_amount": flt(d.amount) if d.against_order else 0
|
||||
})
|
||||
|
||||
def apply_shipping_rule(self):
|
||||
if self.shipping_rule:
|
||||
shipping_rule = frappe.get_doc("Shipping Rule", self.shipping_rule)
|
||||
shipping_rule.apply(self)
|
||||
self.calculate_taxes_and_totals()
|
||||
|
||||
def get_shipping_address(self):
|
||||
'''Returns Address object from shipping address fields if present'''
|
||||
|
||||
# shipping address fields can be `shipping_address_name` or `shipping_address`
|
||||
# try getting value from both
|
||||
|
||||
for fieldname in ('shipping_address_name', 'shipping_address'):
|
||||
shipping_field = self.meta.get_field(fieldname)
|
||||
if shipping_field and shipping_field.fieldtype == 'Link':
|
||||
if self.get(fieldname):
|
||||
return frappe.get_doc('Address', self.get(fieldname))
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
def get_advance_entries(self, include_unallocated=True):
|
||||
if self.doctype == "Sales Invoice":
|
||||
party_account = self.debit_to
|
||||
@ -598,6 +645,73 @@ class AccountsController(TransactionBase):
|
||||
for item in duplicate_list:
|
||||
self.remove(item)
|
||||
|
||||
def set_payment_schedule(self):
|
||||
posting_date = self.get("posting_date") or self.get("transaction_date")
|
||||
date = self.get("due_date")
|
||||
due_date = date or posting_date
|
||||
grand_total = self.get("rounded_total") or self.grand_total
|
||||
|
||||
if not self.get("payment_schedule"):
|
||||
if self.get("payment_terms_template"):
|
||||
data = get_payment_terms(self.payment_terms_template, posting_date, grand_total)
|
||||
for item in data:
|
||||
self.append("payment_schedule", item)
|
||||
else:
|
||||
data = dict(due_date=due_date, invoice_portion=100, payment_amount=grand_total)
|
||||
self.append("payment_schedule", data)
|
||||
else:
|
||||
for d in self.get("payment_schedule"):
|
||||
d.payment_amount = grand_total * flt(d.invoice_portion) / 100
|
||||
|
||||
def set_due_date(self):
|
||||
due_dates = [d.due_date for d in self.get("payment_schedule") if d.due_date]
|
||||
if due_dates:
|
||||
self.due_date = max(due_dates)
|
||||
|
||||
def validate_payment_schedule_dates(self):
|
||||
dates = []
|
||||
li = []
|
||||
if self.due_date and getdate(self.due_date) < getdate(self.posting_date):
|
||||
frappe.throw(_("Due Date cannot be before posting date"))
|
||||
|
||||
for d in self.get("payment_schedule"):
|
||||
if getdate(d.due_date) < getdate(self.posting_date):
|
||||
frappe.throw(_("Row {0}: Due Date cannot be before posting date").format(d.idx))
|
||||
elif d.due_date in dates:
|
||||
li.append('{0} in row {1}'.format(d.due_date, d.idx))
|
||||
# frappe.throw(_("Row {0}: Duplicate due date found").format(d.idx))
|
||||
dates.append(d.due_date)
|
||||
|
||||
if li:
|
||||
duplicates = '<br>' + '<br>'.join(li)
|
||||
frappe.throw(_("Rows with duplicate due dates in other rows were found: {list}")
|
||||
.format(list=duplicates))
|
||||
|
||||
def validate_payment_schedule_amount(self):
|
||||
if self.get("payment_schedule"):
|
||||
total = 0
|
||||
for d in self.get("payment_schedule"):
|
||||
total += flt(d.payment_amount)
|
||||
|
||||
grand_total = self.get("rounded_total") or self.grand_total
|
||||
if total != grand_total:
|
||||
frappe.throw(_("Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total"))
|
||||
|
||||
def validate_invoice_portion(self):
|
||||
if self.get("payment_schedule"):
|
||||
total_portion = 0
|
||||
for term in self.payment_schedule:
|
||||
total_portion += flt(term.get('invoice_portion', 0))
|
||||
|
||||
if flt(total_portion, 2) != 100.00:
|
||||
frappe.throw(_('Combined invoice portion must equal 100%'), indicator='red')
|
||||
|
||||
def is_rounded_total_disabled(self):
|
||||
if self.meta.get_field("disable_rounded_total"):
|
||||
return self.disable_rounded_total
|
||||
else:
|
||||
return frappe.db.get_single_value("Global Defaults", "disable_rounded_total")
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_tax_rate(account_head):
|
||||
return frappe.db.get_value("Account", account_head, ["tax_rate", "account_name"], as_dict=True)
|
||||
@ -770,3 +884,42 @@ def update_invoice_status():
|
||||
|
||||
frappe.db.sql(""" update `tabPurchase Invoice` set status = 'Overdue'
|
||||
where due_date < CURDATE() and docstatus = 1 and outstanding_amount > 0""")
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_payment_terms(terms_template, posting_date=None, grand_total=None):
|
||||
if not terms_template:
|
||||
return
|
||||
|
||||
terms_doc = frappe.get_doc("Payment Terms Template", terms_template)
|
||||
|
||||
schedule = []
|
||||
for d in terms_doc.get("terms"):
|
||||
term_details = get_payment_term_details(d, posting_date, grand_total)
|
||||
schedule.append(term_details)
|
||||
|
||||
return schedule
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_payment_term_details(term, posting_date=None, grand_total=None):
|
||||
term_details = frappe._dict()
|
||||
if isinstance(term, unicode):
|
||||
term = frappe.get_doc("Payment Term", term)
|
||||
else:
|
||||
term_details.payment_term = term.payment_term
|
||||
term_details.description = term.description
|
||||
term_details.invoice_portion = term.invoice_portion
|
||||
term_details.payment_amount = flt(term.invoice_portion) * flt(grand_total) / 100
|
||||
if posting_date:
|
||||
term_details.due_date = get_due_date(posting_date, term)
|
||||
return term_details
|
||||
|
||||
def get_due_date(posting_date, term):
|
||||
due_date = None
|
||||
if term.due_date_based_on == "Day(s) after invoice date":
|
||||
due_date = add_days(posting_date, term.credit_days)
|
||||
elif term.due_date_based_on == "Day(s) after the end of the invoice month":
|
||||
due_date = add_days(get_last_day(posting_date), term.credit_days)
|
||||
elif term.due_date_based_on == "Month(s) after the end of the invoice month":
|
||||
due_date = add_months(get_last_day(posting_date), term.credit_months)
|
||||
|
||||
return due_date
|
||||
|
@ -171,7 +171,7 @@ class BuyingController(StockController):
|
||||
for item in self.get("items"):
|
||||
if self.doctype in ["Purchase Receipt", "Purchase Invoice"]:
|
||||
item.rm_supp_cost = 0.0
|
||||
if item.item_code in self.sub_contracted_items:
|
||||
if item.bom and item.item_code in self.sub_contracted_items:
|
||||
self.update_raw_materials_supplied(item, raw_material_table)
|
||||
|
||||
if [item.item_code, item.name] not in parent_items:
|
||||
@ -421,3 +421,4 @@ class BuyingController(StockController):
|
||||
frappe.throw(_("Expected Date cannot be before Transaction Date"))
|
||||
else:
|
||||
frappe.throw(_("Please enter Schedule Date"))
|
||||
|
||||
|
@ -169,6 +169,74 @@ def create_variant(item, args):
|
||||
|
||||
return variant
|
||||
|
||||
@frappe.whitelist()
|
||||
def enqueue_multiple_variant_creation(item, args):
|
||||
# There can be innumerable attribute combinations, enqueue
|
||||
frappe.enqueue("erpnext.controllers.item_variant.create_multiple_variants",
|
||||
item=item, args=args, now=frappe.flags.in_test);
|
||||
|
||||
def create_multiple_variants(item, args):
|
||||
if isinstance(args, basestring):
|
||||
args = json.loads(args)
|
||||
|
||||
args_set = generate_keyed_value_combinations(args)
|
||||
|
||||
for attribute_values in args_set:
|
||||
if not get_variant(item, args=attribute_values):
|
||||
variant = create_variant(item, attribute_values)
|
||||
variant.save()
|
||||
|
||||
def generate_keyed_value_combinations(args):
|
||||
"""
|
||||
From this:
|
||||
|
||||
args = {"attr1": ["a", "b", "c"], "attr2": ["1", "2"], "attr3": ["A"]}
|
||||
|
||||
To this:
|
||||
|
||||
[
|
||||
{u'attr1': u'a', u'attr2': u'1', u'attr3': u'A'},
|
||||
{u'attr1': u'b', u'attr2': u'1', u'attr3': u'A'},
|
||||
{u'attr1': u'c', u'attr2': u'1', u'attr3': u'A'},
|
||||
{u'attr1': u'a', u'attr2': u'2', u'attr3': u'A'},
|
||||
{u'attr1': u'b', u'attr2': u'2', u'attr3': u'A'},
|
||||
{u'attr1': u'c', u'attr2': u'2', u'attr3': u'A'}
|
||||
]
|
||||
|
||||
"""
|
||||
# Return empty list if empty
|
||||
if not args:
|
||||
return []
|
||||
|
||||
# Turn `args` into a list of lists of key-value tuples:
|
||||
# [
|
||||
# [(u'attr2', u'1'), (u'attr2', u'2')],
|
||||
# [(u'attr3', u'A')],
|
||||
# [(u'attr1', u'a'), (u'attr1', u'b'), (u'attr1', u'c')]
|
||||
# ]
|
||||
key_value_lists = [[(key, val) for val in args[key]] for key in args.keys()]
|
||||
|
||||
# Store the first, but as objects
|
||||
# [{u'attr2': u'1'}, {u'attr2': u'2'}]
|
||||
results = key_value_lists.pop(0)
|
||||
results = [{d[0]: d[1]} for d in results]
|
||||
|
||||
# Iterate the remaining
|
||||
# Take the next list to fuse with existing results
|
||||
for l in key_value_lists:
|
||||
new_results = []
|
||||
for res in results:
|
||||
for key_val in l:
|
||||
# create a new clone of object in result
|
||||
obj = copy.deepcopy(res)
|
||||
# to be used with every incoming new value
|
||||
obj[key_val[0]] = key_val[1]
|
||||
# and pushed into new_results
|
||||
new_results.append(obj)
|
||||
results = new_results
|
||||
|
||||
return results
|
||||
|
||||
def copy_attributes_to_variant(item, variant):
|
||||
from frappe.model import no_value_fields
|
||||
|
||||
|
@ -256,6 +256,9 @@ def make_return_doc(doctype, source_name, target_doc=None):
|
||||
target_doc.dn_detail = source_doc.dn_detail
|
||||
target_doc.expense_account = source_doc.expense_account
|
||||
|
||||
def update_terms(source_doc, target_doc, source_parent):
|
||||
target_doc.payment_amount = -source_doc.payment_amount
|
||||
|
||||
doclist = get_mapped_doc(doctype, source_name, {
|
||||
doctype: {
|
||||
"doctype": doctype,
|
||||
@ -272,6 +275,10 @@ def make_return_doc(doctype, source_name, target_doc=None):
|
||||
},
|
||||
"postprocess": update_item
|
||||
},
|
||||
"Payment Schedule": {
|
||||
"doctype": "Payment Schedule",
|
||||
"postprocess": update_terms
|
||||
}
|
||||
}, target_doc, set_missing_values)
|
||||
|
||||
return doclist
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user