fix(Integration): Woocommerce issues (#19487)
* fix: Delivery URL returned response code 500 * fix: set default company in Woocommerce Settings * fix: remove redundant function calls * fix: make offset configurable for delivery date in sales order * fix: remove redundant code from woocommerce_settings.py * fix: import create_custom_field * fix: added ignore_mandatory for saving item, customer and sales order * fix: remove unused woocommerce_check custom field * fix: do not delete custom fields or item group when sync is disabled
This commit is contained in:
parent
628701f1a5
commit
b455318f01
@ -1,10 +1,8 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe, base64, hashlib, hmac, json
|
import frappe, base64, hashlib, hmac, json
|
||||||
import datetime
|
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
|
|
||||||
def verify_request():
|
def verify_request():
|
||||||
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
||||||
sig = base64.b64encode(
|
sig = base64.b64encode(
|
||||||
@ -30,191 +28,149 @@ def order(*args, **kwargs):
|
|||||||
frappe.log_error(error_message, "WooCommerce Error")
|
frappe.log_error(error_message, "WooCommerce Error")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def _order(*args, **kwargs):
|
def _order(*args, **kwargs):
|
||||||
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
||||||
if frappe.flags.woocomm_test_order_data:
|
if frappe.flags.woocomm_test_order_data:
|
||||||
fd = frappe.flags.woocomm_test_order_data
|
order = frappe.flags.woocomm_test_order_data
|
||||||
event = "created"
|
event = "created"
|
||||||
|
|
||||||
elif frappe.request and frappe.request.data:
|
elif frappe.request and frappe.request.data:
|
||||||
verify_request()
|
verify_request()
|
||||||
fd = json.loads(frappe.request.data)
|
try:
|
||||||
|
order = json.loads(frappe.request.data)
|
||||||
|
except ValueError:
|
||||||
|
#woocommerce returns 'webhook_id=value' for the first request which is not JSON
|
||||||
|
order = frappe.request.data
|
||||||
event = frappe.get_request_header("X-Wc-Webhook-Event")
|
event = frappe.get_request_header("X-Wc-Webhook-Event")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return "success"
|
return "success"
|
||||||
|
|
||||||
if event == "created":
|
if event == "created":
|
||||||
raw_billing_data = fd.get("billing")
|
raw_billing_data = order.get("billing")
|
||||||
customer_woo_com_email = raw_billing_data.get("email")
|
|
||||||
|
|
||||||
if frappe.get_value("Customer",{"woocommerce_email": customer_woo_com_email}):
|
|
||||||
# Edit
|
|
||||||
link_customer_and_address(raw_billing_data,1)
|
|
||||||
else:
|
|
||||||
# Create
|
|
||||||
link_customer_and_address(raw_billing_data,0)
|
|
||||||
|
|
||||||
|
|
||||||
items_list = fd.get("line_items")
|
|
||||||
for item in items_list:
|
|
||||||
|
|
||||||
item_woo_com_id = item.get("product_id")
|
|
||||||
|
|
||||||
if frappe.get_value("Item",{"woocommerce_id": item_woo_com_id}):
|
|
||||||
#Edit
|
|
||||||
link_item(item,1)
|
|
||||||
else:
|
|
||||||
link_item(item,0)
|
|
||||||
|
|
||||||
|
|
||||||
customer_name = raw_billing_data.get("first_name") + " " + raw_billing_data.get("last_name")
|
customer_name = raw_billing_data.get("first_name") + " " + raw_billing_data.get("last_name")
|
||||||
|
link_customer_and_address(raw_billing_data, customer_name)
|
||||||
|
link_items(order.get("line_items"), woocommerce_settings)
|
||||||
|
create_sales_order(order, woocommerce_settings, customer_name)
|
||||||
|
|
||||||
new_sales_order = frappe.new_doc("Sales Order")
|
def link_customer_and_address(raw_billing_data, customer_name):
|
||||||
new_sales_order.customer = customer_name
|
customer_woo_com_email = raw_billing_data.get("email")
|
||||||
|
customer_exists = frappe.get_value("Customer", {"woocommerce_email": customer_woo_com_email})
|
||||||
created_date = fd.get("date_created").split("T")
|
if not customer_exists:
|
||||||
new_sales_order.transaction_date = created_date[0]
|
# Create Customer
|
||||||
|
|
||||||
new_sales_order.po_no = fd.get("id")
|
|
||||||
new_sales_order.woocommerce_id = fd.get("id")
|
|
||||||
new_sales_order.naming_series = woocommerce_settings.sales_order_series or "SO-WOO-"
|
|
||||||
|
|
||||||
placed_order_date = created_date[0]
|
|
||||||
raw_date = datetime.datetime.strptime(placed_order_date, "%Y-%m-%d")
|
|
||||||
raw_delivery_date = frappe.utils.add_to_date(raw_date,days = 7)
|
|
||||||
order_delivery_date_str = raw_delivery_date.strftime('%Y-%m-%d')
|
|
||||||
order_delivery_date = str(order_delivery_date_str)
|
|
||||||
|
|
||||||
new_sales_order.delivery_date = order_delivery_date
|
|
||||||
default_set_company = frappe.get_doc("Global Defaults")
|
|
||||||
company = raw_billing_data.get("company") or default_set_company.default_company
|
|
||||||
found_company = frappe.get_doc("Company",{"name":company})
|
|
||||||
company_abbr = found_company.abbr
|
|
||||||
|
|
||||||
new_sales_order.company = company
|
|
||||||
|
|
||||||
for item in items_list:
|
|
||||||
woocomm_item_id = item.get("product_id")
|
|
||||||
found_item = frappe.get_doc("Item",{"woocommerce_id": woocomm_item_id})
|
|
||||||
|
|
||||||
ordered_items_tax = item.get("total_tax")
|
|
||||||
|
|
||||||
new_sales_order.append("items",{
|
|
||||||
"item_code": found_item.item_code,
|
|
||||||
"item_name": found_item.item_name,
|
|
||||||
"description": found_item.item_name,
|
|
||||||
"delivery_date":order_delivery_date,
|
|
||||||
"uom": woocommerce_settings.uom or _("Nos"),
|
|
||||||
"qty": item.get("quantity"),
|
|
||||||
"rate": item.get("price"),
|
|
||||||
"warehouse": woocommerce_settings.warehouse or "Stores" + " - " + company_abbr
|
|
||||||
})
|
|
||||||
|
|
||||||
add_tax_details(new_sales_order,ordered_items_tax,"Ordered Item tax",0)
|
|
||||||
|
|
||||||
# shipping_details = fd.get("shipping_lines") # used for detailed order
|
|
||||||
shipping_total = fd.get("shipping_total")
|
|
||||||
shipping_tax = fd.get("shipping_tax")
|
|
||||||
|
|
||||||
add_tax_details(new_sales_order,shipping_tax,"Shipping Tax",1)
|
|
||||||
add_tax_details(new_sales_order,shipping_total,"Shipping Total",1)
|
|
||||||
|
|
||||||
new_sales_order.submit()
|
|
||||||
|
|
||||||
frappe.db.commit()
|
|
||||||
|
|
||||||
def link_customer_and_address(raw_billing_data,customer_status):
|
|
||||||
|
|
||||||
if customer_status == 0:
|
|
||||||
# create
|
|
||||||
customer = frappe.new_doc("Customer")
|
customer = frappe.new_doc("Customer")
|
||||||
address = frappe.new_doc("Address")
|
else:
|
||||||
|
# Edit Customer
|
||||||
if customer_status == 1:
|
customer = frappe.get_doc("Customer", {"woocommerce_email": customer_woo_com_email})
|
||||||
# Edit
|
|
||||||
customer_woo_com_email = raw_billing_data.get("email")
|
|
||||||
customer = frappe.get_doc("Customer",{"woocommerce_email": customer_woo_com_email})
|
|
||||||
old_name = customer.customer_name
|
old_name = customer.customer_name
|
||||||
|
|
||||||
full_name = str(raw_billing_data.get("first_name"))+ " "+str(raw_billing_data.get("last_name"))
|
customer.customer_name = customer_name
|
||||||
customer.customer_name = full_name
|
customer.woocommerce_email = customer_woo_com_email
|
||||||
customer.woocommerce_email = str(raw_billing_data.get("email"))
|
customer.flags.ignore_mandatory = True
|
||||||
customer.save()
|
customer.save()
|
||||||
frappe.db.commit()
|
|
||||||
|
|
||||||
if customer_status == 1:
|
if customer_exists:
|
||||||
frappe.rename_doc("Customer", old_name, full_name)
|
frappe.rename_doc("Customer", old_name, customer_name)
|
||||||
address = frappe.get_doc("Address",{"woocommerce_email":customer_woo_com_email})
|
address = frappe.get_doc("Address", {"woocommerce_email": customer_woo_com_email})
|
||||||
customer = frappe.get_doc("Customer",{"woocommerce_email": customer_woo_com_email})
|
else:
|
||||||
|
address = frappe.new_doc("Address")
|
||||||
|
|
||||||
address.address_line1 = raw_billing_data.get("address_1", "Not Provided")
|
address.address_line1 = raw_billing_data.get("address_1", "Not Provided")
|
||||||
address.address_line2 = raw_billing_data.get("address_2", "Not Provided")
|
address.address_line2 = raw_billing_data.get("address_2", "Not Provided")
|
||||||
address.city = raw_billing_data.get("city", "Not Provided")
|
address.city = raw_billing_data.get("city", "Not Provided")
|
||||||
address.woocommerce_email = str(raw_billing_data.get("email"))
|
address.woocommerce_email = customer_woo_com_email
|
||||||
address.address_type = "Shipping"
|
address.address_type = "Billing"
|
||||||
address.country = frappe.get_value("Country", filters={"code":raw_billing_data.get("country", "IN").lower()})
|
address.country = frappe.get_value("Country", {"code": raw_billing_data.get("country", "IN").lower()})
|
||||||
address.state = raw_billing_data.get("state")
|
address.state = raw_billing_data.get("state")
|
||||||
address.pincode = str(raw_billing_data.get("postcode"))
|
address.pincode = raw_billing_data.get("postcode")
|
||||||
address.phone = str(raw_billing_data.get("phone"))
|
address.phone = raw_billing_data.get("phone")
|
||||||
address.email_id = str(raw_billing_data.get("email"))
|
address.email_id = customer_woo_com_email
|
||||||
|
|
||||||
address.append("links", {
|
address.append("links", {
|
||||||
"link_doctype": "Customer",
|
"link_doctype": "Customer",
|
||||||
"link_name": customer.customer_name
|
"link_name": customer.customer_name
|
||||||
})
|
})
|
||||||
|
address.flags.ignore_mandatory = True
|
||||||
|
address = address.save()
|
||||||
|
|
||||||
address.save()
|
if customer_exists:
|
||||||
frappe.db.commit()
|
|
||||||
|
|
||||||
if customer_status == 1:
|
|
||||||
|
|
||||||
address = frappe.get_doc("Address",{"woocommerce_email":customer_woo_com_email})
|
|
||||||
old_address_title = address.name
|
old_address_title = address.name
|
||||||
new_address_title = customer.customer_name+"-billing"
|
new_address_title = customer.customer_name + "-billing"
|
||||||
address.address_title = customer.customer_name
|
address.address_title = customer.customer_name
|
||||||
address.save()
|
address.save()
|
||||||
|
|
||||||
frappe.rename_doc("Address",old_address_title,new_address_title)
|
frappe.rename_doc("Address", old_address_title, new_address_title)
|
||||||
|
|
||||||
frappe.db.commit()
|
def link_items(items_list, woocommerce_settings):
|
||||||
|
for item_data in items_list:
|
||||||
def link_item(item_data,item_status):
|
|
||||||
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
|
||||||
|
|
||||||
if item_status == 0:
|
|
||||||
#Create Item
|
|
||||||
item = frappe.new_doc("Item")
|
|
||||||
|
|
||||||
if item_status == 1:
|
|
||||||
#Edit Item
|
|
||||||
item_woo_com_id = item_data.get("product_id")
|
item_woo_com_id = item_data.get("product_id")
|
||||||
item = frappe.get_doc("Item",{"woocommerce_id": item_woo_com_id})
|
|
||||||
|
|
||||||
item.item_name = str(item_data.get("name"))
|
if frappe.get_value("Item", {"woocommerce_id": item_woo_com_id}):
|
||||||
item.item_code = "woocommerce - " + str(item_data.get("product_id"))
|
#Edit Item
|
||||||
item.woocommerce_id = str(item_data.get("product_id"))
|
item = frappe.get_doc("Item", {"woocommerce_id": item_woo_com_id})
|
||||||
item.item_group = _("WooCommerce Products")
|
else:
|
||||||
item.stock_uom = woocommerce_settings.uom or _("Nos")
|
#Create Item
|
||||||
item.save()
|
item = frappe.new_doc("Item")
|
||||||
|
|
||||||
|
item.item_name = item_data.get("name")
|
||||||
|
item.item_code = _("woocommerce - {0}").format(item_data.get("product_id"))
|
||||||
|
item.woocommerce_id = item_data.get("product_id")
|
||||||
|
item.item_group = _("WooCommerce Products")
|
||||||
|
item.stock_uom = woocommerce_settings.uom or _("Nos")
|
||||||
|
item.flags.ignore_mandatory = True
|
||||||
|
item.save()
|
||||||
|
|
||||||
|
def create_sales_order(order, woocommerce_settings, customer_name):
|
||||||
|
new_sales_order = frappe.new_doc("Sales Order")
|
||||||
|
new_sales_order.customer = customer_name
|
||||||
|
|
||||||
|
new_sales_order.po_no = new_sales_order.woocommerce_id = order.get("id")
|
||||||
|
new_sales_order.naming_series = woocommerce_settings.sales_order_series or "SO-WOO-"
|
||||||
|
|
||||||
|
created_date = order.get("date_created").split("T")
|
||||||
|
new_sales_order.transaction_date = created_date[0]
|
||||||
|
delivery_after = woocommerce_settings.delivery_after_days or 7
|
||||||
|
new_sales_order.delivery_date = frappe.utils.add_days(created_date[0], delivery_after)
|
||||||
|
|
||||||
|
new_sales_order.company = woocommerce_settings.company
|
||||||
|
|
||||||
|
set_items_in_sales_order(new_sales_order, woocommerce_settings, order)
|
||||||
|
new_sales_order.flags.ignore_mandatory = True
|
||||||
|
new_sales_order.insert()
|
||||||
|
new_sales_order.submit()
|
||||||
|
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
|
|
||||||
def add_tax_details(sales_order,price,desc,status):
|
def set_items_in_sales_order(new_sales_order, woocommerce_settings, order):
|
||||||
|
company_abbr = frappe.db.get_value('Company', woocommerce_settings.company, 'abbr')
|
||||||
|
|
||||||
woocommerce_settings = frappe.get_doc("Woocommerce Settings")
|
for item in order.get("line_items"):
|
||||||
|
woocomm_item_id = item.get("product_id")
|
||||||
|
found_item = frappe.get_doc("Item", {"woocommerce_id": woocomm_item_id})
|
||||||
|
|
||||||
if status == 0:
|
ordered_items_tax = item.get("total_tax")
|
||||||
# Product taxes
|
|
||||||
account_head_type = woocommerce_settings.tax_account
|
|
||||||
|
|
||||||
if status == 1:
|
new_sales_order.append("items",{
|
||||||
# Shipping taxes
|
"item_code": found_item.item_code,
|
||||||
account_head_type = woocommerce_settings.f_n_f_account
|
"item_name": found_item.item_name,
|
||||||
|
"description": found_item.item_name,
|
||||||
|
"delivery_date": new_sales_order.delivery_date,
|
||||||
|
"uom": woocommerce_settings.uom or _("Nos"),
|
||||||
|
"qty": item.get("quantity"),
|
||||||
|
"rate": item.get("price"),
|
||||||
|
"warehouse": woocommerce_settings.warehouse or _("Stores - {0}").format(company_abbr)
|
||||||
|
})
|
||||||
|
|
||||||
sales_order.append("taxes",{
|
add_tax_details(new_sales_order, ordered_items_tax, "Ordered Item tax", woocommerce_settings.tax_account)
|
||||||
"charge_type":"Actual",
|
|
||||||
"account_head": account_head_type,
|
# shipping_details = order.get("shipping_lines") # used for detailed order
|
||||||
"tax_amount": price,
|
|
||||||
"description": desc
|
add_tax_details(new_sales_order, order.get("shipping_tax"), "Shipping Tax", woocommerce_settings.f_n_f_account)
|
||||||
})
|
add_tax_details(new_sales_order, order.get("shipping_total"), "Shipping Total", woocommerce_settings.f_n_f_account)
|
||||||
|
|
||||||
|
def add_tax_details(sales_order, price, desc, tax_account_head):
|
||||||
|
sales_order.append("taxes", {
|
||||||
|
"charge_type":"Actual",
|
||||||
|
"account_head": tax_account_head,
|
||||||
|
"tax_amount": price,
|
||||||
|
"description": desc
|
||||||
|
})
|
||||||
|
@ -1,694 +1,175 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
|
||||||
"allow_events_in_timeline": 0,
|
|
||||||
"allow_guest_to_view": 0,
|
|
||||||
"allow_import": 0,
|
|
||||||
"allow_rename": 0,
|
|
||||||
"beta": 0,
|
|
||||||
"creation": "2018-02-12 15:10:05.495713",
|
"creation": "2018-02-12 15:10:05.495713",
|
||||||
"custom": 0,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "",
|
|
||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"enable_sync",
|
||||||
|
"sb_00",
|
||||||
|
"woocommerce_server_url",
|
||||||
|
"secret",
|
||||||
|
"cb_00",
|
||||||
|
"api_consumer_key",
|
||||||
|
"api_consumer_secret",
|
||||||
|
"sb_accounting_details",
|
||||||
|
"tax_account",
|
||||||
|
"column_break_10",
|
||||||
|
"f_n_f_account",
|
||||||
|
"defaults_section",
|
||||||
|
"creation_user",
|
||||||
|
"warehouse",
|
||||||
|
"sales_order_series",
|
||||||
|
"column_break_14",
|
||||||
|
"company",
|
||||||
|
"delivery_after_days",
|
||||||
|
"uom",
|
||||||
|
"endpoints",
|
||||||
|
"endpoint"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"default": "0",
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "enable_sync",
|
"fieldname": "enable_sync",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"label": "Enable Sync"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Enable Sync",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "sb_00",
|
"fieldname": "sb_00",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "woocommerce_server_url",
|
"fieldname": "woocommerce_server_url",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
"label": "Woocommerce Server URL"
|
||||||
"label": "Woocommerce Server URL",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "secret",
|
"fieldname": "secret",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"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": "Secret",
|
"label": "Secret",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "cb_00",
|
"fieldname": "cb_00",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "api_consumer_key",
|
"fieldname": "api_consumer_key",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
"label": "API consumer key"
|
||||||
"label": "API consumer key",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "api_consumer_secret",
|
"fieldname": "api_consumer_secret",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
"label": "API consumer secret"
|
||||||
"label": "API consumer secret",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "sb_accounting_details",
|
"fieldname": "sb_accounting_details",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"label": "Accounting Details"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Accounting Details",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "tax_account",
|
"fieldname": "tax_account",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Tax Account",
|
"label": "Tax Account",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Account",
|
"options": "Account",
|
||||||
"permlevel": 0,
|
"reqd": 1
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "column_break_10",
|
"fieldname": "column_break_10",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "f_n_f_account",
|
"fieldname": "f_n_f_account",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Freight and Forwarding Account",
|
"label": "Freight and Forwarding Account",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Account",
|
"options": "Account",
|
||||||
"permlevel": 0,
|
"reqd": 1
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "defaults_section",
|
"fieldname": "defaults_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"label": "Defaults"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Defaults",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"description": "The user that will be used to create Customers, Items and Sales Orders. This user should have the relevant permissions.",
|
"description": "The user that will be used to create Customers, Items and Sales Orders. This user should have the relevant permissions.",
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "creation_user",
|
"fieldname": "creation_user",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Creation User",
|
"label": "Creation User",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "User",
|
"options": "User",
|
||||||
"permlevel": 0,
|
"reqd": 1
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"description": "This warehouse will be used to create Sales Orders. The fallback warehouse is \"Stores\".",
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"description": "This warehouse will be used to create Sale Orders. The fallback warehouse is \"Stores\".",
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "warehouse",
|
"fieldname": "warehouse",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Warehouse",
|
"label": "Warehouse",
|
||||||
"length": 0,
|
"options": "Warehouse"
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Warehouse",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "column_break_14",
|
"fieldname": "column_break_14",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"description": "The fallback series is \"SO-WOO-\".",
|
"description": "The fallback series is \"SO-WOO-\".",
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "sales_order_series",
|
"fieldname": "sales_order_series",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"hidden": 0,
|
"label": "Sales Order Series"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Sales Order Series",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"description": "This is the default UOM used for items and Sales orders. The fallback UOM is \"Nos\".",
|
"description": "This is the default UOM used for items and Sales orders. The fallback UOM is \"Nos\".",
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "uom",
|
"fieldname": "uom",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "UOM",
|
"label": "UOM",
|
||||||
"length": 0,
|
"options": "UOM"
|
||||||
"no_copy": 0,
|
|
||||||
"options": "UOM",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "endpoints",
|
"fieldname": "endpoints",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"label": "Endpoints"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Endpoints",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "endpoint",
|
"fieldname": "endpoint",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"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": "Endpoint",
|
"label": "Endpoint",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
},
|
||||||
"permlevel": 0,
|
{
|
||||||
"precision": "",
|
"description": "This company will be used to create Sales Orders.",
|
||||||
"print_hide": 0,
|
"fieldname": "company",
|
||||||
"print_hide_if_no_value": 0,
|
"fieldtype": "Link",
|
||||||
"read_only": 1,
|
"label": "Company",
|
||||||
"remember_last_selected_value": 0,
|
"options": "Company",
|
||||||
"report_hide": 0,
|
"reqd": 1
|
||||||
"reqd": 0,
|
},
|
||||||
"search_index": 0,
|
{
|
||||||
"set_only_once": 0,
|
"description": "This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.",
|
||||||
"translatable": 0,
|
"fieldname": "delivery_after_days",
|
||||||
"unique": 0
|
"fieldtype": "Int",
|
||||||
|
"label": "Delivery After (Days)"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
|
||||||
"hide_toolbar": 0,
|
|
||||||
"idx": 0,
|
|
||||||
"in_create": 0,
|
|
||||||
"is_submittable": 0,
|
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"istable": 0,
|
"modified": "2019-11-04 00:45:21.232096",
|
||||||
"max_attachments": 0,
|
|
||||||
"menu_index": 0,
|
|
||||||
"modified": "2019-04-08 17:04:16.720696",
|
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Integrations",
|
"module": "ERPNext Integrations",
|
||||||
"name": "Woocommerce Settings",
|
"name": "Woocommerce Settings",
|
||||||
"name_case": "",
|
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
"amend": 0,
|
|
||||||
"cancel": 0,
|
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 0,
|
|
||||||
"email": 1,
|
"email": 1,
|
||||||
"export": 0,
|
|
||||||
"if_owner": 0,
|
|
||||||
"import": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"print": 1,
|
"print": 1,
|
||||||
"read": 1,
|
"read": 1,
|
||||||
"report": 0,
|
|
||||||
"role": "System Manager",
|
"role": "System Manager",
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
"share": 1,
|
||||||
"submit": 0,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
|
||||||
"show_name_in_global_search": 0,
|
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1
|
||||||
"track_seen": 0,
|
|
||||||
"track_views": 0
|
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ from frappe import _
|
|||||||
from frappe.utils.nestedset import get_root_of
|
from frappe.utils.nestedset import get_root_of
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from six.moves.urllib.parse import urlparse
|
from six.moves.urllib.parse import urlparse
|
||||||
|
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
|
||||||
|
|
||||||
class WoocommerceSettings(Document):
|
class WoocommerceSettings(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
@ -17,75 +18,21 @@ class WoocommerceSettings(Document):
|
|||||||
|
|
||||||
def create_delete_custom_fields(self):
|
def create_delete_custom_fields(self):
|
||||||
if self.enable_sync:
|
if self.enable_sync:
|
||||||
|
custom_fields = {}
|
||||||
# create
|
# create
|
||||||
create_custom_field_id_and_check_status = False
|
for doctype in ["Customer", "Sales Order", "Item", "Address"]:
|
||||||
create_custom_field_email_check = False
|
df = dict(fieldname='woocommerce_id', label='Woocommerce ID', fieldtype='Data', read_only=1, print_hide=1)
|
||||||
names = ["Customer-woocommerce_id","Sales Order-woocommerce_id","Item-woocommerce_id","Address-woocommerce_id"]
|
create_custom_field(doctype, df)
|
||||||
names_check_box = ["Customer-woocommerce_check","Sales Order-woocommerce_check","Item-woocommerce_check","Address-woocommerce_check"]
|
|
||||||
email_names = ["Customer-woocommerce_email","Address-woocommerce_email"]
|
|
||||||
|
|
||||||
for i in zip(names,names_check_box):
|
for doctype in ["Customer", "Address"]:
|
||||||
|
df = dict(fieldname='woocommerce_email', label='Woocommerce Email', fieldtype='Data', read_only=1, print_hide=1)
|
||||||
if not frappe.get_value("Custom Field",{"name":i[0]}) or not frappe.get_value("Custom Field",{"name":i[1]}):
|
create_custom_field(doctype, df)
|
||||||
create_custom_field_id_and_check_status = True
|
|
||||||
break
|
if not frappe.get_value("Item Group", {"name": _("WooCommerce Products")}):
|
||||||
|
|
||||||
|
|
||||||
if create_custom_field_id_and_check_status:
|
|
||||||
names = ["Customer","Sales Order","Item","Address"]
|
|
||||||
for name in names:
|
|
||||||
custom = frappe.new_doc("Custom Field")
|
|
||||||
custom.dt = name
|
|
||||||
custom.label = "woocommerce_id"
|
|
||||||
custom.read_only = 1
|
|
||||||
custom.save()
|
|
||||||
|
|
||||||
custom = frappe.new_doc("Custom Field")
|
|
||||||
custom.dt = name
|
|
||||||
custom.label = "woocommerce_check"
|
|
||||||
custom.fieldtype = "Check"
|
|
||||||
custom.read_only = 1
|
|
||||||
custom.save()
|
|
||||||
|
|
||||||
for i in email_names:
|
|
||||||
|
|
||||||
if not frappe.get_value("Custom Field",{"name":i}):
|
|
||||||
create_custom_field_email_check = True
|
|
||||||
break;
|
|
||||||
|
|
||||||
if create_custom_field_email_check:
|
|
||||||
names = ["Customer","Address"]
|
|
||||||
for name in names:
|
|
||||||
custom = frappe.new_doc("Custom Field")
|
|
||||||
custom.dt = name
|
|
||||||
custom.label = "woocommerce_email"
|
|
||||||
custom.read_only = 1
|
|
||||||
custom.save()
|
|
||||||
|
|
||||||
if not frappe.get_value("Item Group",{"name": _("WooCommerce Products")}):
|
|
||||||
item_group = frappe.new_doc("Item Group")
|
item_group = frappe.new_doc("Item Group")
|
||||||
item_group.item_group_name = _("WooCommerce Products")
|
item_group.item_group_name = _("WooCommerce Products")
|
||||||
item_group.parent_item_group = get_root_of("Item Group")
|
item_group.parent_item_group = get_root_of("Item Group")
|
||||||
item_group.save()
|
item_group.insert()
|
||||||
|
|
||||||
|
|
||||||
elif not self.enable_sync:
|
|
||||||
# delete
|
|
||||||
names = ["Customer-woocommerce_id","Sales Order-woocommerce_id","Item-woocommerce_id","Address-woocommerce_id"]
|
|
||||||
names_check_box = ["Customer-woocommerce_check","Sales Order-woocommerce_check","Item-woocommerce_check","Address-woocommerce_check"]
|
|
||||||
email_names = ["Customer-woocommerce_email","Address-woocommerce_email"]
|
|
||||||
for name in names:
|
|
||||||
frappe.delete_doc("Custom Field",name)
|
|
||||||
|
|
||||||
for name in names_check_box:
|
|
||||||
frappe.delete_doc("Custom Field",name)
|
|
||||||
|
|
||||||
for name in email_names:
|
|
||||||
frappe.delete_doc("Custom Field",name)
|
|
||||||
|
|
||||||
frappe.delete_doc("Item Group", _("WooCommerce Products"))
|
|
||||||
|
|
||||||
frappe.db.commit()
|
|
||||||
|
|
||||||
def validate_settings(self):
|
def validate_settings(self):
|
||||||
if self.enable_sync:
|
if self.enable_sync:
|
||||||
|
@ -18,6 +18,7 @@ class TestWoocommerce(unittest.TestCase):
|
|||||||
woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1"
|
woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1"
|
||||||
woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e"
|
woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e"
|
||||||
woo_settings.enable_sync = 1
|
woo_settings.enable_sync = 1
|
||||||
|
woo_settings.company = "Woocommerce"
|
||||||
woo_settings.tax_account = "Sales Expenses - W"
|
woo_settings.tax_account = "Sales Expenses - W"
|
||||||
woo_settings.f_n_f_account = "Expenses - W"
|
woo_settings.f_n_f_account = "Expenses - W"
|
||||||
woo_settings.creation_user = "Administrator"
|
woo_settings.creation_user = "Administrator"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user