mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-18 12:39:18 +00:00
Merge branch 'hub-redesign' of https://github.com/netchampfaris/erpnext into hub-redesign
This commit is contained in:
@@ -17,8 +17,6 @@ def call_hub_method(method, params=None):
|
|||||||
response = connection.post_request(params)
|
response = connection.post_request(params)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
#### LOCAL ITEMS
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_valid_items(search_value=''):
|
def get_valid_items(search_value=''):
|
||||||
items = frappe.get_list(
|
items = frappe.get_list(
|
||||||
@@ -58,10 +56,6 @@ def publish_selected_items(items_to_publish):
|
|||||||
frappe.throw(e)
|
frappe.throw(e)
|
||||||
|
|
||||||
def item_sync_preprocess():
|
def item_sync_preprocess():
|
||||||
# Call Hub to make a new activity
|
|
||||||
# and return an activity ID
|
|
||||||
# that will be used as the remote ID for the Migration Run
|
|
||||||
|
|
||||||
hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
|
hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
|
||||||
|
|
||||||
response = call_hub_method('add_hub_seller_activity', {
|
response = call_hub_method('add_hub_seller_activity', {
|
||||||
@@ -104,182 +98,3 @@ def get_hub_connection():
|
|||||||
# read-only connection
|
# read-only connection
|
||||||
hub_connection = FrappeClient(frappe.conf.hub_url)
|
hub_connection = FrappeClient(frappe.conf.hub_url)
|
||||||
return hub_connection
|
return hub_connection
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Legacy functionality
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_item_favourites(start=0, limit=20, fields=["*"], order_by=None):
|
|
||||||
doctype = 'Hub Item'
|
|
||||||
hub_settings = frappe.get_doc('Hub Settings')
|
|
||||||
item_names_str = hub_settings.get('custom_data') or '[]'
|
|
||||||
item_names = json.loads(item_names_str)
|
|
||||||
filters = json.dumps({
|
|
||||||
'hub_item_code': ['in', item_names]
|
|
||||||
})
|
|
||||||
return get_list(doctype, start, limit, fields, filters, order_by)
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def update_wishlist_item(item_name, remove=0):
|
|
||||||
remove = int(remove)
|
|
||||||
hub_settings = frappe.get_doc('Hub Settings')
|
|
||||||
data = hub_settings.get('custom_data')
|
|
||||||
if not data or not json.loads(data):
|
|
||||||
data = '[]'
|
|
||||||
hub_settings.custom_data = data
|
|
||||||
hub_settings.save()
|
|
||||||
|
|
||||||
item_names_str = data
|
|
||||||
item_names = json.loads(item_names_str)
|
|
||||||
if not remove and item_name not in item_names:
|
|
||||||
item_names.append(item_name)
|
|
||||||
if remove and item_name in item_names:
|
|
||||||
item_names.remove(item_name)
|
|
||||||
|
|
||||||
item_names_str = json.dumps(item_names)
|
|
||||||
|
|
||||||
hub_settings.custom_data = item_names_str
|
|
||||||
hub_settings.save()
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def update_category(hub_item_code, category):
|
|
||||||
connection = get_hub_connection()
|
|
||||||
|
|
||||||
# args = frappe._dict(dict(
|
|
||||||
# doctype='Hub Category',
|
|
||||||
# hub_category_name=category
|
|
||||||
# ))
|
|
||||||
# response = connection.insert('Hub Category', args)
|
|
||||||
|
|
||||||
response = connection.update('Hub Item', frappe._dict(dict(
|
|
||||||
doctype='Hub Item',
|
|
||||||
hub_category = category
|
|
||||||
)), hub_item_code)
|
|
||||||
|
|
||||||
return response
|
|
||||||
|
|
||||||
def make_opportunity(buyer_name, email_id):
|
|
||||||
buyer_name = "HUB-" + buyer_name
|
|
||||||
|
|
||||||
if not frappe.db.exists('Lead', {'email_id': email_id}):
|
|
||||||
lead = frappe.new_doc("Lead")
|
|
||||||
lead.lead_name = buyer_name
|
|
||||||
lead.email_id = email_id
|
|
||||||
lead.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
o = frappe.new_doc("Opportunity")
|
|
||||||
o.enquiry_from = "Lead"
|
|
||||||
o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
|
|
||||||
o.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def make_rfq_and_send_opportunity(item, supplier):
|
|
||||||
supplier = make_supplier(supplier)
|
|
||||||
contact = make_contact(supplier)
|
|
||||||
item = make_item(item)
|
|
||||||
rfq = make_rfq(item, supplier, contact)
|
|
||||||
status = send_opportunity(contact)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'rfq': rfq,
|
|
||||||
'hub_document_created': status
|
|
||||||
}
|
|
||||||
|
|
||||||
def make_supplier(supplier):
|
|
||||||
# make supplier if not already exists
|
|
||||||
supplier = frappe._dict(json.loads(supplier))
|
|
||||||
|
|
||||||
if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
|
|
||||||
supplier_doc = frappe.get_doc({
|
|
||||||
'doctype': 'Supplier',
|
|
||||||
'supplier_name': supplier.supplier_name,
|
|
||||||
'supplier_group': supplier.supplier_group,
|
|
||||||
'supplier_email': supplier.supplier_email
|
|
||||||
}).insert()
|
|
||||||
else:
|
|
||||||
supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
|
|
||||||
|
|
||||||
return supplier_doc
|
|
||||||
|
|
||||||
def make_contact(supplier):
|
|
||||||
contact_name = get_default_contact('Supplier', supplier.supplier_name)
|
|
||||||
# make contact if not already exists
|
|
||||||
if not contact_name:
|
|
||||||
contact = frappe.get_doc({
|
|
||||||
'doctype': 'Contact',
|
|
||||||
'first_name': supplier.supplier_name,
|
|
||||||
'email_id': supplier.supplier_email,
|
|
||||||
'is_primary_contact': 1,
|
|
||||||
'links': [
|
|
||||||
{'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
|
|
||||||
]
|
|
||||||
}).insert()
|
|
||||||
else:
|
|
||||||
contact = frappe.get_doc('Contact', contact_name)
|
|
||||||
|
|
||||||
return contact
|
|
||||||
|
|
||||||
def make_item(item):
|
|
||||||
# make item if not already exists
|
|
||||||
item = frappe._dict(json.loads(item))
|
|
||||||
|
|
||||||
if not frappe.db.exists('Item', {'item_code': item.item_code}):
|
|
||||||
item_doc = frappe.get_doc({
|
|
||||||
'doctype': 'Item',
|
|
||||||
'item_code': item.item_code,
|
|
||||||
'item_group': item.item_group,
|
|
||||||
'is_item_from_hub': 1
|
|
||||||
}).insert()
|
|
||||||
else:
|
|
||||||
item_doc = frappe.get_doc('Item', item.item_code)
|
|
||||||
|
|
||||||
return item_doc
|
|
||||||
|
|
||||||
def make_rfq(item, supplier, contact):
|
|
||||||
# make rfq
|
|
||||||
rfq = frappe.get_doc({
|
|
||||||
'doctype': 'Request for Quotation',
|
|
||||||
'transaction_date': nowdate(),
|
|
||||||
'status': 'Draft',
|
|
||||||
'company': frappe.db.get_single_value('Hub Settings', 'company'),
|
|
||||||
'message_for_supplier': 'Please supply the specified items at the best possible rates',
|
|
||||||
'suppliers': [
|
|
||||||
{ 'supplier': supplier.name, 'contact': contact.name }
|
|
||||||
],
|
|
||||||
'items': [
|
|
||||||
{
|
|
||||||
'item_code': item.item_code,
|
|
||||||
'qty': 1,
|
|
||||||
'schedule_date': nowdate(),
|
|
||||||
'warehouse': item.default_warehouse or get_root_of("Warehouse"),
|
|
||||||
'description': item.description,
|
|
||||||
'uom': item.stock_uom
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}).insert()
|
|
||||||
|
|
||||||
rfq.save()
|
|
||||||
rfq.submit()
|
|
||||||
return rfq
|
|
||||||
|
|
||||||
def send_opportunity(contact):
|
|
||||||
# Make Hub Message on Hub with lead data
|
|
||||||
doc = {
|
|
||||||
'doctype': 'Lead',
|
|
||||||
'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
|
|
||||||
'email_id': frappe.db.get_single_value('Hub Settings', 'user')
|
|
||||||
}
|
|
||||||
|
|
||||||
args = frappe._dict(dict(
|
|
||||||
doctype='Hub Message',
|
|
||||||
reference_doctype='Lead',
|
|
||||||
data=json.dumps(doc),
|
|
||||||
user=contact.email_id
|
|
||||||
))
|
|
||||||
|
|
||||||
connection = get_hub_connection()
|
|
||||||
response = connection.insert('Hub Message', args)
|
|
||||||
|
|
||||||
return response.ok
|
|
||||||
|
|||||||
178
erpnext/hub_node/legacy.py
Normal file
178
erpnext/hub_node/legacy.py
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe, requests, json
|
||||||
|
from frappe.utils import now, nowdate
|
||||||
|
from frappe.frappeclient import FrappeClient
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_item_favourites(start=0, limit=20, fields=["*"], order_by=None):
|
||||||
|
doctype = 'Hub Item'
|
||||||
|
hub_settings = frappe.get_doc('Hub Settings')
|
||||||
|
item_names_str = hub_settings.get('custom_data') or '[]'
|
||||||
|
item_names = json.loads(item_names_str)
|
||||||
|
filters = json.dumps({
|
||||||
|
'hub_item_code': ['in', item_names]
|
||||||
|
})
|
||||||
|
return get_list(doctype, start, limit, fields, filters, order_by)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def update_wishlist_item(item_name, remove=0):
|
||||||
|
remove = int(remove)
|
||||||
|
hub_settings = frappe.get_doc('Hub Settings')
|
||||||
|
data = hub_settings.get('custom_data')
|
||||||
|
if not data or not json.loads(data):
|
||||||
|
data = '[]'
|
||||||
|
hub_settings.custom_data = data
|
||||||
|
hub_settings.save()
|
||||||
|
|
||||||
|
item_names_str = data
|
||||||
|
item_names = json.loads(item_names_str)
|
||||||
|
if not remove and item_name not in item_names:
|
||||||
|
item_names.append(item_name)
|
||||||
|
if remove and item_name in item_names:
|
||||||
|
item_names.remove(item_name)
|
||||||
|
|
||||||
|
item_names_str = json.dumps(item_names)
|
||||||
|
|
||||||
|
hub_settings.custom_data = item_names_str
|
||||||
|
hub_settings.save()
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def update_category(hub_item_code, category):
|
||||||
|
connection = get_hub_connection()
|
||||||
|
|
||||||
|
# args = frappe._dict(dict(
|
||||||
|
# doctype='Hub Category',
|
||||||
|
# hub_category_name=category
|
||||||
|
# ))
|
||||||
|
# response = connection.insert('Hub Category', args)
|
||||||
|
|
||||||
|
response = connection.update('Hub Item', frappe._dict(dict(
|
||||||
|
doctype='Hub Item',
|
||||||
|
hub_category = category
|
||||||
|
)), hub_item_code)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
def make_opportunity(buyer_name, email_id):
|
||||||
|
buyer_name = "HUB-" + buyer_name
|
||||||
|
|
||||||
|
if not frappe.db.exists('Lead', {'email_id': email_id}):
|
||||||
|
lead = frappe.new_doc("Lead")
|
||||||
|
lead.lead_name = buyer_name
|
||||||
|
lead.email_id = email_id
|
||||||
|
lead.save(ignore_permissions=True)
|
||||||
|
|
||||||
|
o = frappe.new_doc("Opportunity")
|
||||||
|
o.enquiry_from = "Lead"
|
||||||
|
o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
|
||||||
|
o.save(ignore_permissions=True)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def make_rfq_and_send_opportunity(item, supplier):
|
||||||
|
supplier = make_supplier(supplier)
|
||||||
|
contact = make_contact(supplier)
|
||||||
|
item = make_item(item)
|
||||||
|
rfq = make_rfq(item, supplier, contact)
|
||||||
|
status = send_opportunity(contact)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'rfq': rfq,
|
||||||
|
'hub_document_created': status
|
||||||
|
}
|
||||||
|
|
||||||
|
def make_supplier(supplier):
|
||||||
|
# make supplier if not already exists
|
||||||
|
supplier = frappe._dict(json.loads(supplier))
|
||||||
|
|
||||||
|
if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
|
||||||
|
supplier_doc = frappe.get_doc({
|
||||||
|
'doctype': 'Supplier',
|
||||||
|
'supplier_name': supplier.supplier_name,
|
||||||
|
'supplier_group': supplier.supplier_group,
|
||||||
|
'supplier_email': supplier.supplier_email
|
||||||
|
}).insert()
|
||||||
|
else:
|
||||||
|
supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
|
||||||
|
|
||||||
|
return supplier_doc
|
||||||
|
|
||||||
|
def make_contact(supplier):
|
||||||
|
contact_name = get_default_contact('Supplier', supplier.supplier_name)
|
||||||
|
# make contact if not already exists
|
||||||
|
if not contact_name:
|
||||||
|
contact = frappe.get_doc({
|
||||||
|
'doctype': 'Contact',
|
||||||
|
'first_name': supplier.supplier_name,
|
||||||
|
'email_id': supplier.supplier_email,
|
||||||
|
'is_primary_contact': 1,
|
||||||
|
'links': [
|
||||||
|
{'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
|
||||||
|
]
|
||||||
|
}).insert()
|
||||||
|
else:
|
||||||
|
contact = frappe.get_doc('Contact', contact_name)
|
||||||
|
|
||||||
|
return contact
|
||||||
|
|
||||||
|
def make_item(item):
|
||||||
|
# make item if not already exists
|
||||||
|
item = frappe._dict(json.loads(item))
|
||||||
|
|
||||||
|
if not frappe.db.exists('Item', {'item_code': item.item_code}):
|
||||||
|
item_doc = frappe.get_doc({
|
||||||
|
'doctype': 'Item',
|
||||||
|
'item_code': item.item_code,
|
||||||
|
'item_group': item.item_group,
|
||||||
|
'is_item_from_hub': 1
|
||||||
|
}).insert()
|
||||||
|
else:
|
||||||
|
item_doc = frappe.get_doc('Item', item.item_code)
|
||||||
|
|
||||||
|
return item_doc
|
||||||
|
|
||||||
|
def make_rfq(item, supplier, contact):
|
||||||
|
# make rfq
|
||||||
|
rfq = frappe.get_doc({
|
||||||
|
'doctype': 'Request for Quotation',
|
||||||
|
'transaction_date': nowdate(),
|
||||||
|
'status': 'Draft',
|
||||||
|
'company': frappe.db.get_single_value('Hub Settings', 'company'),
|
||||||
|
'message_for_supplier': 'Please supply the specified items at the best possible rates',
|
||||||
|
'suppliers': [
|
||||||
|
{ 'supplier': supplier.name, 'contact': contact.name }
|
||||||
|
],
|
||||||
|
'items': [
|
||||||
|
{
|
||||||
|
'item_code': item.item_code,
|
||||||
|
'qty': 1,
|
||||||
|
'schedule_date': nowdate(),
|
||||||
|
'warehouse': item.default_warehouse or get_root_of("Warehouse"),
|
||||||
|
'description': item.description,
|
||||||
|
'uom': item.stock_uom
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}).insert()
|
||||||
|
|
||||||
|
rfq.save()
|
||||||
|
rfq.submit()
|
||||||
|
return rfq
|
||||||
|
|
||||||
|
def send_opportunity(contact):
|
||||||
|
# Make Hub Message on Hub with lead data
|
||||||
|
doc = {
|
||||||
|
'doctype': 'Lead',
|
||||||
|
'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
|
||||||
|
'email_id': frappe.db.get_single_value('Hub Settings', 'user')
|
||||||
|
}
|
||||||
|
|
||||||
|
args = frappe._dict(dict(
|
||||||
|
doctype='Hub Message',
|
||||||
|
reference_doctype='Lead',
|
||||||
|
data=json.dumps(doc),
|
||||||
|
user=contact.email_id
|
||||||
|
))
|
||||||
|
|
||||||
|
connection = get_hub_connection()
|
||||||
|
response = connection.insert('Hub Message', args)
|
||||||
|
|
||||||
|
return response.ok
|
||||||
@@ -41,7 +41,10 @@ erpnext.hub.Item = class Item extends SubPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_item(hub_item_code) {
|
get_item(hub_item_code) {
|
||||||
return hub.call('get_item_details', { hub_item_code });
|
return hub.call('get_item_details', {
|
||||||
|
hub_seller: hub.settings.company_email,
|
||||||
|
hub_item_code
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
render(item) {
|
render(item) {
|
||||||
@@ -313,4 +316,4 @@ erpnext.hub.Item = class Item extends SubPage {
|
|||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ erpnext.hub.PublishedProducts = class PublishedProducts extends SubPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_published_products() {
|
get_published_products() {
|
||||||
return hub.call('get_items_by_seller', { hub_seller: hub.settings.company_email });
|
return hub.call('get_items', { hub_seller: hub.settings.company_email });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ erpnext.hub.SearchPage = class SearchPage extends SubPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_items_by_keyword(keyword) {
|
get_items_by_keyword(keyword) {
|
||||||
return hub.call('get_items_by_keyword', { keyword });
|
return hub.call('get_items', { keyword });
|
||||||
}
|
}
|
||||||
|
|
||||||
render(items) {
|
render(items) {
|
||||||
@@ -31,4 +31,4 @@ erpnext.hub.SearchPage = class SearchPage extends SubPage {
|
|||||||
const html = get_item_card_container_html(items, title);
|
const html = get_item_card_container_html(items, title);
|
||||||
this.$wrapper.append(html);
|
this.$wrapper.append(html);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user