Merge branch 'develop' of https://github.com/frappe/erpnext into dev_remove_regional_france
diff --git a/erpnext/regional/__init__.py b/erpnext/regional/__init__.py
index ec2db81..bd5d540 100644
--- a/erpnext/regional/__init__.py
+++ b/erpnext/regional/__init__.py
@@ -10,7 +10,7 @@
def check_deletion_permission(doc, method):
region = get_region(doc.company)
- if region in ["Nepal", "France"] and doc.docstatus != 0:
+ if region in ["Nepal"] and doc.docstatus != 0:
frappe.throw(_("Deletion is not permitted for country {0}").format(region))
@@ -20,7 +20,7 @@
Called on submit of Sales Invoice and Payment Entry.
"""
region = get_region()
- if region not in ["France", "Germany"]:
+ if region not in ["Germany"]:
return
data = str(doc.as_dict())
diff --git a/erpnext/regional/address_template/templates/france.html b/erpnext/regional/address_template/templates/france.html
deleted file mode 100644
index 752331e..0000000
--- a/erpnext/regional/address_template/templates/france.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% if address_line1 %}{{ address_line1 }}{% endif -%}
-{% if address_line2 %}<br>{{ address_line2 }}{% endif -%}
-{% if pincode %}<br>{{ pincode }}{% endif -%}
-{% if city %} {{ city }}{% endif -%}
-{% if country %}<br>{{ country }}{% endif -%}
diff --git a/erpnext/regional/france/__init__.py b/erpnext/regional/france/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/regional/france/__init__.py
+++ /dev/null
diff --git a/erpnext/regional/france/setup.py b/erpnext/regional/france/setup.py
deleted file mode 100644
index da772d6..0000000
--- a/erpnext/regional/france/setup.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
-
-
-def setup(company=None, patch=True):
- make_custom_fields()
- add_custom_roles_for_reports()
-
-
-def make_custom_fields():
- custom_fields = {
- "Company": [
- dict(fieldname="siren_number", label="SIREN Number", fieldtype="Data", insert_after="website")
- ]
- }
-
- create_custom_fields(custom_fields)
-
-
-def add_custom_roles_for_reports():
- report_name = "Fichier des Ecritures Comptables [FEC]"
-
- if not frappe.db.get_value("Custom Role", dict(report=report_name)):
- frappe.get_doc(
- dict(doctype="Custom Role", report=report_name, roles=[dict(role="Accounts Manager")])
- ).insert()
diff --git a/erpnext/regional/france/utils.py b/erpnext/regional/france/utils.py
deleted file mode 100644
index 65dfd2d..0000000
--- a/erpnext/regional/france/utils.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-
-# don't remove this function it is used in tests
-def test_method():
- """test function"""
- return "overridden"
diff --git "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/__init__.py" "b/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/__init__.py"
deleted file mode 100644
index e69de29..0000000
--- "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/__init__.py"
+++ /dev/null
diff --git "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.js" "b/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.js"
deleted file mode 100644
index b85b58f..0000000
--- "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.js"
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.query_reports["Fichier des Ecritures Comptables [FEC]"] = {
- "filters": [
- {
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
- },
- {
- "fieldname": "fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1
- }
- ],
- onload: function(query_report) {
- query_report.page.add_inner_button(__("Export"), function() {
- fec_export(query_report);
- });
-
- query_report.add_make_chart_button = function() {
- //
- };
-
- query_report.export_report = function() {
- fec_export(query_report);
- };
- }
-};
-
-let fec_export = function(query_report) {
- const fiscal_year = query_report.get_values().fiscal_year;
- const company = query_report.get_values().company;
-
- frappe.db.get_value("Company", company, "siren_number", (value) => {
- const company_data = value.siren_number;
- if (company_data === null || company_data === undefined) {
- frappe.msgprint(__("Please register the SIREN number in the company information file"));
- } else {
- frappe.db.get_value("Fiscal Year", fiscal_year, "year_end_date", (r) => {
- const fy = r.year_end_date;
- const title = company_data + "FEC" + moment(fy).format('YYYYMMDD');
- const column_row = query_report.columns.map(col => col.label);
- const column_data = query_report.get_data_for_csv(false);
- const result = [column_row].concat(column_data);
- downloadify(result, null, title);
- });
-
- }
- });
-};
-
-let downloadify = function(data, roles, title) {
- if (roles && roles.length && !has_common(roles, roles)) {
- frappe.msgprint(__("Export not allowed. You need {0} role to export.", [frappe.utils.comma_or(roles)]));
- return;
- }
-
- const filename = title + ".txt";
- let csv_data = to_tab_csv(data);
- const a = document.createElement('a');
-
- if ("download" in a) {
- // Used Blob object, because it can handle large files
- let blob_object = new Blob([csv_data], {
- type: 'text/csv;charset=UTF-8'
- });
- a.href = URL.createObjectURL(blob_object);
- a.download = filename;
-
- } else {
- // use old method
- a.href = 'data:attachment/csv,' + encodeURIComponent(csv_data);
- a.download = filename;
- a.target = "_blank";
- }
-
- document.body.appendChild(a);
- a.click();
-
- document.body.removeChild(a);
-};
-
-let to_tab_csv = function(data) {
- let res = [];
- $.each(data, function(i, row) {
- res.push(row.join("\t"));
- });
- return res.join("\n");
-};
diff --git "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.json" "b/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.json"
deleted file mode 100644
index 9b48e11..0000000
--- "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.json"
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "add_total_row": 0,
- "apply_user_permissions": 0,
- "creation": "2018-01-10 15:10:16.650129",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2018-01-11 10:27:25.595485",
- "modified_by": "Administrator",
- "module": "Regional",
- "name": "Fichier des Ecritures Comptables [FEC]",
- "owner": "Administrator",
- "ref_doctype": "GL Entry",
- "report_name": "Fichier des Ecritures Comptables [FEC]",
- "report_type": "Script Report",
- "roles": []
-}
\ No newline at end of file
diff --git "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.py" "b/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.py"
deleted file mode 100644
index 6717989..0000000
--- "a/erpnext/regional/report/fichier_des_ecritures_comptables_\133fec\135/fichier_des_ecritures_comptables_\133fec\135.py"
+++ /dev/null
@@ -1,339 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import re
-
-import frappe
-from frappe import _
-from frappe.utils import format_datetime
-
-COLUMNS = [
- {
- "label": "JournalCode",
- "fieldname": "JournalCode",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "JournalLib",
- "fieldname": "JournalLib",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "EcritureNum",
- "fieldname": "EcritureNum",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "EcritureDate",
- "fieldname": "EcritureDate",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "CompteNum",
- "fieldname": "CompteNum",
- "fieldtype": "Link",
- "options": "Account",
- "width": 100,
- },
- {
- "label": "CompteLib",
- "fieldname": "CompteLib",
- "fieldtype": "Link",
- "options": "Account",
- "width": 200,
- },
- {
- "label": "CompAuxNum",
- "fieldname": "CompAuxNum",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "CompAuxLib",
- "fieldname": "CompAuxLib",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "PieceRef",
- "fieldname": "PieceRef",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "PieceDate",
- "fieldname": "PieceDate",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "EcritureLib",
- "fieldname": "EcritureLib",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "Debit",
- "fieldname": "Debit",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "Credit",
- "fieldname": "Credit",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "EcritureLet",
- "fieldname": "EcritureLet",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "DateLet",
- "fieldname": "DateLet",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "ValidDate",
- "fieldname": "ValidDate",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "Montantdevise",
- "fieldname": "Montantdevise",
- "fieldtype": "Data",
- "width": 90,
- },
- {
- "label": "Idevise",
- "fieldname": "Idevise",
- "fieldtype": "Data",
- "width": 90,
- },
-]
-
-
-def execute(filters=None):
- validate_filters(filters)
- return COLUMNS, get_result(
- company=filters["company"],
- fiscal_year=filters["fiscal_year"],
- )
-
-
-def validate_filters(filters):
- if not filters.get("company"):
- frappe.throw(_("{0} is mandatory").format(_("Company")))
-
- if not filters.get("fiscal_year"):
- frappe.throw(_("{0} is mandatory").format(_("Fiscal Year")))
-
-
-def get_gl_entries(company, fiscal_year):
- gle = frappe.qb.DocType("GL Entry")
- sales_invoice = frappe.qb.DocType("Sales Invoice")
- purchase_invoice = frappe.qb.DocType("Purchase Invoice")
- journal_entry = frappe.qb.DocType("Journal Entry")
- payment_entry = frappe.qb.DocType("Payment Entry")
- customer = frappe.qb.DocType("Customer")
- supplier = frappe.qb.DocType("Supplier")
- employee = frappe.qb.DocType("Employee")
-
- debit = frappe.query_builder.functions.Sum(gle.debit).as_("debit")
- credit = frappe.query_builder.functions.Sum(gle.credit).as_("credit")
- debit_currency = frappe.query_builder.functions.Sum(gle.debit_in_account_currency).as_(
- "debitCurr"
- )
- credit_currency = frappe.query_builder.functions.Sum(gle.credit_in_account_currency).as_(
- "creditCurr"
- )
-
- query = (
- frappe.qb.from_(gle)
- .left_join(sales_invoice)
- .on(gle.voucher_no == sales_invoice.name)
- .left_join(purchase_invoice)
- .on(gle.voucher_no == purchase_invoice.name)
- .left_join(journal_entry)
- .on(gle.voucher_no == journal_entry.name)
- .left_join(payment_entry)
- .on(gle.voucher_no == payment_entry.name)
- .left_join(customer)
- .on(gle.party == customer.name)
- .left_join(supplier)
- .on(gle.party == supplier.name)
- .left_join(employee)
- .on(gle.party == employee.name)
- .select(
- gle.posting_date.as_("GlPostDate"),
- gle.name.as_("GlName"),
- gle.account,
- gle.transaction_date,
- debit,
- credit,
- debit_currency,
- credit_currency,
- gle.voucher_type,
- gle.voucher_no,
- gle.against_voucher_type,
- gle.against_voucher,
- gle.account_currency,
- gle.against,
- gle.party_type,
- gle.party,
- sales_invoice.name.as_("InvName"),
- sales_invoice.title.as_("InvTitle"),
- sales_invoice.posting_date.as_("InvPostDate"),
- purchase_invoice.name.as_("PurName"),
- purchase_invoice.title.as_("PurTitle"),
- purchase_invoice.posting_date.as_("PurPostDate"),
- journal_entry.cheque_no.as_("JnlRef"),
- journal_entry.posting_date.as_("JnlPostDate"),
- journal_entry.title.as_("JnlTitle"),
- payment_entry.name.as_("PayName"),
- payment_entry.posting_date.as_("PayPostDate"),
- payment_entry.title.as_("PayTitle"),
- customer.customer_name,
- customer.name.as_("cusName"),
- supplier.supplier_name,
- supplier.name.as_("supName"),
- employee.employee_name,
- employee.name.as_("empName"),
- )
- .where((gle.company == company) & (gle.fiscal_year == fiscal_year))
- .groupby(gle.voucher_type, gle.voucher_no, gle.account)
- .orderby(gle.posting_date, gle.voucher_no)
- )
-
- return query.run(as_dict=True)
-
-
-def get_result(company, fiscal_year):
- data = get_gl_entries(company, fiscal_year)
-
- result = []
-
- company_currency = frappe.get_cached_value("Company", company, "default_currency")
- accounts = frappe.get_all(
- "Account", filters={"Company": company}, fields=["name", "account_number"]
- )
-
- for d in data:
- JournalCode = re.split("-|/|[0-9]", d.get("voucher_no"))[0]
-
- if d.get("voucher_no").startswith("{0}-".format(JournalCode)) or d.get("voucher_no").startswith(
- "{0}/".format(JournalCode)
- ):
- EcritureNum = re.split("-|/", d.get("voucher_no"))[1]
- else:
- EcritureNum = re.search(r"{0}(\d+)".format(JournalCode), d.get("voucher_no"), re.IGNORECASE)[1]
-
- EcritureDate = format_datetime(d.get("GlPostDate"), "yyyyMMdd")
-
- account_number = [
- account.account_number for account in accounts if account.name == d.get("account")
- ]
- if account_number[0] is not None:
- CompteNum = account_number[0]
- else:
- frappe.throw(
- _(
- "Account number for account {0} is not available.<br> Please setup your Chart of Accounts correctly."
- ).format(d.get("account"))
- )
-
- if d.get("party_type") == "Customer":
- CompAuxNum = d.get("cusName")
- CompAuxLib = d.get("customer_name")
-
- elif d.get("party_type") == "Supplier":
- CompAuxNum = d.get("supName")
- CompAuxLib = d.get("supplier_name")
-
- elif d.get("party_type") == "Employee":
- CompAuxNum = d.get("empName")
- CompAuxLib = d.get("employee_name")
-
- elif d.get("party_type") == "Student":
- CompAuxNum = d.get("stuName")
- CompAuxLib = d.get("student_name")
-
- elif d.get("party_type") == "Member":
- CompAuxNum = d.get("memName")
- CompAuxLib = d.get("member_name")
-
- else:
- CompAuxNum = ""
- CompAuxLib = ""
-
- ValidDate = format_datetime(d.get("GlPostDate"), "yyyyMMdd")
-
- PieceRef = d.get("voucher_no") or "Sans Reference"
-
- # EcritureLib is the reference title unless it is an opening entry
- if d.get("is_opening") == "Yes":
- EcritureLib = _("Opening Entry Journal")
- if d.get("voucher_type") == "Sales Invoice":
- EcritureLib = d.get("InvTitle")
- elif d.get("voucher_type") == "Purchase Invoice":
- EcritureLib = d.get("PurTitle")
- elif d.get("voucher_type") == "Journal Entry":
- EcritureLib = d.get("JnlTitle")
- elif d.get("voucher_type") == "Payment Entry":
- EcritureLib = d.get("PayTitle")
- else:
- EcritureLib = d.get("voucher_type")
-
- PieceDate = format_datetime(d.get("GlPostDate"), "yyyyMMdd")
-
- debit = "{:.2f}".format(d.get("debit")).replace(".", ",")
-
- credit = "{:.2f}".format(d.get("credit")).replace(".", ",")
-
- Idevise = d.get("account_currency")
-
- if Idevise != company_currency:
- Montantdevise = (
- "{:.2f}".format(d.get("debitCurr")).replace(".", ",")
- if d.get("debitCurr") != 0
- else "{:.2f}".format(d.get("creditCurr")).replace(".", ",")
- )
- else:
- Montantdevise = (
- "{:.2f}".format(d.get("debit")).replace(".", ",")
- if d.get("debit") != 0
- else "{:.2f}".format(d.get("credit")).replace(".", ",")
- )
-
- row = [
- JournalCode,
- d.get("voucher_type"),
- EcritureNum,
- EcritureDate,
- CompteNum,
- d.get("account"),
- CompAuxNum,
- CompAuxLib,
- PieceRef,
- PieceDate,
- EcritureLib,
- debit,
- credit,
- "",
- "",
- ValidDate,
- Montantdevise,
- Idevise,
- ]
-
- result.append(row)
-
- return result