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)
Example #5
0
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)
Example #7
0
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")
Example #9
0
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
Example #10
0
	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)
Example #11
0
	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)