def register_webhooks(self): webhooks = ["orders/create", "orders/paid", "orders/fulfilled"] url = get_shopify_url('admin/webhooks.json', self) created_webhooks = [d.method for d in self.webhooks] for method in webhooks: if method in created_webhooks: continue session = get_request_session() try: d = session.post( url, data=json.dumps({ "webhook": { "topic": method, "address": get_webhook_address( connector_name='shopify_connection', method='store_request_data'), "format": "json" } }), headers=get_header(self)) d.raise_for_status() self.update_webhook_table(method, d.json()) except Exception as e: make_shopify_log(status="Warning", message=e.message, exception=False)
def register_webhooks(self): webhooks = ["orders/create", "orders/paid", "orders/fulfilled"] # url = get_shopify_url('admin/webhooks.json', self) created_webhooks = [d.method for d in self.webhooks] url = get_shopify_url('admin/api/2020-04/webhooks.json', self) for method in webhooks: session = get_request_session() try: res = session.post( url, data=json.dumps({ "webhook": { "topic": method, "address": get_webhook_address( connector_name='shopify_connection', method='store_request_data'), "format": "json" } }), headers=get_header(self)) res.raise_for_status() self.update_webhook_table(method, res.json()) except HTTPError as e: error_message = res.json().get('errors', e) make_shopify_log(status="Warning", exception=error_message, rollback=True) except Exception as e: make_shopify_log(status="Warning", exception=e, rollback=True)
def create_sales_order(shopify_order, shopify_settings, company=None): product_not_exists = [] customer = frappe.db.get_value( "Customer", {"shopify_customer_id": shopify_order.get("customer", {}).get("id")}, "name") so = frappe.db.get_value("Sales Order", {"shopify_order_id": shopify_order.get("id")}, "name") if not so: items = get_order_items(shopify_order.get("line_items"), shopify_settings) if not items: message = 'Following items are exists in order but relevant record not found in Product master' message += "\n" + ", ".join(product_not_exists) make_shopify_log(status="Error", exception=e, rollback=True) return '' so = frappe.get_doc({ "doctype": "Sales Order", "naming_series": shopify_settings.sales_order_series or "SO-Shopify-", "shopify_order_id": shopify_order.get("id"), "customer": customer or shopify_settings.default_customer, "delivery_date": nowdate(), "company": shopify_settings.company, "selling_price_list": shopify_settings.price_list, "ignore_pricing_rule": 1, "items": items, "taxes": get_order_taxes(shopify_order, shopify_settings), "apply_discount_on": "Grand Total", "discount_amount": get_discounted_amount(shopify_order), }) if company: so.update({"company": company, "status": "Draft"}) so.flags.ignore_mandatory = True so.save(ignore_permissions=True) so.submit() else: so = frappe.get_doc("Sales Order", so) frappe.db.commit() return so
def prepare_delivery_note(order, request_id=None): shopify_settings = frappe.get_doc("Shopify Settings") frappe.flags.request_id = request_id try: sales_order = get_sales_order(cstr(order['id'])) if sales_order: create_delivery_note(order, shopify_settings, sales_order) make_shopify_log(status="Success") except Exception: make_shopify_log(status="Error", exception=True)
def prepare_delivery_note(order, request_id=None): shopify_settings = frappe.get_doc("Shopify Settings") frappe.flags.request_id = request_id try: sales_order = get_sales_order(cstr(order['id'])) if sales_order: create_delivery_note(order, shopify_settings, sales_order) make_shopify_log(status="Success") except Exception: make_shopify_log(status="Error", exception=True)
def prepare_sales_invoice(order, request_id=None): frappe.set_user('Administrator') shopify_settings = frappe.get_doc("Shopify Settings") frappe.flags.request_id = request_id try: sales_order = get_sales_order(cstr(order['id'])) if sales_order: create_sales_invoice(order, shopify_settings, sales_order) make_shopify_log(status="Success") except Exception as e: make_shopify_log(status="Error", exception=e, rollback=True)
def sync_sales_order(order, request_id=None): shopify_settings = frappe.get_doc("Shopify Settings") frappe.flags.request_id = request_id if not frappe.db.get_value("Sales Order", filters={"shopify_order_id": cstr(order['id'])}): try: validate_customer(order, shopify_settings) validate_item(order, shopify_settings) create_order(order, shopify_settings) except Exception as e: make_shopify_log(status="Error", message=e.message, exception=False) else: make_shopify_log(status="Success")
def sync_sales_order(order, request_id=None, old_order_sync=False): frappe.set_user('Administrator') shopify_settings = frappe.get_doc("Shopify Settings") frappe.flags.request_id = request_id if not frappe.db.get_value("Sales Order", filters={"shopify_order_id": cstr(order['id'])}): try: validate_customer(order, shopify_settings) validate_item(order, shopify_settings) create_order(order, shopify_settings, old_order_sync=old_order_sync) except Exception as e: make_shopify_log(status="Error", exception=e) else: make_shopify_log(status="Success")
def create_sales_order(shopify_order, shopify_settings, company=None): product_not_exists = [] customer = frappe.db.get_value("Customer", {"shopify_customer_id": shopify_order.get("customer", {}).get("id")}, "name") so = frappe.db.get_value("Sales Order", {"shopify_order_id": shopify_order.get("id")}, "name") if not so: items = get_order_items(shopify_order.get("line_items"), shopify_settings) if not items: message = 'Following items are exists in order but relevant record not found in Product master' message += "\n" + ", ".join(product_not_exists) make_shopify_log(status="Error", message=message, exception=True) return '' so = frappe.get_doc({ "doctype": "Sales Order", "naming_series": shopify_settings.sales_order_series or "SO-Shopify-", "shopify_order_id": shopify_order.get("id"), "customer": customer or shopify_settings.default_customer, "delivery_date": nowdate(), "company": shopify_settings.company, "selling_price_list": shopify_settings.price_list, "ignore_pricing_rule": 1, "items": items, "taxes": get_order_taxes(shopify_order, shopify_settings), "apply_discount_on": "Grand Total", "discount_amount": get_discounted_amount(shopify_order), }) if company: so.update({ "company": company, "status": "Draft" }) so.flags.ignore_mandatory = True so.save(ignore_permissions=True) so.submit() else: so = frappe.get_doc("Sales Order", so) frappe.db.commit() return so
def unregister_webhooks(self): session = get_request_session() deleted_webhooks = [] for d in self.webhooks: url = get_shopify_url('admin/api/2021-04/webhooks/{0}.json'.format(d.webhook_id), self) try: res = session.delete(url, headers=get_header(self)) res.raise_for_status() deleted_webhooks.append(d) except HTTPError as e: error_message = res.json().get('errors', e) make_shopify_log(status="Warning", exception=error_message, rollback=True) except Exception as e: frappe.log_error(message=e, title='Shopify Webhooks Issue') for d in deleted_webhooks: self.remove(d)
def register_webhooks(self): webhooks = ["orders/create", "orders/paid", "orders/fulfilled"] url = get_shopify_url('admin/webhooks.json', self) created_webhooks = [d.method for d in self.webhooks] for method in webhooks: if method in created_webhooks: continue session = get_request_session() try: d = session.post(url, data=json.dumps({ "webhook": { "topic": method, "address": get_webhook_address(connector_name='shopify_connection', method='store_request_data'), "format": "json" } }), headers=get_header(self)) d.raise_for_status() self.update_webhook_table(method, d.json()) except Exception as e: make_shopify_log(status="Warning", message=e.message, exception=False)