Beispiel #1
0
def execute_bloomtrace_integration_request():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "Plant",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        plant = frappe.get_doc("Plant", integration_request.reference_docname)
        bloomtrace_plant = frappe_client.get_doc(
            "Plant", filters={"label": integration_request.reference_docname})
        try:
            if not bloomtrace_plant:
                insert_plant(plant, frappe_client)
            else:
                update_plant(plant, frappe_client, bloomtrace_plant)
            integration_request.error = ""
            integration_request.status = "Completed"
            integration_request.save(ignore_permissions=True)
        except Exception as e:
            integration_request.error = cstr(frappe.get_traceback())
            integration_request.status = "Failed"
            integration_request.save(ignore_permissions=True)
def execute_bloomtrace_integration_request():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "Delivery Note",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        delivery_note = frappe.get_doc("Delivery Note",
                                       integration_request.reference_docname)
        try:
            insert_transfer_template(delivery_note, frappe_client)
            integration_request.error = ""
            integration_request.status = "Completed"
            integration_request.save(ignore_permissions=True)
        except Exception as e:
            integration_request.error = cstr(e)
            integration_request.status = "Failed"
            integration_request.save(ignore_permissions=True)
Beispiel #3
0
def execute_bloomtrace_integration_request():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    site_url = get_host_name()
    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "User",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        user = frappe.get_doc("User", integration_request.reference_docname)
        try:
            insert_bloomstack_site_user(user, site_url, frappe_client)

            integration_request.error = ""
            integration_request.status = "Completed"
        except Exception as e:
            integration_request.error = cstr(frappe.get_traceback())
            integration_request.status = "Failed"

        integration_request.save(ignore_permissions=True)
def execute_bloomtrace_integration_request():
	frappe_client = get_bloomtrace_client()
	if not frappe_client:
		return

	pending_requests = frappe.get_all("Integration Request",
		filters={"status": ["IN", ["Queued", "Failed"]], "reference_doctype": "Stock Reconciliation", "integration_request_service": "BloomTrace"},
		order_by="creation ASC",
		limit=50)

	for request in pending_requests:
		integration_request = frappe.get_doc("Integration Request", request.name)
		stock_reconciliation = frappe.get_doc("Stock Reconciliation", integration_request.reference_docname)
		bloomtrace_uid_transaction_log = frappe_client.get_doc("UID Transaction Log", integration_request.reference_docname)
		try:
			if not bloomtrace_uid_transaction_log:
				insert_uid_transaction_log(stock_reconciliation, frappe_client)
			else:
				update_uid_transaction_log(stock_reconciliation, frappe_client)
			integration_request.error = ""
			integration_request.status = "Completed"
			integration_request.save(ignore_permissions=True)
		except Exception as e:
			integration_request.error = cstr(e)
			integration_request.status = "Failed"
			integration_request.save(ignore_permissions=True)
Beispiel #5
0
def execute_bloomtrace_integration_request_for_stock_entry():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "Stock Entry",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        stock_entry = frappe.get_doc("Stock Entry",
                                     integration_request.reference_docname)

        try:
            package = build_stock_payload(stock_entry)
            frappe_client.insert(package)

            integration_request.error = ""
            integration_request.status = "Completed"
        except Exception as e:
            integration_request.error = cstr(e)
            integration_request.status = "Failed"

        integration_request.save(ignore_permissions=True)
def sync_bloomtrace(compliance_settings, method):
    if not compliance_settings.is_compliance_enabled:
        return

    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    site_url = get_host_name()
    frappe_client.update({
        "doctype":
        "Bloomstack Site",
        "name":
        site_url,
        "metrc_url":
        compliance_settings.metrc_url,
        "metrc_user_key":
        compliance_settings.get_password("metrc_user_key"),
        "metrc_push_data":
        compliance_settings.metrc_push_data,
        "metrc_pull_data":
        compliance_settings.metrc_pull_data,
        "pull_incoming_transfer":
        compliance_settings.pull_incoming_transfer
    })
Beispiel #7
0
def sync_with_bloomtrace():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return
    site_url = get_host_name()

    clear_bloomstack_site_users(frappe_client, site_url)
    make_bloomstack_site_users()

    clear_bloomstack_site_licenses(frappe_client, site_url)
    make_bloomstack_site_licenses(frappe_client, site_url)
Beispiel #8
0
def fetch_license_types_from_bloomtrace():
	frappe_client = get_bloomtrace_client()
	if not frappe_client:
		frappe.throw(_("Bloomtrace Integration is disabled."))

	doc = frappe_client.get_doc("DocType", "License Info")

	for field in doc.get("fields", []):
		if field.get("fieldname") == "license_type":
			frappe.cache().hset("cannabis", "license_type", field.get("options"))

	return frappe.cache().hget("cannabis", "license_type")
Beispiel #9
0
def execute_bloomtrace_integration_request():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "Delivery Note",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        delivery_note = frappe.get_doc("Delivery Note",
                                       integration_request.reference_docname)

        try:
            error, status = "", "Completed"

            if integration_request.endpoint == "Package":
                if not delivery_note.is_return:
                    insert_delivery_payload(delivery_note, frappe_client)
                else:
                    error, status = "Delivery Note is marked as return", "Failed"

            if integration_request.endpoint == "Transfer":
                if delivery_note.lr_no or (delivery_note.estimated_arrival
                                           and delivery_note.departure_time):
                    # If delivery trip is created or estimated_arrival and departure_time is present, only then move forward to integrate with BloomTrace
                    insert_transfer_template(delivery_note, frappe_client)
                else:
                    error, status = "Delivery Trip / Estimated Departure / Estimated Arrival is missing", "Failed"

            integration_request.error = error
            integration_request.status = status
            integration_request.save(ignore_permissions=True)
        except Exception as e:
            integration_request.error = cstr(frappe.get_traceback())
            integration_request.status = "Failed"
            integration_request.save(ignore_permissions=True)
Beispiel #10
0
def sync_bloomtrace(compliance_settings, method):
    if not compliance_settings.is_compliance_enabled:
        return

    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    site_url = get_host_name()

    try:
        frappe_client.update({
            "doctype":
            "Bloomstack Site",
            "name":
            site_url,
            "metrc_user_key":
            compliance_settings.get_password("metrc_user_key")
        })
    except Exception as e:
        frappe.log_error(e)

    for company in compliance_settings.company:
        try:
            frappe_client.update({
                "doctype": "Bloomstack Company",
                "name": company.company,
                "push_item": company.push_item,
                "pull_item": company.pull_item,
                "push_package_tag": company.push_package_tag,
                "pull_package_tag": company.pull_package_tag,
                "pull_transfer": company.pull_transfer,
                "push_transfer": company.push_transfer,
                "pull_plant": company.pull_plant,
                "push_plant": company.push_plant,
                "pull_plant_batch": company.pull_plant_batch,
                "push_plant_batch": company.push_plant_batch,
                "pull_strain": company.pull_strain,
                "push_strain": company.push_strain,
                "pull_harvest": company.pull_harvest,
                "push_harvest": company.push_harvest,
                "pull_package": company.pull_package,
                "push_package": company.push_package
            })
        except Exception as e:
            frappe.log_error(e)
def create_bloomtrace_license(compliance_info, method):
	frappe_client = get_bloomtrace_client()
	if not frappe_client or compliance_info.synced_from_bloomtrace:
		return

	license_info = frappe_client.get_doc("License Info", compliance_info.license_number)

	if not license_info:
		frappe.msgprint(_("License Number not found in our database. Proceed with Caution."))
	else:
		compliance_info.status = license_info.get("status")
		compliance_info.license_issuer = license_info.get('issued_by')
		compliance_info.license_type = license_info.get('license_type')
		compliance_info.license_category = license_info.get('license_category')
		compliance_info.license_expiry_date = license_info.get('expiration_date')
		compliance_info.license_for = license_info.get('license_for')
		compliance_info.legal_name = license_info.get('legal_name')
		compliance_info.county = license_info.get('county')
		compliance_info.city = license_info.get('city')
		make_bloomstack_site_license(frappe_client, compliance_info, compliance_info.license_number, 'Active')
Beispiel #12
0
def get_all_licenses(filters, limit_start=0, limit_page_length=21):
	frappe_client = get_bloomtrace_client()
	if not frappe_client:
		frappe.throw(_("Bloomtrace Integration is disabled."))

	condition_map = {
		"zip_code": {
			"condition": "=",
			"pattern": "{}"
		},
		"license_type": {
			"condition": "=",
			"pattern": "{}"
		},
		"legal_name": {
			"condition": "like",
			"pattern": "%{}%"
		}
	}

	license_filters = {}
	filters = json.loads(filters)
	for key, value in filters.items():
		license_filters.update({
			key: [condition_map.get(key).get("condition"), condition_map.get(key).get("pattern").format(value)]
		})

	params = {
		"cmd": "bloomtrace.bloomtrace.doctype.license_info.license_info.get_licenses",
		"filters": license_filters,
		"fields": ["legal_name", "zip_code", "license_type", "county", "city", "license_number", "email_id", "expiration_date", "status"],
		"limit_start": limit_start,
		"limit_page_length": limit_page_length
	}

	try:
		r = frappe_client.post_request(params)
		return r
	except Exception as e:
		frappe.log_error(e)
		frappe.throw(_("Couldn't connect to BloomTrace."))
Beispiel #13
0
def execute_bloomtrace_integration_request_for_delivery_note():
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    pending_requests = frappe.get_all("Integration Request",
                                      filters={
                                          "status":
                                          ["IN", ["Queued", "Failed"]],
                                          "reference_doctype":
                                          "Delivery Note",
                                          "integration_request_service":
                                          "BloomTrace"
                                      },
                                      order_by="creation ASC",
                                      limit=50)

    for request in pending_requests:
        integration_request = frappe.get_doc("Integration Request",
                                             request.name)
        delivery_note = frappe.get_doc("Delivery Note",
                                       integration_request.reference_docname)

        for item in delivery_note.items:
            if not frappe.db.get_value(
                    "Item", item.item_code,
                    "is_compliance_item") or not item.package_tag:
                continue

            try:
                package = build_delivery_payload(delivery_note, item)
                frappe_client.insert(package)

                integration_request.error = ""
                integration_request.status = "Completed"
            except Exception as e:
                integration_request.error = cstr(e)
                integration_request.status = "Failed"

            integration_request.save(ignore_permissions=True)
Beispiel #14
0
def sync_bloomtrace(compliance_settings, method):
    if not compliance_settings.is_compliance_enabled:
        return

    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    site_url = get_host_name()
    frappe_client.update({"doctype": "Bloomstack Site", "name": site_url})

    for company in compliance_settings.company:
        frappe_client.update({
            "doctype":
            "Bloomstack Company",
            "name":
            company.company,
            "metrc_push_data":
            company.push_data,
            "metrc_pull_data":
            company.pull_data,
            "pull_incoming_transfer":
            company.pull_incoming_transfer
        })
Beispiel #15
0
def get_all_licenses(page_number, per_page, filters):
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return

    key_map = {
        "zip": {
            "key": "zip_code",
            "operator": "=",
            "pattern": "{}"
        },
        "licenseType": {
            "key": "license_type",
            "operator": "=",
            "pattern": "{}"
        },
        "search": {
            "key": "legal_name",
            "operator": "like",
            "pattern": "%{}%"
        }
    }

    and_filters = {}
    filters = json.loads(filters)
    for f in filters:
        if filters[f] == "":
            continue

        and_filters[key_map[f]["key"]] = [
            key_map[f]["operator"], key_map[f]["pattern"].format(filters[f])
        ]

    fields = [
        "legal_name", "zip_code", "license_type", "status", "county", "city",
        "license_number", "email_id", "expiration_date", "business_structure",
        "business_owner", "license_for"
    ]

    limit_start = (int(page_number) - 1) * int(per_page)
    license_info = frappe_client.get_list("License Info",
                                          fields=fields,
                                          filters=and_filters,
                                          limit_start=limit_start,
                                          limit_page_length=per_page)

    total_licenses = frappe_client.post_api("frappe.client.get_count", {
        "doctype": "License Info",
        "filters": and_filters
    })

    license_doc = frappe_client.get_doc("DocType", "License Info")
    for field in license_doc["fields"]:
        if field["fieldname"] == 'license_type':
            license_types = field["options"].splitlines()

    return {
        "license_info": license_info,
        "total_count": total_licenses,
        "license_types": license_types
    }