a525d12f69
- using a simple multiselect currently
112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
from __future__ import unicode_literals
|
|
import frappe, requests, json
|
|
from frappe.utils import now
|
|
from frappe.frappeclient import FrappeClient
|
|
from frappe.desk.form.load import get_attachments
|
|
|
|
@frappe.whitelist()
|
|
def call_hub_method(method, params=None):
|
|
connection = get_hub_connection()
|
|
|
|
if type(params) == unicode:
|
|
params = json.loads(params)
|
|
|
|
params.update({
|
|
'cmd': 'hub.hub.api.' + method
|
|
})
|
|
|
|
response = connection.post_request(params)
|
|
return response
|
|
|
|
@frappe.whitelist()
|
|
def get_valid_items(search_value=''):
|
|
items = frappe.get_list(
|
|
'Item',
|
|
fields=["*"],
|
|
filters={
|
|
'item_name': ['like', '%' + search_value + '%'],
|
|
'publish_in_hub': 0
|
|
},
|
|
order_by="modified desc"
|
|
)
|
|
|
|
valid_items = filter(lambda x: x.image and x.description, items)
|
|
|
|
def prepare_item(item):
|
|
item.source_type = "local"
|
|
item.attachments = get_attachments('Item', item.item_code)
|
|
return item
|
|
|
|
valid_items = map(lambda x: prepare_item(x), valid_items)
|
|
|
|
return valid_items
|
|
|
|
@frappe.whitelist()
|
|
def publish_selected_items(items_to_publish):
|
|
items_to_publish = json.loads(items_to_publish)
|
|
if not len(items_to_publish):
|
|
frappe.throw('No items to publish')
|
|
|
|
for item in items_to_publish:
|
|
item_code = item.get('item_code')
|
|
frappe.db.set_value('Item', item_code, 'publish_in_hub', 1)
|
|
|
|
frappe.get_doc({
|
|
'doctype': 'Hub Tracked Item',
|
|
'item_code': item_code,
|
|
'hub_category': item.get('hub_category'),
|
|
'image_list': item.get('image_list')
|
|
}).insert()
|
|
|
|
try:
|
|
hub_settings = frappe.get_doc('Hub Settings')
|
|
item_sync_preprocess()
|
|
hub_settings.sync()
|
|
except Exception as e:
|
|
frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 0)
|
|
frappe.throw(e)
|
|
|
|
def item_sync_preprocess():
|
|
hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
|
|
|
|
response = call_hub_method('add_hub_seller_activity', {
|
|
'hub_seller': hub_seller,
|
|
'activity_details': json.dumps({
|
|
'subject': 'Publishing items',
|
|
'status': 'Success'
|
|
})
|
|
})
|
|
|
|
if response:
|
|
frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 1)
|
|
return response
|
|
else:
|
|
frappe.throw('Unable to update remote activity')
|
|
|
|
def item_sync_postprocess(sync_details):
|
|
hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
|
|
|
|
response = call_hub_method('add_hub_seller_activity', {
|
|
'hub_seller': hub_seller,
|
|
'activity_details': json.dumps({
|
|
'subject': 'Publishing items:' + sync_details['status'],
|
|
'content': json.dumps(sync_details['stats'])
|
|
})
|
|
})
|
|
|
|
if response:
|
|
frappe.db.set_value('Hub Settings', 'Hub Settings', 'sync_in_progress', 0)
|
|
frappe.db.set_value('Hub Settings', 'Hub Settings', 'last_sync_datetime', frappe.utils.now())
|
|
else:
|
|
frappe.throw('Unable to update remote activity')
|
|
|
|
def get_hub_connection():
|
|
if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
|
|
hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
|
|
hub_connection = hub_connector.get_connection()
|
|
return hub_connection.connection
|
|
|
|
# read-only connection
|
|
hub_connection = FrappeClient(frappe.conf.hub_url)
|
|
return hub_connection
|