blob: 87d4e1b4adc4d197abdb52193ce84300b68fe94a [file] [log] [blame]
Prateeksha Singh3aed5c22018-08-01 17:32:13 +05301from __future__ import unicode_literals
2import frappe, requests, json
3from frappe.utils import now, nowdate
4from frappe.frappeclient import FrappeClient
5
6@frappe.whitelist()
7def get_item_favourites(start=0, limit=20, fields=["*"], order_by=None):
8 doctype = 'Hub Item'
9 hub_settings = frappe.get_doc('Hub Settings')
10 item_names_str = hub_settings.get('custom_data') or '[]'
11 item_names = json.loads(item_names_str)
12 filters = json.dumps({
13 'hub_item_code': ['in', item_names]
14 })
15 return get_list(doctype, start, limit, fields, filters, order_by)
16
17@frappe.whitelist()
18def update_wishlist_item(item_name, remove=0):
19 remove = int(remove)
20 hub_settings = frappe.get_doc('Hub Settings')
21 data = hub_settings.get('custom_data')
22 if not data or not json.loads(data):
23 data = '[]'
24 hub_settings.custom_data = data
25 hub_settings.save()
26
27 item_names_str = data
28 item_names = json.loads(item_names_str)
29 if not remove and item_name not in item_names:
30 item_names.append(item_name)
31 if remove and item_name in item_names:
32 item_names.remove(item_name)
33
34 item_names_str = json.dumps(item_names)
35
36 hub_settings.custom_data = item_names_str
37 hub_settings.save()
38
39@frappe.whitelist()
40def update_category(hub_item_code, category):
41 connection = get_hub_connection()
42
43 # args = frappe._dict(dict(
44 # doctype='Hub Category',
45 # hub_category_name=category
46 # ))
47 # response = connection.insert('Hub Category', args)
48
49 response = connection.update('Hub Item', frappe._dict(dict(
50 doctype='Hub Item',
51 hub_category = category
52 )), hub_item_code)
53
54 return response
55
56def make_opportunity(buyer_name, email_id):
57 buyer_name = "HUB-" + buyer_name
58
59 if not frappe.db.exists('Lead', {'email_id': email_id}):
60 lead = frappe.new_doc("Lead")
61 lead.lead_name = buyer_name
62 lead.email_id = email_id
63 lead.save(ignore_permissions=True)
64
65 o = frappe.new_doc("Opportunity")
66 o.enquiry_from = "Lead"
67 o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
68 o.save(ignore_permissions=True)
69
70@frappe.whitelist()
71def make_rfq_and_send_opportunity(item, supplier):
72 supplier = make_supplier(supplier)
73 contact = make_contact(supplier)
74 item = make_item(item)
75 rfq = make_rfq(item, supplier, contact)
76 status = send_opportunity(contact)
77
78 return {
79 'rfq': rfq,
80 'hub_document_created': status
81 }
82
83def make_supplier(supplier):
84 # make supplier if not already exists
85 supplier = frappe._dict(json.loads(supplier))
86
87 if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
88 supplier_doc = frappe.get_doc({
89 'doctype': 'Supplier',
90 'supplier_name': supplier.supplier_name,
91 'supplier_group': supplier.supplier_group,
92 'supplier_email': supplier.supplier_email
93 }).insert()
94 else:
95 supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
96
97 return supplier_doc
98
99def make_contact(supplier):
100 contact_name = get_default_contact('Supplier', supplier.supplier_name)
101 # make contact if not already exists
102 if not contact_name:
103 contact = frappe.get_doc({
104 'doctype': 'Contact',
105 'first_name': supplier.supplier_name,
106 'email_id': supplier.supplier_email,
107 'is_primary_contact': 1,
108 'links': [
109 {'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
110 ]
111 }).insert()
112 else:
113 contact = frappe.get_doc('Contact', contact_name)
114
115 return contact
116
117def make_item(item):
118 # make item if not already exists
119 item = frappe._dict(json.loads(item))
120
121 if not frappe.db.exists('Item', {'item_code': item.item_code}):
122 item_doc = frappe.get_doc({
123 'doctype': 'Item',
124 'item_code': item.item_code,
125 'item_group': item.item_group,
126 'is_item_from_hub': 1
127 }).insert()
128 else:
129 item_doc = frappe.get_doc('Item', item.item_code)
130
131 return item_doc
132
133def make_rfq(item, supplier, contact):
134 # make rfq
135 rfq = frappe.get_doc({
136 'doctype': 'Request for Quotation',
137 'transaction_date': nowdate(),
138 'status': 'Draft',
139 'company': frappe.db.get_single_value('Hub Settings', 'company'),
140 'message_for_supplier': 'Please supply the specified items at the best possible rates',
141 'suppliers': [
142 { 'supplier': supplier.name, 'contact': contact.name }
143 ],
144 'items': [
145 {
146 'item_code': item.item_code,
147 'qty': 1,
148 'schedule_date': nowdate(),
149 'warehouse': item.default_warehouse or get_root_of("Warehouse"),
150 'description': item.description,
151 'uom': item.stock_uom
152 }
153 ]
154 }).insert()
155
156 rfq.save()
157 rfq.submit()
158 return rfq
159
160def send_opportunity(contact):
161 # Make Hub Message on Hub with lead data
162 doc = {
163 'doctype': 'Lead',
164 'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
165 'email_id': frappe.db.get_single_value('Hub Settings', 'user')
166 }
167
168 args = frappe._dict(dict(
169 doctype='Hub Message',
170 reference_doctype='Lead',
171 data=json.dumps(doc),
172 user=contact.email_id
173 ))
174
175 connection = get_hub_connection()
176 response = connection.insert('Hub Message', args)
177
178 return response.ok