Merge branch 'master' into develop
This commit is contained in:
commit
482ebd2c7c
@ -5,7 +5,7 @@ import frappe
|
|||||||
from erpnext.hooks import regional_overrides
|
from erpnext.hooks import regional_overrides
|
||||||
from frappe.utils import getdate
|
from frappe.utils import getdate
|
||||||
|
|
||||||
__version__ = '11.1.8'
|
__version__ = '11.1.9'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
@ -24,7 +24,6 @@ from erpnext.accounts.general_ledger import get_round_off_account_and_cost_cente
|
|||||||
from erpnext.accounts.doctype.loyalty_program.loyalty_program import \
|
from erpnext.accounts.doctype.loyalty_program.loyalty_program import \
|
||||||
get_loyalty_program_details_with_points, get_loyalty_details, validate_loyalty_points
|
get_loyalty_program_details_with_points, get_loyalty_details, validate_loyalty_points
|
||||||
from erpnext.accounts.deferred_revenue import validate_service_stop_date
|
from erpnext.accounts.deferred_revenue import validate_service_stop_date
|
||||||
from erpnext.controllers.accounts_controller import on_submit_regional, on_cancel_regional
|
|
||||||
|
|
||||||
from erpnext.healthcare.utils import manage_invoice_submit_cancel
|
from erpnext.healthcare.utils import manage_invoice_submit_cancel
|
||||||
|
|
||||||
@ -199,8 +198,6 @@ class SalesInvoice(SellingController):
|
|||||||
if "Healthcare" in active_domains:
|
if "Healthcare" in active_domains:
|
||||||
manage_invoice_submit_cancel(self, "on_submit")
|
manage_invoice_submit_cancel(self, "on_submit")
|
||||||
|
|
||||||
on_submit_regional(self)
|
|
||||||
|
|
||||||
def validate_pos_paid_amount(self):
|
def validate_pos_paid_amount(self):
|
||||||
if len(self.payments) == 0 and self.is_pos:
|
if len(self.payments) == 0 and self.is_pos:
|
||||||
frappe.throw(_("At least one mode of payment is required for POS invoice."))
|
frappe.throw(_("At least one mode of payment is required for POS invoice."))
|
||||||
@ -256,8 +253,6 @@ class SalesInvoice(SellingController):
|
|||||||
if "Healthcare" in active_domains:
|
if "Healthcare" in active_domains:
|
||||||
manage_invoice_submit_cancel(self, "on_cancel")
|
manage_invoice_submit_cancel(self, "on_cancel")
|
||||||
|
|
||||||
on_cancel_regional(self)
|
|
||||||
|
|
||||||
def update_status_updater_args(self):
|
def update_status_updater_args(self):
|
||||||
if cint(self.update_stock):
|
if cint(self.update_stock):
|
||||||
self.status_updater.extend([{
|
self.status_updater.extend([{
|
||||||
|
@ -1186,11 +1186,3 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil
|
|||||||
@erpnext.allow_regional
|
@erpnext.allow_regional
|
||||||
def validate_regional(doc):
|
def validate_regional(doc):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@erpnext.allow_regional
|
|
||||||
def on_submit_regional(doc):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@erpnext.allow_regional
|
|
||||||
def on_cancel_regional(doc):
|
|
||||||
pass
|
|
||||||
|
@ -211,7 +211,8 @@ doc_events = {
|
|||||||
"validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products"
|
"validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products"
|
||||||
},
|
},
|
||||||
"Sales Invoice": {
|
"Sales Invoice": {
|
||||||
"on_submit": "erpnext.regional.france.utils.create_transaction_log",
|
"on_submit": ["erpnext.regional.france.utils.create_transaction_log", "erpnext.regional.italy.utils.sales_invoice_on_submit"],
|
||||||
|
"on_cancel": "erpnext.regional.italy.utils.sales_invoice_on_cancel",
|
||||||
"on_trash": "erpnext.regional.check_deletion_permission"
|
"on_trash": "erpnext.regional.check_deletion_permission"
|
||||||
},
|
},
|
||||||
"Payment Entry": {
|
"Payment Entry": {
|
||||||
@ -316,7 +317,5 @@ regional_overrides = {
|
|||||||
'Italy': {
|
'Italy': {
|
||||||
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.italy.utils.update_itemised_tax_data',
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.italy.utils.update_itemised_tax_data',
|
||||||
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.italy.utils.sales_invoice_validate',
|
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.italy.utils.sales_invoice_validate',
|
||||||
'erpnext.controllers.accounts_controller.on_submit_regional': 'erpnext.regional.italy.utils.sales_invoice_on_submit',
|
|
||||||
'erpnext.controllers.accounts_controller.on_cancel_regional': 'erpnext.regional.italy.utils.sales_invoice_on_cancel'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,21 +8,21 @@ import frappe
|
|||||||
|
|
||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
|
company = frappe.get_all('Company', filters = {'country': 'Italy'})
|
||||||
|
if not company:
|
||||||
|
return
|
||||||
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'Italy'})
|
frappe.reload_doc('regional', 'report', 'electronic_invoice_register')
|
||||||
if not company:
|
make_custom_fields()
|
||||||
return
|
setup_report()
|
||||||
|
|
||||||
make_custom_fields()
|
# Set state codes
|
||||||
setup_report()
|
condition = ""
|
||||||
|
for state, code in state_codes.items():
|
||||||
|
condition += " when '{0}' then '{1}'".format(frappe.db.escape(state), frappe.db.escape(code))
|
||||||
|
|
||||||
# Set state codes
|
if condition:
|
||||||
condition = ""
|
frappe.db.sql("""
|
||||||
for state, code in state_codes.items():
|
UPDATE tabAddress set state_code = (case state {condition} end)
|
||||||
condition += " when '{0}' then '{1}'".format(frappe.db.escape(state), frappe.db.escape(code))
|
WHERE country in ('Italy', 'Italia', 'Italian Republic', 'Repubblica Italiana')
|
||||||
|
""".format(condition=condition))
|
||||||
if condition:
|
|
||||||
frappe.db.sql("""
|
|
||||||
UPDATE tabAddress set state_code = (case state {condition} end)
|
|
||||||
WHERE country in ('Italy', 'Italia', 'Italian Republic', 'Repubblica Italiana')
|
|
||||||
""".format(condition=condition))
|
|
||||||
|
@ -10,12 +10,12 @@ from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|||||||
from erpnext.regional.italy import fiscal_regimes, tax_exemption_reasons, mode_of_payment_codes, vat_collectability_options
|
from erpnext.regional.italy import fiscal_regimes, tax_exemption_reasons, mode_of_payment_codes, vat_collectability_options
|
||||||
|
|
||||||
def setup(company=None, patch=True):
|
def setup(company=None, patch=True):
|
||||||
make_custom_fields()
|
make_custom_fields()
|
||||||
setup_report()
|
setup_report()
|
||||||
|
|
||||||
def make_custom_fields(update=True):
|
def make_custom_fields(update=True):
|
||||||
invoice_item_fields = [
|
invoice_item_fields = [
|
||||||
dict(fieldname='tax_rate', label='Tax Rate',
|
dict(fieldname='tax_rate', label='Tax Rate',
|
||||||
fieldtype='Float', insert_after='description',
|
fieldtype='Float', insert_after='description',
|
||||||
print_hide=1, hidden=1, read_only=1),
|
print_hide=1, hidden=1, read_only=1),
|
||||||
dict(fieldname='tax_amount', label='Tax Amount',
|
dict(fieldname='tax_amount', label='Tax Amount',
|
||||||
@ -24,135 +24,135 @@ def make_custom_fields(update=True):
|
|||||||
dict(fieldname='total_amount', label='Total Amount',
|
dict(fieldname='total_amount', label='Total Amount',
|
||||||
fieldtype='Currency', insert_after='tax_amount',
|
fieldtype='Currency', insert_after='tax_amount',
|
||||||
print_hide=1, hidden=1, read_only=1, options="currency")
|
print_hide=1, hidden=1, read_only=1, options="currency")
|
||||||
]
|
]
|
||||||
|
|
||||||
custom_fields = {
|
custom_fields = {
|
||||||
'Company': [
|
'Company': [
|
||||||
dict(fieldname='sb_e_invoicing', label='E-Invoicing',
|
dict(fieldname='sb_e_invoicing', label='E-Invoicing',
|
||||||
fieldtype='Section Break', insert_after='date_of_establishment', print_hide=1),
|
fieldtype='Section Break', insert_after='date_of_establishment', print_hide=1),
|
||||||
dict(fieldname='fiscal_regime', label='Fiscal Regime',
|
dict(fieldname='fiscal_regime', label='Fiscal Regime',
|
||||||
fieldtype='Select', insert_after='sb_e_invoicing', print_hide=1,
|
fieldtype='Select', insert_after='sb_e_invoicing', print_hide=1,
|
||||||
options="\n".join(map(lambda x: x.decode('utf-8'), fiscal_regimes))),
|
options="\n".join(map(lambda x: x.decode('utf-8'), fiscal_regimes))),
|
||||||
dict(fieldname='fiscal_code', label='Fiscal Code', fieldtype='Data', insert_after='fiscal_regime', print_hide=1,
|
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")),
|
description=_("Applicable if the company is an Individual or a Proprietorship")),
|
||||||
dict(fieldname='vat_collectability', label='VAT Collectability',
|
dict(fieldname='vat_collectability', label='VAT Collectability',
|
||||||
fieldtype='Select', insert_after='fiscal_code', print_hide=1,
|
fieldtype='Select', insert_after='fiscal_code', print_hide=1,
|
||||||
options="\n".join(map(lambda x: x.decode('utf-8'), vat_collectability_options))),
|
options="\n".join(map(lambda x: x.decode('utf-8'), vat_collectability_options))),
|
||||||
dict(fieldname='cb_e_invoicing1', fieldtype='Column Break', insert_after='vat_collectability', print_hide=1),
|
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',
|
dict(fieldname='registrar_office_province', label='Province of the Registrar Office',
|
||||||
fieldtype='Data', insert_after='cb_e_invoicing1', print_hide=1, length=2),
|
fieldtype='Data', insert_after='cb_e_invoicing1', print_hide=1, length=2),
|
||||||
dict(fieldname='registration_number', label='Registration Number',
|
dict(fieldname='registration_number', label='Registration Number',
|
||||||
fieldtype='Data', insert_after='registrar_office_province', print_hide=1, length=20),
|
fieldtype='Data', insert_after='registrar_office_province', print_hide=1, length=20),
|
||||||
dict(fieldname='share_capital_amount', label='Share Capital',
|
dict(fieldname='share_capital_amount', label='Share Capital',
|
||||||
fieldtype='Currency', insert_after='registration_number', print_hide=1,
|
fieldtype='Currency', insert_after='registration_number', print_hide=1,
|
||||||
description=_('Applicable if the company is SpA, SApA or SRL')),
|
description=_('Applicable if the company is SpA, SApA or SRL')),
|
||||||
dict(fieldname='no_of_members', label='No of Members',
|
dict(fieldname='no_of_members', label='No of Members',
|
||||||
fieldtype='Select', insert_after='share_capital_amount', print_hide=1,
|
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")),
|
options="\nSU-Socio Unico\nSM-Piu Soci", description=_("Applicable if the company is a limited liability company")),
|
||||||
dict(fieldname='liquidation_state', label='Liquidation State',
|
dict(fieldname='liquidation_state', label='Liquidation State',
|
||||||
fieldtype='Select', insert_after='no_of_members', print_hide=1,
|
fieldtype='Select', insert_after='no_of_members', print_hide=1,
|
||||||
options="\nLS-In Liquidazione\nLN-Non in Liquidazione")
|
options="\nLS-In Liquidazione\nLN-Non in Liquidazione")
|
||||||
],
|
],
|
||||||
'Sales Taxes and Charges': [
|
'Sales Taxes and Charges': [
|
||||||
dict(fieldname='tax_exemption_reason', label='Tax Exemption Reason',
|
dict(fieldname='tax_exemption_reason', label='Tax Exemption Reason',
|
||||||
fieldtype='Select', insert_after='included_in_print_rate', print_hide=1,
|
fieldtype='Select', insert_after='included_in_print_rate', print_hide=1,
|
||||||
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0',
|
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0',
|
||||||
options="\n" + "\n".join(map(lambda x: x.decode('utf-8'), tax_exemption_reasons))),
|
options="\n" + "\n".join(map(lambda x: x.decode('utf-8'), tax_exemption_reasons))),
|
||||||
dict(fieldname='tax_exemption_law', label='Tax Exempt Under',
|
dict(fieldname='tax_exemption_law', label='Tax Exempt Under',
|
||||||
fieldtype='Text', insert_after='tax_exemption_reason', print_hide=1,
|
fieldtype='Text', insert_after='tax_exemption_reason', print_hide=1,
|
||||||
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0')
|
depends_on='eval:doc.charge_type!="Actual" && doc.rate==0.0')
|
||||||
],
|
],
|
||||||
'Customer': [
|
'Customer': [
|
||||||
dict(fieldname='fiscal_code', label='Fiscal Code', fieldtype='Data', insert_after='tax_id', print_hide=1),
|
dict(fieldname='fiscal_code', label='Fiscal Code', fieldtype='Data', insert_after='tax_id', print_hide=1),
|
||||||
dict(fieldname='recipient_code', label='Recipient Code',
|
dict(fieldname='recipient_code', label='Recipient Code',
|
||||||
fieldtype='Data', insert_after='fiscal_code', print_hide=1, default="0000000"),
|
fieldtype='Data', insert_after='fiscal_code', print_hide=1, default="0000000"),
|
||||||
dict(fieldname='pec', label='Recipient PEC',
|
dict(fieldname='pec', label='Recipient PEC',
|
||||||
fieldtype='Data', insert_after='fiscal_code', print_hide=1),
|
fieldtype='Data', insert_after='fiscal_code', print_hide=1),
|
||||||
dict(fieldname='is_public_administration', label='Is Public Administration',
|
dict(fieldname='is_public_administration', label='Is Public Administration',
|
||||||
fieldtype='Check', insert_after='is_internal_customer', print_hide=1,
|
fieldtype='Check', insert_after='is_internal_customer', print_hide=1,
|
||||||
description=_("Set this if the customer is a Public Administration company."),
|
description=_("Set this if the customer is a Public Administration company."),
|
||||||
depends_on='eval:doc.customer_type=="Company"'),
|
depends_on='eval:doc.customer_type=="Company"'),
|
||||||
dict(fieldname='first_name', label='First Name', fieldtype='Data',
|
dict(fieldname='first_name', label='First Name', fieldtype='Data',
|
||||||
insert_after='salutation', print_hide=1, depends_on='eval:doc.customer_type!="Company"'),
|
insert_after='salutation', print_hide=1, depends_on='eval:doc.customer_type!="Company"'),
|
||||||
dict(fieldname='last_name', label='Last Name', fieldtype='Data',
|
dict(fieldname='last_name', label='Last Name', fieldtype='Data',
|
||||||
insert_after='first_name', print_hide=1, depends_on='eval:doc.customer_type!="Company"')
|
insert_after='first_name', print_hide=1, depends_on='eval:doc.customer_type!="Company"')
|
||||||
],
|
],
|
||||||
'Mode of Payment': [
|
'Mode of Payment': [
|
||||||
dict(fieldname='mode_of_payment_code', label='Code',
|
dict(fieldname='mode_of_payment_code', label='Code',
|
||||||
fieldtype='Select', insert_after='included_in_print_rate', print_hide=1,
|
fieldtype='Select', insert_after='included_in_print_rate', print_hide=1,
|
||||||
options="\n".join(map(lambda x: x.decode('utf-8'), mode_of_payment_codes)))
|
options="\n".join(map(lambda x: x.decode('utf-8'), mode_of_payment_codes)))
|
||||||
],
|
],
|
||||||
'Payment Schedule': [
|
'Payment Schedule': [
|
||||||
dict(fieldname='mode_of_payment_code', label='Code',
|
dict(fieldname='mode_of_payment_code', label='Code',
|
||||||
fieldtype='Select', insert_after='mode_of_payment', print_hide=1,
|
fieldtype='Select', insert_after='mode_of_payment', print_hide=1,
|
||||||
options="\n".join(map(lambda x: x.decode('utf-8'), mode_of_payment_codes)),
|
options="\n".join(map(lambda x: x.decode('utf-8'), mode_of_payment_codes)),
|
||||||
fetch_from="mode_of_payment.mode_of_payment_code", read_only=1),
|
fetch_from="mode_of_payment.mode_of_payment_code", read_only=1),
|
||||||
dict(fieldname='bank_account', label='Bank Account',
|
dict(fieldname='bank_account', label='Bank Account',
|
||||||
fieldtype='Link', insert_after='mode_of_payment_code', print_hide=1,
|
fieldtype='Link', insert_after='mode_of_payment_code', print_hide=1,
|
||||||
options="Bank Account"),
|
options="Bank Account"),
|
||||||
dict(fieldname='bank_account_name', label='Bank Account Name',
|
dict(fieldname='bank_account_name', label='Bank Account Name',
|
||||||
fieldtype='Data', insert_after='bank_account', print_hide=1,
|
fieldtype='Data', insert_after='bank_account', print_hide=1,
|
||||||
fetch_from="bank_account.account_name", read_only=1),
|
fetch_from="bank_account.account_name", read_only=1),
|
||||||
dict(fieldname='bank_account_no', label='Bank Account No',
|
dict(fieldname='bank_account_no', label='Bank Account No',
|
||||||
fieldtype='Data', insert_after='bank_account_name', print_hide=1,
|
fieldtype='Data', insert_after='bank_account_name', print_hide=1,
|
||||||
fetch_from="bank_account.bank_account_no", read_only=1),
|
fetch_from="bank_account.bank_account_no", read_only=1),
|
||||||
dict(fieldname='bank_account_iban', label='IBAN',
|
dict(fieldname='bank_account_iban', label='IBAN',
|
||||||
fieldtype='Data', insert_after='bank_account_name', print_hide=1,
|
fieldtype='Data', insert_after='bank_account_name', print_hide=1,
|
||||||
fetch_from="bank_account.iban", read_only=1),
|
fetch_from="bank_account.iban", read_only=1),
|
||||||
],
|
],
|
||||||
"Sales Invoice": [
|
"Sales Invoice": [
|
||||||
dict(fieldname='vat_collectability', label='VAT Collectability',
|
dict(fieldname='vat_collectability', label='VAT Collectability',
|
||||||
fieldtype='Select', insert_after='taxes_and_charges', print_hide=1,
|
fieldtype='Select', insert_after='taxes_and_charges', print_hide=1,
|
||||||
options="\n".join(map(lambda x: x.decode('utf-8'), vat_collectability_options)),
|
options="\n".join(map(lambda x: x.decode('utf-8'), vat_collectability_options)),
|
||||||
fetch_from="company.vat_collectability"),
|
fetch_from="company.vat_collectability"),
|
||||||
dict(fieldname='sb_e_invoicing_reference', label='E-Invoicing',
|
dict(fieldname='sb_e_invoicing_reference', label='E-Invoicing',
|
||||||
fieldtype='Section Break', insert_after='pos_total_qty', print_hide=1),
|
fieldtype='Section Break', insert_after='pos_total_qty', print_hide=1),
|
||||||
dict(fieldname='company_tax_id', label='Company Tax ID',
|
dict(fieldname='company_tax_id', label='Company Tax ID',
|
||||||
fieldtype='Data', insert_after='sb_e_invoicing_reference', print_hide=1, read_only=1,
|
fieldtype='Data', insert_after='sb_e_invoicing_reference', print_hide=1, read_only=1,
|
||||||
fetch_from="company.tax_id"),
|
fetch_from="company.tax_id"),
|
||||||
dict(fieldname='company_fiscal_code', label='Company Fiscal Code',
|
dict(fieldname='company_fiscal_code', label='Company Fiscal Code',
|
||||||
fieldtype='Data', insert_after='company_tax_id', print_hide=1, read_only=1,
|
fieldtype='Data', insert_after='company_tax_id', print_hide=1, read_only=1,
|
||||||
fetch_from="company.fiscal_code"),
|
fetch_from="company.fiscal_code"),
|
||||||
dict(fieldname='company_fiscal_regime', label='Company Fiscal Regime',
|
dict(fieldname='company_fiscal_regime', label='Company Fiscal Regime',
|
||||||
fieldtype='Data', insert_after='company_fiscal_code', print_hide=1, read_only=1,
|
fieldtype='Data', insert_after='company_fiscal_code', print_hide=1, read_only=1,
|
||||||
fetch_from="company.fiscal_regime"),
|
fetch_from="company.fiscal_regime"),
|
||||||
dict(fieldname='cb_e_invoicing_reference', fieldtype='Column Break',
|
dict(fieldname='cb_e_invoicing_reference', fieldtype='Column Break',
|
||||||
insert_after='company_fiscal_regime', print_hide=1),
|
insert_after='company_fiscal_regime', print_hide=1),
|
||||||
dict(fieldname='customer_fiscal_code', label='Customer Fiscal Code',
|
dict(fieldname='customer_fiscal_code', label='Customer Fiscal Code',
|
||||||
fieldtype='Data', insert_after='cb_e_invoicing_reference', read_only=1,
|
fieldtype='Data', insert_after='cb_e_invoicing_reference', read_only=1,
|
||||||
fetch_from="customer.fiscal_code"),
|
fetch_from="customer.fiscal_code"),
|
||||||
],
|
],
|
||||||
'Purchase Invoice Item': invoice_item_fields,
|
'Purchase Invoice Item': invoice_item_fields,
|
||||||
'Sales Order Item': invoice_item_fields,
|
'Sales Order Item': invoice_item_fields,
|
||||||
'Delivery Note Item': invoice_item_fields,
|
'Delivery Note Item': invoice_item_fields,
|
||||||
'Sales Invoice Item': invoice_item_fields,
|
'Sales Invoice Item': invoice_item_fields,
|
||||||
'Quotation Item': invoice_item_fields,
|
'Quotation Item': invoice_item_fields,
|
||||||
'Purchase Order Item': invoice_item_fields,
|
'Purchase Order Item': invoice_item_fields,
|
||||||
'Purchase Receipt Item': invoice_item_fields,
|
'Purchase Receipt Item': invoice_item_fields,
|
||||||
'Supplier Quotation Item': invoice_item_fields,
|
'Supplier Quotation Item': invoice_item_fields,
|
||||||
'Address': [
|
'Address': [
|
||||||
dict(fieldname='country_code', label='Country Code',
|
dict(fieldname='country_code', label='Country Code',
|
||||||
fieldtype='Data', insert_after='country', print_hide=1, read_only=1,
|
fieldtype='Data', insert_after='country', print_hide=1, read_only=1,
|
||||||
fetch_from="country.code"),
|
fetch_from="country.code"),
|
||||||
dict(fieldname='state_code', label='State Code',
|
dict(fieldname='state_code', label='State Code',
|
||||||
fieldtype='Data', insert_after='state', print_hide=1)
|
fieldtype='Data', insert_after='state', print_hide=1)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
create_custom_fields(custom_fields, ignore_validate = frappe.flags.in_patch, update=update)
|
create_custom_fields(custom_fields, ignore_validate = frappe.flags.in_patch, update=update)
|
||||||
|
|
||||||
def setup_report():
|
def setup_report():
|
||||||
report_name = 'Electronic Invoice Register'
|
report_name = 'Electronic Invoice Register'
|
||||||
|
|
||||||
frappe.db.sql(""" update `tabReport` set disabled = 0 where
|
frappe.db.sql(""" update `tabReport` set disabled = 0 where
|
||||||
name = %s """, report_name)
|
name = %s """, report_name)
|
||||||
|
|
||||||
if not frappe.db.get_value('Custom Role', dict(report=report_name)):
|
if not frappe.db.get_value('Custom Role', dict(report=report_name)):
|
||||||
frappe.get_doc(dict(
|
frappe.get_doc(dict(
|
||||||
doctype='Custom Role',
|
doctype='Custom Role',
|
||||||
report=report_name,
|
report=report_name,
|
||||||
roles= [
|
roles= [
|
||||||
dict(role='Accounts User'),
|
dict(role='Accounts User'),
|
||||||
dict(role='Accounts Manager')
|
dict(role='Accounts Manager')
|
||||||
]
|
]
|
||||||
)).insert()
|
)).insert()
|
||||||
|
@ -183,6 +183,9 @@ def get_invoice_summary(items, taxes):
|
|||||||
#Preflight for successful e-invoice export.
|
#Preflight for successful e-invoice export.
|
||||||
def sales_invoice_validate(doc):
|
def sales_invoice_validate(doc):
|
||||||
#Validate company
|
#Validate company
|
||||||
|
if doc.doctype != 'Sales Invoice':
|
||||||
|
return
|
||||||
|
|
||||||
if not doc.company_address:
|
if not doc.company_address:
|
||||||
frappe.throw(_("Please set an Address on the Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
|
frappe.throw(_("Please set an Address on the Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
|
||||||
else:
|
else:
|
||||||
@ -219,8 +222,12 @@ def sales_invoice_validate(doc):
|
|||||||
|
|
||||||
|
|
||||||
#Ensure payment details are valid for e-invoice.
|
#Ensure payment details are valid for e-invoice.
|
||||||
def sales_invoice_on_submit(doc):
|
def sales_invoice_on_submit(doc, method):
|
||||||
#Validate payment details
|
#Validate payment details
|
||||||
|
if get_company_country(doc.company) not in ['Italy',
|
||||||
|
'Italia', 'Italian Republic', 'Repubblica Italiana']:
|
||||||
|
return
|
||||||
|
|
||||||
if not len(doc.payment_schedule):
|
if not len(doc.payment_schedule):
|
||||||
frappe.throw(_("Please set the Payment Schedule"), title=_("E-Invoicing Information Missing"))
|
frappe.throw(_("Please set the Payment Schedule"), title=_("E-Invoicing Information Missing"))
|
||||||
else:
|
else:
|
||||||
@ -244,10 +251,17 @@ def prepare_and_attach_invoice(doc):
|
|||||||
save_file(xml_filename, invoice_xml, dt=doc.doctype, dn=doc.name, is_private=True)
|
save_file(xml_filename, invoice_xml, dt=doc.doctype, dn=doc.name, is_private=True)
|
||||||
|
|
||||||
#Delete e-invoice attachment on cancel.
|
#Delete e-invoice attachment on cancel.
|
||||||
def sales_invoice_on_cancel(doc):
|
def sales_invoice_on_cancel(doc, method):
|
||||||
|
if get_company_country(doc.company) not in ['Italy',
|
||||||
|
'Italia', 'Italian Republic', 'Repubblica Italiana']:
|
||||||
|
return
|
||||||
|
|
||||||
for attachment in get_e_invoice_attachments(doc):
|
for attachment in get_e_invoice_attachments(doc):
|
||||||
remove_file(attachment.name, attached_to_doctype=doc.doctype, attached_to_name=doc.name)
|
remove_file(attachment.name, attached_to_doctype=doc.doctype, attached_to_name=doc.name)
|
||||||
|
|
||||||
|
def get_company_country(company):
|
||||||
|
return frappe.get_cached_value('Company', company, 'country')
|
||||||
|
|
||||||
def get_e_invoice_attachments(invoice):
|
def get_e_invoice_attachments(invoice):
|
||||||
out = []
|
out = []
|
||||||
attachments = get_attachments(invoice.doctype, invoice.name)
|
attachments = get_attachments(invoice.doctype, invoice.name)
|
||||||
|
@ -91,7 +91,7 @@ frappe.ui.form.on('Material Request', {
|
|||||||
|
|
||||||
// stop
|
// stop
|
||||||
frm.add_custom_button(__('Stop'),
|
frm.add_custom_button(__('Stop'),
|
||||||
() => frm.events.update_status(frm, 'Stop'));
|
() => frm.events.update_status(frm, 'Stopped'));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user