From 0a60d1cd964900dd02e81deb8e8cd0db3ab4512d Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Sun, 19 Aug 2018 19:39:00 +0530 Subject: [PATCH] [hub] Publishing Dialog, Sync category - Hub Category selection - Recycled --- erpnext/hub_node/api.py | 12 +- .../item_to_hub_item/__init__.py | 25 ++-- .../hub_tracked_item/hub_tracked_item.json | 74 +++++++++- erpnext/public/js/hub/pages/publish.js | 126 ++++++++++++++---- 4 files changed, 198 insertions(+), 39 deletions(-) diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py index 559e22a2c8..86ad031b0c 100644 --- a/erpnext/hub_node/api.py +++ b/erpnext/hub_node/api.py @@ -42,11 +42,19 @@ def get_valid_items(search_value=''): def publish_selected_items(items_to_publish): items_to_publish = json.loads(items_to_publish) if not len(items_to_publish): - return + frappe.throw('No items to publish') - for item_code in 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'), + # 'images': item.get('images') + }).insert() + try: hub_settings = frappe.get_doc('Hub Settings') item_sync_preprocess() diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py index 9445e3a8dc..3f1352099c 100644 --- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py +++ b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py @@ -1,19 +1,24 @@ -import io, base64, urllib, os +import frappe, io, base64, urllib, os def pre_process(doc): - file_path = doc.image - file_name = os.path.basename(file_path) + # file_path = doc.image + # file_name = os.path.basename(file_path) - if file_path.startswith('http'): - url = file_path - file_path = os.path.join('/tmp', file_name) - urllib.urlretrieve(url, file_path) + # if file_path.startswith('http'): + # url = file_path + # file_path = os.path.join('/tmp', file_name) + # urllib.urlretrieve(url, file_path) - with io.open(file_path, 'rb') as f: - doc.image = base64.b64encode(f.read()) + # with io.open(file_path, 'rb') as f: + # doc.image = base64.b64encode(f.read()) - doc.image_file_name = file_name + # doc.image_file_name = file_name + + cached_details = frappe.get_doc('Hub Tracked Item', doc.item_code) + + if cached_details: + doc.hub_category = cached_details.hub_category return doc diff --git a/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json b/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json index 063c87817c..7a0bc2a251 100644 --- a/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json +++ b/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json @@ -3,6 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, + "autoname": "field:item_code", "beta": 0, "creation": "2018-03-18 09:33:50.267762", "custom": 0, @@ -14,6 +15,7 @@ "fields": [ { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -41,6 +43,70 @@ "search_index": 0, "set_only_once": 0, "translatable": 0, + "unique": 1 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "hub_category", + "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": "Hub Category", + "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, + "fieldname": "images", + "fieldtype": "Long Text", + "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": "Images", + "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 } ], @@ -49,12 +115,12 @@ "hide_toolbar": 0, "idx": 0, "image_view": 0, - "in_create": 1, + "in_create": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-03-18 09:34:01.757713", + "modified": "2018-08-19 19:30:01.449904", "modified_by": "Administrator", "module": "Hub Node", "name": "Hub Tracked Item", @@ -63,7 +129,6 @@ "permissions": [ { "amend": 0, - "apply_user_permissions": 0, "cancel": 0, "create": 1, "delete": 1, @@ -89,5 +154,6 @@ "sort_field": "modified", "sort_order": "DESC", "track_changes": 1, - "track_seen": 0 + "track_seen": 0, + "track_views": 0 } \ No newline at end of file diff --git a/erpnext/public/js/hub/pages/publish.js b/erpnext/public/js/hub/pages/publish.js index a76f9467c6..035278bbcd 100644 --- a/erpnext/public/js/hub/pages/publish.js +++ b/erpnext/public/js/hub/pages/publish.js @@ -3,13 +3,17 @@ import { get_item_card_container_html } from '../components/items_container'; import { get_local_item_card_html } from '../components/item_card'; import { make_search_bar } from '../components/search_bar'; + erpnext.hub.Publish = class Publish extends SubPage { make_wrapper() { super.make_wrapper(); - this.items_to_publish = []; + this.items_to_publish = {}; this.unpublished_items = []; this.fetched_items = []; + this.cache = erpnext.hub.cache.items_to_publish; + this.cache = []; + frappe.realtime.on("items-sync", (data) => { this.$wrapper.find('.progress-bar').css('width', data.progress_percent+'%'); @@ -58,7 +62,7 @@ erpnext.hub.Publish = class Publish extends SubPage { } get_publishing_header() { - const title_html = `${__('Select Products to Publish')}`; + const title_html = `
${__('Select Products to Publish')}
`; const subtitle_html = `

${__(`Only products with an image, description and category can be published. @@ -71,6 +75,9 @@ erpnext.hub.Publish = class Publish extends SubPage { `; return $(` +

${__('Selected Products')}
+
+
${title_html} @@ -87,27 +94,97 @@ erpnext.hub.Publish = class Publish extends SubPage { .then(this.refresh.bind(this)) }); + this.selected_items_container = this.$wrapper.find('.selected-items'); + + this.$current_selected_card = null; + + this.make_publishing_dialog(); + this.$wrapper.on('click', '.hub-card', (e) => { const $target = $(e.currentTarget); - $target.toggleClass('active'); + const item_code = $target.attr('data-id'); + this.show_publishing_dialog_for_item(item_code); - // Get total items - const total_items = this.$wrapper.find('.hub-card.active').length; + this.$current_selected_card = $target.parent(); - let button_label; - if (total_items > 0) { - const more_than_one = total_items > 1; - button_label = __('Publish {0} item{1}', [total_items, more_than_one ? 's' : '']); - } else { - button_label = __('Publish'); - } + this.update_selected_items_count() - this.$wrapper.find('.publish-items') - .text(button_label) - .prop('disabled', total_items === 0); }); } + make_publishing_dialog() { + this.publishing_dialog = new frappe.ui.Dialog({ + title: __('Edit Publishing Details'), + fields: [ + { + "label": "Item Code", + "fieldname": "item_code", + "fieldtype": "Data", + "read_only": 1 + }, + { + "label": "Hub Category", + "fieldname": "hub_category", + "fieldtype": "Autocomplete", + "options": ["Agriculture", "Books", "Chemicals", "Clothing", + "Electrical", "Electronics", "Energy", "Fashion", "Food and Beverage", + "Health", "Home", "Industrial", "Machinery", "Packaging and Printing", + "Sports", "Transportation" + ], + "reqd": 1 + } + ], + primary_action_label: __('Set Details'), + primary_action: () => { + const values = this.publishing_dialog.get_values(true); + this.items_to_publish[values.item_code] = values; + + this.$current_selected_card.appendTo(this.selected_items_container); + this.$current_selected_card.find('.hub-card').toggleClass('active'); + + this.publishing_dialog.hide(); + }, + secondary_action: () => { + const values = this.publishing_dialog.get_values(true); + this.items_to_publish[values.item_code] = values; + } + }); + } + + show_publishing_dialog_for_item(item_code) { + let item_data = this.items_to_publish[item_code]; + + if(!item_data) { item_data = { item_code }; } + + this.publishing_dialog.clear(); + this.publishing_dialog.set_values(item_data); + this.publishing_dialog.show(); + } + + update_selected_items_count() { + const total_items = this.$wrapper.find('.hub-card.active').length; + + let button_label; + if (total_items > 0) { + const more_than_one = total_items > 1; + button_label = __('Publish {0} item{1}', [total_items, more_than_one ? 's' : '']); + } else { + button_label = __('Publish'); + } + + this.$wrapper.find('.publish-items') + .text(button_label) + .prop('disabled', total_items === 0); + } + + add_item_to_publish() { + // + } + + remove_item_from_publish() { + // + } + show_message(message) { const $message = $(`

@@ -211,19 +288,22 @@ erpnext.hub.Publish = class Publish extends SubPage { item_codes_to_publish.push($(this).attr("data-id")); }); - this.unpublished_items = this.fetched_items.filter(item => { - return !item_codes_to_publish.includes(item.item_code); - }); + // this.unpublished_items = this.fetched_items.filter(item => { + // return !item_codes_to_publish.includes(item.item_code); + // }); - const items_to_publish = this.fetched_items.filter(item => { - return item_codes_to_publish.includes(item.item_code); - }); - this.items_to_publish = items_to_publish; + // const items_to_publish = this.fetched_items.filter(item => { + // return item_codes_to_publish.includes(item.item_code); + // }); + + // this.items_to_publish = items_to_publish; + + const items_data_to_publish = item_codes_to_publish.map(item_code => this.items_to_publish[item_code]) return frappe.call( 'erpnext.hub_node.api.publish_selected_items', { - items_to_publish: item_codes_to_publish + items_to_publish: items_data_to_publish } ) }