blob: 23406ea85a66b39fb948fd42b57252bbb7a94264 [file] [log] [blame]
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
# coding=utf-8
import frappe
from frappe import _
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
from frappe.permissions import add_permission, update_permission_property
from erpnext.regional.italy import (
fiscal_regimes,
mode_of_payment_codes,
tax_exemption_reasons,
vat_collectability_options,
)
def setup(company=None, patch=True):
make_custom_fields()
setup_report()
add_permissions()
def make_custom_fields(update=True):
invoice_item_fields = [
dict(
fieldname="tax_rate",
label="Tax Rate",
fieldtype="Float",
insert_after="description",
print_hide=1,
hidden=1,
read_only=1,
),
dict(
fieldname="tax_amount",
label="Tax Amount",
fieldtype="Currency",
insert_after="tax_rate",
print_hide=1,
hidden=1,
read_only=1,
options="currency",
),
dict(
fieldname="total_amount",
label="Total Amount",
fieldtype="Currency",
insert_after="tax_amount",
print_hide=1,
hidden=1,
read_only=1,
options="currency",
),
]
customer_po_fields = [
dict(
fieldname="customer_po_details",
label="Customer PO",
fieldtype="Section Break",
insert_after="image",
),
dict(
fieldname="customer_po_no",
label="Customer PO No",
fieldtype="Data",
insert_after="customer_po_details",
fetch_from="sales_order.po_no",
print_hide=1,
allow_on_submit=1,
fetch_if_empty=1,
read_only=1,
no_copy=1,
),
dict(
fieldname="customer_po_clm_brk",
label="",
fieldtype="Column Break",
insert_after="customer_po_no",
print_hide=1,
read_only=1,
),
dict(
fieldname="customer_po_date",
label="Customer PO Date",
fieldtype="Date",
insert_after="customer_po_clm_brk",
fetch_from="sales_order.po_date",
print_hide=1,
allow_on_submit=1,
fetch_if_empty=1,
read_only=1,
no_copy=1,
),
]
custom_fields = {
"Company": [
dict(
fieldname="sb_e_invoicing",
label="E-Invoicing",
fieldtype="Section Break",
insert_after="date_of_establishment",
print_hide=1,
),
dict(
fieldname="fiscal_regime",
label="Fiscal Regime",
fieldtype="Select",
insert_after="sb_e_invoicing",
print_hide=1,
options="\n".join(map(lambda x: frappe.safe_decode(x, encoding="utf-8"), fiscal_regimes)),
),
dict(
fieldname="fiscal_code",
label="Fiscal Code",
fieldtype="Data",
insert_after="fiscal_regime",
print_hide=1,
description=_("Applicable if the company is an Individual or a Proprietorship"),
),
dict(
fieldname="vat_collectability",
label="VAT Collectability",
fieldtype="Select",
insert_after="fiscal_code",
print_hide=1,
options="\n".join(
map(lambda x: frappe.safe_decode(x, encoding="utf-8"), vat_collectability_options)
),
),
dict(
fieldname="cb_e_invoicing1",
fieldtype="Column Break",
insert_after="vat_collectability",
print_hide=1,
),
dict(
fieldname="registrar_office_province",
label="Province of the Registrar Office",
fieldtype="Data",
insert_after="cb_e_invoicing1",
print_hide=1,
length=2,
),
dict(
fieldname="registration_number",
label="Registration Number",
fieldtype="Data",
insert_after="registrar_office_province",
print_hide=1,
length=20,
),
dict(
fieldname="share_capital_amount",
label="Share Capital",
fieldtype="Currency",
insert_after="registration_number",
print_hide=1,
description=_("Applicable if the company is SpA, SApA or SRL"),
),
dict(
fieldname="no_of_members",
label="No of Members",
fieldtype="Select",
insert_after="share_capital_amount",
print_hide=1,
options="\nSU-Socio Unico\nSM-Piu Soci",
description=_("Applicable if the company is a limited liability company"),
),
dict(
fieldname="liquidation_state",
label="Liquidation State",
fieldtype="Select",
insert_after="no_of_members",
print_hide=1,
options="\nLS-In Liquidazione\nLN-Non in Liquidazione",
),
],
"Sales Taxes and Charges": [
dict(
fieldname="tax_exemption_reason",
label="Tax Exemption Reason",
fieldtype="Select",
insert_after="included_in_print_rate",
print_hide=1,
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0',
options="\n"
+ "\n".join(map(lambda x: frappe.safe_decode(x, encoding="utf-8"), tax_exemption_reasons)),
),
dict(
fieldname="tax_exemption_law",
label="Tax Exempt Under",
fieldtype="Text",
insert_after="tax_exemption_reason",
print_hide=1,
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0',
),
],
"Customer": [
dict(
fieldname="fiscal_code",
label="Fiscal Code",
fieldtype="Data",
insert_after="tax_id",
print_hide=1,
),
dict(
fieldname="recipient_code",
label="Recipient Code",
fieldtype="Data",
insert_after="fiscal_code",
print_hide=1,
default="0000000",
),
dict(
fieldname="pec",
label="Recipient PEC",
fieldtype="Data",
insert_after="fiscal_code",
print_hide=1,
),
dict(
fieldname="is_public_administration",
label="Is Public Administration",
fieldtype="Check",
insert_after="is_internal_customer",
print_hide=1,
description=_("Set this if the customer is a Public Administration company."),
depends_on='eval:doc.customer_type=="Company"',
),
dict(
fieldname="first_name",
label="First Name",
fieldtype="Data",
insert_after="salutation",
print_hide=1,
depends_on='eval:doc.customer_type!="Company"',
),
dict(
fieldname="last_name",
label="Last Name",
fieldtype="Data",
insert_after="first_name",
print_hide=1,
depends_on='eval:doc.customer_type!="Company"',
),
],
"Mode of Payment": [
dict(
fieldname="mode_of_payment_code",
label="Code",
fieldtype="Select",
insert_after="included_in_print_rate",
print_hide=1,
options="\n".join(
map(lambda x: frappe.safe_decode(x, encoding="utf-8"), mode_of_payment_codes)
),
)
],
"Payment Schedule": [
dict(
fieldname="mode_of_payment_code",
label="Code",
fieldtype="Select",
insert_after="mode_of_payment",
print_hide=1,
options="\n".join(
map(lambda x: frappe.safe_decode(x, encoding="utf-8"), mode_of_payment_codes)
),
fetch_from="mode_of_payment.mode_of_payment_code",
read_only=1,
),
dict(
fieldname="bank_account",
label="Bank Account",
fieldtype="Link",
insert_after="mode_of_payment_code",
print_hide=1,
options="Bank Account",
),
dict(
fieldname="bank_account_name",
label="Bank Name",
fieldtype="Data",
insert_after="bank_account",
print_hide=1,
fetch_from="bank_account.bank",
read_only=1,
),
dict(
fieldname="bank_account_no",
label="Bank Account No",
fieldtype="Data",
insert_after="bank_account_name",
print_hide=1,
fetch_from="bank_account.bank_account_no",
read_only=1,
),
dict(
fieldname="bank_account_iban",
label="IBAN",
fieldtype="Data",
insert_after="bank_account_name",
print_hide=1,
fetch_from="bank_account.iban",
read_only=1,
),
dict(
fieldname="bank_account_swift_number",
label="Swift Code (BIC)",
fieldtype="Data",
insert_after="bank_account_iban",
print_hide=1,
fetch_from="bank_account.swift_number",
read_only=1,
),
],
"Sales Invoice": [
dict(
fieldname="vat_collectability",
label="VAT Collectability",
fieldtype="Select",
insert_after="taxes_and_charges",
print_hide=1,
options="\n".join(
map(lambda x: frappe.safe_decode(x, encoding="utf-8"), vat_collectability_options)
),
fetch_from="company.vat_collectability",
),
dict(
fieldname="sb_e_invoicing_reference",
label="E-Invoicing",
fieldtype="Section Break",
insert_after="against_income_account",
print_hide=1,
),
dict(
fieldname="company_fiscal_code",
label="Company Fiscal Code",
fieldtype="Data",
insert_after="sb_e_invoicing_reference",
print_hide=1,
read_only=1,
fetch_from="company.fiscal_code",
),
dict(
fieldname="company_fiscal_regime",
label="Company Fiscal Regime",
fieldtype="Data",
insert_after="company_fiscal_code",
print_hide=1,
read_only=1,
fetch_from="company.fiscal_regime",
),
dict(
fieldname="cb_e_invoicing_reference",
fieldtype="Column Break",
insert_after="company_fiscal_regime",
print_hide=1,
),
dict(
fieldname="customer_fiscal_code",
label="Customer Fiscal Code",
fieldtype="Data",
insert_after="cb_e_invoicing_reference",
read_only=1,
fetch_from="customer.fiscal_code",
),
dict(
fieldname="type_of_document",
label="Type of Document",
fieldtype="Select",
insert_after="customer_fiscal_code",
options="\nTD01\nTD02\nTD03\nTD04\nTD05\nTD06\nTD16\nTD17\nTD18\nTD19\nTD20\nTD21\nTD22\nTD23\nTD24\nTD25\nTD26\nTD27",
),
],
"Purchase Invoice Item": invoice_item_fields,
"Sales Order Item": invoice_item_fields,
"Delivery Note Item": invoice_item_fields,
"Sales Invoice Item": invoice_item_fields + customer_po_fields,
"Quotation Item": invoice_item_fields,
"Purchase Order Item": invoice_item_fields,
"Purchase Receipt Item": invoice_item_fields,
"Supplier Quotation Item": invoice_item_fields,
"Address": [
dict(
fieldname="country_code",
label="Country Code",
fieldtype="Data",
insert_after="country",
print_hide=1,
read_only=0,
fetch_from="country.code",
),
dict(
fieldname="state_code",
label="State Code",
fieldtype="Data",
insert_after="state",
print_hide=1,
),
],
"Purchase Invoice": [
dict(
fieldname="document_type",
label="Document Type",
fieldtype="Data",
insert_after="company",
print_hide=1,
read_only=1,
),
dict(
fieldname="destination_code",
label="Destination Code",
fieldtype="Data",
insert_after="company",
print_hide=1,
read_only=1,
),
dict(
fieldname="imported_grand_total",
label="Imported Grand Total",
fieldtype="Data",
insert_after="update_auto_repeat_reference",
print_hide=1,
read_only=1,
),
],
"Purchase Taxes and Charges": [
dict(
fieldname="tax_rate",
label="Tax Rate",
fieldtype="Data",
insert_after="parenttype",
print_hide=1,
read_only=0,
)
],
"Supplier": [
dict(
fieldname="fiscal_code",
label="Fiscal Code",
fieldtype="Data",
insert_after="tax_id",
print_hide=1,
read_only=1,
),
dict(
fieldname="fiscal_regime",
label="Fiscal Regime",
fieldtype="Select",
insert_after="fiscal_code",
print_hide=1,
read_only=1,
options="\nRF01\nRF02\nRF04\nRF05\nRF06\nRF07\nRF08\nRF09\nRF10\nRF11\nRF12\nRF13\nRF14\nRF15\nRF16\nRF17\nRF18\nRF19",
),
],
}
create_custom_fields(custom_fields, ignore_validate=frappe.flags.in_patch, update=update)
def setup_report():
report_name = "Electronic Invoice Register"
frappe.db.set_value("Report", report_name, "disabled", 0)
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 User"), dict(role="Accounts Manager")],
)
).insert()
def add_permissions():
doctype = "Import Supplier Invoice"
add_permission(doctype, "All", 0)
for role in ("Accounts Manager", "Accounts User", "Purchase User", "Auditor"):
add_permission(doctype, role, 0)
update_permission_property(doctype, role, 0, "print", 1)
update_permission_property(doctype, role, 0, "report", 1)
if role in ("Accounts Manager", "Accounts User"):
update_permission_property(doctype, role, 0, "write", 1)
update_permission_property(doctype, role, 0, "create", 1)
update_permission_property(doctype, "Accounts Manager", 0, "delete", 1)
add_permission(doctype, "Accounts Manager", 1)
update_permission_property(doctype, "Accounts Manager", 1, "write", 1)
update_permission_property(doctype, "Accounts Manager", 1, "create", 1)