Merge branch 'master' into develop
This commit is contained in:
commit
cc6e51c62d
@ -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.6'
|
__version__ = '11.1.7'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -15,6 +16,7 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -43,10 +45,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -74,10 +78,12 @@
|
|||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -105,10 +111,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -135,10 +143,12 @@
|
|||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -166,10 +176,12 @@
|
|||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -188,7 +200,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -197,10 +209,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -219,7 +233,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -228,10 +242,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -281,7 +297,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -290,10 +306,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -322,10 +340,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -352,10 +372,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -382,6 +404,7 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -395,7 +418,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-10-21 14:26:15.812416",
|
"modified": "2019-02-19 08:35:24.157327",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Cashier Closing",
|
"name": "Cashier Closing",
|
||||||
@ -404,7 +427,6 @@
|
|||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
"amend": 0,
|
"amend": 0,
|
||||||
"apply_user_permissions": 0,
|
|
||||||
"cancel": 0,
|
"cancel": 0,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 1,
|
"delete": 1,
|
||||||
@ -430,5 +452,6 @@
|
|||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -14,6 +15,7 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -41,10 +43,12 @@
|
|||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -63,7 +67,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -72,6 +76,7 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -85,7 +90,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-09-02 14:45:36.303520",
|
"modified": "2019-02-19 08:34:20.268037",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Cashier Closing Payments",
|
"name": "Cashier Closing Payments",
|
||||||
@ -99,5 +104,6 @@
|
|||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -398,7 +399,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "6",
|
"precision": "9",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -911,7 +912,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-08-19 04:08:44.742510",
|
"modified": "2019-02-18 19:00:53.662788",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Journal Entry Account",
|
"name": "Journal Entry Account",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -425,7 +426,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1501,7 +1502,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-09-06 14:44:43.563367",
|
"modified": "2019-02-18 18:52:34.203239",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Payment Request",
|
"name": "Payment Request",
|
||||||
|
@ -196,8 +196,9 @@ def get_pricing_rule_for_item(args):
|
|||||||
pricing_rule_rate = 0.0
|
pricing_rule_rate = 0.0
|
||||||
if pricing_rule.currency == args.currency:
|
if pricing_rule.currency == args.currency:
|
||||||
pricing_rule_rate = pricing_rule.rate
|
pricing_rule_rate = pricing_rule.rate
|
||||||
|
|
||||||
item_details.update({
|
item_details.update({
|
||||||
"price_list_rate": pricing_rule_rate,
|
"price_list_rate": pricing_rule_rate * args.get("conversion_factor"),
|
||||||
"discount_percentage": 0.0
|
"discount_percentage": 0.0
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
|
@ -9,9 +9,12 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
|
|||||||
this.setup_posting_date_time_check();
|
this.setup_posting_date_time_check();
|
||||||
this._super(doc);
|
this._super(doc);
|
||||||
|
|
||||||
// formatter for material request item
|
// formatter for purchase invoice item
|
||||||
this.frm.set_indicator_formatter('item_code',
|
if(this.frm.doc.update_stock) {
|
||||||
function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
|
this.frm.set_indicator_formatter('item_code', function(doc) {
|
||||||
|
return (doc.qty<=doc.received_qty) ? "green" : "orange";
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onload: function() {
|
onload: function() {
|
||||||
this._super();
|
this._super();
|
||||||
|
@ -293,7 +293,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -321,7 +321,7 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Qty",
|
"label": "Accepted Qty",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldname": "qty",
|
"oldfieldname": "qty",
|
||||||
@ -358,7 +358,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2659,7 +2659,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-23 16:23:49.360332",
|
"modified": "2019-02-18 19:03:19.250280",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice Item",
|
"name": "Purchase Invoice Item",
|
||||||
|
@ -1966,7 +1966,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -5677,7 +5677,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2018-12-27 02:03:14.009762",
|
"modified": "2019-02-18 18:56:51.265257",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice",
|
"name": "Sales Invoice",
|
||||||
|
@ -24,6 +24,7 @@ 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
|
||||||
|
|
||||||
@ -198,6 +199,8 @@ 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."))
|
||||||
@ -253,6 +256,8 @@ 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([{
|
||||||
|
@ -779,7 +779,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -913,7 +913,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -2799,7 +2799,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-23 17:23:38.327395",
|
"modified": "2019-02-18 18:59:52.223628",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice Item",
|
"name": "Sales Invoice Item",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -13,6 +14,7 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -45,6 +47,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -77,11 +80,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "0.0",
|
"default": "",
|
||||||
"depends_on": "eval:parent.doctype == 'Sales Invoice'",
|
"depends_on": "eval:parent.doctype == 'Sales Invoice'",
|
||||||
"fieldname": "amount",
|
"fieldname": "amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
@ -97,7 +101,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -111,6 +115,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -141,6 +146,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -173,6 +179,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -206,6 +213,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -238,6 +246,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -278,7 +287,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-05-16 22:42:52.033991",
|
"modified": "2019-02-18 15:03:59.720469",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice Payment",
|
"name": "Sales Invoice Payment",
|
||||||
@ -292,5 +301,6 @@
|
|||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 0,
|
"track_changes": 0,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"beta": 0,
|
"beta": 0,
|
||||||
@ -12,6 +14,8 @@
|
|||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -39,9 +43,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -68,9 +75,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -88,7 +98,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -97,9 +107,12 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -126,20 +139,21 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 0,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
|
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-02-17 16:47:04.413420",
|
"modified": "2019-02-18 18:50:44.770361",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice Timesheet",
|
"name": "Sales Invoice Timesheet",
|
||||||
@ -153,5 +167,6 @@
|
|||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
@ -495,6 +495,7 @@ class ReceivablePayableReport(object):
|
|||||||
values.append(self.filters.get(party_type_field))
|
values.append(self.filters.get(party_type_field))
|
||||||
|
|
||||||
if party_type_field=="customer":
|
if party_type_field=="customer":
|
||||||
|
account_type = "Receivable"
|
||||||
if self.filters.get("customer_group"):
|
if self.filters.get("customer_group"):
|
||||||
lft, rgt = frappe.db.get_value("Customer Group",
|
lft, rgt = frappe.db.get_value("Customer Group",
|
||||||
self.filters.get("customer_group"), ["lft", "rgt"])
|
self.filters.get("customer_group"), ["lft", "rgt"])
|
||||||
@ -529,12 +530,18 @@ class ReceivablePayableReport(object):
|
|||||||
or (steam.parent = against_voucher and steam.parenttype = against_voucher_type)
|
or (steam.parent = against_voucher and steam.parenttype = against_voucher_type)
|
||||||
or (steam.parent = party and steam.parenttype = 'Customer')))""".format(lft, rgt))
|
or (steam.parent = party and steam.parenttype = 'Customer')))""".format(lft, rgt))
|
||||||
|
|
||||||
if party_type_field=="supplier":
|
elif party_type_field=="supplier":
|
||||||
|
account_type = "Payable"
|
||||||
if self.filters.get("supplier_group"):
|
if self.filters.get("supplier_group"):
|
||||||
conditions.append("""party in (select name from tabSupplier
|
conditions.append("""party in (select name from tabSupplier
|
||||||
where supplier_group=%s)""")
|
where supplier_group=%s)""")
|
||||||
values.append(self.filters.get("supplier_group"))
|
values.append(self.filters.get("supplier_group"))
|
||||||
|
|
||||||
|
accounts = [d.name for d in frappe.get_all("Account",
|
||||||
|
filters={"account_type": account_type, "company": self.filters.company})]
|
||||||
|
conditions.append("account in (%s)" % ','.join(['%s'] *len(accounts)))
|
||||||
|
values += accounts
|
||||||
|
|
||||||
return " and ".join(conditions), values
|
return " and ".join(conditions), values
|
||||||
|
|
||||||
def get_gl_entries_for(self, party, party_type, against_voucher_type, against_voucher):
|
def get_gl_entries_for(self, party, party_type, against_voucher_type, against_voucher):
|
||||||
|
@ -848,7 +848,7 @@
|
|||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"print_width": "100px",
|
"print_width": "100px",
|
||||||
@ -1819,7 +1819,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-23 17:34:54.977366",
|
"modified": "2019-02-18 18:58:10.351451",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Buying",
|
"module": "Buying",
|
||||||
"name": "Supplier Quotation Item",
|
"name": "Supplier Quotation Item",
|
||||||
|
@ -95,6 +95,8 @@ class AccountsController(TransactionBase):
|
|||||||
if self.is_return:
|
if self.is_return:
|
||||||
self.validate_qty()
|
self.validate_qty()
|
||||||
|
|
||||||
|
validate_regional(self)
|
||||||
|
|
||||||
def validate_invoice_documents_schedule(self):
|
def validate_invoice_documents_schedule(self):
|
||||||
self.validate_payment_schedule_dates()
|
self.validate_payment_schedule_dates()
|
||||||
self.set_due_date()
|
self.set_due_date()
|
||||||
@ -1180,3 +1182,15 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil
|
|||||||
parent.update_blanket_order()
|
parent.update_blanket_order()
|
||||||
parent.update_billing_percentage()
|
parent.update_billing_percentage()
|
||||||
parent.set_status()
|
parent.set_status()
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
|
def validate_regional(doc):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
|
def on_submit_regional(doc):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
|
def on_cancel_regional(doc):
|
||||||
|
pass
|
||||||
|
@ -219,7 +219,7 @@ doc_events = {
|
|||||||
"on_trash": "erpnext.regional.check_deletion_permission"
|
"on_trash": "erpnext.regional.check_deletion_permission"
|
||||||
},
|
},
|
||||||
'Address': {
|
'Address': {
|
||||||
'validate': 'erpnext.regional.india.utils.validate_gstin_for_india'
|
'validate': ['erpnext.regional.india.utils.validate_gstin_for_india', 'erpnext.regional.italy.utils.validate_address']
|
||||||
},
|
},
|
||||||
('Sales Invoice', 'Purchase Invoice', 'Delivery Note'): {
|
('Sales Invoice', 'Purchase Invoice', 'Delivery Note'): {
|
||||||
'validate': 'erpnext.regional.india.utils.set_place_of_supply'
|
'validate': 'erpnext.regional.india.utils.set_place_of_supply'
|
||||||
@ -312,5 +312,11 @@ regional_overrides = {
|
|||||||
},
|
},
|
||||||
'Saudi Arabia': {
|
'Saudi Arabia': {
|
||||||
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data'
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data'
|
||||||
|
},
|
||||||
|
'Italy': {
|
||||||
|
'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.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'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -901,7 +901,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 1,
|
"print_hide_if_no_value": 1,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1906,7 +1906,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2019-02-12 11:24:20.848207",
|
"modified": "2019-02-18 18:54:36.161027",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Slip",
|
"name": "Salary Slip",
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"beta": 0,
|
"beta": 0,
|
||||||
@ -11,16 +13,21 @@
|
|||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
"fieldname": "time_sheet",
|
"fieldname": "time_sheet",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
|
"in_standard_filter": 0,
|
||||||
"label": "Time Sheet",
|
"label": "Time Sheet",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
@ -30,49 +37,58 @@
|
|||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
"fieldname": "working_hours",
|
"fieldname": "working_hours",
|
||||||
"fieldtype": "Float",
|
"fieldtype": "Float",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
|
"in_standard_filter": 0,
|
||||||
"label": "Working Hours",
|
"label": "Working Hours",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "3",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 0,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
|
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2016-07-11 03:28:07.152366",
|
"modified": "2019-02-19 08:33:41.762144",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Slip Timesheet",
|
"name": "Salary Slip Timesheet",
|
||||||
@ -82,7 +98,10 @@
|
|||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"read_only_onload": 0,
|
"read_only_onload": 0,
|
||||||
|
"show_name_in_global_search": 0,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_seen": 0
|
"track_changes": 0,
|
||||||
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 1,
|
"allow_import": 1,
|
||||||
"allow_rename": 1,
|
"allow_rename": 1,
|
||||||
@ -365,7 +366,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -950,7 +951,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-07-24 18:36:25.169098",
|
"modified": "2019-02-18 18:51:53.932518",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Structure",
|
"name": "Salary Structure",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -351,8 +352,8 @@
|
|||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-09-01 17:05:59.600583",
|
"modified": "2019-02-01 14:21:16.729848",
|
||||||
"modified_by": "cave@aperture.com",
|
"modified_by": "Administrator",
|
||||||
"module": "Hub Node",
|
"module": "Hub Node",
|
||||||
"name": "Marketplace Settings",
|
"name": "Marketplace Settings",
|
||||||
"name_case": "",
|
"name_case": "",
|
||||||
|
@ -185,7 +185,7 @@ class BOM(WebsiteGenerator):
|
|||||||
args = frappe._dict({
|
args = frappe._dict({
|
||||||
"doctype": "BOM",
|
"doctype": "BOM",
|
||||||
"price_list": self.buying_price_list,
|
"price_list": self.buying_price_list,
|
||||||
"qty": arg.get("qty"),
|
"qty": arg.get("qty") or 1,
|
||||||
"uom": arg.get("uom") or arg.get("stock_uom"),
|
"uom": arg.get("uom") or arg.get("stock_uom"),
|
||||||
"stock_uom": arg.get("stock_uom"),
|
"stock_uom": arg.get("stock_uom"),
|
||||||
"transaction_type": "buying",
|
"transaction_type": "buying",
|
||||||
|
@ -172,9 +172,6 @@ def make_material_request(source_name, target_doc=None):
|
|||||||
doclist = get_mapped_doc("Job Card", source_name, {
|
doclist = get_mapped_doc("Job Card", source_name, {
|
||||||
"Job Card": {
|
"Job Card": {
|
||||||
"doctype": "Material Request",
|
"doctype": "Material Request",
|
||||||
"validation": {
|
|
||||||
"docstatus": ["=", 1]
|
|
||||||
},
|
|
||||||
"field_map": {
|
"field_map": {
|
||||||
"name": "job_card",
|
"name": "job_card",
|
||||||
},
|
},
|
||||||
@ -206,9 +203,6 @@ def make_stock_entry(source_name, target_doc=None):
|
|||||||
doclist = get_mapped_doc("Job Card", source_name, {
|
doclist = get_mapped_doc("Job Card", source_name, {
|
||||||
"Job Card": {
|
"Job Card": {
|
||||||
"doctype": "Stock Entry",
|
"doctype": "Stock Entry",
|
||||||
"validation": {
|
|
||||||
"docstatus": ["=", 1]
|
|
||||||
},
|
|
||||||
"field_map": {
|
"field_map": {
|
||||||
"name": "job_card",
|
"name": "job_card",
|
||||||
"for_quantity": "fg_completed_qty"
|
"for_quantity": "fg_completed_qty"
|
||||||
|
@ -487,7 +487,6 @@ erpnext.patches.v10_0.update_assessment_plan
|
|||||||
erpnext.patches.v10_0.update_assessment_result
|
erpnext.patches.v10_0.update_assessment_result
|
||||||
erpnext.patches.v10_0.set_default_payment_terms_based_on_company
|
erpnext.patches.v10_0.set_default_payment_terms_based_on_company
|
||||||
erpnext.patches.v10_0.update_sales_order_link_to_purchase_order
|
erpnext.patches.v10_0.update_sales_order_link_to_purchase_order
|
||||||
erpnext.patches.v10_0.item_barcode_childtable_migrate
|
|
||||||
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
|
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
|
||||||
erpnext.patches.v10_0.set_currency_in_pricing_rule
|
erpnext.patches.v10_0.set_currency_in_pricing_rule
|
||||||
erpnext.patches.v10_0.set_b2c_limit
|
erpnext.patches.v10_0.set_b2c_limit
|
||||||
@ -574,6 +573,7 @@ erpnext.patches.v11_0.drop_column_max_days_allowed
|
|||||||
erpnext.patches.v10_0.update_user_image_in_employee
|
erpnext.patches.v10_0.update_user_image_in_employee
|
||||||
erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items
|
erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items
|
||||||
erpnext.patches.v10_0.allow_operators_in_supplier_scorecard
|
erpnext.patches.v10_0.allow_operators_in_supplier_scorecard
|
||||||
|
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
|
||||||
erpnext.patches.v11_0.update_delivery_trip_status
|
erpnext.patches.v11_0.update_delivery_trip_status
|
||||||
erpnext.patches.v11_0.set_missing_gst_hsn_code
|
erpnext.patches.v11_0.set_missing_gst_hsn_code
|
||||||
erpnext.patches.v11_0.rename_bom_wo_fields
|
erpnext.patches.v11_0.rename_bom_wo_fields
|
||||||
@ -582,4 +582,6 @@ erpnext.patches.v11_0.renamed_from_to_fields_in_project
|
|||||||
erpnext.patches.v11_0.add_permissions_in_gst_settings
|
erpnext.patches.v11_0.add_permissions_in_gst_settings
|
||||||
erpnext.patches.v11_1.setup_guardian_role
|
erpnext.patches.v11_1.setup_guardian_role
|
||||||
execute:frappe.delete_doc('DocType', 'Notification Control')
|
execute:frappe.delete_doc('DocType', 'Notification Control')
|
||||||
|
erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
|
||||||
|
erpnext.patches.v11_0.make_italian_localization_fields
|
||||||
erpnext.patches.v12_0.move_item_tax_to_item_tax_template
|
erpnext.patches.v12_0.move_item_tax_to_item_tax_template
|
@ -7,15 +7,18 @@ import frappe
|
|||||||
|
|
||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
items_barcode = frappe.get_all('Item', ['name', 'barcode'], { 'barcode': ('!=', '') })
|
|
||||||
|
|
||||||
frappe.reload_doc("stock", "doctype", "item")
|
|
||||||
frappe.reload_doc("stock", "doctype", "item_barcode")
|
frappe.reload_doc("stock", "doctype", "item_barcode")
|
||||||
|
|
||||||
|
items_barcode = frappe.get_all('Item', ['name', 'barcode'], { 'barcode': ('!=', '') })
|
||||||
|
frappe.reload_doc("stock", "doctype", "item")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for item in items_barcode:
|
for item in items_barcode:
|
||||||
barcode = item.barcode.strip()
|
barcode = item.barcode.strip()
|
||||||
|
|
||||||
if barcode and '<' not in barcode:
|
if barcode and '<' not in barcode:
|
||||||
|
try:
|
||||||
frappe.get_doc({
|
frappe.get_doc({
|
||||||
'idx': 0,
|
'idx': 0,
|
||||||
'doctype': 'Item Barcode',
|
'doctype': 'Item Barcode',
|
||||||
@ -24,3 +27,5 @@ def execute():
|
|||||||
'parent': item.name,
|
'parent': item.name,
|
||||||
'parentfield': 'barcodes'
|
'parentfield': 'barcodes'
|
||||||
}).insert()
|
}).insert()
|
||||||
|
except frappe.DuplicateEntryError:
|
||||||
|
continue
|
||||||
|
28
erpnext/patches/v11_0/make_italian_localization_fields.py
Normal file
28
erpnext/patches/v11_0/make_italian_localization_fields.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Copyright (c) 2017, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
from erpnext.regional.italy.setup import make_custom_fields, setup_report
|
||||||
|
from erpnext.regional.italy import state_codes
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
|
||||||
|
company = frappe.get_all('Company', filters = {'country': 'Italy'})
|
||||||
|
if not company:
|
||||||
|
return
|
||||||
|
|
||||||
|
make_custom_fields()
|
||||||
|
setup_report()
|
||||||
|
|
||||||
|
# Set state codes
|
||||||
|
condition = ""
|
||||||
|
for state, code in state_codes.items():
|
||||||
|
condition += " when '{0}' then '{1}'".format(frappe.db.escape(state), frappe.db.escape(code))
|
||||||
|
|
||||||
|
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))
|
@ -0,0 +1,7 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
'''Remove barcodes field from "Copy Fields to Variants" table because barcodes must be unique'''
|
||||||
|
|
||||||
|
settings = frappe.get_doc('Item Variant Settings')
|
||||||
|
settings.remove_invalid_fields_for_copy_fields_in_variants()
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -13,6 +14,7 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -44,6 +46,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -75,6 +78,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -105,6 +109,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -136,6 +141,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -166,6 +172,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -197,6 +204,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -230,6 +238,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -260,6 +269,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -278,7 +288,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -292,6 +302,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -325,6 +336,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -355,6 +367,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -388,6 +401,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -420,6 +434,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -450,6 +465,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -482,6 +498,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -512,6 +529,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -545,6 +563,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -575,6 +594,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -607,6 +627,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -637,6 +658,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -669,6 +691,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -700,6 +723,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -718,7 +742,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 1,
|
"permlevel": 1,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -732,6 +756,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -752,7 +777,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 1,
|
"permlevel": 1,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -766,6 +791,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -796,6 +822,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -827,6 +854,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -860,6 +888,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -891,6 +920,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -932,7 +962,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-05-07 15:12:31.510813",
|
"modified": "2019-02-18 18:55:53.190526",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Projects",
|
"module": "Projects",
|
||||||
"name": "Timesheet Detail",
|
"name": "Timesheet Detail",
|
||||||
@ -944,5 +974,6 @@
|
|||||||
"show_name_in_global_search": 0,
|
"show_name_in_global_search": 0,
|
||||||
"sort_order": "ASC",
|
"sort_order": "ASC",
|
||||||
"track_changes": 0,
|
"track_changes": 0,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
@ -10,14 +10,15 @@ import Home from './pages/Home.vue';
|
|||||||
import Search from './pages/Search.vue';
|
import Search from './pages/Search.vue';
|
||||||
import Category from './pages/Category.vue';
|
import Category from './pages/Category.vue';
|
||||||
import SavedItems from './pages/SavedItems.vue';
|
import SavedItems from './pages/SavedItems.vue';
|
||||||
|
import FeaturedItems from './pages/FeaturedItems.vue';
|
||||||
import PublishedItems from './pages/PublishedItems.vue';
|
import PublishedItems from './pages/PublishedItems.vue';
|
||||||
import Item from './pages/Item.vue';
|
import Item from './pages/Item.vue';
|
||||||
import Seller from './pages/Seller.vue';
|
import Seller from './pages/Seller.vue';
|
||||||
|
import SellerItems from './pages/SellerItems.vue';
|
||||||
import Publish from './pages/Publish.vue';
|
import Publish from './pages/Publish.vue';
|
||||||
import Buying from './pages/Buying.vue';
|
import Buying from './pages/Buying.vue';
|
||||||
import Selling from './pages/Selling.vue';
|
import Selling from './pages/Selling.vue';
|
||||||
import Messages from './pages/Messages.vue';
|
import Messages from './pages/Messages.vue';
|
||||||
import Profile from './pages/Profile.vue';
|
|
||||||
import NotFound from './pages/NotFound.vue';
|
import NotFound from './pages/NotFound.vue';
|
||||||
|
|
||||||
function get_route_map() {
|
function get_route_map() {
|
||||||
@ -27,11 +28,13 @@ function get_route_map() {
|
|||||||
'marketplace/category/:category': Category,
|
'marketplace/category/:category': Category,
|
||||||
'marketplace/item/:item': Item,
|
'marketplace/item/:item': Item,
|
||||||
'marketplace/seller/:seller': Seller,
|
'marketplace/seller/:seller': Seller,
|
||||||
|
'marketplace/seller/:seller/items': SellerItems,
|
||||||
'marketplace/not-found': NotFound,
|
'marketplace/not-found': NotFound,
|
||||||
}
|
}
|
||||||
const registered_routes = {
|
const registered_routes = {
|
||||||
'marketplace/profile': Profile,
|
'marketplace/profile': Seller,
|
||||||
'marketplace/saved-items': SavedItems,
|
'marketplace/saved-items': SavedItems,
|
||||||
|
'marketplace/featured-items': FeaturedItems,
|
||||||
'marketplace/publish': Publish,
|
'marketplace/publish': Publish,
|
||||||
'marketplace/published-items': PublishedItems,
|
'marketplace/published-items': PublishedItems,
|
||||||
'marketplace/buying': Buying,
|
'marketplace/buying': Buying,
|
||||||
|
@ -30,6 +30,11 @@ export default {
|
|||||||
route: 'marketplace/saved-items',
|
route: 'marketplace/saved-items',
|
||||||
condition: () => this.hub_registered
|
condition: () => this.hub_registered
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: __('Your Featured Items'),
|
||||||
|
route: 'marketplace/featured-items',
|
||||||
|
condition: () => this.hub_registered
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: __('Your Profile'),
|
label: __('Your Profile'),
|
||||||
route: 'marketplace/profile',
|
route: 'marketplace/profile',
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<p class="text-muted" v-html="header_item"></p>
|
<p class="text-muted" v-if="!Array.isArray(this.header_items)" v-html="header_items"></p>
|
||||||
|
<p class="text-muted" v-else>
|
||||||
|
<span v-for="(header_item , index) in header_items" :key="index">
|
||||||
|
<span v-if="index" v-html="spacer"></span>
|
||||||
|
<span v-if="typeof(header_item) == 'string'" v-html="header_item"></span>
|
||||||
|
<a v-else-if="typeof(header_item) == 'object'" @click="header_item.on_click(header_item.value)" v-html="header_item.value"></a>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -11,9 +18,8 @@ export default {
|
|||||||
props: ['value'],
|
props: ['value'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
header_item: Array.isArray(this.value)
|
header_items: this.value,
|
||||||
? this.value.join(spacer)
|
spacer: spacer
|
||||||
: this.value
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
:class="{ 'bordered': bordered, 'align-center': centered, 'justify-center': centered }"
|
:class="{ 'bordered': bordered, 'align-center': centered, 'justify-center': centered }"
|
||||||
:style="{ height: height + 'px' }"
|
:style="{ height: height + 'px' }"
|
||||||
>
|
>
|
||||||
<p class="text-muted">{{ message }}</p>
|
<p class="text-muted" v-html="message" ></p>
|
||||||
<p v-if="action">
|
<p v-if="action">
|
||||||
<button class="btn btn-default btn-xs"
|
<button class="btn btn-default btn-xs"
|
||||||
@click="action.on_click"
|
@click="action.on_click"
|
||||||
|
118
erpnext/public/js/hub/pages/FeaturedItems.vue
Normal file
118
erpnext/public/js/hub/pages/FeaturedItems.vue
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="marketplace-page"
|
||||||
|
:data-page-name="page_name"
|
||||||
|
>
|
||||||
|
<h5>{{ page_title }}</h5>
|
||||||
|
<p v-if="items.length"
|
||||||
|
class="text-muted margin-bottom">
|
||||||
|
{{ __('You can Feature upto 8 items.') }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<item-cards-container
|
||||||
|
:container_name="page_title"
|
||||||
|
:items="items"
|
||||||
|
:item_id_fieldname="item_id_fieldname"
|
||||||
|
:on_click="go_to_item_details_page"
|
||||||
|
:editable="true"
|
||||||
|
@remove-item="on_item_remove"
|
||||||
|
:empty_state_message="empty_state_message"
|
||||||
|
>
|
||||||
|
</item-cards-container>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'featured-items-page',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
page_name: frappe.get_route()[1],
|
||||||
|
items: [],
|
||||||
|
item_id_fieldname: 'name',
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
page_title: __('Your Featured Items'),
|
||||||
|
empty_state_message: __(`No featured items yet. Got to your
|
||||||
|
<a href="#marketplace/published-items">
|
||||||
|
Published Items</a>
|
||||||
|
and feature upto 8 items that you want to highlight to your customers.`)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.get_items();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
get_items() {
|
||||||
|
hub.call(
|
||||||
|
'get_featured_items_of_seller', {},
|
||||||
|
'action:item_feature'
|
||||||
|
)
|
||||||
|
.then((items) => {
|
||||||
|
this.items = items;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
go_to_item_details_page(hub_item_name) {
|
||||||
|
frappe.set_route(`marketplace/item/${hub_item_name}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
on_item_remove(hub_item_name) {
|
||||||
|
const grace_period = 5000;
|
||||||
|
let reverted = false;
|
||||||
|
let alert;
|
||||||
|
|
||||||
|
const undo_remove = () => {
|
||||||
|
this.toggle_item(hub_item_name);;
|
||||||
|
reverted = true;
|
||||||
|
alert.hide();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const item_name = this.items.filter(item => item.hub_item_name === hub_item_name);
|
||||||
|
|
||||||
|
alert = frappe.show_alert(__(`<span>${item_name} removed.
|
||||||
|
<a href="#" data-action="undo-remove"><b>Undo</b></a></span>`),
|
||||||
|
grace_period/1000,
|
||||||
|
{
|
||||||
|
'undo-remove': undo_remove.bind(this)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
this.toggle_item(hub_item_name, false);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if(!reverted) {
|
||||||
|
this.remove_item_from_featured_items(hub_item_name);
|
||||||
|
}
|
||||||
|
}, grace_period);
|
||||||
|
},
|
||||||
|
|
||||||
|
remove_item_from_featured_items(hub_item_name) {
|
||||||
|
erpnext.hub.trigger('action:item_feature');
|
||||||
|
hub.call('remove_item_from_seller_featured_items', {
|
||||||
|
hub_item_name,
|
||||||
|
hub_user: frappe.session.user
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.get_items();
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
console.log(e);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// By default show
|
||||||
|
toggle_item(hub_item_name, show=true) {
|
||||||
|
this.items = this.items.map(item => {
|
||||||
|
if(item.name === hub_item_name) {
|
||||||
|
item.seen = show;
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
@ -72,6 +72,11 @@ export default {
|
|||||||
condition: hub.is_user_registered() && !this.is_own_item,
|
condition: hub.is_user_registered() && !this.is_own_item,
|
||||||
action: this.add_to_saved_items
|
action: this.add_to_saved_items
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: __('Add to Featured Item'),
|
||||||
|
condition: hub.is_user_registered() && this.is_own_item,
|
||||||
|
action: this.add_to_featured_items
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: __('Report this Item'),
|
label: __('Report this Item'),
|
||||||
condition: !this.is_own_item,
|
condition: !this.is_own_item,
|
||||||
@ -103,7 +108,7 @@ export default {
|
|||||||
subtitle_items.push(rating + `<i class='fa fa-fw fa-star-o'></i>`)
|
subtitle_items.push(rating + `<i class='fa fa-fw fa-star-o'></i>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
subtitle_items.push(this.item.company);
|
subtitle_items.push({value:this.item.company,on_click:this.go_to_seller_profile_page});
|
||||||
|
|
||||||
return subtitle_items;
|
return subtitle_items;
|
||||||
},
|
},
|
||||||
@ -169,7 +174,9 @@ export default {
|
|||||||
this.make_dialogs();
|
this.make_dialogs();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
go_to_seller_profile_page(seller_name) {
|
||||||
|
frappe.set_route(`marketplace/seller/${seller_name}`);
|
||||||
|
},
|
||||||
build_data() {
|
build_data() {
|
||||||
this.title = this.item.item_name || this.item.name;
|
this.title = this.item.item_name || this.item.name;
|
||||||
this.image = this.item.image;
|
this.image = this.item.image;
|
||||||
@ -210,6 +217,21 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
add_to_featured_items() {
|
||||||
|
hub.call('add_item_to_seller_featured_items', {
|
||||||
|
hub_item_name: this.hub_item_name,
|
||||||
|
hub_user: frappe.session.user
|
||||||
|
},)
|
||||||
|
.then(() => {
|
||||||
|
const featured_items_link = `<b><a href="#marketplace/featured-items">${__('Added to Featured Items')}</a></b>`
|
||||||
|
frappe.show_alert(featured_items_link);
|
||||||
|
erpnext.hub.trigger('action:item_feature');
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
make_contact_seller_dialog() {
|
make_contact_seller_dialog() {
|
||||||
this.contact_seller_dialog = new frappe.ui.Dialog({
|
this.contact_seller_dialog = new frappe.ui.Dialog({
|
||||||
title: __('Send a message'),
|
title: __('Send a message'),
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div
|
|
||||||
class="marketplace-page"
|
|
||||||
:data-page-name="page_name"
|
|
||||||
v-if="init || profile"
|
|
||||||
>
|
|
||||||
|
|
||||||
<detail-view
|
|
||||||
:title="title"
|
|
||||||
:image="image"
|
|
||||||
:sections="sections"
|
|
||||||
:show_skeleton="init"
|
|
||||||
>
|
|
||||||
|
|
||||||
<detail-header-item slot="detail-header-item"
|
|
||||||
:value="country"
|
|
||||||
></detail-header-item>
|
|
||||||
<detail-header-item slot="detail-header-item"
|
|
||||||
:value="site_name"
|
|
||||||
></detail-header-item>
|
|
||||||
<detail-header-item slot="detail-header-item"
|
|
||||||
:value="joined_when"
|
|
||||||
></detail-header-item>
|
|
||||||
|
|
||||||
</detail-view>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'profile-page',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
page_name: frappe.get_route()[1],
|
|
||||||
|
|
||||||
init: true,
|
|
||||||
|
|
||||||
profile: null,
|
|
||||||
title: null,
|
|
||||||
image: null,
|
|
||||||
sections: [],
|
|
||||||
|
|
||||||
country: '',
|
|
||||||
site_name: '',
|
|
||||||
joined_when: '',
|
|
||||||
};
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.get_profile();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
get_profile() {
|
|
||||||
hub.call(
|
|
||||||
'get_hub_seller_profile',
|
|
||||||
{ hub_seller: hub.settings.hub_seller_name }
|
|
||||||
).then(profile => {
|
|
||||||
this.init = false;
|
|
||||||
|
|
||||||
this.profile = profile;
|
|
||||||
this.title = profile.company;
|
|
||||||
|
|
||||||
this.country = __(profile.country);
|
|
||||||
this.site_name = __(profile.site_name);
|
|
||||||
this.joined_when = __(`Joined ${comment_when(profile.creation)}`);
|
|
||||||
|
|
||||||
this.image = profile.logo;
|
|
||||||
this.sections = [
|
|
||||||
{
|
|
||||||
title: __('About the Company'),
|
|
||||||
content: profile.company_description
|
|
||||||
? __(profile.company_description)
|
|
||||||
: __('No description')
|
|
||||||
}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped></style>
|
|
@ -22,7 +22,13 @@
|
|||||||
|
|
||||||
</detail-view>
|
</detail-view>
|
||||||
|
|
||||||
<h5 v-if="profile">{{ item_container_heading }}</h5>
|
<div v-if="items.length">
|
||||||
|
<h5>
|
||||||
|
{{ item_container_heading }}
|
||||||
|
<small v-if="is_user_registered() && is_own_company">
|
||||||
|
<a class="pull-right" href="#marketplace/featured-items">Customize your Featured Items</a>
|
||||||
|
</small>
|
||||||
|
</h5>
|
||||||
<item-cards-container
|
<item-cards-container
|
||||||
:container_name="item_container_heading"
|
:container_name="item_container_heading"
|
||||||
:items="items"
|
:items="items"
|
||||||
@ -30,22 +36,63 @@
|
|||||||
:on_click="go_to_item_details_page"
|
:on_click="go_to_item_details_page"
|
||||||
>
|
>
|
||||||
</item-cards-container>
|
</item-cards-container>
|
||||||
|
<a class="pull-right" @click="go_to_seller_items_page(seller_company)">Show all items</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="recent_seller_reviews.length">
|
||||||
|
<h5>Customer Reviews</h5>
|
||||||
|
<div class="container" v-for="review in recent_seller_reviews" :key="review.name">
|
||||||
|
<br>
|
||||||
|
<span class="text-muted">
|
||||||
|
<rating :rating="review.rating" :max_rating="5"></rating>
|
||||||
|
</span>
|
||||||
|
<i class="octicon octicon-quote hidden-xs fa-fw"></i>
|
||||||
|
<span class="bold">{{ review.subject }}</span>
|
||||||
|
<i class="octicon octicon-quote hidden-xs fa-fw fa-rotate-180"></i>
|
||||||
|
<div class="container">
|
||||||
|
by {{ review.username }}
|
||||||
|
<a class="text-muted">
|
||||||
|
<span class="text-muted hidden-xs">–</span>
|
||||||
|
<span class="hidden-xs" v-html="comment_when(review.timestamp)"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="seller_product_view_stats.length">
|
||||||
|
<h5>Stats</h5>
|
||||||
|
<div id="seller_traffic_chart"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Rating from '../components/Rating.vue';
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'seller-page',
|
name: 'seller-page',
|
||||||
|
components: {
|
||||||
|
Rating
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
page_name: frappe.get_route()[1],
|
page_name: frappe.get_route()[1],
|
||||||
seller_company: frappe.get_route()[2],
|
seller_company: frappe.get_route()[2],
|
||||||
|
hub_seller: null,
|
||||||
|
|
||||||
init: true,
|
init: true,
|
||||||
|
|
||||||
profile: null,
|
profile: null,
|
||||||
items:[],
|
items:[],
|
||||||
|
recent_seller_reviews: [],
|
||||||
|
seller_product_view_stats: [],
|
||||||
|
seller_traffic_chart: null,
|
||||||
item_id_fieldname: 'name',
|
item_id_fieldname: 'name',
|
||||||
|
item_container_heading: 'Items',
|
||||||
|
|
||||||
title: null,
|
title: null,
|
||||||
image: null,
|
image: null,
|
||||||
@ -60,19 +107,39 @@ export default {
|
|||||||
this.get_seller_profile_and_items();
|
this.get_seller_profile_and_items();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
item_container_heading() {
|
is_own_company() {
|
||||||
return __('Items by ' + this.seller_company);
|
let is_own_company = false;
|
||||||
|
if(this.hub_seller) {
|
||||||
|
if(this.hub_seller === hub.settings.hub_seller_name) {
|
||||||
|
is_own_company = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return is_own_company;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
comment_when(timestamp){
|
||||||
|
return comment_when(timestamp)
|
||||||
|
},
|
||||||
|
is_user_registered(){
|
||||||
|
return hub.is_user_registered()
|
||||||
|
},
|
||||||
get_seller_profile_and_items() {
|
get_seller_profile_and_items() {
|
||||||
hub.call(
|
let post_data = {company: this.seller_company}
|
||||||
'get_hub_seller_page_info',
|
if (this.page_name == 'profile'){
|
||||||
{ company: this.seller_company }
|
this.seller_company = null;
|
||||||
).then(data => {
|
this.hub_seller = hub.settings.hub_seller_name
|
||||||
|
post_data = {hub_seller: this.hub_seller}
|
||||||
|
}
|
||||||
|
hub.call('get_hub_seller_page_info', post_data)
|
||||||
|
.then(data => {
|
||||||
this.init = false;
|
this.init = false;
|
||||||
this.profile = data.profile;
|
this.profile = data.profile;
|
||||||
this.items = data.items;
|
this.items = data.items;
|
||||||
|
this.item_container_heading = data.is_featured_item? "Features Items":"Popular Items";
|
||||||
|
this.hub_seller = this.items[0].hub_seller;
|
||||||
|
this.recent_seller_reviews = data.recent_seller_reviews;
|
||||||
|
this.seller_product_view_stats = data.seller_product_view_stats;
|
||||||
|
|
||||||
const profile = this.profile;
|
const profile = this.profile;
|
||||||
|
|
||||||
@ -91,11 +158,41 @@ export default {
|
|||||||
: __('No description')
|
: __('No description')
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
setTimeout(() => this.init_seller_traffic_chart(), 1);
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
go_to_item_details_page(hub_item_name) {
|
go_to_item_details_page(hub_item_name) {
|
||||||
frappe.set_route(`marketplace/item/${hub_item_name}`);
|
frappe.set_route(`marketplace/item/${hub_item_name}`);
|
||||||
|
},
|
||||||
|
go_to_seller_items_page(hub_seller) {
|
||||||
|
frappe.set_route(`marketplace/seller/${hub_seller}/items`);
|
||||||
|
},
|
||||||
|
init_seller_traffic_chart() {
|
||||||
|
let lables = []
|
||||||
|
let tooltip_lables = {}
|
||||||
|
let datasets = [{name:"Product Views",chartType: 'line',values: []}]
|
||||||
|
this.seller_product_view_stats.map((stat) => {
|
||||||
|
lables.push(stat.date.substring(5));
|
||||||
|
tooltip_lables[stat.date.substring(5)] = new Date(stat.date).toDateString();
|
||||||
|
datasets[0].values.push(stat.view_count);
|
||||||
|
});
|
||||||
|
let data = {labels: lables, datasets:datasets, tooltip_lables:tooltip_lables}
|
||||||
|
this.seller_traffic_chart = new Chart( "#seller_traffic_chart", { // or DOM element
|
||||||
|
data: data,
|
||||||
|
|
||||||
|
title: "Daily Product Views",
|
||||||
|
type: 'axis-mixed', // or 'bar', 'line', 'pie', 'percentage'
|
||||||
|
height: 300,
|
||||||
|
colors: ['purple', '#ffa3ef', 'light-blue'],
|
||||||
|
|
||||||
|
tooltipOptions: {
|
||||||
|
formatTooltipX: d => this.seller_traffic_chart.data.tooltip_lables[d],
|
||||||
|
formatTooltipY: d => d + ' Views',
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
57
erpnext/public/js/hub/pages/SellerItems.vue
Normal file
57
erpnext/public/js/hub/pages/SellerItems.vue
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="marketplace-page"
|
||||||
|
:data-page-name="page_name"
|
||||||
|
v-if="init || items.length"
|
||||||
|
>
|
||||||
|
<h5>{{ item_container_heading }}</h5>
|
||||||
|
<item-cards-container
|
||||||
|
:container_name="item_container_heading"
|
||||||
|
:items="items"
|
||||||
|
:item_id_fieldname="item_id_fieldname"
|
||||||
|
:on_click="go_to_item_details_page"
|
||||||
|
>
|
||||||
|
</item-cards-container>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'seller-items-page',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
page_name: frappe.get_route()[1],
|
||||||
|
seller_company: frappe.get_route()[2],
|
||||||
|
|
||||||
|
init: true,
|
||||||
|
items:[],
|
||||||
|
item_id_fieldname: 'name',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.get_seller_and_items();
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
item_container_heading() {
|
||||||
|
return __('Items by ' + this.seller_company);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
get_seller_and_items() {
|
||||||
|
hub.call(
|
||||||
|
'get_items',
|
||||||
|
{ company: this.seller_company }
|
||||||
|
).then(data => {
|
||||||
|
this.init = false;
|
||||||
|
this.items = data;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
go_to_item_details_page(hub_item_name) {
|
||||||
|
frappe.set_route(`marketplace/item/${hub_item_name}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
79
erpnext/regional/italy/__init__.py
Normal file
79
erpnext/regional/italy/__init__.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# coding=utf-8
|
||||||
|
|
||||||
|
fiscal_regimes = [
|
||||||
|
"RF01-Ordinario",
|
||||||
|
"RF02-Contribuenti minimi (art.1, c.96-117, L. 244/07)",
|
||||||
|
"RF04-Agricoltura e attività connesse e pesca (artt.34 e 34-bis, DPR 633/72)",
|
||||||
|
"RF05-Vendita sali e tabacchi (art.74, c.1, DPR. 633/72)",
|
||||||
|
"RF06-Commercio fiammiferi (art.74, c.1, DPR 633/72)",
|
||||||
|
"RF07-Editoria (art.74, c.1, DPR 633/72)",
|
||||||
|
"RF08-Gestione servizi telefonia pubblica (art.74, c.1, DPR 633/72)",
|
||||||
|
"RF09-Rivendita documenti di trasporto pubblico e di sosta (art.74, c.1, DPR 633/72)",
|
||||||
|
"RF10-Intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72 (art.74, c.6, DPR 633/72)",
|
||||||
|
"RF11-Agenzie viaggi e turismo (art.74-ter, DPR 633/72)",
|
||||||
|
"RF12-Agriturismo (art.5, c.2, L. 413/91)",
|
||||||
|
"RF13-Vendite a domicilio (art.25-bis, c.6, DPR 600/73)",
|
||||||
|
"RF14-Rivendita beni usati, oggetti d’arte, d’antiquariato o da collezione (art.36, DL 41/95)",
|
||||||
|
"RF15-Agenzie di vendite all’asta di oggetti d’arte, antiquariato o da collezione (art.40-bis, DL 41/95)",
|
||||||
|
"RF16-IVA per cassa P.A. (art.6, c.5, DPR 633/72)",
|
||||||
|
"RF17-IVA per cassa (art. 32-bis, DL 83/2012)",
|
||||||
|
"RF18-Altro",
|
||||||
|
"RF19-Regime forfettario (art.1, c.54-89, L. 190/2014)"
|
||||||
|
]
|
||||||
|
|
||||||
|
tax_exemption_reasons = [
|
||||||
|
"N1-Escluse ex art. 15",
|
||||||
|
"N2-Non Soggette",
|
||||||
|
"N3-Non Imponibili",
|
||||||
|
"N4-Esenti",
|
||||||
|
"N5-Regime del margine / IVA non esposta in fattura",
|
||||||
|
"N6-Inversione Contabile",
|
||||||
|
"N7-IVA assolta in altro stato UE"
|
||||||
|
]
|
||||||
|
|
||||||
|
mode_of_payment_codes = [
|
||||||
|
"MP01-Contanti",
|
||||||
|
"MP02-Assegno",
|
||||||
|
"MP03-Assegno circolare",
|
||||||
|
"MP04-Contanti presso Tesoreria",
|
||||||
|
"MP05-Bonifico",
|
||||||
|
"MP06-Vaglia cambiario",
|
||||||
|
"MP07-Bollettino bancario",
|
||||||
|
"MP08-Carta di pagamento",
|
||||||
|
"MP09-RID",
|
||||||
|
"MP10-RID utenze",
|
||||||
|
"MP11-RID veloce",
|
||||||
|
"MP12-RIBA",
|
||||||
|
"MP13-MAV",
|
||||||
|
"MP14-Quietanza erario",
|
||||||
|
"MP15-Giroconto su conti di contabilità speciale",
|
||||||
|
"MP16-Domiciliazione bancaria",
|
||||||
|
"MP17-Domiciliazione postale",
|
||||||
|
"MP18-Bollettino di c/c postale",
|
||||||
|
"MP19-SEPA Direct Debit",
|
||||||
|
"MP20-SEPA Direct Debit CORE",
|
||||||
|
"MP21-SEPA Direct Debit B2B",
|
||||||
|
"MP22-Trattenuta su somme già riscosse"
|
||||||
|
]
|
||||||
|
|
||||||
|
vat_collectability_options = [
|
||||||
|
"I-Immediata",
|
||||||
|
"D-Differita",
|
||||||
|
"S-Scissione dei Pagamenti"
|
||||||
|
]
|
||||||
|
|
||||||
|
state_codes = {'Siracusa': 'SR', 'Bologna': 'BO', 'Grosseto': 'GR', 'Caserta': 'CE', 'Alessandria': 'AL', 'Ancona': 'AN', 'Pavia': 'PV',
|
||||||
|
'Benevento or Beneventum': 'BN', 'Modena': 'MO', 'Lodi': 'LO', 'Novara': 'NO', 'Avellino': 'AV', 'Verona': 'VR', 'Forli-Cesena': 'FC',
|
||||||
|
'Caltanissetta': 'CL', 'Brescia': 'BS', 'Rieti': 'RI', 'Treviso': 'TV', 'Ogliastra': 'OG', 'Olbia-Tempio': 'OT', 'Bergamo': 'BG',
|
||||||
|
'Napoli': 'NA', 'Campobasso': 'CB', 'Fermo': 'FM', 'Roma': 'RM', 'Lucca': 'LU', 'Rovigo': 'RO', 'Piacenza': 'PC', 'Monza and Brianza': 'MB',
|
||||||
|
'La Spezia': 'SP', 'Pescara': 'PE', 'Vercelli': 'VC', 'Enna': 'EN', 'Nuoro': 'NU', 'Medio Campidano': 'MD', 'Trieste': 'TS', 'Aosta': 'AO',
|
||||||
|
'Firenze': 'FI', 'Trapani': 'TP', 'Messina': 'ME', 'Teramo': 'TE', 'Udine': 'UD', 'Verbano-Cusio-Ossola': 'VB', 'Padua': 'PD',
|
||||||
|
'Reggio Emilia': 'RE', 'Frosinone': 'FR', 'Taranto': 'TA', 'Catanzaro': 'CZ', 'Belluno': 'BL', 'Pordenone': 'PN', 'Viterbo': 'VT',
|
||||||
|
'Gorizia': 'GO', 'Vatican City': 'SCV', 'Ferrara': 'FE', 'Chieti': 'CH', 'Crotone': 'KR', 'Foggia': 'FG', 'Perugia': 'PG', 'Bari': 'BA',
|
||||||
|
'Massa-Carrara': 'MS', 'Pisa': 'PI', 'Latina': 'LT', 'Salerno': 'SA', 'Turin': 'TO', 'Lecco': 'LC', 'Lecce': 'LE', 'Pistoia': 'PT', 'Como': 'CO',
|
||||||
|
'Barletta-Andria-Trani': 'BT', 'Mantua': 'MN', 'Ragusa': 'RG', 'Macerata': 'MC', 'Imperia': 'IM', 'Palermo': 'PA', 'Matera': 'MT', "L'Aquila": 'AQ',
|
||||||
|
'Milano': 'MI', 'Catania': 'CT', 'Pesaro e Urbino': 'PU', 'Potenza': 'PZ', 'Republic of San Marino': 'RSM', 'Genoa': 'GE', 'Brindisi': 'BR',
|
||||||
|
'Cagliari': 'CA', 'Siena': 'SI', 'Vibo Valentia': 'VV', 'Reggio Calabria': 'RC', 'Ascoli Piceno': 'AP', 'Carbonia-Iglesias': 'CI', 'Oristano': 'OR',
|
||||||
|
'Asti': 'AT', 'Ravenna': 'RA', 'Vicenza': 'VI', 'Savona': 'SV', 'Biella': 'BI', 'Rimini': 'RN', 'Agrigento': 'AG', 'Prato': 'PO', 'Cuneo': 'CN',
|
||||||
|
'Cosenza': 'CS', 'Livorno or Leghorn': 'LI', 'Sondrio': 'SO', 'Cremona': 'CR', 'Isernia': 'IS', 'Trento': 'TN', 'Terni': 'TR', 'Bolzano/Bozen': 'BZ',
|
||||||
|
'Parma': 'PR', 'Varese': 'VA', 'Venezia': 'VE', 'Sassari': 'SS', 'Arezzo': 'AR'}
|
208
erpnext/regional/italy/e-invoice.xml
Normal file
208
erpnext/regional/italy/e-invoice.xml
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
{%- macro format_float(value) -%}
|
||||||
|
{{ "%.2f" % value|abs }}
|
||||||
|
{%- endmacro -%}
|
||||||
|
|
||||||
|
{%- macro render_address(address) %}
|
||||||
|
<Indirizzo>{{ address.address_line1 }}</Indirizzo>
|
||||||
|
<CAP>{{ address.pincode }}</CAP>
|
||||||
|
<Comune>{{ address.city }}</Comune>
|
||||||
|
{%- if address.state_code %}
|
||||||
|
<Provincia>{{ address.state_code }}</Provincia>
|
||||||
|
{%- endif %}
|
||||||
|
<Nazione>{{ address.country_code|upper }}</Nazione>
|
||||||
|
{%- endmacro %}
|
||||||
|
|
||||||
|
{%- macro render_discount_or_margin(item) -%}
|
||||||
|
{%- if item.discount_percentage > 0.0 or item.margin_type %}
|
||||||
|
<ScontoMaggiorazione>
|
||||||
|
{%- if item.discount_percentage > 0.0 %}
|
||||||
|
<Tipo>SC</Tipo>
|
||||||
|
<Percentuale>{{ format_float(item.discount_percentage) }}</Percentuale>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if item.margin_rate_or_amount > 0.0 -%}
|
||||||
|
<Tipo>MG</Tipo>
|
||||||
|
{%- if item.margin_type == "Percentage" -%}
|
||||||
|
<Percentuale>{{ format_float(item.margin_rate_or_amount) }}</Percentuale>
|
||||||
|
{%- elif item.margin_type == "Amount" -%}
|
||||||
|
<Importo>{{ format_float(item.margin_rate_or_amount) }}</Importo>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endif %}
|
||||||
|
</ScontoMaggiorazione>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endmacro -%}
|
||||||
|
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
||||||
|
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
versione="{{ doc.transmission_format_code }}"
|
||||||
|
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
|
||||||
|
<FatturaElettronicaHeader>
|
||||||
|
<DatiTrasmissione>
|
||||||
|
<IdTrasmittente>
|
||||||
|
<IdPaese>{{ doc.company_address_data.country_code|upper or "IT" }}</IdPaese>
|
||||||
|
<IdCodice>{{ doc.company_fiscal_code or doc.company_tax_id | replace("IT","") }}</IdCodice>
|
||||||
|
</IdTrasmittente>
|
||||||
|
<ProgressivoInvio>{{ doc.progressive_number }}</ProgressivoInvio>
|
||||||
|
<FormatoTrasmissione>{{ doc.transmission_format_code }}</FormatoTrasmissione>
|
||||||
|
<CodiceDestinatario>{{ doc.customer_data.recipient_code }}</CodiceDestinatario>
|
||||||
|
{% if doc.company_data.phone or doc.company_data.email -%}
|
||||||
|
<ContattiTrasmittente>
|
||||||
|
{% if doc.company_data.phone -%}<Telefono>{{ doc.company_data.phone }}</Telefono>{%- endif %}
|
||||||
|
{% if doc.company_data.email -%}<Email>{{ doc.company_data.email }}</Email>{%- endif %}
|
||||||
|
</ContattiTrasmittente>
|
||||||
|
{% endif -%}
|
||||||
|
</DatiTrasmissione>
|
||||||
|
<CedentePrestatore>
|
||||||
|
<DatiAnagrafici>
|
||||||
|
<IdFiscaleIVA>
|
||||||
|
<IdPaese>{{ doc.company_address_data.country_code|upper or "IT"}}</IdPaese>
|
||||||
|
<IdCodice>{{ doc.company_tax_id | replace("IT","") }}</IdCodice>
|
||||||
|
</IdFiscaleIVA>
|
||||||
|
{%- if doc.company_fiscal_code %}
|
||||||
|
<CodiceFiscale>{{ doc.company_fiscal_code }}</CodiceFiscale>
|
||||||
|
{%- endif %}
|
||||||
|
<Anagrafica>
|
||||||
|
<Denominazione>{{ doc.company }}</Denominazione>
|
||||||
|
</Anagrafica>
|
||||||
|
<RegimeFiscale>{{ doc.company_fiscal_regime.split("-")[0] }}</RegimeFiscale>
|
||||||
|
</DatiAnagrafici>
|
||||||
|
<Sede>
|
||||||
|
{{ render_address(doc.company_address_data) }}
|
||||||
|
</Sede>
|
||||||
|
{%- if doc.company_data.registration_number %}
|
||||||
|
<IscrizioneREA>
|
||||||
|
<Ufficio>{{ doc.company_data.registrar_office_province }}</Ufficio>
|
||||||
|
<NumeroREA>{{ doc.company_data.registration_number }}</NumeroREA>
|
||||||
|
{%- if doc.company_data.share_capital_amount %}
|
||||||
|
<CapitaleSociale>{{ format_float(doc.company_data.share_capital_amount) }}</CapitaleSociale>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if doc.company_data.no_of_members %}
|
||||||
|
<SocioUnico>{{ doc.company_data.no_of_members.split("-")[0] }}</SocioUnico>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if doc.company_data.liquidation_state %}
|
||||||
|
<StatoLiquidazione>{{ doc.company_data.liquidation_state.split("-")[0] }}</StatoLiquidazione>
|
||||||
|
{%- endif %}
|
||||||
|
</IscrizioneREA>
|
||||||
|
{%- endif %}
|
||||||
|
</CedentePrestatore>
|
||||||
|
<CessionarioCommittente>
|
||||||
|
<DatiAnagrafici>
|
||||||
|
{%- if doc.customer_data.customer_type == "Individual" %}
|
||||||
|
<CodiceFiscale>{{ doc.customer_data.fiscal_code }}</CodiceFiscale>
|
||||||
|
<Anagrafica>
|
||||||
|
<Nome>{{ doc.customer_data.first_name }}</Nome>
|
||||||
|
<Cognome>{{ doc.customer_data.last_name }}</Cognome>
|
||||||
|
</Anagrafica>
|
||||||
|
{%- else %}
|
||||||
|
{%- if doc.customer_data.is_public_administration %}
|
||||||
|
<CodiceFiscale>{{ doc.customer_data.fiscal_code }}</CodiceFiscale>
|
||||||
|
{%- else %}
|
||||||
|
<IdFiscaleIVA>
|
||||||
|
<IdPaese>{{ doc.customer_address_data.country_code|upper or "IT" }}</IdPaese>
|
||||||
|
<IdCodice>{{ doc.tax_id | replace("IT","") }}</IdCodice>
|
||||||
|
</IdFiscaleIVA>
|
||||||
|
{%- endif %}
|
||||||
|
<Anagrafica>
|
||||||
|
<Denominazione>{{ doc.customer_name }}</Denominazione>
|
||||||
|
</Anagrafica>
|
||||||
|
{%- endif %}
|
||||||
|
</DatiAnagrafici>
|
||||||
|
{%- if doc.customer_address_data %}
|
||||||
|
<Sede>
|
||||||
|
{{ render_address(doc.customer_address_data) }}
|
||||||
|
</Sede>
|
||||||
|
{%- endif %}
|
||||||
|
</CessionarioCommittente>
|
||||||
|
</FatturaElettronicaHeader>
|
||||||
|
<FatturaElettronicaBody>
|
||||||
|
<DatiGenerali>
|
||||||
|
<DatiGeneraliDocumento>
|
||||||
|
<TipoDocumento>{{ doc.type_of_document }}</TipoDocumento>
|
||||||
|
<Divisa>EUR</Divisa>
|
||||||
|
<Data>{{ doc.posting_date }}</Data>
|
||||||
|
<Numero>{{ doc.unamended_name }}</Numero>
|
||||||
|
{%- if doc.stamp_duty %}
|
||||||
|
<DatiBollo>
|
||||||
|
<BolloVirtuale>SI</BolloVirtuale>
|
||||||
|
<ImportoBollo>{{ format_float(doc.stamp_duty) }}</ImportoBollo>
|
||||||
|
</DatiBollo>
|
||||||
|
{%- endif %}
|
||||||
|
<ImportoTotaleDocumento>{{ format_float(doc.grand_total) }}</ImportoTotaleDocumento>
|
||||||
|
<Causale>VENDITA</Causale>
|
||||||
|
</DatiGeneraliDocumento>
|
||||||
|
{%- if doc.po_no %}
|
||||||
|
<DatiOrdineAcquisto>
|
||||||
|
<IdDocumento>{{ doc.po_no }}</IdDocumento>
|
||||||
|
{%- if doc.po_date %}
|
||||||
|
<Data>{{ doc.po_date }}</Data>
|
||||||
|
{%- endif %}
|
||||||
|
</DatiOrdineAcquisto>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if doc.is_return and doc.return_against_unamended %}
|
||||||
|
<DatiFattureCollegate>
|
||||||
|
<IdDocumento>{{ doc.return_against_unamended }}</IdDocumento>
|
||||||
|
</DatiFattureCollegate>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if doc.shipping_address_data %}
|
||||||
|
<DatiTrasporto>
|
||||||
|
<IndirizzoResa>
|
||||||
|
{{ render_address(doc.shipping_address_data) }}
|
||||||
|
</IndirizzoResa>
|
||||||
|
</DatiTrasporto>
|
||||||
|
{%- endif %}
|
||||||
|
</DatiGenerali>
|
||||||
|
<DatiBeniServizi>
|
||||||
|
{%- for item in doc.e_invoice_items %}
|
||||||
|
<DettaglioLinee>
|
||||||
|
<NumeroLinea>{{ item.idx }}</NumeroLinea>
|
||||||
|
<CodiceArticolo>
|
||||||
|
<CodiceTipo>CODICE</CodiceTipo>
|
||||||
|
<CodiceValore>{{ item.item_code }}</CodiceValore>
|
||||||
|
</CodiceArticolo>
|
||||||
|
<Descrizione>{{ item.description or item.item_name }}</Descrizione>
|
||||||
|
<Quantita>{{ format_float(item.qty) }}</Quantita>
|
||||||
|
<UnitaMisura>{{ item.stock_uom }}</UnitaMisura>
|
||||||
|
<PrezzoUnitario>{{ format_float(item.price_list_rate or item.rate) }}</PrezzoUnitario>
|
||||||
|
{{ render_discount_or_margin(item) }}
|
||||||
|
<PrezzoTotale>{{ format_float(item.amount) }}</PrezzoTotale>
|
||||||
|
<AliquotaIVA>{{ format_float(item.tax_rate) }}</AliquotaIVA>
|
||||||
|
{%- if item.tax_exemption_reason %}
|
||||||
|
<Natura>{{ item.tax_exemption_reason.split("-")[0] }}</Natura>
|
||||||
|
{%- endif %}
|
||||||
|
</DettaglioLinee>
|
||||||
|
{%- endfor %}
|
||||||
|
{%- for tax, data in doc.tax_data.items() %}
|
||||||
|
<DatiRiepilogo>
|
||||||
|
<AliquotaIVA>{{ format_float(tax|flt) }}</AliquotaIVA>
|
||||||
|
{%- if data.tax_exemption_reason %}
|
||||||
|
<Natura>{{ data.tax_exemption_reason.split("-")[0] }}</Natura>
|
||||||
|
{%- endif %}
|
||||||
|
<ImponibileImporto>{{ format_float(data.taxable_amount) }}</ImponibileImporto>
|
||||||
|
<Imposta>{{ format_float(data.tax_amount) }}</Imposta>
|
||||||
|
<EsigibilitaIVA>{{ doc.vat_collectability.split("-")[0] }}</EsigibilitaIVA>
|
||||||
|
{%- if data.tax_exemption_law %}
|
||||||
|
<RiferimentoNormativo>{{ data.tax_exemption_law }}</RiferimentoNormativo>
|
||||||
|
{%- endif %}
|
||||||
|
</DatiRiepilogo>
|
||||||
|
{%- endfor %}
|
||||||
|
</DatiBeniServizi>
|
||||||
|
{%- if doc.payment_schedule %}
|
||||||
|
<DatiPagamento>
|
||||||
|
{%- if payment_schedule|length > 1 %}
|
||||||
|
<CondizioniPagamento>TP01</CondizioniPagamento>
|
||||||
|
{%- else %}
|
||||||
|
<CondizioniPagamento>TP02</CondizioniPagamento>
|
||||||
|
{%- endif %}
|
||||||
|
{%- for payment_term in doc.payment_schedule %}
|
||||||
|
<DettaglioPagamento>
|
||||||
|
<ModalitaPagamento>{{ payment_term.mode_of_payment_code.split("-")[0] }}</ModalitaPagamento>
|
||||||
|
<DataScadenzaPagamento>{{ payment_term.due_date }}</DataScadenzaPagamento>
|
||||||
|
<ImportoPagamento>{{ format_float(payment_term.payment_amount) }}</ImportoPagamento>
|
||||||
|
{%- if payment_term.bank_account_iban %}<IBAN>{{ payment_term.bank_account_iban }}</IBAN>{%- endif %}
|
||||||
|
</DettaglioPagamento>
|
||||||
|
{%- endfor %}
|
||||||
|
</DatiPagamento>
|
||||||
|
{%- endif %}
|
||||||
|
</FatturaElettronicaBody>
|
||||||
|
</p:FatturaElettronica>
|
158
erpnext/regional/italy/setup.py
Normal file
158
erpnext/regional/italy/setup.py
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
# coding=utf-8
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
from frappe import _
|
||||||
|
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
|
||||||
|
|
||||||
|
def setup(company=None, patch=True):
|
||||||
|
make_custom_fields()
|
||||||
|
setup_report()
|
||||||
|
|
||||||
|
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")
|
||||||
|
]
|
||||||
|
|
||||||
|
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: x.decode('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: x.decode('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: x.decode('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: x.decode('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: x.decode('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 Account Name',
|
||||||
|
fieldtype='Data', insert_after='bank_account', print_hide=1,
|
||||||
|
fetch_from="bank_account.account_name", 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),
|
||||||
|
],
|
||||||
|
"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: x.decode('utf-8'), vat_collectability_options)),
|
||||||
|
fetch_from="company.vat_collectability"),
|
||||||
|
dict(fieldname='sb_e_invoicing_reference', label='E-Invoicing',
|
||||||
|
fieldtype='Section Break', insert_after='pos_total_qty', print_hide=1),
|
||||||
|
dict(fieldname='company_tax_id', label='Company Tax ID',
|
||||||
|
fieldtype='Data', insert_after='sb_e_invoicing_reference', print_hide=1, read_only=1,
|
||||||
|
fetch_from="company.tax_id"),
|
||||||
|
dict(fieldname='company_fiscal_code', label='Company Fiscal Code',
|
||||||
|
fieldtype='Data', insert_after='company_tax_id', 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"),
|
||||||
|
],
|
||||||
|
'Purchase Invoice Item': invoice_item_fields,
|
||||||
|
'Sales Order Item': invoice_item_fields,
|
||||||
|
'Delivery Note Item': invoice_item_fields,
|
||||||
|
'Sales Invoice Item': invoice_item_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=1,
|
||||||
|
fetch_from="country.code"),
|
||||||
|
dict(fieldname='state_code', label='State Code',
|
||||||
|
fieldtype='Data', insert_after='state', print_hide=1)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
create_custom_fields(custom_fields, ignore_validate = frappe.flags.in_patch, update=update)
|
||||||
|
|
||||||
|
def setup_report():
|
||||||
|
report_name = 'Electronic Invoice Register'
|
||||||
|
|
||||||
|
frappe.db.sql(""" update `tabReport` set disabled = 0 where
|
||||||
|
name = %s """, report_name)
|
||||||
|
|
||||||
|
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()
|
293
erpnext/regional/italy/utils.py
Normal file
293
erpnext/regional/italy/utils.py
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe, json, os
|
||||||
|
from frappe.utils import flt, cstr
|
||||||
|
from erpnext.controllers.taxes_and_totals import get_itemised_tax
|
||||||
|
from frappe import _
|
||||||
|
from frappe.utils.file_manager import save_file, remove_file
|
||||||
|
from frappe.desk.form.load import get_attachments
|
||||||
|
from erpnext.regional.italy import state_codes
|
||||||
|
|
||||||
|
|
||||||
|
def update_itemised_tax_data(doc):
|
||||||
|
if not doc.taxes: return
|
||||||
|
|
||||||
|
itemised_tax = get_itemised_tax(doc.taxes)
|
||||||
|
|
||||||
|
for row in doc.items:
|
||||||
|
tax_rate = 0.0
|
||||||
|
if itemised_tax.get(row.item_code):
|
||||||
|
tax_rate = sum([tax.get('tax_rate', 0) for d, tax in itemised_tax.get(row.item_code).items()])
|
||||||
|
|
||||||
|
row.tax_rate = flt(tax_rate, row.precision("tax_rate"))
|
||||||
|
row.tax_amount = flt((row.net_amount * tax_rate) / 100, row.precision("net_amount"))
|
||||||
|
row.total_amount = flt((row.net_amount + row.tax_amount), row.precision("total_amount"))
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def export_invoices(filters=None):
|
||||||
|
saved_xmls = []
|
||||||
|
|
||||||
|
invoices = frappe.get_all("Sales Invoice", filters=get_conditions(filters), fields=["*"])
|
||||||
|
|
||||||
|
for invoice in invoices:
|
||||||
|
attachments = get_e_invoice_attachments(invoice)
|
||||||
|
saved_xmls += [attachment.file_name for attachment in attachments]
|
||||||
|
|
||||||
|
zip_filename = "{0}-einvoices.zip".format(frappe.utils.get_datetime().strftime("%Y%m%d_%H%M%S"))
|
||||||
|
|
||||||
|
download_zip(saved_xmls, zip_filename)
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def prepare_invoice(invoice, progressive_number):
|
||||||
|
#set company information
|
||||||
|
company = frappe.get_doc("Company", invoice.company)
|
||||||
|
|
||||||
|
invoice.progressive_number = progressive_number
|
||||||
|
invoice.unamended_name = get_unamended_name(invoice)
|
||||||
|
invoice.company_data = company
|
||||||
|
company_address = frappe.get_doc("Address", invoice.company_address)
|
||||||
|
invoice.company_address_data = company_address
|
||||||
|
|
||||||
|
#Set invoice type
|
||||||
|
if invoice.is_return and invoice.return_against:
|
||||||
|
invoice.type_of_document = "TD04" #Credit Note (Nota di Credito)
|
||||||
|
invoice.return_against_unamended = get_unamended_name(frappe.get_doc("Sales Invoice", invoice.return_against))
|
||||||
|
else:
|
||||||
|
invoice.type_of_document = "TD01" #Sales Invoice (Fattura)
|
||||||
|
|
||||||
|
#set customer information
|
||||||
|
invoice.customer_data = frappe.get_doc("Customer", invoice.customer)
|
||||||
|
customer_address = frappe.get_doc("Address", invoice.customer_address)
|
||||||
|
invoice.customer_address_data = customer_address
|
||||||
|
|
||||||
|
if invoice.shipping_address_name:
|
||||||
|
invoice.shipping_address_data = frappe.get_doc("Address", invoice.shipping_address_name)
|
||||||
|
|
||||||
|
if invoice.customer_data.is_public_administration:
|
||||||
|
invoice.transmission_format_code = "FPA12"
|
||||||
|
else:
|
||||||
|
invoice.transmission_format_code = "FPR12"
|
||||||
|
|
||||||
|
invoice.e_invoice_items = [item for item in invoice.items]
|
||||||
|
tax_data = get_invoice_summary(invoice.e_invoice_items, invoice.taxes)
|
||||||
|
invoice.tax_data = tax_data
|
||||||
|
|
||||||
|
#Check if stamp duty (Bollo) of 2 EUR exists.
|
||||||
|
stamp_duty_charge_row = next((tax for tax in invoice.taxes if tax.charge_type == _("Actual") and tax.tax_amount == 2.0 ), None)
|
||||||
|
if stamp_duty_charge_row:
|
||||||
|
invoice.stamp_duty = stamp_duty_charge_row.tax_amount
|
||||||
|
|
||||||
|
for item in invoice.e_invoice_items:
|
||||||
|
if item.tax_rate == 0.0 and item.tax_amount == 0.0:
|
||||||
|
item.tax_exemption_reason = tax_data["0.0"]["tax_exemption_reason"]
|
||||||
|
|
||||||
|
return invoice
|
||||||
|
|
||||||
|
def get_conditions(filters):
|
||||||
|
filters = json.loads(filters)
|
||||||
|
|
||||||
|
conditions = {"docstatus": 1}
|
||||||
|
|
||||||
|
if filters.get("company"): conditions["company"] = filters["company"]
|
||||||
|
if filters.get("customer"): conditions["customer"] = filters["customer"]
|
||||||
|
|
||||||
|
if filters.get("from_date"): conditions["posting_date"] = (">=", filters["from_date"])
|
||||||
|
if filters.get("to_date"): conditions["posting_date"] = ("<=", filters["to_date"])
|
||||||
|
|
||||||
|
if filters.get("from_date") and filters.get("to_date"):
|
||||||
|
conditions["posting_date"] = ("between", [filters.get("from_date"), filters.get("to_date")])
|
||||||
|
|
||||||
|
return conditions
|
||||||
|
|
||||||
|
#TODO: Use function from frappe once PR #6853 is merged.
|
||||||
|
def download_zip(files, output_filename):
|
||||||
|
from zipfile import ZipFile
|
||||||
|
|
||||||
|
input_files = [frappe.get_site_path('private', 'files', filename) for filename in files]
|
||||||
|
output_path = frappe.get_site_path('private', 'files', output_filename)
|
||||||
|
|
||||||
|
with ZipFile(output_path, 'w') as output_zip:
|
||||||
|
for input_file in input_files:
|
||||||
|
output_zip.write(input_file, arcname=os.path.basename(input_file))
|
||||||
|
|
||||||
|
with open(output_path, 'rb') as fileobj:
|
||||||
|
filedata = fileobj.read()
|
||||||
|
|
||||||
|
frappe.local.response.filename = output_filename
|
||||||
|
frappe.local.response.filecontent = filedata
|
||||||
|
frappe.local.response.type = "download"
|
||||||
|
|
||||||
|
def get_invoice_summary(items, taxes):
|
||||||
|
summary_data = frappe._dict()
|
||||||
|
for tax in taxes:
|
||||||
|
#Include only VAT charges.
|
||||||
|
if tax.charge_type == "Actual":
|
||||||
|
continue
|
||||||
|
|
||||||
|
#Charges to appear as items in the e-invoice.
|
||||||
|
if tax.charge_type in ["On Previous Row Total", "On Previous Row Amount"]:
|
||||||
|
reference_row = next((row for row in taxes if row.idx == int(tax.row_id or 0)), None)
|
||||||
|
if reference_row:
|
||||||
|
items.append(
|
||||||
|
frappe._dict(
|
||||||
|
idx=len(items)+1,
|
||||||
|
item_code=reference_row.description,
|
||||||
|
item_name=reference_row.description,
|
||||||
|
rate=reference_row.tax_amount,
|
||||||
|
qty=1.0,
|
||||||
|
amount=reference_row.tax_amount,
|
||||||
|
stock_uom=frappe.db.get_single_value("Stock Settings", "stock_uom") or _("Nos"),
|
||||||
|
tax_rate=tax.rate,
|
||||||
|
tax_amount=(reference_row.tax_amount * tax.rate) / 100,
|
||||||
|
net_amount=reference_row.tax_amount,
|
||||||
|
taxable_amount=reference_row.tax_amount,
|
||||||
|
item_tax_rate="{}",
|
||||||
|
charges=True
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#Check item tax rates if tax rate is zero.
|
||||||
|
if tax.rate == 0:
|
||||||
|
for item in items:
|
||||||
|
item_tax_rate = json.loads(item.item_tax_rate)
|
||||||
|
if tax.account_head in item_tax_rate:
|
||||||
|
key = cstr(item_tax_rate[tax.account_head])
|
||||||
|
summary_data.setdefault(key, {"tax_amount": 0.0, "taxable_amount": 0.0, "tax_exemption_reason": "", "tax_exemption_law": ""})
|
||||||
|
summary_data[key]["tax_amount"] += item.tax_amount
|
||||||
|
summary_data[key]["taxable_amount"] += item.net_amount
|
||||||
|
if key == "0.0":
|
||||||
|
summary_data[key]["tax_exemption_reason"] = tax.tax_exemption_reason
|
||||||
|
summary_data[key]["tax_exemption_law"] = tax.tax_exemption_law
|
||||||
|
|
||||||
|
if summary_data == {}: #Implies that Zero VAT has not been set on any item.
|
||||||
|
summary_data.setdefault("0.0", {"tax_amount": 0.0, "taxable_amount": tax.total,
|
||||||
|
"tax_exemption_reason": tax.tax_exemption_reason, "tax_exemption_law": tax.tax_exemption_law})
|
||||||
|
|
||||||
|
else:
|
||||||
|
item_wise_tax_detail = json.loads(tax.item_wise_tax_detail)
|
||||||
|
for rate_item in [tax_item for tax_item in item_wise_tax_detail.items() if tax_item[1][0] == tax.rate]:
|
||||||
|
key = cstr(tax.rate)
|
||||||
|
if not summary_data.get(key): summary_data.setdefault(key, {"tax_amount": 0.0, "taxable_amount": 0.0})
|
||||||
|
summary_data[key]["tax_amount"] += rate_item[1][1]
|
||||||
|
summary_data[key]["taxable_amount"] += sum([item.net_amount for item in items if item.item_code == rate_item[0]])
|
||||||
|
|
||||||
|
for item in items:
|
||||||
|
key = cstr(tax.rate)
|
||||||
|
if item.get("charges"):
|
||||||
|
if not summary_data.get(key): summary_data.setdefault(key, {"taxable_amount": 0.0})
|
||||||
|
summary_data[key]["taxable_amount"] += item.taxable_amount
|
||||||
|
|
||||||
|
return summary_data
|
||||||
|
|
||||||
|
#Preflight for successful e-invoice export.
|
||||||
|
def sales_invoice_validate(doc):
|
||||||
|
#Validate company
|
||||||
|
if not doc.company_address:
|
||||||
|
frappe.throw(_("Please set an Address on the Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
validate_address(doc.company_address, "Company")
|
||||||
|
|
||||||
|
if not doc.company_tax_id and not doc.company_fiscal_code:
|
||||||
|
frappe.throw(_("Please set either the Tax ID or Fiscal Code on Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
|
||||||
|
|
||||||
|
#Validate customer details
|
||||||
|
customer_type, is_public_administration = frappe.db.get_value("Customer", doc.customer, ["customer_type", "is_public_administration"])
|
||||||
|
if customer_type == _("Individual"):
|
||||||
|
if not doc.customer_fiscal_code:
|
||||||
|
frappe.throw(_("Please set Fiscal Code for the customer '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
if is_public_administration:
|
||||||
|
if not doc.customer_fiscal_code:
|
||||||
|
frappe.throw(_("Please set Fiscal Code for the public administration '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
if not doc.tax_id:
|
||||||
|
frappe.throw(_("Please set Tax ID for the customer '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))
|
||||||
|
|
||||||
|
if not doc.customer_address:
|
||||||
|
frappe.throw(_("Please set the Customer Address"), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
validate_address(doc.customer_address, "Customer")
|
||||||
|
|
||||||
|
if not len(doc.taxes):
|
||||||
|
frappe.throw(_("Please set at least one row in the Taxes and Charges Table"), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
for row in doc.taxes:
|
||||||
|
if row.rate == 0 and row.tax_amount == 0 and not row.tax_exemption_reason:
|
||||||
|
frappe.throw(_("Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges".format(row.idx)),
|
||||||
|
title=_("E-Invoicing Information Missing"))
|
||||||
|
|
||||||
|
|
||||||
|
#Ensure payment details are valid for e-invoice.
|
||||||
|
def sales_invoice_on_submit(doc):
|
||||||
|
#Validate payment details
|
||||||
|
if not len(doc.payment_schedule):
|
||||||
|
frappe.throw(_("Please set the Payment Schedule"), title=_("E-Invoicing Information Missing"))
|
||||||
|
else:
|
||||||
|
for schedule in doc.payment_schedule:
|
||||||
|
if not schedule.mode_of_payment:
|
||||||
|
frappe.throw(_("Row {0}: Please set the Mode of Payment in Payment Schedule".format(schedule.idx)),
|
||||||
|
title=_("E-Invoicing Information Missing"))
|
||||||
|
elif not frappe.db.get_value("Mode of Payment", schedule.mode_of_payment, "mode_of_payment_code"):
|
||||||
|
frappe.throw(_("Row {0}: Please set the correct code on Mode of Payment {1}".format(schedule.idx, schedule.mode_of_payment)),
|
||||||
|
title=_("E-Invoicing Information Missing"))
|
||||||
|
|
||||||
|
prepare_and_attach_invoice(doc)
|
||||||
|
|
||||||
|
def prepare_and_attach_invoice(doc):
|
||||||
|
progressive_name, progressive_number = get_progressive_name_and_number(doc)
|
||||||
|
|
||||||
|
invoice = prepare_invoice(doc, progressive_number)
|
||||||
|
invoice_xml = frappe.render_template('erpnext/regional/italy/e-invoice.xml', context={"doc": invoice}, is_path=True)
|
||||||
|
|
||||||
|
xml_filename = progressive_name + ".xml"
|
||||||
|
save_file(xml_filename, invoice_xml, dt=doc.doctype, dn=doc.name, is_private=True)
|
||||||
|
|
||||||
|
#Delete e-invoice attachment on cancel.
|
||||||
|
def sales_invoice_on_cancel(doc):
|
||||||
|
for attachment in get_e_invoice_attachments(doc):
|
||||||
|
remove_file(attachment.name, attached_to_doctype=doc.doctype, attached_to_name=doc.name)
|
||||||
|
|
||||||
|
def get_e_invoice_attachments(invoice):
|
||||||
|
out = []
|
||||||
|
attachments = get_attachments(invoice.doctype, invoice.name)
|
||||||
|
company_tax_id = invoice.company_tax_id if invoice.company_tax_id.startswith("IT") else "IT" + invoice.company_tax_id
|
||||||
|
|
||||||
|
for attachment in attachments:
|
||||||
|
if attachment.file_name.startswith(company_tax_id) and attachment.file_name.endswith(".xml"):
|
||||||
|
out.append(attachment)
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
def validate_address(address_name, address_context):
|
||||||
|
pincode, city = frappe.db.get_value("Address", address_name, ["pincode", "city"])
|
||||||
|
if not pincode:
|
||||||
|
frappe.throw(_("Please set pin code on %s Address" % address_context), title=_("E-Invoicing Information Missing"))
|
||||||
|
if not city:
|
||||||
|
frappe.throw(_("Please set city on %s Address" % address_context), title=_("E-Invoicing Information Missing"))
|
||||||
|
|
||||||
|
|
||||||
|
def get_unamended_name(doc):
|
||||||
|
attributes = ["naming_series", "amended_from"]
|
||||||
|
for attribute in attributes:
|
||||||
|
if not hasattr(doc, attribute):
|
||||||
|
return doc.name
|
||||||
|
|
||||||
|
if doc.amended_from:
|
||||||
|
return "-".join(doc.name.split("-")[:-1])
|
||||||
|
else:
|
||||||
|
return doc.name
|
||||||
|
|
||||||
|
def get_progressive_name_and_number(doc):
|
||||||
|
company_tax_id = doc.company_tax_id if doc.company_tax_id.startswith("IT") else "IT" + doc.company_tax_id
|
||||||
|
progressive_name = frappe.model.naming.make_autoname(company_tax_id + "_.#####")
|
||||||
|
progressive_number = progressive_name.split("_")[1]
|
||||||
|
|
||||||
|
return progressive_name, progressive_number
|
||||||
|
|
||||||
|
def validate_address(doc, method):
|
||||||
|
if not (hasattr(doc, "state_code") and doc.country in ["Italy", "Italia", "Italian Republic", "Repubblica Italiana"]):
|
||||||
|
return
|
||||||
|
|
||||||
|
state_codes_lower = {key.lower():value for key,value in state_codes.items()}
|
||||||
|
doc.state_code = state_codes_lower.get(doc.get('state','').lower())
|
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
frappe.query_reports["Electronic Invoice Register"] = {
|
||||||
|
"filters": [
|
||||||
|
{
|
||||||
|
"fieldname":"from_date",
|
||||||
|
"label": __("From Date"),
|
||||||
|
"fieldtype": "Date",
|
||||||
|
"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
|
||||||
|
"width": "80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"to_date",
|
||||||
|
"label": __("To Date"),
|
||||||
|
"fieldtype": "Date",
|
||||||
|
"default": frappe.datetime.get_today()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"customer",
|
||||||
|
"label": __("Customer"),
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Customer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"company",
|
||||||
|
"label": __("Company"),
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Company",
|
||||||
|
"default": frappe.defaults.get_user_default("Company")
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"onload": function(reportview) {
|
||||||
|
reportview.page.add_inner_button(__("Export E-Invoices"), function() {
|
||||||
|
//TODO: refactor condition to disallow export if report has no data.
|
||||||
|
if (!reportview.data.length) {
|
||||||
|
frappe.msgprint(__("No data to export"));
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var w = window.open(
|
||||||
|
frappe.urllib.get_full_url(
|
||||||
|
"/api/method/erpnext.regional.italy.utils.export_invoices?"
|
||||||
|
+ "filters=" + JSON.stringify(reportview.get_filter_values())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (!w) {
|
||||||
|
frappe.msgprint(__("Please enable pop-ups")); return;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"add_total_row": 0,
|
||||||
|
"color": "green",
|
||||||
|
"creation": "2019-01-13 17:43:21.903589",
|
||||||
|
"disabled": 1,
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Report",
|
||||||
|
"icon": "fa fa-file-code-o",
|
||||||
|
"idx": 0,
|
||||||
|
"is_standard": "Yes",
|
||||||
|
"modified": "2019-01-13 19:03:56.187748",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Regional",
|
||||||
|
"name": "Electronic Invoice Register",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"prepared_report": 0,
|
||||||
|
"ref_doctype": "Sales Invoice",
|
||||||
|
"report_name": "Electronic Invoice Register",
|
||||||
|
"report_type": "Script Report",
|
||||||
|
"roles": []
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
from erpnext.accounts.report.sales_register.sales_register import _execute
|
||||||
|
|
||||||
|
def execute(filters=None):
|
||||||
|
return _execute(filters)
|
@ -762,7 +762,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -1947,7 +1947,7 @@
|
|||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2018-11-23 17:32:30.302066",
|
"modified": "2019-02-18 18:57:25.277633",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Quotation Item",
|
"name": "Quotation Item",
|
||||||
|
@ -961,7 +961,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -2541,7 +2541,7 @@
|
|||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2018-11-23 17:20:53.728337",
|
"modified": "2019-02-18 18:53:23.425126",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Sales Order Item",
|
"name": "Sales Order Item",
|
||||||
|
@ -166,7 +166,7 @@ erpnext.pos.PointOfSale = class PointOfSale {
|
|||||||
});
|
});
|
||||||
|
|
||||||
frappe.ui.form.on('Sales Invoice', 'selling_price_list', (frm) => {
|
frappe.ui.form.on('Sales Invoice', 'selling_price_list', (frm) => {
|
||||||
if(this.items) {
|
if(this.items && frm.doc.pos_profile) {
|
||||||
this.items.reset_items();
|
this.items.reset_items();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -46,7 +46,7 @@ class TestCompany(unittest.TestCase):
|
|||||||
|
|
||||||
def test_coa_based_on_country_template(self):
|
def test_coa_based_on_country_template(self):
|
||||||
countries = ["India", "Brazil", "United Arab Emirates", "Canada", "Germany", "France",
|
countries = ["India", "Brazil", "United Arab Emirates", "Canada", "Germany", "France",
|
||||||
"Guatemala", "Indonesia", "Mexico", "Nicaragua", "Netherlands", "Singapore",
|
"Guatemala", "Indonesia", "Italy", "Mexico", "Nicaragua", "Netherlands", "Singapore",
|
||||||
"Brazil", "Argentina", "Hungary", "Taiwan"]
|
"Brazil", "Argentina", "Hungary", "Taiwan"]
|
||||||
|
|
||||||
for country in countries:
|
for country in countries:
|
||||||
|
@ -793,7 +793,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -928,7 +928,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "2",
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -2343,7 +2343,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-23 17:20:07.347814",
|
"modified": "2019-02-18 18:58:51.342901",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Delivery Note Item",
|
"name": "Delivery Note Item",
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-flag",
|
"options": "fa fa-flag",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -70,6 +71,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "STO-ITEM-.YYYY.-",
|
"options": "STO-ITEM-.YYYY.-",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -104,6 +106,7 @@
|
|||||||
"oldfieldname": "item_code",
|
"oldfieldname": "item_code",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -172,6 +175,7 @@
|
|||||||
"oldfieldname": "item_name",
|
"oldfieldname": "item_name",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -183,37 +187,6 @@
|
|||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "barcode",
|
|
||||||
"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": "Barcode",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 1,
|
|
||||||
"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,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_in_quick_entry": 0,
|
"allow_in_quick_entry": 0,
|
||||||
@ -238,6 +211,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Item Group",
|
"options": "Item Group",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -305,6 +279,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "UOM",
|
"options": "UOM",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -335,6 +310,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -435,6 +411,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -701,6 +678,7 @@
|
|||||||
"oldfieldname": "tolerance",
|
"oldfieldname": "tolerance",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -800,6 +778,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Brand",
|
"options": "Brand",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -833,6 +812,7 @@
|
|||||||
"oldfieldname": "description",
|
"oldfieldname": "description",
|
||||||
"oldfieldtype": "Text",
|
"oldfieldtype": "Text",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -933,6 +913,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-truck",
|
"options": "fa fa-truck",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1000,6 +981,7 @@
|
|||||||
"oldfieldname": "end_of_life",
|
"oldfieldname": "end_of_life",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1067,6 +1049,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "\nFIFO\nMoving Average",
|
"options": "\nFIFO\nMoving Average",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1099,6 +1082,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1134,6 +1118,7 @@
|
|||||||
"oldfieldname": "warranty_period",
|
"oldfieldname": "warranty_period",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1167,6 +1152,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1200,6 +1186,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "UOM",
|
"options": "UOM",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1234,6 +1221,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "fa fa-rss",
|
"options": "fa fa-rss",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1268,6 +1256,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Item Reorder",
|
"options": "Item Reorder",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1337,6 +1326,7 @@
|
|||||||
"oldfieldtype": "Table",
|
"oldfieldtype": "Table",
|
||||||
"options": "UOM Conversion Detail",
|
"options": "UOM Conversion Detail",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1407,6 +1397,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1643,6 +1634,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1676,6 +1668,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -1913,6 +1906,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-shopping-cart",
|
"options": "fa fa-shopping-cart",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2015,6 +2009,7 @@
|
|||||||
"oldfieldname": "min_order_qty",
|
"oldfieldname": "min_order_qty",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2114,6 +2109,7 @@
|
|||||||
"oldfieldname": "lead_time_days",
|
"oldfieldname": "lead_time_days",
|
||||||
"oldfieldtype": "Int",
|
"oldfieldtype": "Int",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2148,6 +2144,7 @@
|
|||||||
"oldfieldname": "last_purchase_rate",
|
"oldfieldname": "last_purchase_rate",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -2312,6 +2309,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Manufacturer",
|
"options": "Manufacturer",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2344,6 +2342,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2377,6 +2376,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2411,6 +2411,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Item Supplier",
|
"options": "Item Supplier",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2573,6 +2574,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-tag",
|
"options": "fa fa-tag",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2672,6 +2674,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -2707,6 +2710,7 @@
|
|||||||
"oldfieldname": "max_discount",
|
"oldfieldname": "max_discount",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3097,6 +3101,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Item Customer Detail",
|
"options": "Item Customer Detail",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3131,6 +3136,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-money",
|
"options": "fa fa-money",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3166,6 +3172,7 @@
|
|||||||
"oldfieldtype": "Table",
|
"oldfieldtype": "Table",
|
||||||
"options": "Item Tax",
|
"options": "Item Tax",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3199,6 +3206,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-search",
|
"options": "fa fa-search",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3234,6 +3242,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3334,6 +3343,7 @@
|
|||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"options": "fa fa-cogs",
|
"options": "fa fa-cogs",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3369,6 +3379,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "BOM",
|
"options": "BOM",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -3405,6 +3416,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3467,6 +3479,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3499,6 +3512,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "fa fa-globe",
|
"options": "fa fa-globe",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3531,6 +3545,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3630,6 +3645,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3664,6 +3680,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Website Slideshow",
|
"options": "Website Slideshow",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3698,6 +3715,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "",
|
"options": "",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3760,6 +3778,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3794,6 +3813,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Warehouse",
|
"options": "Warehouse",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3828,6 +3848,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Website Item Group",
|
"options": "Website Item Group",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3861,6 +3882,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3893,6 +3915,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3926,6 +3949,7 @@
|
|||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Item Website Specification",
|
"options": "Item Website Specification",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -3958,6 +3982,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
@ -4181,10 +4206,11 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 1,
|
"max_attachments": 1,
|
||||||
"modified": "2018-11-23 01:48:29.347662",
|
"modified": "2019-02-16 17:43:56.039611",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Item",
|
"name": "Item",
|
||||||
|
"name_case": "",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
|
@ -5,14 +5,17 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
from frappe import _
|
||||||
|
|
||||||
class ItemVariantSettings(Document):
|
class ItemVariantSettings(Document):
|
||||||
|
invalid_fields_for_copy_fields_in_variants = ['barcodes']
|
||||||
|
|
||||||
def set_default_fields(self):
|
def set_default_fields(self):
|
||||||
self.fields = []
|
self.fields = []
|
||||||
fields = frappe.get_meta('Item').fields
|
fields = frappe.get_meta('Item').fields
|
||||||
exclude_fields = ["naming_series", "item_code", "item_name", "show_in_website",
|
exclude_fields = ["naming_series", "item_code", "item_name", "show_in_website",
|
||||||
"show_variant_in_website", "standard_rate", "opening_stock", "image", "description",
|
"show_variant_in_website", "standard_rate", "opening_stock", "image", "description",
|
||||||
"variant_of", "valuation_rate", "description",
|
"variant_of", "valuation_rate", "description", "barcodes",
|
||||||
"website_image", "thumbnail", "website_specifiations", "web_long_description"]
|
"website_image", "thumbnail", "website_specifiations", "web_long_description"]
|
||||||
|
|
||||||
for d in fields:
|
for d in fields:
|
||||||
@ -21,3 +24,13 @@ class ItemVariantSettings(Document):
|
|||||||
self.append('fields', {
|
self.append('fields', {
|
||||||
'field_name': d.fieldname
|
'field_name': d.fieldname
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def remove_invalid_fields_for_copy_fields_in_variants(self):
|
||||||
|
fields = [row for row in self.fields if row.field_name not in self.invalid_fields_for_copy_fields_in_variants]
|
||||||
|
self.fields = fields
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
for d in self.fields:
|
||||||
|
if d.field_name in self.invalid_fields_for_copy_fields_in_variants:
|
||||||
|
frappe.throw(_('Cannot set the field <b>{0}</b> for copying in variants').format(d.field_name))
|
||||||
|
@ -417,7 +417,7 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Recd Quantity",
|
"label": "Received Quantity",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldname": "received_qty",
|
"oldfieldname": "received_qty",
|
||||||
@ -2641,7 +2641,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-11-23 16:52:02.808534",
|
"modified": "2019-02-18 16:04:36.138776",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Purchase Receipt Item",
|
"name": "Purchase Receipt Item",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user